pub mod admin; pub mod auth; pub mod config; pub mod db; pub mod dev_happyview; pub mod dns; pub mod domain; pub mod domain_middleware; pub mod error; pub mod event_log; pub mod external_auth; pub mod jetstream; pub mod labeler; pub mod lexicon; pub mod moderation; pub mod lua; pub mod oauth; pub mod plugin; pub mod profile; pub mod rate_limit; pub mod record_handler; pub mod record_refs; pub mod repo; pub mod resolve; pub mod server; pub mod xrpc; use auth::oauth_store::{DbSessionStore, DbStateStore}; use config::Config; use db::DatabaseBackend; use dns::NativeDnsResolver; use labeler::definitions::LabelDefinitionRegistry; use labeler::emitter::EmittedLabelTx; use labeler::identity::SharedLabelerIdentity; use lexicon::LexiconRegistry; use plugin::official_registry::{RegistryConfig, SharedRegistry}; use rate_limit::RateLimiter; use std::sync::Arc; use tokio::sync::watch; use atrium_identity::did::CommonDidResolver; use atrium_identity::handle::AtprotoHandleResolver; use atrium_oauth::DefaultHttpClient; pub type HappyViewOAuthClient = atrium_oauth::OAuthClient< DbStateStore, DbSessionStore, CommonDidResolver, AtprotoHandleResolver, >; pub type HappyViewOAuthSession = atrium_oauth::OAuthSession< DefaultHttpClient, CommonDidResolver, AtprotoHandleResolver, DbSessionStore, >; #[derive(Clone)] pub struct AppState { pub config: Config, pub http: reqwest::Client, pub db: sqlx::AnyPool, pub db_backend: DatabaseBackend, pub domain_cache: domain::DomainCache, pub lexicons: LexiconRegistry, pub collections_tx: watch::Sender>, pub labeler_subscriptions_tx: watch::Sender<()>, /// This AppView's labeler identity. `None` until an admin calls /// `POST /admin/labeler/init`. Reloaded after init/rotate/delete. pub labeler_identity: SharedLabelerIdentity, /// Notifies any task that cares (e.g. eventual `subscribeLabels` handlers /// that need to reflect a key rotation) that the identity changed. pub labeler_identity_tx: watch::Sender<()>, /// In-memory cache of label-value definitions this labeler emits. pub labeler_definitions: LabelDefinitionRegistry, /// Broadcast sender for live `subscribeLabels` subscribers. Emitter sends; /// per-connection subscribers `subscribe()` to receive. pub emitted_label_tx: EmittedLabelTx, pub rate_limiter: Arc, pub oauth: Arc, pub oauth_state_store: DbStateStore, pub cookie_key: axum_extra::extract::cookie::Key, pub plugin_registry: Arc, pub wasm_runtime: Arc, pub attestation_signer: Option>, pub official_registry: SharedRegistry, pub official_registry_config: RegistryConfig, } impl axum::extract::FromRef for axum_extra::extract::cookie::Key { fn from_ref(state: &AppState) -> Self { state.cookie_key.clone() } }