featherChat commit 064a730 implements: - CallSignal WireMessage variant with Offer/Answer/ICE/Hangup/Reject/Ringing/Busy - POST /v1/auth/validate endpoint returning fingerprint + alias WZP can now: - Send SignalMessage as JSON in CallSignal.payload through FC's E2E channel - Verify FC bearer tokens on the relay via the validate endpoint Next: WZP-S-2 (relay auth) and WZP-S-3 (signaling bridge in client) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
4.5 KiB
4.5 KiB
WZP Integration Tasks
Based on featherChat commit 65f6390 — FUTURE_TASKS.md with WZP integration items.
Status Key
- DONE = implemented and tested
- PARTIAL = code exists but not wired into live path
- TODO = not started
WZP-Side Tasks (our responsibility)
WZP-S-1. HKDF Salt/Info String Alignment — DONE
- HKDF info strings aligned:
warzone-ed25519/warzone-x25519 - Salt: both use
None(featherChat convertsb""→None). No mismatch. - Commit:
ac3b997
WZP-S-2. Accept featherChat Bearer Token on Relay — TODO (HIGH)
- Add
--auth-urlflag to wzp-relay (e.g.,--auth-url https://chat.example.com/v1/auth/validate) - On new QUIC connection: expect first signaling message to contain a bearer token
- Relay calls featherChat's
/v1/auth/validateto verify - Reject connection if token invalid
- Files:
wzp-relay/src/main.rs, newwzp-relay/src/auth.rs
WZP-S-3. Signaling Bridge Mode — TODO (HIGH)
- Client should be able to send/receive
SignalMessagethrough featherChat's WebSocket - New
WireMessage::CallSignalvariant wraps opaque JSONSignalMessage - Client connects to featherChat WS, sends CallOffer, receives CallAnswer
- Then uses the relay address from the answer to connect QUIC for media
- Files: new
wzp-client/src/featherchat.rs
WZP-S-4. Room Access Control — TODO (MEDIUM)
- Relay should verify room membership before allowing join
- Room name should be opaque hash (not human-readable group name)
room_id = SHA-256("featherchat-group:" + group_name)[:16]- Files:
wzp-relay/src/room.rs
WZP-S-5. Wire Crypto Handshake into Live Path — PARTIAL
handshake.rsexists in both client and relay- Not used in CLI live mode, file mode, or web bridge
- Need to make handshake mandatory before media flows
- Files:
wzp-client/src/cli.rs,wzp-web/src/main.rs
WZP-S-6. Web Bridge + featherChat Web Client — TODO (MEDIUM)
- featherChat has a WASM web client (warzone-wasm crate)
- Web bridge should accept featherChat session tokens
- Share authentication with featherChat web login
- Files:
wzp-web/src/main.rs
WZP-S-7. Publish wzp-proto for featherChat — TODO (LOW)
- featherChat needs
wzp_proto::SignalMessagetype forCallSignalvariant - Option A: publish wzp-proto to private registry
- Option B: featherChat uses JSON schema, WZP serializes to JSON
- Option C: git submodule / path dependency
WZP-S-8. CLI Seed Input — TODO (LOW)
- Add
--seed <hex>or--mnemonic <words>flag to wzp-client - Derive identity from seed, use for handshake
- Files:
wzp-client/src/cli.rs
WZP-S-9. Fix Hardcoded Assumptions — TODO
- No auth on relay — fix via WZP-S-2
- Room names from SNI visible to network — fix via WZP-S-4 (use hashed names)
- No signaling before media — fix via WZP-S-5
- Self-signed TLS — acceptable for relay-to-relay; need real certs for web
- No codec negotiation in web bridge — fix: add profile exchange in WS
- No connection to featherChat key registry — fix via WZP-S-2/S-3
featherChat-Side Tasks (their responsibility, we support)
WZP-FC-1. Add CallSignal WireMessage variant — DONE (v0.0.21, 064a730)
CallSignal { id, sender_fingerprint, signal_type, payload, target }CallSignalType: Offer, Answer, IceCandidate, Hangup, Reject, Ringing, Busy- payload field is String — WZP puts JSON-serialized SignalMessage here
- target field: peer fingerprint (1:1) or room name (group)
WZP-FC-2. Call state management + sled tree — 1-2d
WZP-FC-3. WS handler for call signaling — 0.5d
WZP-FC-4. Auth token validation endpoint — DONE (v0.0.21, 064a730)
POST /v1/auth/validate { "token": "..." }- Returns:
{ "valid": true, "fingerprint": "...", "alias": "..." }
WZP-FC-5. Group-to-room mapping — 1d
WZP-FC-6. Presence/online status API — 0.5-2d
WZP-FC-7. Missed call notifications — 0.5d
WZP-FC-8. Cross-project identity verification test — 2-4h (CRITICAL)
WZP-FC-9. HKDF salt investigation — VERIFIED: no mismatch
WZP-FC-10. Web bridge shared auth — 1-2d
Integration Priority Order
- WZP-FC-8 + WZP-S-1 — Cross-project identity test (DONE on WZP side)
- WZP-S-8 — CLI seed input (enables identity testing)
- WZP-FC-1 — CallSignal WireMessage (featherChat side)
- WZP-S-3 — Signaling bridge in client
- WZP-FC-4 + WZP-S-2 — Auth tokens (both sides)
- WZP-S-5 — Wire handshake into live path
- WZP-FC-5 + WZP-S-4 — Group-to-room mapping + access control
- WZP-FC-2/3 — Call state management
- WZP-S-6 + WZP-FC-10 — Web integration