@whereby.com/media 2.7.1 → 2.7.3

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
@@ -2071,18 +2071,6 @@ function deprioritizeH264(sdp) {
2071
2071
  })
2072
2072
  .join("");
2073
2073
  }
2074
- function replaceSSRCs(currentDescription, newDescription) {
2075
- let ssrcs = currentDescription.match(/a=ssrc-group:FID (\d+) (\d+)\r\n/);
2076
- let newssrcs = newDescription.match(/a=ssrc-group:FID (\d+) (\d+)\r\n/);
2077
- if (!ssrcs) {
2078
- ssrcs = currentDescription.match(/a=ssrc:(\d+) cname:(.*)\r\n/g)[1].match(/a=ssrc:(\d+)/);
2079
- newssrcs = newDescription.match(/a=ssrc:(\d+) cname:(.*)\r\n/g)[1].match(/a=ssrc:(\d+)/);
2080
- }
2081
- for (let i = 1; i < ssrcs.length; i++) {
2082
- newDescription = newDescription.replace(new RegExp(newssrcs[i], "g"), ssrcs[i]);
2083
- }
2084
- return newDescription;
2085
- }
2086
2074
  function filterMidExtension(sdp) {
2087
2075
  if (browserName$2 !== "safari" &&
2088
2076
  (browserName$2 !== "firefox" || (browserVersion$1 && browserVersion$1 >= 63) || browserVersion$1 === 60)) {
@@ -2367,7 +2355,6 @@ class Session {
2367
2355
  return this.pc && this.pc.connectionState === "connected";
2368
2356
  }
2369
2357
  replaceTrack(oldTrack, newTrack) {
2370
- var _a, _b, _c;
2371
2358
  logger$7.info("replacetrack() [oldTrackId: %s, newTrackId: %s]", oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.id, newTrack === null || newTrack === void 0 ? void 0 : newTrack.id);
2372
2359
  if (!newTrack) {
2373
2360
  rtcStats.sendEvent("P2PReplaceTrackNoNewTrack", {
@@ -2388,55 +2375,38 @@ class Session {
2388
2375
  return false;
2389
2376
  }
2390
2377
  const pc = this.pc;
2391
- if ((_b = (_a = window.RTCRtpSender) === null || _a === void 0 ? void 0 : _a.prototype) === null || _b === void 0 ? void 0 : _b.replaceTrack) {
2392
- if (oldTrack) {
2393
- const sender = pc.getSenders().find((s) => { var _a; return ((_a = s.track) === null || _a === void 0 ? void 0 : _a.id) === oldTrack.id; });
2394
- if (sender) {
2395
- sender.replaceTrack(newTrack);
2396
- return Promise.resolve(newTrack);
2397
- }
2398
- }
2399
- const sender = pc.getSenders().find((s) => {
2400
- const track = s.track;
2401
- return (track === null || track === void 0 ? void 0 : track.kind) === newTrack.kind && !trackAnnotations(track).fromGetDisplayMedia;
2402
- });
2378
+ if (oldTrack) {
2379
+ const sender = pc.getSenders().find((s) => { var _a; return ((_a = s.track) === null || _a === void 0 ? void 0 : _a.id) === oldTrack.id; });
2403
2380
  if (sender) {
2404
- this._incrementAnalyticMetric("P2PReplaceTrackOldTrackNotFound");
2405
- const track = sender.track;
2406
- rtcStats.sendEvent("P2PReplaceTrackOldTrackNotFound", {
2407
- targetTrackId: track === null || track === void 0 ? void 0 : track.id,
2408
- targetTrackKind: track === null || track === void 0 ? void 0 : track.kind,
2409
- targetTrackIsEffect: track === null || track === void 0 ? void 0 : track.effectTrack,
2410
- targetTrackReadyState: track === null || track === void 0 ? void 0 : track.readyState,
2411
- newTrackId: newTrack.id,
2412
- newTrackKind: newTrack.kind,
2413
- newTrackIsEffect: newTrack.effectTrack,
2414
- oldTrackId: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.id,
2415
- oldTrackKind: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.kind,
2416
- oldTrackIsEffect: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.effectTrack,
2417
- });
2418
2381
  sender.replaceTrack(newTrack);
2419
2382
  return Promise.resolve(newTrack);
2420
2383
  }
2421
- let stream = this.streams.find((s) => s.getTracks().find((t) => t.id === newTrack.id));
2422
- if (!stream) {
2423
- rtcStats.sendEvent("P2PReplaceTrackNewTrackNotInStream", {
2424
- oldTrackId: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.id,
2425
- oldTrackKind: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.kind,
2426
- oldTrackIsEffect: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.effectTrack,
2427
- newTrackId: newTrack.id,
2428
- newTrackKind: newTrack.kind,
2429
- newTrackIsEffect: newTrack.effectTrack,
2430
- });
2431
- this._incrementAnalyticMetric("P2PReplaceTrackNewTrackNotInStream");
2432
- }
2433
- stream = this.streams[0];
2434
- if (!stream) {
2435
- rtcStats.sendEvent("P2PReplaceTrackNoStream", {});
2436
- this._incrementAnalyticMetric("P2PReplaceTrackNoStream");
2437
- return Promise.reject(new Error("replaceTrack: No stream?"));
2438
- }
2439
- rtcStats.sendEvent("P2PReplaceTrackSourceKindNotFound", {
2384
+ }
2385
+ const sender = pc.getSenders().find((s) => {
2386
+ const track = s.track;
2387
+ return (track === null || track === void 0 ? void 0 : track.kind) === newTrack.kind && !trackAnnotations(track).fromGetDisplayMedia;
2388
+ });
2389
+ if (sender) {
2390
+ this._incrementAnalyticMetric("P2PReplaceTrackOldTrackNotFound");
2391
+ const track = sender.track;
2392
+ rtcStats.sendEvent("P2PReplaceTrackOldTrackNotFound", {
2393
+ targetTrackId: track === null || track === void 0 ? void 0 : track.id,
2394
+ targetTrackKind: track === null || track === void 0 ? void 0 : track.kind,
2395
+ targetTrackIsEffect: track === null || track === void 0 ? void 0 : track.effectTrack,
2396
+ targetTrackReadyState: track === null || track === void 0 ? void 0 : track.readyState,
2397
+ newTrackId: newTrack.id,
2398
+ newTrackKind: newTrack.kind,
2399
+ newTrackIsEffect: newTrack.effectTrack,
2400
+ oldTrackId: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.id,
2401
+ oldTrackKind: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.kind,
2402
+ oldTrackIsEffect: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.effectTrack,
2403
+ });
2404
+ sender.replaceTrack(newTrack);
2405
+ return Promise.resolve(newTrack);
2406
+ }
2407
+ let stream = this.streams.find((s) => s.getTracks().find((t) => t.id === newTrack.id));
2408
+ if (!stream) {
2409
+ rtcStats.sendEvent("P2PReplaceTrackNewTrackNotInStream", {
2440
2410
  oldTrackId: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.id,
2441
2411
  oldTrackKind: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.kind,
2442
2412
  oldTrackIsEffect: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.effectTrack,
@@ -2444,49 +2414,24 @@ class Session {
2444
2414
  newTrackKind: newTrack.kind,
2445
2415
  newTrackIsEffect: newTrack.effectTrack,
2446
2416
  });
2447
- this._incrementAnalyticMetric("P2PReplaceTrackSourceKindNotFound");
2448
- return pc.addTrack(newTrack, stream);
2449
- }
2450
- rtcStats.sendEvent("P2PNoReplaceTrackSupport", {});
2451
- if (!this.canModifyPeerConnection()) {
2452
- this.pending.push(() => {
2453
- this.replaceTrack(oldTrack, newTrack);
2454
- });
2455
- return;
2456
- }
2457
- this.isOperationPending = true;
2458
- const onn = pc.onnegotiationneeded;
2459
- pc.onnegotiationneeded = null;
2460
- if (oldTrack) {
2461
- this.removeTrack(oldTrack);
2462
- }
2463
- this.addTrack(newTrack);
2464
- setTimeout(() => {
2465
- pc.onnegotiationneeded = onn;
2466
- }, 0);
2467
- if (((_c = pc.localDescription) === null || _c === void 0 ? void 0 : _c.type) === "offer") {
2468
- return pc
2469
- .createOffer()
2470
- .then((offer) => {
2471
- var _a;
2472
- offer.sdp = replaceSSRCs((_a = pc.localDescription) === null || _a === void 0 ? void 0 : _a.sdp, offer.sdp);
2473
- return pc.setLocalDescription(offer);
2474
- })
2475
- .then(() => {
2476
- return this._setRemoteDescription(pc.remoteDescription);
2477
- });
2478
- }
2479
- else {
2480
- return this._setRemoteDescription(pc.remoteDescription)
2481
- .then(() => {
2482
- return pc.createAnswer();
2483
- })
2484
- .then((answer) => {
2485
- var _a;
2486
- answer.sdp = replaceSSRCs((_a = pc.localDescription) === null || _a === void 0 ? void 0 : _a.sdp, answer.sdp);
2487
- return pc.setLocalDescription(answer);
2488
- });
2417
+ this._incrementAnalyticMetric("P2PReplaceTrackNewTrackNotInStream");
2489
2418
  }
2419
+ stream = this.streams[0];
2420
+ if (!stream) {
2421
+ rtcStats.sendEvent("P2PReplaceTrackNoStream", {});
2422
+ this._incrementAnalyticMetric("P2PReplaceTrackNoStream");
2423
+ return Promise.reject(new Error("replaceTrack: No stream?"));
2424
+ }
2425
+ rtcStats.sendEvent("P2PReplaceTrackSourceKindNotFound", {
2426
+ oldTrackId: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.id,
2427
+ oldTrackKind: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.kind,
2428
+ oldTrackIsEffect: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.effectTrack,
2429
+ newTrackId: newTrack.id,
2430
+ newTrackKind: newTrack.kind,
2431
+ newTrackIsEffect: newTrack.effectTrack,
2432
+ });
2433
+ this._incrementAnalyticMetric("P2PReplaceTrackSourceKindNotFound");
2434
+ return pc.addTrack(newTrack, stream);
2490
2435
  }
2491
2436
  changeBandwidth(bandwidth) {
2492
2437
  var _a;
@@ -3042,7 +2987,7 @@ class P2pRtcManager {
3042
2987
  return { type: original.type, sdp: original.sdpU };
3043
2988
  }
3044
2989
  _transformOutgoingSdp(original) {
3045
- return { type: original.type, sdpU: original.sdp };
2990
+ return { type: original.type, sdpU: original.sdp, sdp: original.sdp };
3046
2991
  }
3047
2992
  _createSession({ clientId, initialBandwidth, isOfferer, peerConnectionId, shouldAddLocalVideo, }) {
3048
2993
  if (!peerConnectionId) {
@@ -7652,7 +7597,6 @@ exports.maybeRejectNoH264 = maybeRejectNoH264;
7652
7597
  exports.maybeTurnOnly = maybeTurnOnly;
7653
7598
  exports.modifyMediaCapabilities = modifyMediaCapabilities;
7654
7599
  exports.removePeerConnection = removePeerConnection;
7655
- exports.replaceSSRCs = replaceSSRCs;
7656
7600
  exports.replaceTracksInStream = replaceTracksInStream;
7657
7601
  exports.rtcManagerEvents = rtcManagerEvents;
7658
7602
  exports.rtcStats = rtcStats;
package/dist/index.d.cts CHANGED
@@ -382,6 +382,7 @@ type RtcEvents = {
382
382
  remote_stream_track_removed: void;
383
383
  };
384
384
  type UnifiedPlanSDP = {
385
+ sdp: string;
385
386
  sdpU: string;
386
387
  type: RTCSdpType;
387
388
  };
@@ -555,7 +556,7 @@ declare class Session {
555
556
  canModifyPeerConnection(): boolean;
556
557
  close(): void;
557
558
  hasConnectedPeerConnection(): boolean;
558
- replaceTrack(oldTrack: CustomMediaStreamTrack | undefined, newTrack: CustomMediaStreamTrack | undefined): any;
559
+ replaceTrack(oldTrack: CustomMediaStreamTrack | undefined, newTrack: CustomMediaStreamTrack | undefined): false | RTCRtpSender | Promise<CustomMediaStreamTrack>;
559
560
  changeBandwidth(bandwidth: any): void;
560
561
  setAudioOnly(enable: boolean, excludedTrackIds?: string[]): void;
561
562
  }
@@ -1370,7 +1371,6 @@ declare function setCodecPreferenceSDP(sdp: any, redOn?: boolean): string | unde
1370
1371
  declare function cleanSdp(sdp: string): string;
1371
1372
  declare function maybeRejectNoH264(sdp: any): any;
1372
1373
  declare function deprioritizeH264(sdp: any): string;
1373
- declare function replaceSSRCs(currentDescription: any, newDescription: any): any;
1374
1374
  declare function filterMidExtension(sdp: any): any;
1375
1375
  declare function filterMsidSemantic(sdp: any): any;
1376
1376
  declare function changeMediaDirection(sdp: any, active: any): string;
@@ -1903,5 +1903,5 @@ declare class RtcStream {
1903
1903
  static getCameraId(): string;
1904
1904
  }
1905
1905
 
1906
- export { ADDITIONAL_SCREEN_SHARE_SETTINGS, AUDIO_SETTINGS, BandwidthTester, EVENTS, KNOCK_MESSAGES, KalmanFilter, Logger, MEDIA_JITTER_BUFFER_TARGET, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, RtcEventNames, RtcManagerDispatcher, RtcStream, SCREEN_SHARE_SETTINGS, SCREEN_SHARE_SIMULCAST_SETTINGS, STREAM_TYPES, ServerSocket, Session, SfuV2Parser, TYPES, VIDEO_SETTINGS_HD, VIDEO_SETTINGS_SD, VIDEO_SETTINGS_VP9, VIDEO_SETTINGS_VP9_LOW_BANDWIDTH, 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, getMediasoupDeviceAsync, getNumFailedStatsReports, getNumFailedTrackSsrcLookups, getNumMissingTrackSsrcLookups, getPeerConnectionIndex, getStats, getStream, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, issueDetectorOrMetricEnabled, maybeRejectNoH264, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceSSRCs, replaceTracksInStream, _default as rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, sortCodecs, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, trackAnnotations, turnServerOverride, variance };
1906
+ export { ADDITIONAL_SCREEN_SHARE_SETTINGS, AUDIO_SETTINGS, BandwidthTester, EVENTS, KNOCK_MESSAGES, KalmanFilter, Logger, MEDIA_JITTER_BUFFER_TARGET, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, RtcEventNames, RtcManagerDispatcher, RtcStream, SCREEN_SHARE_SETTINGS, SCREEN_SHARE_SIMULCAST_SETTINGS, STREAM_TYPES, ServerSocket, Session, SfuV2Parser, TYPES, VIDEO_SETTINGS_HD, VIDEO_SETTINGS_SD, VIDEO_SETTINGS_VP9, VIDEO_SETTINGS_VP9_LOW_BANDWIDTH, 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, getMediasoupDeviceAsync, getNumFailedStatsReports, getNumFailedTrackSsrcLookups, getNumMissingTrackSsrcLookups, getPeerConnectionIndex, getStats, getStream, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, issueDetectorOrMetricEnabled, maybeRejectNoH264, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceTracksInStream, _default as rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, sortCodecs, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, trackAnnotations, turnServerOverride, variance };
1907
1907
  export type { AddSpotlightRequest, AudioEnableRequest, AudioEnableRequestedEvent, AudioEnabledEvent, BreakoutConfig, BreakoutGroupJoinedEvent, BreakoutSessionUpdatedEvent, CannotJoinUnclaimedRoomError, ChatMessage, ClientKickedEvent, ClientLeftEvent, ClientMetadataPayload, ClientMetadataReceivedEvent, ClientRole, ClientUnableToJoinEvent, CloudRecordingStartedEvent, Codec, Credentials, CustomMediaStreamTrack, ForbiddenError, ForbiddenErrorNames, GetConstraintsOptions, GetDeviceDataResult, GetMediaConstraintsOptions, GetStreamOptions, GetStreamResult, GetUpdatedDevicesResult, HostPresenceControlsError, IdentifyDeviceRequest, InternalServerError, InvalidAssistantKeyError, IssuesAndMetricsByView, JoinRoomRequest, KnockAcceptedEvent, KnockRejectedEvent, KnockRoomRequest, KnockerLeftEvent, LiveTranscriptionStartedEvent, LiveTranscriptionStoppedEvent, MaxViewerLimitReachedError, Metric, NewClientEvent, OrganizationAssistantNotEnabledError, OrganizationAssistantNotFoundError, OrganizationPlanExhaustedError, RemoveSpotlightRequest, RoleName, RoomConcurrencyControlsError, RoomFullError, RoomJoinedErrors, RoomJoinedEvent, RoomJoinedSuccess, RoomKnockedEvent, RoomLockedError, RoomLockedEvent, RoomMeetingTimeExhaustedError, RoomMode, RoomSessionEndedEvent, RtcClientConnectionStatusChangedPayload, RtcEvents, RtcLocalStreamTrackAddedPayload, RtcLocalStreamTrackRemovedPayload, RtcManager, RtcManagerCreatedPayload, RtcStreamAddedPayload, SDPRelayMessage, ScreenshareStartedEvent, ScreenshareStoppedEvent, SendClientMetadataRequest, SignalClient, SignalEvents, SignalKnocker, SignalRequests, SocketConf, SocketManager, Spotlight, SpotlightAddedEvent, SpotlightRemovedEvent, StatsMonitorOptions, StatsMonitorState, StatsSubscription, TurnTransportProtocol, UnifiedPlanSDP, UpdatedDeviceInfo, UpdatedDevicesInfo, VideoEnableRequest, VideoEnableRequestedEvent, VideoEnabledEvent };
package/dist/index.d.mts CHANGED
@@ -382,6 +382,7 @@ type RtcEvents = {
382
382
  remote_stream_track_removed: void;
383
383
  };
384
384
  type UnifiedPlanSDP = {
385
+ sdp: string;
385
386
  sdpU: string;
386
387
  type: RTCSdpType;
387
388
  };
@@ -555,7 +556,7 @@ declare class Session {
555
556
  canModifyPeerConnection(): boolean;
556
557
  close(): void;
557
558
  hasConnectedPeerConnection(): boolean;
558
- replaceTrack(oldTrack: CustomMediaStreamTrack | undefined, newTrack: CustomMediaStreamTrack | undefined): any;
559
+ replaceTrack(oldTrack: CustomMediaStreamTrack | undefined, newTrack: CustomMediaStreamTrack | undefined): false | RTCRtpSender | Promise<CustomMediaStreamTrack>;
559
560
  changeBandwidth(bandwidth: any): void;
560
561
  setAudioOnly(enable: boolean, excludedTrackIds?: string[]): void;
561
562
  }
@@ -1370,7 +1371,6 @@ declare function setCodecPreferenceSDP(sdp: any, redOn?: boolean): string | unde
1370
1371
  declare function cleanSdp(sdp: string): string;
1371
1372
  declare function maybeRejectNoH264(sdp: any): any;
1372
1373
  declare function deprioritizeH264(sdp: any): string;
1373
- declare function replaceSSRCs(currentDescription: any, newDescription: any): any;
1374
1374
  declare function filterMidExtension(sdp: any): any;
1375
1375
  declare function filterMsidSemantic(sdp: any): any;
1376
1376
  declare function changeMediaDirection(sdp: any, active: any): string;
@@ -1903,5 +1903,5 @@ declare class RtcStream {
1903
1903
  static getCameraId(): string;
1904
1904
  }
1905
1905
 
1906
- export { ADDITIONAL_SCREEN_SHARE_SETTINGS, AUDIO_SETTINGS, BandwidthTester, EVENTS, KNOCK_MESSAGES, KalmanFilter, Logger, MEDIA_JITTER_BUFFER_TARGET, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, RtcEventNames, RtcManagerDispatcher, RtcStream, SCREEN_SHARE_SETTINGS, SCREEN_SHARE_SIMULCAST_SETTINGS, STREAM_TYPES, ServerSocket, Session, SfuV2Parser, TYPES, VIDEO_SETTINGS_HD, VIDEO_SETTINGS_SD, VIDEO_SETTINGS_VP9, VIDEO_SETTINGS_VP9_LOW_BANDWIDTH, 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, getMediasoupDeviceAsync, getNumFailedStatsReports, getNumFailedTrackSsrcLookups, getNumMissingTrackSsrcLookups, getPeerConnectionIndex, getStats, getStream, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, issueDetectorOrMetricEnabled, maybeRejectNoH264, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceSSRCs, replaceTracksInStream, _default as rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, sortCodecs, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, trackAnnotations, turnServerOverride, variance };
1906
+ export { ADDITIONAL_SCREEN_SHARE_SETTINGS, AUDIO_SETTINGS, BandwidthTester, EVENTS, KNOCK_MESSAGES, KalmanFilter, Logger, MEDIA_JITTER_BUFFER_TARGET, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, RtcEventNames, RtcManagerDispatcher, RtcStream, SCREEN_SHARE_SETTINGS, SCREEN_SHARE_SIMULCAST_SETTINGS, STREAM_TYPES, ServerSocket, Session, SfuV2Parser, TYPES, VIDEO_SETTINGS_HD, VIDEO_SETTINGS_SD, VIDEO_SETTINGS_VP9, VIDEO_SETTINGS_VP9_LOW_BANDWIDTH, 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, getMediasoupDeviceAsync, getNumFailedStatsReports, getNumFailedTrackSsrcLookups, getNumMissingTrackSsrcLookups, getPeerConnectionIndex, getStats, getStream, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, issueDetectorOrMetricEnabled, maybeRejectNoH264, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceTracksInStream, _default as rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, sortCodecs, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, trackAnnotations, turnServerOverride, variance };
1907
1907
  export type { AddSpotlightRequest, AudioEnableRequest, AudioEnableRequestedEvent, AudioEnabledEvent, BreakoutConfig, BreakoutGroupJoinedEvent, BreakoutSessionUpdatedEvent, CannotJoinUnclaimedRoomError, ChatMessage, ClientKickedEvent, ClientLeftEvent, ClientMetadataPayload, ClientMetadataReceivedEvent, ClientRole, ClientUnableToJoinEvent, CloudRecordingStartedEvent, Codec, Credentials, CustomMediaStreamTrack, ForbiddenError, ForbiddenErrorNames, GetConstraintsOptions, GetDeviceDataResult, GetMediaConstraintsOptions, GetStreamOptions, GetStreamResult, GetUpdatedDevicesResult, HostPresenceControlsError, IdentifyDeviceRequest, InternalServerError, InvalidAssistantKeyError, IssuesAndMetricsByView, JoinRoomRequest, KnockAcceptedEvent, KnockRejectedEvent, KnockRoomRequest, KnockerLeftEvent, LiveTranscriptionStartedEvent, LiveTranscriptionStoppedEvent, MaxViewerLimitReachedError, Metric, NewClientEvent, OrganizationAssistantNotEnabledError, OrganizationAssistantNotFoundError, OrganizationPlanExhaustedError, RemoveSpotlightRequest, RoleName, RoomConcurrencyControlsError, RoomFullError, RoomJoinedErrors, RoomJoinedEvent, RoomJoinedSuccess, RoomKnockedEvent, RoomLockedError, RoomLockedEvent, RoomMeetingTimeExhaustedError, RoomMode, RoomSessionEndedEvent, RtcClientConnectionStatusChangedPayload, RtcEvents, RtcLocalStreamTrackAddedPayload, RtcLocalStreamTrackRemovedPayload, RtcManager, RtcManagerCreatedPayload, RtcStreamAddedPayload, SDPRelayMessage, ScreenshareStartedEvent, ScreenshareStoppedEvent, SendClientMetadataRequest, SignalClient, SignalEvents, SignalKnocker, SignalRequests, SocketConf, SocketManager, Spotlight, SpotlightAddedEvent, SpotlightRemovedEvent, StatsMonitorOptions, StatsMonitorState, StatsSubscription, TurnTransportProtocol, UnifiedPlanSDP, UpdatedDeviceInfo, UpdatedDevicesInfo, VideoEnableRequest, VideoEnableRequestedEvent, VideoEnabledEvent };
package/dist/index.d.ts CHANGED
@@ -382,6 +382,7 @@ type RtcEvents = {
382
382
  remote_stream_track_removed: void;
383
383
  };
384
384
  type UnifiedPlanSDP = {
385
+ sdp: string;
385
386
  sdpU: string;
386
387
  type: RTCSdpType;
387
388
  };
@@ -555,7 +556,7 @@ declare class Session {
555
556
  canModifyPeerConnection(): boolean;
556
557
  close(): void;
557
558
  hasConnectedPeerConnection(): boolean;
558
- replaceTrack(oldTrack: CustomMediaStreamTrack | undefined, newTrack: CustomMediaStreamTrack | undefined): any;
559
+ replaceTrack(oldTrack: CustomMediaStreamTrack | undefined, newTrack: CustomMediaStreamTrack | undefined): false | RTCRtpSender | Promise<CustomMediaStreamTrack>;
559
560
  changeBandwidth(bandwidth: any): void;
560
561
  setAudioOnly(enable: boolean, excludedTrackIds?: string[]): void;
561
562
  }
@@ -1370,7 +1371,6 @@ declare function setCodecPreferenceSDP(sdp: any, redOn?: boolean): string | unde
1370
1371
  declare function cleanSdp(sdp: string): string;
1371
1372
  declare function maybeRejectNoH264(sdp: any): any;
1372
1373
  declare function deprioritizeH264(sdp: any): string;
1373
- declare function replaceSSRCs(currentDescription: any, newDescription: any): any;
1374
1374
  declare function filterMidExtension(sdp: any): any;
1375
1375
  declare function filterMsidSemantic(sdp: any): any;
1376
1376
  declare function changeMediaDirection(sdp: any, active: any): string;
@@ -1903,5 +1903,5 @@ declare class RtcStream {
1903
1903
  static getCameraId(): string;
1904
1904
  }
1905
1905
 
1906
- export { ADDITIONAL_SCREEN_SHARE_SETTINGS, AUDIO_SETTINGS, BandwidthTester, EVENTS, KNOCK_MESSAGES, KalmanFilter, Logger, MEDIA_JITTER_BUFFER_TARGET, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, RtcEventNames, RtcManagerDispatcher, RtcStream, SCREEN_SHARE_SETTINGS, SCREEN_SHARE_SIMULCAST_SETTINGS, STREAM_TYPES, ServerSocket, Session, SfuV2Parser, TYPES, VIDEO_SETTINGS_HD, VIDEO_SETTINGS_SD, VIDEO_SETTINGS_VP9, VIDEO_SETTINGS_VP9_LOW_BANDWIDTH, 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, getMediasoupDeviceAsync, getNumFailedStatsReports, getNumFailedTrackSsrcLookups, getNumMissingTrackSsrcLookups, getPeerConnectionIndex, getStats, getStream, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, issueDetectorOrMetricEnabled, maybeRejectNoH264, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceSSRCs, replaceTracksInStream, _default as rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, sortCodecs, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, trackAnnotations, turnServerOverride, variance };
1906
+ export { ADDITIONAL_SCREEN_SHARE_SETTINGS, AUDIO_SETTINGS, BandwidthTester, EVENTS, KNOCK_MESSAGES, KalmanFilter, Logger, MEDIA_JITTER_BUFFER_TARGET, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, RtcEventNames, RtcManagerDispatcher, RtcStream, SCREEN_SHARE_SETTINGS, SCREEN_SHARE_SIMULCAST_SETTINGS, STREAM_TYPES, ServerSocket, Session, SfuV2Parser, TYPES, VIDEO_SETTINGS_HD, VIDEO_SETTINGS_SD, VIDEO_SETTINGS_VP9, VIDEO_SETTINGS_VP9_LOW_BANDWIDTH, 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, getMediasoupDeviceAsync, getNumFailedStatsReports, getNumFailedTrackSsrcLookups, getNumMissingTrackSsrcLookups, getPeerConnectionIndex, getStats, getStream, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, issueDetectorOrMetricEnabled, maybeRejectNoH264, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceTracksInStream, _default as rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, sortCodecs, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, trackAnnotations, turnServerOverride, variance };
1907
1907
  export type { AddSpotlightRequest, AudioEnableRequest, AudioEnableRequestedEvent, AudioEnabledEvent, BreakoutConfig, BreakoutGroupJoinedEvent, BreakoutSessionUpdatedEvent, CannotJoinUnclaimedRoomError, ChatMessage, ClientKickedEvent, ClientLeftEvent, ClientMetadataPayload, ClientMetadataReceivedEvent, ClientRole, ClientUnableToJoinEvent, CloudRecordingStartedEvent, Codec, Credentials, CustomMediaStreamTrack, ForbiddenError, ForbiddenErrorNames, GetConstraintsOptions, GetDeviceDataResult, GetMediaConstraintsOptions, GetStreamOptions, GetStreamResult, GetUpdatedDevicesResult, HostPresenceControlsError, IdentifyDeviceRequest, InternalServerError, InvalidAssistantKeyError, IssuesAndMetricsByView, JoinRoomRequest, KnockAcceptedEvent, KnockRejectedEvent, KnockRoomRequest, KnockerLeftEvent, LiveTranscriptionStartedEvent, LiveTranscriptionStoppedEvent, MaxViewerLimitReachedError, Metric, NewClientEvent, OrganizationAssistantNotEnabledError, OrganizationAssistantNotFoundError, OrganizationPlanExhaustedError, RemoveSpotlightRequest, RoleName, RoomConcurrencyControlsError, RoomFullError, RoomJoinedErrors, RoomJoinedEvent, RoomJoinedSuccess, RoomKnockedEvent, RoomLockedError, RoomLockedEvent, RoomMeetingTimeExhaustedError, RoomMode, RoomSessionEndedEvent, RtcClientConnectionStatusChangedPayload, RtcEvents, RtcLocalStreamTrackAddedPayload, RtcLocalStreamTrackRemovedPayload, RtcManager, RtcManagerCreatedPayload, RtcStreamAddedPayload, SDPRelayMessage, ScreenshareStartedEvent, ScreenshareStoppedEvent, SendClientMetadataRequest, SignalClient, SignalEvents, SignalKnocker, SignalRequests, SocketConf, SocketManager, Spotlight, SpotlightAddedEvent, SpotlightRemovedEvent, StatsMonitorOptions, StatsMonitorState, StatsSubscription, TurnTransportProtocol, UnifiedPlanSDP, UpdatedDeviceInfo, UpdatedDevicesInfo, VideoEnableRequest, VideoEnableRequestedEvent, VideoEnabledEvent };
package/dist/index.mjs CHANGED
@@ -2050,18 +2050,6 @@ function deprioritizeH264(sdp) {
2050
2050
  })
2051
2051
  .join("");
2052
2052
  }
2053
- function replaceSSRCs(currentDescription, newDescription) {
2054
- let ssrcs = currentDescription.match(/a=ssrc-group:FID (\d+) (\d+)\r\n/);
2055
- let newssrcs = newDescription.match(/a=ssrc-group:FID (\d+) (\d+)\r\n/);
2056
- if (!ssrcs) {
2057
- ssrcs = currentDescription.match(/a=ssrc:(\d+) cname:(.*)\r\n/g)[1].match(/a=ssrc:(\d+)/);
2058
- newssrcs = newDescription.match(/a=ssrc:(\d+) cname:(.*)\r\n/g)[1].match(/a=ssrc:(\d+)/);
2059
- }
2060
- for (let i = 1; i < ssrcs.length; i++) {
2061
- newDescription = newDescription.replace(new RegExp(newssrcs[i], "g"), ssrcs[i]);
2062
- }
2063
- return newDescription;
2064
- }
2065
2053
  function filterMidExtension(sdp) {
2066
2054
  if (browserName$2 !== "safari" &&
2067
2055
  (browserName$2 !== "firefox" || (browserVersion$1 && browserVersion$1 >= 63) || browserVersion$1 === 60)) {
@@ -2346,7 +2334,6 @@ class Session {
2346
2334
  return this.pc && this.pc.connectionState === "connected";
2347
2335
  }
2348
2336
  replaceTrack(oldTrack, newTrack) {
2349
- var _a, _b, _c;
2350
2337
  logger$7.info("replacetrack() [oldTrackId: %s, newTrackId: %s]", oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.id, newTrack === null || newTrack === void 0 ? void 0 : newTrack.id);
2351
2338
  if (!newTrack) {
2352
2339
  rtcStats.sendEvent("P2PReplaceTrackNoNewTrack", {
@@ -2367,55 +2354,38 @@ class Session {
2367
2354
  return false;
2368
2355
  }
2369
2356
  const pc = this.pc;
2370
- if ((_b = (_a = window.RTCRtpSender) === null || _a === void 0 ? void 0 : _a.prototype) === null || _b === void 0 ? void 0 : _b.replaceTrack) {
2371
- if (oldTrack) {
2372
- const sender = pc.getSenders().find((s) => { var _a; return ((_a = s.track) === null || _a === void 0 ? void 0 : _a.id) === oldTrack.id; });
2373
- if (sender) {
2374
- sender.replaceTrack(newTrack);
2375
- return Promise.resolve(newTrack);
2376
- }
2377
- }
2378
- const sender = pc.getSenders().find((s) => {
2379
- const track = s.track;
2380
- return (track === null || track === void 0 ? void 0 : track.kind) === newTrack.kind && !trackAnnotations(track).fromGetDisplayMedia;
2381
- });
2357
+ if (oldTrack) {
2358
+ const sender = pc.getSenders().find((s) => { var _a; return ((_a = s.track) === null || _a === void 0 ? void 0 : _a.id) === oldTrack.id; });
2382
2359
  if (sender) {
2383
- this._incrementAnalyticMetric("P2PReplaceTrackOldTrackNotFound");
2384
- const track = sender.track;
2385
- rtcStats.sendEvent("P2PReplaceTrackOldTrackNotFound", {
2386
- targetTrackId: track === null || track === void 0 ? void 0 : track.id,
2387
- targetTrackKind: track === null || track === void 0 ? void 0 : track.kind,
2388
- targetTrackIsEffect: track === null || track === void 0 ? void 0 : track.effectTrack,
2389
- targetTrackReadyState: track === null || track === void 0 ? void 0 : track.readyState,
2390
- newTrackId: newTrack.id,
2391
- newTrackKind: newTrack.kind,
2392
- newTrackIsEffect: newTrack.effectTrack,
2393
- oldTrackId: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.id,
2394
- oldTrackKind: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.kind,
2395
- oldTrackIsEffect: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.effectTrack,
2396
- });
2397
2360
  sender.replaceTrack(newTrack);
2398
2361
  return Promise.resolve(newTrack);
2399
2362
  }
2400
- let stream = this.streams.find((s) => s.getTracks().find((t) => t.id === newTrack.id));
2401
- if (!stream) {
2402
- rtcStats.sendEvent("P2PReplaceTrackNewTrackNotInStream", {
2403
- oldTrackId: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.id,
2404
- oldTrackKind: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.kind,
2405
- oldTrackIsEffect: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.effectTrack,
2406
- newTrackId: newTrack.id,
2407
- newTrackKind: newTrack.kind,
2408
- newTrackIsEffect: newTrack.effectTrack,
2409
- });
2410
- this._incrementAnalyticMetric("P2PReplaceTrackNewTrackNotInStream");
2411
- }
2412
- stream = this.streams[0];
2413
- if (!stream) {
2414
- rtcStats.sendEvent("P2PReplaceTrackNoStream", {});
2415
- this._incrementAnalyticMetric("P2PReplaceTrackNoStream");
2416
- return Promise.reject(new Error("replaceTrack: No stream?"));
2417
- }
2418
- rtcStats.sendEvent("P2PReplaceTrackSourceKindNotFound", {
2363
+ }
2364
+ const sender = pc.getSenders().find((s) => {
2365
+ const track = s.track;
2366
+ return (track === null || track === void 0 ? void 0 : track.kind) === newTrack.kind && !trackAnnotations(track).fromGetDisplayMedia;
2367
+ });
2368
+ if (sender) {
2369
+ this._incrementAnalyticMetric("P2PReplaceTrackOldTrackNotFound");
2370
+ const track = sender.track;
2371
+ rtcStats.sendEvent("P2PReplaceTrackOldTrackNotFound", {
2372
+ targetTrackId: track === null || track === void 0 ? void 0 : track.id,
2373
+ targetTrackKind: track === null || track === void 0 ? void 0 : track.kind,
2374
+ targetTrackIsEffect: track === null || track === void 0 ? void 0 : track.effectTrack,
2375
+ targetTrackReadyState: track === null || track === void 0 ? void 0 : track.readyState,
2376
+ newTrackId: newTrack.id,
2377
+ newTrackKind: newTrack.kind,
2378
+ newTrackIsEffect: newTrack.effectTrack,
2379
+ oldTrackId: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.id,
2380
+ oldTrackKind: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.kind,
2381
+ oldTrackIsEffect: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.effectTrack,
2382
+ });
2383
+ sender.replaceTrack(newTrack);
2384
+ return Promise.resolve(newTrack);
2385
+ }
2386
+ let stream = this.streams.find((s) => s.getTracks().find((t) => t.id === newTrack.id));
2387
+ if (!stream) {
2388
+ rtcStats.sendEvent("P2PReplaceTrackNewTrackNotInStream", {
2419
2389
  oldTrackId: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.id,
2420
2390
  oldTrackKind: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.kind,
2421
2391
  oldTrackIsEffect: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.effectTrack,
@@ -2423,49 +2393,24 @@ class Session {
2423
2393
  newTrackKind: newTrack.kind,
2424
2394
  newTrackIsEffect: newTrack.effectTrack,
2425
2395
  });
2426
- this._incrementAnalyticMetric("P2PReplaceTrackSourceKindNotFound");
2427
- return pc.addTrack(newTrack, stream);
2428
- }
2429
- rtcStats.sendEvent("P2PNoReplaceTrackSupport", {});
2430
- if (!this.canModifyPeerConnection()) {
2431
- this.pending.push(() => {
2432
- this.replaceTrack(oldTrack, newTrack);
2433
- });
2434
- return;
2435
- }
2436
- this.isOperationPending = true;
2437
- const onn = pc.onnegotiationneeded;
2438
- pc.onnegotiationneeded = null;
2439
- if (oldTrack) {
2440
- this.removeTrack(oldTrack);
2441
- }
2442
- this.addTrack(newTrack);
2443
- setTimeout(() => {
2444
- pc.onnegotiationneeded = onn;
2445
- }, 0);
2446
- if (((_c = pc.localDescription) === null || _c === void 0 ? void 0 : _c.type) === "offer") {
2447
- return pc
2448
- .createOffer()
2449
- .then((offer) => {
2450
- var _a;
2451
- offer.sdp = replaceSSRCs((_a = pc.localDescription) === null || _a === void 0 ? void 0 : _a.sdp, offer.sdp);
2452
- return pc.setLocalDescription(offer);
2453
- })
2454
- .then(() => {
2455
- return this._setRemoteDescription(pc.remoteDescription);
2456
- });
2457
- }
2458
- else {
2459
- return this._setRemoteDescription(pc.remoteDescription)
2460
- .then(() => {
2461
- return pc.createAnswer();
2462
- })
2463
- .then((answer) => {
2464
- var _a;
2465
- answer.sdp = replaceSSRCs((_a = pc.localDescription) === null || _a === void 0 ? void 0 : _a.sdp, answer.sdp);
2466
- return pc.setLocalDescription(answer);
2467
- });
2396
+ this._incrementAnalyticMetric("P2PReplaceTrackNewTrackNotInStream");
2468
2397
  }
2398
+ stream = this.streams[0];
2399
+ if (!stream) {
2400
+ rtcStats.sendEvent("P2PReplaceTrackNoStream", {});
2401
+ this._incrementAnalyticMetric("P2PReplaceTrackNoStream");
2402
+ return Promise.reject(new Error("replaceTrack: No stream?"));
2403
+ }
2404
+ rtcStats.sendEvent("P2PReplaceTrackSourceKindNotFound", {
2405
+ oldTrackId: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.id,
2406
+ oldTrackKind: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.kind,
2407
+ oldTrackIsEffect: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.effectTrack,
2408
+ newTrackId: newTrack.id,
2409
+ newTrackKind: newTrack.kind,
2410
+ newTrackIsEffect: newTrack.effectTrack,
2411
+ });
2412
+ this._incrementAnalyticMetric("P2PReplaceTrackSourceKindNotFound");
2413
+ return pc.addTrack(newTrack, stream);
2469
2414
  }
2470
2415
  changeBandwidth(bandwidth) {
2471
2416
  var _a;
@@ -3021,7 +2966,7 @@ class P2pRtcManager {
3021
2966
  return { type: original.type, sdp: original.sdpU };
3022
2967
  }
3023
2968
  _transformOutgoingSdp(original) {
3024
- return { type: original.type, sdpU: original.sdp };
2969
+ return { type: original.type, sdpU: original.sdp, sdp: original.sdp };
3025
2970
  }
3026
2971
  _createSession({ clientId, initialBandwidth, isOfferer, peerConnectionId, shouldAddLocalVideo, }) {
3027
2972
  if (!peerConnectionId) {
@@ -7550,4 +7495,4 @@ var RtcEventNames;
7550
7495
  RtcEventNames["stream_added"] = "stream_added";
7551
7496
  })(RtcEventNames || (RtcEventNames = {}));
7552
7497
 
7553
- export { ADDITIONAL_SCREEN_SHARE_SETTINGS, AUDIO_SETTINGS, BandwidthTester, EVENTS, KNOCK_MESSAGES, KalmanFilter, Logger, MEDIA_JITTER_BUFFER_TARGET, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, RtcEventNames, RtcManagerDispatcher, RtcStream, SCREEN_SHARE_SETTINGS, SCREEN_SHARE_SIMULCAST_SETTINGS, STREAM_TYPES, ServerSocket, Session, SfuV2Parser, TYPES, VIDEO_SETTINGS_HD, VIDEO_SETTINGS_SD, VIDEO_SETTINGS_VP9, VIDEO_SETTINGS_VP9_LOW_BANDWIDTH, 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, getMediasoupDeviceAsync, getNumFailedStatsReports, getNumFailedTrackSsrcLookups, getNumMissingTrackSsrcLookups, getPeerConnectionIndex, getStats, getStream, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, issueDetectorOrMetricEnabled, maybeRejectNoH264, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceSSRCs, replaceTracksInStream, rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, sortCodecs, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, trackAnnotations, turnServerOverride, variance };
7498
+ export { ADDITIONAL_SCREEN_SHARE_SETTINGS, AUDIO_SETTINGS, BandwidthTester, EVENTS, KNOCK_MESSAGES, KalmanFilter, Logger, MEDIA_JITTER_BUFFER_TARGET, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, RtcEventNames, RtcManagerDispatcher, RtcStream, SCREEN_SHARE_SETTINGS, SCREEN_SHARE_SIMULCAST_SETTINGS, STREAM_TYPES, ServerSocket, Session, SfuV2Parser, TYPES, VIDEO_SETTINGS_HD, VIDEO_SETTINGS_SD, VIDEO_SETTINGS_VP9, VIDEO_SETTINGS_VP9_LOW_BANDWIDTH, 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, getMediasoupDeviceAsync, getNumFailedStatsReports, getNumFailedTrackSsrcLookups, getNumMissingTrackSsrcLookups, getPeerConnectionIndex, getStats, getStream, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, issueDetectorOrMetricEnabled, maybeRejectNoH264, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceTracksInStream, rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, sortCodecs, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, trackAnnotations, turnServerOverride, variance };
@@ -2050,18 +2050,6 @@ function deprioritizeH264(sdp) {
2050
2050
  })
2051
2051
  .join("");
2052
2052
  }
2053
- function replaceSSRCs(currentDescription, newDescription) {
2054
- let ssrcs = currentDescription.match(/a=ssrc-group:FID (\d+) (\d+)\r\n/);
2055
- let newssrcs = newDescription.match(/a=ssrc-group:FID (\d+) (\d+)\r\n/);
2056
- if (!ssrcs) {
2057
- ssrcs = currentDescription.match(/a=ssrc:(\d+) cname:(.*)\r\n/g)[1].match(/a=ssrc:(\d+)/);
2058
- newssrcs = newDescription.match(/a=ssrc:(\d+) cname:(.*)\r\n/g)[1].match(/a=ssrc:(\d+)/);
2059
- }
2060
- for (let i = 1; i < ssrcs.length; i++) {
2061
- newDescription = newDescription.replace(new RegExp(newssrcs[i], "g"), ssrcs[i]);
2062
- }
2063
- return newDescription;
2064
- }
2065
2053
  function filterMidExtension(sdp) {
2066
2054
  if (browserName$2 !== "safari" &&
2067
2055
  (browserName$2 !== "firefox" || (browserVersion$1 && browserVersion$1 >= 63) || browserVersion$1 === 60)) {
@@ -2346,7 +2334,6 @@ class Session {
2346
2334
  return this.pc && this.pc.connectionState === "connected";
2347
2335
  }
2348
2336
  replaceTrack(oldTrack, newTrack) {
2349
- var _a, _b, _c;
2350
2337
  logger$7.info("replacetrack() [oldTrackId: %s, newTrackId: %s]", oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.id, newTrack === null || newTrack === void 0 ? void 0 : newTrack.id);
2351
2338
  if (!newTrack) {
2352
2339
  rtcStats.sendEvent("P2PReplaceTrackNoNewTrack", {
@@ -2367,55 +2354,38 @@ class Session {
2367
2354
  return false;
2368
2355
  }
2369
2356
  const pc = this.pc;
2370
- if ((_b = (_a = window.RTCRtpSender) === null || _a === void 0 ? void 0 : _a.prototype) === null || _b === void 0 ? void 0 : _b.replaceTrack) {
2371
- if (oldTrack) {
2372
- const sender = pc.getSenders().find((s) => { var _a; return ((_a = s.track) === null || _a === void 0 ? void 0 : _a.id) === oldTrack.id; });
2373
- if (sender) {
2374
- sender.replaceTrack(newTrack);
2375
- return Promise.resolve(newTrack);
2376
- }
2377
- }
2378
- const sender = pc.getSenders().find((s) => {
2379
- const track = s.track;
2380
- return (track === null || track === void 0 ? void 0 : track.kind) === newTrack.kind && !trackAnnotations(track).fromGetDisplayMedia;
2381
- });
2357
+ if (oldTrack) {
2358
+ const sender = pc.getSenders().find((s) => { var _a; return ((_a = s.track) === null || _a === void 0 ? void 0 : _a.id) === oldTrack.id; });
2382
2359
  if (sender) {
2383
- this._incrementAnalyticMetric("P2PReplaceTrackOldTrackNotFound");
2384
- const track = sender.track;
2385
- rtcStats.sendEvent("P2PReplaceTrackOldTrackNotFound", {
2386
- targetTrackId: track === null || track === void 0 ? void 0 : track.id,
2387
- targetTrackKind: track === null || track === void 0 ? void 0 : track.kind,
2388
- targetTrackIsEffect: track === null || track === void 0 ? void 0 : track.effectTrack,
2389
- targetTrackReadyState: track === null || track === void 0 ? void 0 : track.readyState,
2390
- newTrackId: newTrack.id,
2391
- newTrackKind: newTrack.kind,
2392
- newTrackIsEffect: newTrack.effectTrack,
2393
- oldTrackId: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.id,
2394
- oldTrackKind: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.kind,
2395
- oldTrackIsEffect: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.effectTrack,
2396
- });
2397
2360
  sender.replaceTrack(newTrack);
2398
2361
  return Promise.resolve(newTrack);
2399
2362
  }
2400
- let stream = this.streams.find((s) => s.getTracks().find((t) => t.id === newTrack.id));
2401
- if (!stream) {
2402
- rtcStats.sendEvent("P2PReplaceTrackNewTrackNotInStream", {
2403
- oldTrackId: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.id,
2404
- oldTrackKind: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.kind,
2405
- oldTrackIsEffect: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.effectTrack,
2406
- newTrackId: newTrack.id,
2407
- newTrackKind: newTrack.kind,
2408
- newTrackIsEffect: newTrack.effectTrack,
2409
- });
2410
- this._incrementAnalyticMetric("P2PReplaceTrackNewTrackNotInStream");
2411
- }
2412
- stream = this.streams[0];
2413
- if (!stream) {
2414
- rtcStats.sendEvent("P2PReplaceTrackNoStream", {});
2415
- this._incrementAnalyticMetric("P2PReplaceTrackNoStream");
2416
- return Promise.reject(new Error("replaceTrack: No stream?"));
2417
- }
2418
- rtcStats.sendEvent("P2PReplaceTrackSourceKindNotFound", {
2363
+ }
2364
+ const sender = pc.getSenders().find((s) => {
2365
+ const track = s.track;
2366
+ return (track === null || track === void 0 ? void 0 : track.kind) === newTrack.kind && !trackAnnotations(track).fromGetDisplayMedia;
2367
+ });
2368
+ if (sender) {
2369
+ this._incrementAnalyticMetric("P2PReplaceTrackOldTrackNotFound");
2370
+ const track = sender.track;
2371
+ rtcStats.sendEvent("P2PReplaceTrackOldTrackNotFound", {
2372
+ targetTrackId: track === null || track === void 0 ? void 0 : track.id,
2373
+ targetTrackKind: track === null || track === void 0 ? void 0 : track.kind,
2374
+ targetTrackIsEffect: track === null || track === void 0 ? void 0 : track.effectTrack,
2375
+ targetTrackReadyState: track === null || track === void 0 ? void 0 : track.readyState,
2376
+ newTrackId: newTrack.id,
2377
+ newTrackKind: newTrack.kind,
2378
+ newTrackIsEffect: newTrack.effectTrack,
2379
+ oldTrackId: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.id,
2380
+ oldTrackKind: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.kind,
2381
+ oldTrackIsEffect: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.effectTrack,
2382
+ });
2383
+ sender.replaceTrack(newTrack);
2384
+ return Promise.resolve(newTrack);
2385
+ }
2386
+ let stream = this.streams.find((s) => s.getTracks().find((t) => t.id === newTrack.id));
2387
+ if (!stream) {
2388
+ rtcStats.sendEvent("P2PReplaceTrackNewTrackNotInStream", {
2419
2389
  oldTrackId: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.id,
2420
2390
  oldTrackKind: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.kind,
2421
2391
  oldTrackIsEffect: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.effectTrack,
@@ -2423,49 +2393,24 @@ class Session {
2423
2393
  newTrackKind: newTrack.kind,
2424
2394
  newTrackIsEffect: newTrack.effectTrack,
2425
2395
  });
2426
- this._incrementAnalyticMetric("P2PReplaceTrackSourceKindNotFound");
2427
- return pc.addTrack(newTrack, stream);
2428
- }
2429
- rtcStats.sendEvent("P2PNoReplaceTrackSupport", {});
2430
- if (!this.canModifyPeerConnection()) {
2431
- this.pending.push(() => {
2432
- this.replaceTrack(oldTrack, newTrack);
2433
- });
2434
- return;
2435
- }
2436
- this.isOperationPending = true;
2437
- const onn = pc.onnegotiationneeded;
2438
- pc.onnegotiationneeded = null;
2439
- if (oldTrack) {
2440
- this.removeTrack(oldTrack);
2441
- }
2442
- this.addTrack(newTrack);
2443
- setTimeout(() => {
2444
- pc.onnegotiationneeded = onn;
2445
- }, 0);
2446
- if (((_c = pc.localDescription) === null || _c === void 0 ? void 0 : _c.type) === "offer") {
2447
- return pc
2448
- .createOffer()
2449
- .then((offer) => {
2450
- var _a;
2451
- offer.sdp = replaceSSRCs((_a = pc.localDescription) === null || _a === void 0 ? void 0 : _a.sdp, offer.sdp);
2452
- return pc.setLocalDescription(offer);
2453
- })
2454
- .then(() => {
2455
- return this._setRemoteDescription(pc.remoteDescription);
2456
- });
2457
- }
2458
- else {
2459
- return this._setRemoteDescription(pc.remoteDescription)
2460
- .then(() => {
2461
- return pc.createAnswer();
2462
- })
2463
- .then((answer) => {
2464
- var _a;
2465
- answer.sdp = replaceSSRCs((_a = pc.localDescription) === null || _a === void 0 ? void 0 : _a.sdp, answer.sdp);
2466
- return pc.setLocalDescription(answer);
2467
- });
2396
+ this._incrementAnalyticMetric("P2PReplaceTrackNewTrackNotInStream");
2468
2397
  }
2398
+ stream = this.streams[0];
2399
+ if (!stream) {
2400
+ rtcStats.sendEvent("P2PReplaceTrackNoStream", {});
2401
+ this._incrementAnalyticMetric("P2PReplaceTrackNoStream");
2402
+ return Promise.reject(new Error("replaceTrack: No stream?"));
2403
+ }
2404
+ rtcStats.sendEvent("P2PReplaceTrackSourceKindNotFound", {
2405
+ oldTrackId: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.id,
2406
+ oldTrackKind: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.kind,
2407
+ oldTrackIsEffect: oldTrack === null || oldTrack === void 0 ? void 0 : oldTrack.effectTrack,
2408
+ newTrackId: newTrack.id,
2409
+ newTrackKind: newTrack.kind,
2410
+ newTrackIsEffect: newTrack.effectTrack,
2411
+ });
2412
+ this._incrementAnalyticMetric("P2PReplaceTrackSourceKindNotFound");
2413
+ return pc.addTrack(newTrack, stream);
2469
2414
  }
2470
2415
  changeBandwidth(bandwidth) {
2471
2416
  var _a;
@@ -3021,7 +2966,7 @@ class P2pRtcManager {
3021
2966
  return { type: original.type, sdp: original.sdpU };
3022
2967
  }
3023
2968
  _transformOutgoingSdp(original) {
3024
- return { type: original.type, sdpU: original.sdp };
2969
+ return { type: original.type, sdpU: original.sdp, sdp: original.sdp };
3025
2970
  }
3026
2971
  _createSession({ clientId, initialBandwidth, isOfferer, peerConnectionId, shouldAddLocalVideo, }) {
3027
2972
  if (!peerConnectionId) {
@@ -7550,5 +7495,5 @@ var RtcEventNames;
7550
7495
  RtcEventNames["stream_added"] = "stream_added";
7551
7496
  })(RtcEventNames || (RtcEventNames = {}));
7552
7497
 
7553
- export { ADDITIONAL_SCREEN_SHARE_SETTINGS, AUDIO_SETTINGS, BandwidthTester, EVENTS, KNOCK_MESSAGES, KalmanFilter, Logger, MEDIA_JITTER_BUFFER_TARGET, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, RtcEventNames, RtcManagerDispatcher, RtcStream, SCREEN_SHARE_SETTINGS, SCREEN_SHARE_SIMULCAST_SETTINGS, STREAM_TYPES, ServerSocket, Session, SfuV2Parser, TYPES, VIDEO_SETTINGS_HD, VIDEO_SETTINGS_SD, VIDEO_SETTINGS_VP9, VIDEO_SETTINGS_VP9_LOW_BANDWIDTH, 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, getMediasoupDeviceAsync, getNumFailedStatsReports, getNumFailedTrackSsrcLookups, getNumMissingTrackSsrcLookups, getPeerConnectionIndex, getStats, getStream, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, issueDetectorOrMetricEnabled, maybeRejectNoH264, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceSSRCs, replaceTracksInStream, rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, sortCodecs, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, trackAnnotations, turnServerOverride, variance };
7498
+ export { ADDITIONAL_SCREEN_SHARE_SETTINGS, AUDIO_SETTINGS, BandwidthTester, EVENTS, KNOCK_MESSAGES, KalmanFilter, Logger, MEDIA_JITTER_BUFFER_TARGET, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, RtcEventNames, RtcManagerDispatcher, RtcStream, SCREEN_SHARE_SETTINGS, SCREEN_SHARE_SIMULCAST_SETTINGS, STREAM_TYPES, ServerSocket, Session, SfuV2Parser, TYPES, VIDEO_SETTINGS_HD, VIDEO_SETTINGS_SD, VIDEO_SETTINGS_VP9, VIDEO_SETTINGS_VP9_LOW_BANDWIDTH, 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, getMediasoupDeviceAsync, getNumFailedStatsReports, getNumFailedTrackSsrcLookups, getNumMissingTrackSsrcLookups, getPeerConnectionIndex, getStats, getStream, getUpdatedDevices, getUpdatedStats, getUserMedia, hasGetDisplayMedia, ipRegex, isMobile, issueDetectorOrMetricEnabled, maybeRejectNoH264, maybeTurnOnly, modifyMediaCapabilities, removePeerConnection, replaceTracksInStream, rtcManagerEvents, rtcStats, setClientProvider, setCodecPreferenceSDP, setPeerConnectionsForTests, setVideoBandwidthUsingSetParameters, sortCodecs, standardDeviation, startPerformanceMonitor, stopStreamTracks, subscribeIssues, subscribeStats, trackAnnotations, turnServerOverride, variance };
7554
7499
  //# 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": "2.7.1",
4
+ "version": "2.7.3",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/whereby/sdk",
7
7
  "repository": {