cipher/public/js
maverick 67367d5e83 Add WebRTC E2E voice/video calling (1:1)
- call.js: CallManager — RTCPeerConnection lifecycle, offer/answer/ICE/bye state
  machine, mute/camera toggles, hangup. STUN (Google + Cloudflare) for NAT.
- Signaling (SDP + ICE) rides the existing E2E message relay as {k:"call"}
  payloads — never seen by the server in clear. Media is P2P, encrypted by
  WebRTC's mandatory DTLS-SRTP, so audio/video is end-to-end and never hits R2.
- app.js: call buttons (📞/🎥) in DM headers, incoming/outgoing/connected call
  overlay with video tiles + PiP, mute/camera/hangup, ring pulse, duration timer.
- Verified signaling state machine (mocked WebRTC): both sides reach 'connected'.
  Group calls not supported yet (needs SFU). SW cache v5->v6.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-22 13:21:52 +10:00
..
vendor Add multi-device key sync: QR device linking + encrypted recovery code 2026-07-22 13:04:46 +10:00
accounts.js Fix: namespace encrypted store per-account so two accounts can coexist on one browser 2026-07-22 02:48:00 +10:00
api.js Encrypted group chats + major UI redesign 2026-07-22 13:16:16 +10:00
app.js Add WebRTC E2E voice/video calling (1:1) 2026-07-22 13:21:52 +10:00
call.js Add WebRTC E2E voice/video calling (1:1) 2026-07-22 13:21:52 +10:00
crypto.js Add multi-device key sync: QR device linking + encrypted recovery code 2026-07-22 13:04:46 +10:00
store.js Encrypted group chats + major UI redesign 2026-07-22 13:16:16 +10:00