/** * @file sdp-utils.ts * @description SDP generation/parsing for a WebRTC data-channel m-section. * @module sdp/sdp-utils * * Emits the standard application m-line with the SCTP-over-DTLS profile and * conveys transport addresses through ICE candidates (not the c=/m= lines, per * the WebRTC JSEP/SDP rules). This is what browsers expect. */ /** ICE credentials. */ export interface IceCredentials { usernameFragment: string; password: string; } /** DTLS certificate fingerprint. */ export interface Fingerprint { algorithm: string; value: string; } /** A candidate descriptor as accepted by {@link buildSdp}. */ export interface CandidateInput { sdp?: string; candidate?: string; } /** Options accepted by {@link buildSdp}. */ export interface BuildSdpOptions { kind?: 'offer' | 'answer'; iceUfrag: string; icePwd: string; fingerprint?: Fingerprint; setup?: string; candidates?: CandidateInput[]; sctpPort?: number; maxMessageSize?: number; } /** Options accepted by {@link generateOffer} / {@link generateAnswer}. */ export interface GenerateOptions extends BuildSdpOptions { } /** Parsed ICE parameters. */ export interface IceParameters { usernameFragment: string | null; password: string | null; } /** Parsed DTLS parameters. */ export interface DtlsParameters { role: string; fingerprints: Fingerprint[]; setup?: string; } /** Parsed SCTP parameters. */ export interface SctpParameters { port: number; maxMessageSize: number; } /** A parsed ICE candidate. */ export interface ParsedCandidate { candidate: string; foundation: string; component: number; protocol: string; priority: number; address: string; port: number; type: string; } /** * Generate ICE credentials (ufrag >= 4 chars, pwd >= 22 chars per RFC 8445). * @returns {{usernameFragment:string, password:string}} */ export declare function generateIceCredentials(): IceCredentials; /** * Build the SDP for a data-channel-only session. * @param {Object} o * @param {'offer'|'answer'} o.kind * @param {string} o.iceUfrag * @param {string} o.icePwd * @param {{algorithm:string,value:string}} o.fingerprint - DTLS cert fingerprint * @param {string} o.setup - 'actpass' | 'active' | 'passive' * @param {Array<{sdp?:string,candidate?:string}>} [o.candidates] * @param {number} [o.sctpPort=5000] * @param {number} [o.maxMessageSize=262144] * @returns {string} */ export declare function buildSdp(o: BuildSdpOptions): string; export declare function generateOffer(opts: GenerateOptions): string; export declare function generateAnswer(opts: GenerateOptions): string; /** Parse ICE ufrag/pwd. */ export declare function parseIceParameters(sdp: string): IceParameters; /** Parse DTLS setup role + fingerprints. */ export declare function parseDtlsParameters(sdp: string): DtlsParameters; /** Parse SCTP port / max message size. */ export declare function parseSctpParameters(sdp: string): SctpParameters; /** * Parse ICE candidate lines into structured objects. * @param {string} sdp * @returns {Array<{candidate:string,foundation:string,component:number,protocol:string,priority:number,address:string,port:number,type:string}>} */ export declare function parseCandidates(sdp: string): ParsedCandidate[]; /** * Parse a single "candidate:..." string. * @param {string} str */ export declare function parseCandidateLine(str: string): ParsedCandidate | null;