lib.rs 53 lignes · 2156 octets
//! ActivityPub identity federation for Rustwarden (RFCs 0001–0025).
//!
//! Provides the discovery layer (WebFinger, Person actor, NodeInfo),
//! AP-native authentication flow, cross-instance team invitations,
//! lifecycle signals, the outbound delivery worker, and HTTP signatures.
//!
//! Extracted from `rustwarden-core::fediverse` per
//! `docs/plans/2026-05-11-extract-rustwarden-fediverse-crate.md`.
//! Consumers add this crate as an optional Cargo dependency rather than
//! flipping a `rustwarden-core` feature flag.

/// Person actor handler with `Accept` content negotiation.
pub mod actor;
/// HTTP routes for the AP-native authentication flow (RFC 0013).
pub mod auth_routes;
/// Federation configuration loaded from environment variables.
pub mod config;
/// Federation-specific error type, convertible to
/// [`AppError`](rustwarden_core::error::AppError).
pub mod error;
/// HTTP client abstraction used by the remote-identity resolver.
pub mod fetcher;
/// Mastodon-compatible HTTP signatures (draft-cavage RSA-SHA256, RFC 0015).
pub mod http_signatures;
/// `POST /inbox` handler dispatching AP lifecycle activities (RFC 0012).
pub mod inbox;
/// HTTP routes for cross-instance team invitations (RFC 0014).
pub mod invite_routes;
/// SeaORM entity models for federation tables.
pub mod models;
/// NodeInfo discovery + 2.1 handlers.
pub mod nodeinfo;
/// Pluggable runtime observer for federation events (RFC 0028).
pub mod observer;
/// `LocalUserResolver` trait + SeaORM-backed default implementation.
pub mod resolver;
/// Router builder: assembles the federation Axum router.
pub mod routes;
/// Federation business-logic services.
pub mod services;
/// Shared state injected into federation handlers.
pub mod state;
/// JSON types serialised on federation endpoints.
pub mod types;
/// WebFinger handler (RFC 7033).
pub mod webfinger;

pub use config::{FediverseConfig, FediverseConfigError};
pub use error::FediverseError;
pub use fetcher::{RemoteFetcher, UnconfiguredFetcher};
pub use observer::{FediverseEventObserver, NoopFediverseObserver};
pub use resolver::{LocalUserResolver, UserSummary};
pub use state::FediverseState;