Skip to main content

offline_protocol/
lib.rs

1//! Main protocol engine for the Offline Protocol SDK.
2//!
3//! This crate ties together all the components (core, transport, router, reliability)
4//! into a single easy-to-use API.
5//!
6//! All code in this crate is 100% safe Rust with no unsafe blocks.
7
8#![deny(unsafe_code)]
9#![warn(missing_docs)]
10
11pub mod config;
12pub mod constants;
13pub mod error;
14pub mod events;
15#[cfg(feature = "file-store")]
16pub mod file_store;
17pub mod file_transfer;
18mod group_mesh;
19mod media_envelope;
20pub mod mls;
21pub mod mls_observability;
22pub mod protocol;
23pub mod protocol_state_storage;
24pub mod storage_conformance;
25/// The conformance suite for [`mls::MlsStorage`] implementations, beside
26/// the protocol-state one, so a Rust host verifies both backends from here.
27pub use offline_protocol_mls::storage_conformance as mls_storage_conformance;
28pub mod telemetry;
29pub mod transport_manager;
30pub mod visualization;
31
32pub use config::{
33    CustodyConfig, DataConfig, EncryptionConfig, GroupConfig, OverflowPolicy, PendingQueueConfig,
34    ProtocolConfig, SecurityConfig, CUSTODY_MIN_BYTES_PER_DEPOSITOR, DEFAULT_CUSTODY_HOLD_MS,
35    DEFAULT_PENDING_TTL_MS,
36};
37pub use error::{Error, EstablishmentState, Result, SessionStateError};
38pub use events::{
39    DecryptionFailureCode, DocRemovedBy, DorsEscalationPhase, DorsEscalationReasonCode,
40    DorsReasonCode, Event, EventCallback, GroupInfoMember, PresenceSource, PresenceStatus,
41    UserGroupSummary,
42};
43#[cfg(feature = "file-store")]
44pub use file_store::{
45    account_storage_namespace, EnvStoreKey, FileProtocolStateStorage, FileStoreError,
46    FileStorePair, SealedFileMlsStorage, SealedState, StaticStoreKey, StoreKeyError,
47    StoreKeyProvider,
48};
49pub use group_mesh::{
50    GroupRichReadiness, GroupSendOptions, RelaySyncState, MAX_RELAY_CAPABILITIES,
51    MAX_RELAY_CAPABILITY_TOKEN_BYTES,
52};
53/// Replicated-document types.
54///
55/// Re-exported so callers never name `offline-protocol-data` directly: the
56/// value model and the size constants are part of this crate's surface, and
57/// the engine behind them is not part of anyone's.
58#[cfg(feature = "data")]
59pub use offline_protocol_data::{DataValue, DOC_SIZE_WARN_BYTES, MAX_DOC_BYTES, MAX_VALUE_BYTES};
60pub use offline_protocol_services::MeshServices;
61pub use protocol::custody::{CustodyRefusal, CustodyStats};
62pub use protocol::mesh_relay::{MeshRelayConfig, MeshRelayStats};
63pub use protocol::{GatewayCarrier, MediaSendOptions, OfflineProtocol, SendMessageOptions};
64pub use protocol_state_storage::{
65    ProtocolStateError, ProtocolStateResult, ProtocolStateStorage,
66    MAX_PROTOCOL_STATE_RECORD_TRANSFER_BYTES,
67};
68pub use transport_manager::TransportManager;
69pub use visualization::{
70    MessageStats, NetworkLink, NetworkNode, NetworkTopology, NetworkVisualizer, NodeRole,
71};
72
73#[cfg(test)]
74mod dors_integration_tests;
75#[cfg(test)]
76mod group_mesh_tests;
77#[cfg(test)]
78mod test_identity;
79
80// Re-export reliability types for configuration and telemetry frames
81pub use offline_protocol_reliability::{
82    AckConfig, DeduplicatorConfig, DeduplicatorMode, DeduplicatorStats, RetryConfig,
83    RetryQueueStats,
84};
85
86// Re-export MLS types for end-to-end encryption
87pub use mls::{
88    EncryptedMessage, GroupId, GroupInfo, KeyPackageBundle, MlsManager, MlsStorage, WelcomeMessage,
89};
90pub use mls_observability::{
91    DecryptionFailureKind, MlsErrorCategory, MlsEventEmitter, MlsLifecycleEvent,
92    MlsOperationContext, NoopMlsEventEmitter,
93};
94#[cfg(feature = "telemetry-pipe")]
95pub use telemetry::{AppState, TelemetryHost, TelemetryOs, TelemetryPipe, TelemetryStats};
96pub use telemetry::{
97    DeviceCapabilitySnapshot, MetricsFrame, MlsVerbosity, NoopTelemetrySink, RoutingDecision,
98    RoutingPhase, RoutingReasonCode, TelemetryConfig, TelemetryRecord, TelemetrySink,
99    TransportStateEvent,
100};