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;
15pub mod file_transfer;
16mod group_mesh;
17mod media_envelope;
18pub mod mls;
19pub mod mls_observability;
20pub mod protocol;
21pub mod protocol_state_storage;
22pub mod telemetry;
23pub mod transport_manager;
24pub mod visualization;
25
26pub use config::{
27    EncryptionConfig, GroupConfig, OverflowPolicy, PendingQueueConfig, ProtocolConfig,
28    SecurityConfig, DEFAULT_PENDING_TTL_MS,
29};
30pub use error::{Error, EstablishmentState, Result, SessionStateError};
31pub use events::{
32    DecryptionFailureCode, DorsEscalationPhase, DorsEscalationReasonCode, DorsReasonCode, Event,
33    EventCallback, GroupInfoMember, PresenceSource, PresenceStatus, UserGroupSummary,
34};
35pub use group_mesh::{GroupRichReadiness, GroupSendOptions, RelaySyncState};
36pub use offline_protocol_services::MeshServices;
37pub use protocol::mesh_relay::{MeshRelayConfig, MeshRelayStats};
38pub use protocol::{MediaSendOptions, OfflineProtocol, SendMessageOptions};
39pub use protocol_state_storage::{
40    ProtocolStateError, ProtocolStateResult, ProtocolStateStorage,
41    MAX_PROTOCOL_STATE_RECORD_TRANSFER_BYTES,
42};
43pub use transport_manager::TransportManager;
44pub use visualization::{
45    MessageStats, NetworkLink, NetworkNode, NetworkTopology, NetworkVisualizer, NodeRole,
46};
47
48#[cfg(test)]
49mod dors_integration_tests;
50#[cfg(test)]
51mod group_mesh_tests;
52#[cfg(test)]
53mod test_identity;
54
55// Re-export reliability types for configuration and telemetry frames
56pub use offline_protocol_reliability::{
57    AckConfig, DeduplicatorConfig, DeduplicatorMode, DeduplicatorStats, RetryConfig,
58    RetryQueueStats,
59};
60
61// Re-export MLS types for end-to-end encryption
62pub use mls::{
63    EncryptedMessage, GroupId, GroupInfo, KeyPackageBundle, MlsManager, MlsStorage, WelcomeMessage,
64};
65pub use mls_observability::{
66    DecryptionFailureKind, MlsErrorCategory, MlsEventEmitter, MlsLifecycleEvent,
67    MlsOperationContext, NoopMlsEventEmitter,
68};
69pub use telemetry::{
70    DeviceCapabilitySnapshot, MetricsFrame, MlsVerbosity, NoopTelemetrySink, RoutingDecision,
71    RoutingPhase, RoutingReasonCode, TelemetryConfig, TelemetryRecord, TelemetrySink,
72    TransportStateEvent,
73};