v1.0.1

vsecoder
Sat, 18 Apr 2026 16:41:31 +0200

Relay hardening:

envelope.ID recomputed canonically on mailbox.Store (replay protection)

SentAt restamped with server time on mailbox.Store (no client time-travel)

/relay/send documented as non-E2E (seals with relay key — prefer /relay/broadcast)

Client (out of tree, client-app/):

Switch send path from /api/relay/send to /relay/broadcast (correct E2E)

Normalise GET /relay/inbox wire schema: sent_at → timestamp, base64 → hex,
parse {items} wrapper

Stable dedup using server-assigned envelope.id (was "undefined" collapse)

Read AsyncStorage message cache on chat open so history survives past
mailbox TTL