@webex/plugin-meetings 3.7.0-next.6 → 3.7.0-next.60

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.
Files changed (138) hide show
  1. package/dist/annotation/index.js +17 -0
  2. package/dist/annotation/index.js.map +1 -1
  3. package/dist/breakouts/breakout.js +1 -1
  4. package/dist/breakouts/index.js +1 -1
  5. package/dist/common/errors/join-forbidden-error.js +52 -0
  6. package/dist/common/errors/join-forbidden-error.js.map +1 -0
  7. package/dist/common/errors/{webinar-registration-error.js → join-webinar-error.js} +12 -12
  8. package/dist/common/errors/join-webinar-error.js.map +1 -0
  9. package/dist/common/errors/multistream-not-supported-error.js +53 -0
  10. package/dist/common/errors/multistream-not-supported-error.js.map +1 -0
  11. package/dist/config.js +1 -1
  12. package/dist/config.js.map +1 -1
  13. package/dist/constants.js +46 -5
  14. package/dist/constants.js.map +1 -1
  15. package/dist/index.js +16 -11
  16. package/dist/index.js.map +1 -1
  17. package/dist/interpretation/index.js +1 -1
  18. package/dist/interpretation/siLanguage.js +1 -1
  19. package/dist/locus-info/index.js +14 -3
  20. package/dist/locus-info/index.js.map +1 -1
  21. package/dist/locus-info/selfUtils.js +35 -17
  22. package/dist/locus-info/selfUtils.js.map +1 -1
  23. package/dist/meeting/brbState.js +167 -0
  24. package/dist/meeting/brbState.js.map +1 -0
  25. package/dist/meeting/in-meeting-actions.js +2 -0
  26. package/dist/meeting/in-meeting-actions.js.map +1 -1
  27. package/dist/meeting/index.js +774 -649
  28. package/dist/meeting/index.js.map +1 -1
  29. package/dist/meeting/locusMediaRequest.js +9 -0
  30. package/dist/meeting/locusMediaRequest.js.map +1 -1
  31. package/dist/meeting/muteState.js +1 -6
  32. package/dist/meeting/muteState.js.map +1 -1
  33. package/dist/meeting/request.js +30 -0
  34. package/dist/meeting/request.js.map +1 -1
  35. package/dist/meeting/request.type.js.map +1 -1
  36. package/dist/meeting/util.js +16 -16
  37. package/dist/meeting/util.js.map +1 -1
  38. package/dist/meeting-info/meeting-info-v2.js +96 -33
  39. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  40. package/dist/meeting-info/utilv2.js +1 -1
  41. package/dist/meeting-info/utilv2.js.map +1 -1
  42. package/dist/meetings/index.js +107 -55
  43. package/dist/meetings/index.js.map +1 -1
  44. package/dist/meetings/meetings.types.js +2 -0
  45. package/dist/meetings/meetings.types.js.map +1 -1
  46. package/dist/meetings/util.js +1 -1
  47. package/dist/meetings/util.js.map +1 -1
  48. package/dist/member/index.js +9 -0
  49. package/dist/member/index.js.map +1 -1
  50. package/dist/member/types.js.map +1 -1
  51. package/dist/member/util.js +39 -28
  52. package/dist/member/util.js.map +1 -1
  53. package/dist/metrics/constants.js +3 -2
  54. package/dist/metrics/constants.js.map +1 -1
  55. package/dist/multistream/remoteMedia.js +30 -15
  56. package/dist/multistream/remoteMedia.js.map +1 -1
  57. package/dist/multistream/sendSlotManager.js +24 -0
  58. package/dist/multistream/sendSlotManager.js.map +1 -1
  59. package/dist/reachability/index.js +31 -3
  60. package/dist/reachability/index.js.map +1 -1
  61. package/dist/roap/index.js +10 -8
  62. package/dist/roap/index.js.map +1 -1
  63. package/dist/types/annotation/index.d.ts +5 -0
  64. package/dist/types/common/errors/join-forbidden-error.d.ts +15 -0
  65. package/dist/types/common/errors/{webinar-registration-error.d.ts → join-webinar-error.d.ts} +2 -2
  66. package/dist/types/common/errors/multistream-not-supported-error.d.ts +17 -0
  67. package/dist/types/constants.d.ts +38 -1
  68. package/dist/types/index.d.ts +3 -3
  69. package/dist/types/locus-info/index.d.ts +2 -1
  70. package/dist/types/meeting/brbState.d.ts +54 -0
  71. package/dist/types/meeting/in-meeting-actions.d.ts +2 -0
  72. package/dist/types/meeting/index.d.ts +21 -12
  73. package/dist/types/meeting/locusMediaRequest.d.ts +4 -0
  74. package/dist/types/meeting/request.d.ts +12 -1
  75. package/dist/types/meeting/request.type.d.ts +6 -0
  76. package/dist/types/meeting/util.d.ts +1 -1
  77. package/dist/types/meeting-info/meeting-info-v2.d.ts +27 -4
  78. package/dist/types/meetings/index.d.ts +19 -1
  79. package/dist/types/meetings/meetings.types.d.ts +8 -0
  80. package/dist/types/member/index.d.ts +1 -0
  81. package/dist/types/member/types.d.ts +7 -0
  82. package/dist/types/metrics/constants.d.ts +2 -1
  83. package/dist/types/multistream/sendSlotManager.d.ts +8 -1
  84. package/dist/types/reachability/index.d.ts +9 -1
  85. package/dist/webinar/index.js +354 -3
  86. package/dist/webinar/index.js.map +1 -1
  87. package/package.json +23 -22
  88. package/src/annotation/index.ts +16 -0
  89. package/src/common/errors/join-forbidden-error.ts +26 -0
  90. package/src/common/errors/join-webinar-error.ts +24 -0
  91. package/src/common/errors/multistream-not-supported-error.ts +30 -0
  92. package/src/config.ts +1 -1
  93. package/src/constants.ts +43 -3
  94. package/src/index.ts +5 -3
  95. package/src/locus-info/index.ts +20 -3
  96. package/src/locus-info/selfUtils.ts +24 -6
  97. package/src/meeting/brbState.ts +169 -0
  98. package/src/meeting/in-meeting-actions.ts +4 -0
  99. package/src/meeting/index.ts +256 -82
  100. package/src/meeting/locusMediaRequest.ts +7 -0
  101. package/src/meeting/muteState.ts +1 -6
  102. package/src/meeting/request.ts +26 -1
  103. package/src/meeting/request.type.ts +7 -0
  104. package/src/meeting/util.ts +8 -10
  105. package/src/meeting-info/meeting-info-v2.ts +74 -11
  106. package/src/meeting-info/utilv2.ts +3 -1
  107. package/src/meetings/index.ts +79 -20
  108. package/src/meetings/meetings.types.ts +10 -0
  109. package/src/meetings/util.ts +2 -1
  110. package/src/member/index.ts +9 -0
  111. package/src/member/types.ts +8 -0
  112. package/src/member/util.ts +34 -24
  113. package/src/metrics/constants.ts +2 -1
  114. package/src/multistream/remoteMedia.ts +28 -15
  115. package/src/multistream/sendSlotManager.ts +31 -0
  116. package/src/reachability/index.ts +29 -1
  117. package/src/roap/index.ts +10 -8
  118. package/src/webinar/index.ts +197 -3
  119. package/test/unit/spec/annotation/index.ts +46 -1
  120. package/test/unit/spec/locus-info/index.js +292 -60
  121. package/test/unit/spec/locus-info/selfConstant.js +7 -0
  122. package/test/unit/spec/locus-info/selfUtils.js +101 -1
  123. package/test/unit/spec/meeting/brbState.ts +114 -0
  124. package/test/unit/spec/meeting/in-meeting-actions.ts +2 -0
  125. package/test/unit/spec/meeting/index.js +733 -106
  126. package/test/unit/spec/meeting/muteState.js +0 -24
  127. package/test/unit/spec/meeting/utils.js +22 -19
  128. package/test/unit/spec/meeting-info/meetinginfov2.js +46 -4
  129. package/test/unit/spec/meeting-info/utilv2.js +17 -0
  130. package/test/unit/spec/meetings/index.js +159 -18
  131. package/test/unit/spec/meetings/utils.js +10 -0
  132. package/test/unit/spec/member/util.js +52 -11
  133. package/test/unit/spec/multistream/remoteMedia.ts +11 -7
  134. package/test/unit/spec/reachability/index.ts +120 -10
  135. package/test/unit/spec/roap/index.ts +47 -0
  136. package/test/unit/spec/webinar/index.ts +457 -0
  137. package/dist/common/errors/webinar-registration-error.js.map +0 -1
  138. package/src/common/errors/webinar-registration-error.ts +0 -27
@@ -18,10 +18,10 @@ _Object$defineProperty(exports, "__esModule", {
18
18
  exports.default = exports.ScreenShareFloorStatus = exports.MEDIA_UPDATE_TYPE = void 0;
19
19
  var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
20
20
  var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
21
+ var _values = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/values"));
21
22
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
22
23
  var _map = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/map"));
23
24
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
24
- var _values = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/values"));
25
25
  var _weakMap = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/weak-map"));
26
26
  var _typeof2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/typeof"));
27
27
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
@@ -87,7 +87,10 @@ var _controlsOptionsManager = _interopRequireDefault(require("../controls-option
87
87
  var _permission = _interopRequireDefault(require("../common/errors/permission"));
88
88
  var _locusMediaRequest = require("./locusMediaRequest");
89
89
  var _connectionStateHandler = require("./connectionStateHandler");
90
- var _webinarRegistrationError = _interopRequireDefault(require("../common/errors/webinar-registration-error"));
90
+ var _joinWebinarError = _interopRequireDefault(require("../common/errors/join-webinar-error"));
91
+ var _brbState = require("./brbState");
92
+ var _multistreamNotSupportedError = _interopRequireDefault(require("../common/errors/multistream-not-supported-error"));
93
+ var _joinForbiddenError = _interopRequireDefault(require("../common/errors/join-forbidden-error"));
91
94
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof _Symbol !== "undefined" && o[_Symbol$iterator] || o["@@iterator"]; if (!it) { if (_Array$isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
92
95
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return _Array$from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
93
96
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
@@ -507,6 +510,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
507
510
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "turnServerUsed", void 0);
508
511
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "areVoiceaEventsSetup", false);
509
512
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "isMoveToInProgress", false);
513
+ (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "brbState", void 0);
510
514
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "voiceaListenerCallbacks", (0, _defineProperty3.default)((0, _defineProperty3.default)((0, _defineProperty3.default)((0, _defineProperty3.default)({}, _internalPluginVoicea.EVENT_TRIGGERS.VOICEA_ANNOUNCEMENT, function (payload) {
511
515
  _this.transcription.languageOptions = payload;
512
516
  _loggerProxy.default.logger.debug("".concat(_util.default.getScopeLog({
@@ -567,8 +571,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
567
571
  if (
568
572
  // @ts-ignore - config coming from registerPlugin
569
573
  (_this.config.receiveReactions || options.receiveReactions) && _this.isReactionsSupported()) {
570
- var _this$members$members = _this.members.membersCollection.get(e.data.sender.participantId),
571
- name = _this$members$members.name;
574
+ var member = _this.members.membersCollection.get(e.data.sender.participantId);
575
+ if (!member) {
576
+ // @ts-ignore -- fix type
577
+ _loggerProxy.default.logger.warn("Meeting:index#processRelayEvent --> Skipping handling of ".concat(_constants3.REACTION_RELAY_TYPES.REACTION, " for ").concat(_this.id, ". participantId ").concat(e.data.sender.participantId, " does not exist in membersCollection."));
578
+ break;
579
+ }
580
+ var name = member.name;
572
581
  var processedReaction = {
573
582
  reaction: e.data.reaction,
574
583
  sender: {
@@ -674,7 +683,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
674
683
  * @returns {undefined}
675
684
  */
676
685
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "roapMessageReceived", function (roapMessage) {
677
- var mediaServer = _util3.default.getMediaServer(roapMessage.sdp);
686
+ var mediaServer = roapMessage.messageType === 'ANSWER' ? _util3.default.getMediaServer(roapMessage.sdp) : undefined;
687
+ if (_this.isMultistream && mediaServer && mediaServer !== 'homer') {
688
+ throw new _multistreamNotSupportedError.default("Client asked for multistream backend (Homer), but got ".concat(mediaServer, " instead"));
689
+ }
678
690
  _this.mediaProperties.webrtcMediaConnection.roapMessageReceived(roapMessage);
679
691
  if (mediaServer) {
680
692
  _this.mediaProperties.webrtcMediaConnection.mediaServer = mediaServer;
@@ -769,15 +781,17 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
769
781
  }), {
770
782
  logText: "".concat(LOG_HEADER, " Roap Offer")
771
783
  }).catch(function (error) {
784
+ var multistreamNotSupported = error instanceof _multistreamNotSupportedError.default;
785
+
772
786
  // @ts-ignore
773
787
  _this.webex.internal.newMetrics.submitClientEvent({
774
788
  name: 'client.media-engine.remote-sdp-received',
775
789
  payload: {
776
- canProceed: false,
790
+ canProceed: multistreamNotSupported,
777
791
  errors: [
778
792
  // @ts-ignore
779
793
  _this.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({
780
- clientErrorCode: _internalPluginMetrics.CALL_DIAGNOSTIC_CONFIG.MISSING_ROAP_ANSWER_CLIENT_CODE
794
+ clientErrorCode: multistreamNotSupported ? _internalPluginMetrics.CALL_DIAGNOSTIC_CONFIG.MULTISTREAM_NOT_AVAILABLE_CLIENT_CODE : _internalPluginMetrics.CALL_DIAGNOSTIC_CONFIG.MISSING_ROAP_ANSWER_CLIENT_CODE
781
795
  })]
782
796
  },
783
797
  options: {
@@ -785,7 +799,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
785
799
  rawError: error
786
800
  }
787
801
  });
788
- _this.deferSDPAnswer.reject(new Error('failed to send ROAP SDP offer'));
802
+ _this.deferSDPAnswer.reject(error);
789
803
  clearTimeout(_this.sdpResponseTimer);
790
804
  _this.sdpResponseTimer = undefined;
791
805
  });
@@ -1027,6 +1041,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1027
1041
  options.data.intervalMetadata.peerReflexiveIP =
1028
1042
  // @ts-ignore
1029
1043
  ((_this$webex$meetings$ = _this.webex.meetings.geoHintInfo) === null || _this$webex$meetings$ === void 0 ? void 0 : _this$webex$meetings$.clientAddress) || options.data.intervalMetadata.peerReflexiveIP || _constants.MQA_STATS.DEFAULT_IP;
1044
+ var members = _this.getMembers().membersCollection.members;
1045
+
1046
+ // Count members that are in the meeting
1047
+ options.data.intervalMetadata.meetingUserCount = (0, _values.default)(members).filter(function (member) {
1048
+ return member.isInMeeting;
1049
+ }).length;
1050
+
1030
1051
  // @ts-ignore
1031
1052
  _this.webex.internal.newMetrics.submitMQE({
1032
1053
  name: 'client.mediaquality.event',
@@ -1260,12 +1281,18 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1260
1281
  * @returns {undefined}
1261
1282
  */
1262
1283
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "handleShareVideoStreamMuteStateChange", function (muted) {
1263
- var _this$statsAnalyzer;
1284
+ var _this$statsAnalyzer, _this$mediaProperties3, _this$mediaProperties4;
1264
1285
  _loggerProxy.default.logger.log("Meeting:index#handleShareVideoStreamMuteStateChange --> Share video stream mute state changed to muted ".concat(muted));
1265
1286
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_VIDEO_MUTE_STATE_CHANGE, {
1266
1287
  correlationId: _this.correlationId,
1267
1288
  muted: muted,
1268
- encoderImplementation: (_this$statsAnalyzer = _this.statsAnalyzer) === null || _this$statsAnalyzer === void 0 ? void 0 : _this$statsAnalyzer.shareVideoEncoderImplementation
1289
+ encoderImplementation: (_this$statsAnalyzer = _this.statsAnalyzer) === null || _this$statsAnalyzer === void 0 ? void 0 : _this$statsAnalyzer.shareVideoEncoderImplementation,
1290
+ // TypeScript 4 does not recognize the `displaySurface` property. Instead of upgrading the
1291
+ // SDK to TypeScript 5, which may affect other packages, use bracket notation for now, since
1292
+ // all we're doing here is adding metrics.
1293
+ // eslint-disable-next-line dot-notation
1294
+ displaySurface: (_this$mediaProperties3 = _this.mediaProperties) === null || _this$mediaProperties3 === void 0 ? void 0 : (_this$mediaProperties4 = _this$mediaProperties3.shareVideoStream) === null || _this$mediaProperties4 === void 0 ? void 0 : _this$mediaProperties4.getSettings()['displaySurface'],
1295
+ isMultistream: _this.isMultistream
1269
1296
  });
1270
1297
  });
1271
1298
  /**
@@ -1344,6 +1371,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1344
1371
  _this.stopTranscription();
1345
1372
  _this.transcription = undefined;
1346
1373
  }
1374
+ _this.annotation.deregisterEvents();
1375
+
1376
+ // @ts-ignore - fix types
1377
+ _this.webex.internal.llm.off('event:relay.event', _this.processRelayEvent);
1347
1378
  });
1348
1379
  /**
1349
1380
  * starts keepAlives being sent
@@ -1369,10 +1400,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1369
1400
  _loggerProxy.default.logger.warn('Meeting:index#startKeepAlive --> keepAlive not started: keepAliveSecs <= 1');
1370
1401
  return;
1371
1402
  }
1372
- var keepAliveUrl = _this.joinedWith.keepAliveUrl;
1373
1403
  var keepAliveInterval = (_this.joinedWith.keepAliveSecs - 1) * 750; // taken from UCF
1374
1404
 
1375
1405
  _this.keepAliveTimerId = setInterval(function () {
1406
+ var keepAliveUrl = _this.joinedWith.keepAliveUrl;
1376
1407
  _this.meetingRequest.keepAlive({
1377
1408
  keepAliveUrl: keepAliveUrl
1378
1409
  }).catch(function (error) {
@@ -1520,15 +1551,17 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1520
1551
  * @memberof Meeting
1521
1552
  */
1522
1553
  // @ts-ignore
1523
- _this.webinar = new _webinar.default({}, {
1554
+ _this.webinar = new _webinar.default({
1555
+ meetingId: _this.id
1556
+ }, {
1524
1557
  parent: _this.webex
1525
1558
  });
1526
1559
  /**
1527
1560
  * helper class for managing receive slots (for multistream media connections)
1528
1561
  */
1529
1562
  _this.receiveSlotManager = new _receiveSlotManager.ReceiveSlotManager(function (mediaType) {
1530
- var _this$mediaProperties3;
1531
- if (!((_this$mediaProperties3 = _this.mediaProperties) !== null && _this$mediaProperties3 !== void 0 && _this$mediaProperties3.webrtcMediaConnection)) {
1563
+ var _this$mediaProperties5;
1564
+ if (!((_this$mediaProperties5 = _this.mediaProperties) !== null && _this$mediaProperties5 !== void 0 && _this$mediaProperties5.webrtcMediaConnection)) {
1532
1565
  return _promise.default.reject(new Error('Webrtc media connection is missing'));
1533
1566
  }
1534
1567
  return _this.mediaProperties.webrtcMediaConnection.createReceiveSlot(mediaType);
@@ -2427,19 +2460,40 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2427
2460
  }
2428
2461
  throw new _permission.default();
2429
2462
  case 21:
2430
- if (!(_context5.t0 instanceof _meetingInfoV.MeetingInfoV2WebinarRegistrationError)) {
2431
- _context5.next = 28;
2463
+ if (!(_context5.t0 instanceof _meetingInfoV.MeetingInfoV2JoinWebinarError)) {
2464
+ _context5.next = 29;
2432
2465
  break;
2433
2466
  }
2434
2467
  this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.WEBINAR_REGISTRATION;
2468
+ if (_constants.WEBINAR_ERROR_WEBCAST.includes(_context5.t0.wbxAppApiCode)) {
2469
+ this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.NEED_JOIN_WITH_WEBCAST;
2470
+ } else if (_constants.WEBINAR_ERROR_REGISTRATIONID.includes(_context5.t0.wbxAppApiCode)) {
2471
+ this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.WEBINAR_NEED_REGISTRATIONID;
2472
+ }
2435
2473
  this.meetingInfoFailureCode = _context5.t0.wbxAppApiCode;
2436
2474
  if (_context5.t0.meetingInfo) {
2437
2475
  this.meetingInfo = _context5.t0.meetingInfo;
2438
2476
  }
2439
- throw new _webinarRegistrationError.default();
2440
- case 28:
2477
+ throw new _joinWebinarError.default();
2478
+ case 29:
2479
+ if (!(_context5.t0 instanceof _meetingInfoV.MeetingInfoV2JoinForbiddenError)) {
2480
+ _context5.next = 37;
2481
+ break;
2482
+ }
2483
+ this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.JOIN_FORBIDDEN;
2484
+ this.meetingInfoFailureCode = _context5.t0.wbxAppApiCode;
2485
+ if (_context5.t0.meetingInfo) {
2486
+ this.meetingInfo = _context5.t0.meetingInfo;
2487
+ }
2488
+
2489
+ // Handle the case where user hasn't reached Join Before Host (JBH) time (error code 403003)
2490
+ if (_constants.JOIN_BEFORE_HOST === _context5.t0.wbxAppApiCode) {
2491
+ this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.NOT_REACH_JBH;
2492
+ }
2493
+ throw new _joinForbiddenError.default(this.meetingInfoFailureReason, _context5.t0);
2494
+ case 37:
2441
2495
  if (!(_context5.t0 instanceof _meetingInfoV.MeetingInfoV2PasswordError)) {
2442
- _context5.next = 40;
2496
+ _context5.next = 49;
2443
2497
  break;
2444
2498
  }
2445
2499
  _loggerProxy.default.logger.info( // @ts-ignore
@@ -2454,16 +2508,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2454
2508
  this.passwordStatus = _constants.PASSWORD_STATUS.REQUIRED;
2455
2509
  this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.WRONG_PASSWORD;
2456
2510
  if (!this.requiredCaptcha) {
2457
- _context5.next = 37;
2511
+ _context5.next = 46;
2458
2512
  break;
2459
2513
  }
2460
- _context5.next = 37;
2514
+ _context5.next = 46;
2461
2515
  return this.refreshCaptcha();
2462
- case 37:
2516
+ case 46:
2463
2517
  throw new _passwordError.default();
2464
- case 40:
2518
+ case 49:
2465
2519
  if (!(_context5.t0 instanceof _meetingInfoV.MeetingInfoV2CaptchaError)) {
2466
- _context5.next = 49;
2520
+ _context5.next = 58;
2467
2521
  break;
2468
2522
  }
2469
2523
  _loggerProxy.default.logger.info( // @ts-ignore
@@ -2475,10 +2529,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2475
2529
  }
2476
2530
  this.requiredCaptcha = _context5.t0.captchaInfo;
2477
2531
  throw new _captchaError.default();
2478
- case 49:
2532
+ case 58:
2479
2533
  this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.OTHER;
2480
2534
  throw _context5.t0;
2481
- case 51:
2535
+ case 60:
2482
2536
  case "end":
2483
2537
  return _context5.stop();
2484
2538
  }
@@ -3311,7 +3365,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3311
3365
  this.locusInfo.on(_constants.EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES, /*#__PURE__*/function () {
3312
3366
  var _ref27 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(payload) {
3313
3367
  var _payload$previous, _payload$previous2;
3314
- var _payload$current, contentShare, whiteboardShare, previousContentShare, previousWhiteboardShare, newShareStatus, oldShareStatus, sendStartedSharingRemote, _this14$mediaProperti;
3368
+ var _payload$current, contentShare, whiteboardShare, previousContentShare, previousWhiteboardShare, newShareStatus, _this14$locusInfo, _this14$locusInfo$inf, _this14$webinar, oldShareStatus, sendStartedSharingRemote, _this14$mediaProperti;
3315
3369
  return _regenerator.default.wrap(function _callee8$(_context8) {
3316
3370
  while (1) switch (_context8.prev = _context8.next) {
3317
3371
  case 0:
@@ -3319,7 +3373,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3319
3373
  previousContentShare = (_payload$previous = payload.previous) === null || _payload$previous === void 0 ? void 0 : _payload$previous.content;
3320
3374
  previousWhiteboardShare = (_payload$previous2 = payload.previous) === null || _payload$previous2 === void 0 ? void 0 : _payload$previous2.whiteboard;
3321
3375
  _this14.triggerAnnotationInfoEvent(contentShare, previousContentShare);
3322
- if (!(contentShare.beneficiaryId === (previousContentShare === null || previousContentShare === void 0 ? void 0 : previousContentShare.beneficiaryId) && contentShare.disposition === (previousContentShare === null || previousContentShare === void 0 ? void 0 : previousContentShare.disposition) && contentShare.deviceUrlSharing === previousContentShare.deviceUrlSharing && whiteboardShare.beneficiaryId === (previousWhiteboardShare === null || previousWhiteboardShare === void 0 ? void 0 : previousWhiteboardShare.beneficiaryId) && whiteboardShare.disposition === (previousWhiteboardShare === null || previousWhiteboardShare === void 0 ? void 0 : previousWhiteboardShare.disposition) && whiteboardShare.resourceUrl === (previousWhiteboardShare === null || previousWhiteboardShare === void 0 ? void 0 : previousWhiteboardShare.resourceUrl) && contentShare.resourceType === (previousContentShare === null || previousContentShare === void 0 ? void 0 : previousContentShare.resourceType))) {
3376
+ if (!(!payload.forceUpdate && contentShare.beneficiaryId === (previousContentShare === null || previousContentShare === void 0 ? void 0 : previousContentShare.beneficiaryId) && contentShare.disposition === (previousContentShare === null || previousContentShare === void 0 ? void 0 : previousContentShare.disposition) && contentShare.deviceUrlSharing === previousContentShare.deviceUrlSharing && whiteboardShare.beneficiaryId === (previousWhiteboardShare === null || previousWhiteboardShare === void 0 ? void 0 : previousWhiteboardShare.beneficiaryId) && whiteboardShare.disposition === (previousWhiteboardShare === null || previousWhiteboardShare === void 0 ? void 0 : previousWhiteboardShare.disposition) && whiteboardShare.resourceUrl === (previousWhiteboardShare === null || previousWhiteboardShare === void 0 ? void 0 : previousWhiteboardShare.resourceUrl) && contentShare.resourceType === (previousContentShare === null || previousContentShare === void 0 ? void 0 : previousContentShare.resourceType))) {
3323
3377
  _context8.next = 6;
3324
3378
  break;
3325
3379
  }
@@ -3345,7 +3399,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3345
3399
  // It does not matter who requested to share the whiteboard, everyone gets the same view
3346
3400
  else if (whiteboardShare.disposition === _constants.FLOOR_ACTION.GRANTED) {
3347
3401
  // WHITEBOARD - sharing whiteboard
3348
- newShareStatus = _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE;
3402
+ // Webinar attendee should receive whiteboard as remote share
3403
+ newShareStatus = (_this14$locusInfo = _this14.locusInfo) !== null && _this14$locusInfo !== void 0 && (_this14$locusInfo$inf = _this14$locusInfo.info) !== null && _this14$locusInfo$inf !== void 0 && _this14$locusInfo$inf.isWebinar && (_this14$webinar = _this14.webinar) !== null && _this14$webinar !== void 0 && _this14$webinar.selfIsAttendee ? _constants.SHARE_STATUS.REMOTE_SHARE_ACTIVE : _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE;
3349
3404
  }
3350
3405
  // or if content share is either released or null and whiteboard share is either released or null, no one is sharing
3351
3406
  else if ((previousContentShare && contentShare.disposition === _constants.FLOOR_ACTION.RELEASED || contentShare.disposition === null) && (previousWhiteboardShare && whiteboardShare.disposition === _constants.FLOOR_ACTION.RELEASED || whiteboardShare.disposition === null)) {
@@ -3579,7 +3634,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3579
3634
  value: function setUpLocusResourcesListener() {
3580
3635
  var _this17 = this;
3581
3636
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.LINKS_RESOURCES, function (payload) {
3582
- _this17.webinar.updateWebcastUrl(payload);
3637
+ if (payload) {
3638
+ _this17.webinar.updateWebcastUrl(payload);
3639
+ _triggerProxy.default.trigger(_this17, {
3640
+ file: 'meeting/index',
3641
+ function: 'setUpLocusInfoMeetingInfoListener'
3642
+ }, _constants.EVENT_TRIGGERS.MEETING_RESOURCE_LINKS_UPDATE, {
3643
+ payload: payload
3644
+ });
3645
+ }
3583
3646
  });
3584
3647
  }
3585
3648
 
@@ -3845,6 +3908,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3845
3908
  _this20.setSendNamedMediaGroup(_internalMediaCore.MediaType.AudioMain);
3846
3909
  }
3847
3910
  });
3911
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_MEETING_BRB_CHANGED, function (payload) {
3912
+ var _this20$brbState, _payload$brb;
3913
+ (_this20$brbState = _this20.brbState) === null || _this20$brbState === void 0 ? void 0 : _this20$brbState.handleServerBrbUpdate(payload === null || payload === void 0 ? void 0 : (_payload$brb = payload.brb) === null || _payload$brb === void 0 ? void 0 : _payload$brb.enabled);
3914
+ _triggerProxy.default.trigger(_this20, {
3915
+ file: 'meeting/index',
3916
+ function: 'setUpLocusInfoSelfListener'
3917
+ }, _constants.EVENT_TRIGGERS.MEETING_SELF_BRB_UPDATE, {
3918
+ payload: payload
3919
+ });
3920
+ });
3848
3921
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_ROLES_CHANGED, function (payload) {
3849
3922
  var _payload$newRoles, _payload$newRoles2, _payload$newRoles3;
3850
3923
  var isModeratorOrCohost = ((_payload$newRoles = payload.newRoles) === null || _payload$newRoles === void 0 ? void 0 : _payload$newRoles.includes(_constants.SELF_ROLES.MODERATOR)) || ((_payload$newRoles2 = payload.newRoles) === null || _payload$newRoles2 === void 0 ? void 0 : _payload$newRoles2.includes(_constants.SELF_ROLES.COHOST));
@@ -4043,6 +4116,51 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4043
4116
  return this.members.admitMembers(memberIds, locusUrls);
4044
4117
  }
4045
4118
 
4119
+ /**
4120
+ * Manages be right back status updates for the current participant.
4121
+ *
4122
+ * @param {boolean} enabled - Indicates whether the user enabled brb or not.
4123
+ * @returns {Promise<void>} resolves when the brb status is updated or does nothing if not in a multistream meeting.
4124
+ * @throws {Error} - Throws an error if the request fails.
4125
+ */
4126
+ }, {
4127
+ key: "beRightBack",
4128
+ value: (function () {
4129
+ var _beRightBack = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11(enabled) {
4130
+ var errorMessage, error, _errorMessage, _error;
4131
+ return _regenerator.default.wrap(function _callee11$(_context11) {
4132
+ while (1) switch (_context11.prev = _context11.next) {
4133
+ case 0:
4134
+ if (this.isMultistream) {
4135
+ _context11.next = 5;
4136
+ break;
4137
+ }
4138
+ errorMessage = 'Meeting:index#beRightBack --> Not a multistream meeting';
4139
+ error = new Error(errorMessage);
4140
+ _loggerProxy.default.logger.error(error);
4141
+ return _context11.abrupt("return", _promise.default.reject(error));
4142
+ case 5:
4143
+ if (this.mediaProperties.webrtcMediaConnection) {
4144
+ _context11.next = 10;
4145
+ break;
4146
+ }
4147
+ _errorMessage = 'Meeting:index#beRightBack --> WebRTC media connection is not defined';
4148
+ _error = new Error(_errorMessage);
4149
+ _loggerProxy.default.logger.error(_error);
4150
+ return _context11.abrupt("return", _promise.default.reject(_error));
4151
+ case 10:
4152
+ return _context11.abrupt("return", this.brbState.enable(enabled, this.sendSlotManager));
4153
+ case 11:
4154
+ case "end":
4155
+ return _context11.stop();
4156
+ }
4157
+ }, _callee11, this);
4158
+ }));
4159
+ function beRightBack(_x11) {
4160
+ return _beRightBack.apply(this, arguments);
4161
+ }
4162
+ return beRightBack;
4163
+ }()
4046
4164
  /**
4047
4165
  * Remove the member from the meeting, boot them
4048
4166
  * @param {String} memberId
@@ -4050,6 +4168,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4050
4168
  * @public
4051
4169
  * @memberof Meeting
4052
4170
  */
4171
+ )
4053
4172
  }, {
4054
4173
  key: "remove",
4055
4174
  value: function remove(memberId) {
@@ -4247,6 +4366,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4247
4366
  waitingForOthersToJoin: _util2.default.waitingForOthersToJoin(this.userDisplayHints),
4248
4367
  canSendReactions: _util2.default.canSendReactions(this.inMeetingActions.canSendReactions, this.userDisplayHints),
4249
4368
  canManageBreakout: _util2.default.canManageBreakout(this.userDisplayHints),
4369
+ canStartBreakout: _util2.default.canStartBreakout(this.userDisplayHints),
4250
4370
  canBroadcastMessageToBreakout: _util2.default.canBroadcastMessageToBreakout(this.userDisplayHints, this.selfUserPolicies),
4251
4371
  canAdmitLobbyToBreakout: _util2.default.canAdmitLobbyToBreakout(this.userDisplayHints),
4252
4372
  isBreakoutPreassignmentsEnabled: _util2.default.isBreakoutPreassignmentsEnabled(this.userDisplayHints),
@@ -4526,8 +4646,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4526
4646
  value: function setLogUploadTimer() {
4527
4647
  var _this23 = this;
4528
4648
  // start with short timeouts and increase them later on so in case users have very long multi-hour meetings we don't get too fragmented logs
4529
- var LOG_UPLOAD_INTERVALS = [0.1, 1, 15, 15, 30, 30, 30, 60];
4530
- var delay = 1000 *
4649
+ var LOG_UPLOAD_INTERVALS = [0.1, 15, 30, 60]; // in minutes
4650
+
4651
+ var delay = 1000 * 60 *
4531
4652
  // @ts-ignore - config coming from registerPlugin
4532
4653
  this.config.logUploadIntervalMultiplicationFactor * LOG_UPLOAD_INTERVALS[this.logUploadIntervalIndex];
4533
4654
  if (this.logUploadIntervalIndex < LOG_UPLOAD_INTERVALS.length - 1) {
@@ -4610,10 +4731,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4610
4731
  key: "closeRemoteStreams",
4611
4732
  value: function closeRemoteStreams() {
4612
4733
  var _this24 = this;
4613
- var _this$mediaProperties4 = this.mediaProperties,
4614
- remoteAudioStream = _this$mediaProperties4.remoteAudioStream,
4615
- remoteVideoStream = _this$mediaProperties4.remoteVideoStream,
4616
- remoteShareStream = _this$mediaProperties4.remoteShareStream;
4734
+ var _this$mediaProperties6 = this.mediaProperties,
4735
+ remoteAudioStream = _this$mediaProperties6.remoteAudioStream,
4736
+ remoteVideoStream = _this$mediaProperties6.remoteVideoStream,
4737
+ remoteShareStream = _this$mediaProperties6.remoteShareStream;
4617
4738
 
4618
4739
  /**
4619
4740
  * Triggers an event to the developer
@@ -4657,11 +4778,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4657
4778
  }, {
4658
4779
  key: "setLocalAudioStream",
4659
4780
  value: (function () {
4660
- var _setLocalAudioStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11(localStream) {
4781
+ var _setLocalAudioStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee12(localStream) {
4661
4782
  var _this$audio2;
4662
4783
  var oldStream;
4663
- return _regenerator.default.wrap(function _callee11$(_context11) {
4664
- while (1) switch (_context11.prev = _context11.next) {
4784
+ return _regenerator.default.wrap(function _callee12$(_context12) {
4785
+ while (1) switch (_context12.prev = _context12.next) {
4665
4786
  case 0:
4666
4787
  oldStream = this.mediaProperties.audioStream;
4667
4788
  oldStream === null || oldStream === void 0 ? void 0 : oldStream.off(_mediaHelpers.LocalStreamEventNames.UserMuteStateChange, this.localAudioStreamMuteStateHandler);
@@ -4675,21 +4796,21 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4675
4796
  localStream === null || localStream === void 0 ? void 0 : localStream.on(_mediaHelpers.LocalStreamEventNames.SystemMuteStateChange, this.localAudioStreamMuteStateHandler);
4676
4797
  localStream === null || localStream === void 0 ? void 0 : localStream.on(_mediaHelpers.LocalStreamEventNames.OutputTrackChange, this.localOutputTrackChangeHandler);
4677
4798
  if (!(!this.isMultistream || !localStream)) {
4678
- _context11.next = 12;
4799
+ _context12.next = 12;
4679
4800
  break;
4680
4801
  }
4681
- _context11.next = 12;
4802
+ _context12.next = 12;
4682
4803
  return this.unpublishStream(_internalMediaCore.MediaType.AudioMain, oldStream);
4683
4804
  case 12:
4684
- _context11.next = 14;
4805
+ _context12.next = 14;
4685
4806
  return this.publishStream(_internalMediaCore.MediaType.AudioMain, this.mediaProperties.audioStream);
4686
4807
  case 14:
4687
4808
  case "end":
4688
- return _context11.stop();
4809
+ return _context12.stop();
4689
4810
  }
4690
- }, _callee11, this);
4811
+ }, _callee12, this);
4691
4812
  }));
4692
- function setLocalAudioStream(_x11) {
4813
+ function setLocalAudioStream(_x12) {
4693
4814
  return _setLocalAudioStream.apply(this, arguments);
4694
4815
  }
4695
4816
  return setLocalAudioStream;
@@ -4705,11 +4826,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4705
4826
  }, {
4706
4827
  key: "setLocalVideoStream",
4707
4828
  value: (function () {
4708
- var _setLocalVideoStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee12(localStream) {
4829
+ var _setLocalVideoStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee13(localStream) {
4709
4830
  var _this$video2;
4710
4831
  var oldStream;
4711
- return _regenerator.default.wrap(function _callee12$(_context12) {
4712
- while (1) switch (_context12.prev = _context12.next) {
4832
+ return _regenerator.default.wrap(function _callee13$(_context13) {
4833
+ while (1) switch (_context13.prev = _context13.next) {
4713
4834
  case 0:
4714
4835
  oldStream = this.mediaProperties.videoStream;
4715
4836
  oldStream === null || oldStream === void 0 ? void 0 : oldStream.off(_mediaHelpers.LocalStreamEventNames.UserMuteStateChange, this.localVideoStreamMuteStateHandler);
@@ -4723,21 +4844,21 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4723
4844
  localStream === null || localStream === void 0 ? void 0 : localStream.on(_mediaHelpers.LocalStreamEventNames.SystemMuteStateChange, this.localVideoStreamMuteStateHandler);
4724
4845
  localStream === null || localStream === void 0 ? void 0 : localStream.on(_mediaHelpers.LocalStreamEventNames.OutputTrackChange, this.localOutputTrackChangeHandler);
4725
4846
  if (!(!this.isMultistream || !localStream)) {
4726
- _context12.next = 12;
4847
+ _context13.next = 12;
4727
4848
  break;
4728
4849
  }
4729
- _context12.next = 12;
4850
+ _context13.next = 12;
4730
4851
  return this.unpublishStream(_internalMediaCore.MediaType.VideoMain, oldStream);
4731
4852
  case 12:
4732
- _context12.next = 14;
4853
+ _context13.next = 14;
4733
4854
  return this.publishStream(_internalMediaCore.MediaType.VideoMain, this.mediaProperties.videoStream);
4734
4855
  case 14:
4735
4856
  case "end":
4736
- return _context12.stop();
4857
+ return _context13.stop();
4737
4858
  }
4738
- }, _callee12, this);
4859
+ }, _callee13, this);
4739
4860
  }));
4740
- function setLocalVideoStream(_x12) {
4861
+ function setLocalVideoStream(_x13) {
4741
4862
  return _setLocalVideoStream.apply(this, arguments);
4742
4863
  }
4743
4864
  return setLocalVideoStream;
@@ -4754,10 +4875,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4754
4875
  }, {
4755
4876
  key: "setLocalShareVideoStream",
4756
4877
  value: (function () {
4757
- var _setLocalShareVideoStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee13(localDisplayStream) {
4878
+ var _setLocalShareVideoStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee14(localDisplayStream) {
4758
4879
  var oldStream;
4759
- return _regenerator.default.wrap(function _callee13$(_context13) {
4760
- while (1) switch (_context13.prev = _context13.next) {
4880
+ return _regenerator.default.wrap(function _callee14$(_context14) {
4881
+ while (1) switch (_context14.prev = _context14.next) {
4761
4882
  case 0:
4762
4883
  oldStream = this.mediaProperties.shareVideoStream;
4763
4884
  oldStream === null || oldStream === void 0 ? void 0 : oldStream.off(_mediaHelpers.LocalStreamEventNames.SystemMuteStateChange, this.handleShareVideoStreamMuteStateChange);
@@ -4769,21 +4890,21 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4769
4890
  localDisplayStream === null || localDisplayStream === void 0 ? void 0 : localDisplayStream.on(_mediaHelpers.LocalStreamEventNames.OutputTrackChange, this.localOutputTrackChangeHandler);
4770
4891
  this.mediaProperties.mediaDirection.sendShare = this.mediaProperties.hasLocalShareStream();
4771
4892
  if (!(!this.isMultistream || !localDisplayStream)) {
4772
- _context13.next = 12;
4893
+ _context14.next = 12;
4773
4894
  break;
4774
4895
  }
4775
- _context13.next = 12;
4896
+ _context14.next = 12;
4776
4897
  return this.unpublishStream(_internalMediaCore.MediaType.VideoSlides, oldStream);
4777
4898
  case 12:
4778
- _context13.next = 14;
4899
+ _context14.next = 14;
4779
4900
  return this.publishStream(_internalMediaCore.MediaType.VideoSlides, this.mediaProperties.shareVideoStream);
4780
4901
  case 14:
4781
4902
  case "end":
4782
- return _context13.stop();
4903
+ return _context14.stop();
4783
4904
  }
4784
- }, _callee13, this);
4905
+ }, _callee14, this);
4785
4906
  }));
4786
- function setLocalShareVideoStream(_x13) {
4907
+ function setLocalShareVideoStream(_x14) {
4787
4908
  return _setLocalShareVideoStream.apply(this, arguments);
4788
4909
  }
4789
4910
  return setLocalShareVideoStream;
@@ -4799,10 +4920,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4799
4920
  }, {
4800
4921
  key: "setLocalShareAudioStream",
4801
4922
  value: (function () {
4802
- var _setLocalShareAudioStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee14(localSystemAudioStream) {
4923
+ var _setLocalShareAudioStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee15(localSystemAudioStream) {
4803
4924
  var oldStream;
4804
- return _regenerator.default.wrap(function _callee14$(_context14) {
4805
- while (1) switch (_context14.prev = _context14.next) {
4925
+ return _regenerator.default.wrap(function _callee15$(_context15) {
4926
+ while (1) switch (_context15.prev = _context15.next) {
4806
4927
  case 0:
4807
4928
  oldStream = this.mediaProperties.shareAudioStream;
4808
4929
  oldStream === null || oldStream === void 0 ? void 0 : oldStream.off(_mediaHelpers.StreamEventNames.Ended, this.handleShareAudioStreamEnded);
@@ -4812,21 +4933,21 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4812
4933
  localSystemAudioStream === null || localSystemAudioStream === void 0 ? void 0 : localSystemAudioStream.on(_mediaHelpers.LocalStreamEventNames.OutputTrackChange, this.localOutputTrackChangeHandler);
4813
4934
  this.mediaProperties.mediaDirection.sendShare = this.mediaProperties.hasLocalShareStream();
4814
4935
  if (!(!this.isMultistream || !localSystemAudioStream)) {
4815
- _context14.next = 10;
4936
+ _context15.next = 10;
4816
4937
  break;
4817
4938
  }
4818
- _context14.next = 10;
4939
+ _context15.next = 10;
4819
4940
  return this.unpublishStream(_internalMediaCore.MediaType.AudioSlides, oldStream);
4820
4941
  case 10:
4821
- _context14.next = 12;
4942
+ _context15.next = 12;
4822
4943
  return this.publishStream(_internalMediaCore.MediaType.AudioSlides, this.mediaProperties.shareAudioStream);
4823
4944
  case 12:
4824
4945
  case "end":
4825
- return _context14.stop();
4946
+ return _context15.stop();
4826
4947
  }
4827
- }, _callee14, this);
4948
+ }, _callee15, this);
4828
4949
  }));
4829
- function setLocalShareAudioStream(_x14) {
4950
+ function setLocalShareAudioStream(_x15) {
4830
4951
  return _setLocalShareAudioStream.apply(this, arguments);
4831
4952
  }
4832
4953
  return setLocalShareAudioStream;
@@ -4865,11 +4986,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4865
4986
  }, {
4866
4987
  key: "cleanupLocalStreams",
4867
4988
  value: function cleanupLocalStreams() {
4868
- var _this$mediaProperties5 = this.mediaProperties,
4869
- audioStream = _this$mediaProperties5.audioStream,
4870
- videoStream = _this$mediaProperties5.videoStream,
4871
- shareAudioStream = _this$mediaProperties5.shareAudioStream,
4872
- shareVideoStream = _this$mediaProperties5.shareVideoStream;
4989
+ var _this$mediaProperties7 = this.mediaProperties,
4990
+ audioStream = _this$mediaProperties7.audioStream,
4991
+ videoStream = _this$mediaProperties7.videoStream,
4992
+ shareAudioStream = _this$mediaProperties7.shareAudioStream,
4993
+ shareVideoStream = _this$mediaProperties7.shareVideoStream;
4873
4994
  audioStream === null || audioStream === void 0 ? void 0 : audioStream.off(_mediaHelpers.LocalStreamEventNames.UserMuteStateChange, this.localAudioStreamMuteStateHandler);
4874
4995
  audioStream === null || audioStream === void 0 ? void 0 : audioStream.off(_mediaHelpers.LocalStreamEventNames.SystemMuteStateChange, this.localAudioStreamMuteStateHandler);
4875
4996
  audioStream === null || audioStream === void 0 ? void 0 : audioStream.off(_mediaHelpers.LocalStreamEventNames.OutputTrackChange, this.localOutputTrackChangeHandler);
@@ -4974,6 +5095,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4974
5095
  * Close the peer connections and remove them from the class.
4975
5096
  * Cleanup any media connection related things.
4976
5097
  *
5098
+ * @param {boolean} resetMuteStates whether to also reset the audio/video mute state information
4977
5099
  * @returns {Promise}
4978
5100
  * @public
4979
5101
  * @memberof Meeting
@@ -4981,6 +5103,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4981
5103
  }, {
4982
5104
  key: "closePeerConnections",
4983
5105
  value: function closePeerConnections() {
5106
+ var resetMuteStates = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
4984
5107
  if (this.mediaProperties.webrtcMediaConnection) {
4985
5108
  if (this.remoteMediaManager) {
4986
5109
  this.remoteMediaManager.stop();
@@ -4991,11 +5114,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4991
5114
  });
4992
5115
  this.receiveSlotManager.reset();
4993
5116
  this.mediaProperties.webrtcMediaConnection.close();
5117
+ this.mediaProperties.unsetPeerConnection();
4994
5118
  this.sendSlotManager.reset();
4995
5119
  this.setNetworkStatus(undefined);
4996
5120
  }
4997
- this.audio = null;
4998
- this.video = null;
5121
+ if (resetMuteStates) {
5122
+ this.audio = null;
5123
+ this.video = null;
5124
+ }
4999
5125
  return _promise.default.resolve();
5000
5126
  }
5001
5127
 
@@ -5259,7 +5385,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5259
5385
  * @param {Object} options - options to join with media
5260
5386
  * @param {JoinOptions} [options.joinOptions] - see #join()
5261
5387
  * @param {AddMediaOptions} [options.mediaOptions] - see #addMedia()
5262
- * @returns {Promise} -- {join: see join(), media: see addMedia()}
5388
+ * @returns {Promise} -- {join: see join(), media: see addMedia(), multistreamEnabled: flag to indicate if we managed to join in multistream mode}
5263
5389
  * @public
5264
5390
  * @memberof Meeting
5265
5391
  * @example
@@ -5273,7 +5399,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5273
5399
  }, {
5274
5400
  key: "joinWithMedia",
5275
5401
  value: (function () {
5276
- var _joinWithMedia = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee15() {
5402
+ var _joinWithMedia = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee16() {
5277
5403
  var _this30 = this;
5278
5404
  var options,
5279
5405
  mediaOptions,
@@ -5294,51 +5420,51 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5294
5420
  _leaveError,
5295
5421
  leaveError,
5296
5422
  shouldRetry,
5297
- _args15 = arguments;
5298
- return _regenerator.default.wrap(function _callee15$(_context15) {
5299
- while (1) switch (_context15.prev = _context15.next) {
5423
+ _args16 = arguments;
5424
+ return _regenerator.default.wrap(function _callee16$(_context16) {
5425
+ while (1) switch (_context16.prev = _context16.next) {
5300
5426
  case 0:
5301
- options = _args15.length > 0 && _args15[0] !== undefined ? _args15[0] : {};
5427
+ options = _args16.length > 0 && _args16[0] !== undefined ? _args16[0] : {};
5302
5428
  mediaOptions = options.mediaOptions, _options$joinOptions = options.joinOptions, joinOptions = _options$joinOptions === void 0 ? {} : _options$joinOptions;
5303
5429
  _this$joinWithMediaRe = this.joinWithMediaRetryInfo, isRetry = _this$joinWithMediaRe.isRetry, prevJoinResponse = _this$joinWithMediaRe.prevJoinResponse;
5304
5430
  if (mediaOptions !== null && mediaOptions !== void 0 && mediaOptions.allowMediaInLobby) {
5305
- _context15.next = 5;
5431
+ _context16.next = 5;
5306
5432
  break;
5307
5433
  }
5308
- return _context15.abrupt("return", _promise.default.reject(new _parameter.default('joinWithMedia() can only be used with allowMediaInLobby set to true')));
5434
+ return _context16.abrupt("return", _promise.default.reject(new _parameter.default('joinWithMedia() can only be used with allowMediaInLobby set to true')));
5309
5435
  case 5:
5310
5436
  this.allowMediaInLobby = true;
5311
5437
  _loggerProxy.default.logger.info('Meeting:index#joinWithMedia called');
5312
5438
  joined = false;
5313
5439
  joinResponse = prevJoinResponse;
5314
- _context15.prev = 9;
5440
+ _context16.prev = 9;
5315
5441
  forceTurnDiscovery = false;
5316
5442
  if (joinResponse) {
5317
- _context15.next = 33;
5443
+ _context16.next = 33;
5318
5444
  break;
5319
5445
  }
5320
- _context15.next = 14;
5446
+ _context16.next = 14;
5321
5447
  return this.roap.generateTurnDiscoveryRequestMessage(this, true);
5322
5448
  case 14:
5323
- turnDiscoveryRequest = _context15.sent;
5449
+ turnDiscoveryRequest = _context16.sent;
5324
5450
  turnDiscoverySkippedReason = turnDiscoveryRequest.turnDiscoverySkippedReason;
5325
5451
  joinOptions.roapMessage = turnDiscoveryRequest.roapMessage;
5326
5452
  _loggerProxy.default.logger.info('Meeting:index#joinWithMedia ---> calling join with joinOptions, ', joinOptions);
5327
- _context15.next = 20;
5453
+ _context16.next = 20;
5328
5454
  return this.join(joinOptions);
5329
5455
  case 20:
5330
- joinResponse = _context15.sent;
5456
+ joinResponse = _context16.sent;
5331
5457
  joined = true;
5332
5458
 
5333
5459
  // if we sent out TURN discovery Roap message with join, process the TURN discovery response
5334
5460
  if (!joinOptions.roapMessage) {
5335
- _context15.next = 31;
5461
+ _context16.next = 31;
5336
5462
  break;
5337
5463
  }
5338
- _context15.next = 25;
5464
+ _context16.next = 25;
5339
5465
  return this.roap.handleTurnDiscoveryHttpResponse(this, joinResponse);
5340
5466
  case 25:
5341
- _yield$this$roap$hand = _context15.sent;
5467
+ _yield$this$roap$hand = _context16.sent;
5342
5468
  turnServerInfo = _yield$this$roap$hand.turnServerInfo;
5343
5469
  turnDiscoverySkippedReason = _yield$this$roap$hand.turnDiscoverySkippedReason;
5344
5470
  this.turnDiscoverySkippedReason = turnDiscoverySkippedReason;
@@ -5347,7 +5473,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5347
5473
  this.roap.abortTurnDiscovery();
5348
5474
  }
5349
5475
  case 31:
5350
- _context15.next = 35;
5476
+ _context16.next = 35;
5351
5477
  break;
5352
5478
  case 33:
5353
5479
  // This is a retry, when join succeeded but addMedia failed, so we'll just call addMedia() again,
@@ -5355,82 +5481,85 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5355
5481
  forceTurnDiscovery = true;
5356
5482
  joined = true;
5357
5483
  case 35:
5358
- _context15.next = 37;
5484
+ _context16.next = 37;
5359
5485
  return this.addMediaInternal(function () {
5360
5486
  return _this30.joinWithMediaRetryInfo.isRetry ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
5361
5487
  }, turnServerInfo, forceTurnDiscovery, mediaOptions);
5362
5488
  case 37:
5363
- mediaResponse = _context15.sent;
5489
+ mediaResponse = _context16.sent;
5364
5490
  this.joinWithMediaRetryInfo = {
5365
5491
  isRetry: false,
5366
5492
  prevJoinResponse: undefined
5367
5493
  };
5368
- return _context15.abrupt("return", {
5494
+ return _context16.abrupt("return", {
5369
5495
  join: joinResponse,
5370
- media: mediaResponse
5496
+ media: mediaResponse,
5497
+ multistreamEnabled: this.isMultistream
5371
5498
  });
5372
5499
  case 42:
5373
- _context15.prev = 42;
5374
- _context15.t0 = _context15["catch"](9);
5375
- _loggerProxy.default.logger.error('Meeting:index#joinWithMedia --> ', _context15.t0);
5500
+ _context16.prev = 42;
5501
+ _context16.t0 = _context16["catch"](9);
5502
+ _loggerProxy.default.logger.error('Meeting:index#joinWithMedia --> ', _context16.t0);
5376
5503
  this.roap.abortTurnDiscovery();
5377
- if (!(joined && isRetry)) {
5378
- _context15.next = 56;
5504
+
5505
+ // if this was the first attempt, let's do a retry
5506
+ shouldRetry = !isRetry;
5507
+ if (_internalPluginMetrics.CallDiagnosticUtils.isSdpOfferCreationError(_context16.t0)) {
5508
+ // errors related to offer creation (for example missing H264 codec) will happen again no matter how many times we try,
5509
+ // so there is no point doing a retry
5510
+ shouldRetry = false;
5511
+ }
5512
+
5513
+ // we only want to call leave if join was successful and this was a retry or we won't be doing any more retries
5514
+ if (!(joined && (isRetry || !shouldRetry))) {
5515
+ _context16.next = 58;
5379
5516
  break;
5380
5517
  }
5381
- _context15.prev = 47;
5382
- _context15.next = 50;
5518
+ _context16.prev = 49;
5519
+ _context16.next = 52;
5383
5520
  return this.leave({
5384
5521
  resourceId: joinOptions === null || joinOptions === void 0 ? void 0 : joinOptions.resourceId,
5385
5522
  reason: 'joinWithMedia failure'
5386
5523
  });
5387
- case 50:
5388
- _context15.next = 56;
5389
- break;
5390
5524
  case 52:
5391
- _context15.prev = 52;
5392
- _context15.t1 = _context15["catch"](47);
5393
- _loggerProxy.default.logger.error('Meeting:index#joinWithMedia --> leave error', _context15.t1);
5394
- leaveError = _context15.t1;
5395
- case 56:
5525
+ _context16.next = 58;
5526
+ break;
5527
+ case 54:
5528
+ _context16.prev = 54;
5529
+ _context16.t1 = _context16["catch"](49);
5530
+ _loggerProxy.default.logger.error('Meeting:index#joinWithMedia --> leave error', _context16.t1);
5531
+ leaveError = _context16.t1;
5532
+ case 58:
5396
5533
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_WITH_MEDIA_FAILURE, {
5397
5534
  correlation_id: this.correlationId,
5398
5535
  locus_id: (_this$locusUrl = this.locusUrl) === null || _this$locusUrl === void 0 ? void 0 : _this$locusUrl.split('/').pop(),
5399
5536
  // if join fails, we may end up with no locusUrl
5400
- reason: _context15.t0.message,
5401
- stack: _context15.t0.stack,
5537
+ reason: _context16.t0.message,
5538
+ stack: _context16.t0.stack,
5402
5539
  leaveErrorReason: (_leaveError = leaveError) === null || _leaveError === void 0 ? void 0 : _leaveError.message,
5403
5540
  isRetry: isRetry
5404
5541
  }, {
5405
- type: _context15.t0.name
5542
+ type: _context16.t0.name
5406
5543
  });
5407
-
5408
- // if this was the first attempt, let's do a retry
5409
- shouldRetry = !isRetry;
5410
- if (_internalPluginMetrics.CallDiagnosticUtils.isSdpOfferCreationError(_context15.t0)) {
5411
- // errors related to offer creation (for example missing H264 codec) will happen again no matter how many times we try,
5412
- // so there is no point doing a retry
5413
- shouldRetry = false;
5414
- }
5415
5544
  if (!shouldRetry) {
5416
- _context15.next = 64;
5545
+ _context16.next = 64;
5417
5546
  break;
5418
5547
  }
5419
5548
  _loggerProxy.default.logger.warn('Meeting:index#joinWithMedia --> retrying call to joinWithMedia');
5420
5549
  this.joinWithMediaRetryInfo.isRetry = true;
5421
5550
  this.joinWithMediaRetryInfo.prevJoinResponse = joinResponse;
5422
- return _context15.abrupt("return", this.joinWithMedia(options));
5551
+ return _context16.abrupt("return", this.joinWithMedia(options));
5423
5552
  case 64:
5424
5553
  this.joinWithMediaRetryInfo = {
5425
5554
  isRetry: false,
5426
5555
  prevJoinResponse: undefined
5427
5556
  };
5428
- throw _context15.t0;
5557
+ throw _context16.t0;
5429
5558
  case 66:
5430
5559
  case "end":
5431
- return _context15.stop();
5560
+ return _context16.stop();
5432
5561
  }
5433
- }, _callee15, this, [[9, 42], [47, 52]]);
5562
+ }, _callee16, this, [[9, 42], [49, 54]]);
5434
5563
  }));
5435
5564
  function joinWithMedia() {
5436
5565
  return _joinWithMedia.apply(this, arguments);
@@ -5460,20 +5589,20 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5460
5589
  return _promise.default.reject(new _parameter.default('Cannot reconnect, Media has not established to reconnect'));
5461
5590
  }
5462
5591
  this.cleanUpBeforeReconnection();
5463
- return this.reconnectionManager.reconnect(options, /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee16() {
5464
- return _regenerator.default.wrap(function _callee16$(_context16) {
5465
- while (1) switch (_context16.prev = _context16.next) {
5592
+ return this.reconnectionManager.reconnect(options, /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee17() {
5593
+ return _regenerator.default.wrap(function _callee17$(_context17) {
5594
+ while (1) switch (_context17.prev = _context17.next) {
5466
5595
  case 0:
5467
- _context16.next = 2;
5596
+ _context17.next = 2;
5468
5597
  return _this31.waitForRemoteSDPAnswer();
5469
5598
  case 2:
5470
- _context16.next = 4;
5599
+ _context17.next = 4;
5471
5600
  return _this31.waitForMediaConnectionConnected();
5472
5601
  case 4:
5473
5602
  case "end":
5474
- return _context16.stop();
5603
+ return _context17.stop();
5475
5604
  }
5476
- }, _callee16);
5605
+ }, _callee17);
5477
5606
  }))).then(function () {
5478
5607
  _loggerProxy.default.logger.log('Meeting:index#reconnect --> Meeting reconnect success');
5479
5608
  }).catch(function (error) {
@@ -5614,48 +5743,48 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5614
5743
  }, {
5615
5744
  key: "startTranscription",
5616
5745
  value: (function () {
5617
- var _startTranscription = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee17(options) {
5618
- return _regenerator.default.wrap(function _callee17$(_context17) {
5619
- while (1) switch (_context17.prev = _context17.next) {
5746
+ var _startTranscription = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee18(options) {
5747
+ return _regenerator.default.wrap(function _callee18$(_context18) {
5748
+ while (1) switch (_context18.prev = _context18.next) {
5620
5749
  case 0:
5621
5750
  if (!this.isJoined()) {
5622
- _context17.next = 14;
5751
+ _context18.next = 14;
5623
5752
  break;
5624
5753
  }
5625
5754
  _loggerProxy.default.logger.info('Meeting:index#startTranscription --> Attempting to enable transcription!');
5626
- _context17.prev = 2;
5755
+ _context18.prev = 2;
5627
5756
  if (!this.areVoiceaEventsSetup) {
5628
5757
  this.setUpVoiceaListeners();
5629
5758
  }
5630
5759
 
5631
5760
  // @ts-ignore
5632
- _context17.next = 6;
5761
+ _context18.next = 6;
5633
5762
  return this.webex.internal.voicea.turnOnCaptions(options === null || options === void 0 ? void 0 : options.spokenLanguage);
5634
5763
  case 6:
5635
- _context17.next = 12;
5764
+ _context18.next = 12;
5636
5765
  break;
5637
5766
  case 8:
5638
- _context17.prev = 8;
5639
- _context17.t0 = _context17["catch"](2);
5640
- _loggerProxy.default.logger.error("Meeting:index#startTranscription --> ".concat(_context17.t0));
5767
+ _context18.prev = 8;
5768
+ _context18.t0 = _context18["catch"](2);
5769
+ _loggerProxy.default.logger.error("Meeting:index#startTranscription --> ".concat(_context18.t0));
5641
5770
  _metrics.default.sendBehavioralMetric(_constants2.default.RECEIVE_TRANSCRIPTION_FAILURE, {
5642
5771
  correlation_id: this.correlationId,
5643
- reason: _context17.t0.message,
5644
- stack: _context17.t0.stack
5772
+ reason: _context18.t0.message,
5773
+ stack: _context18.t0.stack
5645
5774
  });
5646
5775
  case 12:
5647
- _context17.next = 16;
5776
+ _context18.next = 16;
5648
5777
  break;
5649
5778
  case 14:
5650
5779
  _loggerProxy.default.logger.error("Meeting:index#startTranscription --> meeting joined : ".concat(this.isJoined()));
5651
5780
  throw new Error('Meeting is not joined');
5652
5781
  case 16:
5653
5782
  case "end":
5654
- return _context17.stop();
5783
+ return _context18.stop();
5655
5784
  }
5656
- }, _callee17, this, [[2, 8]]);
5785
+ }, _callee18, this, [[2, 8]]);
5657
5786
  }));
5658
- function startTranscription(_x15) {
5787
+ function startTranscription(_x16) {
5659
5788
  return _startTranscription.apply(this, arguments);
5660
5789
  }
5661
5790
  return startTranscription;
@@ -5680,6 +5809,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5680
5809
 
5681
5810
  // @ts-ignore
5682
5811
  this.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.NEW_CAPTION, this.voiceaListenerCallbacks[_internalPluginVoicea.EVENT_TRIGGERS.NEW_CAPTION]);
5812
+
5813
+ // @ts-ignore
5814
+ this.webex.internal.voicea.deregisterEvents();
5683
5815
  this.areVoiceaEventsSetup = false;
5684
5816
  this.triggerStopReceivingTranscriptionEvent();
5685
5817
  }
@@ -5716,36 +5848,36 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5716
5848
  * Scenario D: Joining any other way (sip, pstn, conversationUrl, link just need to specify resourceId)
5717
5849
  */
5718
5850
  function () {
5719
- var _join = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee18() {
5851
+ var _join = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee19() {
5720
5852
  var _this34 = this;
5721
5853
  var options,
5722
5854
  errorMessage,
5723
5855
  error,
5724
5856
  joinFailed,
5725
5857
  joinSuccess,
5726
- _errorMessage,
5727
- _error,
5728
5858
  _errorMessage2,
5729
5859
  _error2,
5730
- _args18 = arguments;
5731
- return _regenerator.default.wrap(function _callee18$(_context18) {
5732
- while (1) switch (_context18.prev = _context18.next) {
5860
+ _errorMessage3,
5861
+ _error3,
5862
+ _args19 = arguments;
5863
+ return _regenerator.default.wrap(function _callee19$(_context19) {
5864
+ while (1) switch (_context19.prev = _context19.next) {
5733
5865
  case 0:
5734
- options = _args18.length > 0 && _args18[0] !== undefined ? _args18[0] : {};
5866
+ options = _args19.length > 0 && _args19[0] !== undefined ? _args19[0] : {};
5735
5867
  if (this.webex.meetings.registered) {
5736
- _context18.next = 6;
5868
+ _context19.next = 6;
5737
5869
  break;
5738
5870
  }
5739
5871
  errorMessage = 'Meeting:index#join --> Device not registered';
5740
5872
  error = new Error(errorMessage);
5741
5873
  _loggerProxy.default.logger.error(errorMessage);
5742
- return _context18.abrupt("return", _promise.default.reject(error));
5874
+ return _context19.abrupt("return", _promise.default.reject(error));
5743
5875
  case 6:
5744
5876
  if (!this.deferJoin) {
5745
- _context18.next = 8;
5877
+ _context19.next = 8;
5746
5878
  break;
5747
5879
  }
5748
- return _context18.abrupt("return", this.deferJoin);
5880
+ return _context19.abrupt("return", this.deferJoin);
5749
5881
  case 8:
5750
5882
  // Create a deferred promise for a consistent resolve value from utils.
5751
5883
  // This also prevents redundant API calls.
@@ -5769,18 +5901,21 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5769
5901
  this.meetingFiniteStateMachine.reset();
5770
5902
  }
5771
5903
 
5772
- // @ts-ignore
5773
- this.webex.internal.newMetrics.submitClientEvent({
5774
- name: 'client.call.initiated',
5775
- payload: {
5776
- trigger: this.callStateForMetrics.joinTrigger || 'user-interaction',
5777
- isRoapCallEnabled: true,
5778
- pstnAudioType: options === null || options === void 0 ? void 0 : options.pstnAudioType
5779
- },
5780
- options: {
5781
- meetingId: this.id
5782
- }
5783
- });
5904
+ // send client.call.initiated unless told not to
5905
+ if (options.sendCallInitiated !== false) {
5906
+ // @ts-ignore
5907
+ this.webex.internal.newMetrics.submitClientEvent({
5908
+ name: 'client.call.initiated',
5909
+ payload: {
5910
+ trigger: this.callStateForMetrics.joinTrigger || 'user-interaction',
5911
+ isRoapCallEnabled: true,
5912
+ pstnAudioType: options === null || options === void 0 ? void 0 : options.pstnAudioType
5913
+ },
5914
+ options: {
5915
+ meetingId: this.id
5916
+ }
5917
+ });
5918
+ }
5784
5919
  _loggerProxy.default.logger.log('Meeting:index#join --> Joining a meeting');
5785
5920
  if (this.meetingFiniteStateMachine.state === _constants.MEETING_STATE_MACHINE.STATES.ENDED) {
5786
5921
  this.meetingFiniteStateMachine.reset();
@@ -5794,75 +5929,75 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5794
5929
  this.wirelessShare = true;
5795
5930
  }
5796
5931
  if (!options.meetingQuality) {
5797
- _context18.next = 36;
5932
+ _context19.next = 36;
5798
5933
  break;
5799
5934
  }
5800
5935
  if (!(typeof options.meetingQuality === 'string')) {
5801
- _context18.next = 27;
5936
+ _context19.next = 27;
5802
5937
  break;
5803
5938
  }
5804
5939
  if (_constants.QUALITY_LEVELS[options.meetingQuality]) {
5805
- _context18.next = 26;
5940
+ _context19.next = 26;
5806
5941
  break;
5807
5942
  }
5808
- _errorMessage = "Meeting:index#join --> ".concat(options.meetingQuality, " not defined");
5809
- _error = new Error(_errorMessage);
5810
- _loggerProxy.default.logger.error(_errorMessage);
5811
- joinFailed(_error);
5943
+ _errorMessage2 = "Meeting:index#join --> ".concat(options.meetingQuality, " not defined");
5944
+ _error2 = new Error(_errorMessage2);
5945
+ _loggerProxy.default.logger.error(_errorMessage2);
5946
+ joinFailed(_error2);
5812
5947
  this.deferJoin = undefined;
5813
- return _context18.abrupt("return", _promise.default.reject(_error));
5948
+ return _context19.abrupt("return", _promise.default.reject(_error2));
5814
5949
  case 26:
5815
5950
  this.mediaProperties.setRemoteQualityLevel(options.meetingQuality);
5816
5951
  case 27:
5817
5952
  if (!((0, _typeof2.default)(options.meetingQuality) === 'object')) {
5818
- _context18.next = 36;
5953
+ _context19.next = 36;
5819
5954
  break;
5820
5955
  }
5821
5956
  if (_constants.QUALITY_LEVELS[options.meetingQuality.remote]) {
5822
- _context18.next = 35;
5957
+ _context19.next = 35;
5823
5958
  break;
5824
5959
  }
5825
- _errorMessage2 = "Meeting:index#join --> ".concat(options.meetingQuality.remote, " not defined");
5826
- _loggerProxy.default.logger.error(_errorMessage2);
5827
- _error2 = new Error(_errorMessage2);
5828
- joinFailed(_error2);
5960
+ _errorMessage3 = "Meeting:index#join --> ".concat(options.meetingQuality.remote, " not defined");
5961
+ _loggerProxy.default.logger.error(_errorMessage3);
5962
+ _error3 = new Error(_errorMessage3);
5963
+ joinFailed(_error3);
5829
5964
  this.deferJoin = undefined;
5830
- return _context18.abrupt("return", _promise.default.reject(new Error(_errorMessage2)));
5965
+ return _context19.abrupt("return", _promise.default.reject(new Error(_errorMessage3)));
5831
5966
  case 35:
5832
5967
  if (options.meetingQuality.remote) {
5833
5968
  this.mediaProperties.setRemoteQualityLevel(options.meetingQuality.remote);
5834
5969
  }
5835
5970
  case 36:
5836
5971
  this.isMultistream = !!options.enableMultistream;
5837
- _context18.prev = 37;
5838
- _context18.next = 40;
5972
+ _context19.prev = 37;
5973
+ _context19.next = 40;
5839
5974
  return this.checkAndRefreshPermissionToken(_constants.MEETING_PERMISSION_TOKEN_REFRESH_THRESHOLD_IN_SEC, _constants.MEETING_PERMISSION_TOKEN_REFRESH_REASON);
5840
5975
  case 40:
5841
- _context18.next = 51;
5976
+ _context19.next = 51;
5842
5977
  break;
5843
5978
  case 42:
5844
- _context18.prev = 42;
5845
- _context18.t0 = _context18["catch"](37);
5846
- _loggerProxy.default.logger.error('Meeting:index#join --> Failed to refresh permission token:', _context18.t0);
5847
- if (!(_context18.t0 instanceof _captchaError.default || _context18.t0 instanceof _passwordError.default || _context18.t0 instanceof _permission.default)) {
5848
- _context18.next = 51;
5979
+ _context19.prev = 42;
5980
+ _context19.t0 = _context19["catch"](37);
5981
+ _loggerProxy.default.logger.error('Meeting:index#join --> Failed to refresh permission token:', _context19.t0);
5982
+ if (!(_context19.t0 instanceof _captchaError.default || _context19.t0 instanceof _passwordError.default || _context19.t0 instanceof _permission.default)) {
5983
+ _context19.next = 51;
5849
5984
  break;
5850
5985
  }
5851
- this.meetingFiniteStateMachine.fail(_context18.t0);
5986
+ this.meetingFiniteStateMachine.fail(_context19.t0);
5852
5987
 
5853
5988
  // Upload logs on refreshpermissionToken refresh Failure
5854
5989
  _triggerProxy.default.trigger(this, {
5855
5990
  file: 'meeting/index',
5856
5991
  function: 'join'
5857
5992
  }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, this);
5858
- joinFailed(_context18.t0);
5993
+ joinFailed(_context19.t0);
5859
5994
  this.deferJoin = undefined;
5860
5995
 
5861
5996
  // if refresh permission token requires captcha, password or permission, we are throwing the errors
5862
5997
  // and bubble it up to client
5863
- return _context18.abrupt("return", _promise.default.reject(_context18.t0));
5998
+ return _context19.abrupt("return", _promise.default.reject(_context19.t0));
5864
5999
  case 51:
5865
- return _context18.abrupt("return", _util2.default.joinMeetingOptions(this, options).then(function (join) {
6000
+ return _context19.abrupt("return", _util2.default.joinMeetingOptions(this, options).then(function (join) {
5866
6001
  _this34.meetingFiniteStateMachine.join();
5867
6002
  _this34.setupLocusMediaRequest();
5868
6003
 
@@ -5930,9 +6065,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5930
6065
  }));
5931
6066
  case 52:
5932
6067
  case "end":
5933
- return _context18.stop();
6068
+ return _context19.stop();
5934
6069
  }
5935
- }, _callee18, this, [[37, 42]]);
6070
+ }, _callee19, this, [[37, 42]]);
5936
6071
  }));
5937
6072
  function join() {
5938
6073
  return _join.apply(this, arguments);
@@ -5949,42 +6084,43 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5949
6084
  }, {
5950
6085
  key: "updateLLMConnection",
5951
6086
  value: (function () {
5952
- var _updateLLMConnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee19() {
6087
+ var _updateLLMConnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee20() {
5953
6088
  var _this35 = this;
5954
- var _this$locusInfo6, url, _this$locusInfo6$info, _this$locusInfo6$info2, datachannelUrl, isJoined;
5955
- return _regenerator.default.wrap(function _callee19$(_context19) {
5956
- while (1) switch (_context19.prev = _context19.next) {
6089
+ var _this$locusInfo6, url, _this$locusInfo6$info, _this$locusInfo6$info2, datachannelUrl, practiceSessionDatachannelUrl, isJoined, dataChannelUrl;
6090
+ return _regenerator.default.wrap(function _callee20$(_context20) {
6091
+ while (1) switch (_context20.prev = _context20.next) {
5957
6092
  case 0:
5958
6093
  // @ts-ignore - Fix type
5959
- _this$locusInfo6 = this.locusInfo, url = _this$locusInfo6.url, _this$locusInfo6$info = _this$locusInfo6.info, _this$locusInfo6$info2 = _this$locusInfo6$info === void 0 ? {} : _this$locusInfo6$info, datachannelUrl = _this$locusInfo6$info2.datachannelUrl;
5960
- isJoined = this.isJoined(); // @ts-ignore - Fix type
6094
+ _this$locusInfo6 = this.locusInfo, url = _this$locusInfo6.url, _this$locusInfo6$info = _this$locusInfo6.info, _this$locusInfo6$info2 = _this$locusInfo6$info === void 0 ? {} : _this$locusInfo6$info, datachannelUrl = _this$locusInfo6$info2.datachannelUrl, practiceSessionDatachannelUrl = _this$locusInfo6$info2.practiceSessionDatachannelUrl;
6095
+ isJoined = this.isJoined(); // webinar panelist should use new data channel in practice session
6096
+ dataChannelUrl = this.webinar.isJoinPracticeSessionDataChannel() && practiceSessionDatachannelUrl ? practiceSessionDatachannelUrl : datachannelUrl; // @ts-ignore - Fix type
5961
6097
  if (!this.webex.internal.llm.isConnected()) {
5962
- _context19.next = 8;
6098
+ _context20.next = 9;
5963
6099
  break;
5964
6100
  }
5965
6101
  if (!(
5966
6102
  // @ts-ignore - Fix type
5967
6103
  url === this.webex.internal.llm.getLocusUrl() &&
5968
6104
  // @ts-ignore - Fix type
5969
- datachannelUrl === this.webex.internal.llm.getDatachannelUrl() && isJoined)) {
5970
- _context19.next = 5;
6105
+ dataChannelUrl === this.webex.internal.llm.getDatachannelUrl() && isJoined)) {
6106
+ _context20.next = 6;
5971
6107
  break;
5972
6108
  }
5973
- return _context19.abrupt("return", undefined);
5974
- case 5:
5975
- _context19.next = 7;
6109
+ return _context20.abrupt("return", undefined);
6110
+ case 6:
6111
+ _context20.next = 8;
5976
6112
  return this.webex.internal.llm.disconnectLLM();
5977
- case 7:
6113
+ case 8:
5978
6114
  // @ts-ignore - Fix type
5979
6115
  this.webex.internal.llm.off('event:relay.event', this.processRelayEvent);
5980
- case 8:
6116
+ case 9:
5981
6117
  if (isJoined) {
5982
- _context19.next = 10;
6118
+ _context20.next = 11;
5983
6119
  break;
5984
6120
  }
5985
- return _context19.abrupt("return", undefined);
5986
- case 10:
5987
- return _context19.abrupt("return", this.webex.internal.llm.registerAndConnect(url, datachannelUrl).then(function (registerAndConnectResult) {
6121
+ return _context20.abrupt("return", undefined);
6122
+ case 11:
6123
+ return _context20.abrupt("return", this.webex.internal.llm.registerAndConnect(url, dataChannelUrl).then(function (registerAndConnectResult) {
5988
6124
  // @ts-ignore - Fix type
5989
6125
  _this35.webex.internal.llm.off('event:relay.event', _this35.processRelayEvent);
5990
6126
  // @ts-ignore - Fix type
@@ -5992,11 +6128,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5992
6128
  _loggerProxy.default.logger.info('Meeting:index#updateLLMConnection --> enabled to receive relay events!');
5993
6129
  return _promise.default.resolve(registerAndConnectResult);
5994
6130
  }));
5995
- case 11:
6131
+ case 12:
5996
6132
  case "end":
5997
- return _context19.stop();
6133
+ return _context20.stop();
5998
6134
  }
5999
- }, _callee19, this);
6135
+ }, _callee20, this);
6000
6136
  }));
6001
6137
  function updateLLMConnection() {
6002
6138
  return _updateLLMConnection.apply(this, arguments);
@@ -6168,17 +6304,17 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6168
6304
  meetingId: this.id
6169
6305
  }
6170
6306
  });
6171
- this.locusInfo.once(_constants.LOCUSINFO.EVENTS.SELF_OBSERVING, /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee20() {
6307
+ this.locusInfo.once(_constants.LOCUSINFO.EVENTS.SELF_OBSERVING, /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee21() {
6172
6308
  var mediaSettings;
6173
- return _regenerator.default.wrap(function _callee20$(_context20) {
6174
- while (1) switch (_context20.prev = _context20.next) {
6309
+ return _regenerator.default.wrap(function _callee21$(_context21) {
6310
+ while (1) switch (_context21.prev = _context21.next) {
6175
6311
  case 0:
6176
- _context20.prev = 0;
6312
+ _context21.prev = 0;
6177
6313
  if (!(_this38.screenShareFloorState === ScreenShareFloorStatus.GRANTED)) {
6178
- _context20.next = 4;
6314
+ _context21.next = 4;
6179
6315
  break;
6180
6316
  }
6181
- _context20.next = 4;
6317
+ _context21.next = 4;
6182
6318
  return _this38.releaseScreenShareFloor();
6183
6319
  case 4:
6184
6320
  mediaSettings = {
@@ -6197,23 +6333,23 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6197
6333
  // when a move to is intiated by the client , Locus delets the existing media node from the server as soon the device answers the meeting
6198
6334
  // once the device answers we close the old connection and create new media server connection with only share enabled
6199
6335
  if (!_this38.statsAnalyzer) {
6200
- _context20.next = 10;
6336
+ _context21.next = 10;
6201
6337
  break;
6202
6338
  }
6203
- _context20.next = 10;
6339
+ _context21.next = 10;
6204
6340
  return _this38.statsAnalyzer.stopAnalyzer();
6205
6341
  case 10:
6206
- _context20.next = 12;
6342
+ _context21.next = 12;
6207
6343
  return _this38.closeRemoteStreams();
6208
6344
  case 12:
6209
- _context20.next = 14;
6345
+ _context21.next = 14;
6210
6346
  return _this38.closePeerConnections();
6211
6347
  case 14:
6212
6348
  _this38.cleanupLocalStreams();
6213
6349
  _this38.unsetRemoteStreams();
6214
6350
  _this38.unsetPeerConnections();
6215
6351
  _this38.reconnectionManager.cleanUp();
6216
- _context20.next = 20;
6352
+ _context21.next = 20;
6217
6353
  return _this38.addMedia({
6218
6354
  audioEnabled: false,
6219
6355
  videoEnabled: false,
@@ -6222,24 +6358,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6222
6358
  case 20:
6223
6359
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_SUCCESS);
6224
6360
  _this38.isMoveToInProgress = false;
6225
- _context20.next = 29;
6361
+ _context21.next = 29;
6226
6362
  break;
6227
6363
  case 24:
6228
- _context20.prev = 24;
6229
- _context20.t0 = _context20["catch"](0);
6230
- _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', _context20.t0);
6364
+ _context21.prev = 24;
6365
+ _context21.t0 = _context21["catch"](0);
6366
+ _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', _context21.t0);
6231
6367
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
6232
6368
  correlation_id: _this38.correlationId,
6233
6369
  locus_id: _this38.locusUrl.split('/').pop(),
6234
- reason: _context20.t0.message,
6235
- stack: _context20.t0.stack
6370
+ reason: _context21.t0.message,
6371
+ stack: _context21.t0.stack
6236
6372
  });
6237
6373
  _this38.isMoveToInProgress = false;
6238
6374
  case 29:
6239
6375
  case "end":
6240
- return _context20.stop();
6376
+ return _context21.stop();
6241
6377
  }
6242
- }, _callee20, null, [[0, 24]]);
6378
+ }, _callee21, null, [[0, 24]]);
6243
6379
  })));
6244
6380
  _loggerProxy.default.logger.info('Meeting:index#moveTo --> Initated moved to using resourceId', resourceId);
6245
6381
 
@@ -6327,16 +6463,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6327
6463
  }, {
6328
6464
  key: "createMediaConnection",
6329
6465
  value: (function () {
6330
- var _createMediaConnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee21(turnServerInfo, bundlePolicy) {
6466
+ var _createMediaConnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee22(turnServerInfo, bundlePolicy) {
6331
6467
  var mc, audioEnabled, videoEnabled, shareEnabled;
6332
- return _regenerator.default.wrap(function _callee21$(_context21) {
6333
- while (1) switch (_context21.prev = _context21.next) {
6468
+ return _regenerator.default.wrap(function _callee22$(_context22) {
6469
+ while (1) switch (_context22.prev = _context22.next) {
6334
6470
  case 0:
6335
6471
  this.rtcMetrics = this.isMultistream ?
6336
6472
  // @ts-ignore
6337
6473
  new _internalPluginMetrics.RtcMetrics(this.webex, {
6338
6474
  meetingId: this.id
6339
6475
  }, this.correlationId) : undefined;
6476
+
6477
+ // ongoing reachability checks slow down new media connections especially on Firefox, so we stop them
6478
+ this.getWebexObject().meetings.reachability.stopReachability();
6340
6479
  mc = _media.default.createMediaConnection(this.isMultistream, this.getMediaConnectionDebugId(), this.id, {
6341
6480
  rtcMetrics: this.rtcMetrics,
6342
6481
  mediaProperties: this.mediaProperties,
@@ -6362,42 +6501,42 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6362
6501
 
6363
6502
  // publish the streams
6364
6503
  if (!this.mediaProperties.audioStream) {
6365
- _context21.next = 9;
6504
+ _context22.next = 10;
6366
6505
  break;
6367
6506
  }
6368
6507
  this.setSendNamedMediaGroup(_internalMediaCore.MediaType.AudioMain);
6369
- _context21.next = 9;
6508
+ _context22.next = 10;
6370
6509
  return this.publishStream(_internalMediaCore.MediaType.AudioMain, this.mediaProperties.audioStream);
6371
- case 9:
6510
+ case 10:
6372
6511
  if (!this.mediaProperties.videoStream) {
6373
- _context21.next = 12;
6512
+ _context22.next = 13;
6374
6513
  break;
6375
6514
  }
6376
- _context21.next = 12;
6515
+ _context22.next = 13;
6377
6516
  return this.publishStream(_internalMediaCore.MediaType.VideoMain, this.mediaProperties.videoStream);
6378
- case 12:
6517
+ case 13:
6379
6518
  if (!this.mediaProperties.shareVideoStream) {
6380
- _context21.next = 15;
6519
+ _context22.next = 16;
6381
6520
  break;
6382
6521
  }
6383
- _context21.next = 15;
6522
+ _context22.next = 16;
6384
6523
  return this.publishStream(_internalMediaCore.MediaType.VideoSlides, this.mediaProperties.shareVideoStream);
6385
- case 15:
6524
+ case 16:
6386
6525
  if (!(this.isMultistream && this.mediaProperties.shareAudioStream)) {
6387
- _context21.next = 18;
6526
+ _context22.next = 19;
6388
6527
  break;
6389
6528
  }
6390
- _context21.next = 18;
6529
+ _context22.next = 19;
6391
6530
  return this.publishStream(_internalMediaCore.MediaType.AudioSlides, this.mediaProperties.shareAudioStream);
6392
- case 18:
6393
- return _context21.abrupt("return", mc);
6394
6531
  case 19:
6532
+ return _context22.abrupt("return", mc);
6533
+ case 20:
6395
6534
  case "end":
6396
- return _context21.stop();
6535
+ return _context22.stop();
6397
6536
  }
6398
- }, _callee21, this);
6537
+ }, _callee22, this);
6399
6538
  }));
6400
- function createMediaConnection(_x16, _x17) {
6539
+ function createMediaConnection(_x17, _x18) {
6401
6540
  return _createMediaConnection.apply(this, arguments);
6402
6541
  }
6403
6542
  return createMediaConnection;
@@ -6435,11 +6574,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6435
6574
  }, {
6436
6575
  key: "setUpLocalStreamReferences",
6437
6576
  value: (function () {
6438
- var _setUpLocalStreamReferences = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee22(localStreams) {
6577
+ var _setUpLocalStreamReferences = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee23(localStreams) {
6439
6578
  var _localStreams$microph, _localStreams$camera, _localStreams$screenS, _localStreams$screenS2, _localStreams$screenS3, _localStreams$screenS4, _localStreams$screenS5, _localStreams$screenS6;
6440
6579
  var setUpStreamPromises;
6441
- return _regenerator.default.wrap(function _callee22$(_context22) {
6442
- while (1) switch (_context22.prev = _context22.next) {
6580
+ return _regenerator.default.wrap(function _callee23$(_context23) {
6581
+ while (1) switch (_context23.prev = _context23.next) {
6443
6582
  case 0:
6444
6583
  setUpStreamPromises = [];
6445
6584
  if (localStreams !== null && localStreams !== void 0 && localStreams.microphone && (localStreams === null || localStreams === void 0 ? void 0 : (_localStreams$microph = localStreams.microphone) === null || _localStreams$microph === void 0 ? void 0 : _localStreams$microph.readyState) !== 'ended') {
@@ -6454,24 +6593,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6454
6593
  if (localStreams !== null && localStreams !== void 0 && (_localStreams$screenS4 = localStreams.screenShare) !== null && _localStreams$screenS4 !== void 0 && _localStreams$screenS4.audio && (localStreams === null || localStreams === void 0 ? void 0 : (_localStreams$screenS5 = localStreams.screenShare) === null || _localStreams$screenS5 === void 0 ? void 0 : (_localStreams$screenS6 = _localStreams$screenS5.audio) === null || _localStreams$screenS6 === void 0 ? void 0 : _localStreams$screenS6.readyState) !== 'ended') {
6455
6594
  setUpStreamPromises.push(this.setLocalShareAudioStream(localStreams.screenShare.audio));
6456
6595
  }
6457
- _context22.prev = 5;
6458
- _context22.next = 8;
6596
+ _context23.prev = 5;
6597
+ _context23.next = 8;
6459
6598
  return _promise.default.all(setUpStreamPromises);
6460
6599
  case 8:
6461
- _context22.next = 14;
6600
+ _context23.next = 14;
6462
6601
  break;
6463
6602
  case 10:
6464
- _context22.prev = 10;
6465
- _context22.t0 = _context22["catch"](5);
6466
- _loggerProxy.default.logger.error("Meeting:index#addMedia():setUpLocalStreamReferences --> Error , ", _context22.t0);
6467
- throw _context22.t0;
6603
+ _context23.prev = 10;
6604
+ _context23.t0 = _context23["catch"](5);
6605
+ _loggerProxy.default.logger.error("Meeting:index#addMedia():setUpLocalStreamReferences --> Error , ", _context23.t0);
6606
+ throw _context23.t0;
6468
6607
  case 14:
6469
6608
  case "end":
6470
- return _context22.stop();
6609
+ return _context23.stop();
6471
6610
  }
6472
- }, _callee22, this, [[5, 10]]);
6611
+ }, _callee23, this, [[5, 10]]);
6473
6612
  }));
6474
- function setUpLocalStreamReferences(_x18) {
6613
+ function setUpLocalStreamReferences(_x19) {
6475
6614
  return _setUpLocalStreamReferences.apply(this, arguments);
6476
6615
  }
6477
6616
  return setUpLocalStreamReferences;
@@ -6486,72 +6625,72 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6486
6625
  }, {
6487
6626
  key: "waitForMediaConnectionConnected",
6488
6627
  value: (function () {
6489
- var _waitForMediaConnectionConnected = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee23() {
6490
- var iceConnected, _this$mediaProperties6, _this$mediaProperties7, _this$mediaProperties8, _this$mediaProperties9, _this$mediaProperties10, _this$mediaProperties11, _this$mediaProperties12;
6491
- return _regenerator.default.wrap(function _callee23$(_context23) {
6492
- while (1) switch (_context23.prev = _context23.next) {
6628
+ var _waitForMediaConnectionConnected = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee24() {
6629
+ var iceConnected, _this$mediaProperties8, _this$mediaProperties9, _this$mediaProperties10, _this$mediaProperties11, _this$mediaProperties12, _this$mediaProperties13, _this$mediaProperties14;
6630
+ return _regenerator.default.wrap(function _callee24$(_context24) {
6631
+ while (1) switch (_context24.prev = _context24.next) {
6493
6632
  case 0:
6494
- _context23.prev = 0;
6495
- _context23.next = 3;
6633
+ _context24.prev = 0;
6634
+ _context24.next = 3;
6496
6635
  return this.mediaProperties.waitForMediaConnectionConnected();
6497
6636
  case 3:
6498
- _context23.next = 30;
6637
+ _context24.next = 30;
6499
6638
  break;
6500
6639
  case 5:
6501
- _context23.prev = 5;
6502
- _context23.t0 = _context23["catch"](0);
6503
- iceConnected = _context23.t0.iceConnected;
6640
+ _context24.prev = 5;
6641
+ _context24.t0 = _context24["catch"](0);
6642
+ iceConnected = _context24.t0.iceConnected;
6504
6643
  if (this.hasMediaConnectionConnectedAtLeastOnce) {
6505
- _context23.next = 29;
6644
+ _context24.next = 29;
6506
6645
  break;
6507
6646
  }
6508
- _context23.t1 = this.webex.internal.newMetrics;
6509
- _context23.t2 = !this.turnServerUsed;
6510
- _context23.t3 = this.addMediaData.icePhaseCallback();
6511
- _context23.t4 = this.webex.internal.newMetrics.callDiagnosticMetrics;
6512
- _context23.t5 = _internalPluginMetrics.CallDiagnosticUtils;
6513
- _context23.t6 = ((_this$mediaProperties6 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties6 === void 0 ? void 0 : (_this$mediaProperties7 = _this$mediaProperties6.multistreamConnection) === null || _this$mediaProperties7 === void 0 ? void 0 : (_this$mediaProperties8 = _this$mediaProperties7.pc) === null || _this$mediaProperties8 === void 0 ? void 0 : (_this$mediaProperties9 = _this$mediaProperties8.pc) === null || _this$mediaProperties9 === void 0 ? void 0 : _this$mediaProperties9.signalingState) || ((_this$mediaProperties10 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties10 === void 0 ? void 0 : (_this$mediaProperties11 = _this$mediaProperties10.mediaConnection) === null || _this$mediaProperties11 === void 0 ? void 0 : (_this$mediaProperties12 = _this$mediaProperties11.pc) === null || _this$mediaProperties12 === void 0 ? void 0 : _this$mediaProperties12.signalingState) || 'unknown';
6514
- _context23.t7 = iceConnected;
6515
- _context23.t8 = this.turnServerUsed;
6516
- _context23.next = 19;
6647
+ _context24.t1 = this.webex.internal.newMetrics;
6648
+ _context24.t2 = !this.turnServerUsed;
6649
+ _context24.t3 = this.addMediaData.icePhaseCallback();
6650
+ _context24.t4 = this.webex.internal.newMetrics.callDiagnosticMetrics;
6651
+ _context24.t5 = _internalPluginMetrics.CallDiagnosticUtils;
6652
+ _context24.t6 = ((_this$mediaProperties8 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties8 === void 0 ? void 0 : (_this$mediaProperties9 = _this$mediaProperties8.multistreamConnection) === null || _this$mediaProperties9 === void 0 ? void 0 : (_this$mediaProperties10 = _this$mediaProperties9.pc) === null || _this$mediaProperties10 === void 0 ? void 0 : (_this$mediaProperties11 = _this$mediaProperties10.pc) === null || _this$mediaProperties11 === void 0 ? void 0 : _this$mediaProperties11.signalingState) || ((_this$mediaProperties12 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties12 === void 0 ? void 0 : (_this$mediaProperties13 = _this$mediaProperties12.mediaConnection) === null || _this$mediaProperties13 === void 0 ? void 0 : (_this$mediaProperties14 = _this$mediaProperties13.pc) === null || _this$mediaProperties14 === void 0 ? void 0 : _this$mediaProperties14.signalingState) || 'unknown';
6653
+ _context24.t7 = iceConnected;
6654
+ _context24.t8 = this.turnServerUsed;
6655
+ _context24.next = 19;
6517
6656
  return this.webex.meetings.reachability.isWebexMediaBackendUnreachable().catch(function () {
6518
6657
  return false;
6519
6658
  });
6520
6659
  case 19:
6521
- _context23.t9 = _context23.sent;
6522
- _context23.t10 = {
6523
- signalingState: _context23.t6,
6524
- iceConnected: _context23.t7,
6525
- turnServerUsed: _context23.t8,
6526
- unreachable: _context23.t9
6660
+ _context24.t9 = _context24.sent;
6661
+ _context24.t10 = {
6662
+ signalingState: _context24.t6,
6663
+ iceConnected: _context24.t7,
6664
+ turnServerUsed: _context24.t8,
6665
+ unreachable: _context24.t9
6527
6666
  };
6528
- _context23.t11 = _context23.t5.generateClientErrorCodeForIceFailure.call(_context23.t5, _context23.t10);
6529
- _context23.t12 = {
6530
- clientErrorCode: _context23.t11
6667
+ _context24.t11 = _context24.t5.generateClientErrorCodeForIceFailure.call(_context24.t5, _context24.t10);
6668
+ _context24.t12 = {
6669
+ clientErrorCode: _context24.t11
6531
6670
  };
6532
- _context23.t13 = _context23.t4.getErrorPayloadForClientErrorCode.call(_context23.t4, _context23.t12);
6533
- _context23.t14 = [_context23.t13];
6534
- _context23.t15 = {
6535
- canProceed: _context23.t2,
6536
- icePhase: _context23.t3,
6537
- errors: _context23.t14
6671
+ _context24.t13 = _context24.t4.getErrorPayloadForClientErrorCode.call(_context24.t4, _context24.t12);
6672
+ _context24.t14 = [_context24.t13];
6673
+ _context24.t15 = {
6674
+ canProceed: _context24.t2,
6675
+ icePhase: _context24.t3,
6676
+ errors: _context24.t14
6538
6677
  };
6539
- _context23.t16 = {
6678
+ _context24.t16 = {
6540
6679
  meetingId: this.id
6541
6680
  };
6542
- _context23.t17 = {
6681
+ _context24.t17 = {
6543
6682
  name: 'client.ice.end',
6544
- payload: _context23.t15,
6545
- options: _context23.t16
6683
+ payload: _context24.t15,
6684
+ options: _context24.t16
6546
6685
  };
6547
- _context23.t1.submitClientEvent.call(_context23.t1, _context23.t17);
6686
+ _context24.t1.submitClientEvent.call(_context24.t1, _context24.t17);
6548
6687
  case 29:
6549
6688
  throw new Error("Timed out waiting for media connection to be connected, correlationId=".concat(this.correlationId));
6550
6689
  case 30:
6551
6690
  case "end":
6552
- return _context23.stop();
6691
+ return _context24.stop();
6553
6692
  }
6554
- }, _callee23, this, [[0, 5]]);
6693
+ }, _callee24, this, [[0, 5]]);
6555
6694
  }));
6556
6695
  function waitForMediaConnectionConnected() {
6557
6696
  return _waitForMediaConnectionConnected.apply(this, arguments);
@@ -6583,18 +6722,6 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6583
6722
  }
6584
6723
  }
6585
6724
 
6586
- /**
6587
- * Handles device logging
6588
- *
6589
- * @private
6590
- * @static
6591
- * @param {boolean} isAudioEnabled
6592
- * @param {boolean} isVideoEnabled
6593
- * @returns {Promise<void>}
6594
- */
6595
- }, {
6596
- key: "waitForRemoteSDPAnswer",
6597
- value: (
6598
6725
  /**
6599
6726
  * Returns a promise. This promise is created once the local sdp offer has been successfully created and is resolved
6600
6727
  * once the remote sdp answer has been received.
@@ -6602,20 +6729,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6602
6729
  * @private
6603
6730
  * @returns {Promise<void>}
6604
6731
  */
6605
- function () {
6606
- var _waitForRemoteSDPAnswer = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee24() {
6732
+ }, {
6733
+ key: "waitForRemoteSDPAnswer",
6734
+ value: (function () {
6735
+ var _waitForRemoteSDPAnswer = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee25() {
6607
6736
  var _this41 = this;
6608
6737
  var LOG_HEADER, deferSDPAnswer;
6609
- return _regenerator.default.wrap(function _callee24$(_context24) {
6610
- while (1) switch (_context24.prev = _context24.next) {
6738
+ return _regenerator.default.wrap(function _callee25$(_context25) {
6739
+ while (1) switch (_context25.prev = _context25.next) {
6611
6740
  case 0:
6612
6741
  LOG_HEADER = 'Meeting:index#addMedia():waitForRemoteSDPAnswer -->';
6613
6742
  if (this.deferSDPAnswer) {
6614
- _context24.next = 4;
6743
+ _context25.next = 4;
6615
6744
  break;
6616
6745
  }
6617
6746
  _loggerProxy.default.logger.warn("".concat(LOG_HEADER, " offer not created yet"));
6618
- return _context24.abrupt("return", _promise.default.reject(new Error('waitForRemoteSDPAnswer() called before local sdp offer created')));
6747
+ return _context25.abrupt("return", _promise.default.reject(new Error('waitForRemoteSDPAnswer() called before local sdp offer created')));
6619
6748
  case 4:
6620
6749
  deferSDPAnswer = this.deferSDPAnswer;
6621
6750
  this.sdpResponseTimer = setTimeout(function () {
@@ -6639,12 +6768,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6639
6768
  deferSDPAnswer.reject(new Error('Timed out waiting for REMOTE SDP ANSWER'));
6640
6769
  }, _constants.ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT);
6641
6770
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " waiting for REMOTE SDP ANSWER..."));
6642
- return _context24.abrupt("return", deferSDPAnswer.promise);
6771
+ return _context25.abrupt("return", deferSDPAnswer.promise);
6643
6772
  case 8:
6644
6773
  case "end":
6645
- return _context24.stop();
6774
+ return _context25.stop();
6646
6775
  }
6647
- }, _callee24, this);
6776
+ }, _callee25, this);
6648
6777
  }));
6649
6778
  function waitForRemoteSDPAnswer() {
6650
6779
  return _waitForRemoteSDPAnswer.apply(this, arguments);
@@ -6663,30 +6792,30 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6663
6792
  }, {
6664
6793
  key: "retryEstablishMediaConnectionWithForcedTurnDiscovery",
6665
6794
  value: (function () {
6666
- var _retryEstablishMediaConnectionWithForcedTurnDiscovery = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee25(remoteMediaManagerConfig, bundlePolicy) {
6795
+ var _retryEstablishMediaConnectionWithForcedTurnDiscovery = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee26(remoteMediaManagerConfig, bundlePolicy) {
6667
6796
  var LOG_HEADER;
6668
- return _regenerator.default.wrap(function _callee25$(_context25) {
6669
- while (1) switch (_context25.prev = _context25.next) {
6797
+ return _regenerator.default.wrap(function _callee26$(_context26) {
6798
+ while (1) switch (_context26.prev = _context26.next) {
6670
6799
  case 0:
6671
6800
  LOG_HEADER = 'Meeting:index#addMedia():retryEstablishMediaConnectionWithForcedTurnDiscovery -->';
6672
- _context25.prev = 1;
6673
- _context25.next = 4;
6801
+ _context26.prev = 1;
6802
+ _context26.next = 4;
6674
6803
  return this.establishMediaConnection(remoteMediaManagerConfig, bundlePolicy, true);
6675
6804
  case 4:
6676
- _context25.next = 10;
6805
+ _context26.next = 10;
6677
6806
  break;
6678
6807
  case 6:
6679
- _context25.prev = 6;
6680
- _context25.t0 = _context25["catch"](1);
6681
- _loggerProxy.default.logger.error("".concat(LOG_HEADER, " retry with TURN-TLS failed, media connection unable to connect, "), _context25.t0);
6682
- throw _context25.t0;
6808
+ _context26.prev = 6;
6809
+ _context26.t0 = _context26["catch"](1);
6810
+ _loggerProxy.default.logger.error("".concat(LOG_HEADER, " retry with TURN-TLS failed, media connection unable to connect, "), _context26.t0);
6811
+ throw _context26.t0;
6683
6812
  case 10:
6684
6813
  case "end":
6685
- return _context25.stop();
6814
+ return _context26.stop();
6686
6815
  }
6687
- }, _callee25, this, [[1, 6]]);
6816
+ }, _callee26, this, [[1, 6]]);
6688
6817
  }));
6689
- function retryEstablishMediaConnectionWithForcedTurnDiscovery(_x19, _x20) {
6818
+ function retryEstablishMediaConnectionWithForcedTurnDiscovery(_x20, _x21) {
6690
6819
  return _retryEstablishMediaConnectionWithForcedTurnDiscovery.apply(this, arguments);
6691
6820
  }
6692
6821
  return retryEstablishMediaConnectionWithForcedTurnDiscovery;
@@ -6704,14 +6833,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6704
6833
  }, {
6705
6834
  key: "retryWithForcedTurnDiscovery",
6706
6835
  value: (function () {
6707
- var _retryWithForcedTurnDiscovery = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee26(remoteMediaManagerConfig, bundlePolicy) {
6836
+ var _retryWithForcedTurnDiscovery = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee27(remoteMediaManagerConfig, bundlePolicy) {
6708
6837
  var LOG_HEADER;
6709
- return _regenerator.default.wrap(function _callee26$(_context26) {
6710
- while (1) switch (_context26.prev = _context26.next) {
6838
+ return _regenerator.default.wrap(function _callee27$(_context27) {
6839
+ while (1) switch (_context27.prev = _context27.next) {
6711
6840
  case 0:
6712
6841
  this.addMediaData.retriedWithTurnServer = true;
6713
6842
  LOG_HEADER = 'Meeting:index#addMedia():retryWithForcedTurnDiscovery -->';
6714
- _context26.next = 4;
6843
+ _context27.next = 4;
6715
6844
  return this.cleanUpBeforeRetryWithTurnServer();
6716
6845
  case 4:
6717
6846
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_RETRY, {
@@ -6721,24 +6850,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6721
6850
  reason: 'forcingTurnTls'
6722
6851
  });
6723
6852
  if (!(this.state === _constants.MEETING_STATE.STATES.LEFT)) {
6724
- _context26.next = 9;
6853
+ _context27.next = 9;
6725
6854
  break;
6726
6855
  }
6727
6856
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " meeting state was LEFT after first attempt to establish media connection. Attempting to rejoin. "));
6728
- _context26.next = 9;
6857
+ _context27.next = 9;
6729
6858
  return this.join({
6730
6859
  rejoin: true
6731
6860
  });
6732
6861
  case 9:
6733
- _context26.next = 11;
6862
+ _context27.next = 11;
6734
6863
  return this.retryEstablishMediaConnectionWithForcedTurnDiscovery(remoteMediaManagerConfig, bundlePolicy);
6735
6864
  case 11:
6736
6865
  case "end":
6737
- return _context26.stop();
6866
+ return _context27.stop();
6738
6867
  }
6739
- }, _callee26, this);
6868
+ }, _callee27, this);
6740
6869
  }));
6741
- function retryWithForcedTurnDiscovery(_x21, _x22) {
6870
+ function retryWithForcedTurnDiscovery(_x22, _x23) {
6742
6871
  return _retryWithForcedTurnDiscovery.apply(this, arguments);
6743
6872
  }
6744
6873
  return retryWithForcedTurnDiscovery;
@@ -6758,32 +6887,32 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6758
6887
  }, {
6759
6888
  key: "handleWaitForMediaConnectionConnectedError",
6760
6889
  value: (function () {
6761
- var _handleWaitForMediaConnectionConnectedError = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee27(error, remoteMediaManagerConfig, bundlePolicy) {
6890
+ var _handleWaitForMediaConnectionConnectedError = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee28(error, remoteMediaManagerConfig, bundlePolicy) {
6762
6891
  var LOG_HEADER;
6763
- return _regenerator.default.wrap(function _callee27$(_context27) {
6764
- while (1) switch (_context27.prev = _context27.next) {
6892
+ return _regenerator.default.wrap(function _callee28$(_context28) {
6893
+ while (1) switch (_context28.prev = _context28.next) {
6765
6894
  case 0:
6766
6895
  LOG_HEADER = 'Meeting:index#addMedia():handleWaitForMediaConnectionConnectedError -->'; // @ts-ignore - config coming from registerPlugin
6767
6896
  if (this.turnServerUsed) {
6768
- _context27.next = 7;
6897
+ _context28.next = 7;
6769
6898
  break;
6770
6899
  }
6771
6900
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " error waiting for media to connect on UDP, TCP, retrying using TURN-TLS, "), error);
6772
- _context27.next = 5;
6901
+ _context28.next = 5;
6773
6902
  return this.retryWithForcedTurnDiscovery(remoteMediaManagerConfig, bundlePolicy);
6774
6903
  case 5:
6775
- _context27.next = 9;
6904
+ _context28.next = 9;
6776
6905
  break;
6777
6906
  case 7:
6778
6907
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " error waiting for media to connect using UDP, TCP and TURN-TLS"), error);
6779
6908
  throw new _webexErrors.AddMediaFailed();
6780
6909
  case 9:
6781
6910
  case "end":
6782
- return _context27.stop();
6911
+ return _context28.stop();
6783
6912
  }
6784
- }, _callee27, this);
6913
+ }, _callee28, this);
6785
6914
  }));
6786
- function handleWaitForMediaConnectionConnectedError(_x23, _x24, _x25) {
6915
+ function handleWaitForMediaConnectionConnectedError(_x24, _x25, _x26) {
6787
6916
  return _handleWaitForMediaConnectionConnectedError.apply(this, arguments);
6788
6917
  }
6789
6918
  return handleWaitForMediaConnectionConnectedError;
@@ -6799,20 +6928,20 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6799
6928
  }, {
6800
6929
  key: "doTurnDiscovery",
6801
6930
  value: (function () {
6802
- var _doTurnDiscovery = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee28(isReconnecting, isForced) {
6931
+ var _doTurnDiscovery = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee29(isReconnecting, isForced) {
6803
6932
  var cdl, turnDiscoveryResult;
6804
- return _regenerator.default.wrap(function _callee28$(_context28) {
6805
- while (1) switch (_context28.prev = _context28.next) {
6933
+ return _regenerator.default.wrap(function _callee29$(_context29) {
6934
+ while (1) switch (_context29.prev = _context29.next) {
6806
6935
  case 0:
6807
6936
  // @ts-ignore
6808
6937
  cdl = this.webex.internal.newMetrics.callDiagnosticLatencies; // @ts-ignore
6809
6938
  this.webex.internal.newMetrics.submitInternalEvent({
6810
6939
  name: 'internal.client.add-media.turn-discovery.start'
6811
6940
  });
6812
- _context28.next = 4;
6941
+ _context29.next = 4;
6813
6942
  return this.roap.doTurnDiscovery(this, isReconnecting, isForced);
6814
6943
  case 4:
6815
- turnDiscoveryResult = _context28.sent;
6944
+ turnDiscoveryResult = _context29.sent;
6816
6945
  this.turnDiscoverySkippedReason = turnDiscoveryResult === null || turnDiscoveryResult === void 0 ? void 0 : turnDiscoveryResult.turnDiscoverySkippedReason;
6817
6946
  this.turnServerUsed = !this.turnDiscoverySkippedReason;
6818
6947
 
@@ -6828,14 +6957,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6828
6957
  retriedWithTurnServer: this.addMediaData.retriedWithTurnServer
6829
6958
  });
6830
6959
  }
6831
- return _context28.abrupt("return", turnDiscoveryResult);
6960
+ return _context29.abrupt("return", turnDiscoveryResult);
6832
6961
  case 10:
6833
6962
  case "end":
6834
- return _context28.stop();
6963
+ return _context29.stop();
6835
6964
  }
6836
- }, _callee28, this);
6965
+ }, _callee29, this);
6837
6966
  }));
6838
- function doTurnDiscovery(_x26, _x27) {
6967
+ function doTurnDiscovery(_x27, _x28) {
6839
6968
  return _doTurnDiscovery.apply(this, arguments);
6840
6969
  }
6841
6970
  return doTurnDiscovery;
@@ -6854,35 +6983,35 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6854
6983
  }, {
6855
6984
  key: "establishMediaConnection",
6856
6985
  value: (function () {
6857
- var _establishMediaConnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee29(remoteMediaManagerConfig, bundlePolicy, isForced, turnServerInfo) {
6986
+ var _establishMediaConnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee30(remoteMediaManagerConfig, bundlePolicy, isForced, turnServerInfo) {
6858
6987
  var _this$locusMediaReque;
6859
6988
  var LOG_HEADER, isReconnecting, _yield$this$doTurnDis, mc;
6860
- return _regenerator.default.wrap(function _callee29$(_context29) {
6861
- while (1) switch (_context29.prev = _context29.next) {
6989
+ return _regenerator.default.wrap(function _callee30$(_context30) {
6990
+ while (1) switch (_context30.prev = _context30.next) {
6862
6991
  case 0:
6863
6992
  LOG_HEADER = 'Meeting:index#addMedia():establishMediaConnection -->';
6864
6993
  isReconnecting = this.isMoveToInProgress || !!((_this$locusMediaReque = this.locusMediaRequest) !== null && _this$locusMediaReque !== void 0 && _this$locusMediaReque.isConfluenceCreated()); // We are forcing turn discovery if the case is moveTo and a turn server was used already
6865
6994
  if (this.isMoveToInProgress && this.turnServerUsed) {
6866
6995
  isForced = true;
6867
6996
  }
6868
- _context29.prev = 3;
6997
+ _context30.prev = 3;
6869
6998
  if (turnServerInfo) {
6870
- _context29.next = 9;
6999
+ _context30.next = 9;
6871
7000
  break;
6872
7001
  }
6873
- _context29.next = 7;
7002
+ _context30.next = 7;
6874
7003
  return this.doTurnDiscovery(isReconnecting, isForced);
6875
7004
  case 7:
6876
- _yield$this$doTurnDis = _context29.sent;
7005
+ _yield$this$doTurnDis = _context30.sent;
6877
7006
  turnServerInfo = _yield$this$doTurnDis.turnServerInfo;
6878
7007
  case 9:
6879
- _context29.next = 11;
7008
+ _context30.next = 11;
6880
7009
  return this.createMediaConnection(turnServerInfo, bundlePolicy);
6881
7010
  case 11:
6882
- mc = _context29.sent;
6883
- _loggerProxy.default.logger.info("".concat(LOG_HEADER, " media connection created"));
7011
+ mc = _context30.sent;
7012
+ _loggerProxy.default.logger.info("".concat(LOG_HEADER, " media connection created this.isMultistream=").concat(this.isMultistream));
6884
7013
  if (!this.isMultistream) {
6885
- _context29.next = 21;
7014
+ _context30.next = 21;
6886
7015
  break;
6887
7016
  }
6888
7017
  this.remoteMediaManager = new _remoteMediaManager.RemoteMediaManager(this.receiveSlotManager, this.mediaRequestManagers, remoteMediaManagerConfig);
@@ -6890,42 +7019,42 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6890
7019
  this.forwardEvent(this.remoteMediaManager, _remoteMediaManager.Event.InterpretationAudioCreated, _constants.EVENT_TRIGGERS.REMOTE_MEDIA_INTERPRETATION_AUDIO_CREATED);
6891
7020
  this.forwardEvent(this.remoteMediaManager, _remoteMediaManager.Event.ScreenShareAudioCreated, _constants.EVENT_TRIGGERS.REMOTE_MEDIA_SCREEN_SHARE_AUDIO_CREATED);
6892
7021
  this.forwardEvent(this.remoteMediaManager, _remoteMediaManager.Event.VideoLayoutChanged, _constants.EVENT_TRIGGERS.REMOTE_MEDIA_VIDEO_LAYOUT_CHANGED);
6893
- _context29.next = 21;
7022
+ _context30.next = 21;
6894
7023
  return this.remoteMediaManager.start();
6895
7024
  case 21:
6896
- _context29.next = 23;
7025
+ _context30.next = 23;
6897
7026
  return mc.initiateOffer();
6898
7027
  case 23:
6899
- _context29.next = 25;
7028
+ _context30.next = 25;
6900
7029
  return this.waitForRemoteSDPAnswer();
6901
7030
  case 25:
6902
7031
  this.handleMediaLogging(this.mediaProperties);
6903
- _context29.next = 32;
7032
+ _context30.next = 32;
6904
7033
  break;
6905
7034
  case 28:
6906
- _context29.prev = 28;
6907
- _context29.t0 = _context29["catch"](3);
6908
- _loggerProxy.default.logger.error("".concat(LOG_HEADER, " error establishing media connection, "), _context29.t0);
6909
- throw _context29.t0;
7035
+ _context30.prev = 28;
7036
+ _context30.t0 = _context30["catch"](3);
7037
+ _loggerProxy.default.logger.error("".concat(LOG_HEADER, " error establishing media connection, "), _context30.t0);
7038
+ throw _context30.t0;
6910
7039
  case 32:
6911
- _context29.prev = 32;
6912
- _context29.next = 35;
7040
+ _context30.prev = 32;
7041
+ _context30.next = 35;
6913
7042
  return this.waitForMediaConnectionConnected();
6914
7043
  case 35:
6915
- _context29.next = 41;
7044
+ _context30.next = 41;
6916
7045
  break;
6917
7046
  case 37:
6918
- _context29.prev = 37;
6919
- _context29.t1 = _context29["catch"](32);
6920
- _context29.next = 41;
6921
- return this.handleWaitForMediaConnectionConnectedError(_context29.t1, remoteMediaManagerConfig, bundlePolicy);
7047
+ _context30.prev = 37;
7048
+ _context30.t1 = _context30["catch"](32);
7049
+ _context30.next = 41;
7050
+ return this.handleWaitForMediaConnectionConnectedError(_context30.t1, remoteMediaManagerConfig, bundlePolicy);
6922
7051
  case 41:
6923
7052
  case "end":
6924
- return _context29.stop();
7053
+ return _context30.stop();
6925
7054
  }
6926
- }, _callee29, this, [[3, 28], [32, 37]]);
7055
+ }, _callee30, this, [[3, 28], [32, 37]]);
6927
7056
  }));
6928
- function establishMediaConnection(_x28, _x29, _x30, _x31) {
7057
+ function establishMediaConnection(_x29, _x30, _x31, _x32) {
6929
7058
  return _establishMediaConnection.apply(this, arguments);
6930
7059
  }
6931
7060
  return establishMediaConnection;
@@ -6940,22 +7069,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6940
7069
  }, {
6941
7070
  key: "cleanUpOnAddMediaFailure",
6942
7071
  value: (function () {
6943
- var _cleanUpOnAddMediaFailure = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee30() {
6944
- return _regenerator.default.wrap(function _callee30$(_context30) {
6945
- while (1) switch (_context30.prev = _context30.next) {
7072
+ var _cleanUpOnAddMediaFailure = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee31() {
7073
+ return _regenerator.default.wrap(function _callee31$(_context31) {
7074
+ while (1) switch (_context31.prev = _context31.next) {
6946
7075
  case 0:
6947
7076
  if (!this.statsAnalyzer) {
6948
- _context30.next = 3;
7077
+ _context31.next = 3;
6949
7078
  break;
6950
7079
  }
6951
- _context30.next = 3;
7080
+ _context31.next = 3;
6952
7081
  return this.statsAnalyzer.stopAnalyzer();
6953
7082
  case 3:
6954
7083
  this.statsAnalyzer = null;
6955
7084
 
6956
7085
  // when media fails, we want to upload a webrtc dump to see whats going on
6957
7086
  // this function is async, but returns once the stats have been gathered
6958
- _context30.next = 6;
7087
+ _context31.next = 6;
6959
7088
  return this.forceSendStatsReport({
6960
7089
  callFrom: 'addMedia'
6961
7090
  });
@@ -6966,15 +7095,58 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6966
7095
  }
6967
7096
  case 7:
6968
7097
  case "end":
6969
- return _context30.stop();
7098
+ return _context31.stop();
6970
7099
  }
6971
- }, _callee30, this);
7100
+ }, _callee31, this);
6972
7101
  }));
6973
7102
  function cleanUpOnAddMediaFailure() {
6974
7103
  return _cleanUpOnAddMediaFailure.apply(this, arguments);
6975
7104
  }
6976
7105
  return cleanUpOnAddMediaFailure;
6977
7106
  }()
7107
+ /**
7108
+ * Cleans up stats analyzer, peer connection and other things before
7109
+ * we can create a new transcoded media connection
7110
+ *
7111
+ * @private
7112
+ * @returns {Promise<void>}
7113
+ */
7114
+ )
7115
+ }, {
7116
+ key: "downgradeFromMultistreamToTranscoded",
7117
+ value: (function () {
7118
+ var _downgradeFromMultistreamToTranscoded = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee32() {
7119
+ var _this$locusMediaReque2;
7120
+ return _regenerator.default.wrap(function _callee32$(_context32) {
7121
+ while (1) switch (_context32.prev = _context32.next) {
7122
+ case 0:
7123
+ if (!this.statsAnalyzer) {
7124
+ _context32.next = 3;
7125
+ break;
7126
+ }
7127
+ _context32.next = 3;
7128
+ return this.statsAnalyzer.stopAnalyzer();
7129
+ case 3:
7130
+ this.statsAnalyzer = null;
7131
+ this.isMultistream = false;
7132
+ if (this.mediaProperties.webrtcMediaConnection) {
7133
+ // close peer connection, but don't reset mute state information, because we will want to use it on the retry
7134
+ this.closePeerConnections(false);
7135
+ this.mediaProperties.unsetPeerConnection();
7136
+ }
7137
+ (_this$locusMediaReque2 = this.locusMediaRequest) === null || _this$locusMediaReque2 === void 0 ? void 0 : _this$locusMediaReque2.downgradeFromMultistreamToTranscoded();
7138
+ this.createStatsAnalyzer();
7139
+ case 8:
7140
+ case "end":
7141
+ return _context32.stop();
7142
+ }
7143
+ }, _callee32, this);
7144
+ }));
7145
+ function downgradeFromMultistreamToTranscoded() {
7146
+ return _downgradeFromMultistreamToTranscoded.apply(this, arguments);
7147
+ }
7148
+ return downgradeFromMultistreamToTranscoded;
7149
+ }()
6978
7150
  /**
6979
7151
  * Sends stats report, closes peer connection and cleans up any media connection
6980
7152
  * related things before trying to establish media connection again with turn server
@@ -6986,11 +7158,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6986
7158
  }, {
6987
7159
  key: "cleanUpBeforeRetryWithTurnServer",
6988
7160
  value: (function () {
6989
- var _cleanUpBeforeRetryWithTurnServer = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee31() {
6990
- return _regenerator.default.wrap(function _callee31$(_context31) {
6991
- while (1) switch (_context31.prev = _context31.next) {
7161
+ var _cleanUpBeforeRetryWithTurnServer = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee33() {
7162
+ return _regenerator.default.wrap(function _callee33$(_context33) {
7163
+ while (1) switch (_context33.prev = _context33.next) {
6992
7164
  case 0:
6993
- _context31.next = 2;
7165
+ _context33.next = 2;
6994
7166
  return this.forceSendStatsReport({
6995
7167
  callFrom: 'cleanUpBeforeRetryWithTurnServer'
6996
7168
  });
@@ -7010,9 +7182,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7010
7182
  }
7011
7183
  case 3:
7012
7184
  case "end":
7013
- return _context31.stop();
7185
+ return _context33.stop();
7014
7186
  }
7015
- }, _callee31, this);
7187
+ }, _callee33, this);
7016
7188
  }));
7017
7189
  function cleanUpBeforeRetryWithTurnServer() {
7018
7190
  return _cleanUpBeforeRetryWithTurnServer.apply(this, arguments);
@@ -7022,34 +7194,34 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7022
7194
  }, {
7023
7195
  key: "cleanUpBeforeReconnection",
7024
7196
  value: function () {
7025
- var _cleanUpBeforeReconnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee32() {
7026
- return _regenerator.default.wrap(function _callee32$(_context32) {
7027
- while (1) switch (_context32.prev = _context32.next) {
7197
+ var _cleanUpBeforeReconnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee34() {
7198
+ return _regenerator.default.wrap(function _callee34$(_context34) {
7199
+ while (1) switch (_context34.prev = _context34.next) {
7028
7200
  case 0:
7029
- _context32.prev = 0;
7030
- _context32.next = 3;
7201
+ _context34.prev = 0;
7202
+ _context34.next = 3;
7031
7203
  return this.forceSendStatsReport({
7032
7204
  callFrom: 'cleanUpBeforeReconnection'
7033
7205
  });
7034
7206
  case 3:
7035
7207
  if (!this.statsAnalyzer) {
7036
- _context32.next = 6;
7208
+ _context34.next = 6;
7037
7209
  break;
7038
7210
  }
7039
- _context32.next = 6;
7211
+ _context34.next = 6;
7040
7212
  return this.statsAnalyzer.stopAnalyzer();
7041
7213
  case 6:
7042
- _context32.next = 11;
7214
+ _context34.next = 11;
7043
7215
  break;
7044
7216
  case 8:
7045
- _context32.prev = 8;
7046
- _context32.t0 = _context32["catch"](0);
7047
- _loggerProxy.default.logger.error('Meeting:index#cleanUpBeforeReconnection --> Error during cleanup: ', _context32.t0);
7217
+ _context34.prev = 8;
7218
+ _context34.t0 = _context34["catch"](0);
7219
+ _loggerProxy.default.logger.error('Meeting:index#cleanUpBeforeReconnection --> Error during cleanup: ', _context34.t0);
7048
7220
  case 11:
7049
7221
  case "end":
7050
- return _context32.stop();
7222
+ return _context34.stop();
7051
7223
  }
7052
- }, _callee32, this, [[0, 8]]);
7224
+ }, _callee34, this, [[0, 8]]);
7053
7225
  }));
7054
7226
  function cleanUpBeforeReconnection() {
7055
7227
  return _cleanUpBeforeReconnection.apply(this, arguments);
@@ -7117,7 +7289,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7117
7289
  }, {
7118
7290
  key: "addMediaInternal",
7119
7291
  value: (function () {
7120
- var _addMediaInternal = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee33(icePhaseCallback, turnServerInfo, forceTurnDiscovery) {
7292
+ var _addMediaInternal = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee35(icePhaseCallback, turnServerInfo, forceTurnDiscovery) {
7121
7293
  var options,
7122
7294
  LOG_HEADER,
7123
7295
  localStreams,
@@ -7139,8 +7311,6 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7139
7311
  numTransports,
7140
7312
  reachabilityStats,
7141
7313
  iceCandidateErrors,
7142
- _this$mediaProperties13,
7143
- _this$mediaProperties14,
7144
7314
  _this$mediaProperties15,
7145
7315
  _this$mediaProperties16,
7146
7316
  _this$mediaProperties17,
@@ -7160,29 +7330,31 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7160
7330
  _this$mediaProperties31,
7161
7331
  _this$mediaProperties32,
7162
7332
  _this$mediaProperties33,
7333
+ _this$mediaProperties34,
7334
+ _this$mediaProperties35,
7163
7335
  reachabilityMetrics,
7164
7336
  _yield$this$mediaProp2,
7165
7337
  _selectedCandidatePairChanges,
7166
7338
  _numTransports,
7167
7339
  _iceCandidateErrors,
7168
- _args33 = arguments;
7169
- return _regenerator.default.wrap(function _callee33$(_context33) {
7170
- while (1) switch (_context33.prev = _context33.next) {
7340
+ _args35 = arguments;
7341
+ return _regenerator.default.wrap(function _callee35$(_context35) {
7342
+ while (1) switch (_context35.prev = _context35.next) {
7171
7343
  case 0:
7172
- options = _args33.length > 3 && _args33[3] !== undefined ? _args33[3] : {};
7344
+ options = _args35.length > 3 && _args35[3] !== undefined ? _args35[3] : {};
7173
7345
  this.addMediaData.retriedWithTurnServer = false;
7174
7346
  this.addMediaData.icePhaseCallback = icePhaseCallback;
7175
7347
  this.hasMediaConnectionConnectedAtLeastOnce = false;
7176
7348
  LOG_HEADER = 'Meeting:index#addMedia -->';
7177
7349
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " called with: options=").concat((0, _stringify.default)(options), ", turnServerInfo=").concat((0, _stringify.default)(turnServerInfo), ", forceTurnDiscovery=").concat(forceTurnDiscovery));
7178
7350
  if (!(options.allowMediaInLobby !== true && this.meetingState !== _constants.FULL_STATE.ACTIVE)) {
7179
- _context33.next = 8;
7351
+ _context35.next = 8;
7180
7352
  break;
7181
7353
  }
7182
7354
  throw new _webexErrors.MeetingNotActiveError();
7183
7355
  case 8:
7184
7356
  if (!_util2.default.isUserInLeftState(this.locusInfo)) {
7185
- _context33.next = 10;
7357
+ _context35.next = 10;
7186
7358
  break;
7187
7359
  }
7188
7360
  throw new _webexErrors.UserNotJoinedError();
@@ -7193,7 +7365,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7193
7365
  // If the user is unjoined or guest waiting in lobby dont allow the user to addMedia
7194
7366
  // @ts-ignore - isUserUnadmitted coming from SelfUtil
7195
7367
  if (!(this.isUserUnadmitted && !this.wirelessShare && !this.allowMediaInLobby)) {
7196
- _context33.next = 14;
7368
+ _context35.next = 14;
7197
7369
  break;
7198
7370
  }
7199
7371
  throw new _webexErrors.UserInLobbyError();
@@ -7236,45 +7408,56 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7236
7408
  });
7237
7409
  this.audio = (0, _muteState.createMuteState)(_constants.AUDIO, this, audioEnabled);
7238
7410
  this.video = (0, _muteState.createMuteState)(_constants.VIDEO, this, videoEnabled);
7239
- _context33.prev = 18;
7240
- _context33.next = 21;
7411
+ this.brbState = (0, _brbState.createBrbState)(this, false);
7412
+ _context35.prev = 19;
7413
+ _context35.next = 22;
7241
7414
  return this.setUpLocalStreamReferences(localStreams);
7242
- case 21:
7415
+ case 22:
7243
7416
  this.setMercuryListener();
7244
7417
  this.createStatsAnalyzer();
7245
- _context33.next = 25;
7418
+ _context35.prev = 24;
7419
+ _context35.next = 27;
7246
7420
  return this.establishMediaConnection(remoteMediaManagerConfig, bundlePolicy, forceTurnDiscovery, turnServerInfo);
7247
- case 25:
7248
- if (!(audioEnabled || videoEnabled)) {
7249
- _context33.next = 30;
7421
+ case 27:
7422
+ _context35.next = 40;
7423
+ break;
7424
+ case 29:
7425
+ _context35.prev = 29;
7426
+ _context35.t0 = _context35["catch"](24);
7427
+ if (!(_context35.t0 instanceof _multistreamNotSupportedError.default)) {
7428
+ _context35.next = 39;
7250
7429
  break;
7251
7430
  }
7252
- _context33.next = 28;
7253
- return Meeting.handleDeviceLogging(audioEnabled, videoEnabled);
7254
- case 28:
7255
- _context33.next = 31;
7431
+ _loggerProxy.default.logger.warn("".concat(LOG_HEADER, " we asked for multistream backend (Homer), but got transcoded backend, recreating media connection..."));
7432
+ _context35.next = 35;
7433
+ return this.downgradeFromMultistreamToTranscoded();
7434
+ case 35:
7435
+ _context35.next = 37;
7436
+ return this.establishMediaConnection(remoteMediaManagerConfig, bundlePolicy, true, undefined);
7437
+ case 37:
7438
+ _context35.next = 40;
7256
7439
  break;
7257
- case 30:
7258
- _loggerProxy.default.logger.info("".concat(LOG_HEADER, " device logging not required"));
7259
- case 31:
7440
+ case 39:
7441
+ throw _context35.t0;
7442
+ case 40:
7260
7443
  if (!this.mediaProperties.hasLocalShareStream()) {
7261
- _context33.next = 34;
7444
+ _context35.next = 43;
7262
7445
  break;
7263
7446
  }
7264
- _context33.next = 34;
7447
+ _context35.next = 43;
7265
7448
  return this.enqueueScreenShareFloorRequest();
7266
- case 34:
7267
- _context33.next = 36;
7449
+ case 43:
7450
+ _context35.next = 45;
7268
7451
  return this.mediaProperties.getCurrentConnectionInfo();
7269
- case 36:
7270
- _yield$this$mediaProp = _context33.sent;
7452
+ case 45:
7453
+ _yield$this$mediaProp = _context35.sent;
7271
7454
  connectionType = _yield$this$mediaProp.connectionType;
7272
7455
  selectedCandidatePairChanges = _yield$this$mediaProp.selectedCandidatePairChanges;
7273
7456
  numTransports = _yield$this$mediaProp.numTransports;
7274
- _context33.next = 42;
7457
+ _context35.next = 51;
7275
7458
  return this.webex.meetings.reachability.getReachabilityMetrics();
7276
- case 42:
7277
- reachabilityStats = _context33.sent;
7459
+ case 51:
7460
+ reachabilityStats = _context35.sent;
7278
7461
  iceCandidateErrors = Object.fromEntries(this.iceCandidateErrors);
7279
7462
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_SUCCESS, _objectSpread(_objectSpread(_objectSpread({
7280
7463
  correlation_id: this.correlationId,
@@ -7300,31 +7483,31 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7300
7483
  // We can log ReceiveSlot SSRCs only after the SDP exchange, so doing it here:
7301
7484
  (_this$remoteMediaMana = this.remoteMediaManager) === null || _this$remoteMediaMana === void 0 ? void 0 : _this$remoteMediaMana.logAllReceiveSlots();
7302
7485
  this.startPeriodicLogUpload();
7303
- _context33.next = 69;
7486
+ _context35.next = 78;
7304
7487
  break;
7305
- case 51:
7306
- _context33.prev = 51;
7307
- _context33.t0 = _context33["catch"](18);
7308
- _loggerProxy.default.logger.error("".concat(LOG_HEADER, " failed to establish media connection: "), _context33.t0);
7488
+ case 60:
7489
+ _context35.prev = 60;
7490
+ _context35.t1 = _context35["catch"](19);
7491
+ _loggerProxy.default.logger.error("".concat(LOG_HEADER, " failed to establish media connection: "), _context35.t1);
7309
7492
 
7310
7493
  // @ts-ignore
7311
- _context33.next = 56;
7494
+ _context35.next = 65;
7312
7495
  return this.webex.meetings.reachability.getReachabilityMetrics();
7313
- case 56:
7314
- reachabilityMetrics = _context33.sent;
7315
- _context33.next = 59;
7496
+ case 65:
7497
+ reachabilityMetrics = _context35.sent;
7498
+ _context35.next = 68;
7316
7499
  return this.mediaProperties.getCurrentConnectionInfo();
7317
- case 59:
7318
- _yield$this$mediaProp2 = _context33.sent;
7500
+ case 68:
7501
+ _yield$this$mediaProp2 = _context35.sent;
7319
7502
  _selectedCandidatePairChanges = _yield$this$mediaProp2.selectedCandidatePairChanges;
7320
7503
  _numTransports = _yield$this$mediaProp2.numTransports;
7321
7504
  _iceCandidateErrors = Object.fromEntries(this.iceCandidateErrors);
7322
7505
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_FAILURE, _objectSpread(_objectSpread(_objectSpread({
7323
7506
  correlation_id: this.correlationId,
7324
7507
  locus_id: this.locusUrl.split('/').pop(),
7325
- reason: _context33.t0.message,
7326
- stack: _context33.t0.stack,
7327
- code: _context33.t0.code,
7508
+ reason: _context35.t1.message,
7509
+ stack: _context35.t1.stack,
7510
+ code: _context35.t1.code,
7328
7511
  selectedCandidatePairChanges: _selectedCandidatePairChanges,
7329
7512
  numTransports: _numTransports,
7330
7513
  turnDiscoverySkippedReason: this.turnDiscoverySkippedReason,
@@ -7332,37 +7515,37 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7332
7515
  retriedWithTurnServer: this.addMediaData.retriedWithTurnServer,
7333
7516
  isMultistream: this.isMultistream,
7334
7517
  isJoinWithMediaRetry: this.joinWithMediaRetryInfo.isRetry,
7335
- signalingState: ((_this$mediaProperties13 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties13 === void 0 ? void 0 : (_this$mediaProperties14 = _this$mediaProperties13.multistreamConnection) === null || _this$mediaProperties14 === void 0 ? void 0 : (_this$mediaProperties15 = _this$mediaProperties14.pc) === null || _this$mediaProperties15 === void 0 ? void 0 : (_this$mediaProperties16 = _this$mediaProperties15.pc) === null || _this$mediaProperties16 === void 0 ? void 0 : _this$mediaProperties16.signalingState) || ((_this$mediaProperties17 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties17 === void 0 ? void 0 : (_this$mediaProperties18 = _this$mediaProperties17.mediaConnection) === null || _this$mediaProperties18 === void 0 ? void 0 : (_this$mediaProperties19 = _this$mediaProperties18.pc) === null || _this$mediaProperties19 === void 0 ? void 0 : _this$mediaProperties19.signalingState) || 'unknown',
7336
- connectionState: ((_this$mediaProperties20 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties20 === void 0 ? void 0 : (_this$mediaProperties21 = _this$mediaProperties20.multistreamConnection) === null || _this$mediaProperties21 === void 0 ? void 0 : (_this$mediaProperties22 = _this$mediaProperties21.pc) === null || _this$mediaProperties22 === void 0 ? void 0 : (_this$mediaProperties23 = _this$mediaProperties22.pc) === null || _this$mediaProperties23 === void 0 ? void 0 : _this$mediaProperties23.connectionState) || ((_this$mediaProperties24 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties24 === void 0 ? void 0 : (_this$mediaProperties25 = _this$mediaProperties24.mediaConnection) === null || _this$mediaProperties25 === void 0 ? void 0 : (_this$mediaProperties26 = _this$mediaProperties25.pc) === null || _this$mediaProperties26 === void 0 ? void 0 : _this$mediaProperties26.connectionState) || 'unknown',
7337
- iceConnectionState: ((_this$mediaProperties27 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties27 === void 0 ? void 0 : (_this$mediaProperties28 = _this$mediaProperties27.multistreamConnection) === null || _this$mediaProperties28 === void 0 ? void 0 : (_this$mediaProperties29 = _this$mediaProperties28.pc) === null || _this$mediaProperties29 === void 0 ? void 0 : (_this$mediaProperties30 = _this$mediaProperties29.pc) === null || _this$mediaProperties30 === void 0 ? void 0 : _this$mediaProperties30.iceConnectionState) || ((_this$mediaProperties31 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties31 === void 0 ? void 0 : (_this$mediaProperties32 = _this$mediaProperties31.mediaConnection) === null || _this$mediaProperties32 === void 0 ? void 0 : (_this$mediaProperties33 = _this$mediaProperties32.pc) === null || _this$mediaProperties33 === void 0 ? void 0 : _this$mediaProperties33.iceConnectionState) || 'unknown'
7518
+ signalingState: ((_this$mediaProperties15 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties15 === void 0 ? void 0 : (_this$mediaProperties16 = _this$mediaProperties15.multistreamConnection) === null || _this$mediaProperties16 === void 0 ? void 0 : (_this$mediaProperties17 = _this$mediaProperties16.pc) === null || _this$mediaProperties17 === void 0 ? void 0 : (_this$mediaProperties18 = _this$mediaProperties17.pc) === null || _this$mediaProperties18 === void 0 ? void 0 : _this$mediaProperties18.signalingState) || ((_this$mediaProperties19 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties19 === void 0 ? void 0 : (_this$mediaProperties20 = _this$mediaProperties19.mediaConnection) === null || _this$mediaProperties20 === void 0 ? void 0 : (_this$mediaProperties21 = _this$mediaProperties20.pc) === null || _this$mediaProperties21 === void 0 ? void 0 : _this$mediaProperties21.signalingState) || 'unknown',
7519
+ connectionState: ((_this$mediaProperties22 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties22 === void 0 ? void 0 : (_this$mediaProperties23 = _this$mediaProperties22.multistreamConnection) === null || _this$mediaProperties23 === void 0 ? void 0 : (_this$mediaProperties24 = _this$mediaProperties23.pc) === null || _this$mediaProperties24 === void 0 ? void 0 : (_this$mediaProperties25 = _this$mediaProperties24.pc) === null || _this$mediaProperties25 === void 0 ? void 0 : _this$mediaProperties25.connectionState) || ((_this$mediaProperties26 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties26 === void 0 ? void 0 : (_this$mediaProperties27 = _this$mediaProperties26.mediaConnection) === null || _this$mediaProperties27 === void 0 ? void 0 : (_this$mediaProperties28 = _this$mediaProperties27.pc) === null || _this$mediaProperties28 === void 0 ? void 0 : _this$mediaProperties28.connectionState) || 'unknown',
7520
+ iceConnectionState: ((_this$mediaProperties29 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties29 === void 0 ? void 0 : (_this$mediaProperties30 = _this$mediaProperties29.multistreamConnection) === null || _this$mediaProperties30 === void 0 ? void 0 : (_this$mediaProperties31 = _this$mediaProperties30.pc) === null || _this$mediaProperties31 === void 0 ? void 0 : (_this$mediaProperties32 = _this$mediaProperties31.pc) === null || _this$mediaProperties32 === void 0 ? void 0 : _this$mediaProperties32.iceConnectionState) || ((_this$mediaProperties33 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties33 === void 0 ? void 0 : (_this$mediaProperties34 = _this$mediaProperties33.mediaConnection) === null || _this$mediaProperties34 === void 0 ? void 0 : (_this$mediaProperties35 = _this$mediaProperties34.pc) === null || _this$mediaProperties35 === void 0 ? void 0 : _this$mediaProperties35.iceConnectionState) || 'unknown'
7338
7521
  }, reachabilityMetrics), _iceCandidateErrors), {}, {
7339
7522
  iceCandidatesCount: this.iceCandidatesCount
7340
7523
  }));
7341
- _context33.next = 66;
7524
+ _context35.next = 75;
7342
7525
  return this.cleanUpOnAddMediaFailure();
7343
- case 66:
7526
+ case 75:
7344
7527
  // Upload logs on error while adding media
7345
7528
  _triggerProxy.default.trigger(this, {
7346
7529
  file: 'meeting/index',
7347
7530
  function: 'addMedia'
7348
7531
  }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, this);
7349
- if (_context33.t0 instanceof _internalMediaCore.Errors.SdpError) {
7532
+ if (_context35.t1 instanceof _internalMediaCore.Errors.SdpError) {
7350
7533
  this.leave({
7351
7534
  reason: _constants.MEETING_REMOVED_REASON.MEETING_CONNECTION_FAILED
7352
7535
  });
7353
7536
  }
7354
- throw _context33.t0;
7355
- case 69:
7356
- _context33.prev = 69;
7537
+ throw _context35.t1;
7538
+ case 78:
7539
+ _context35.prev = 78;
7357
7540
  this.addMediaData.icePhaseCallback = DEFAULT_ICE_PHASE_CALLBACK;
7358
- return _context33.finish(69);
7359
- case 72:
7541
+ return _context35.finish(78);
7542
+ case 81:
7360
7543
  case "end":
7361
- return _context33.stop();
7544
+ return _context35.stop();
7362
7545
  }
7363
- }, _callee33, this, [[18, 51, 69, 72]]);
7546
+ }, _callee35, this, [[19, 60, 78, 81], [24, 29]]);
7364
7547
  }));
7365
- function addMediaInternal(_x32, _x33, _x34) {
7548
+ function addMediaInternal(_x33, _x34, _x35) {
7366
7549
  return _addMediaInternal.apply(this, arguments);
7367
7550
  }
7368
7551
  return addMediaInternal;
@@ -7428,35 +7611,35 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7428
7611
  * @memberof Meeting
7429
7612
  */
7430
7613
  function () {
7431
- var _updateMedia = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee34(options) {
7614
+ var _updateMedia = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee36(options) {
7432
7615
  var audioEnabled, videoEnabled, shareAudioEnabled, shareVideoEnabled, _this$audio3, _this$video3;
7433
- return _regenerator.default.wrap(function _callee34$(_context34) {
7434
- while (1) switch (_context34.prev = _context34.next) {
7616
+ return _regenerator.default.wrap(function _callee36$(_context36) {
7617
+ while (1) switch (_context36.prev = _context36.next) {
7435
7618
  case 0:
7436
7619
  this.checkMediaConnection();
7437
7620
  audioEnabled = options.audioEnabled, videoEnabled = options.videoEnabled, shareAudioEnabled = options.shareAudioEnabled, shareVideoEnabled = options.shareVideoEnabled;
7438
7621
  _loggerProxy.default.logger.log("Meeting:index#updateMedia --> called with options=".concat((0, _stringify.default)(options)));
7439
7622
  if (this.canUpdateMedia()) {
7440
- _context34.next = 5;
7623
+ _context36.next = 5;
7441
7624
  break;
7442
7625
  }
7443
- return _context34.abrupt("return", this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.UPDATE_MEDIA, options));
7626
+ return _context36.abrupt("return", this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.UPDATE_MEDIA, options));
7444
7627
  case 5:
7445
7628
  if (!this.isMultistream) {
7446
- _context34.next = 10;
7629
+ _context36.next = 10;
7447
7630
  break;
7448
7631
  }
7449
7632
  if (!(shareAudioEnabled !== undefined || shareVideoEnabled !== undefined)) {
7450
- _context34.next = 8;
7633
+ _context36.next = 8;
7451
7634
  break;
7452
7635
  }
7453
7636
  throw new Error('toggling shareAudioEnabled or shareVideoEnabled in a multistream meeting is not supported, to control receiving screen share call meeting.remoteMediaManager.setLayout() with appropriate layout');
7454
7637
  case 8:
7455
- _context34.next = 12;
7638
+ _context36.next = 12;
7456
7639
  break;
7457
7640
  case 10:
7458
7641
  if (!(shareAudioEnabled !== undefined)) {
7459
- _context34.next = 12;
7642
+ _context36.next = 12;
7460
7643
  break;
7461
7644
  }
7462
7645
  throw new Error('toggling shareAudioEnabled in a transcoded meeting is not supported as of now');
@@ -7481,20 +7664,20 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7481
7664
  this.mediaProperties.mediaDirection.receiveShare = !!(shareAudioEnabled || shareVideoEnabled);
7482
7665
  }
7483
7666
  if (this.isMultistream) {
7484
- _context34.next = 18;
7667
+ _context36.next = 18;
7485
7668
  break;
7486
7669
  }
7487
- _context34.next = 18;
7670
+ _context36.next = 18;
7488
7671
  return this.updateTranscodedMediaConnection();
7489
7672
  case 18:
7490
- return _context34.abrupt("return", undefined);
7673
+ return _context36.abrupt("return", undefined);
7491
7674
  case 19:
7492
7675
  case "end":
7493
- return _context34.stop();
7676
+ return _context36.stop();
7494
7677
  }
7495
- }, _callee34, this);
7678
+ }, _callee36, this);
7496
7679
  }));
7497
- function updateMedia(_x35) {
7680
+ function updateMedia(_x36) {
7498
7681
  return _updateMedia.apply(this, arguments);
7499
7682
  }
7500
7683
  return updateMedia;
@@ -8122,10 +8305,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8122
8305
  var renderInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
8123
8306
  var main = renderInfo.main,
8124
8307
  content = renderInfo.content;
8125
- var _this$mediaProperties34 = this.mediaProperties,
8126
- mediaDirection = _this$mediaProperties34.mediaDirection,
8127
- remoteShareStream = _this$mediaProperties34.remoteShareStream,
8128
- remoteVideoStream = _this$mediaProperties34.remoteVideoStream;
8308
+ var _this$mediaProperties36 = this.mediaProperties,
8309
+ mediaDirection = _this$mediaProperties36.mediaDirection,
8310
+ remoteShareStream = _this$mediaProperties36.remoteShareStream,
8311
+ remoteVideoStream = _this$mediaProperties36.remoteVideoStream;
8129
8312
  var layoutInfo = (0, _lodash.cloneDeep)(this.lastVideoLayoutInfo);
8130
8313
 
8131
8314
  // TODO: We need a real time value for Audio, Video and Share send indicator
@@ -8134,7 +8317,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8134
8317
  }
8135
8318
  if (layoutType) {
8136
8319
  if (!_constants.LAYOUT_TYPES.includes(layoutType)) {
8137
- return this.rejectWithErrorLog('Meeting:index#changeVideoLayout --> cannot change video layout, invalid layoutType received.');
8320
+ return this.rejectWithErrorLog("Meeting:index#changeVideoLayout --> cannot change video layout, invalid layoutType \"".concat(layoutType, "\" received."));
8138
8321
  }
8139
8322
  layoutInfo.layoutType = layoutType;
8140
8323
  }
@@ -8397,8 +8580,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8397
8580
  }, {
8398
8581
  key: "checkMediaConnection",
8399
8582
  value: function checkMediaConnection() {
8400
- var _this$mediaProperties35;
8401
- if ((_this$mediaProperties35 = this.mediaProperties) !== null && _this$mediaProperties35 !== void 0 && _this$mediaProperties35.webrtcMediaConnection) {
8583
+ var _this$mediaProperties37;
8584
+ if ((_this$mediaProperties37 = this.mediaProperties) !== null && _this$mediaProperties37 !== void 0 && _this$mediaProperties37.webrtcMediaConnection) {
8402
8585
  return;
8403
8586
  }
8404
8587
  throw new _webexErrors.NoMediaEstablishedYetError();
@@ -8413,39 +8596,39 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8413
8596
  }, {
8414
8597
  key: "enableMusicMode",
8415
8598
  value: (function () {
8416
- var _enableMusicMode = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee35(shouldEnableMusicMode) {
8417
- return _regenerator.default.wrap(function _callee35$(_context35) {
8418
- while (1) switch (_context35.prev = _context35.next) {
8599
+ var _enableMusicMode = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee37(shouldEnableMusicMode) {
8600
+ return _regenerator.default.wrap(function _callee37$(_context37) {
8601
+ while (1) switch (_context37.prev = _context37.next) {
8419
8602
  case 0:
8420
8603
  this.checkMediaConnection();
8421
8604
  if (this.isMultistream) {
8422
- _context35.next = 3;
8605
+ _context37.next = 3;
8423
8606
  break;
8424
8607
  }
8425
8608
  throw new Error('enableMusicMode() only supported with multistream');
8426
8609
  case 3:
8427
8610
  if (!shouldEnableMusicMode) {
8428
- _context35.next = 8;
8611
+ _context37.next = 8;
8429
8612
  break;
8430
8613
  }
8431
- _context35.next = 6;
8614
+ _context37.next = 6;
8432
8615
  return this.sendSlotManager.setCodecParameters(_internalMediaCore.MediaType.AudioMain, {
8433
8616
  maxaveragebitrate: '64000',
8434
8617
  maxplaybackrate: '48000'
8435
8618
  });
8436
8619
  case 6:
8437
- _context35.next = 10;
8620
+ _context37.next = 10;
8438
8621
  break;
8439
8622
  case 8:
8440
- _context35.next = 10;
8623
+ _context37.next = 10;
8441
8624
  return this.sendSlotManager.deleteCodecParameters(_internalMediaCore.MediaType.AudioMain, ['maxaveragebitrate', 'maxplaybackrate']);
8442
8625
  case 10:
8443
8626
  case "end":
8444
- return _context35.stop();
8627
+ return _context37.stop();
8445
8628
  }
8446
- }, _callee35, this);
8629
+ }, _callee37, this);
8447
8630
  }));
8448
- function enableMusicMode(_x36) {
8631
+ function enableMusicMode(_x37) {
8449
8632
  return _enableMusicMode.apply(this, arguments);
8450
8633
  }
8451
8634
  return enableMusicMode;
@@ -8458,14 +8641,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8458
8641
  }, {
8459
8642
  key: "updateTranscodedMediaConnection",
8460
8643
  value: function updateTranscodedMediaConnection() {
8461
- var _this$mediaProperties36,
8462
- _this$mediaProperties37,
8463
- _this$mediaProperties38,
8644
+ var _this$mediaProperties38,
8464
8645
  _this$mediaProperties39,
8465
8646
  _this$mediaProperties40,
8466
8647
  _this$mediaProperties41,
8467
8648
  _this$mediaProperties42,
8468
8649
  _this$mediaProperties43,
8650
+ _this$mediaProperties44,
8651
+ _this$mediaProperties45,
8469
8652
  _this54 = this;
8470
8653
  var LOG_HEADER = 'Meeting:index#updateTranscodedMediaConnection -->';
8471
8654
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " starting"));
@@ -8475,10 +8658,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8475
8658
  return this.mediaProperties.webrtcMediaConnection.update({
8476
8659
  // TODO: RoapMediaConnection is not ready to use stream classes yet, so we pass the raw MediaStreamTrack for now
8477
8660
  localTracks: {
8478
- audio: ((_this$mediaProperties36 = this.mediaProperties.audioStream) === null || _this$mediaProperties36 === void 0 ? void 0 : (_this$mediaProperties37 = _this$mediaProperties36.outputStream) === null || _this$mediaProperties37 === void 0 ? void 0 : _this$mediaProperties37.getTracks()[0]) || null,
8479
- video: ((_this$mediaProperties38 = this.mediaProperties.videoStream) === null || _this$mediaProperties38 === void 0 ? void 0 : (_this$mediaProperties39 = _this$mediaProperties38.outputStream) === null || _this$mediaProperties39 === void 0 ? void 0 : _this$mediaProperties39.getTracks()[0]) || null,
8480
- screenShareVideo: ((_this$mediaProperties40 = this.mediaProperties.shareVideoStream) === null || _this$mediaProperties40 === void 0 ? void 0 : (_this$mediaProperties41 = _this$mediaProperties40.outputStream) === null || _this$mediaProperties41 === void 0 ? void 0 : _this$mediaProperties41.getTracks()[0]) || null,
8481
- screenShareAudio: ((_this$mediaProperties42 = this.mediaProperties.shareAudioStream) === null || _this$mediaProperties42 === void 0 ? void 0 : (_this$mediaProperties43 = _this$mediaProperties42.outputStream) === null || _this$mediaProperties43 === void 0 ? void 0 : _this$mediaProperties43.getTracks()[0]) || null
8661
+ audio: ((_this$mediaProperties38 = this.mediaProperties.audioStream) === null || _this$mediaProperties38 === void 0 ? void 0 : (_this$mediaProperties39 = _this$mediaProperties38.outputStream) === null || _this$mediaProperties39 === void 0 ? void 0 : _this$mediaProperties39.getTracks()[0]) || null,
8662
+ video: ((_this$mediaProperties40 = this.mediaProperties.videoStream) === null || _this$mediaProperties40 === void 0 ? void 0 : (_this$mediaProperties41 = _this$mediaProperties40.outputStream) === null || _this$mediaProperties41 === void 0 ? void 0 : _this$mediaProperties41.getTracks()[0]) || null,
8663
+ screenShareVideo: ((_this$mediaProperties42 = this.mediaProperties.shareVideoStream) === null || _this$mediaProperties42 === void 0 ? void 0 : (_this$mediaProperties43 = _this$mediaProperties42.outputStream) === null || _this$mediaProperties43 === void 0 ? void 0 : _this$mediaProperties43.getTracks()[0]) || null,
8664
+ screenShareAudio: ((_this$mediaProperties44 = this.mediaProperties.shareAudioStream) === null || _this$mediaProperties44 === void 0 ? void 0 : (_this$mediaProperties45 = _this$mediaProperties44.outputStream) === null || _this$mediaProperties45 === void 0 ? void 0 : _this$mediaProperties45.getTracks()[0]) || null
8482
8665
  },
8483
8666
  direction: {
8484
8667
  audio: _media.default.getDirection(true, this.mediaProperties.mediaDirection.receiveAudio, this.mediaProperties.mediaDirection.sendAudio),
@@ -8536,25 +8719,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8536
8719
  }, {
8537
8720
  key: "publishStream",
8538
8721
  value: (function () {
8539
- var _publishStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee36(mediaType, stream) {
8540
- return _regenerator.default.wrap(function _callee36$(_context36) {
8541
- while (1) switch (_context36.prev = _context36.next) {
8722
+ var _publishStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee38(mediaType, stream) {
8723
+ return _regenerator.default.wrap(function _callee38$(_context38) {
8724
+ while (1) switch (_context38.prev = _context38.next) {
8542
8725
  case 0:
8543
8726
  if (stream) {
8544
- _context36.next = 2;
8727
+ _context38.next = 2;
8545
8728
  break;
8546
8729
  }
8547
- return _context36.abrupt("return");
8730
+ return _context38.abrupt("return");
8548
8731
  case 2:
8549
8732
  if (!this.mediaProperties.webrtcMediaConnection) {
8550
- _context36.next = 7;
8733
+ _context38.next = 7;
8551
8734
  break;
8552
8735
  }
8553
8736
  if (!(this.isMultistream && this.mediaProperties.webrtcMediaConnection)) {
8554
- _context36.next = 6;
8737
+ _context38.next = 6;
8555
8738
  break;
8556
8739
  }
8557
- _context36.next = 6;
8740
+ _context38.next = 6;
8558
8741
  return this.sendSlotManager.publishStream(mediaType, stream);
8559
8742
  case 6:
8560
8743
  this.emitPublishStateChangeEvent({
@@ -8565,11 +8748,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8565
8748
  });
8566
8749
  case 7:
8567
8750
  case "end":
8568
- return _context36.stop();
8751
+ return _context38.stop();
8569
8752
  }
8570
- }, _callee36, this);
8753
+ }, _callee38, this);
8571
8754
  }));
8572
- function publishStream(_x37, _x38) {
8755
+ function publishStream(_x38, _x39) {
8573
8756
  return _publishStream.apply(this, arguments);
8574
8757
  }
8575
8758
  return publishStream;
@@ -8585,21 +8768,21 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8585
8768
  }, {
8586
8769
  key: "unpublishStream",
8587
8770
  value: (function () {
8588
- var _unpublishStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee37(mediaType, stream) {
8589
- return _regenerator.default.wrap(function _callee37$(_context37) {
8590
- while (1) switch (_context37.prev = _context37.next) {
8771
+ var _unpublishStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee39(mediaType, stream) {
8772
+ return _regenerator.default.wrap(function _callee39$(_context39) {
8773
+ while (1) switch (_context39.prev = _context39.next) {
8591
8774
  case 0:
8592
8775
  if (stream) {
8593
- _context37.next = 2;
8776
+ _context39.next = 2;
8594
8777
  break;
8595
8778
  }
8596
- return _context37.abrupt("return");
8779
+ return _context39.abrupt("return");
8597
8780
  case 2:
8598
8781
  if (!(this.isMultistream && this.mediaProperties.webrtcMediaConnection)) {
8599
- _context37.next = 5;
8782
+ _context39.next = 5;
8600
8783
  break;
8601
8784
  }
8602
- _context37.next = 5;
8785
+ _context39.next = 5;
8603
8786
  return this.sendSlotManager.unpublishStream(mediaType);
8604
8787
  case 5:
8605
8788
  this.emitPublishStateChangeEvent({
@@ -8610,11 +8793,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8610
8793
  });
8611
8794
  case 6:
8612
8795
  case "end":
8613
- return _context37.stop();
8796
+ return _context39.stop();
8614
8797
  }
8615
- }, _callee37, this);
8798
+ }, _callee39, this);
8616
8799
  }));
8617
- function unpublishStream(_x39, _x40) {
8800
+ function unpublishStream(_x40, _x41) {
8618
8801
  return _unpublishStream.apply(this, arguments);
8619
8802
  }
8620
8803
  return unpublishStream;
@@ -8629,19 +8812,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8629
8812
  }, {
8630
8813
  key: "publishStreams",
8631
8814
  value: (function () {
8632
- var _publishStreams = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee38(streams) {
8815
+ var _publishStreams = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee40(streams) {
8633
8816
  var _streams$screenShare, _streams$screenShare2, _streams$screenShare3, _streams$screenShare4, _streams$screenShare5, _streams$screenShare6;
8634
8817
  var streamChecks, _i, _streamChecks, _streamChecks$_i, stream, name, floorRequestNeeded, _streams$screenShare7;
8635
- return _regenerator.default.wrap(function _callee38$(_context38) {
8636
- while (1) switch (_context38.prev = _context38.next) {
8818
+ return _regenerator.default.wrap(function _callee40$(_context40) {
8819
+ while (1) switch (_context40.prev = _context40.next) {
8637
8820
  case 0:
8638
8821
  _loggerProxy.default.logger.info("Meeting:index#publishStreams --> called with: ".concat((0, _stringify.default)(streams)));
8639
8822
  this.checkMediaConnection();
8640
8823
  if (!(!streams.microphone && !streams.camera && !((_streams$screenShare = streams.screenShare) !== null && _streams$screenShare !== void 0 && _streams$screenShare.audio) && !((_streams$screenShare2 = streams.screenShare) !== null && _streams$screenShare2 !== void 0 && _streams$screenShare2.video))) {
8641
- _context38.next = 4;
8824
+ _context40.next = 4;
8642
8825
  break;
8643
8826
  }
8644
- return _context38.abrupt("return");
8827
+ return _context40.abrupt("return");
8645
8828
  case 4:
8646
8829
  streamChecks = [{
8647
8830
  stream: streams === null || streams === void 0 ? void 0 : streams.microphone,
@@ -8659,62 +8842,62 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8659
8842
  _i = 0, _streamChecks = streamChecks;
8660
8843
  case 6:
8661
8844
  if (!(_i < _streamChecks.length)) {
8662
- _context38.next = 13;
8845
+ _context40.next = 13;
8663
8846
  break;
8664
8847
  }
8665
8848
  _streamChecks$_i = _streamChecks[_i], stream = _streamChecks$_i.stream, name = _streamChecks$_i.name;
8666
8849
  if (!((stream === null || stream === void 0 ? void 0 : stream.readyState) === 'ended')) {
8667
- _context38.next = 10;
8850
+ _context40.next = 10;
8668
8851
  break;
8669
8852
  }
8670
8853
  throw new Error("Attempted to publish ".concat(name, " stream with ended readyState, correlationId=").concat(this.correlationId));
8671
8854
  case 10:
8672
8855
  _i++;
8673
- _context38.next = 6;
8856
+ _context40.next = 6;
8674
8857
  break;
8675
8858
  case 13:
8676
8859
  floorRequestNeeded = false; // Screenshare Audio is supported only in multi stream. So we check for screenshare audio presence only if it's a multi stream meeting
8677
8860
  if (!(this.isMultistream && (_streams$screenShare5 = streams.screenShare) !== null && _streams$screenShare5 !== void 0 && _streams$screenShare5.audio)) {
8678
- _context38.next = 18;
8861
+ _context40.next = 18;
8679
8862
  break;
8680
8863
  }
8681
- _context38.next = 17;
8864
+ _context40.next = 17;
8682
8865
  return this.setLocalShareAudioStream(streams.screenShare.audio);
8683
8866
  case 17:
8684
8867
  floorRequestNeeded = this.screenShareFloorState === ScreenShareFloorStatus.RELEASED;
8685
8868
  case 18:
8686
8869
  if (!((_streams$screenShare6 = streams.screenShare) !== null && _streams$screenShare6 !== void 0 && _streams$screenShare6.video)) {
8687
- _context38.next = 22;
8870
+ _context40.next = 22;
8688
8871
  break;
8689
8872
  }
8690
- _context38.next = 21;
8873
+ _context40.next = 21;
8691
8874
  return this.setLocalShareVideoStream((_streams$screenShare7 = streams.screenShare) === null || _streams$screenShare7 === void 0 ? void 0 : _streams$screenShare7.video);
8692
8875
  case 21:
8693
8876
  floorRequestNeeded = this.screenShareFloorState === ScreenShareFloorStatus.RELEASED;
8694
8877
  case 22:
8695
8878
  if (!streams.microphone) {
8696
- _context38.next = 25;
8879
+ _context40.next = 25;
8697
8880
  break;
8698
8881
  }
8699
- _context38.next = 25;
8882
+ _context40.next = 25;
8700
8883
  return this.setLocalAudioStream(streams.microphone);
8701
8884
  case 25:
8702
8885
  if (!streams.camera) {
8703
- _context38.next = 28;
8886
+ _context40.next = 28;
8704
8887
  break;
8705
8888
  }
8706
- _context38.next = 28;
8889
+ _context40.next = 28;
8707
8890
  return this.setLocalVideoStream(streams.camera);
8708
8891
  case 28:
8709
8892
  if (this.isMultistream) {
8710
- _context38.next = 31;
8893
+ _context40.next = 31;
8711
8894
  break;
8712
8895
  }
8713
- _context38.next = 31;
8896
+ _context40.next = 31;
8714
8897
  return this.updateTranscodedMediaConnection();
8715
8898
  case 31:
8716
8899
  if (!floorRequestNeeded) {
8717
- _context38.next = 37;
8900
+ _context40.next = 37;
8718
8901
  break;
8719
8902
  }
8720
8903
  this.localShareInstanceId = _uuid.default.v4();
@@ -8738,15 +8921,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8738
8921
  // we're sending the http request to Locus to request the screen share floor
8739
8922
  // only after the SDP update, because that's how it's always been done for transcoded meetings
8740
8923
  // and also if sharing from the start, we need confluence to have been created
8741
- _context38.next = 37;
8924
+ _context40.next = 37;
8742
8925
  return this.enqueueScreenShareFloorRequest();
8743
8926
  case 37:
8744
8927
  case "end":
8745
- return _context38.stop();
8928
+ return _context40.stop();
8746
8929
  }
8747
- }, _callee38, this);
8930
+ }, _callee40, this);
8748
8931
  }));
8749
- function publishStreams(_x41) {
8932
+ function publishStreams(_x42) {
8750
8933
  return _publishStreams.apply(this, arguments);
8751
8934
  }
8752
8935
  return publishStreams;
@@ -8761,10 +8944,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8761
8944
  }, {
8762
8945
  key: "unpublishStreams",
8763
8946
  value: (function () {
8764
- var _unpublishStreams = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee39(streams) {
8947
+ var _unpublishStreams = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee41(streams) {
8765
8948
  var promises, _iterator, _step, stream;
8766
- return _regenerator.default.wrap(function _callee39$(_context39) {
8767
- while (1) switch (_context39.prev = _context39.next) {
8949
+ return _regenerator.default.wrap(function _callee41$(_context41) {
8950
+ while (1) switch (_context41.prev = _context41.next) {
8768
8951
  case 0:
8769
8952
  _loggerProxy.default.logger.info("Meeting:index#unpublishStreams --> called with: ".concat((0, _stringify.default)(streams)));
8770
8953
  this.checkMediaConnection();
@@ -8796,7 +8979,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8796
8979
  if (!this.isMultistream) {
8797
8980
  promises.push(this.updateTranscodedMediaConnection());
8798
8981
  }
8799
- _context39.next = 8;
8982
+ _context41.next = 8;
8800
8983
  return _promise.default.all(promises);
8801
8984
  case 8:
8802
8985
  // we're allowing for the SDK to support just audio share as well
@@ -8817,11 +9000,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8817
9000
  }
8818
9001
  case 9:
8819
9002
  case "end":
8820
- return _context39.stop();
9003
+ return _context41.stop();
8821
9004
  }
8822
- }, _callee39, this);
9005
+ }, _callee41, this);
8823
9006
  }));
8824
- function unpublishStreams(_x42) {
9007
+ function unpublishStreams(_x43) {
8825
9008
  return _unpublishStreams.apply(this, arguments);
8826
9009
  }
8827
9010
  return unpublishStreams;
@@ -8878,64 +9061,6 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8878
9061
  }
8879
9062
  return _promise.default.resolve();
8880
9063
  }
8881
- }], [{
8882
- key: "handleDeviceLogging",
8883
- value: (function () {
8884
- var _handleDeviceLogging = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee40(isAudioEnabled, isVideoEnabled) {
8885
- var devices;
8886
- return _regenerator.default.wrap(function _callee40$(_context40) {
8887
- while (1) switch (_context40.prev = _context40.next) {
8888
- case 0:
8889
- _context40.prev = 0;
8890
- devices = [];
8891
- if (!(isVideoEnabled && isAudioEnabled)) {
8892
- _context40.next = 8;
8893
- break;
8894
- }
8895
- _context40.next = 5;
8896
- return (0, _mediaHelpers.getDevices)();
8897
- case 5:
8898
- devices = _context40.sent;
8899
- _context40.next = 18;
8900
- break;
8901
- case 8:
8902
- if (!isVideoEnabled) {
8903
- _context40.next = 14;
8904
- break;
8905
- }
8906
- _context40.next = 11;
8907
- return (0, _mediaHelpers.getDevices)(_media.default.DeviceKind.VIDEO_INPUT);
8908
- case 11:
8909
- devices = _context40.sent;
8910
- _context40.next = 18;
8911
- break;
8912
- case 14:
8913
- if (!isAudioEnabled) {
8914
- _context40.next = 18;
8915
- break;
8916
- }
8917
- _context40.next = 17;
8918
- return (0, _mediaHelpers.getDevices)(_media.default.DeviceKind.AUDIO_INPUT);
8919
- case 17:
8920
- devices = _context40.sent;
8921
- case 18:
8922
- _util2.default.handleDeviceLogging(devices);
8923
- _context40.next = 23;
8924
- break;
8925
- case 21:
8926
- _context40.prev = 21;
8927
- _context40.t0 = _context40["catch"](0);
8928
- case 23:
8929
- case "end":
8930
- return _context40.stop();
8931
- }
8932
- }, _callee40, null, [[0, 21]]);
8933
- }));
8934
- function handleDeviceLogging(_x43, _x44) {
8935
- return _handleDeviceLogging.apply(this, arguments);
8936
- }
8937
- return handleDeviceLogging;
8938
- }())
8939
9064
  }]);
8940
9065
  return Meeting;
8941
9066
  }(_webexCore.StatelessWebexPlugin);