diff --git a/packages/js/src/Modules/Verto/util/interfaces.ts b/packages/js/src/Modules/Verto/util/interfaces.ts index 510de9ad..8399ef57 100644 --- a/packages/js/src/Modules/Verto/util/interfaces.ts +++ b/packages/js/src/Modules/Verto/util/interfaces.ts @@ -23,6 +23,7 @@ export interface IVertoOptions { debug?: boolean; debugOutput?: 'socket' | 'file'; + prefetchIceCandidates?: boolean; } export interface SubscribeParams { channels?: string[]; diff --git a/packages/js/src/Modules/Verto/webrtc/Peer.ts b/packages/js/src/Modules/Verto/webrtc/Peer.ts index fecaa320..5b1b5168 100644 --- a/packages/js/src/Modules/Verto/webrtc/Peer.ts +++ b/packages/js/src/Modules/Verto/webrtc/Peer.ts @@ -463,10 +463,11 @@ export default class Peer { } private _config(): RTCConfiguration { - const { iceServers = [] } = this.options; + const { iceServers = [], prefetchIceCandidates } = this.options; const config: RTCConfiguration = { bundlePolicy: 'max-compat', + iceCandidatePoolSize: prefetchIceCandidates ? 10 : 0, iceServers, }; diff --git a/packages/js/src/Modules/Verto/webrtc/VertoHandler.ts b/packages/js/src/Modules/Verto/webrtc/VertoHandler.ts index 5a582832..278ce35e 100644 --- a/packages/js/src/Modules/Verto/webrtc/VertoHandler.ts +++ b/packages/js/src/Modules/Verto/webrtc/VertoHandler.ts @@ -83,6 +83,7 @@ class VertoHandler { mediaSettings: params.mediaSettings, debug: session.options.debug ?? false, debugOutput: session.options.debugOutput ?? 'socket', + prefetchIceCandidates: session.options.prefetchIceCandidates ?? false, }; if (params.telnyx_call_control_id) { diff --git a/packages/js/src/Modules/Verto/webrtc/interfaces.ts b/packages/js/src/Modules/Verto/webrtc/interfaces.ts index fea3340d..17e453e1 100644 --- a/packages/js/src/Modules/Verto/webrtc/interfaces.ts +++ b/packages/js/src/Modules/Verto/webrtc/interfaces.ts @@ -48,6 +48,7 @@ export interface IVertoCallOptions { debug?: boolean; debugOutput?: 'socket' | 'file'; preferred_codecs?: RTCRtpCodecCapability[]; + prefetchIceCandidates?: boolean; } export interface IStatsBinding { diff --git a/packages/js/src/TelnyxRTC.ts b/packages/js/src/TelnyxRTC.ts index 38bd9380..45de713f 100644 --- a/packages/js/src/TelnyxRTC.ts +++ b/packages/js/src/TelnyxRTC.ts @@ -182,6 +182,18 @@ export class TelnyxRTC extends TelnyxRTCClient { * preferred_codecs: [PCMACodec], * }); * ``` + * + * ### ICE Candidate Prefetching + * + * ICE candidate prefetching can be enabled by passing `prefetchIceCandidates` to the `newCall` method. + * example: + * ```js + * client.newCall({ + * destinationNumber: 'xxx', + * prefetchIceCandidates: true, + * }); + * ``` + * */ newCall(options: ICallOptions) { return super.newCall(options); diff --git a/packages/js/src/utils/interfaces.ts b/packages/js/src/utils/interfaces.ts index 75295eda..6ec2d43d 100644 --- a/packages/js/src/utils/interfaces.ts +++ b/packages/js/src/utils/interfaces.ts @@ -52,6 +52,22 @@ export interface IClientOptions { * "Generate Ringback Tone" in your SIP Connection. */ ringbackFile?: string; + + /** + * Enable debug mode for this client. + * This will gather WebRTC debugging information. + */ + debug?: boolean; + + /** + * Debug output option + */ + debugOutput?: 'socket' | 'file'; + + /** + * Enable or disable prefetching ICE candidates. + */ + prefetchIceCandidates?: boolean; } export interface ISIPCallOptions { @@ -201,6 +217,11 @@ export interface ICallOptions { * Preferred codecs for the call. */ preferred_codecs?: RTCRtpCodecCapability[]; + + /** + * Enable or disable ICE Candidate Prefetching. + */ + prefetchIceCandidates?: boolean; } /** diff --git a/packages/react-client/src/useTelnyxRTC.ts b/packages/react-client/src/useTelnyxRTC.ts index c008ca96..9ab30468 100644 --- a/packages/react-client/src/useTelnyxRTC.ts +++ b/packages/react-client/src/useTelnyxRTC.ts @@ -4,13 +4,13 @@ import { TelnyxRTC, IClientOptions } from '@telnyx/webrtc'; type TokenCredential = { login_token: string; - debug?: boolean + debug?: boolean; }; type UsernameCredential = { login: string; password: string; - debug?: boolean + debug?: boolean; }; export type CredentialOptions = TokenCredential | UsernameCredential;