Skip to main content

cairn_mod/
lib.rs

1//! Cairn — lightweight Rust-native ATProto labeler.
2//!
3//! This crate is a library surface (`cairn_mod`) plus a binary
4//! (`cairn`) for running a standalone labeler. The library modules
5//! mirror the §10 architecture of the [design doc][cairn-design]:
6//! storage, writer (single-writer task pattern, §F5), signing
7//! (§6.2), auth (§5.2), HTTP routers (§F3/F4/F11/F12), and CLI.
8//!
9//! Start points:
10//! - [`server::router`] for the subscribeLabels + queryLabels
11//!   public surface.
12//! - [`admin_router`] for the `tools.cairn.admin.*` endpoints.
13//! - [`serve::run`] for the full binary lifecycle.
14//!
15//! [cairn-design]: https://github.com/skydeval/cairn-mod/blob/main/cairn-design.md
16
17#![forbid(unsafe_code)]
18#![warn(missing_docs)]
19
20pub mod audit;
21pub mod auth;
22pub mod cli;
23pub mod config;
24pub mod credential_file;
25pub mod error;
26pub mod label;
27pub mod labels;
28pub mod moderation;
29pub mod moderators;
30pub mod pds_admin;
31pub mod policy;
32pub mod report;
33pub mod serve;
34pub mod server;
35pub mod service_record;
36pub mod signing;
37pub mod signing_key;
38pub mod storage;
39pub mod writer;
40pub mod xrpc_gateway;
41
42pub use auth::{AuthConfig, AuthContext, AuthError, VerifiedCaller};
43pub use config::Config;
44pub use error::{Error, Result};
45pub use label::Label;
46pub use labels::emission::{ActionForEmission, LabelDraft};
47pub use labels::policy::{LabelEmissionPolicy, LabelSpec};
48pub use moderation::policy::StrikePolicy;
49pub use moderation::reasons::ReasonVocabulary;
50pub use policy::automation::{
51    DEFAULT_POLICY_REASON_CODE, PolicyAutomationPolicy, PolicyMode, PolicyRule,
52    SYNTHETIC_POLICY_ACTOR_DID,
53};
54pub use policy::evaluator::{
55    ActionForPolicyEval, PendingActionForPolicyEval, PendingResolution, resolve_firing_rule,
56};
57pub use server::{
58    AdminConfig, CreateReportConfig, RetentionConfig, SubscribeConfig, admin_router,
59    create_report_router, current_retention_floor, did_document_router, health_router,
60    public_router, router as subscribe_router, serve, wellknown_router,
61};
62pub use signing::{canonical_bytes, label_to_lex_value_with_sig, sign_label, verify_label};
63pub use signing_key::SigningKey;
64pub use writer::{
65    ApplyLabelRequest, ConfirmPendingActionRequest, ConfirmedPendingAction,
66    DismissPendingActionRequest, DismissedPendingAction, LabelEvent, NegateLabelRequest,
67    RecordActionRequest, RecordedAction, RevokeActionRequest, RevokedAction, SweepBatchResult,
68    SweepRequest, SweepResult, WriterHandle, spawn as spawn_writer, spawn_with_pds_admin,
69};