@whereby.com/media 2.8.4 → 2.8.6

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,36 @@ 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
+ sdpU: answer.sdp,
2377
+ type: answer.type,
2378
+ };
2379
+ return this.pc.setLocalDescription(answer);
2380
+ }
2367
2381
  })
2368
2382
  .then(() => {
2369
2383
  return setVideoBandwidthUsingSetParameters(this.pc, this.bandwidth);
@@ -2683,6 +2697,9 @@ class P2pRtcManager {
2683
2697
  P2PReplaceTrackSourceKindNotFound: 0,
2684
2698
  P2PRemoveStreamNoPC: 0,
2685
2699
  P2POnTrackNoStream: 0,
2700
+ P2PSetCodecPreferenceError: 0,
2701
+ P2PCreateOfferNoSDP: 0,
2702
+ P2PCreateAnswerNoSDP: 0,
2686
2703
  };
2687
2704
  }
2688
2705
  numberOfPeerconnections() {
@@ -2803,13 +2820,16 @@ class P2pRtcManager {
2803
2820
  logger$6.warn("No RTCPeerConnection on SDP_OFFER", data);
2804
2821
  return;
2805
2822
  }
2806
- const offer = this._transformIncomingSdp(data.message);
2823
+ const sdp = {
2824
+ sdp: data.message.sdp || data.message.sdpU,
2825
+ type: data.message.type,
2826
+ };
2807
2827
  (_b = (_a = session
2808
- .handleOffer(offer)
2828
+ .handleOffer(sdp)
2809
2829
  .then((answer) => {
2810
2830
  this._emitServerEvent(RELAY_MESSAGES.SDP_ANSWER, {
2811
2831
  receiverId: data.clientId,
2812
- message: this._transformOutgoingSdp(answer),
2832
+ message: answer,
2813
2833
  });
2814
2834
  })).catch) === null || _b === void 0 ? void 0 : _b.call(_a, (e) => {
2815
2835
  this.analytics.numPcOnOfferFailure++;
@@ -2822,8 +2842,11 @@ class P2pRtcManager {
2822
2842
  logger$6.warn("No RTCPeerConnection on SDP_ANSWER", data);
2823
2843
  return;
2824
2844
  }
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) => {
2845
+ const sdp = {
2846
+ sdp: data.message.sdp || data.message.sdpU,
2847
+ type: data.message.type,
2848
+ };
2849
+ (_b = (_a = session.handleAnswer(sdp)) === null || _a === void 0 ? void 0 : _a.catch) === null || _b === void 0 ? void 0 : _b.call(_a, (e) => {
2827
2850
  logger$6.warn("Could not set remote description from remote answer: ", e);
2828
2851
  this.analytics.numPcOnAnswerFailure++;
2829
2852
  });
@@ -3002,13 +3025,6 @@ class P2pRtcManager {
3002
3025
  const streamIds = this._getNonLocalCameraStreamIds();
3003
3026
  return streamIds.length === 0 ? null : this.localStreams[streamIds[0]];
3004
3027
  }
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
3028
  _createSession({ clientId, initialBandwidth, isOfferer, peerConnectionId, }) {
3013
3029
  if (!peerConnectionId) {
3014
3030
  throw new Error("peerConnectionId is missing");
@@ -3373,10 +3389,19 @@ class P2pRtcManager {
3373
3389
  this._setCodecPreferences(pc).then(() => pc
3374
3390
  .createOffer(constraints || this.offerOptions)
3375
3391
  .then((offer) => {
3392
+ if (!offer.sdp) {
3393
+ this.analytics.P2PCreateOfferNoSDP++;
3394
+ rtcStats.sendEvent("P2PCreateOfferNoSDP", {});
3395
+ throw new Error("SDP undefined while creating offer");
3396
+ }
3376
3397
  if (rtpAbsCaptureTimeOn)
3377
3398
  offer.sdp = addAbsCaptureTimeExtMap(offer.sdp);
3378
3399
  if (browserName$1 === "firefox") {
3379
- offer.sdp = setCodecPreferenceSDP(offer.sdp, redOn);
3400
+ offer.sdp = setCodecPreferenceSDP({
3401
+ sdp: offer.sdp,
3402
+ redOn,
3403
+ incrementAnalyticMetric: (metric) => this.analytics[metric]++,
3404
+ });
3380
3405
  }
3381
3406
  if (cleanSdpOn)
3382
3407
  offer.sdp = cleanSdp(offer.sdp);
@@ -3387,9 +3412,14 @@ class P2pRtcManager {
3387
3412
  throw e;
3388
3413
  })
3389
3414
  .then(() => {
3415
+ const message = {
3416
+ sdp: offer.sdp,
3417
+ sdpU: offer.sdp,
3418
+ type: offer.type,
3419
+ };
3390
3420
  this._emitServerEvent(RELAY_MESSAGES.SDP_OFFER, {
3391
3421
  receiverId: clientId,
3392
- message: this._transformOutgoingSdp(offer),
3422
+ message,
3393
3423
  });
3394
3424
  });
3395
3425
  })
package/dist/index.d.cts CHANGED
@@ -1015,14 +1015,14 @@ type RtcEvents = {
1015
1015
  remote_stream_track_added: void;
1016
1016
  remote_stream_track_removed: void;
1017
1017
  };
1018
- type UnifiedPlanSDP = {
1019
- sdp: string;
1020
- sdpU: string;
1018
+ type RTCSessionDescription = {
1019
+ sdp?: string;
1020
+ sdpU?: string;
1021
1021
  type: RTCSdpType;
1022
1022
  };
1023
1023
  type SDPRelayMessage = {
1024
1024
  clientId: string;
1025
- message: UnifiedPlanSDP;
1025
+ message: RTCSessionDescription;
1026
1026
  };
1027
1027
  type GetMediaConstraintsOptions = {
1028
1028
  disableAEC: boolean;
@@ -1204,9 +1204,9 @@ declare class Session {
1204
1204
  addTrack(track: MediaStreamTrack, stream?: MediaStream): void;
1205
1205
  removeTrack(track: MediaStreamTrack): void;
1206
1206
  removeStream(stream: MediaStream): void;
1207
- _setRemoteDescription(desc: any): any;
1208
- handleOffer(message: RTCSessionDescription): any;
1209
- handleAnswer(message: RTCSessionDescription): any;
1207
+ _setRemoteDescription(desc: RTCSessionDescription): Promise<void>;
1208
+ handleOffer(offer: RTCSessionDescription): Promise<RTCSessionDescription>;
1209
+ handleAnswer(message: RTCSessionDescription): Promise<void>;
1210
1210
  addIceCandidate(candidate: any): void;
1211
1211
  canModifyPeerConnection(): boolean;
1212
1212
  close(): void;
@@ -1252,6 +1252,9 @@ type P2PAnalytics = {
1252
1252
  P2PReplaceTrackSourceKindNotFound: number;
1253
1253
  P2PRemoveStreamNoPC: number;
1254
1254
  P2POnTrackNoStream: number;
1255
+ P2PSetCodecPreferenceError: number;
1256
+ P2PCreateOfferNoSDP: number;
1257
+ P2PCreateAnswerNoSDP: number;
1255
1258
  };
1256
1259
  type P2PAnalyticMetric = keyof P2PAnalytics;
1257
1260
  type P2PIncrementAnalyticMetric = (metric: P2PAnalyticMetric) => void;
@@ -1324,8 +1327,6 @@ declare class P2pRtcManager implements RtcManager {
1324
1327
  _getNonLocalCameraStreamIds(): string[];
1325
1328
  _isScreensharingLocally(): boolean;
1326
1329
  _getFirstLocalNonCameraStream(): any;
1327
- _transformIncomingSdp(original: UnifiedPlanSDP): RTCSessionDescription;
1328
- _transformOutgoingSdp(original: RTCSessionDescription): UnifiedPlanSDP;
1329
1330
  _createSession({ clientId, initialBandwidth, isOfferer, peerConnectionId, }: {
1330
1331
  clientId: string;
1331
1332
  initialBandwidth: any;
@@ -1348,7 +1349,7 @@ declare class P2pRtcManager implements RtcManager {
1348
1349
  _connect(clientId: string): Promise<Session>;
1349
1350
  _maybeRestartIce(clientId: string, session: any): void;
1350
1351
  _setCodecPreferences(pc: RTCPeerConnection): Promise<void>;
1351
- _negotiatePeerConnection(clientId: string, session: any, constraints?: any): void;
1352
+ _negotiatePeerConnection(clientId: string, session: Session, constraints?: any): void;
1352
1353
  _withForcedRenegotiation(session: Session, action: any): void;
1353
1354
  _changeBandwidthForAllClients(isJoining: boolean): number;
1354
1355
  _createP2pSession({ clientId, initialBandwidth, isOfferer, }: {
@@ -1402,7 +1403,7 @@ declare const _default: {
1402
1403
  DOMINANT_SPEAKER: string;
1403
1404
  };
1404
1405
 
1405
- declare function setVideoBandwidthUsingSetParameters(pc: any, bandwidth: any, logger?: any): any;
1406
+ declare function setVideoBandwidthUsingSetParameters(pc: RTCPeerConnection, bandwidth: number, logger?: any): Promise<void>;
1406
1407
 
1407
1408
  declare const rtcStats: {
1408
1409
  sendEvent: (type: any, value: any) => void;
@@ -1417,7 +1418,12 @@ declare const rtcStats: {
1417
1418
  };
1418
1419
  };
1419
1420
 
1420
- declare function setCodecPreferenceSDP(sdp: any, redOn?: boolean): string | undefined;
1421
+ interface SetCodecPreferenceSDPOptions {
1422
+ sdp: string;
1423
+ redOn: boolean;
1424
+ incrementAnalyticMetric: P2PIncrementAnalyticMetric;
1425
+ }
1426
+ declare function setCodecPreferenceSDP({ sdp, redOn, incrementAnalyticMetric }: SetCodecPreferenceSDPOptions): string;
1421
1427
  declare function cleanSdp(sdp: string): string;
1422
1428
  declare function maybeRejectNoH264(sdp: any): any;
1423
1429
  declare function deprioritizeH264(sdp: any): string;
@@ -1924,4 +1930,4 @@ declare const STREAM_TYPES: {
1924
1930
  };
1925
1931
 
1926
1932
  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 };
1933
+ 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,14 @@ type RtcEvents = {
1015
1015
  remote_stream_track_added: void;
1016
1016
  remote_stream_track_removed: void;
1017
1017
  };
1018
- type UnifiedPlanSDP = {
1019
- sdp: string;
1020
- sdpU: string;
1018
+ type RTCSessionDescription = {
1019
+ sdp?: string;
1020
+ sdpU?: string;
1021
1021
  type: RTCSdpType;
1022
1022
  };
1023
1023
  type SDPRelayMessage = {
1024
1024
  clientId: string;
1025
- message: UnifiedPlanSDP;
1025
+ message: RTCSessionDescription;
1026
1026
  };
1027
1027
  type GetMediaConstraintsOptions = {
1028
1028
  disableAEC: boolean;
@@ -1204,9 +1204,9 @@ declare class Session {
1204
1204
  addTrack(track: MediaStreamTrack, stream?: MediaStream): void;
1205
1205
  removeTrack(track: MediaStreamTrack): void;
1206
1206
  removeStream(stream: MediaStream): void;
1207
- _setRemoteDescription(desc: any): any;
1208
- handleOffer(message: RTCSessionDescription): any;
1209
- handleAnswer(message: RTCSessionDescription): any;
1207
+ _setRemoteDescription(desc: RTCSessionDescription): Promise<void>;
1208
+ handleOffer(offer: RTCSessionDescription): Promise<RTCSessionDescription>;
1209
+ handleAnswer(message: RTCSessionDescription): Promise<void>;
1210
1210
  addIceCandidate(candidate: any): void;
1211
1211
  canModifyPeerConnection(): boolean;
1212
1212
  close(): void;
@@ -1252,6 +1252,9 @@ type P2PAnalytics = {
1252
1252
  P2PReplaceTrackSourceKindNotFound: number;
1253
1253
  P2PRemoveStreamNoPC: number;
1254
1254
  P2POnTrackNoStream: number;
1255
+ P2PSetCodecPreferenceError: number;
1256
+ P2PCreateOfferNoSDP: number;
1257
+ P2PCreateAnswerNoSDP: number;
1255
1258
  };
1256
1259
  type P2PAnalyticMetric = keyof P2PAnalytics;
1257
1260
  type P2PIncrementAnalyticMetric = (metric: P2PAnalyticMetric) => void;
@@ -1324,8 +1327,6 @@ declare class P2pRtcManager implements RtcManager {
1324
1327
  _getNonLocalCameraStreamIds(): string[];
1325
1328
  _isScreensharingLocally(): boolean;
1326
1329
  _getFirstLocalNonCameraStream(): any;
1327
- _transformIncomingSdp(original: UnifiedPlanSDP): RTCSessionDescription;
1328
- _transformOutgoingSdp(original: RTCSessionDescription): UnifiedPlanSDP;
1329
1330
  _createSession({ clientId, initialBandwidth, isOfferer, peerConnectionId, }: {
1330
1331
  clientId: string;
1331
1332
  initialBandwidth: any;
@@ -1348,7 +1349,7 @@ declare class P2pRtcManager implements RtcManager {
1348
1349
  _connect(clientId: string): Promise<Session>;
1349
1350
  _maybeRestartIce(clientId: string, session: any): void;
1350
1351
  _setCodecPreferences(pc: RTCPeerConnection): Promise<void>;
1351
- _negotiatePeerConnection(clientId: string, session: any, constraints?: any): void;
1352
+ _negotiatePeerConnection(clientId: string, session: Session, constraints?: any): void;
1352
1353
  _withForcedRenegotiation(session: Session, action: any): void;
1353
1354
  _changeBandwidthForAllClients(isJoining: boolean): number;
1354
1355
  _createP2pSession({ clientId, initialBandwidth, isOfferer, }: {
@@ -1402,7 +1403,7 @@ declare const _default: {
1402
1403
  DOMINANT_SPEAKER: string;
1403
1404
  };
1404
1405
 
1405
- declare function setVideoBandwidthUsingSetParameters(pc: any, bandwidth: any, logger?: any): any;
1406
+ declare function setVideoBandwidthUsingSetParameters(pc: RTCPeerConnection, bandwidth: number, logger?: any): Promise<void>;
1406
1407
 
1407
1408
  declare const rtcStats: {
1408
1409
  sendEvent: (type: any, value: any) => void;
@@ -1417,7 +1418,12 @@ declare const rtcStats: {
1417
1418
  };
1418
1419
  };
1419
1420
 
1420
- declare function setCodecPreferenceSDP(sdp: any, redOn?: boolean): string | undefined;
1421
+ interface SetCodecPreferenceSDPOptions {
1422
+ sdp: string;
1423
+ redOn: boolean;
1424
+ incrementAnalyticMetric: P2PIncrementAnalyticMetric;
1425
+ }
1426
+ declare function setCodecPreferenceSDP({ sdp, redOn, incrementAnalyticMetric }: SetCodecPreferenceSDPOptions): string;
1421
1427
  declare function cleanSdp(sdp: string): string;
1422
1428
  declare function maybeRejectNoH264(sdp: any): any;
1423
1429
  declare function deprioritizeH264(sdp: any): string;
@@ -1924,4 +1930,4 @@ declare const STREAM_TYPES: {
1924
1930
  };
1925
1931
 
1926
1932
  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 };
1933
+ 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,14 @@ type RtcEvents = {
1015
1015
  remote_stream_track_added: void;
1016
1016
  remote_stream_track_removed: void;
1017
1017
  };
1018
- type UnifiedPlanSDP = {
1019
- sdp: string;
1020
- sdpU: string;
1018
+ type RTCSessionDescription = {
1019
+ sdp?: string;
1020
+ sdpU?: string;
1021
1021
  type: RTCSdpType;
1022
1022
  };
1023
1023
  type SDPRelayMessage = {
1024
1024
  clientId: string;
1025
- message: UnifiedPlanSDP;
1025
+ message: RTCSessionDescription;
1026
1026
  };
1027
1027
  type GetMediaConstraintsOptions = {
1028
1028
  disableAEC: boolean;
@@ -1204,9 +1204,9 @@ declare class Session {
1204
1204
  addTrack(track: MediaStreamTrack, stream?: MediaStream): void;
1205
1205
  removeTrack(track: MediaStreamTrack): void;
1206
1206
  removeStream(stream: MediaStream): void;
1207
- _setRemoteDescription(desc: any): any;
1208
- handleOffer(message: RTCSessionDescription): any;
1209
- handleAnswer(message: RTCSessionDescription): any;
1207
+ _setRemoteDescription(desc: RTCSessionDescription): Promise<void>;
1208
+ handleOffer(offer: RTCSessionDescription): Promise<RTCSessionDescription>;
1209
+ handleAnswer(message: RTCSessionDescription): Promise<void>;
1210
1210
  addIceCandidate(candidate: any): void;
1211
1211
  canModifyPeerConnection(): boolean;
1212
1212
  close(): void;
@@ -1252,6 +1252,9 @@ type P2PAnalytics = {
1252
1252
  P2PReplaceTrackSourceKindNotFound: number;
1253
1253
  P2PRemoveStreamNoPC: number;
1254
1254
  P2POnTrackNoStream: number;
1255
+ P2PSetCodecPreferenceError: number;
1256
+ P2PCreateOfferNoSDP: number;
1257
+ P2PCreateAnswerNoSDP: number;
1255
1258
  };
1256
1259
  type P2PAnalyticMetric = keyof P2PAnalytics;
1257
1260
  type P2PIncrementAnalyticMetric = (metric: P2PAnalyticMetric) => void;
@@ -1324,8 +1327,6 @@ declare class P2pRtcManager implements RtcManager {
1324
1327
  _getNonLocalCameraStreamIds(): string[];
1325
1328
  _isScreensharingLocally(): boolean;
1326
1329
  _getFirstLocalNonCameraStream(): any;
1327
- _transformIncomingSdp(original: UnifiedPlanSDP): RTCSessionDescription;
1328
- _transformOutgoingSdp(original: RTCSessionDescription): UnifiedPlanSDP;
1329
1330
  _createSession({ clientId, initialBandwidth, isOfferer, peerConnectionId, }: {
1330
1331
  clientId: string;
1331
1332
  initialBandwidth: any;
@@ -1348,7 +1349,7 @@ declare class P2pRtcManager implements RtcManager {
1348
1349
  _connect(clientId: string): Promise<Session>;
1349
1350
  _maybeRestartIce(clientId: string, session: any): void;
1350
1351
  _setCodecPreferences(pc: RTCPeerConnection): Promise<void>;
1351
- _negotiatePeerConnection(clientId: string, session: any, constraints?: any): void;
1352
+ _negotiatePeerConnection(clientId: string, session: Session, constraints?: any): void;
1352
1353
  _withForcedRenegotiation(session: Session, action: any): void;
1353
1354
  _changeBandwidthForAllClients(isJoining: boolean): number;
1354
1355
  _createP2pSession({ clientId, initialBandwidth, isOfferer, }: {
@@ -1402,7 +1403,7 @@ declare const _default: {
1402
1403
  DOMINANT_SPEAKER: string;
1403
1404
  };
1404
1405
 
1405
- declare function setVideoBandwidthUsingSetParameters(pc: any, bandwidth: any, logger?: any): any;
1406
+ declare function setVideoBandwidthUsingSetParameters(pc: RTCPeerConnection, bandwidth: number, logger?: any): Promise<void>;
1406
1407
 
1407
1408
  declare const rtcStats: {
1408
1409
  sendEvent: (type: any, value: any) => void;
@@ -1417,7 +1418,12 @@ declare const rtcStats: {
1417
1418
  };
1418
1419
  };
1419
1420
 
1420
- declare function setCodecPreferenceSDP(sdp: any, redOn?: boolean): string | undefined;
1421
+ interface SetCodecPreferenceSDPOptions {
1422
+ sdp: string;
1423
+ redOn: boolean;
1424
+ incrementAnalyticMetric: P2PIncrementAnalyticMetric;
1425
+ }
1426
+ declare function setCodecPreferenceSDP({ sdp, redOn, incrementAnalyticMetric }: SetCodecPreferenceSDPOptions): string;
1421
1427
  declare function cleanSdp(sdp: string): string;
1422
1428
  declare function maybeRejectNoH264(sdp: any): any;
1423
1429
  declare function deprioritizeH264(sdp: any): string;
@@ -1924,4 +1930,4 @@ declare const STREAM_TYPES: {
1924
1930
  };
1925
1931
 
1926
1932
  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 };
1933
+ 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,36 @@ 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
+ sdpU: answer.sdp,
2356
+ type: answer.type,
2357
+ };
2358
+ return this.pc.setLocalDescription(answer);
2359
+ }
2346
2360
  })
2347
2361
  .then(() => {
2348
2362
  return setVideoBandwidthUsingSetParameters(this.pc, this.bandwidth);
@@ -2662,6 +2676,9 @@ class P2pRtcManager {
2662
2676
  P2PReplaceTrackSourceKindNotFound: 0,
2663
2677
  P2PRemoveStreamNoPC: 0,
2664
2678
  P2POnTrackNoStream: 0,
2679
+ P2PSetCodecPreferenceError: 0,
2680
+ P2PCreateOfferNoSDP: 0,
2681
+ P2PCreateAnswerNoSDP: 0,
2665
2682
  };
2666
2683
  }
2667
2684
  numberOfPeerconnections() {
@@ -2782,13 +2799,16 @@ class P2pRtcManager {
2782
2799
  logger$6.warn("No RTCPeerConnection on SDP_OFFER", data);
2783
2800
  return;
2784
2801
  }
2785
- const offer = this._transformIncomingSdp(data.message);
2802
+ const sdp = {
2803
+ sdp: data.message.sdp || data.message.sdpU,
2804
+ type: data.message.type,
2805
+ };
2786
2806
  (_b = (_a = session
2787
- .handleOffer(offer)
2807
+ .handleOffer(sdp)
2788
2808
  .then((answer) => {
2789
2809
  this._emitServerEvent(RELAY_MESSAGES.SDP_ANSWER, {
2790
2810
  receiverId: data.clientId,
2791
- message: this._transformOutgoingSdp(answer),
2811
+ message: answer,
2792
2812
  });
2793
2813
  })).catch) === null || _b === void 0 ? void 0 : _b.call(_a, (e) => {
2794
2814
  this.analytics.numPcOnOfferFailure++;
@@ -2801,8 +2821,11 @@ class P2pRtcManager {
2801
2821
  logger$6.warn("No RTCPeerConnection on SDP_ANSWER", data);
2802
2822
  return;
2803
2823
  }
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) => {
2824
+ const sdp = {
2825
+ sdp: data.message.sdp || data.message.sdpU,
2826
+ type: data.message.type,
2827
+ };
2828
+ (_b = (_a = session.handleAnswer(sdp)) === null || _a === void 0 ? void 0 : _a.catch) === null || _b === void 0 ? void 0 : _b.call(_a, (e) => {
2806
2829
  logger$6.warn("Could not set remote description from remote answer: ", e);
2807
2830
  this.analytics.numPcOnAnswerFailure++;
2808
2831
  });
@@ -2981,13 +3004,6 @@ class P2pRtcManager {
2981
3004
  const streamIds = this._getNonLocalCameraStreamIds();
2982
3005
  return streamIds.length === 0 ? null : this.localStreams[streamIds[0]];
2983
3006
  }
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
3007
  _createSession({ clientId, initialBandwidth, isOfferer, peerConnectionId, }) {
2992
3008
  if (!peerConnectionId) {
2993
3009
  throw new Error("peerConnectionId is missing");
@@ -3352,10 +3368,19 @@ class P2pRtcManager {
3352
3368
  this._setCodecPreferences(pc).then(() => pc
3353
3369
  .createOffer(constraints || this.offerOptions)
3354
3370
  .then((offer) => {
3371
+ if (!offer.sdp) {
3372
+ this.analytics.P2PCreateOfferNoSDP++;
3373
+ rtcStats.sendEvent("P2PCreateOfferNoSDP", {});
3374
+ throw new Error("SDP undefined while creating offer");
3375
+ }
3355
3376
  if (rtpAbsCaptureTimeOn)
3356
3377
  offer.sdp = addAbsCaptureTimeExtMap(offer.sdp);
3357
3378
  if (browserName$1 === "firefox") {
3358
- offer.sdp = setCodecPreferenceSDP(offer.sdp, redOn);
3379
+ offer.sdp = setCodecPreferenceSDP({
3380
+ sdp: offer.sdp,
3381
+ redOn,
3382
+ incrementAnalyticMetric: (metric) => this.analytics[metric]++,
3383
+ });
3359
3384
  }
3360
3385
  if (cleanSdpOn)
3361
3386
  offer.sdp = cleanSdp(offer.sdp);
@@ -3366,9 +3391,14 @@ class P2pRtcManager {
3366
3391
  throw e;
3367
3392
  })
3368
3393
  .then(() => {
3394
+ const message = {
3395
+ sdp: offer.sdp,
3396
+ sdpU: offer.sdp,
3397
+ type: offer.type,
3398
+ };
3369
3399
  this._emitServerEvent(RELAY_MESSAGES.SDP_OFFER, {
3370
3400
  receiverId: clientId,
3371
- message: this._transformOutgoingSdp(offer),
3401
+ message,
3372
3402
  });
3373
3403
  });
3374
3404
  })
@@ -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,36 @@ 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
+ sdpU: answer.sdp,
2356
+ type: answer.type,
2357
+ };
2358
+ return this.pc.setLocalDescription(answer);
2359
+ }
2346
2360
  })
2347
2361
  .then(() => {
2348
2362
  return setVideoBandwidthUsingSetParameters(this.pc, this.bandwidth);
@@ -2662,6 +2676,9 @@ class P2pRtcManager {
2662
2676
  P2PReplaceTrackSourceKindNotFound: 0,
2663
2677
  P2PRemoveStreamNoPC: 0,
2664
2678
  P2POnTrackNoStream: 0,
2679
+ P2PSetCodecPreferenceError: 0,
2680
+ P2PCreateOfferNoSDP: 0,
2681
+ P2PCreateAnswerNoSDP: 0,
2665
2682
  };
2666
2683
  }
2667
2684
  numberOfPeerconnections() {
@@ -2782,13 +2799,16 @@ class P2pRtcManager {
2782
2799
  logger$6.warn("No RTCPeerConnection on SDP_OFFER", data);
2783
2800
  return;
2784
2801
  }
2785
- const offer = this._transformIncomingSdp(data.message);
2802
+ const sdp = {
2803
+ sdp: data.message.sdp || data.message.sdpU,
2804
+ type: data.message.type,
2805
+ };
2786
2806
  (_b = (_a = session
2787
- .handleOffer(offer)
2807
+ .handleOffer(sdp)
2788
2808
  .then((answer) => {
2789
2809
  this._emitServerEvent(RELAY_MESSAGES.SDP_ANSWER, {
2790
2810
  receiverId: data.clientId,
2791
- message: this._transformOutgoingSdp(answer),
2811
+ message: answer,
2792
2812
  });
2793
2813
  })).catch) === null || _b === void 0 ? void 0 : _b.call(_a, (e) => {
2794
2814
  this.analytics.numPcOnOfferFailure++;
@@ -2801,8 +2821,11 @@ class P2pRtcManager {
2801
2821
  logger$6.warn("No RTCPeerConnection on SDP_ANSWER", data);
2802
2822
  return;
2803
2823
  }
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) => {
2824
+ const sdp = {
2825
+ sdp: data.message.sdp || data.message.sdpU,
2826
+ type: data.message.type,
2827
+ };
2828
+ (_b = (_a = session.handleAnswer(sdp)) === null || _a === void 0 ? void 0 : _a.catch) === null || _b === void 0 ? void 0 : _b.call(_a, (e) => {
2806
2829
  logger$6.warn("Could not set remote description from remote answer: ", e);
2807
2830
  this.analytics.numPcOnAnswerFailure++;
2808
2831
  });
@@ -2981,13 +3004,6 @@ class P2pRtcManager {
2981
3004
  const streamIds = this._getNonLocalCameraStreamIds();
2982
3005
  return streamIds.length === 0 ? null : this.localStreams[streamIds[0]];
2983
3006
  }
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
3007
  _createSession({ clientId, initialBandwidth, isOfferer, peerConnectionId, }) {
2992
3008
  if (!peerConnectionId) {
2993
3009
  throw new Error("peerConnectionId is missing");
@@ -3352,10 +3368,19 @@ class P2pRtcManager {
3352
3368
  this._setCodecPreferences(pc).then(() => pc
3353
3369
  .createOffer(constraints || this.offerOptions)
3354
3370
  .then((offer) => {
3371
+ if (!offer.sdp) {
3372
+ this.analytics.P2PCreateOfferNoSDP++;
3373
+ rtcStats.sendEvent("P2PCreateOfferNoSDP", {});
3374
+ throw new Error("SDP undefined while creating offer");
3375
+ }
3355
3376
  if (rtpAbsCaptureTimeOn)
3356
3377
  offer.sdp = addAbsCaptureTimeExtMap(offer.sdp);
3357
3378
  if (browserName$1 === "firefox") {
3358
- offer.sdp = setCodecPreferenceSDP(offer.sdp, redOn);
3379
+ offer.sdp = setCodecPreferenceSDP({
3380
+ sdp: offer.sdp,
3381
+ redOn,
3382
+ incrementAnalyticMetric: (metric) => this.analytics[metric]++,
3383
+ });
3359
3384
  }
3360
3385
  if (cleanSdpOn)
3361
3386
  offer.sdp = cleanSdp(offer.sdp);
@@ -3366,9 +3391,14 @@ class P2pRtcManager {
3366
3391
  throw e;
3367
3392
  })
3368
3393
  .then(() => {
3394
+ const message = {
3395
+ sdp: offer.sdp,
3396
+ sdpU: offer.sdp,
3397
+ type: offer.type,
3398
+ };
3369
3399
  this._emitServerEvent(RELAY_MESSAGES.SDP_OFFER, {
3370
3400
  receiverId: clientId,
3371
- message: this._transformOutgoingSdp(offer),
3401
+ message,
3372
3402
  });
3373
3403
  });
3374
3404
  })
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.6",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/whereby/sdk",
7
7
  "repository": {