@whereby.com/media 1.20.0 → 1.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -3028,18 +3028,62 @@ class ServerSocket {
3028
3028
  }
3029
3029
  }
3030
3030
 
3031
- const maybeTurnOnly = (transportConfig, features) => {
3031
+ const maybeTurnOnly = (iceConfig, features) => {
3032
3032
  if (!features.useOnlyTURN) {
3033
3033
  return;
3034
3034
  }
3035
- transportConfig.iceTransportPolicy = "relay";
3035
+ iceConfig.iceTransportPolicy = "relay";
3036
3036
  const filter = {
3037
3037
  onlyudp: /^turn:.*transport=udp$/,
3038
3038
  onlytcp: /^turn:.*transport=tcp$/,
3039
3039
  onlytls: /^turns:.*transport=tcp$/,
3040
3040
  }[features.useOnlyTURN];
3041
3041
  if (filter) {
3042
- transportConfig.iceServers = transportConfig.iceServers.filter((entry) => entry.url && entry.url.match(filter));
3042
+ iceConfig.iceServers = iceConfig.iceServers.filter((entry) => {
3043
+ if (entry.url && entry.url.match(filter))
3044
+ return entry;
3045
+ if (entry.urls) {
3046
+ entry.urls = (entry.urls.some ? entry.urls : [entry.urls]).filter((url) => url.match(filter));
3047
+ if (entry.urls.length > 0)
3048
+ return entry;
3049
+ }
3050
+ });
3051
+ }
3052
+ };
3053
+ const external_stun_servers = (iceConfig, features) => {
3054
+ if (features.addGoogleStunServers) {
3055
+ iceConfig.iceServers = [
3056
+ { urls: "stun:stun.l.google.com:19302" },
3057
+ { urls: "stun:stun2.l.google.com:19302" },
3058
+ ...iceConfig.iceServers,
3059
+ ];
3060
+ }
3061
+ if (features.addCloudflareStunServers) {
3062
+ iceConfig.iceServers = [
3063
+ { urls: "stun:stun.cloudflare.com:3478" },
3064
+ { urls: "stun:stun.cloudflare.com:53" },
3065
+ ...iceConfig.iceServers,
3066
+ ];
3067
+ }
3068
+ };
3069
+ const turnServerOverride = (iceServers, overrideHost) => {
3070
+ if (overrideHost && iceServers) {
3071
+ const host = overrideHost;
3072
+ const port = host.indexOf(":") > 0 ? "" : ":443";
3073
+ const override = ":" + host + port;
3074
+ return iceServers.map((original) => {
3075
+ const entry = Object.assign({}, original);
3076
+ if (entry.url) {
3077
+ entry.url = entry.url.replace(/:[^?]*/, override);
3078
+ }
3079
+ if (entry.urls) {
3080
+ entry.urls = entry.urls.map((url) => url.replace(/:[^?]*/, override));
3081
+ }
3082
+ return entry;
3083
+ });
3084
+ }
3085
+ else {
3086
+ return iceServers;
3043
3087
  }
3044
3088
  };
3045
3089
 
@@ -3098,7 +3142,7 @@ if (browserName$1 === "chrome") {
3098
3142
  }
3099
3143
  class P2pRtcManager {
3100
3144
  constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features, }) {
3101
- const { name, session, iceServers, sfuServer, mediaserverConfigTtlSeconds } = room;
3145
+ const { name, session, iceServers, turnServers, sfuServer, mediaserverConfigTtlSeconds } = room;
3102
3146
  this._selfId = selfId;
3103
3147
  this._roomName = name;
3104
3148
  this._roomSessionId = session && session.id;
@@ -3125,7 +3169,8 @@ class P2pRtcManager {
3125
3169
  };
3126
3170
  this._updateAndScheduleMediaServersRefresh({
3127
3171
  sfuServer,
3128
- iceServers: iceServers.iceServers || [],
3172
+ iceServers: (iceServers === null || iceServers === void 0 ? void 0 : iceServers.iceServers) || [],
3173
+ turnServers: turnServers || [],
3129
3174
  mediaserverConfigTtlSeconds,
3130
3175
  });
3131
3176
  this.totalSessionsCreated = 0;
@@ -3454,48 +3499,11 @@ class P2pRtcManager {
3454
3499
  constraints.optional.push({ rtcStatsPeerId: peerConnectionId });
3455
3500
  constraints.optional.push({ rtcStatsConferenceId: this._roomName });
3456
3501
  const peerConnectionConfig = {
3457
- iceServers: this._iceServers,
3502
+ iceServers: this._features.turnServersOn ? this._turnServers : this._iceServers,
3458
3503
  };
3459
- if (this._features.turnServerOverrideHost) {
3460
- const host = this._features.turnServerOverrideHost;
3461
- const port = host.indexOf(":") > 0 ? "" : ":443";
3462
- const override = ":" + host + port;
3463
- peerConnectionConfig.iceServers = peerConnectionConfig.iceServers.map((original) => {
3464
- const entry = Object.assign({}, original);
3465
- if (entry.url) {
3466
- entry.url = entry.url.replace(/:[^?]*/, override);
3467
- }
3468
- if (entry.urls) {
3469
- entry.urls = entry.urls.map((url) => url.replace(/:[^?]*/, override));
3470
- }
3471
- return entry;
3472
- });
3473
- }
3474
- if (this._features.addGoogleStunServers) {
3475
- peerConnectionConfig.iceServers = [
3476
- ...peerConnectionConfig.iceServers,
3477
- { urls: "stun:stun.l.google.com:19302" },
3478
- { urls: "stun:stun2.l.google.com:19302" },
3479
- ];
3480
- }
3481
- if (this._features.addCloudflareStunServers) {
3482
- peerConnectionConfig.iceServers = [
3483
- ...peerConnectionConfig.iceServers,
3484
- { urls: "stun:stun.cloudflare.com:3478" },
3485
- { urls: "stun:stun.cloudflare.com:53" },
3486
- ];
3487
- }
3488
- if (this._features.useOnlyTURN) {
3489
- peerConnectionConfig.iceTransportPolicy = "relay";
3490
- const filter = {
3491
- onlyudp: /^turn:.*transport=udp$/,
3492
- onlytcp: /^turn:.*transport=tcp$/,
3493
- onlytls: /^turns:.*transport=tcp$/,
3494
- }[this._features.useOnlyTURN];
3495
- if (filter) {
3496
- peerConnectionConfig.iceServers = peerConnectionConfig.iceServers.filter((entry) => entry.url && entry.url.match(filter));
3497
- }
3498
- }
3504
+ peerConnectionConfig.iceServers = turnServerOverride(peerConnectionConfig.iceServers, this._features.turnServerOverrideHost);
3505
+ external_stun_servers(peerConnectionConfig, this._features);
3506
+ maybeTurnOnly(peerConnectionConfig, this._features);
3499
3507
  if (browserName$1 === "chrome") {
3500
3508
  peerConnectionConfig.sdpSemantics = "unified-plan";
3501
3509
  }
@@ -3709,8 +3717,9 @@ class P2pRtcManager {
3709
3717
  delete this.localStreams[streamId];
3710
3718
  this._deleteEnabledLocalStreamId(streamId);
3711
3719
  }
3712
- _updateAndScheduleMediaServersRefresh({ iceServers, sfuServer, mediaserverConfigTtlSeconds }) {
3720
+ _updateAndScheduleMediaServersRefresh({ iceServers, turnServers, sfuServer, mediaserverConfigTtlSeconds }) {
3713
3721
  this._iceServers = iceServers;
3722
+ this._turnServers = turnServers;
3714
3723
  this._sfuServer = sfuServer;
3715
3724
  this._mediaserverConfigTtlSeconds = mediaserverConfigTtlSeconds;
3716
3725
  this._clearMediaServersRefresh();
@@ -3778,7 +3787,7 @@ class P2pRtcManager {
3778
3787
  this._negotiatePeerConnection(clientId, session, Object.assign({}, this.offerOptions, { iceRestart: true }));
3779
3788
  }
3780
3789
  }
3781
- _setCodecPreferences(pc, { vp9On, av1On, redOn }) {
3790
+ _setCodecPreferences(pc, { vp9On, av1On, redOn, }) {
3782
3791
  try {
3783
3792
  const audioTransceivers = pc
3784
3793
  .getTransceivers()
@@ -4941,7 +4950,7 @@ if (browserName === "chrome")
4941
4950
  window.document.addEventListener("beforeunload", () => (unloading = true));
4942
4951
  class VegaRtcManager {
4943
4952
  constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features, eventClaim, }) {
4944
- const { session, iceServers, sfuServer, sfuServers, mediaserverConfigTtlSeconds } = room;
4953
+ const { session, iceServers, turnServers, sfuServer, sfuServers, mediaserverConfigTtlSeconds } = room;
4945
4954
  this._selfId = selfId;
4946
4955
  this._room = room;
4947
4956
  this._roomSessionId = session === null || session === void 0 ? void 0 : session.id;
@@ -4994,7 +5003,8 @@ class VegaRtcManager {
4994
5003
  this._updateAndScheduleMediaServersRefresh({
4995
5004
  sfuServer,
4996
5005
  sfuServers,
4997
- iceServers: iceServers.iceServers || [],
5006
+ iceServers: (iceServers === null || iceServers === void 0 ? void 0 : iceServers.iceServers) || [],
5007
+ turnServers: turnServers || [],
4998
5008
  mediaserverConfigTtlSeconds,
4999
5009
  });
5000
5010
  this._socketListenerDeregisterFunctions = [];
@@ -5008,9 +5018,10 @@ class VegaRtcManager {
5008
5018
  });
5009
5019
  this._networkIsDetectedUpBySignal = false;
5010
5020
  }
5011
- _updateAndScheduleMediaServersRefresh({ iceServers, sfuServer, sfuServers, mediaserverConfigTtlSeconds, }) {
5021
+ _updateAndScheduleMediaServersRefresh({ iceServers, turnServers, sfuServer, sfuServers, mediaserverConfigTtlSeconds, }) {
5012
5022
  var _a, _b, _c;
5013
5023
  this._iceServers = iceServers;
5024
+ this._turnServers = turnServers;
5014
5025
  this._sfuServer = sfuServer;
5015
5026
  this._sfuServers = sfuServers;
5016
5027
  if (!sfuServers && (sfuServer === null || sfuServer === void 0 ? void 0 : sfuServer.fallbackServers)) {
@@ -5024,8 +5035,12 @@ class VegaRtcManager {
5024
5035
  this._sfuServers ||
5025
5036
  this._features.sfuServerOverrideHost ||
5026
5037
  sfuServer.url);
5027
- (_b = this._sendTransport) === null || _b === void 0 ? void 0 : _b.updateIceServers({ iceServers: this._iceServers });
5028
- (_c = this._receiveTransport) === null || _c === void 0 ? void 0 : _c.updateIceServers({ iceServers: this._iceServers });
5038
+ const iceServersList = {
5039
+ iceServers: this._features.turnServersOn ? this._turnServers : this._iceServers,
5040
+ };
5041
+ iceServersList.iceServers = turnServerOverride(iceServersList.iceServers, this._features.turnServerOverrideHost);
5042
+ (_b = this._sendTransport) === null || _b === void 0 ? void 0 : _b.updateIceServers(iceServersList);
5043
+ (_c = this._receiveTransport) === null || _c === void 0 ? void 0 : _c.updateIceServers(iceServersList);
5029
5044
  this._clearMediaServersRefresh();
5030
5045
  if (!mediaserverConfigTtlSeconds) {
5031
5046
  return;
@@ -5222,7 +5237,7 @@ class VegaRtcManager {
5222
5237
  sctpSendBufferSize: 262144,
5223
5238
  },
5224
5239
  });
5225
- transportOptions.iceServers = this._iceServers;
5240
+ transportOptions.iceServers = turnServerOverride(this._features.turnServersOn ? this._turnServers : this._iceServers, this._features.turnServerOverrideHost);
5226
5241
  maybeTurnOnly(transportOptions, this._features);
5227
5242
  const transport = (_a = this._mediasoupDevice) === null || _a === void 0 ? void 0 : _a[creator](transportOptions);
5228
5243
  const onConnectionStateListener = (connectionState) => __awaiter(this, void 0, void 0, function* () {
@@ -8000,6 +8015,7 @@ exports.createWorker = createWorker;
8000
8015
  exports.deprioritizeH264 = deprioritizeH264;
8001
8016
  exports.detectMicrophoneNotWorking = detectMicrophoneNotWorking;
8002
8017
  exports.enumerate = enumerate;
8018
+ exports.external_stun_servers = external_stun_servers;
8003
8019
  exports.filterMidExtension = filterMidExtension;
8004
8020
  exports.filterMsidSemantic = filterMsidSemantic;
8005
8021
  exports.fromLocation = fromLocation;
@@ -8044,5 +8060,6 @@ exports.startPerformanceMonitor = startPerformanceMonitor;
8044
8060
  exports.stopStreamTracks = stopStreamTracks;
8045
8061
  exports.subscribeIssues = subscribeIssues;
8046
8062
  exports.subscribeStats = subscribeStats;
8063
+ exports.turnServerOverride = turnServerOverride;
8047
8064
  exports.variance = variance;
8048
8065
  //# sourceMappingURL=index.cjs.map
package/dist/index.d.cts CHANGED
@@ -458,6 +458,7 @@ declare class P2pRtcManager implements RtcManager {
458
458
  _videoTrackOnEnded: () => void;
459
459
  totalSessionsCreated: number;
460
460
  _iceServers: any;
461
+ _turnServers: any;
461
462
  _sfuServer: any;
462
463
  _mediaserverConfigTtlSeconds: any;
463
464
  _fetchMediaServersTimer: any;
@@ -534,13 +535,13 @@ declare class P2pRtcManager implements RtcManager {
534
535
  _removeTrackFromPeerConnections(track: any): void;
535
536
  _addLocalStream(streamId: string, stream: any): void;
536
537
  _removeLocalStream(streamId: string): void;
537
- _updateAndScheduleMediaServersRefresh({ iceServers, sfuServer, mediaserverConfigTtlSeconds }: any): void;
538
+ _updateAndScheduleMediaServersRefresh({ iceServers, turnServers, sfuServer, mediaserverConfigTtlSeconds }: any): void;
538
539
  _clearMediaServersRefresh(): void;
539
540
  _monitorAudioTrack(track: any): void;
540
541
  _monitorVideoTrack(track: CustomMediaStreamTrack): void;
541
542
  _connect(clientId: string): Promise<any>;
542
543
  _maybeRestartIce(clientId: string, session: any): void;
543
- _setCodecPreferences(pc: RTCPeerConnection, { vp9On, av1On, redOn }: {
544
+ _setCodecPreferences(pc: RTCPeerConnection, { vp9On, av1On, redOn, }: {
544
545
  vp9On?: boolean;
545
546
  av1On?: boolean;
546
547
  redOn?: boolean;
@@ -681,9 +682,14 @@ declare class ServerSocket {
681
682
  getReconnectThreshold(): number | undefined;
682
683
  }
683
684
 
684
- declare const maybeTurnOnly: (transportConfig: any, features: {
685
+ declare const maybeTurnOnly: (iceConfig: any, features: {
685
686
  useOnlyTURN: string;
686
687
  }) => void;
688
+ declare const external_stun_servers: (iceConfig: any, features: {
689
+ addGoogleStunServers: string;
690
+ addCloudflareStunServers: string;
691
+ }) => void;
692
+ declare const turnServerOverride: (iceServers: any, overrideHost: any) => any;
687
693
 
688
694
  interface Credentials {
689
695
  credentials: {
@@ -895,11 +901,12 @@ interface SpotlightRemovedEvent {
895
901
  requestedByClientId: string;
896
902
  }
897
903
  interface LiveTranscriptionStartedEvent {
898
- startedAt: string;
899
904
  transcriptionId: string;
905
+ startedAt: string;
900
906
  }
901
907
  interface LiveTranscriptionStoppedEvent {
902
908
  transcriptionId: string;
909
+ endedAt: string;
903
910
  }
904
911
  interface SignalEvents {
905
912
  audio_enabled: AudioEnabledEvent;
@@ -1354,6 +1361,7 @@ declare class VegaRtcManager implements RtcManager {
1354
1361
  _qualityMonitor: any;
1355
1362
  _fetchMediaServersTimer: any;
1356
1363
  _iceServers: any;
1364
+ _turnServers: any;
1357
1365
  _sfuServer: any;
1358
1366
  _sfuServers?: HostListEntryOptionalDC[];
1359
1367
  _mediaserverConfigTtlSeconds: any;
@@ -1372,8 +1380,9 @@ declare class VegaRtcManager implements RtcManager {
1372
1380
  features?: any;
1373
1381
  eventClaim?: string;
1374
1382
  });
1375
- _updateAndScheduleMediaServersRefresh({ iceServers, sfuServer, sfuServers, mediaserverConfigTtlSeconds, }: {
1383
+ _updateAndScheduleMediaServersRefresh({ iceServers, turnServers, sfuServer, sfuServers, mediaserverConfigTtlSeconds, }: {
1376
1384
  iceServers: any;
1385
+ turnServers: any;
1377
1386
  sfuServer: any;
1378
1387
  sfuServers: any;
1379
1388
  mediaserverConfigTtlSeconds: any;
@@ -1649,4 +1658,4 @@ declare class RtcStream {
1649
1658
  static getTypeFromId(id: string): string;
1650
1659
  }
1651
1660
 
1652
- export { type AddSpotlightRequest, type AudioEnableRequest, type AudioEnableRequestedEvent, type AudioEnabledEvent, BandwidthTester, type BreakoutConfig, type BreakoutGroupJoinedEvent, type BreakoutSessionUpdatedEvent, type ChatMessage, type ClientKickedEvent, type ClientLeftEvent, type ClientMetadataPayload, type ClientMetadataReceivedEvent, type ClientRole, type ClientUnableToJoinEvent, type CloudRecordingStartedEvent, type Codec, type Credentials, type CustomMediaStreamTrack, EVENTS, type GetConstraintsOptions, type GetDeviceDataResult, type GetMediaConstraintsOptions, type GetStreamOptions, type GetStreamResult, type GetUpdatedDevicesResult, type IdentifyDeviceRequest, type IssuesAndMetricsByView, type JoinRoomRequest, KNOCK_MESSAGES, KalmanFilter, type KnockAcceptedEvent, type KnockRejectedEvent, type KnockRoomRequest, type KnockerLeftEvent, type LiveTranscriptionStartedEvent, type LiveTranscriptionStoppedEvent, Logger, MAXIMUM_TURN_BANDWIDTH, MAXIMUM_TURN_BANDWIDTH_UNLIMITED, MEDIA_JITTER_BUFFER_TARGET, type NewClientEvent, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, type RemoveSpotlightRequest, type RoleName, type RoomJoinedEvent, type RoomKnockedEvent, type RoomLockedEvent, type RoomSessionEndedEvent, type RtcClientConnectionStatusChangedPayload, RtcEventNames, type RtcEvents, type RtcLocalStreamTrackAddedPayload, type RtcLocalStreamTrackRemovedPayload, type RtcManager, type RtcManagerCreatedPayload, RtcManagerDispatcher, RtcStream, type RtcStreamAddedPayload, STREAM_TYPES, type ScreenshareStartedEvent, type ScreenshareStoppedEvent, type SendClientMetadataRequest, ServerSocket, Session, SfuV2Parser, type SignalClient, type SignalEvents, type SignalKnocker, type SignalRequests, type SocketConf, type SocketManager, type Spotlight, type SpotlightAddedEvent, type SpotlightRemovedEvent, type StatsMonitorOptions, type StatsMonitorState, type StatsSubscription, TYPES, type TrackStats, type TurnTransportProtocol, type UpdatedDeviceInfo, type UpdatedDevicesInfo, VegaConnection, VegaMediaQualityMonitor, VegaRtcManager, type VideoEnableRequest, type VideoEnableRequestedEvent, type VideoEnabledEvent, type ViewStats, addAbsCaptureTimeExtMap, addExtMap, assert, buildDeviceList, calculateStd, captureAudioSsrcMetrics, captureCandidatePairInfoMetrics, captureCommonSsrcMetrics, captureSsrcInfo, captureVideoSsrcMetrics, changeMediaDirection, cleanSdp, compareLocalDevices, createACFCalculator, createMicAnalyser, createWorker, deprioritizeH264, detectMicrophoneNotWorking, enumerate, filterMidExtension, filterMsidSemantic, fromLocation, generateByteString, getConstraints, getCurrentPeerConnections, getDeviceData, getDisplayMedia, getIssuesAndMetrics, getMediaConstraints, getMediaSettings, getMediasoupDevice, getNumFailedStatsReports, getNumFailedTrackSsrcLookups, getNumMissingTrackSsrcLookups, getOptimalBitrate, getPeerConnectionIndex, getStats, getStream, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, isRelayed, maybeRejectNoH264, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceSSRCs, replaceTracksInStream, _default as rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, sortCodecsByMimeType, type ssrcStats, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, variance };
1661
+ export { type AddSpotlightRequest, type AudioEnableRequest, type AudioEnableRequestedEvent, type AudioEnabledEvent, BandwidthTester, type BreakoutConfig, type BreakoutGroupJoinedEvent, type BreakoutSessionUpdatedEvent, type ChatMessage, type ClientKickedEvent, type ClientLeftEvent, type ClientMetadataPayload, type ClientMetadataReceivedEvent, type ClientRole, type ClientUnableToJoinEvent, type CloudRecordingStartedEvent, type Codec, type Credentials, type CustomMediaStreamTrack, EVENTS, type GetConstraintsOptions, type GetDeviceDataResult, type GetMediaConstraintsOptions, type GetStreamOptions, type GetStreamResult, type GetUpdatedDevicesResult, type IdentifyDeviceRequest, type IssuesAndMetricsByView, type JoinRoomRequest, KNOCK_MESSAGES, KalmanFilter, type KnockAcceptedEvent, type KnockRejectedEvent, type KnockRoomRequest, type KnockerLeftEvent, type LiveTranscriptionStartedEvent, type LiveTranscriptionStoppedEvent, Logger, MAXIMUM_TURN_BANDWIDTH, MAXIMUM_TURN_BANDWIDTH_UNLIMITED, MEDIA_JITTER_BUFFER_TARGET, type NewClientEvent, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, type RemoveSpotlightRequest, type RoleName, type RoomJoinedEvent, type RoomKnockedEvent, type RoomLockedEvent, type RoomSessionEndedEvent, type RtcClientConnectionStatusChangedPayload, RtcEventNames, type RtcEvents, type RtcLocalStreamTrackAddedPayload, type RtcLocalStreamTrackRemovedPayload, type RtcManager, type RtcManagerCreatedPayload, RtcManagerDispatcher, RtcStream, type RtcStreamAddedPayload, STREAM_TYPES, type ScreenshareStartedEvent, type ScreenshareStoppedEvent, type SendClientMetadataRequest, ServerSocket, Session, SfuV2Parser, type SignalClient, type SignalEvents, type SignalKnocker, type SignalRequests, type SocketConf, type SocketManager, type Spotlight, type SpotlightAddedEvent, type SpotlightRemovedEvent, type StatsMonitorOptions, type StatsMonitorState, type StatsSubscription, TYPES, type TrackStats, type TurnTransportProtocol, type UpdatedDeviceInfo, type UpdatedDevicesInfo, VegaConnection, VegaMediaQualityMonitor, VegaRtcManager, type VideoEnableRequest, type VideoEnableRequestedEvent, type VideoEnabledEvent, type ViewStats, addAbsCaptureTimeExtMap, addExtMap, assert, buildDeviceList, calculateStd, captureAudioSsrcMetrics, captureCandidatePairInfoMetrics, captureCommonSsrcMetrics, captureSsrcInfo, captureVideoSsrcMetrics, changeMediaDirection, cleanSdp, compareLocalDevices, createACFCalculator, createMicAnalyser, createWorker, deprioritizeH264, detectMicrophoneNotWorking, enumerate, external_stun_servers, filterMidExtension, filterMsidSemantic, fromLocation, generateByteString, getConstraints, getCurrentPeerConnections, getDeviceData, getDisplayMedia, getIssuesAndMetrics, getMediaConstraints, getMediaSettings, getMediasoupDevice, getNumFailedStatsReports, getNumFailedTrackSsrcLookups, getNumMissingTrackSsrcLookups, getOptimalBitrate, getPeerConnectionIndex, getStats, getStream, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, isRelayed, maybeRejectNoH264, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceSSRCs, replaceTracksInStream, _default as rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, sortCodecsByMimeType, type ssrcStats, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, turnServerOverride, variance };
package/dist/index.d.mts CHANGED
@@ -458,6 +458,7 @@ declare class P2pRtcManager implements RtcManager {
458
458
  _videoTrackOnEnded: () => void;
459
459
  totalSessionsCreated: number;
460
460
  _iceServers: any;
461
+ _turnServers: any;
461
462
  _sfuServer: any;
462
463
  _mediaserverConfigTtlSeconds: any;
463
464
  _fetchMediaServersTimer: any;
@@ -534,13 +535,13 @@ declare class P2pRtcManager implements RtcManager {
534
535
  _removeTrackFromPeerConnections(track: any): void;
535
536
  _addLocalStream(streamId: string, stream: any): void;
536
537
  _removeLocalStream(streamId: string): void;
537
- _updateAndScheduleMediaServersRefresh({ iceServers, sfuServer, mediaserverConfigTtlSeconds }: any): void;
538
+ _updateAndScheduleMediaServersRefresh({ iceServers, turnServers, sfuServer, mediaserverConfigTtlSeconds }: any): void;
538
539
  _clearMediaServersRefresh(): void;
539
540
  _monitorAudioTrack(track: any): void;
540
541
  _monitorVideoTrack(track: CustomMediaStreamTrack): void;
541
542
  _connect(clientId: string): Promise<any>;
542
543
  _maybeRestartIce(clientId: string, session: any): void;
543
- _setCodecPreferences(pc: RTCPeerConnection, { vp9On, av1On, redOn }: {
544
+ _setCodecPreferences(pc: RTCPeerConnection, { vp9On, av1On, redOn, }: {
544
545
  vp9On?: boolean;
545
546
  av1On?: boolean;
546
547
  redOn?: boolean;
@@ -681,9 +682,14 @@ declare class ServerSocket {
681
682
  getReconnectThreshold(): number | undefined;
682
683
  }
683
684
 
684
- declare const maybeTurnOnly: (transportConfig: any, features: {
685
+ declare const maybeTurnOnly: (iceConfig: any, features: {
685
686
  useOnlyTURN: string;
686
687
  }) => void;
688
+ declare const external_stun_servers: (iceConfig: any, features: {
689
+ addGoogleStunServers: string;
690
+ addCloudflareStunServers: string;
691
+ }) => void;
692
+ declare const turnServerOverride: (iceServers: any, overrideHost: any) => any;
687
693
 
688
694
  interface Credentials {
689
695
  credentials: {
@@ -895,11 +901,12 @@ interface SpotlightRemovedEvent {
895
901
  requestedByClientId: string;
896
902
  }
897
903
  interface LiveTranscriptionStartedEvent {
898
- startedAt: string;
899
904
  transcriptionId: string;
905
+ startedAt: string;
900
906
  }
901
907
  interface LiveTranscriptionStoppedEvent {
902
908
  transcriptionId: string;
909
+ endedAt: string;
903
910
  }
904
911
  interface SignalEvents {
905
912
  audio_enabled: AudioEnabledEvent;
@@ -1354,6 +1361,7 @@ declare class VegaRtcManager implements RtcManager {
1354
1361
  _qualityMonitor: any;
1355
1362
  _fetchMediaServersTimer: any;
1356
1363
  _iceServers: any;
1364
+ _turnServers: any;
1357
1365
  _sfuServer: any;
1358
1366
  _sfuServers?: HostListEntryOptionalDC[];
1359
1367
  _mediaserverConfigTtlSeconds: any;
@@ -1372,8 +1380,9 @@ declare class VegaRtcManager implements RtcManager {
1372
1380
  features?: any;
1373
1381
  eventClaim?: string;
1374
1382
  });
1375
- _updateAndScheduleMediaServersRefresh({ iceServers, sfuServer, sfuServers, mediaserverConfigTtlSeconds, }: {
1383
+ _updateAndScheduleMediaServersRefresh({ iceServers, turnServers, sfuServer, sfuServers, mediaserverConfigTtlSeconds, }: {
1376
1384
  iceServers: any;
1385
+ turnServers: any;
1377
1386
  sfuServer: any;
1378
1387
  sfuServers: any;
1379
1388
  mediaserverConfigTtlSeconds: any;
@@ -1649,4 +1658,4 @@ declare class RtcStream {
1649
1658
  static getTypeFromId(id: string): string;
1650
1659
  }
1651
1660
 
1652
- export { type AddSpotlightRequest, type AudioEnableRequest, type AudioEnableRequestedEvent, type AudioEnabledEvent, BandwidthTester, type BreakoutConfig, type BreakoutGroupJoinedEvent, type BreakoutSessionUpdatedEvent, type ChatMessage, type ClientKickedEvent, type ClientLeftEvent, type ClientMetadataPayload, type ClientMetadataReceivedEvent, type ClientRole, type ClientUnableToJoinEvent, type CloudRecordingStartedEvent, type Codec, type Credentials, type CustomMediaStreamTrack, EVENTS, type GetConstraintsOptions, type GetDeviceDataResult, type GetMediaConstraintsOptions, type GetStreamOptions, type GetStreamResult, type GetUpdatedDevicesResult, type IdentifyDeviceRequest, type IssuesAndMetricsByView, type JoinRoomRequest, KNOCK_MESSAGES, KalmanFilter, type KnockAcceptedEvent, type KnockRejectedEvent, type KnockRoomRequest, type KnockerLeftEvent, type LiveTranscriptionStartedEvent, type LiveTranscriptionStoppedEvent, Logger, MAXIMUM_TURN_BANDWIDTH, MAXIMUM_TURN_BANDWIDTH_UNLIMITED, MEDIA_JITTER_BUFFER_TARGET, type NewClientEvent, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, type RemoveSpotlightRequest, type RoleName, type RoomJoinedEvent, type RoomKnockedEvent, type RoomLockedEvent, type RoomSessionEndedEvent, type RtcClientConnectionStatusChangedPayload, RtcEventNames, type RtcEvents, type RtcLocalStreamTrackAddedPayload, type RtcLocalStreamTrackRemovedPayload, type RtcManager, type RtcManagerCreatedPayload, RtcManagerDispatcher, RtcStream, type RtcStreamAddedPayload, STREAM_TYPES, type ScreenshareStartedEvent, type ScreenshareStoppedEvent, type SendClientMetadataRequest, ServerSocket, Session, SfuV2Parser, type SignalClient, type SignalEvents, type SignalKnocker, type SignalRequests, type SocketConf, type SocketManager, type Spotlight, type SpotlightAddedEvent, type SpotlightRemovedEvent, type StatsMonitorOptions, type StatsMonitorState, type StatsSubscription, TYPES, type TrackStats, type TurnTransportProtocol, type UpdatedDeviceInfo, type UpdatedDevicesInfo, VegaConnection, VegaMediaQualityMonitor, VegaRtcManager, type VideoEnableRequest, type VideoEnableRequestedEvent, type VideoEnabledEvent, type ViewStats, addAbsCaptureTimeExtMap, addExtMap, assert, buildDeviceList, calculateStd, captureAudioSsrcMetrics, captureCandidatePairInfoMetrics, captureCommonSsrcMetrics, captureSsrcInfo, captureVideoSsrcMetrics, changeMediaDirection, cleanSdp, compareLocalDevices, createACFCalculator, createMicAnalyser, createWorker, deprioritizeH264, detectMicrophoneNotWorking, enumerate, filterMidExtension, filterMsidSemantic, fromLocation, generateByteString, getConstraints, getCurrentPeerConnections, getDeviceData, getDisplayMedia, getIssuesAndMetrics, getMediaConstraints, getMediaSettings, getMediasoupDevice, getNumFailedStatsReports, getNumFailedTrackSsrcLookups, getNumMissingTrackSsrcLookups, getOptimalBitrate, getPeerConnectionIndex, getStats, getStream, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, isRelayed, maybeRejectNoH264, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceSSRCs, replaceTracksInStream, _default as rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, sortCodecsByMimeType, type ssrcStats, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, variance };
1661
+ export { type AddSpotlightRequest, type AudioEnableRequest, type AudioEnableRequestedEvent, type AudioEnabledEvent, BandwidthTester, type BreakoutConfig, type BreakoutGroupJoinedEvent, type BreakoutSessionUpdatedEvent, type ChatMessage, type ClientKickedEvent, type ClientLeftEvent, type ClientMetadataPayload, type ClientMetadataReceivedEvent, type ClientRole, type ClientUnableToJoinEvent, type CloudRecordingStartedEvent, type Codec, type Credentials, type CustomMediaStreamTrack, EVENTS, type GetConstraintsOptions, type GetDeviceDataResult, type GetMediaConstraintsOptions, type GetStreamOptions, type GetStreamResult, type GetUpdatedDevicesResult, type IdentifyDeviceRequest, type IssuesAndMetricsByView, type JoinRoomRequest, KNOCK_MESSAGES, KalmanFilter, type KnockAcceptedEvent, type KnockRejectedEvent, type KnockRoomRequest, type KnockerLeftEvent, type LiveTranscriptionStartedEvent, type LiveTranscriptionStoppedEvent, Logger, MAXIMUM_TURN_BANDWIDTH, MAXIMUM_TURN_BANDWIDTH_UNLIMITED, MEDIA_JITTER_BUFFER_TARGET, type NewClientEvent, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, type RemoveSpotlightRequest, type RoleName, type RoomJoinedEvent, type RoomKnockedEvent, type RoomLockedEvent, type RoomSessionEndedEvent, type RtcClientConnectionStatusChangedPayload, RtcEventNames, type RtcEvents, type RtcLocalStreamTrackAddedPayload, type RtcLocalStreamTrackRemovedPayload, type RtcManager, type RtcManagerCreatedPayload, RtcManagerDispatcher, RtcStream, type RtcStreamAddedPayload, STREAM_TYPES, type ScreenshareStartedEvent, type ScreenshareStoppedEvent, type SendClientMetadataRequest, ServerSocket, Session, SfuV2Parser, type SignalClient, type SignalEvents, type SignalKnocker, type SignalRequests, type SocketConf, type SocketManager, type Spotlight, type SpotlightAddedEvent, type SpotlightRemovedEvent, type StatsMonitorOptions, type StatsMonitorState, type StatsSubscription, TYPES, type TrackStats, type TurnTransportProtocol, type UpdatedDeviceInfo, type UpdatedDevicesInfo, VegaConnection, VegaMediaQualityMonitor, VegaRtcManager, type VideoEnableRequest, type VideoEnableRequestedEvent, type VideoEnabledEvent, type ViewStats, addAbsCaptureTimeExtMap, addExtMap, assert, buildDeviceList, calculateStd, captureAudioSsrcMetrics, captureCandidatePairInfoMetrics, captureCommonSsrcMetrics, captureSsrcInfo, captureVideoSsrcMetrics, changeMediaDirection, cleanSdp, compareLocalDevices, createACFCalculator, createMicAnalyser, createWorker, deprioritizeH264, detectMicrophoneNotWorking, enumerate, external_stun_servers, filterMidExtension, filterMsidSemantic, fromLocation, generateByteString, getConstraints, getCurrentPeerConnections, getDeviceData, getDisplayMedia, getIssuesAndMetrics, getMediaConstraints, getMediaSettings, getMediasoupDevice, getNumFailedStatsReports, getNumFailedTrackSsrcLookups, getNumMissingTrackSsrcLookups, getOptimalBitrate, getPeerConnectionIndex, getStats, getStream, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, isRelayed, maybeRejectNoH264, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceSSRCs, replaceTracksInStream, _default as rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, sortCodecsByMimeType, type ssrcStats, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, turnServerOverride, variance };
package/dist/index.d.ts CHANGED
@@ -458,6 +458,7 @@ declare class P2pRtcManager implements RtcManager {
458
458
  _videoTrackOnEnded: () => void;
459
459
  totalSessionsCreated: number;
460
460
  _iceServers: any;
461
+ _turnServers: any;
461
462
  _sfuServer: any;
462
463
  _mediaserverConfigTtlSeconds: any;
463
464
  _fetchMediaServersTimer: any;
@@ -534,13 +535,13 @@ declare class P2pRtcManager implements RtcManager {
534
535
  _removeTrackFromPeerConnections(track: any): void;
535
536
  _addLocalStream(streamId: string, stream: any): void;
536
537
  _removeLocalStream(streamId: string): void;
537
- _updateAndScheduleMediaServersRefresh({ iceServers, sfuServer, mediaserverConfigTtlSeconds }: any): void;
538
+ _updateAndScheduleMediaServersRefresh({ iceServers, turnServers, sfuServer, mediaserverConfigTtlSeconds }: any): void;
538
539
  _clearMediaServersRefresh(): void;
539
540
  _monitorAudioTrack(track: any): void;
540
541
  _monitorVideoTrack(track: CustomMediaStreamTrack): void;
541
542
  _connect(clientId: string): Promise<any>;
542
543
  _maybeRestartIce(clientId: string, session: any): void;
543
- _setCodecPreferences(pc: RTCPeerConnection, { vp9On, av1On, redOn }: {
544
+ _setCodecPreferences(pc: RTCPeerConnection, { vp9On, av1On, redOn, }: {
544
545
  vp9On?: boolean;
545
546
  av1On?: boolean;
546
547
  redOn?: boolean;
@@ -681,9 +682,14 @@ declare class ServerSocket {
681
682
  getReconnectThreshold(): number | undefined;
682
683
  }
683
684
 
684
- declare const maybeTurnOnly: (transportConfig: any, features: {
685
+ declare const maybeTurnOnly: (iceConfig: any, features: {
685
686
  useOnlyTURN: string;
686
687
  }) => void;
688
+ declare const external_stun_servers: (iceConfig: any, features: {
689
+ addGoogleStunServers: string;
690
+ addCloudflareStunServers: string;
691
+ }) => void;
692
+ declare const turnServerOverride: (iceServers: any, overrideHost: any) => any;
687
693
 
688
694
  interface Credentials {
689
695
  credentials: {
@@ -895,11 +901,12 @@ interface SpotlightRemovedEvent {
895
901
  requestedByClientId: string;
896
902
  }
897
903
  interface LiveTranscriptionStartedEvent {
898
- startedAt: string;
899
904
  transcriptionId: string;
905
+ startedAt: string;
900
906
  }
901
907
  interface LiveTranscriptionStoppedEvent {
902
908
  transcriptionId: string;
909
+ endedAt: string;
903
910
  }
904
911
  interface SignalEvents {
905
912
  audio_enabled: AudioEnabledEvent;
@@ -1354,6 +1361,7 @@ declare class VegaRtcManager implements RtcManager {
1354
1361
  _qualityMonitor: any;
1355
1362
  _fetchMediaServersTimer: any;
1356
1363
  _iceServers: any;
1364
+ _turnServers: any;
1357
1365
  _sfuServer: any;
1358
1366
  _sfuServers?: HostListEntryOptionalDC[];
1359
1367
  _mediaserverConfigTtlSeconds: any;
@@ -1372,8 +1380,9 @@ declare class VegaRtcManager implements RtcManager {
1372
1380
  features?: any;
1373
1381
  eventClaim?: string;
1374
1382
  });
1375
- _updateAndScheduleMediaServersRefresh({ iceServers, sfuServer, sfuServers, mediaserverConfigTtlSeconds, }: {
1383
+ _updateAndScheduleMediaServersRefresh({ iceServers, turnServers, sfuServer, sfuServers, mediaserverConfigTtlSeconds, }: {
1376
1384
  iceServers: any;
1385
+ turnServers: any;
1377
1386
  sfuServer: any;
1378
1387
  sfuServers: any;
1379
1388
  mediaserverConfigTtlSeconds: any;
@@ -1649,4 +1658,4 @@ declare class RtcStream {
1649
1658
  static getTypeFromId(id: string): string;
1650
1659
  }
1651
1660
 
1652
- export { type AddSpotlightRequest, type AudioEnableRequest, type AudioEnableRequestedEvent, type AudioEnabledEvent, BandwidthTester, type BreakoutConfig, type BreakoutGroupJoinedEvent, type BreakoutSessionUpdatedEvent, type ChatMessage, type ClientKickedEvent, type ClientLeftEvent, type ClientMetadataPayload, type ClientMetadataReceivedEvent, type ClientRole, type ClientUnableToJoinEvent, type CloudRecordingStartedEvent, type Codec, type Credentials, type CustomMediaStreamTrack, EVENTS, type GetConstraintsOptions, type GetDeviceDataResult, type GetMediaConstraintsOptions, type GetStreamOptions, type GetStreamResult, type GetUpdatedDevicesResult, type IdentifyDeviceRequest, type IssuesAndMetricsByView, type JoinRoomRequest, KNOCK_MESSAGES, KalmanFilter, type KnockAcceptedEvent, type KnockRejectedEvent, type KnockRoomRequest, type KnockerLeftEvent, type LiveTranscriptionStartedEvent, type LiveTranscriptionStoppedEvent, Logger, MAXIMUM_TURN_BANDWIDTH, MAXIMUM_TURN_BANDWIDTH_UNLIMITED, MEDIA_JITTER_BUFFER_TARGET, type NewClientEvent, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, type RemoveSpotlightRequest, type RoleName, type RoomJoinedEvent, type RoomKnockedEvent, type RoomLockedEvent, type RoomSessionEndedEvent, type RtcClientConnectionStatusChangedPayload, RtcEventNames, type RtcEvents, type RtcLocalStreamTrackAddedPayload, type RtcLocalStreamTrackRemovedPayload, type RtcManager, type RtcManagerCreatedPayload, RtcManagerDispatcher, RtcStream, type RtcStreamAddedPayload, STREAM_TYPES, type ScreenshareStartedEvent, type ScreenshareStoppedEvent, type SendClientMetadataRequest, ServerSocket, Session, SfuV2Parser, type SignalClient, type SignalEvents, type SignalKnocker, type SignalRequests, type SocketConf, type SocketManager, type Spotlight, type SpotlightAddedEvent, type SpotlightRemovedEvent, type StatsMonitorOptions, type StatsMonitorState, type StatsSubscription, TYPES, type TrackStats, type TurnTransportProtocol, type UpdatedDeviceInfo, type UpdatedDevicesInfo, VegaConnection, VegaMediaQualityMonitor, VegaRtcManager, type VideoEnableRequest, type VideoEnableRequestedEvent, type VideoEnabledEvent, type ViewStats, addAbsCaptureTimeExtMap, addExtMap, assert, buildDeviceList, calculateStd, captureAudioSsrcMetrics, captureCandidatePairInfoMetrics, captureCommonSsrcMetrics, captureSsrcInfo, captureVideoSsrcMetrics, changeMediaDirection, cleanSdp, compareLocalDevices, createACFCalculator, createMicAnalyser, createWorker, deprioritizeH264, detectMicrophoneNotWorking, enumerate, filterMidExtension, filterMsidSemantic, fromLocation, generateByteString, getConstraints, getCurrentPeerConnections, getDeviceData, getDisplayMedia, getIssuesAndMetrics, getMediaConstraints, getMediaSettings, getMediasoupDevice, getNumFailedStatsReports, getNumFailedTrackSsrcLookups, getNumMissingTrackSsrcLookups, getOptimalBitrate, getPeerConnectionIndex, getStats, getStream, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, isRelayed, maybeRejectNoH264, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceSSRCs, replaceTracksInStream, _default as rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, sortCodecsByMimeType, type ssrcStats, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, variance };
1661
+ export { type AddSpotlightRequest, type AudioEnableRequest, type AudioEnableRequestedEvent, type AudioEnabledEvent, BandwidthTester, type BreakoutConfig, type BreakoutGroupJoinedEvent, type BreakoutSessionUpdatedEvent, type ChatMessage, type ClientKickedEvent, type ClientLeftEvent, type ClientMetadataPayload, type ClientMetadataReceivedEvent, type ClientRole, type ClientUnableToJoinEvent, type CloudRecordingStartedEvent, type Codec, type Credentials, type CustomMediaStreamTrack, EVENTS, type GetConstraintsOptions, type GetDeviceDataResult, type GetMediaConstraintsOptions, type GetStreamOptions, type GetStreamResult, type GetUpdatedDevicesResult, type IdentifyDeviceRequest, type IssuesAndMetricsByView, type JoinRoomRequest, KNOCK_MESSAGES, KalmanFilter, type KnockAcceptedEvent, type KnockRejectedEvent, type KnockRoomRequest, type KnockerLeftEvent, type LiveTranscriptionStartedEvent, type LiveTranscriptionStoppedEvent, Logger, MAXIMUM_TURN_BANDWIDTH, MAXIMUM_TURN_BANDWIDTH_UNLIMITED, MEDIA_JITTER_BUFFER_TARGET, type NewClientEvent, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, type RemoveSpotlightRequest, type RoleName, type RoomJoinedEvent, type RoomKnockedEvent, type RoomLockedEvent, type RoomSessionEndedEvent, type RtcClientConnectionStatusChangedPayload, RtcEventNames, type RtcEvents, type RtcLocalStreamTrackAddedPayload, type RtcLocalStreamTrackRemovedPayload, type RtcManager, type RtcManagerCreatedPayload, RtcManagerDispatcher, RtcStream, type RtcStreamAddedPayload, STREAM_TYPES, type ScreenshareStartedEvent, type ScreenshareStoppedEvent, type SendClientMetadataRequest, ServerSocket, Session, SfuV2Parser, type SignalClient, type SignalEvents, type SignalKnocker, type SignalRequests, type SocketConf, type SocketManager, type Spotlight, type SpotlightAddedEvent, type SpotlightRemovedEvent, type StatsMonitorOptions, type StatsMonitorState, type StatsSubscription, TYPES, type TrackStats, type TurnTransportProtocol, type UpdatedDeviceInfo, type UpdatedDevicesInfo, VegaConnection, VegaMediaQualityMonitor, VegaRtcManager, type VideoEnableRequest, type VideoEnableRequestedEvent, type VideoEnabledEvent, type ViewStats, addAbsCaptureTimeExtMap, addExtMap, assert, buildDeviceList, calculateStd, captureAudioSsrcMetrics, captureCandidatePairInfoMetrics, captureCommonSsrcMetrics, captureSsrcInfo, captureVideoSsrcMetrics, changeMediaDirection, cleanSdp, compareLocalDevices, createACFCalculator, createMicAnalyser, createWorker, deprioritizeH264, detectMicrophoneNotWorking, enumerate, external_stun_servers, filterMidExtension, filterMsidSemantic, fromLocation, generateByteString, getConstraints, getCurrentPeerConnections, getDeviceData, getDisplayMedia, getIssuesAndMetrics, getMediaConstraints, getMediaSettings, getMediasoupDevice, getNumFailedStatsReports, getNumFailedTrackSsrcLookups, getNumMissingTrackSsrcLookups, getOptimalBitrate, getPeerConnectionIndex, getStats, getStream, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, isRelayed, maybeRejectNoH264, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceSSRCs, replaceTracksInStream, _default as rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, sortCodecsByMimeType, type ssrcStats, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, turnServerOverride, variance };
package/dist/index.mjs CHANGED
@@ -3003,18 +3003,62 @@ class ServerSocket {
3003
3003
  }
3004
3004
  }
3005
3005
 
3006
- const maybeTurnOnly = (transportConfig, features) => {
3006
+ const maybeTurnOnly = (iceConfig, features) => {
3007
3007
  if (!features.useOnlyTURN) {
3008
3008
  return;
3009
3009
  }
3010
- transportConfig.iceTransportPolicy = "relay";
3010
+ iceConfig.iceTransportPolicy = "relay";
3011
3011
  const filter = {
3012
3012
  onlyudp: /^turn:.*transport=udp$/,
3013
3013
  onlytcp: /^turn:.*transport=tcp$/,
3014
3014
  onlytls: /^turns:.*transport=tcp$/,
3015
3015
  }[features.useOnlyTURN];
3016
3016
  if (filter) {
3017
- transportConfig.iceServers = transportConfig.iceServers.filter((entry) => entry.url && entry.url.match(filter));
3017
+ iceConfig.iceServers = iceConfig.iceServers.filter((entry) => {
3018
+ if (entry.url && entry.url.match(filter))
3019
+ return entry;
3020
+ if (entry.urls) {
3021
+ entry.urls = (entry.urls.some ? entry.urls : [entry.urls]).filter((url) => url.match(filter));
3022
+ if (entry.urls.length > 0)
3023
+ return entry;
3024
+ }
3025
+ });
3026
+ }
3027
+ };
3028
+ const external_stun_servers = (iceConfig, features) => {
3029
+ if (features.addGoogleStunServers) {
3030
+ iceConfig.iceServers = [
3031
+ { urls: "stun:stun.l.google.com:19302" },
3032
+ { urls: "stun:stun2.l.google.com:19302" },
3033
+ ...iceConfig.iceServers,
3034
+ ];
3035
+ }
3036
+ if (features.addCloudflareStunServers) {
3037
+ iceConfig.iceServers = [
3038
+ { urls: "stun:stun.cloudflare.com:3478" },
3039
+ { urls: "stun:stun.cloudflare.com:53" },
3040
+ ...iceConfig.iceServers,
3041
+ ];
3042
+ }
3043
+ };
3044
+ const turnServerOverride = (iceServers, overrideHost) => {
3045
+ if (overrideHost && iceServers) {
3046
+ const host = overrideHost;
3047
+ const port = host.indexOf(":") > 0 ? "" : ":443";
3048
+ const override = ":" + host + port;
3049
+ return iceServers.map((original) => {
3050
+ const entry = Object.assign({}, original);
3051
+ if (entry.url) {
3052
+ entry.url = entry.url.replace(/:[^?]*/, override);
3053
+ }
3054
+ if (entry.urls) {
3055
+ entry.urls = entry.urls.map((url) => url.replace(/:[^?]*/, override));
3056
+ }
3057
+ return entry;
3058
+ });
3059
+ }
3060
+ else {
3061
+ return iceServers;
3018
3062
  }
3019
3063
  };
3020
3064
 
@@ -3073,7 +3117,7 @@ if (browserName$1 === "chrome") {
3073
3117
  }
3074
3118
  class P2pRtcManager {
3075
3119
  constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features, }) {
3076
- const { name, session, iceServers, sfuServer, mediaserverConfigTtlSeconds } = room;
3120
+ const { name, session, iceServers, turnServers, sfuServer, mediaserverConfigTtlSeconds } = room;
3077
3121
  this._selfId = selfId;
3078
3122
  this._roomName = name;
3079
3123
  this._roomSessionId = session && session.id;
@@ -3100,7 +3144,8 @@ class P2pRtcManager {
3100
3144
  };
3101
3145
  this._updateAndScheduleMediaServersRefresh({
3102
3146
  sfuServer,
3103
- iceServers: iceServers.iceServers || [],
3147
+ iceServers: (iceServers === null || iceServers === void 0 ? void 0 : iceServers.iceServers) || [],
3148
+ turnServers: turnServers || [],
3104
3149
  mediaserverConfigTtlSeconds,
3105
3150
  });
3106
3151
  this.totalSessionsCreated = 0;
@@ -3429,48 +3474,11 @@ class P2pRtcManager {
3429
3474
  constraints.optional.push({ rtcStatsPeerId: peerConnectionId });
3430
3475
  constraints.optional.push({ rtcStatsConferenceId: this._roomName });
3431
3476
  const peerConnectionConfig = {
3432
- iceServers: this._iceServers,
3477
+ iceServers: this._features.turnServersOn ? this._turnServers : this._iceServers,
3433
3478
  };
3434
- if (this._features.turnServerOverrideHost) {
3435
- const host = this._features.turnServerOverrideHost;
3436
- const port = host.indexOf(":") > 0 ? "" : ":443";
3437
- const override = ":" + host + port;
3438
- peerConnectionConfig.iceServers = peerConnectionConfig.iceServers.map((original) => {
3439
- const entry = Object.assign({}, original);
3440
- if (entry.url) {
3441
- entry.url = entry.url.replace(/:[^?]*/, override);
3442
- }
3443
- if (entry.urls) {
3444
- entry.urls = entry.urls.map((url) => url.replace(/:[^?]*/, override));
3445
- }
3446
- return entry;
3447
- });
3448
- }
3449
- if (this._features.addGoogleStunServers) {
3450
- peerConnectionConfig.iceServers = [
3451
- ...peerConnectionConfig.iceServers,
3452
- { urls: "stun:stun.l.google.com:19302" },
3453
- { urls: "stun:stun2.l.google.com:19302" },
3454
- ];
3455
- }
3456
- if (this._features.addCloudflareStunServers) {
3457
- peerConnectionConfig.iceServers = [
3458
- ...peerConnectionConfig.iceServers,
3459
- { urls: "stun:stun.cloudflare.com:3478" },
3460
- { urls: "stun:stun.cloudflare.com:53" },
3461
- ];
3462
- }
3463
- if (this._features.useOnlyTURN) {
3464
- peerConnectionConfig.iceTransportPolicy = "relay";
3465
- const filter = {
3466
- onlyudp: /^turn:.*transport=udp$/,
3467
- onlytcp: /^turn:.*transport=tcp$/,
3468
- onlytls: /^turns:.*transport=tcp$/,
3469
- }[this._features.useOnlyTURN];
3470
- if (filter) {
3471
- peerConnectionConfig.iceServers = peerConnectionConfig.iceServers.filter((entry) => entry.url && entry.url.match(filter));
3472
- }
3473
- }
3479
+ peerConnectionConfig.iceServers = turnServerOverride(peerConnectionConfig.iceServers, this._features.turnServerOverrideHost);
3480
+ external_stun_servers(peerConnectionConfig, this._features);
3481
+ maybeTurnOnly(peerConnectionConfig, this._features);
3474
3482
  if (browserName$1 === "chrome") {
3475
3483
  peerConnectionConfig.sdpSemantics = "unified-plan";
3476
3484
  }
@@ -3684,8 +3692,9 @@ class P2pRtcManager {
3684
3692
  delete this.localStreams[streamId];
3685
3693
  this._deleteEnabledLocalStreamId(streamId);
3686
3694
  }
3687
- _updateAndScheduleMediaServersRefresh({ iceServers, sfuServer, mediaserverConfigTtlSeconds }) {
3695
+ _updateAndScheduleMediaServersRefresh({ iceServers, turnServers, sfuServer, mediaserverConfigTtlSeconds }) {
3688
3696
  this._iceServers = iceServers;
3697
+ this._turnServers = turnServers;
3689
3698
  this._sfuServer = sfuServer;
3690
3699
  this._mediaserverConfigTtlSeconds = mediaserverConfigTtlSeconds;
3691
3700
  this._clearMediaServersRefresh();
@@ -3753,7 +3762,7 @@ class P2pRtcManager {
3753
3762
  this._negotiatePeerConnection(clientId, session, Object.assign({}, this.offerOptions, { iceRestart: true }));
3754
3763
  }
3755
3764
  }
3756
- _setCodecPreferences(pc, { vp9On, av1On, redOn }) {
3765
+ _setCodecPreferences(pc, { vp9On, av1On, redOn, }) {
3757
3766
  try {
3758
3767
  const audioTransceivers = pc
3759
3768
  .getTransceivers()
@@ -4916,7 +4925,7 @@ if (browserName === "chrome")
4916
4925
  window.document.addEventListener("beforeunload", () => (unloading = true));
4917
4926
  class VegaRtcManager {
4918
4927
  constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features, eventClaim, }) {
4919
- const { session, iceServers, sfuServer, sfuServers, mediaserverConfigTtlSeconds } = room;
4928
+ const { session, iceServers, turnServers, sfuServer, sfuServers, mediaserverConfigTtlSeconds } = room;
4920
4929
  this._selfId = selfId;
4921
4930
  this._room = room;
4922
4931
  this._roomSessionId = session === null || session === void 0 ? void 0 : session.id;
@@ -4969,7 +4978,8 @@ class VegaRtcManager {
4969
4978
  this._updateAndScheduleMediaServersRefresh({
4970
4979
  sfuServer,
4971
4980
  sfuServers,
4972
- iceServers: iceServers.iceServers || [],
4981
+ iceServers: (iceServers === null || iceServers === void 0 ? void 0 : iceServers.iceServers) || [],
4982
+ turnServers: turnServers || [],
4973
4983
  mediaserverConfigTtlSeconds,
4974
4984
  });
4975
4985
  this._socketListenerDeregisterFunctions = [];
@@ -4983,9 +4993,10 @@ class VegaRtcManager {
4983
4993
  });
4984
4994
  this._networkIsDetectedUpBySignal = false;
4985
4995
  }
4986
- _updateAndScheduleMediaServersRefresh({ iceServers, sfuServer, sfuServers, mediaserverConfigTtlSeconds, }) {
4996
+ _updateAndScheduleMediaServersRefresh({ iceServers, turnServers, sfuServer, sfuServers, mediaserverConfigTtlSeconds, }) {
4987
4997
  var _a, _b, _c;
4988
4998
  this._iceServers = iceServers;
4999
+ this._turnServers = turnServers;
4989
5000
  this._sfuServer = sfuServer;
4990
5001
  this._sfuServers = sfuServers;
4991
5002
  if (!sfuServers && (sfuServer === null || sfuServer === void 0 ? void 0 : sfuServer.fallbackServers)) {
@@ -4999,8 +5010,12 @@ class VegaRtcManager {
4999
5010
  this._sfuServers ||
5000
5011
  this._features.sfuServerOverrideHost ||
5001
5012
  sfuServer.url);
5002
- (_b = this._sendTransport) === null || _b === void 0 ? void 0 : _b.updateIceServers({ iceServers: this._iceServers });
5003
- (_c = this._receiveTransport) === null || _c === void 0 ? void 0 : _c.updateIceServers({ iceServers: this._iceServers });
5013
+ const iceServersList = {
5014
+ iceServers: this._features.turnServersOn ? this._turnServers : this._iceServers,
5015
+ };
5016
+ iceServersList.iceServers = turnServerOverride(iceServersList.iceServers, this._features.turnServerOverrideHost);
5017
+ (_b = this._sendTransport) === null || _b === void 0 ? void 0 : _b.updateIceServers(iceServersList);
5018
+ (_c = this._receiveTransport) === null || _c === void 0 ? void 0 : _c.updateIceServers(iceServersList);
5004
5019
  this._clearMediaServersRefresh();
5005
5020
  if (!mediaserverConfigTtlSeconds) {
5006
5021
  return;
@@ -5197,7 +5212,7 @@ class VegaRtcManager {
5197
5212
  sctpSendBufferSize: 262144,
5198
5213
  },
5199
5214
  });
5200
- transportOptions.iceServers = this._iceServers;
5215
+ transportOptions.iceServers = turnServerOverride(this._features.turnServersOn ? this._turnServers : this._iceServers, this._features.turnServerOverrideHost);
5201
5216
  maybeTurnOnly(transportOptions, this._features);
5202
5217
  const transport = (_a = this._mediasoupDevice) === null || _a === void 0 ? void 0 : _a[creator](transportOptions);
5203
5218
  const onConnectionStateListener = (connectionState) => __awaiter(this, void 0, void 0, function* () {
@@ -7930,4 +7945,4 @@ var RtcEventNames;
7930
7945
  RtcEventNames["stream_added"] = "stream_added";
7931
7946
  })(RtcEventNames || (RtcEventNames = {}));
7932
7947
 
7933
- export { BandwidthTester, EVENTS, KNOCK_MESSAGES, KalmanFilter, Logger, MAXIMUM_TURN_BANDWIDTH, MAXIMUM_TURN_BANDWIDTH_UNLIMITED, MEDIA_JITTER_BUFFER_TARGET, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, RtcEventNames, RtcManagerDispatcher, RtcStream, STREAM_TYPES, ServerSocket, Session, SfuV2Parser, TYPES, VegaConnection, VegaMediaQualityMonitor, VegaRtcManager, addAbsCaptureTimeExtMap, addExtMap, assert, buildDeviceList, calculateStd, captureAudioSsrcMetrics, captureCandidatePairInfoMetrics, captureCommonSsrcMetrics, captureSsrcInfo, captureVideoSsrcMetrics, changeMediaDirection, cleanSdp, compareLocalDevices, createACFCalculator, createMicAnalyser, createWorker, deprioritizeH264, detectMicrophoneNotWorking, enumerate, filterMidExtension, filterMsidSemantic, fromLocation, generateByteString, getConstraints, getCurrentPeerConnections, getDeviceData, getDisplayMedia, getIssuesAndMetrics, getMediaConstraints, getMediaSettings, getMediasoupDevice, getNumFailedStatsReports, getNumFailedTrackSsrcLookups, getNumMissingTrackSsrcLookups, getOptimalBitrate, getPeerConnectionIndex, getStats, getStream, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, isRelayed, maybeRejectNoH264, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceSSRCs, replaceTracksInStream, rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, sortCodecsByMimeType, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, variance };
7948
+ export { BandwidthTester, EVENTS, KNOCK_MESSAGES, KalmanFilter, Logger, MAXIMUM_TURN_BANDWIDTH, MAXIMUM_TURN_BANDWIDTH_UNLIMITED, MEDIA_JITTER_BUFFER_TARGET, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, RtcEventNames, RtcManagerDispatcher, RtcStream, STREAM_TYPES, ServerSocket, Session, SfuV2Parser, TYPES, VegaConnection, VegaMediaQualityMonitor, VegaRtcManager, addAbsCaptureTimeExtMap, addExtMap, assert, buildDeviceList, calculateStd, captureAudioSsrcMetrics, captureCandidatePairInfoMetrics, captureCommonSsrcMetrics, captureSsrcInfo, captureVideoSsrcMetrics, changeMediaDirection, cleanSdp, compareLocalDevices, createACFCalculator, createMicAnalyser, createWorker, deprioritizeH264, detectMicrophoneNotWorking, enumerate, external_stun_servers, filterMidExtension, filterMsidSemantic, fromLocation, generateByteString, getConstraints, getCurrentPeerConnections, getDeviceData, getDisplayMedia, getIssuesAndMetrics, getMediaConstraints, getMediaSettings, getMediasoupDevice, getNumFailedStatsReports, getNumFailedTrackSsrcLookups, getNumMissingTrackSsrcLookups, getOptimalBitrate, getPeerConnectionIndex, getStats, getStream, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, isRelayed, maybeRejectNoH264, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceSSRCs, replaceTracksInStream, rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, sortCodecsByMimeType, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, turnServerOverride, variance };
@@ -3003,18 +3003,62 @@ class ServerSocket {
3003
3003
  }
3004
3004
  }
3005
3005
 
3006
- const maybeTurnOnly = (transportConfig, features) => {
3006
+ const maybeTurnOnly = (iceConfig, features) => {
3007
3007
  if (!features.useOnlyTURN) {
3008
3008
  return;
3009
3009
  }
3010
- transportConfig.iceTransportPolicy = "relay";
3010
+ iceConfig.iceTransportPolicy = "relay";
3011
3011
  const filter = {
3012
3012
  onlyudp: /^turn:.*transport=udp$/,
3013
3013
  onlytcp: /^turn:.*transport=tcp$/,
3014
3014
  onlytls: /^turns:.*transport=tcp$/,
3015
3015
  }[features.useOnlyTURN];
3016
3016
  if (filter) {
3017
- transportConfig.iceServers = transportConfig.iceServers.filter((entry) => entry.url && entry.url.match(filter));
3017
+ iceConfig.iceServers = iceConfig.iceServers.filter((entry) => {
3018
+ if (entry.url && entry.url.match(filter))
3019
+ return entry;
3020
+ if (entry.urls) {
3021
+ entry.urls = (entry.urls.some ? entry.urls : [entry.urls]).filter((url) => url.match(filter));
3022
+ if (entry.urls.length > 0)
3023
+ return entry;
3024
+ }
3025
+ });
3026
+ }
3027
+ };
3028
+ const external_stun_servers = (iceConfig, features) => {
3029
+ if (features.addGoogleStunServers) {
3030
+ iceConfig.iceServers = [
3031
+ { urls: "stun:stun.l.google.com:19302" },
3032
+ { urls: "stun:stun2.l.google.com:19302" },
3033
+ ...iceConfig.iceServers,
3034
+ ];
3035
+ }
3036
+ if (features.addCloudflareStunServers) {
3037
+ iceConfig.iceServers = [
3038
+ { urls: "stun:stun.cloudflare.com:3478" },
3039
+ { urls: "stun:stun.cloudflare.com:53" },
3040
+ ...iceConfig.iceServers,
3041
+ ];
3042
+ }
3043
+ };
3044
+ const turnServerOverride = (iceServers, overrideHost) => {
3045
+ if (overrideHost && iceServers) {
3046
+ const host = overrideHost;
3047
+ const port = host.indexOf(":") > 0 ? "" : ":443";
3048
+ const override = ":" + host + port;
3049
+ return iceServers.map((original) => {
3050
+ const entry = Object.assign({}, original);
3051
+ if (entry.url) {
3052
+ entry.url = entry.url.replace(/:[^?]*/, override);
3053
+ }
3054
+ if (entry.urls) {
3055
+ entry.urls = entry.urls.map((url) => url.replace(/:[^?]*/, override));
3056
+ }
3057
+ return entry;
3058
+ });
3059
+ }
3060
+ else {
3061
+ return iceServers;
3018
3062
  }
3019
3063
  };
3020
3064
 
@@ -3073,7 +3117,7 @@ if (browserName$1 === "chrome") {
3073
3117
  }
3074
3118
  class P2pRtcManager {
3075
3119
  constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features, }) {
3076
- const { name, session, iceServers, sfuServer, mediaserverConfigTtlSeconds } = room;
3120
+ const { name, session, iceServers, turnServers, sfuServer, mediaserverConfigTtlSeconds } = room;
3077
3121
  this._selfId = selfId;
3078
3122
  this._roomName = name;
3079
3123
  this._roomSessionId = session && session.id;
@@ -3100,7 +3144,8 @@ class P2pRtcManager {
3100
3144
  };
3101
3145
  this._updateAndScheduleMediaServersRefresh({
3102
3146
  sfuServer,
3103
- iceServers: iceServers.iceServers || [],
3147
+ iceServers: (iceServers === null || iceServers === void 0 ? void 0 : iceServers.iceServers) || [],
3148
+ turnServers: turnServers || [],
3104
3149
  mediaserverConfigTtlSeconds,
3105
3150
  });
3106
3151
  this.totalSessionsCreated = 0;
@@ -3429,48 +3474,11 @@ class P2pRtcManager {
3429
3474
  constraints.optional.push({ rtcStatsPeerId: peerConnectionId });
3430
3475
  constraints.optional.push({ rtcStatsConferenceId: this._roomName });
3431
3476
  const peerConnectionConfig = {
3432
- iceServers: this._iceServers,
3477
+ iceServers: this._features.turnServersOn ? this._turnServers : this._iceServers,
3433
3478
  };
3434
- if (this._features.turnServerOverrideHost) {
3435
- const host = this._features.turnServerOverrideHost;
3436
- const port = host.indexOf(":") > 0 ? "" : ":443";
3437
- const override = ":" + host + port;
3438
- peerConnectionConfig.iceServers = peerConnectionConfig.iceServers.map((original) => {
3439
- const entry = Object.assign({}, original);
3440
- if (entry.url) {
3441
- entry.url = entry.url.replace(/:[^?]*/, override);
3442
- }
3443
- if (entry.urls) {
3444
- entry.urls = entry.urls.map((url) => url.replace(/:[^?]*/, override));
3445
- }
3446
- return entry;
3447
- });
3448
- }
3449
- if (this._features.addGoogleStunServers) {
3450
- peerConnectionConfig.iceServers = [
3451
- ...peerConnectionConfig.iceServers,
3452
- { urls: "stun:stun.l.google.com:19302" },
3453
- { urls: "stun:stun2.l.google.com:19302" },
3454
- ];
3455
- }
3456
- if (this._features.addCloudflareStunServers) {
3457
- peerConnectionConfig.iceServers = [
3458
- ...peerConnectionConfig.iceServers,
3459
- { urls: "stun:stun.cloudflare.com:3478" },
3460
- { urls: "stun:stun.cloudflare.com:53" },
3461
- ];
3462
- }
3463
- if (this._features.useOnlyTURN) {
3464
- peerConnectionConfig.iceTransportPolicy = "relay";
3465
- const filter = {
3466
- onlyudp: /^turn:.*transport=udp$/,
3467
- onlytcp: /^turn:.*transport=tcp$/,
3468
- onlytls: /^turns:.*transport=tcp$/,
3469
- }[this._features.useOnlyTURN];
3470
- if (filter) {
3471
- peerConnectionConfig.iceServers = peerConnectionConfig.iceServers.filter((entry) => entry.url && entry.url.match(filter));
3472
- }
3473
- }
3479
+ peerConnectionConfig.iceServers = turnServerOverride(peerConnectionConfig.iceServers, this._features.turnServerOverrideHost);
3480
+ external_stun_servers(peerConnectionConfig, this._features);
3481
+ maybeTurnOnly(peerConnectionConfig, this._features);
3474
3482
  if (browserName$1 === "chrome") {
3475
3483
  peerConnectionConfig.sdpSemantics = "unified-plan";
3476
3484
  }
@@ -3684,8 +3692,9 @@ class P2pRtcManager {
3684
3692
  delete this.localStreams[streamId];
3685
3693
  this._deleteEnabledLocalStreamId(streamId);
3686
3694
  }
3687
- _updateAndScheduleMediaServersRefresh({ iceServers, sfuServer, mediaserverConfigTtlSeconds }) {
3695
+ _updateAndScheduleMediaServersRefresh({ iceServers, turnServers, sfuServer, mediaserverConfigTtlSeconds }) {
3688
3696
  this._iceServers = iceServers;
3697
+ this._turnServers = turnServers;
3689
3698
  this._sfuServer = sfuServer;
3690
3699
  this._mediaserverConfigTtlSeconds = mediaserverConfigTtlSeconds;
3691
3700
  this._clearMediaServersRefresh();
@@ -3753,7 +3762,7 @@ class P2pRtcManager {
3753
3762
  this._negotiatePeerConnection(clientId, session, Object.assign({}, this.offerOptions, { iceRestart: true }));
3754
3763
  }
3755
3764
  }
3756
- _setCodecPreferences(pc, { vp9On, av1On, redOn }) {
3765
+ _setCodecPreferences(pc, { vp9On, av1On, redOn, }) {
3757
3766
  try {
3758
3767
  const audioTransceivers = pc
3759
3768
  .getTransceivers()
@@ -4916,7 +4925,7 @@ if (browserName === "chrome")
4916
4925
  window.document.addEventListener("beforeunload", () => (unloading = true));
4917
4926
  class VegaRtcManager {
4918
4927
  constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features, eventClaim, }) {
4919
- const { session, iceServers, sfuServer, sfuServers, mediaserverConfigTtlSeconds } = room;
4928
+ const { session, iceServers, turnServers, sfuServer, sfuServers, mediaserverConfigTtlSeconds } = room;
4920
4929
  this._selfId = selfId;
4921
4930
  this._room = room;
4922
4931
  this._roomSessionId = session === null || session === void 0 ? void 0 : session.id;
@@ -4969,7 +4978,8 @@ class VegaRtcManager {
4969
4978
  this._updateAndScheduleMediaServersRefresh({
4970
4979
  sfuServer,
4971
4980
  sfuServers,
4972
- iceServers: iceServers.iceServers || [],
4981
+ iceServers: (iceServers === null || iceServers === void 0 ? void 0 : iceServers.iceServers) || [],
4982
+ turnServers: turnServers || [],
4973
4983
  mediaserverConfigTtlSeconds,
4974
4984
  });
4975
4985
  this._socketListenerDeregisterFunctions = [];
@@ -4983,9 +4993,10 @@ class VegaRtcManager {
4983
4993
  });
4984
4994
  this._networkIsDetectedUpBySignal = false;
4985
4995
  }
4986
- _updateAndScheduleMediaServersRefresh({ iceServers, sfuServer, sfuServers, mediaserverConfigTtlSeconds, }) {
4996
+ _updateAndScheduleMediaServersRefresh({ iceServers, turnServers, sfuServer, sfuServers, mediaserverConfigTtlSeconds, }) {
4987
4997
  var _a, _b, _c;
4988
4998
  this._iceServers = iceServers;
4999
+ this._turnServers = turnServers;
4989
5000
  this._sfuServer = sfuServer;
4990
5001
  this._sfuServers = sfuServers;
4991
5002
  if (!sfuServers && (sfuServer === null || sfuServer === void 0 ? void 0 : sfuServer.fallbackServers)) {
@@ -4999,8 +5010,12 @@ class VegaRtcManager {
4999
5010
  this._sfuServers ||
5000
5011
  this._features.sfuServerOverrideHost ||
5001
5012
  sfuServer.url);
5002
- (_b = this._sendTransport) === null || _b === void 0 ? void 0 : _b.updateIceServers({ iceServers: this._iceServers });
5003
- (_c = this._receiveTransport) === null || _c === void 0 ? void 0 : _c.updateIceServers({ iceServers: this._iceServers });
5013
+ const iceServersList = {
5014
+ iceServers: this._features.turnServersOn ? this._turnServers : this._iceServers,
5015
+ };
5016
+ iceServersList.iceServers = turnServerOverride(iceServersList.iceServers, this._features.turnServerOverrideHost);
5017
+ (_b = this._sendTransport) === null || _b === void 0 ? void 0 : _b.updateIceServers(iceServersList);
5018
+ (_c = this._receiveTransport) === null || _c === void 0 ? void 0 : _c.updateIceServers(iceServersList);
5004
5019
  this._clearMediaServersRefresh();
5005
5020
  if (!mediaserverConfigTtlSeconds) {
5006
5021
  return;
@@ -5197,7 +5212,7 @@ class VegaRtcManager {
5197
5212
  sctpSendBufferSize: 262144,
5198
5213
  },
5199
5214
  });
5200
- transportOptions.iceServers = this._iceServers;
5215
+ transportOptions.iceServers = turnServerOverride(this._features.turnServersOn ? this._turnServers : this._iceServers, this._features.turnServerOverrideHost);
5201
5216
  maybeTurnOnly(transportOptions, this._features);
5202
5217
  const transport = (_a = this._mediasoupDevice) === null || _a === void 0 ? void 0 : _a[creator](transportOptions);
5203
5218
  const onConnectionStateListener = (connectionState) => __awaiter(this, void 0, void 0, function* () {
@@ -7930,5 +7945,5 @@ var RtcEventNames;
7930
7945
  RtcEventNames["stream_added"] = "stream_added";
7931
7946
  })(RtcEventNames || (RtcEventNames = {}));
7932
7947
 
7933
- export { BandwidthTester, EVENTS, KNOCK_MESSAGES, KalmanFilter, Logger, MAXIMUM_TURN_BANDWIDTH, MAXIMUM_TURN_BANDWIDTH_UNLIMITED, MEDIA_JITTER_BUFFER_TARGET, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, RtcEventNames, RtcManagerDispatcher, RtcStream, STREAM_TYPES, ServerSocket, Session, SfuV2Parser, TYPES, VegaConnection, VegaMediaQualityMonitor, VegaRtcManager, addAbsCaptureTimeExtMap, addExtMap, assert, buildDeviceList, calculateStd, captureAudioSsrcMetrics, captureCandidatePairInfoMetrics, captureCommonSsrcMetrics, captureSsrcInfo, captureVideoSsrcMetrics, changeMediaDirection, cleanSdp, compareLocalDevices, createACFCalculator, createMicAnalyser, createWorker, deprioritizeH264, detectMicrophoneNotWorking, enumerate, filterMidExtension, filterMsidSemantic, fromLocation, generateByteString, getConstraints, getCurrentPeerConnections, getDeviceData, getDisplayMedia, getIssuesAndMetrics, getMediaConstraints, getMediaSettings, getMediasoupDevice, getNumFailedStatsReports, getNumFailedTrackSsrcLookups, getNumMissingTrackSsrcLookups, getOptimalBitrate, getPeerConnectionIndex, getStats, getStream, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, isRelayed, maybeRejectNoH264, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceSSRCs, replaceTracksInStream, rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, sortCodecsByMimeType, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, variance };
7948
+ export { BandwidthTester, EVENTS, KNOCK_MESSAGES, KalmanFilter, Logger, MAXIMUM_TURN_BANDWIDTH, MAXIMUM_TURN_BANDWIDTH_UNLIMITED, MEDIA_JITTER_BUFFER_TARGET, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, RtcEventNames, RtcManagerDispatcher, RtcStream, STREAM_TYPES, ServerSocket, Session, SfuV2Parser, TYPES, VegaConnection, VegaMediaQualityMonitor, VegaRtcManager, addAbsCaptureTimeExtMap, addExtMap, assert, buildDeviceList, calculateStd, captureAudioSsrcMetrics, captureCandidatePairInfoMetrics, captureCommonSsrcMetrics, captureSsrcInfo, captureVideoSsrcMetrics, changeMediaDirection, cleanSdp, compareLocalDevices, createACFCalculator, createMicAnalyser, createWorker, deprioritizeH264, detectMicrophoneNotWorking, enumerate, external_stun_servers, filterMidExtension, filterMsidSemantic, fromLocation, generateByteString, getConstraints, getCurrentPeerConnections, getDeviceData, getDisplayMedia, getIssuesAndMetrics, getMediaConstraints, getMediaSettings, getMediasoupDevice, getNumFailedStatsReports, getNumFailedTrackSsrcLookups, getNumMissingTrackSsrcLookups, getOptimalBitrate, getPeerConnectionIndex, getStats, getStream, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, isRelayed, maybeRejectNoH264, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceSSRCs, replaceTracksInStream, rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, sortCodecsByMimeType, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, turnServerOverride, variance };
7934
7949
  //# sourceMappingURL=legacy-esm.js.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@whereby.com/media",
3
3
  "description": "Media library for Whereby",
4
- "version": "1.20.0",
4
+ "version": "1.21.0",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/whereby/sdk",
7
7
  "repository": {
@@ -14,6 +14,7 @@
14
14
  "scripts": {
15
15
  "clean": "rimraf dist node_modules .turbo",
16
16
  "build": "rimraf dist && rollup -c rollup.config.js",
17
+ "watch": "rimraf dist && rollup -w -c rollup.config.js",
17
18
  "test": "npm run test:lint && npm run test:unit",
18
19
  "test:unit": "jest",
19
20
  "test:lint": "eslint src tests",