feat: Sprint 6 — disappearing messages, group info, account deletion
- Disappearing messages: ttlSecs param on enqueue/batchEnqueue RPCs, expires_at column (migration 007), server GC deletes expired messages, /disappear command with human-friendly duration parsing (30m, 1h, 1d) - Group info: /group-info shows type, members, MLS epoch; /rename renames conversations; /members resolves usernames via resolveIdentity - Account deletion: deleteAccount @23 RPC with transactional purge of all user data (deliveries, keys, channels), session invalidation, KT log preserved for auditability; /delete-account with confirmation - Added epoch() accessor to GroupMember, enqueue_with_ttl client helper All 35 server + 71 core + 14 E2E tests pass.
This commit is contained in:
@@ -23,7 +23,7 @@ interface NodeService {
|
||||
# Returns the monotonically increasing per-inbox sequence number assigned to this message,
|
||||
# plus a cryptographic delivery proof (96 bytes: 32-byte SHA-256 preimage || 64-byte Ed25519
|
||||
# signature). Old clients that do not read deliveryProof are unaffected (Cap'n Proto optional).
|
||||
enqueue @2 (recipientKey :Data, payload :Data, channelId :Data, version :UInt16, auth :Auth) -> (seq :UInt64, deliveryProof :Data);
|
||||
enqueue @2 (recipientKey :Data, payload :Data, channelId :Data, version :UInt16, auth :Auth, ttlSecs :UInt32) -> (seq :UInt64, deliveryProof :Data);
|
||||
|
||||
# Fetch and drain all queued payloads for the recipient.
|
||||
# limit: max number of messages to return (0 = fetch all).
|
||||
@@ -80,7 +80,7 @@ interface NodeService {
|
||||
fetchHybridKeys @16 (identityKeys :List(Data), auth :Auth) -> (keys :List(Data));
|
||||
|
||||
# Enqueue the same payload to multiple recipients in a single round-trip.
|
||||
batchEnqueue @17 (recipientKeys :List(Data), payload :Data, channelId :Data, version :UInt16, auth :Auth) -> (seqs :List(UInt64));
|
||||
batchEnqueue @17 (recipientKeys :List(Data), payload :Data, channelId :Data, version :UInt16, auth :Auth, ttlSecs :UInt32) -> (seqs :List(UInt64));
|
||||
|
||||
# Create a 1:1 channel between the caller and the given peer. Returns a 16-byte channelId (UUID).
|
||||
# Both members can enqueue/fetch for this channel; recipientKey must be the other member.
|
||||
@@ -116,6 +116,13 @@ interface NodeService {
|
||||
# length : maximum number of bytes to return (capped at 256 KB).
|
||||
# Returns the requested chunk, the total blob size, and its MIME type.
|
||||
downloadBlob @22 (auth :Auth, blobId :Data, offset :UInt64, length :UInt32) -> (chunk :Data, totalSize :UInt64, mimeType :Text);
|
||||
|
||||
# Permanently delete the authenticated user's account and all associated data.
|
||||
# Requires an identity-bound session (OPAQUE login). Removes user record,
|
||||
# identity keys, key packages, hybrid keys, queued messages, and channel memberships.
|
||||
# A tombstone entry is added to the KT log for auditability.
|
||||
# All active sessions for the identity are invalidated.
|
||||
deleteAccount @23 (auth :Auth) -> (success :Bool);
|
||||
}
|
||||
|
||||
struct Auth {
|
||||
|
||||
Reference in New Issue
Block a user