use jamjet_a2a_proto::A2aAdapter;
use jamjet_agents::AgentRegistry;
use jamjet_audit::{AuditBackend, AuditEnricher};
use jamjet_mcp::McpAdapter;
use jamjet_protocols::{anp::AnpAdapter, ProtocolRegistry};
use jamjet_state::backend::StateBackend;
use jamjet_state::{SqliteBackend, TenantId};
use std::sync::Arc;
#[derive(Clone)]
pub struct AppState {
pub backend: Arc<dyn StateBackend>,
pub sqlite: Arc<SqliteBackend>,
pub agents: Arc<dyn AgentRegistry>,
pub audit: Arc<dyn AuditBackend>,
pub enricher: Arc<AuditEnricher>,
pub protocols: ProtocolRegistry,
}
impl AppState {
pub fn backend_for(&self, tenant_id: &TenantId) -> Arc<dyn StateBackend> {
Arc::new(self.sqlite.for_tenant(tenant_id.clone()))
}
}
pub fn default_protocol_registry() -> ProtocolRegistry {
let mut reg = ProtocolRegistry::new();
reg.register(
"mcp",
Arc::new(McpAdapter::new()),
vec!["http://", "https://"],
);
reg.register(
"a2a",
Arc::new(A2aAdapter::new()),
vec![] as Vec<String>,
);
reg.register("anp", Arc::new(AnpAdapter::new()), vec!["did:"]);
reg
}