use crate::a2a::handler::A2aState;
use crate::auth::JwtAuth;
use crate::tenant_rate_limiter::TenantRateLimiter;
use std::sync::Arc;
use vex_chora::AuthorityBridge;
use vex_llm::{LlmProvider, Metrics};
use vex_persist::StorageBackend;
use vex_queue::{QueueBackend, WorkerPool};
#[derive(Clone)]
pub struct AppState {
jwt_auth: JwtAuth,
rate_limiter: Arc<TenantRateLimiter>,
metrics: Arc<Metrics>,
db: Arc<dyn StorageBackend>,
evolution_store: Arc<dyn vex_persist::EvolutionStore>,
queue: Arc<WorkerPool<dyn QueueBackend>>,
a2a_state: Arc<A2aState>,
llm: Arc<dyn LlmProvider>,
router: Option<Arc<vex_router::Router>>,
gate: Arc<dyn vex_runtime::Gate>,
orchestrator: Arc<vex_runtime::Orchestrator<dyn vex_llm::LlmProvider>>,
bridge: Arc<AuthorityBridge>,
}
impl AppState {
#[allow(clippy::too_many_arguments)]
pub fn new(
jwt_auth: JwtAuth,
rate_limiter: Arc<TenantRateLimiter>,
metrics: Arc<Metrics>,
db: Arc<dyn StorageBackend>,
evolution_store: Arc<dyn vex_persist::EvolutionStore>,
queue: Arc<WorkerPool<dyn QueueBackend>>,
a2a_state: Arc<A2aState>,
llm: Arc<dyn LlmProvider>,
router: Option<Arc<vex_router::Router>>,
gate: Arc<dyn vex_runtime::Gate>,
orchestrator: Arc<vex_runtime::Orchestrator<dyn vex_llm::LlmProvider>>,
bridge: Arc<AuthorityBridge>,
) -> Self {
Self {
jwt_auth,
rate_limiter,
metrics,
db,
evolution_store,
queue,
a2a_state,
llm,
router,
gate,
orchestrator,
bridge,
}
}
pub fn jwt_auth(&self) -> &JwtAuth {
&self.jwt_auth
}
pub fn rate_limiter(&self) -> Arc<TenantRateLimiter> {
self.rate_limiter.clone()
}
pub fn metrics(&self) -> Arc<Metrics> {
self.metrics.clone()
}
pub fn db(&self) -> Arc<dyn StorageBackend> {
self.db.clone()
}
pub fn evolution_store(&self) -> Arc<dyn vex_persist::EvolutionStore> {
self.evolution_store.clone()
}
pub fn queue(&self) -> Arc<WorkerPool<dyn QueueBackend>> {
self.queue.clone()
}
pub fn a2a_state(&self) -> Arc<A2aState> {
self.a2a_state.clone()
}
pub fn llm(&self) -> Arc<dyn LlmProvider> {
self.llm.clone()
}
pub fn router(&self) -> Option<Arc<vex_router::Router>> {
self.router.clone()
}
pub fn gate(&self) -> Arc<dyn vex_runtime::Gate> {
self.gate.clone()
}
pub fn orchestrator(&self) -> Arc<vex_runtime::Orchestrator<dyn vex_llm::LlmProvider>> {
self.orchestrator.clone()
}
pub fn bridge(&self) -> Arc<AuthorityBridge> {
self.bridge.clone()
}
}