Diagram: Group Call Flow (Audio/Video)¶
Canonical doc:
../group-call.md
sequenceDiagram
autonumber
participant Host as Host (Device)
participant App as iOS App
participant API as Backend API
participant STOMP as STOMP
participant P1 as Participant 1
participant P2 as Participant 2
Host->>App: Start group call
App->>API: Fetch public keys via KT (P1, P2)
API-->>App: Raw KT Response (Public Keys + Merkle Proofs)
Note over App: Verify KT proofs + local trust cache
Note over App: Warn if trusted key set changed
Note over App: Prepare initial session key<br/>Encrypt per participant (P-256 preferred / RSA fallback)
App->>API: POST /app/api/call/start-v2
API-->>App: CallRecord(callId, livekitToken, ...)
API->>P1: VoIP push signal: call_created
API->>P2: VoIP push signal: call_created
API->>STOMP: call_created fallback/sync signal
P1->>P1: Decrypt session key
P2->>P2: Decrypt session key
P1->>P1: Answer CallKit and connect to LiveKit
P2->>P2: Answer CallKit and connect to LiveKit
P1->>API: GET /app/api/call/{callId}/participants
P2->>API: GET /app/api/call/{callId}/participants
Note over Host,P2: Encrypted media starts (AES-256-GCM)