A lexicon-driven AppView for ATProto.
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596pub 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<DefaultHttpClient>, AtprotoHandleResolver<NativeDnsResolver, DefaultHttpClient>,>;
pub type HappyViewOAuthSession = atrium_oauth::OAuthSession< DefaultHttpClient, CommonDidResolver<DefaultHttpClient>, AtprotoHandleResolver<NativeDnsResolver, DefaultHttpClient>, 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<Vec<String>>, 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<RateLimiter>, pub oauth: Arc<auth::OAuthClientRegistry>, pub oauth_state_store: DbStateStore, pub cookie_key: axum_extra::extract::cookie::Key, pub plugin_registry: Arc<plugin::PluginRegistry>, pub wasm_runtime: Arc<plugin::WasmRuntime>, pub attestation_signer: Option<Arc<plugin::attestation::AttestationSigner>>, pub official_registry: SharedRegistry, pub official_registry_config: RegistryConfig,}
impl axum::extract::FromRef<AppState> for axum_extra::extract::cookie::Key { fn from_ref(state: &AppState) -> Self { state.cookie_key.clone() }}