syntax = "proto3"; package qpc.v1; // Delivery service: enqueue, fetch, peek, ack, batch (6 methods). // Method IDs: 200-205. message Envelope { uint64 seq = 1; bytes data = 2; } message EnqueueRequest { bytes recipient_key = 1; bytes payload = 2; bytes channel_id = 3; uint32 ttl_secs = 4; // Client-generated idempotency key (16 bytes, UUID v7). // Server deduplicates enqueue requests with the same message_id within a TTL window. bytes message_id = 5; } message EnqueueResponse { uint64 seq = 1; bytes delivery_proof = 2; // True if this was a duplicate enqueue (message_id already seen). bool duplicate = 3; } message FetchRequest { bytes recipient_key = 1; bytes channel_id = 2; uint32 limit = 3; // Device ID for multi-device scoping. When set, the server builds // a composite queue key (identity_key + device_id). Empty = bare key. bytes device_id = 4; } message FetchResponse { repeated Envelope payloads = 1; } message FetchWaitRequest { bytes recipient_key = 1; bytes channel_id = 2; uint64 timeout_ms = 3; uint32 limit = 4; bytes device_id = 5; } message FetchWaitResponse { repeated Envelope payloads = 1; } message PeekRequest { bytes recipient_key = 1; bytes channel_id = 2; uint32 limit = 3; bytes device_id = 4; } message PeekResponse { repeated Envelope payloads = 1; } message AckRequest { bytes recipient_key = 1; bytes channel_id = 2; uint64 seq_up_to = 3; bytes device_id = 4; } message AckResponse {} message BatchEnqueueRequest { repeated bytes recipient_keys = 1; bytes payload = 2; bytes channel_id = 3; uint32 ttl_secs = 4; // Client-generated idempotency key (16 bytes, UUID v7). bytes message_id = 5; } message BatchEnqueueResponse { repeated uint64 seqs = 1; }