@whereby.com/media 2.8.3 → 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.mjs CHANGED
@@ -1629,8 +1629,7 @@ class ServerSocket {
1629
1629
  if (this._serverSideDisconnectDurationLimitOn)
1630
1630
  this._keepAliveManager = new KeepAliveManager(this);
1631
1631
  this._socket.on("room_joined", (payload) => {
1632
- const { error } = payload;
1633
- if (!error) {
1632
+ if (!("error" in payload)) {
1634
1633
  this.joinRoomFinished = true;
1635
1634
  }
1636
1635
  });
@@ -1999,7 +1998,7 @@ const adapter$5 = (_a$5 = adapterRaw.default) !== null && _a$5 !== void 0 ? _a$5
1999
1998
  const logger$8 = new Logger();
2000
1999
  const browserName$2 = (_b$2 = adapter$5.browserDetails) === null || _b$2 === void 0 ? void 0 : _b$2.browser;
2001
2000
  const browserVersion$1 = adapter$5.browserDetails.version;
2002
- function setCodecPreferenceSDP(sdp, redOn) {
2001
+ function setCodecPreferenceSDP({ sdp, redOn, incrementAnalyticMetric }) {
2003
2002
  var _a, _b;
2004
2003
  try {
2005
2004
  const sdpObject = sdpTransform.parse(sdp);
@@ -2037,7 +2036,10 @@ function setCodecPreferenceSDP(sdp, redOn) {
2037
2036
  return newSdp;
2038
2037
  }
2039
2038
  catch (error) {
2039
+ incrementAnalyticMetric("P2PSetCodecPreferenceError");
2040
+ rtcStats.sendEvent("P2PSetCodecPreferenceError", { error });
2040
2041
  logger$8.error("setCodecPreferenceSDP error:", error);
2042
+ return sdp;
2041
2043
  }
2042
2044
  }
2043
2045
  function cleanSdp(sdp) {
@@ -2325,25 +2327,35 @@ class Session {
2325
2327
  this.earlyIceCandidates = [];
2326
2328
  });
2327
2329
  }
2328
- handleOffer(message) {
2330
+ handleOffer(offer) {
2329
2331
  if (!this.canModifyPeerConnection()) {
2330
2332
  return new Promise((resolve) => {
2331
- this.pending.push(() => this.handleOffer(message).then(resolve));
2333
+ this.pending.push(() => this.handleOffer(offer).then(resolve));
2332
2334
  });
2333
2335
  }
2334
2336
  this.isOperationPending = true;
2335
- let sdp = message.sdp;
2337
+ let sdp = offer.sdp;
2336
2338
  sdp = filterMidExtension(sdp);
2337
2339
  sdp = filterMsidSemantic(sdp);
2338
- const desc = { type: message.type, sdp };
2340
+ const desc = { type: offer.type, sdp };
2339
2341
  let answerToSignal;
2340
2342
  return this._setRemoteDescription(desc)
2341
2343
  .then(() => {
2342
2344
  return this.pc.createAnswer();
2343
2345
  })
2344
2346
  .then((answer) => {
2345
- answerToSignal = answer;
2346
- 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
+ }
2347
2359
  })
2348
2360
  .then(() => {
2349
2361
  return setVideoBandwidthUsingSetParameters(this.pc, this.bandwidth);
@@ -2598,8 +2610,8 @@ if (browserName$1 === "chrome") {
2598
2610
  });
2599
2611
  }
2600
2612
  class P2pRtcManager {
2601
- constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features, }) {
2602
- const { name, session, iceServers, turnServers, sfuServer, mediaserverConfigTtlSeconds } = room;
2613
+ constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features }) {
2614
+ const { name, session, iceServers, turnServers, mediaserverConfigTtlSeconds } = room;
2603
2615
  this._selfId = selfId;
2604
2616
  this._roomName = name;
2605
2617
  this._roomSessionId = session && session.id;
@@ -2629,7 +2641,6 @@ class P2pRtcManager {
2629
2641
  this.analytics.camTrackEndedCount++;
2630
2642
  };
2631
2643
  this._updateAndScheduleMediaServersRefresh({
2632
- sfuServer,
2633
2644
  iceServers: (iceServers === null || iceServers === void 0 ? void 0 : iceServers.iceServers) || [],
2634
2645
  turnServers: turnServers || [],
2635
2646
  mediaserverConfigTtlSeconds,
@@ -2664,13 +2675,16 @@ class P2pRtcManager {
2664
2675
  P2PReplaceTrackSourceKindNotFound: 0,
2665
2676
  P2PRemoveStreamNoPC: 0,
2666
2677
  P2POnTrackNoStream: 0,
2678
+ P2PSetCodecPreferenceError: 0,
2679
+ P2PCreateOfferNoSDP: 0,
2680
+ P2PCreateAnswerNoSDP: 0,
2667
2681
  };
2668
2682
  }
2669
2683
  numberOfPeerconnections() {
2670
2684
  return Object.keys(this.peerConnections).length;
2671
2685
  }
2672
2686
  isInitializedWith({ selfId, roomName, isSfu }) {
2673
- return this._selfId === selfId && this._roomName === roomName && isSfu === !!this._sfuServer;
2687
+ return this._selfId === selfId && this._roomName === roomName && !isSfu;
2674
2688
  }
2675
2689
  supportsScreenShareAudio() {
2676
2690
  return true;
@@ -2784,13 +2798,12 @@ class P2pRtcManager {
2784
2798
  logger$6.warn("No RTCPeerConnection on SDP_OFFER", data);
2785
2799
  return;
2786
2800
  }
2787
- const offer = this._transformIncomingSdp(data.message);
2788
2801
  (_b = (_a = session
2789
- .handleOffer(offer)
2802
+ .handleOffer(data.message)
2790
2803
  .then((answer) => {
2791
2804
  this._emitServerEvent(RELAY_MESSAGES.SDP_ANSWER, {
2792
2805
  receiverId: data.clientId,
2793
- message: this._transformOutgoingSdp(answer),
2806
+ message: answer,
2794
2807
  });
2795
2808
  })).catch) === null || _b === void 0 ? void 0 : _b.call(_a, (e) => {
2796
2809
  this.analytics.numPcOnOfferFailure++;
@@ -2803,15 +2816,13 @@ class P2pRtcManager {
2803
2816
  logger$6.warn("No RTCPeerConnection on SDP_ANSWER", data);
2804
2817
  return;
2805
2818
  }
2806
- const answer = this._transformIncomingSdp(data.message);
2807
- (_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) => {
2808
2820
  logger$6.warn("Could not set remote description from remote answer: ", e);
2809
2821
  this.analytics.numPcOnAnswerFailure++;
2810
2822
  });
2811
2823
  }),
2812
2824
  this._serverSocket.on(PROTOCOL_RESPONSES.ROOM_JOINED, (payload) => {
2813
- const { error } = payload;
2814
- if (error || !this._wasScreenSharing) {
2825
+ if ("error" in payload || !this._wasScreenSharing) {
2815
2826
  return;
2816
2827
  }
2817
2828
  const screenShareStreamId = Object.keys(this.localStreams).find((id) => id !== CAMERA_STREAM_ID);
@@ -2886,9 +2897,6 @@ class P2pRtcManager {
2886
2897
  if (previousStatus === newStatus) {
2887
2898
  return;
2888
2899
  }
2889
- if (session.peerConnectionId === this._selfId) {
2890
- return;
2891
- }
2892
2900
  if (previousStatus === TYPES.CONNECTION_DISCONNECTED &&
2893
2901
  newStatus === TYPES.CONNECTING) {
2894
2902
  return;
@@ -2987,13 +2995,6 @@ class P2pRtcManager {
2987
2995
  const streamIds = this._getNonLocalCameraStreamIds();
2988
2996
  return streamIds.length === 0 ? null : this.localStreams[streamIds[0]];
2989
2997
  }
2990
- _transformIncomingSdp(original) {
2991
- const sdp = original.sdp ? original.sdp : original.sdpU;
2992
- return { type: original.type, sdp };
2993
- }
2994
- _transformOutgoingSdp(original) {
2995
- return { type: original.type, sdpU: original.sdp, sdp: original.sdp };
2996
- }
2997
2998
  _createSession({ clientId, initialBandwidth, isOfferer, peerConnectionId, }) {
2998
2999
  if (!peerConnectionId) {
2999
3000
  throw new Error("peerConnectionId is missing");
@@ -3228,10 +3229,9 @@ class P2pRtcManager {
3228
3229
  delete this.localStreams[streamId];
3229
3230
  this._deleteEnabledLocalStreamId(streamId);
3230
3231
  }
3231
- _updateAndScheduleMediaServersRefresh({ iceServers, turnServers, sfuServer, mediaserverConfigTtlSeconds }) {
3232
+ _updateAndScheduleMediaServersRefresh({ iceServers, turnServers, mediaserverConfigTtlSeconds, }) {
3232
3233
  this._iceServers = iceServers;
3233
3234
  this._turnServers = turnServers;
3234
- this._sfuServer = sfuServer;
3235
3235
  this._mediaserverConfigTtlSeconds = mediaserverConfigTtlSeconds;
3236
3236
  this._clearMediaServersRefresh();
3237
3237
  if (!mediaserverConfigTtlSeconds) {
@@ -3359,10 +3359,19 @@ class P2pRtcManager {
3359
3359
  this._setCodecPreferences(pc).then(() => pc
3360
3360
  .createOffer(constraints || this.offerOptions)
3361
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
+ }
3362
3367
  if (rtpAbsCaptureTimeOn)
3363
3368
  offer.sdp = addAbsCaptureTimeExtMap(offer.sdp);
3364
3369
  if (browserName$1 === "firefox") {
3365
- offer.sdp = setCodecPreferenceSDP(offer.sdp, redOn);
3370
+ offer.sdp = setCodecPreferenceSDP({
3371
+ sdp: offer.sdp,
3372
+ redOn,
3373
+ incrementAnalyticMetric: (metric) => this.analytics[metric]++,
3374
+ });
3366
3375
  }
3367
3376
  if (cleanSdpOn)
3368
3377
  offer.sdp = cleanSdp(offer.sdp);
@@ -3375,7 +3384,7 @@ class P2pRtcManager {
3375
3384
  .then(() => {
3376
3385
  this._emitServerEvent(RELAY_MESSAGES.SDP_OFFER, {
3377
3386
  receiverId: clientId,
3378
- message: this._transformOutgoingSdp(offer),
3387
+ message: offer,
3379
3388
  });
3380
3389
  });
3381
3390
  })
@@ -4500,8 +4509,8 @@ const OUTBOUND_SCREEN_OUTBOUND_STREAM_ID = v4$1();
4500
4509
  if (browserName === "chrome")
4501
4510
  window.document.addEventListener("beforeunload", () => (unloading = true));
4502
4511
  class VegaRtcManager {
4503
- constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features, eventClaim, }) {
4504
- const { session, iceServers, turnServers, sfuServer, sfuServers, mediaserverConfigTtlSeconds } = room;
4512
+ constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features, eventClaim }) {
4513
+ const { session, iceServers, turnServers, sfuServer, mediaserverConfigTtlSeconds } = room;
4505
4514
  this._selfId = selfId;
4506
4515
  this._room = room;
4507
4516
  this._roomSessionId = session === null || session === void 0 ? void 0 : session.id;
@@ -4555,7 +4564,6 @@ class VegaRtcManager {
4555
4564
  };
4556
4565
  this._updateAndScheduleMediaServersRefresh({
4557
4566
  sfuServer,
4558
- sfuServers,
4559
4567
  iceServers: (iceServers === null || iceServers === void 0 ? void 0 : iceServers.iceServers) || [],
4560
4568
  turnServers: turnServers || [],
4561
4569
  mediaserverConfigTtlSeconds,
@@ -4582,13 +4590,14 @@ class VegaRtcManager {
4582
4590
  camTrackEndedCount: 0,
4583
4591
  };
4584
4592
  }
4585
- _updateAndScheduleMediaServersRefresh({ iceServers, turnServers, sfuServer, sfuServers, mediaserverConfigTtlSeconds, }) {
4586
- var _a, _b, _c;
4593
+ _updateAndScheduleMediaServersRefresh({ iceServers, turnServers, sfuServer, mediaserverConfigTtlSeconds, }) {
4594
+ var _a, _b, _c, _d;
4587
4595
  this._iceServers = iceServers;
4588
4596
  this._turnServers = turnServers;
4589
- this._sfuServer = sfuServer;
4590
- this._sfuServers = sfuServers;
4591
- if (!sfuServers && (sfuServer === null || sfuServer === void 0 ? void 0 : sfuServer.fallbackServers)) {
4597
+ if (sfuServer) {
4598
+ this._sfuServer = sfuServer;
4599
+ }
4600
+ if (sfuServer === null || sfuServer === void 0 ? void 0 : sfuServer.fallbackServers) {
4592
4601
  this._sfuServers = sfuServer.fallbackServers.map((entry) => ({
4593
4602
  host: entry.host || entry.fqdn,
4594
4603
  dc: entry.dc,
@@ -4598,14 +4607,14 @@ class VegaRtcManager {
4598
4607
  (_a = this._vegaConnectionManager) === null || _a === void 0 ? void 0 : _a.updateHostList(this._features.sfuServersOverride ||
4599
4608
  this._sfuServers ||
4600
4609
  this._features.sfuServerOverrideHost ||
4601
- sfuServer.url);
4610
+ ((_b = this._sfuServer) === null || _b === void 0 ? void 0 : _b.url));
4602
4611
  const iceServersList = {
4603
4612
  iceServers: this._features.turnServersOn ? this._turnServers : this._iceServers,
4604
4613
  };
4605
4614
  iceServersList.iceServers = turnServerOverride(iceServersList.iceServers, this._features.turnServerOverrideHost);
4606
4615
  if (browserName !== "firefox") {
4607
- (_b = this._sendTransport) === null || _b === void 0 ? void 0 : _b.updateIceServers(iceServersList);
4608
- (_c = this._receiveTransport) === null || _c === void 0 ? void 0 : _c.updateIceServers(iceServersList);
4616
+ (_c = this._sendTransport) === null || _c === void 0 ? void 0 : _c.updateIceServers(iceServersList);
4617
+ (_d = this._receiveTransport) === null || _d === void 0 ? void 0 : _d.updateIceServers(iceServersList);
4609
4618
  }
4610
4619
  this._clearMediaServersRefresh();
4611
4620
  if (!mediaserverConfigTtlSeconds) {
@@ -4659,6 +4668,7 @@ class VegaRtcManager {
4659
4668
  });
4660
4669
  }
4661
4670
  _connect() {
4671
+ var _a;
4662
4672
  if (this._isConnectingOrConnected)
4663
4673
  return;
4664
4674
  if (!this._serverSocket.isConnected()) {
@@ -4674,7 +4684,7 @@ class VegaRtcManager {
4674
4684
  const hostList = this._features.sfuServersOverride ||
4675
4685
  this._sfuServers ||
4676
4686
  this._features.sfuServerOverrideHost ||
4677
- this._sfuServer.url;
4687
+ ((_a = this._sfuServer) === null || _a === void 0 ? void 0 : _a.url);
4678
4688
  this._vegaConnectionManager = createVegaConnectionManager({
4679
4689
  initialHostList: hostList,
4680
4690
  getUrlForHost: (host) => {
@@ -5984,9 +5994,10 @@ class RtcManagerDispatcher {
5984
5994
  constructor({ emitter, serverSocket, webrtcProvider, features, }) {
5985
5995
  this.emitter = emitter;
5986
5996
  this.currentManager = null;
5987
- serverSocket.on(PROTOCOL_RESPONSES.ROOM_JOINED, ({ room, selfId, error, eventClaim }) => {
5988
- if (error)
5997
+ serverSocket.on(PROTOCOL_RESPONSES.ROOM_JOINED, (payload) => {
5998
+ if ("error" in payload)
5989
5999
  return;
6000
+ const { room, selfId, eventClaim } = payload;
5990
6001
  const config = {
5991
6002
  selfId,
5992
6003
  room,
@@ -1629,8 +1629,7 @@ class ServerSocket {
1629
1629
  if (this._serverSideDisconnectDurationLimitOn)
1630
1630
  this._keepAliveManager = new KeepAliveManager(this);
1631
1631
  this._socket.on("room_joined", (payload) => {
1632
- const { error } = payload;
1633
- if (!error) {
1632
+ if (!("error" in payload)) {
1634
1633
  this.joinRoomFinished = true;
1635
1634
  }
1636
1635
  });
@@ -1999,7 +1998,7 @@ const adapter$5 = (_a$5 = adapterRaw.default) !== null && _a$5 !== void 0 ? _a$5
1999
1998
  const logger$8 = new Logger();
2000
1999
  const browserName$2 = (_b$2 = adapter$5.browserDetails) === null || _b$2 === void 0 ? void 0 : _b$2.browser;
2001
2000
  const browserVersion$1 = adapter$5.browserDetails.version;
2002
- function setCodecPreferenceSDP(sdp, redOn) {
2001
+ function setCodecPreferenceSDP({ sdp, redOn, incrementAnalyticMetric }) {
2003
2002
  var _a, _b;
2004
2003
  try {
2005
2004
  const sdpObject = sdpTransform.parse(sdp);
@@ -2037,7 +2036,10 @@ function setCodecPreferenceSDP(sdp, redOn) {
2037
2036
  return newSdp;
2038
2037
  }
2039
2038
  catch (error) {
2039
+ incrementAnalyticMetric("P2PSetCodecPreferenceError");
2040
+ rtcStats.sendEvent("P2PSetCodecPreferenceError", { error });
2040
2041
  logger$8.error("setCodecPreferenceSDP error:", error);
2042
+ return sdp;
2041
2043
  }
2042
2044
  }
2043
2045
  function cleanSdp(sdp) {
@@ -2325,25 +2327,35 @@ class Session {
2325
2327
  this.earlyIceCandidates = [];
2326
2328
  });
2327
2329
  }
2328
- handleOffer(message) {
2330
+ handleOffer(offer) {
2329
2331
  if (!this.canModifyPeerConnection()) {
2330
2332
  return new Promise((resolve) => {
2331
- this.pending.push(() => this.handleOffer(message).then(resolve));
2333
+ this.pending.push(() => this.handleOffer(offer).then(resolve));
2332
2334
  });
2333
2335
  }
2334
2336
  this.isOperationPending = true;
2335
- let sdp = message.sdp;
2337
+ let sdp = offer.sdp;
2336
2338
  sdp = filterMidExtension(sdp);
2337
2339
  sdp = filterMsidSemantic(sdp);
2338
- const desc = { type: message.type, sdp };
2340
+ const desc = { type: offer.type, sdp };
2339
2341
  let answerToSignal;
2340
2342
  return this._setRemoteDescription(desc)
2341
2343
  .then(() => {
2342
2344
  return this.pc.createAnswer();
2343
2345
  })
2344
2346
  .then((answer) => {
2345
- answerToSignal = answer;
2346
- 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
+ }
2347
2359
  })
2348
2360
  .then(() => {
2349
2361
  return setVideoBandwidthUsingSetParameters(this.pc, this.bandwidth);
@@ -2598,8 +2610,8 @@ if (browserName$1 === "chrome") {
2598
2610
  });
2599
2611
  }
2600
2612
  class P2pRtcManager {
2601
- constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features, }) {
2602
- const { name, session, iceServers, turnServers, sfuServer, mediaserverConfigTtlSeconds } = room;
2613
+ constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features }) {
2614
+ const { name, session, iceServers, turnServers, mediaserverConfigTtlSeconds } = room;
2603
2615
  this._selfId = selfId;
2604
2616
  this._roomName = name;
2605
2617
  this._roomSessionId = session && session.id;
@@ -2629,7 +2641,6 @@ class P2pRtcManager {
2629
2641
  this.analytics.camTrackEndedCount++;
2630
2642
  };
2631
2643
  this._updateAndScheduleMediaServersRefresh({
2632
- sfuServer,
2633
2644
  iceServers: (iceServers === null || iceServers === void 0 ? void 0 : iceServers.iceServers) || [],
2634
2645
  turnServers: turnServers || [],
2635
2646
  mediaserverConfigTtlSeconds,
@@ -2664,13 +2675,16 @@ class P2pRtcManager {
2664
2675
  P2PReplaceTrackSourceKindNotFound: 0,
2665
2676
  P2PRemoveStreamNoPC: 0,
2666
2677
  P2POnTrackNoStream: 0,
2678
+ P2PSetCodecPreferenceError: 0,
2679
+ P2PCreateOfferNoSDP: 0,
2680
+ P2PCreateAnswerNoSDP: 0,
2667
2681
  };
2668
2682
  }
2669
2683
  numberOfPeerconnections() {
2670
2684
  return Object.keys(this.peerConnections).length;
2671
2685
  }
2672
2686
  isInitializedWith({ selfId, roomName, isSfu }) {
2673
- return this._selfId === selfId && this._roomName === roomName && isSfu === !!this._sfuServer;
2687
+ return this._selfId === selfId && this._roomName === roomName && !isSfu;
2674
2688
  }
2675
2689
  supportsScreenShareAudio() {
2676
2690
  return true;
@@ -2784,13 +2798,12 @@ class P2pRtcManager {
2784
2798
  logger$6.warn("No RTCPeerConnection on SDP_OFFER", data);
2785
2799
  return;
2786
2800
  }
2787
- const offer = this._transformIncomingSdp(data.message);
2788
2801
  (_b = (_a = session
2789
- .handleOffer(offer)
2802
+ .handleOffer(data.message)
2790
2803
  .then((answer) => {
2791
2804
  this._emitServerEvent(RELAY_MESSAGES.SDP_ANSWER, {
2792
2805
  receiverId: data.clientId,
2793
- message: this._transformOutgoingSdp(answer),
2806
+ message: answer,
2794
2807
  });
2795
2808
  })).catch) === null || _b === void 0 ? void 0 : _b.call(_a, (e) => {
2796
2809
  this.analytics.numPcOnOfferFailure++;
@@ -2803,15 +2816,13 @@ class P2pRtcManager {
2803
2816
  logger$6.warn("No RTCPeerConnection on SDP_ANSWER", data);
2804
2817
  return;
2805
2818
  }
2806
- const answer = this._transformIncomingSdp(data.message);
2807
- (_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) => {
2808
2820
  logger$6.warn("Could not set remote description from remote answer: ", e);
2809
2821
  this.analytics.numPcOnAnswerFailure++;
2810
2822
  });
2811
2823
  }),
2812
2824
  this._serverSocket.on(PROTOCOL_RESPONSES.ROOM_JOINED, (payload) => {
2813
- const { error } = payload;
2814
- if (error || !this._wasScreenSharing) {
2825
+ if ("error" in payload || !this._wasScreenSharing) {
2815
2826
  return;
2816
2827
  }
2817
2828
  const screenShareStreamId = Object.keys(this.localStreams).find((id) => id !== CAMERA_STREAM_ID);
@@ -2886,9 +2897,6 @@ class P2pRtcManager {
2886
2897
  if (previousStatus === newStatus) {
2887
2898
  return;
2888
2899
  }
2889
- if (session.peerConnectionId === this._selfId) {
2890
- return;
2891
- }
2892
2900
  if (previousStatus === TYPES.CONNECTION_DISCONNECTED &&
2893
2901
  newStatus === TYPES.CONNECTING) {
2894
2902
  return;
@@ -2987,13 +2995,6 @@ class P2pRtcManager {
2987
2995
  const streamIds = this._getNonLocalCameraStreamIds();
2988
2996
  return streamIds.length === 0 ? null : this.localStreams[streamIds[0]];
2989
2997
  }
2990
- _transformIncomingSdp(original) {
2991
- const sdp = original.sdp ? original.sdp : original.sdpU;
2992
- return { type: original.type, sdp };
2993
- }
2994
- _transformOutgoingSdp(original) {
2995
- return { type: original.type, sdpU: original.sdp, sdp: original.sdp };
2996
- }
2997
2998
  _createSession({ clientId, initialBandwidth, isOfferer, peerConnectionId, }) {
2998
2999
  if (!peerConnectionId) {
2999
3000
  throw new Error("peerConnectionId is missing");
@@ -3228,10 +3229,9 @@ class P2pRtcManager {
3228
3229
  delete this.localStreams[streamId];
3229
3230
  this._deleteEnabledLocalStreamId(streamId);
3230
3231
  }
3231
- _updateAndScheduleMediaServersRefresh({ iceServers, turnServers, sfuServer, mediaserverConfigTtlSeconds }) {
3232
+ _updateAndScheduleMediaServersRefresh({ iceServers, turnServers, mediaserverConfigTtlSeconds, }) {
3232
3233
  this._iceServers = iceServers;
3233
3234
  this._turnServers = turnServers;
3234
- this._sfuServer = sfuServer;
3235
3235
  this._mediaserverConfigTtlSeconds = mediaserverConfigTtlSeconds;
3236
3236
  this._clearMediaServersRefresh();
3237
3237
  if (!mediaserverConfigTtlSeconds) {
@@ -3359,10 +3359,19 @@ class P2pRtcManager {
3359
3359
  this._setCodecPreferences(pc).then(() => pc
3360
3360
  .createOffer(constraints || this.offerOptions)
3361
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
+ }
3362
3367
  if (rtpAbsCaptureTimeOn)
3363
3368
  offer.sdp = addAbsCaptureTimeExtMap(offer.sdp);
3364
3369
  if (browserName$1 === "firefox") {
3365
- offer.sdp = setCodecPreferenceSDP(offer.sdp, redOn);
3370
+ offer.sdp = setCodecPreferenceSDP({
3371
+ sdp: offer.sdp,
3372
+ redOn,
3373
+ incrementAnalyticMetric: (metric) => this.analytics[metric]++,
3374
+ });
3366
3375
  }
3367
3376
  if (cleanSdpOn)
3368
3377
  offer.sdp = cleanSdp(offer.sdp);
@@ -3375,7 +3384,7 @@ class P2pRtcManager {
3375
3384
  .then(() => {
3376
3385
  this._emitServerEvent(RELAY_MESSAGES.SDP_OFFER, {
3377
3386
  receiverId: clientId,
3378
- message: this._transformOutgoingSdp(offer),
3387
+ message: offer,
3379
3388
  });
3380
3389
  });
3381
3390
  })
@@ -4500,8 +4509,8 @@ const OUTBOUND_SCREEN_OUTBOUND_STREAM_ID = v4$1();
4500
4509
  if (browserName === "chrome")
4501
4510
  window.document.addEventListener("beforeunload", () => (unloading = true));
4502
4511
  class VegaRtcManager {
4503
- constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features, eventClaim, }) {
4504
- const { session, iceServers, turnServers, sfuServer, sfuServers, mediaserverConfigTtlSeconds } = room;
4512
+ constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features, eventClaim }) {
4513
+ const { session, iceServers, turnServers, sfuServer, mediaserverConfigTtlSeconds } = room;
4505
4514
  this._selfId = selfId;
4506
4515
  this._room = room;
4507
4516
  this._roomSessionId = session === null || session === void 0 ? void 0 : session.id;
@@ -4555,7 +4564,6 @@ class VegaRtcManager {
4555
4564
  };
4556
4565
  this._updateAndScheduleMediaServersRefresh({
4557
4566
  sfuServer,
4558
- sfuServers,
4559
4567
  iceServers: (iceServers === null || iceServers === void 0 ? void 0 : iceServers.iceServers) || [],
4560
4568
  turnServers: turnServers || [],
4561
4569
  mediaserverConfigTtlSeconds,
@@ -4582,13 +4590,14 @@ class VegaRtcManager {
4582
4590
  camTrackEndedCount: 0,
4583
4591
  };
4584
4592
  }
4585
- _updateAndScheduleMediaServersRefresh({ iceServers, turnServers, sfuServer, sfuServers, mediaserverConfigTtlSeconds, }) {
4586
- var _a, _b, _c;
4593
+ _updateAndScheduleMediaServersRefresh({ iceServers, turnServers, sfuServer, mediaserverConfigTtlSeconds, }) {
4594
+ var _a, _b, _c, _d;
4587
4595
  this._iceServers = iceServers;
4588
4596
  this._turnServers = turnServers;
4589
- this._sfuServer = sfuServer;
4590
- this._sfuServers = sfuServers;
4591
- if (!sfuServers && (sfuServer === null || sfuServer === void 0 ? void 0 : sfuServer.fallbackServers)) {
4597
+ if (sfuServer) {
4598
+ this._sfuServer = sfuServer;
4599
+ }
4600
+ if (sfuServer === null || sfuServer === void 0 ? void 0 : sfuServer.fallbackServers) {
4592
4601
  this._sfuServers = sfuServer.fallbackServers.map((entry) => ({
4593
4602
  host: entry.host || entry.fqdn,
4594
4603
  dc: entry.dc,
@@ -4598,14 +4607,14 @@ class VegaRtcManager {
4598
4607
  (_a = this._vegaConnectionManager) === null || _a === void 0 ? void 0 : _a.updateHostList(this._features.sfuServersOverride ||
4599
4608
  this._sfuServers ||
4600
4609
  this._features.sfuServerOverrideHost ||
4601
- sfuServer.url);
4610
+ ((_b = this._sfuServer) === null || _b === void 0 ? void 0 : _b.url));
4602
4611
  const iceServersList = {
4603
4612
  iceServers: this._features.turnServersOn ? this._turnServers : this._iceServers,
4604
4613
  };
4605
4614
  iceServersList.iceServers = turnServerOverride(iceServersList.iceServers, this._features.turnServerOverrideHost);
4606
4615
  if (browserName !== "firefox") {
4607
- (_b = this._sendTransport) === null || _b === void 0 ? void 0 : _b.updateIceServers(iceServersList);
4608
- (_c = this._receiveTransport) === null || _c === void 0 ? void 0 : _c.updateIceServers(iceServersList);
4616
+ (_c = this._sendTransport) === null || _c === void 0 ? void 0 : _c.updateIceServers(iceServersList);
4617
+ (_d = this._receiveTransport) === null || _d === void 0 ? void 0 : _d.updateIceServers(iceServersList);
4609
4618
  }
4610
4619
  this._clearMediaServersRefresh();
4611
4620
  if (!mediaserverConfigTtlSeconds) {
@@ -4659,6 +4668,7 @@ class VegaRtcManager {
4659
4668
  });
4660
4669
  }
4661
4670
  _connect() {
4671
+ var _a;
4662
4672
  if (this._isConnectingOrConnected)
4663
4673
  return;
4664
4674
  if (!this._serverSocket.isConnected()) {
@@ -4674,7 +4684,7 @@ class VegaRtcManager {
4674
4684
  const hostList = this._features.sfuServersOverride ||
4675
4685
  this._sfuServers ||
4676
4686
  this._features.sfuServerOverrideHost ||
4677
- this._sfuServer.url;
4687
+ ((_a = this._sfuServer) === null || _a === void 0 ? void 0 : _a.url);
4678
4688
  this._vegaConnectionManager = createVegaConnectionManager({
4679
4689
  initialHostList: hostList,
4680
4690
  getUrlForHost: (host) => {
@@ -5984,9 +5994,10 @@ class RtcManagerDispatcher {
5984
5994
  constructor({ emitter, serverSocket, webrtcProvider, features, }) {
5985
5995
  this.emitter = emitter;
5986
5996
  this.currentManager = null;
5987
- serverSocket.on(PROTOCOL_RESPONSES.ROOM_JOINED, ({ room, selfId, error, eventClaim }) => {
5988
- if (error)
5997
+ serverSocket.on(PROTOCOL_RESPONSES.ROOM_JOINED, (payload) => {
5998
+ if ("error" in payload)
5989
5999
  return;
6000
+ const { room, selfId, eventClaim } = payload;
5990
6001
  const config = {
5991
6002
  selfId,
5992
6003
  room,
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.3",
4
+ "version": "2.8.5",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/whereby/sdk",
7
7
  "repository": {