pub mod admin; pub mod auth; pub mod config; pub mod db; pub mod delegation; 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 feature_flags; pub mod feature_middleware; pub mod jetstream; pub mod labeler; pub mod lexicon; pub mod lua; pub mod oauth; pub mod plugin; pub mod profile; pub mod proxy_config; pub mod rate_limit; pub mod record_handler; pub mod record_refs; pub mod repo; pub mod resolve; pub mod server; pub mod spaces; pub mod xrpc; use auth::oauth_store::{DbSessionStore, DbStateStore}; use config::Config; use db::DatabaseBackend; use dns::NativeDnsResolver; 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<()>, 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, pub proxy_config: Arc>, } impl axum::extract::FromRef for axum_extra::extract::cookie::Key { fn from_ref(state: &AppState) -> Self { state.cookie_key.clone() } }