@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.cjs CHANGED
@@ -1650,8 +1650,7 @@ class ServerSocket {
1650
1650
  if (this._serverSideDisconnectDurationLimitOn)
1651
1651
  this._keepAliveManager = new KeepAliveManager(this);
1652
1652
  this._socket.on("room_joined", (payload) => {
1653
- const { error } = payload;
1654
- if (!error) {
1653
+ if (!("error" in payload)) {
1655
1654
  this.joinRoomFinished = true;
1656
1655
  }
1657
1656
  });
@@ -2020,7 +2019,7 @@ const adapter$5 = (_a$5 = adapterRaw.default) !== null && _a$5 !== void 0 ? _a$5
2020
2019
  const logger$8 = new Logger();
2021
2020
  const browserName$2 = (_b$2 = adapter$5.browserDetails) === null || _b$2 === void 0 ? void 0 : _b$2.browser;
2022
2021
  const browserVersion$1 = adapter$5.browserDetails.version;
2023
- function setCodecPreferenceSDP(sdp, redOn) {
2022
+ function setCodecPreferenceSDP({ sdp, redOn, incrementAnalyticMetric }) {
2024
2023
  var _a, _b;
2025
2024
  try {
2026
2025
  const sdpObject = sdpTransform__namespace.parse(sdp);
@@ -2058,7 +2057,10 @@ function setCodecPreferenceSDP(sdp, redOn) {
2058
2057
  return newSdp;
2059
2058
  }
2060
2059
  catch (error) {
2060
+ incrementAnalyticMetric("P2PSetCodecPreferenceError");
2061
+ rtcStats.sendEvent("P2PSetCodecPreferenceError", { error });
2061
2062
  logger$8.error("setCodecPreferenceSDP error:", error);
2063
+ return sdp;
2062
2064
  }
2063
2065
  }
2064
2066
  function cleanSdp(sdp) {
@@ -2346,25 +2348,35 @@ class Session {
2346
2348
  this.earlyIceCandidates = [];
2347
2349
  });
2348
2350
  }
2349
- handleOffer(message) {
2351
+ handleOffer(offer) {
2350
2352
  if (!this.canModifyPeerConnection()) {
2351
2353
  return new Promise((resolve) => {
2352
- this.pending.push(() => this.handleOffer(message).then(resolve));
2354
+ this.pending.push(() => this.handleOffer(offer).then(resolve));
2353
2355
  });
2354
2356
  }
2355
2357
  this.isOperationPending = true;
2356
- let sdp = message.sdp;
2358
+ let sdp = offer.sdp;
2357
2359
  sdp = filterMidExtension(sdp);
2358
2360
  sdp = filterMsidSemantic(sdp);
2359
- const desc = { type: message.type, sdp };
2361
+ const desc = { type: offer.type, sdp };
2360
2362
  let answerToSignal;
2361
2363
  return this._setRemoteDescription(desc)
2362
2364
  .then(() => {
2363
2365
  return this.pc.createAnswer();
2364
2366
  })
2365
2367
  .then((answer) => {
2366
- answerToSignal = answer;
2367
- 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
+ }
2368
2380
  })
2369
2381
  .then(() => {
2370
2382
  return setVideoBandwidthUsingSetParameters(this.pc, this.bandwidth);
@@ -2619,8 +2631,8 @@ if (browserName$1 === "chrome") {
2619
2631
  });
2620
2632
  }
2621
2633
  class P2pRtcManager {
2622
- constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features, }) {
2623
- const { name, session, iceServers, turnServers, sfuServer, mediaserverConfigTtlSeconds } = room;
2634
+ constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features }) {
2635
+ const { name, session, iceServers, turnServers, mediaserverConfigTtlSeconds } = room;
2624
2636
  this._selfId = selfId;
2625
2637
  this._roomName = name;
2626
2638
  this._roomSessionId = session && session.id;
@@ -2650,7 +2662,6 @@ class P2pRtcManager {
2650
2662
  this.analytics.camTrackEndedCount++;
2651
2663
  };
2652
2664
  this._updateAndScheduleMediaServersRefresh({
2653
- sfuServer,
2654
2665
  iceServers: (iceServers === null || iceServers === void 0 ? void 0 : iceServers.iceServers) || [],
2655
2666
  turnServers: turnServers || [],
2656
2667
  mediaserverConfigTtlSeconds,
@@ -2685,13 +2696,16 @@ class P2pRtcManager {
2685
2696
  P2PReplaceTrackSourceKindNotFound: 0,
2686
2697
  P2PRemoveStreamNoPC: 0,
2687
2698
  P2POnTrackNoStream: 0,
2699
+ P2PSetCodecPreferenceError: 0,
2700
+ P2PCreateOfferNoSDP: 0,
2701
+ P2PCreateAnswerNoSDP: 0,
2688
2702
  };
2689
2703
  }
2690
2704
  numberOfPeerconnections() {
2691
2705
  return Object.keys(this.peerConnections).length;
2692
2706
  }
2693
2707
  isInitializedWith({ selfId, roomName, isSfu }) {
2694
- return this._selfId === selfId && this._roomName === roomName && isSfu === !!this._sfuServer;
2708
+ return this._selfId === selfId && this._roomName === roomName && !isSfu;
2695
2709
  }
2696
2710
  supportsScreenShareAudio() {
2697
2711
  return true;
@@ -2805,13 +2819,12 @@ class P2pRtcManager {
2805
2819
  logger$6.warn("No RTCPeerConnection on SDP_OFFER", data);
2806
2820
  return;
2807
2821
  }
2808
- const offer = this._transformIncomingSdp(data.message);
2809
2822
  (_b = (_a = session
2810
- .handleOffer(offer)
2823
+ .handleOffer(data.message)
2811
2824
  .then((answer) => {
2812
2825
  this._emitServerEvent(RELAY_MESSAGES.SDP_ANSWER, {
2813
2826
  receiverId: data.clientId,
2814
- message: this._transformOutgoingSdp(answer),
2827
+ message: answer,
2815
2828
  });
2816
2829
  })).catch) === null || _b === void 0 ? void 0 : _b.call(_a, (e) => {
2817
2830
  this.analytics.numPcOnOfferFailure++;
@@ -2824,15 +2837,13 @@ class P2pRtcManager {
2824
2837
  logger$6.warn("No RTCPeerConnection on SDP_ANSWER", data);
2825
2838
  return;
2826
2839
  }
2827
- const answer = this._transformIncomingSdp(data.message);
2828
- (_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) => {
2829
2841
  logger$6.warn("Could not set remote description from remote answer: ", e);
2830
2842
  this.analytics.numPcOnAnswerFailure++;
2831
2843
  });
2832
2844
  }),
2833
2845
  this._serverSocket.on(PROTOCOL_RESPONSES.ROOM_JOINED, (payload) => {
2834
- const { error } = payload;
2835
- if (error || !this._wasScreenSharing) {
2846
+ if ("error" in payload || !this._wasScreenSharing) {
2836
2847
  return;
2837
2848
  }
2838
2849
  const screenShareStreamId = Object.keys(this.localStreams).find((id) => id !== CAMERA_STREAM_ID);
@@ -2907,9 +2918,6 @@ class P2pRtcManager {
2907
2918
  if (previousStatus === newStatus) {
2908
2919
  return;
2909
2920
  }
2910
- if (session.peerConnectionId === this._selfId) {
2911
- return;
2912
- }
2913
2921
  if (previousStatus === TYPES.CONNECTION_DISCONNECTED &&
2914
2922
  newStatus === TYPES.CONNECTING) {
2915
2923
  return;
@@ -3008,13 +3016,6 @@ class P2pRtcManager {
3008
3016
  const streamIds = this._getNonLocalCameraStreamIds();
3009
3017
  return streamIds.length === 0 ? null : this.localStreams[streamIds[0]];
3010
3018
  }
3011
- _transformIncomingSdp(original) {
3012
- const sdp = original.sdp ? original.sdp : original.sdpU;
3013
- return { type: original.type, sdp };
3014
- }
3015
- _transformOutgoingSdp(original) {
3016
- return { type: original.type, sdpU: original.sdp, sdp: original.sdp };
3017
- }
3018
3019
  _createSession({ clientId, initialBandwidth, isOfferer, peerConnectionId, }) {
3019
3020
  if (!peerConnectionId) {
3020
3021
  throw new Error("peerConnectionId is missing");
@@ -3249,10 +3250,9 @@ class P2pRtcManager {
3249
3250
  delete this.localStreams[streamId];
3250
3251
  this._deleteEnabledLocalStreamId(streamId);
3251
3252
  }
3252
- _updateAndScheduleMediaServersRefresh({ iceServers, turnServers, sfuServer, mediaserverConfigTtlSeconds }) {
3253
+ _updateAndScheduleMediaServersRefresh({ iceServers, turnServers, mediaserverConfigTtlSeconds, }) {
3253
3254
  this._iceServers = iceServers;
3254
3255
  this._turnServers = turnServers;
3255
- this._sfuServer = sfuServer;
3256
3256
  this._mediaserverConfigTtlSeconds = mediaserverConfigTtlSeconds;
3257
3257
  this._clearMediaServersRefresh();
3258
3258
  if (!mediaserverConfigTtlSeconds) {
@@ -3380,10 +3380,19 @@ class P2pRtcManager {
3380
3380
  this._setCodecPreferences(pc).then(() => pc
3381
3381
  .createOffer(constraints || this.offerOptions)
3382
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
+ }
3383
3388
  if (rtpAbsCaptureTimeOn)
3384
3389
  offer.sdp = addAbsCaptureTimeExtMap(offer.sdp);
3385
3390
  if (browserName$1 === "firefox") {
3386
- offer.sdp = setCodecPreferenceSDP(offer.sdp, redOn);
3391
+ offer.sdp = setCodecPreferenceSDP({
3392
+ sdp: offer.sdp,
3393
+ redOn,
3394
+ incrementAnalyticMetric: (metric) => this.analytics[metric]++,
3395
+ });
3387
3396
  }
3388
3397
  if (cleanSdpOn)
3389
3398
  offer.sdp = cleanSdp(offer.sdp);
@@ -3396,7 +3405,7 @@ class P2pRtcManager {
3396
3405
  .then(() => {
3397
3406
  this._emitServerEvent(RELAY_MESSAGES.SDP_OFFER, {
3398
3407
  receiverId: clientId,
3399
- message: this._transformOutgoingSdp(offer),
3408
+ message: offer,
3400
3409
  });
3401
3410
  });
3402
3411
  })
@@ -4521,8 +4530,8 @@ const OUTBOUND_SCREEN_OUTBOUND_STREAM_ID = uuid.v4();
4521
4530
  if (browserName === "chrome")
4522
4531
  window.document.addEventListener("beforeunload", () => (unloading = true));
4523
4532
  class VegaRtcManager {
4524
- constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features, eventClaim, }) {
4525
- const { session, iceServers, turnServers, sfuServer, sfuServers, mediaserverConfigTtlSeconds } = room;
4533
+ constructor({ selfId, room, emitter, serverSocket, webrtcProvider, features, eventClaim }) {
4534
+ const { session, iceServers, turnServers, sfuServer, mediaserverConfigTtlSeconds } = room;
4526
4535
  this._selfId = selfId;
4527
4536
  this._room = room;
4528
4537
  this._roomSessionId = session === null || session === void 0 ? void 0 : session.id;
@@ -4576,7 +4585,6 @@ class VegaRtcManager {
4576
4585
  };
4577
4586
  this._updateAndScheduleMediaServersRefresh({
4578
4587
  sfuServer,
4579
- sfuServers,
4580
4588
  iceServers: (iceServers === null || iceServers === void 0 ? void 0 : iceServers.iceServers) || [],
4581
4589
  turnServers: turnServers || [],
4582
4590
  mediaserverConfigTtlSeconds,
@@ -4603,13 +4611,14 @@ class VegaRtcManager {
4603
4611
  camTrackEndedCount: 0,
4604
4612
  };
4605
4613
  }
4606
- _updateAndScheduleMediaServersRefresh({ iceServers, turnServers, sfuServer, sfuServers, mediaserverConfigTtlSeconds, }) {
4607
- var _a, _b, _c;
4614
+ _updateAndScheduleMediaServersRefresh({ iceServers, turnServers, sfuServer, mediaserverConfigTtlSeconds, }) {
4615
+ var _a, _b, _c, _d;
4608
4616
  this._iceServers = iceServers;
4609
4617
  this._turnServers = turnServers;
4610
- this._sfuServer = sfuServer;
4611
- this._sfuServers = sfuServers;
4612
- if (!sfuServers && (sfuServer === null || sfuServer === void 0 ? void 0 : sfuServer.fallbackServers)) {
4618
+ if (sfuServer) {
4619
+ this._sfuServer = sfuServer;
4620
+ }
4621
+ if (sfuServer === null || sfuServer === void 0 ? void 0 : sfuServer.fallbackServers) {
4613
4622
  this._sfuServers = sfuServer.fallbackServers.map((entry) => ({
4614
4623
  host: entry.host || entry.fqdn,
4615
4624
  dc: entry.dc,
@@ -4619,14 +4628,14 @@ class VegaRtcManager {
4619
4628
  (_a = this._vegaConnectionManager) === null || _a === void 0 ? void 0 : _a.updateHostList(this._features.sfuServersOverride ||
4620
4629
  this._sfuServers ||
4621
4630
  this._features.sfuServerOverrideHost ||
4622
- sfuServer.url);
4631
+ ((_b = this._sfuServer) === null || _b === void 0 ? void 0 : _b.url));
4623
4632
  const iceServersList = {
4624
4633
  iceServers: this._features.turnServersOn ? this._turnServers : this._iceServers,
4625
4634
  };
4626
4635
  iceServersList.iceServers = turnServerOverride(iceServersList.iceServers, this._features.turnServerOverrideHost);
4627
4636
  if (browserName !== "firefox") {
4628
- (_b = this._sendTransport) === null || _b === void 0 ? void 0 : _b.updateIceServers(iceServersList);
4629
- (_c = this._receiveTransport) === null || _c === void 0 ? void 0 : _c.updateIceServers(iceServersList);
4637
+ (_c = this._sendTransport) === null || _c === void 0 ? void 0 : _c.updateIceServers(iceServersList);
4638
+ (_d = this._receiveTransport) === null || _d === void 0 ? void 0 : _d.updateIceServers(iceServersList);
4630
4639
  }
4631
4640
  this._clearMediaServersRefresh();
4632
4641
  if (!mediaserverConfigTtlSeconds) {
@@ -4680,6 +4689,7 @@ class VegaRtcManager {
4680
4689
  });
4681
4690
  }
4682
4691
  _connect() {
4692
+ var _a;
4683
4693
  if (this._isConnectingOrConnected)
4684
4694
  return;
4685
4695
  if (!this._serverSocket.isConnected()) {
@@ -4695,7 +4705,7 @@ class VegaRtcManager {
4695
4705
  const hostList = this._features.sfuServersOverride ||
4696
4706
  this._sfuServers ||
4697
4707
  this._features.sfuServerOverrideHost ||
4698
- this._sfuServer.url;
4708
+ ((_a = this._sfuServer) === null || _a === void 0 ? void 0 : _a.url);
4699
4709
  this._vegaConnectionManager = createVegaConnectionManager({
4700
4710
  initialHostList: hostList,
4701
4711
  getUrlForHost: (host) => {
@@ -6005,9 +6015,10 @@ class RtcManagerDispatcher {
6005
6015
  constructor({ emitter, serverSocket, webrtcProvider, features, }) {
6006
6016
  this.emitter = emitter;
6007
6017
  this.currentManager = null;
6008
- serverSocket.on(PROTOCOL_RESPONSES.ROOM_JOINED, ({ room, selfId, error, eventClaim }) => {
6009
- if (error)
6018
+ serverSocket.on(PROTOCOL_RESPONSES.ROOM_JOINED, (payload) => {
6019
+ if ("error" in payload)
6010
6020
  return;
6021
+ const { room, selfId, eventClaim } = payload;
6011
6022
  const config = {
6012
6023
  selfId,
6013
6024
  room,