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 storage_conformance;
23pub mod telemetry;
24pub mod transport_manager;
25pub mod visualization;
26
27pub use config::{
28    DataConfig, EncryptionConfig, GroupConfig, OverflowPolicy, PendingQueueConfig, ProtocolConfig,
29    SecurityConfig, DEFAULT_PENDING_TTL_MS,
30};
31pub use error::{Error, EstablishmentState, Result, SessionStateError};
32pub use events::{
33    DecryptionFailureCode, DorsEscalationPhase, DorsEscalationReasonCode, DorsReasonCode, Event,
34    EventCallback, GroupInfoMember, PresenceSource, PresenceStatus, UserGroupSummary,
35};
36pub use group_mesh::{
37    GroupRichReadiness, GroupSendOptions, RelaySyncState, MAX_RELAY_CAPABILITIES,
38    MAX_RELAY_CAPABILITY_TOKEN_BYTES,
39};
40/// Replicated-document types.
41///
42/// Re-exported so callers never name `offline-protocol-data` directly: the
43/// value model and the size constants are part of this crate's surface, and
44/// the engine behind them is not part of anyone's.
45#[cfg(feature = "data")]
46pub use offline_protocol_data::{DataValue, DOC_SIZE_WARN_BYTES, MAX_DOC_BYTES, MAX_VALUE_BYTES};
47pub use offline_protocol_services::MeshServices;
48pub use protocol::mesh_relay::{MeshRelayConfig, MeshRelayStats};
49pub use protocol::{GatewayCarrier, MediaSendOptions, OfflineProtocol, SendMessageOptions};
50pub use protocol_state_storage::{
51    ProtocolStateError, ProtocolStateResult, ProtocolStateStorage,
52    MAX_PROTOCOL_STATE_RECORD_TRANSFER_BYTES,
53};
54pub use transport_manager::TransportManager;
55pub use visualization::{
56    MessageStats, NetworkLink, NetworkNode, NetworkTopology, NetworkVisualizer, NodeRole,
57};
58
59#[cfg(test)]
60mod dors_integration_tests;
61#[cfg(test)]
62mod group_mesh_tests;
63#[cfg(test)]
64mod test_identity;
65
66// Re-export reliability types for configuration and telemetry frames
67pub use offline_protocol_reliability::{
68    AckConfig, DeduplicatorConfig, DeduplicatorMode, DeduplicatorStats, RetryConfig,
69    RetryQueueStats,
70};
71
72// Re-export MLS types for end-to-end encryption
73pub use mls::{
74    EncryptedMessage, GroupId, GroupInfo, KeyPackageBundle, MlsManager, MlsStorage, WelcomeMessage,
75};
76pub use mls_observability::{
77    DecryptionFailureKind, MlsErrorCategory, MlsEventEmitter, MlsLifecycleEvent,
78    MlsOperationContext, NoopMlsEventEmitter,
79};
80#[cfg(feature = "telemetry-pipe")]
81pub use telemetry::{AppState, TelemetryHost, TelemetryOs, TelemetryPipe, TelemetryStats};
82pub use telemetry::{
83    DeviceCapabilitySnapshot, MetricsFrame, MlsVerbosity, NoopTelemetrySink, RoutingDecision,
84    RoutingPhase, RoutingReasonCode, TelemetryConfig, TelemetryRecord, TelemetrySink,
85    TransportStateEvent,
86};