/** * The SFU makes every offer, so the only m-lines that can carry our media are the ones it * opened to receive on. A transceiver made here has no place in its offer and never sends. */ interface SfuSlot { mid: string; kind: string; } /** The m-lines the SFU takes media on, in offer order: recvonly, or sendrecv once it forwards on one. */ export declare function sfuSlots(pc: RTCPeerConnection): SfuSlot[]; /** * Puts a role's first track on a slot the SFU offered that no other sender holds. Null means no * slot is free or it can't be claimed here, and the caller falls back to `addTrack`. */ export declare function publishOnSfuSlot(pc: RTCPeerConnection, track: MediaStreamTrack, stream: MediaStream, held: readonly (RTCRtpSender | null | undefined)[]): RTCRtpSender | null; export {};