@whereby.com/media 2.8.4 → 2.8.5

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
@@ -2019,7 +2019,7 @@ const adapter$5 = (_a$5 = adapterRaw.default) !== null && _a$5 !== void 0 ? _a$5
2019
2019
  const logger$8 = new Logger();
2020
2020
  const browserName$2 = (_b$2 = adapter$5.browserDetails) === null || _b$2 === void 0 ? void 0 : _b$2.browser;
2021
2021
  const browserVersion$1 = adapter$5.browserDetails.version;
2022
- function setCodecPreferenceSDP(sdp, redOn) {
2022
+ function setCodecPreferenceSDP({ sdp, redOn, incrementAnalyticMetric }) {
2023
2023
  var _a, _b;
2024
2024
  try {
2025
2025
  const sdpObject = sdpTransform__namespace.parse(sdp);
@@ -2057,7 +2057,10 @@ function setCodecPreferenceSDP(sdp, redOn) {
2057
2057
  return newSdp;
2058
2058
  }
2059
2059
  catch (error) {
2060
+ incrementAnalyticMetric("P2PSetCodecPreferenceError");
2061
+ rtcStats.sendEvent("P2PSetCodecPreferenceError", { error });
2060
2062
  logger$8.error("setCodecPreferenceSDP error:", error);
2063
+ return sdp;
2061
2064
  }
2062
2065
  }
2063
2066
  function cleanSdp(sdp) {
@@ -2345,25 +2348,35 @@ class Session {
2345
2348
  this.earlyIceCandidates = [];
2346
2349
  });
2347
2350
  }
2348
- handleOffer(message) {
2351
+ handleOffer(offer) {
2349
2352
  if (!this.canModifyPeerConnection()) {
2350
2353
  return new Promise((resolve) => {
2351
- this.pending.push(() => this.handleOffer(message).then(resolve));
2354
+ this.pending.push(() => this.handleOffer(offer).then(resolve));
2352
2355
  });
2353
2356
  }
2354
2357
  this.isOperationPending = true;
2355
- let sdp = message.sdp;
2358
+ let sdp = offer.sdp;
2356
2359
  sdp = filterMidExtension(sdp);
2357
2360
  sdp = filterMsidSemantic(sdp);
2358
- const desc = { type: message.type, sdp };
2361
+ const desc = { type: offer.type, sdp };
2359
2362
  let answerToSignal;
2360
2363
  return this._setRemoteDescription(desc)
2361
2364
  .then(() => {
2362
2365
  return this.pc.createAnswer();
2363
2366
  })
2364
2367
  .then((answer) => {
2365
- answerToSignal = answer;
2366
- return this.pc.setLocalDescription(answer);
2368
+ if (!answer.sdp) {
2369
+ this._incrementAnalyticMetric("P2PCreateAnswerNoSDP");
2370
+ rtcStats.sendEvent("P2PCreateAnswerNoSDP", {});
2371
+ throw new Error("SDP undefined while creating answer");
2372
+ }
2373
+ else {
2374
+ answerToSignal = {
2375
+ sdp: answer.sdp,
2376
+ type: answer.type,
2377
+ };
2378
+ return this.pc.setLocalDescription(answer);
2379
+ }
2367
2380
  })
2368
2381
  .then(() => {
2369
2382
  return setVideoBandwidthUsingSetParameters(this.pc, this.bandwidth);
@@ -2683,6 +2696,9 @@ class P2pRtcManager {
2683
2696
  P2PReplaceTrackSourceKindNotFound: 0,
2684
2697
  P2PRemoveStreamNoPC: 0,
2685
2698
  P2POnTrackNoStream: 0,
2699
+ P2PSetCodecPreferenceError: 0,
2700
+ P2PCreateOfferNoSDP: 0,
2701
+ P2PCreateAnswerNoSDP: 0,
2686
2702
  };
2687
2703
  }
2688
2704
  numberOfPeerconnections() {
@@ -2803,13 +2819,12 @@ class P2pRtcManager {
2803
2819
  logger$6.warn("No RTCPeerConnection on SDP_OFFER", data);
2804
2820
  return;
2805
2821
  }
2806
- const offer = this._transformIncomingSdp(data.message);
2807
2822
  (_b = (_a = session
2808
- .handleOffer(offer)
2823
+ .handleOffer(data.message)
2809
2824
  .then((answer) => {
2810
2825
  this._emitServerEvent(RELAY_MESSAGES.SDP_ANSWER, {
2811
2826
  receiverId: data.clientId,
2812
- message: this._transformOutgoingSdp(answer),
2827
+ message: answer,
2813
2828
  });
2814
2829
  })).catch) === null || _b === void 0 ? void 0 : _b.call(_a, (e) => {
2815
2830
  this.analytics.numPcOnOfferFailure++;
@@ -2822,8 +2837,7 @@ class P2pRtcManager {
2822
2837
  logger$6.warn("No RTCPeerConnection on SDP_ANSWER", data);
2823
2838
  return;
2824
2839
  }
2825
- const answer = this._transformIncomingSdp(data.message);
2826
- (_b = (_a = session.handleAnswer(answer)) === null || _a === void 0 ? void 0 : _a.catch) === null || _b === void 0 ? void 0 : _b.call(_a, (e) => {
2840
+ (_b = (_a = session.handleAnswer(data.message)) === null || _a === void 0 ? void 0 : _a.catch) === null || _b === void 0 ? void 0 : _b.call(_a, (e) => {
2827
2841
  logger$6.warn("Could not set remote description from remote answer: ", e);
2828
2842
  this.analytics.numPcOnAnswerFailure++;
2829
2843
  });
@@ -3002,13 +3016,6 @@ class P2pRtcManager {
3002
3016
  const streamIds = this._getNonLocalCameraStreamIds();
3003
3017
  return streamIds.length === 0 ? null : this.localStreams[streamIds[0]];
3004
3018
  }
3005
- _transformIncomingSdp(original) {
3006
- const sdp = original.sdp ? original.sdp : original.sdpU;
3007
- return { type: original.type, sdp };
3008
- }
3009
- _transformOutgoingSdp(original) {
3010
- return { type: original.type, sdpU: original.sdp, sdp: original.sdp };
3011
- }
3012
3019
  _createSession({ clientId, initialBandwidth, isOfferer, peerConnectionId, }) {
3013
3020
  if (!peerConnectionId) {
3014
3021
  throw new Error("peerConnectionId is missing");
@@ -3373,10 +3380,19 @@ class P2pRtcManager {
3373
3380
  this._setCodecPreferences(pc).then(() => pc
3374
3381
  .createOffer(constraints || this.offerOptions)
3375
3382
  .then((offer) => {
3383
+ if (!offer.sdp) {
3384
+ this.analytics.P2PCreateOfferNoSDP++;
3385
+ rtcStats.sendEvent("P2PCreateOfferNoSDP", {});
3386
+ throw new Error("SDP undefined while creating offer");
3387
+ }
3376
3388
  if (rtpAbsCaptureTimeOn)
3377
3389
  offer.sdp = addAbsCaptureTimeExtMap(offer.sdp);
3378
3390
  if (browserName$1 === "firefox") {
3379
- offer.sdp = setCodecPreferenceSDP(offer.sdp, redOn);
3391
+ offer.sdp = setCodecPreferenceSDP({
3392
+ sdp: offer.sdp,
3393
+ redOn,
3394
+ incrementAnalyticMetric: (metric) => this.analytics[metric]++,
3395
+ });
3380
3396
  }
3381
3397
  if (cleanSdpOn)
3382
3398
  offer.sdp = cleanSdp(offer.sdp);
@@ -3389,7 +3405,7 @@ class P2pRtcManager {
3389
3405
  .then(() => {
3390
3406
  this._emitServerEvent(RELAY_MESSAGES.SDP_OFFER, {
3391
3407
  receiverId: clientId,
3392
- message: this._transformOutgoingSdp(offer),
3408
+ message: offer,
3393
3409
  });
3394
3410
  });
3395
3411
  })
package/dist/index.d.cts CHANGED
@@ -1015,14 +1015,13 @@ type RtcEvents = {
1015
1015
  remote_stream_track_added: void;
1016
1016
  remote_stream_track_removed: void;
1017
1017
  };
1018
- type UnifiedPlanSDP = {
1018
+ type RTCSessionDescription = {
1019
1019
  sdp: string;
1020
- sdpU: string;
1021
1020
  type: RTCSdpType;
1022
1021
  };
1023
1022
  type SDPRelayMessage = {
1024
1023
  clientId: string;
1025
- message: UnifiedPlanSDP;
1024
+ message: RTCSessionDescription;
1026
1025
  };
1027
1026
  type GetMediaConstraintsOptions = {
1028
1027
  disableAEC: boolean;
@@ -1204,9 +1203,9 @@ declare class Session {
1204
1203
  addTrack(track: MediaStreamTrack, stream?: MediaStream): void;
1205
1204
  removeTrack(track: MediaStreamTrack): void;
1206
1205
  removeStream(stream: MediaStream): void;
1207
- _setRemoteDescription(desc: any): any;
1208
- handleOffer(message: RTCSessionDescription): any;
1209
- handleAnswer(message: RTCSessionDescription): any;
1206
+ _setRemoteDescription(desc: RTCSessionDescription): Promise<void>;
1207
+ handleOffer(offer: RTCSessionDescription): Promise<RTCSessionDescription>;
1208
+ handleAnswer(message: RTCSessionDescription): Promise<void>;
1210
1209
  addIceCandidate(candidate: any): void;
1211
1210
  canModifyPeerConnection(): boolean;
1212
1211
  close(): void;
@@ -1252,6 +1251,9 @@ type P2PAnalytics = {
1252
1251
  P2PReplaceTrackSourceKindNotFound: number;
1253
1252
  P2PRemoveStreamNoPC: number;
1254
1253
  P2POnTrackNoStream: number;
1254
+ P2PSetCodecPreferenceError: number;
1255
+ P2PCreateOfferNoSDP: number;
1256
+ P2PCreateAnswerNoSDP: number;
1255
1257
  };
1256
1258
  type P2PAnalyticMetric = keyof P2PAnalytics;
1257
1259
  type P2PIncrementAnalyticMetric = (metric: P2PAnalyticMetric) => void;
@@ -1324,8 +1326,6 @@ declare class P2pRtcManager implements RtcManager {
1324
1326
  _getNonLocalCameraStreamIds(): string[];
1325
1327
  _isScreensharingLocally(): boolean;
1326
1328
  _getFirstLocalNonCameraStream(): any;
1327
- _transformIncomingSdp(original: UnifiedPlanSDP): RTCSessionDescription;
1328
- _transformOutgoingSdp(original: RTCSessionDescription): UnifiedPlanSDP;
1329
1329
  _createSession({ clientId, initialBandwidth, isOfferer, peerConnectionId, }: {
1330
1330
  clientId: string;
1331
1331
  initialBandwidth: any;
@@ -1348,7 +1348,7 @@ declare class P2pRtcManager implements RtcManager {
1348
1348
  _connect(clientId: string): Promise<Session>;
1349
1349
  _maybeRestartIce(clientId: string, session: any): void;
1350
1350
  _setCodecPreferences(pc: RTCPeerConnection): Promise<void>;
1351
- _negotiatePeerConnection(clientId: string, session: any, constraints?: any): void;
1351
+ _negotiatePeerConnection(clientId: string, session: Session, constraints?: any): void;
1352
1352
  _withForcedRenegotiation(session: Session, action: any): void;
1353
1353
  _changeBandwidthForAllClients(isJoining: boolean): number;
1354
1354
  _createP2pSession({ clientId, initialBandwidth, isOfferer, }: {
@@ -1402,7 +1402,7 @@ declare const _default: {
1402
1402
  DOMINANT_SPEAKER: string;
1403
1403
  };
1404
1404
 
1405
- declare function setVideoBandwidthUsingSetParameters(pc: any, bandwidth: any, logger?: any): any;
1405
+ declare function setVideoBandwidthUsingSetParameters(pc: RTCPeerConnection, bandwidth: number, logger?: any): Promise<void>;
1406
1406
 
1407
1407
  declare const rtcStats: {
1408
1408
  sendEvent: (type: any, value: any) => void;
@@ -1417,7 +1417,12 @@ declare const rtcStats: {
1417
1417
  };
1418
1418
  };
1419
1419
 
1420
- declare function setCodecPreferenceSDP(sdp: any, redOn?: boolean): string | undefined;
1420
+ interface SetCodecPreferenceSDPOptions {
1421
+ sdp: string;
1422
+ redOn: boolean;
1423
+ incrementAnalyticMetric: P2PIncrementAnalyticMetric;
1424
+ }
1425
+ declare function setCodecPreferenceSDP({ sdp, redOn, incrementAnalyticMetric }: SetCodecPreferenceSDPOptions): string;
1421
1426
  declare function cleanSdp(sdp: string): string;
1422
1427
  declare function maybeRejectNoH264(sdp: any): any;
1423
1428
  declare function deprioritizeH264(sdp: any): string;
@@ -1924,4 +1929,4 @@ declare const STREAM_TYPES: {
1924
1929
  };
1925
1930
 
1926
1931
  export { ADDITIONAL_SCREEN_SHARE_SETTINGS, AUDIO_SETTINGS, BandwidthTester, CAMERA_STREAM_ID, EVENTS, KNOCK_MESSAGES, KalmanFilter, Logger, MEDIA_JITTER_BUFFER_TARGET, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, RtcEventNames, RtcManagerDispatcher, 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 };
1927
- 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, RtcEventEmitter, RtcEvents, RtcLocalStreamTrackAddedPayload, RtcLocalStreamTrackRemovedPayload, RtcManager, RtcManagerCreatedPayload, RtcManagerOptions, RtcStreamAddedPayload, SDPRelayMessage, ScreenshareStartedEvent, ScreenshareStoppedEvent, SendClientMetadataRequest, SignalClient, SignalEvents, SignalIceServer, SignalKnocker, SignalMediaServerConfig, SignalRequests, SignalRoom, SignalSFUServer, SignalTurnServer, SocketConf, SocketManager, Spotlight, SpotlightAddedEvent, SpotlightRemovedEvent, StatsMonitorOptions, StatsMonitorState, StatsSubscription, TurnTransportProtocol, UnifiedPlanSDP, UpdatedDeviceInfo, UpdatedDevicesInfo, VegaRtcManagerOptions, VideoEnableRequest, VideoEnableRequestedEvent, VideoEnabledEvent };
1932
+ 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, RTCSessionDescription, RemoveSpotlightRequest, RoleName, RoomConcurrencyControlsError, RoomFullError, RoomJoinedErrors, RoomJoinedEvent, RoomJoinedSuccess, RoomKnockedEvent, RoomLockedError, RoomLockedEvent, RoomMeetingTimeExhaustedError, RoomMode, RoomSessionEndedEvent, RtcClientConnectionStatusChangedPayload, RtcEventEmitter, RtcEvents, RtcLocalStreamTrackAddedPayload, RtcLocalStreamTrackRemovedPayload, RtcManager, RtcManagerCreatedPayload, RtcManagerOptions, RtcStreamAddedPayload, SDPRelayMessage, ScreenshareStartedEvent, ScreenshareStoppedEvent, SendClientMetadataRequest, SignalClient, SignalEvents, SignalIceServer, SignalKnocker, SignalMediaServerConfig, SignalRequests, SignalRoom, SignalSFUServer, SignalTurnServer, SocketConf, SocketManager, Spotlight, SpotlightAddedEvent, SpotlightRemovedEvent, StatsMonitorOptions, StatsMonitorState, StatsSubscription, TurnTransportProtocol, UpdatedDeviceInfo, UpdatedDevicesInfo, VegaRtcManagerOptions, VideoEnableRequest, VideoEnableRequestedEvent, VideoEnabledEvent };
package/dist/index.d.mts CHANGED
@@ -1015,14 +1015,13 @@ type RtcEvents = {
1015
1015
  remote_stream_track_added: void;
1016
1016
  remote_stream_track_removed: void;
1017
1017
  };
1018
- type UnifiedPlanSDP = {
1018
+ type RTCSessionDescription = {
1019
1019
  sdp: string;
1020
- sdpU: string;
1021
1020
  type: RTCSdpType;
1022
1021
  };
1023
1022
  type SDPRelayMessage = {
1024
1023
  clientId: string;
1025
- message: UnifiedPlanSDP;
1024
+ message: RTCSessionDescription;
1026
1025
  };
1027
1026
  type GetMediaConstraintsOptions = {
1028
1027
  disableAEC: boolean;
@@ -1204,9 +1203,9 @@ declare class Session {
1204
1203
  addTrack(track: MediaStreamTrack, stream?: MediaStream): void;
1205
1204
  removeTrack(track: MediaStreamTrack): void;
1206
1205
  removeStream(stream: MediaStream): void;
1207
- _setRemoteDescription(desc: any): any;
1208
- handleOffer(message: RTCSessionDescription): any;
1209
- handleAnswer(message: RTCSessionDescription): any;
1206
+ _setRemoteDescription(desc: RTCSessionDescription): Promise<void>;
1207
+ handleOffer(offer: RTCSessionDescription): Promise<RTCSessionDescription>;
1208
+ handleAnswer(message: RTCSessionDescription): Promise<void>;
1210
1209
  addIceCandidate(candidate: any): void;
1211
1210
  canModifyPeerConnection(): boolean;
1212
1211
  close(): void;
@@ -1252,6 +1251,9 @@ type P2PAnalytics = {
1252
1251
  P2PReplaceTrackSourceKindNotFound: number;
1253
1252
  P2PRemoveStreamNoPC: number;
1254
1253
  P2POnTrackNoStream: number;
1254
+ P2PSetCodecPreferenceError: number;
1255
+ P2PCreateOfferNoSDP: number;
1256
+ P2PCreateAnswerNoSDP: number;
1255
1257
  };
1256
1258
  type P2PAnalyticMetric = keyof P2PAnalytics;
1257
1259
  type P2PIncrementAnalyticMetric = (metric: P2PAnalyticMetric) => void;
@@ -1324,8 +1326,6 @@ declare class P2pRtcManager implements RtcManager {
1324
1326
  _getNonLocalCameraStreamIds(): string[];
1325
1327
  _isScreensharingLocally(): boolean;
1326
1328
  _getFirstLocalNonCameraStream(): any;
1327
- _transformIncomingSdp(original: UnifiedPlanSDP): RTCSessionDescription;
1328
- _transformOutgoingSdp(original: RTCSessionDescription): UnifiedPlanSDP;
1329
1329
  _createSession({ clientId, initialBandwidth, isOfferer, peerConnectionId, }: {
1330
1330
  clientId: string;
1331
1331
  initialBandwidth: any;
@@ -1348,7 +1348,7 @@ declare class P2pRtcManager implements RtcManager {
1348
1348
  _connect(clientId: string): Promise<Session>;
1349
1349
  _maybeRestartIce(clientId: string, session: any): void;
1350
1350
  _setCodecPreferences(pc: RTCPeerConnection): Promise<void>;
1351
- _negotiatePeerConnection(clientId: string, session: any, constraints?: any): void;
1351
+ _negotiatePeerConnection(clientId: string, session: Session, constraints?: any): void;
1352
1352
  _withForcedRenegotiation(session: Session, action: any): void;
1353
1353
  _changeBandwidthForAllClients(isJoining: boolean): number;
1354
1354
  _createP2pSession({ clientId, initialBandwidth, isOfferer, }: {
@@ -1402,7 +1402,7 @@ declare const _default: {
1402
1402
  DOMINANT_SPEAKER: string;
1403
1403
  };
1404
1404
 
1405
- declare function setVideoBandwidthUsingSetParameters(pc: any, bandwidth: any, logger?: any): any;
1405
+ declare function setVideoBandwidthUsingSetParameters(pc: RTCPeerConnection, bandwidth: number, logger?: any): Promise<void>;
1406
1406
 
1407
1407
  declare const rtcStats: {
1408
1408
  sendEvent: (type: any, value: any) => void;
@@ -1417,7 +1417,12 @@ declare const rtcStats: {
1417
1417
  };
1418
1418
  };
1419
1419
 
1420
- declare function setCodecPreferenceSDP(sdp: any, redOn?: boolean): string | undefined;
1420
+ interface SetCodecPreferenceSDPOptions {
1421
+ sdp: string;
1422
+ redOn: boolean;
1423
+ incrementAnalyticMetric: P2PIncrementAnalyticMetric;
1424
+ }
1425
+ declare function setCodecPreferenceSDP({ sdp, redOn, incrementAnalyticMetric }: SetCodecPreferenceSDPOptions): string;
1421
1426
  declare function cleanSdp(sdp: string): string;
1422
1427
  declare function maybeRejectNoH264(sdp: any): any;
1423
1428
  declare function deprioritizeH264(sdp: any): string;
@@ -1924,4 +1929,4 @@ declare const STREAM_TYPES: {
1924
1929
  };
1925
1930
 
1926
1931
  export { ADDITIONAL_SCREEN_SHARE_SETTINGS, AUDIO_SETTINGS, BandwidthTester, CAMERA_STREAM_ID, EVENTS, KNOCK_MESSAGES, KalmanFilter, Logger, MEDIA_JITTER_BUFFER_TARGET, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, RtcEventNames, RtcManagerDispatcher, 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 };
1927
- 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, RtcEventEmitter, RtcEvents, RtcLocalStreamTrackAddedPayload, RtcLocalStreamTrackRemovedPayload, RtcManager, RtcManagerCreatedPayload, RtcManagerOptions, RtcStreamAddedPayload, SDPRelayMessage, ScreenshareStartedEvent, ScreenshareStoppedEvent, SendClientMetadataRequest, SignalClient, SignalEvents, SignalIceServer, SignalKnocker, SignalMediaServerConfig, SignalRequests, SignalRoom, SignalSFUServer, SignalTurnServer, SocketConf, SocketManager, Spotlight, SpotlightAddedEvent, SpotlightRemovedEvent, StatsMonitorOptions, StatsMonitorState, StatsSubscription, TurnTransportProtocol, UnifiedPlanSDP, UpdatedDeviceInfo, UpdatedDevicesInfo, VegaRtcManagerOptions, VideoEnableRequest, VideoEnableRequestedEvent, VideoEnabledEvent };
1932
+ 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, RTCSessionDescription, RemoveSpotlightRequest, RoleName, RoomConcurrencyControlsError, RoomFullError, RoomJoinedErrors, RoomJoinedEvent, RoomJoinedSuccess, RoomKnockedEvent, RoomLockedError, RoomLockedEvent, RoomMeetingTimeExhaustedError, RoomMode, RoomSessionEndedEvent, RtcClientConnectionStatusChangedPayload, RtcEventEmitter, RtcEvents, RtcLocalStreamTrackAddedPayload, RtcLocalStreamTrackRemovedPayload, RtcManager, RtcManagerCreatedPayload, RtcManagerOptions, RtcStreamAddedPayload, SDPRelayMessage, ScreenshareStartedEvent, ScreenshareStoppedEvent, SendClientMetadataRequest, SignalClient, SignalEvents, SignalIceServer, SignalKnocker, SignalMediaServerConfig, SignalRequests, SignalRoom, SignalSFUServer, SignalTurnServer, SocketConf, SocketManager, Spotlight, SpotlightAddedEvent, SpotlightRemovedEvent, StatsMonitorOptions, StatsMonitorState, StatsSubscription, TurnTransportProtocol, UpdatedDeviceInfo, UpdatedDevicesInfo, VegaRtcManagerOptions, VideoEnableRequest, VideoEnableRequestedEvent, VideoEnabledEvent };
package/dist/index.d.ts CHANGED
@@ -1015,14 +1015,13 @@ type RtcEvents = {
1015
1015
  remote_stream_track_added: void;
1016
1016
  remote_stream_track_removed: void;
1017
1017
  };
1018
- type UnifiedPlanSDP = {
1018
+ type RTCSessionDescription = {
1019
1019
  sdp: string;
1020
- sdpU: string;
1021
1020
  type: RTCSdpType;
1022
1021
  };
1023
1022
  type SDPRelayMessage = {
1024
1023
  clientId: string;
1025
- message: UnifiedPlanSDP;
1024
+ message: RTCSessionDescription;
1026
1025
  };
1027
1026
  type GetMediaConstraintsOptions = {
1028
1027
  disableAEC: boolean;
@@ -1204,9 +1203,9 @@ declare class Session {
1204
1203
  addTrack(track: MediaStreamTrack, stream?: MediaStream): void;
1205
1204
  removeTrack(track: MediaStreamTrack): void;
1206
1205
  removeStream(stream: MediaStream): void;
1207
- _setRemoteDescription(desc: any): any;
1208
- handleOffer(message: RTCSessionDescription): any;
1209
- handleAnswer(message: RTCSessionDescription): any;
1206
+ _setRemoteDescription(desc: RTCSessionDescription): Promise<void>;
1207
+ handleOffer(offer: RTCSessionDescription): Promise<RTCSessionDescription>;
1208
+ handleAnswer(message: RTCSessionDescription): Promise<void>;
1210
1209
  addIceCandidate(candidate: any): void;
1211
1210
  canModifyPeerConnection(): boolean;
1212
1211
  close(): void;
@@ -1252,6 +1251,9 @@ type P2PAnalytics = {
1252
1251
  P2PReplaceTrackSourceKindNotFound: number;
1253
1252
  P2PRemoveStreamNoPC: number;
1254
1253
  P2POnTrackNoStream: number;
1254
+ P2PSetCodecPreferenceError: number;
1255
+ P2PCreateOfferNoSDP: number;
1256
+ P2PCreateAnswerNoSDP: number;
1255
1257
  };
1256
1258
  type P2PAnalyticMetric = keyof P2PAnalytics;
1257
1259
  type P2PIncrementAnalyticMetric = (metric: P2PAnalyticMetric) => void;
@@ -1324,8 +1326,6 @@ declare class P2pRtcManager implements RtcManager {
1324
1326
  _getNonLocalCameraStreamIds(): string[];
1325
1327
  _isScreensharingLocally(): boolean;
1326
1328
  _getFirstLocalNonCameraStream(): any;
1327
- _transformIncomingSdp(original: UnifiedPlanSDP): RTCSessionDescription;
1328
- _transformOutgoingSdp(original: RTCSessionDescription): UnifiedPlanSDP;
1329
1329
  _createSession({ clientId, initialBandwidth, isOfferer, peerConnectionId, }: {
1330
1330
  clientId: string;
1331
1331
  initialBandwidth: any;
@@ -1348,7 +1348,7 @@ declare class P2pRtcManager implements RtcManager {
1348
1348
  _connect(clientId: string): Promise<Session>;
1349
1349
  _maybeRestartIce(clientId: string, session: any): void;
1350
1350
  _setCodecPreferences(pc: RTCPeerConnection): Promise<void>;
1351
- _negotiatePeerConnection(clientId: string, session: any, constraints?: any): void;
1351
+ _negotiatePeerConnection(clientId: string, session: Session, constraints?: any): void;
1352
1352
  _withForcedRenegotiation(session: Session, action: any): void;
1353
1353
  _changeBandwidthForAllClients(isJoining: boolean): number;
1354
1354
  _createP2pSession({ clientId, initialBandwidth, isOfferer, }: {
@@ -1402,7 +1402,7 @@ declare const _default: {
1402
1402
  DOMINANT_SPEAKER: string;
1403
1403
  };
1404
1404
 
1405
- declare function setVideoBandwidthUsingSetParameters(pc: any, bandwidth: any, logger?: any): any;
1405
+ declare function setVideoBandwidthUsingSetParameters(pc: RTCPeerConnection, bandwidth: number, logger?: any): Promise<void>;
1406
1406
 
1407
1407
  declare const rtcStats: {
1408
1408
  sendEvent: (type: any, value: any) => void;
@@ -1417,7 +1417,12 @@ declare const rtcStats: {
1417
1417
  };
1418
1418
  };
1419
1419
 
1420
- declare function setCodecPreferenceSDP(sdp: any, redOn?: boolean): string | undefined;
1420
+ interface SetCodecPreferenceSDPOptions {
1421
+ sdp: string;
1422
+ redOn: boolean;
1423
+ incrementAnalyticMetric: P2PIncrementAnalyticMetric;
1424
+ }
1425
+ declare function setCodecPreferenceSDP({ sdp, redOn, incrementAnalyticMetric }: SetCodecPreferenceSDPOptions): string;
1421
1426
  declare function cleanSdp(sdp: string): string;
1422
1427
  declare function maybeRejectNoH264(sdp: any): any;
1423
1428
  declare function deprioritizeH264(sdp: any): string;
@@ -1924,4 +1929,4 @@ declare const STREAM_TYPES: {
1924
1929
  };
1925
1930
 
1926
1931
  export { ADDITIONAL_SCREEN_SHARE_SETTINGS, AUDIO_SETTINGS, BandwidthTester, CAMERA_STREAM_ID, EVENTS, KNOCK_MESSAGES, KalmanFilter, Logger, MEDIA_JITTER_BUFFER_TARGET, NoDevicesError, P2pRtcManager, PROTOCOL_ERRORS, PROTOCOL_EVENTS, PROTOCOL_REQUESTS, PROTOCOL_RESPONSES, RELAY_MESSAGES, ReconnectManager, RtcEventNames, RtcManagerDispatcher, 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 };
1927
- 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, RtcEventEmitter, RtcEvents, RtcLocalStreamTrackAddedPayload, RtcLocalStreamTrackRemovedPayload, RtcManager, RtcManagerCreatedPayload, RtcManagerOptions, RtcStreamAddedPayload, SDPRelayMessage, ScreenshareStartedEvent, ScreenshareStoppedEvent, SendClientMetadataRequest, SignalClient, SignalEvents, SignalIceServer, SignalKnocker, SignalMediaServerConfig, SignalRequests, SignalRoom, SignalSFUServer, SignalTurnServer, SocketConf, SocketManager, Spotlight, SpotlightAddedEvent, SpotlightRemovedEvent, StatsMonitorOptions, StatsMonitorState, StatsSubscription, TurnTransportProtocol, UnifiedPlanSDP, UpdatedDeviceInfo, UpdatedDevicesInfo, VegaRtcManagerOptions, VideoEnableRequest, VideoEnableRequestedEvent, VideoEnabledEvent };
1932
+ 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, RTCSessionDescription, RemoveSpotlightRequest, RoleName, RoomConcurrencyControlsError, RoomFullError, RoomJoinedErrors, RoomJoinedEvent, RoomJoinedSuccess, RoomKnockedEvent, RoomLockedError, RoomLockedEvent, RoomMeetingTimeExhaustedError, RoomMode, RoomSessionEndedEvent, RtcClientConnectionStatusChangedPayload, RtcEventEmitter, RtcEvents, RtcLocalStreamTrackAddedPayload, RtcLocalStreamTrackRemovedPayload, RtcManager, RtcManagerCreatedPayload, RtcManagerOptions, RtcStreamAddedPayload, SDPRelayMessage, ScreenshareStartedEvent, ScreenshareStoppedEvent, SendClientMetadataRequest, SignalClient, SignalEvents, SignalIceServer, SignalKnocker, SignalMediaServerConfig, SignalRequests, SignalRoom, SignalSFUServer, SignalTurnServer, SocketConf, SocketManager, Spotlight, SpotlightAddedEvent, SpotlightRemovedEvent, StatsMonitorOptions, StatsMonitorState, StatsSubscription, TurnTransportProtocol, UpdatedDeviceInfo, UpdatedDevicesInfo, VegaRtcManagerOptions, VideoEnableRequest, VideoEnableRequestedEvent, VideoEnabledEvent };
package/dist/index.mjs CHANGED
@@ -1998,7 +1998,7 @@ const adapter$5 = (_a$5 = adapterRaw.default) !== null && _a$5 !== void 0 ? _a$5
1998
1998
  const logger$8 = new Logger();
1999
1999
  const browserName$2 = (_b$2 = adapter$5.browserDetails) === null || _b$2 === void 0 ? void 0 : _b$2.browser;
2000
2000
  const browserVersion$1 = adapter$5.browserDetails.version;
2001
- function setCodecPreferenceSDP(sdp, redOn) {
2001
+ function setCodecPreferenceSDP({ sdp, redOn, incrementAnalyticMetric }) {
2002
2002
  var _a, _b;
2003
2003
  try {
2004
2004
  const sdpObject = sdpTransform.parse(sdp);
@@ -2036,7 +2036,10 @@ function setCodecPreferenceSDP(sdp, redOn) {
2036
2036
  return newSdp;
2037
2037
  }
2038
2038
  catch (error) {
2039
+ incrementAnalyticMetric("P2PSetCodecPreferenceError");
2040
+ rtcStats.sendEvent("P2PSetCodecPreferenceError", { error });
2039
2041
  logger$8.error("setCodecPreferenceSDP error:", error);
2042
+ return sdp;
2040
2043
  }
2041
2044
  }
2042
2045
  function cleanSdp(sdp) {
@@ -2324,25 +2327,35 @@ class Session {
2324
2327
  this.earlyIceCandidates = [];
2325
2328
  });
2326
2329
  }
2327
- handleOffer(message) {
2330
+ handleOffer(offer) {
2328
2331
  if (!this.canModifyPeerConnection()) {
2329
2332
  return new Promise((resolve) => {
2330
- this.pending.push(() => this.handleOffer(message).then(resolve));
2333
+ this.pending.push(() => this.handleOffer(offer).then(resolve));
2331
2334
  });
2332
2335
  }
2333
2336
  this.isOperationPending = true;
2334
- let sdp = message.sdp;
2337
+ let sdp = offer.sdp;
2335
2338
  sdp = filterMidExtension(sdp);
2336
2339
  sdp = filterMsidSemantic(sdp);
2337
- const desc = { type: message.type, sdp };
2340
+ const desc = { type: offer.type, sdp };
2338
2341
  let answerToSignal;
2339
2342
  return this._setRemoteDescription(desc)
2340
2343
  .then(() => {
2341
2344
  return this.pc.createAnswer();
2342
2345
  })
2343
2346
  .then((answer) => {
2344
- answerToSignal = answer;
2345
- return this.pc.setLocalDescription(answer);
2347
+ if (!answer.sdp) {
2348
+ this._incrementAnalyticMetric("P2PCreateAnswerNoSDP");
2349
+ rtcStats.sendEvent("P2PCreateAnswerNoSDP", {});
2350
+ throw new Error("SDP undefined while creating answer");
2351
+ }
2352
+ else {
2353
+ answerToSignal = {
2354
+ sdp: answer.sdp,
2355
+ type: answer.type,
2356
+ };
2357
+ return this.pc.setLocalDescription(answer);
2358
+ }
2346
2359
  })
2347
2360
  .then(() => {
2348
2361
  return setVideoBandwidthUsingSetParameters(this.pc, this.bandwidth);
@@ -2662,6 +2675,9 @@ class P2pRtcManager {
2662
2675
  P2PReplaceTrackSourceKindNotFound: 0,
2663
2676
  P2PRemoveStreamNoPC: 0,
2664
2677
  P2POnTrackNoStream: 0,
2678
+ P2PSetCodecPreferenceError: 0,
2679
+ P2PCreateOfferNoSDP: 0,
2680
+ P2PCreateAnswerNoSDP: 0,
2665
2681
  };
2666
2682
  }
2667
2683
  numberOfPeerconnections() {
@@ -2782,13 +2798,12 @@ class P2pRtcManager {
2782
2798
  logger$6.warn("No RTCPeerConnection on SDP_OFFER", data);
2783
2799
  return;
2784
2800
  }
2785
- const offer = this._transformIncomingSdp(data.message);
2786
2801
  (_b = (_a = session
2787
- .handleOffer(offer)
2802
+ .handleOffer(data.message)
2788
2803
  .then((answer) => {
2789
2804
  this._emitServerEvent(RELAY_MESSAGES.SDP_ANSWER, {
2790
2805
  receiverId: data.clientId,
2791
- message: this._transformOutgoingSdp(answer),
2806
+ message: answer,
2792
2807
  });
2793
2808
  })).catch) === null || _b === void 0 ? void 0 : _b.call(_a, (e) => {
2794
2809
  this.analytics.numPcOnOfferFailure++;
@@ -2801,8 +2816,7 @@ class P2pRtcManager {
2801
2816
  logger$6.warn("No RTCPeerConnection on SDP_ANSWER", data);
2802
2817
  return;
2803
2818
  }
2804
- const answer = this._transformIncomingSdp(data.message);
2805
- (_b = (_a = session.handleAnswer(answer)) === null || _a === void 0 ? void 0 : _a.catch) === null || _b === void 0 ? void 0 : _b.call(_a, (e) => {
2819
+ (_b = (_a = session.handleAnswer(data.message)) === null || _a === void 0 ? void 0 : _a.catch) === null || _b === void 0 ? void 0 : _b.call(_a, (e) => {
2806
2820
  logger$6.warn("Could not set remote description from remote answer: ", e);
2807
2821
  this.analytics.numPcOnAnswerFailure++;
2808
2822
  });
@@ -2981,13 +2995,6 @@ class P2pRtcManager {
2981
2995
  const streamIds = this._getNonLocalCameraStreamIds();
2982
2996
  return streamIds.length === 0 ? null : this.localStreams[streamIds[0]];
2983
2997
  }
2984
- _transformIncomingSdp(original) {
2985
- const sdp = original.sdp ? original.sdp : original.sdpU;
2986
- return { type: original.type, sdp };
2987
- }
2988
- _transformOutgoingSdp(original) {
2989
- return { type: original.type, sdpU: original.sdp, sdp: original.sdp };
2990
- }
2991
2998
  _createSession({ clientId, initialBandwidth, isOfferer, peerConnectionId, }) {
2992
2999
  if (!peerConnectionId) {
2993
3000
  throw new Error("peerConnectionId is missing");
@@ -3352,10 +3359,19 @@ class P2pRtcManager {
3352
3359
  this._setCodecPreferences(pc).then(() => pc
3353
3360
  .createOffer(constraints || this.offerOptions)
3354
3361
  .then((offer) => {
3362
+ if (!offer.sdp) {
3363
+ this.analytics.P2PCreateOfferNoSDP++;
3364
+ rtcStats.sendEvent("P2PCreateOfferNoSDP", {});
3365
+ throw new Error("SDP undefined while creating offer");
3366
+ }
3355
3367
  if (rtpAbsCaptureTimeOn)
3356
3368
  offer.sdp = addAbsCaptureTimeExtMap(offer.sdp);
3357
3369
  if (browserName$1 === "firefox") {
3358
- offer.sdp = setCodecPreferenceSDP(offer.sdp, redOn);
3370
+ offer.sdp = setCodecPreferenceSDP({
3371
+ sdp: offer.sdp,
3372
+ redOn,
3373
+ incrementAnalyticMetric: (metric) => this.analytics[metric]++,
3374
+ });
3359
3375
  }
3360
3376
  if (cleanSdpOn)
3361
3377
  offer.sdp = cleanSdp(offer.sdp);
@@ -3368,7 +3384,7 @@ class P2pRtcManager {
3368
3384
  .then(() => {
3369
3385
  this._emitServerEvent(RELAY_MESSAGES.SDP_OFFER, {
3370
3386
  receiverId: clientId,
3371
- message: this._transformOutgoingSdp(offer),
3387
+ message: offer,
3372
3388
  });
3373
3389
  });
3374
3390
  })
@@ -1998,7 +1998,7 @@ const adapter$5 = (_a$5 = adapterRaw.default) !== null && _a$5 !== void 0 ? _a$5
1998
1998
  const logger$8 = new Logger();
1999
1999
  const browserName$2 = (_b$2 = adapter$5.browserDetails) === null || _b$2 === void 0 ? void 0 : _b$2.browser;
2000
2000
  const browserVersion$1 = adapter$5.browserDetails.version;
2001
- function setCodecPreferenceSDP(sdp, redOn) {
2001
+ function setCodecPreferenceSDP({ sdp, redOn, incrementAnalyticMetric }) {
2002
2002
  var _a, _b;
2003
2003
  try {
2004
2004
  const sdpObject = sdpTransform.parse(sdp);
@@ -2036,7 +2036,10 @@ function setCodecPreferenceSDP(sdp, redOn) {
2036
2036
  return newSdp;
2037
2037
  }
2038
2038
  catch (error) {
2039
+ incrementAnalyticMetric("P2PSetCodecPreferenceError");
2040
+ rtcStats.sendEvent("P2PSetCodecPreferenceError", { error });
2039
2041
  logger$8.error("setCodecPreferenceSDP error:", error);
2042
+ return sdp;
2040
2043
  }
2041
2044
  }
2042
2045
  function cleanSdp(sdp) {
@@ -2324,25 +2327,35 @@ class Session {
2324
2327
  this.earlyIceCandidates = [];
2325
2328
  });
2326
2329
  }
2327
- handleOffer(message) {
2330
+ handleOffer(offer) {
2328
2331
  if (!this.canModifyPeerConnection()) {
2329
2332
  return new Promise((resolve) => {
2330
- this.pending.push(() => this.handleOffer(message).then(resolve));
2333
+ this.pending.push(() => this.handleOffer(offer).then(resolve));
2331
2334
  });
2332
2335
  }
2333
2336
  this.isOperationPending = true;
2334
- let sdp = message.sdp;
2337
+ let sdp = offer.sdp;
2335
2338
  sdp = filterMidExtension(sdp);
2336
2339
  sdp = filterMsidSemantic(sdp);
2337
- const desc = { type: message.type, sdp };
2340
+ const desc = { type: offer.type, sdp };
2338
2341
  let answerToSignal;
2339
2342
  return this._setRemoteDescription(desc)
2340
2343
  .then(() => {
2341
2344
  return this.pc.createAnswer();
2342
2345
  })
2343
2346
  .then((answer) => {
2344
- answerToSignal = answer;
2345
- return this.pc.setLocalDescription(answer);
2347
+ if (!answer.sdp) {
2348
+ this._incrementAnalyticMetric("P2PCreateAnswerNoSDP");
2349
+ rtcStats.sendEvent("P2PCreateAnswerNoSDP", {});
2350
+ throw new Error("SDP undefined while creating answer");
2351
+ }
2352
+ else {
2353
+ answerToSignal = {
2354
+ sdp: answer.sdp,
2355
+ type: answer.type,
2356
+ };
2357
+ return this.pc.setLocalDescription(answer);
2358
+ }
2346
2359
  })
2347
2360
  .then(() => {
2348
2361
  return setVideoBandwidthUsingSetParameters(this.pc, this.bandwidth);
@@ -2662,6 +2675,9 @@ class P2pRtcManager {
2662
2675
  P2PReplaceTrackSourceKindNotFound: 0,
2663
2676
  P2PRemoveStreamNoPC: 0,
2664
2677
  P2POnTrackNoStream: 0,
2678
+ P2PSetCodecPreferenceError: 0,
2679
+ P2PCreateOfferNoSDP: 0,
2680
+ P2PCreateAnswerNoSDP: 0,
2665
2681
  };
2666
2682
  }
2667
2683
  numberOfPeerconnections() {
@@ -2782,13 +2798,12 @@ class P2pRtcManager {
2782
2798
  logger$6.warn("No RTCPeerConnection on SDP_OFFER", data);
2783
2799
  return;
2784
2800
  }
2785
- const offer = this._transformIncomingSdp(data.message);
2786
2801
  (_b = (_a = session
2787
- .handleOffer(offer)
2802
+ .handleOffer(data.message)
2788
2803
  .then((answer) => {
2789
2804
  this._emitServerEvent(RELAY_MESSAGES.SDP_ANSWER, {
2790
2805
  receiverId: data.clientId,
2791
- message: this._transformOutgoingSdp(answer),
2806
+ message: answer,
2792
2807
  });
2793
2808
  })).catch) === null || _b === void 0 ? void 0 : _b.call(_a, (e) => {
2794
2809
  this.analytics.numPcOnOfferFailure++;
@@ -2801,8 +2816,7 @@ class P2pRtcManager {
2801
2816
  logger$6.warn("No RTCPeerConnection on SDP_ANSWER", data);
2802
2817
  return;
2803
2818
  }
2804
- const answer = this._transformIncomingSdp(data.message);
2805
- (_b = (_a = session.handleAnswer(answer)) === null || _a === void 0 ? void 0 : _a.catch) === null || _b === void 0 ? void 0 : _b.call(_a, (e) => {
2819
+ (_b = (_a = session.handleAnswer(data.message)) === null || _a === void 0 ? void 0 : _a.catch) === null || _b === void 0 ? void 0 : _b.call(_a, (e) => {
2806
2820
  logger$6.warn("Could not set remote description from remote answer: ", e);
2807
2821
  this.analytics.numPcOnAnswerFailure++;
2808
2822
  });
@@ -2981,13 +2995,6 @@ class P2pRtcManager {
2981
2995
  const streamIds = this._getNonLocalCameraStreamIds();
2982
2996
  return streamIds.length === 0 ? null : this.localStreams[streamIds[0]];
2983
2997
  }
2984
- _transformIncomingSdp(original) {
2985
- const sdp = original.sdp ? original.sdp : original.sdpU;
2986
- return { type: original.type, sdp };
2987
- }
2988
- _transformOutgoingSdp(original) {
2989
- return { type: original.type, sdpU: original.sdp, sdp: original.sdp };
2990
- }
2991
2998
  _createSession({ clientId, initialBandwidth, isOfferer, peerConnectionId, }) {
2992
2999
  if (!peerConnectionId) {
2993
3000
  throw new Error("peerConnectionId is missing");
@@ -3352,10 +3359,19 @@ class P2pRtcManager {
3352
3359
  this._setCodecPreferences(pc).then(() => pc
3353
3360
  .createOffer(constraints || this.offerOptions)
3354
3361
  .then((offer) => {
3362
+ if (!offer.sdp) {
3363
+ this.analytics.P2PCreateOfferNoSDP++;
3364
+ rtcStats.sendEvent("P2PCreateOfferNoSDP", {});
3365
+ throw new Error("SDP undefined while creating offer");
3366
+ }
3355
3367
  if (rtpAbsCaptureTimeOn)
3356
3368
  offer.sdp = addAbsCaptureTimeExtMap(offer.sdp);
3357
3369
  if (browserName$1 === "firefox") {
3358
- offer.sdp = setCodecPreferenceSDP(offer.sdp, redOn);
3370
+ offer.sdp = setCodecPreferenceSDP({
3371
+ sdp: offer.sdp,
3372
+ redOn,
3373
+ incrementAnalyticMetric: (metric) => this.analytics[metric]++,
3374
+ });
3359
3375
  }
3360
3376
  if (cleanSdpOn)
3361
3377
  offer.sdp = cleanSdp(offer.sdp);
@@ -3368,7 +3384,7 @@ class P2pRtcManager {
3368
3384
  .then(() => {
3369
3385
  this._emitServerEvent(RELAY_MESSAGES.SDP_OFFER, {
3370
3386
  receiverId: clientId,
3371
- message: this._transformOutgoingSdp(offer),
3387
+ message: offer,
3372
3388
  });
3373
3389
  });
3374
3390
  })
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.8.4",
4
+ "version": "2.8.5",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/whereby/sdk",
7
7
  "repository": {