Functionality §
- All messages sent in a channel are eventually received by all participants.
- Senders are notified when messages are acknowledged by other participants.
- Missing messages are automatically detected.
- Missing messages are automatically retrieved via store hash queries.
- Messages are causally ordered using Lamport timestamps.
- Outbound messages that are not acknowledged are automatically resent.
- API delegates message encryption and decryption to consumer-provided implementations.
- When encryption is applied, the SDS envelope is encrypted.
- Missing messages re-emission is requested from other channel participants.
- Large messages are segmented to fit transport constraints.
- A different encryption mechanism can be applied for sync message (than the one for content messages).
- Outbound messages passed on the API are queued, and persisted locally, when the rate limit is exceeded.
- Ephemeral outbound messages passed on the API are dropped when the rate limit is approached or exceeded.
- Outbound messages retries are queued when the rate limit is approached or exceeded.
Usability §
- Sane defaults with pre-configured parameters for common scenarios.
- Single cohesive interface wrapping SDS, store queries, segmentation, and rate limits.
- Event-driven model exposing message lifecycle through intuitive events.
- The API is agnostic to the encryption mechanism used.
- Rate limit is configurable at channel creation.
- Rate limit “approached” state is configurable at channel creation.
Reliability §
- Eventual message consistency guarantees for all participants.
- Segments tracked independently and reassembled before delivery.
- Timeout mechanism for lost message dependencies.
- Configurable sync, retry, and query intervals.
- Final encoded routed message stays below 150 KB routing layer limit.
Supportability §
- Sender ID unique per participant and persisted between sessions.
- Resource exhaustion limits implemented.