$candidate {candidate, sdpMid, sdpMLineIndex} */ public function addIceCandidate(string $peerId, array $candidate): void; /** * Start recording a peer's inbound audio to $path (e.g. an Opus/WAV file the * app then attaches to a transmission row). */ public function startRecording(string $peerId, string $path): void; /** Stop an in-progress recording for a peer (if any). */ public function stopRecording(string $peerId): void; /** * Route a peer's audio to/from another peer (party-to-party / group calls). * For an N-party room this is called per pair the engine must forward. */ public function connectPeers(string $peerA, string $peerB): void; /** * Bridge a peer to an external realtime endpoint (e.g. OpenAI Realtime), * hiding the provider from the browser. Options are engine-specific * (model, voice, instructions, api credentials handle, ...). * * @param array $options */ public function bridge(string $peerId, array $options): void; /** Close and clean up a peer (stops recording/bridging, frees the RTC state). */ public function close(string $peerId): void; }