@webex/plugin-meetings 3.7.0-next.4 → 3.7.0-next.41

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 (131) 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/{webinar-registration-error.js → join-webinar-error.js} +12 -12
  6. package/dist/common/errors/join-webinar-error.js.map +1 -0
  7. package/dist/common/errors/multistream-not-supported-error.js +53 -0
  8. package/dist/common/errors/multistream-not-supported-error.js.map +1 -0
  9. package/dist/config.js +1 -1
  10. package/dist/config.js.map +1 -1
  11. package/dist/constants.js +36 -6
  12. package/dist/constants.js.map +1 -1
  13. package/dist/index.js +16 -11
  14. package/dist/index.js.map +1 -1
  15. package/dist/interpretation/index.js +1 -1
  16. package/dist/interpretation/siLanguage.js +1 -1
  17. package/dist/locus-info/index.js +13 -2
  18. package/dist/locus-info/index.js.map +1 -1
  19. package/dist/locus-info/selfUtils.js +30 -17
  20. package/dist/locus-info/selfUtils.js.map +1 -1
  21. package/dist/meeting/in-meeting-actions.js +13 -1
  22. package/dist/meeting/in-meeting-actions.js.map +1 -1
  23. package/dist/meeting/index.js +922 -800
  24. package/dist/meeting/index.js.map +1 -1
  25. package/dist/meeting/locusMediaRequest.js +9 -0
  26. package/dist/meeting/locusMediaRequest.js.map +1 -1
  27. package/dist/meeting/request.js +30 -0
  28. package/dist/meeting/request.js.map +1 -1
  29. package/dist/meeting/request.type.js.map +1 -1
  30. package/dist/meeting/util.js +16 -16
  31. package/dist/meeting/util.js.map +1 -1
  32. package/dist/meeting-info/meeting-info-v2.js +29 -17
  33. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  34. package/dist/meetings/index.js +6 -3
  35. package/dist/meetings/index.js.map +1 -1
  36. package/dist/meetings/util.js +1 -1
  37. package/dist/meetings/util.js.map +1 -1
  38. package/dist/member/index.js +9 -0
  39. package/dist/member/index.js.map +1 -1
  40. package/dist/member/types.js.map +1 -1
  41. package/dist/member/util.js +39 -28
  42. package/dist/member/util.js.map +1 -1
  43. package/dist/members/util.js +4 -2
  44. package/dist/members/util.js.map +1 -1
  45. package/dist/metrics/constants.js +1 -1
  46. package/dist/metrics/constants.js.map +1 -1
  47. package/dist/multistream/remoteMedia.js +30 -15
  48. package/dist/multistream/remoteMedia.js.map +1 -1
  49. package/dist/multistream/sendSlotManager.js +24 -0
  50. package/dist/multistream/sendSlotManager.js.map +1 -1
  51. package/dist/recording-controller/enums.js +8 -4
  52. package/dist/recording-controller/enums.js.map +1 -1
  53. package/dist/recording-controller/index.js +18 -9
  54. package/dist/recording-controller/index.js.map +1 -1
  55. package/dist/recording-controller/util.js +13 -9
  56. package/dist/recording-controller/util.js.map +1 -1
  57. package/dist/roap/index.js +10 -8
  58. package/dist/roap/index.js.map +1 -1
  59. package/dist/types/annotation/index.d.ts +5 -0
  60. package/dist/types/common/errors/{webinar-registration-error.d.ts → join-webinar-error.d.ts} +2 -2
  61. package/dist/types/common/errors/multistream-not-supported-error.d.ts +17 -0
  62. package/dist/types/constants.d.ts +28 -1
  63. package/dist/types/index.d.ts +3 -3
  64. package/dist/types/locus-info/index.d.ts +2 -1
  65. package/dist/types/meeting/in-meeting-actions.d.ts +12 -0
  66. package/dist/types/meeting/index.d.ts +20 -12
  67. package/dist/types/meeting/locusMediaRequest.d.ts +4 -0
  68. package/dist/types/meeting/request.d.ts +12 -1
  69. package/dist/types/meeting/request.type.d.ts +6 -0
  70. package/dist/types/meeting/util.d.ts +1 -1
  71. package/dist/types/meeting-info/meeting-info-v2.d.ts +4 -4
  72. package/dist/types/meetings/index.d.ts +3 -0
  73. package/dist/types/member/index.d.ts +1 -0
  74. package/dist/types/member/types.d.ts +7 -0
  75. package/dist/types/members/util.d.ts +2 -0
  76. package/dist/types/metrics/constants.d.ts +1 -1
  77. package/dist/types/multistream/sendSlotManager.d.ts +8 -1
  78. package/dist/types/recording-controller/enums.d.ts +5 -2
  79. package/dist/types/recording-controller/index.d.ts +1 -0
  80. package/dist/types/recording-controller/util.d.ts +2 -1
  81. package/dist/webinar/index.js +390 -7
  82. package/dist/webinar/index.js.map +1 -1
  83. package/package.json +23 -22
  84. package/src/annotation/index.ts +16 -0
  85. package/src/common/errors/join-webinar-error.ts +24 -0
  86. package/src/common/errors/multistream-not-supported-error.ts +30 -0
  87. package/src/config.ts +1 -1
  88. package/src/constants.ts +33 -3
  89. package/src/index.ts +5 -3
  90. package/src/locus-info/index.ts +17 -2
  91. package/src/locus-info/selfUtils.ts +19 -6
  92. package/src/meeting/in-meeting-actions.ts +25 -0
  93. package/src/meeting/index.ts +257 -80
  94. package/src/meeting/locusMediaRequest.ts +7 -0
  95. package/src/meeting/request.ts +26 -1
  96. package/src/meeting/request.type.ts +7 -0
  97. package/src/meeting/util.ts +8 -10
  98. package/src/meeting-info/meeting-info-v2.ts +23 -11
  99. package/src/meetings/index.ts +8 -2
  100. package/src/meetings/util.ts +2 -1
  101. package/src/member/index.ts +9 -0
  102. package/src/member/types.ts +8 -0
  103. package/src/member/util.ts +34 -24
  104. package/src/members/util.ts +1 -0
  105. package/src/metrics/constants.ts +1 -1
  106. package/src/multistream/remoteMedia.ts +28 -15
  107. package/src/multistream/sendSlotManager.ts +31 -0
  108. package/src/recording-controller/enums.ts +5 -2
  109. package/src/recording-controller/index.ts +17 -4
  110. package/src/recording-controller/util.ts +20 -5
  111. package/src/roap/index.ts +10 -8
  112. package/src/webinar/index.ts +235 -9
  113. package/test/unit/spec/annotation/index.ts +46 -1
  114. package/test/unit/spec/locus-info/index.js +222 -0
  115. package/test/unit/spec/locus-info/selfConstant.js +7 -0
  116. package/test/unit/spec/locus-info/selfUtils.js +91 -1
  117. package/test/unit/spec/meeting/in-meeting-actions.ts +15 -1
  118. package/test/unit/spec/meeting/index.js +685 -102
  119. package/test/unit/spec/meeting/utils.js +22 -19
  120. package/test/unit/spec/meeting-info/meetinginfov2.js +9 -4
  121. package/test/unit/spec/meetings/index.js +9 -5
  122. package/test/unit/spec/meetings/utils.js +10 -0
  123. package/test/unit/spec/member/util.js +52 -11
  124. package/test/unit/spec/members/utils.js +95 -0
  125. package/test/unit/spec/multistream/remoteMedia.ts +11 -7
  126. package/test/unit/spec/recording-controller/index.js +61 -5
  127. package/test/unit/spec/recording-controller/util.js +39 -3
  128. package/test/unit/spec/roap/index.ts +47 -0
  129. package/test/unit/spec/webinar/index.ts +504 -0
  130. package/dist/common/errors/webinar-registration-error.js.map +0 -1
  131. 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,8 @@ 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 _multistreamNotSupportedError = _interopRequireDefault(require("../common/errors/multistream-not-supported-error"));
91
92
  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
93
  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
94
  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; }
@@ -567,8 +568,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
567
568
  if (
568
569
  // @ts-ignore - config coming from registerPlugin
569
570
  (_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;
571
+ var member = _this.members.membersCollection.get(e.data.sender.participantId);
572
+ if (!member) {
573
+ // @ts-ignore -- fix type
574
+ _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."));
575
+ break;
576
+ }
577
+ var name = member.name;
572
578
  var processedReaction = {
573
579
  reaction: e.data.reaction,
574
580
  sender: {
@@ -675,6 +681,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
675
681
  */
676
682
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "roapMessageReceived", function (roapMessage) {
677
683
  var mediaServer = _util3.default.getMediaServer(roapMessage.sdp);
684
+ if (_this.isMultistream && mediaServer !== 'homer') {
685
+ throw new _multistreamNotSupportedError.default("Client asked for multistream backend (Homer), but got ".concat(mediaServer, " instead"));
686
+ }
678
687
  _this.mediaProperties.webrtcMediaConnection.roapMessageReceived(roapMessage);
679
688
  if (mediaServer) {
680
689
  _this.mediaProperties.webrtcMediaConnection.mediaServer = mediaServer;
@@ -769,15 +778,17 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
769
778
  }), {
770
779
  logText: "".concat(LOG_HEADER, " Roap Offer")
771
780
  }).catch(function (error) {
781
+ var multistreamNotSupported = error instanceof _multistreamNotSupportedError.default;
782
+
772
783
  // @ts-ignore
773
784
  _this.webex.internal.newMetrics.submitClientEvent({
774
785
  name: 'client.media-engine.remote-sdp-received',
775
786
  payload: {
776
- canProceed: false,
787
+ canProceed: multistreamNotSupported,
777
788
  errors: [
778
789
  // @ts-ignore
779
790
  _this.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({
780
- clientErrorCode: _internalPluginMetrics.CALL_DIAGNOSTIC_CONFIG.MISSING_ROAP_ANSWER_CLIENT_CODE
791
+ clientErrorCode: multistreamNotSupported ? _internalPluginMetrics.CALL_DIAGNOSTIC_CONFIG.MULTISTREAM_NOT_AVAILABLE_CLIENT_CODE : _internalPluginMetrics.CALL_DIAGNOSTIC_CONFIG.MISSING_ROAP_ANSWER_CLIENT_CODE
781
792
  })]
782
793
  },
783
794
  options: {
@@ -785,7 +796,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
785
796
  rawError: error
786
797
  }
787
798
  });
788
- _this.deferSDPAnswer.reject(new Error('failed to send ROAP SDP offer'));
799
+ _this.deferSDPAnswer.reject(error);
789
800
  clearTimeout(_this.sdpResponseTimer);
790
801
  _this.sdpResponseTimer = undefined;
791
802
  });
@@ -1027,6 +1038,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1027
1038
  options.data.intervalMetadata.peerReflexiveIP =
1028
1039
  // @ts-ignore
1029
1040
  ((_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;
1041
+ var members = _this.getMembers().membersCollection.members;
1042
+
1043
+ // Count members that are in the meeting
1044
+ options.data.intervalMetadata.meetingUserCount = (0, _values.default)(members).filter(function (member) {
1045
+ return member.isInMeeting;
1046
+ }).length;
1047
+
1030
1048
  // @ts-ignore
1031
1049
  _this.webex.internal.newMetrics.submitMQE({
1032
1050
  name: 'client.mediaquality.event',
@@ -1344,6 +1362,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1344
1362
  _this.stopTranscription();
1345
1363
  _this.transcription = undefined;
1346
1364
  }
1365
+ _this.annotation.deregisterEvents();
1366
+
1367
+ // @ts-ignore - fix types
1368
+ _this.webex.internal.llm.off('event:relay.event', _this.processRelayEvent);
1347
1369
  });
1348
1370
  /**
1349
1371
  * starts keepAlives being sent
@@ -1369,10 +1391,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1369
1391
  _loggerProxy.default.logger.warn('Meeting:index#startKeepAlive --> keepAlive not started: keepAliveSecs <= 1');
1370
1392
  return;
1371
1393
  }
1372
- var keepAliveUrl = _this.joinedWith.keepAliveUrl;
1373
1394
  var keepAliveInterval = (_this.joinedWith.keepAliveSecs - 1) * 750; // taken from UCF
1374
1395
 
1375
1396
  _this.keepAliveTimerId = setInterval(function () {
1397
+ var keepAliveUrl = _this.joinedWith.keepAliveUrl;
1376
1398
  _this.meetingRequest.keepAlive({
1377
1399
  keepAliveUrl: keepAliveUrl
1378
1400
  }).catch(function (error) {
@@ -1520,7 +1542,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1520
1542
  * @memberof Meeting
1521
1543
  */
1522
1544
  // @ts-ignore
1523
- _this.webinar = new _webinar.default({}, {
1545
+ _this.webinar = new _webinar.default({
1546
+ meetingId: _this.id
1547
+ }, {
1524
1548
  parent: _this.webex
1525
1549
  });
1526
1550
  /**
@@ -2427,19 +2451,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2427
2451
  }
2428
2452
  throw new _permission.default();
2429
2453
  case 21:
2430
- if (!(_context5.t0 instanceof _meetingInfoV.MeetingInfoV2WebinarRegistrationError)) {
2431
- _context5.next = 28;
2454
+ if (!(_context5.t0 instanceof _meetingInfoV.MeetingInfoV2JoinWebinarError)) {
2455
+ _context5.next = 29;
2432
2456
  break;
2433
2457
  }
2434
2458
  this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.WEBINAR_REGISTRATION;
2459
+ if (_constants.WEBINAR_ERROR_WEBCAST.includes(_context5.t0.wbxAppApiCode)) {
2460
+ this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.NEED_JOIN_WITH_WEBCAST;
2461
+ } else if (_constants.WEBINAR_ERROR_REGISTRATIONID.includes(_context5.t0.wbxAppApiCode)) {
2462
+ this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.WEBINAR_NEED_REGISTRATIONID;
2463
+ }
2435
2464
  this.meetingInfoFailureCode = _context5.t0.wbxAppApiCode;
2436
2465
  if (_context5.t0.meetingInfo) {
2437
2466
  this.meetingInfo = _context5.t0.meetingInfo;
2438
2467
  }
2439
- throw new _webinarRegistrationError.default();
2440
- case 28:
2468
+ throw new _joinWebinarError.default();
2469
+ case 29:
2441
2470
  if (!(_context5.t0 instanceof _meetingInfoV.MeetingInfoV2PasswordError)) {
2442
- _context5.next = 40;
2471
+ _context5.next = 41;
2443
2472
  break;
2444
2473
  }
2445
2474
  _loggerProxy.default.logger.info( // @ts-ignore
@@ -2454,16 +2483,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2454
2483
  this.passwordStatus = _constants.PASSWORD_STATUS.REQUIRED;
2455
2484
  this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.WRONG_PASSWORD;
2456
2485
  if (!this.requiredCaptcha) {
2457
- _context5.next = 37;
2486
+ _context5.next = 38;
2458
2487
  break;
2459
2488
  }
2460
- _context5.next = 37;
2489
+ _context5.next = 38;
2461
2490
  return this.refreshCaptcha();
2462
- case 37:
2491
+ case 38:
2463
2492
  throw new _passwordError.default();
2464
- case 40:
2493
+ case 41:
2465
2494
  if (!(_context5.t0 instanceof _meetingInfoV.MeetingInfoV2CaptchaError)) {
2466
- _context5.next = 49;
2495
+ _context5.next = 50;
2467
2496
  break;
2468
2497
  }
2469
2498
  _loggerProxy.default.logger.info( // @ts-ignore
@@ -2475,10 +2504,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2475
2504
  }
2476
2505
  this.requiredCaptcha = _context5.t0.captchaInfo;
2477
2506
  throw new _captchaError.default();
2478
- case 49:
2507
+ case 50:
2479
2508
  this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.OTHER;
2480
2509
  throw _context5.t0;
2481
- case 51:
2510
+ case 52:
2482
2511
  case "end":
2483
2512
  return _context5.stop();
2484
2513
  }
@@ -3244,6 +3273,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3244
3273
  });
3245
3274
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_PRACTICE_SESSION_STATUS_UPDATED, function (_ref24) {
3246
3275
  var state = _ref24.state;
3276
+ _this13.webinar.updatePracticeSessionStatus(state);
3247
3277
  _triggerProxy.default.trigger(_this13, {
3248
3278
  file: 'meeting/index',
3249
3279
  function: 'setupLocusControlsListener'
@@ -3310,7 +3340,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3310
3340
  this.locusInfo.on(_constants.EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES, /*#__PURE__*/function () {
3311
3341
  var _ref27 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(payload) {
3312
3342
  var _payload$previous, _payload$previous2;
3313
- var _payload$current, contentShare, whiteboardShare, previousContentShare, previousWhiteboardShare, newShareStatus, oldShareStatus, sendStartedSharingRemote, _this14$mediaProperti;
3343
+ var _payload$current, contentShare, whiteboardShare, previousContentShare, previousWhiteboardShare, newShareStatus, _this14$locusInfo, _this14$locusInfo$inf, _this14$webinar, oldShareStatus, sendStartedSharingRemote, _this14$mediaProperti;
3314
3344
  return _regenerator.default.wrap(function _callee8$(_context8) {
3315
3345
  while (1) switch (_context8.prev = _context8.next) {
3316
3346
  case 0:
@@ -3318,7 +3348,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3318
3348
  previousContentShare = (_payload$previous = payload.previous) === null || _payload$previous === void 0 ? void 0 : _payload$previous.content;
3319
3349
  previousWhiteboardShare = (_payload$previous2 = payload.previous) === null || _payload$previous2 === void 0 ? void 0 : _payload$previous2.whiteboard;
3320
3350
  _this14.triggerAnnotationInfoEvent(contentShare, previousContentShare);
3321
- 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))) {
3351
+ 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))) {
3322
3352
  _context8.next = 6;
3323
3353
  break;
3324
3354
  }
@@ -3344,7 +3374,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3344
3374
  // It does not matter who requested to share the whiteboard, everyone gets the same view
3345
3375
  else if (whiteboardShare.disposition === _constants.FLOOR_ACTION.GRANTED) {
3346
3376
  // WHITEBOARD - sharing whiteboard
3347
- newShareStatus = _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE;
3377
+ // Webinar attendee should receive whiteboard as remote share
3378
+ 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;
3348
3379
  }
3349
3380
  // or if content share is either released or null and whiteboard share is either released or null, no one is sharing
3350
3381
  else if ((previousContentShare && contentShare.disposition === _constants.FLOOR_ACTION.RELEASED || contentShare.disposition === null) && (previousWhiteboardShare && whiteboardShare.disposition === _constants.FLOOR_ACTION.RELEASED || whiteboardShare.disposition === null)) {
@@ -3578,7 +3609,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3578
3609
  value: function setUpLocusResourcesListener() {
3579
3610
  var _this17 = this;
3580
3611
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.LINKS_RESOURCES, function (payload) {
3581
- _this17.webinar.updateWebcastUrl(payload);
3612
+ if (payload) {
3613
+ _this17.webinar.updateWebcastUrl(payload);
3614
+ _triggerProxy.default.trigger(_this17, {
3615
+ file: 'meeting/index',
3616
+ function: 'setUpLocusInfoMeetingInfoListener'
3617
+ }, _constants.EVENT_TRIGGERS.MEETING_RESOURCE_LINKS_UPDATE, {
3618
+ payload: payload
3619
+ });
3620
+ }
3582
3621
  });
3583
3622
  }
3584
3623
 
@@ -3844,6 +3883,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3844
3883
  _this20.setSendNamedMediaGroup(_internalMediaCore.MediaType.AudioMain);
3845
3884
  }
3846
3885
  });
3886
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_MEETING_BRB_CHANGED, function (payload) {
3887
+ _triggerProxy.default.trigger(_this20, {
3888
+ file: 'meeting/index',
3889
+ function: 'setUpLocusInfoSelfListener'
3890
+ }, _constants.EVENT_TRIGGERS.MEETING_SELF_BRB_UPDATE, {
3891
+ payload: payload
3892
+ });
3893
+ });
3847
3894
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_ROLES_CHANGED, function (payload) {
3848
3895
  var _payload$newRoles, _payload$newRoles2, _payload$newRoles3;
3849
3896
  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));
@@ -4042,6 +4089,62 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4042
4089
  return this.members.admitMembers(memberIds, locusUrls);
4043
4090
  }
4044
4091
 
4092
+ /**
4093
+ * Manages be right back status updates for the current participant.
4094
+ *
4095
+ * @param {boolean} enabled - Indicates whether the user enabled brb or not.
4096
+ * @returns {Promise<void>} resolves when the brb status is updated or does nothing if not in a multistream meeting.
4097
+ * @throws {Error} - Throws an error if the request fails.
4098
+ */
4099
+ }, {
4100
+ key: "beRightBack",
4101
+ value: (function () {
4102
+ var _beRightBack = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11(enabled) {
4103
+ var _this23 = this;
4104
+ var errorMessage, error, _errorMessage, _error;
4105
+ return _regenerator.default.wrap(function _callee11$(_context11) {
4106
+ while (1) switch (_context11.prev = _context11.next) {
4107
+ case 0:
4108
+ if (this.isMultistream) {
4109
+ _context11.next = 5;
4110
+ break;
4111
+ }
4112
+ errorMessage = 'Meeting:index#beRightBack --> Not a multistream meeting';
4113
+ error = new Error(errorMessage);
4114
+ _loggerProxy.default.logger.error(error);
4115
+ return _context11.abrupt("return", _promise.default.reject(error));
4116
+ case 5:
4117
+ if (this.mediaProperties.webrtcMediaConnection) {
4118
+ _context11.next = 10;
4119
+ break;
4120
+ }
4121
+ _errorMessage = 'Meeting:index#beRightBack --> WebRTC media connection is not defined';
4122
+ _error = new Error(_errorMessage);
4123
+ _loggerProxy.default.logger.error(_error);
4124
+ return _context11.abrupt("return", _promise.default.reject(_error));
4125
+ case 10:
4126
+ return _context11.abrupt("return", this.meetingRequest.setBrb({
4127
+ enabled: enabled,
4128
+ locusUrl: this.locusUrl,
4129
+ deviceUrl: this.deviceUrl,
4130
+ selfId: this.selfId
4131
+ }).then(function () {
4132
+ _this23.sendSlotManager.setSourceStateOverride(_internalMediaCore.MediaType.VideoMain, enabled ? 'away' : null);
4133
+ }).catch(function (error) {
4134
+ _loggerProxy.default.logger.error('Meeting:index#beRightBack --> Error ', error);
4135
+ return _promise.default.reject(error);
4136
+ }));
4137
+ case 11:
4138
+ case "end":
4139
+ return _context11.stop();
4140
+ }
4141
+ }, _callee11, this);
4142
+ }));
4143
+ function beRightBack(_x11) {
4144
+ return _beRightBack.apply(this, arguments);
4145
+ }
4146
+ return beRightBack;
4147
+ }()
4045
4148
  /**
4046
4149
  * Remove the member from the meeting, boot them
4047
4150
  * @param {String} memberId
@@ -4049,6 +4152,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4049
4152
  * @public
4050
4153
  * @memberof Meeting
4051
4154
  */
4155
+ )
4052
4156
  }, {
4053
4157
  key: "remove",
4054
4158
  value: function remove(memberId) {
@@ -4226,6 +4330,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4226
4330
  canStopRecording: _util4.default.canUserStop(this.userDisplayHints, this.selfUserPolicies),
4227
4331
  canPauseRecording: _util4.default.canUserPause(this.userDisplayHints, this.selfUserPolicies),
4228
4332
  canResumeRecording: _util4.default.canUserResume(this.userDisplayHints, this.selfUserPolicies),
4333
+ isPremiseRecordingEnabled: _util4.default.isPremiseRecordingEnabled(this.userDisplayHints, this.selfUserPolicies),
4229
4334
  canRaiseHand: _util2.default.canUserRaiseHand(this.userDisplayHints),
4230
4335
  canLowerAllHands: _util2.default.canUserLowerAllHands(this.userDisplayHints),
4231
4336
  canLowerSomeoneElsesHand: _util2.default.canUserLowerSomeoneElsesHand(this.userDisplayHints),
@@ -4245,6 +4350,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4245
4350
  waitingForOthersToJoin: _util2.default.waitingForOthersToJoin(this.userDisplayHints),
4246
4351
  canSendReactions: _util2.default.canSendReactions(this.inMeetingActions.canSendReactions, this.userDisplayHints),
4247
4352
  canManageBreakout: _util2.default.canManageBreakout(this.userDisplayHints),
4353
+ canStartBreakout: _util2.default.canStartBreakout(this.userDisplayHints),
4248
4354
  canBroadcastMessageToBreakout: _util2.default.canBroadcastMessageToBreakout(this.userDisplayHints, this.selfUserPolicies),
4249
4355
  canAdmitLobbyToBreakout: _util2.default.canAdmitLobbyToBreakout(this.userDisplayHints),
4250
4356
  isBreakoutPreassignmentsEnabled: _util2.default.isBreakoutPreassignmentsEnabled(this.userDisplayHints),
@@ -4355,6 +4461,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4355
4461
  requiredHints: [_constants.DISPLAY_HINTS.DISABLE_STAGE_VIEW],
4356
4462
  displayHints: this.userDisplayHints
4357
4463
  }),
4464
+ isPracticeSessionOn: _util5.default.hasHints({
4465
+ requiredHints: [_constants.DISPLAY_HINTS.PRACTICE_SESSION_ON],
4466
+ displayHints: this.userDisplayHints
4467
+ }),
4468
+ isPracticeSessionOff: _util5.default.hasHints({
4469
+ requiredHints: [_constants.DISPLAY_HINTS.PRACTICE_SESSION_OFF],
4470
+ displayHints: this.userDisplayHints
4471
+ }),
4472
+ canStartPracticeSession: _util5.default.hasHints({
4473
+ requiredHints: [_constants.DISPLAY_HINTS.SHOW_PRACTICE_SESSION_START],
4474
+ displayHints: this.userDisplayHints
4475
+ }),
4476
+ canStopPracticeSession: _util5.default.hasHints({
4477
+ requiredHints: [_constants.DISPLAY_HINTS.SHOW_PRACTICE_SESSION_STOP],
4478
+ displayHints: this.userDisplayHints
4479
+ }),
4358
4480
  canShareFile: _util5.default.hasHints({
4359
4481
  requiredHints: [_constants.DISPLAY_HINTS.SHARE_FILE],
4360
4482
  displayHints: this.userDisplayHints
@@ -4506,25 +4628,26 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4506
4628
  }, {
4507
4629
  key: "setLogUploadTimer",
4508
4630
  value: function setLogUploadTimer() {
4509
- var _this23 = this;
4631
+ var _this24 = this;
4510
4632
  // 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
4511
- var LOG_UPLOAD_INTERVALS = [0.1, 1, 15, 15, 30, 30, 30, 60];
4512
- var delay = 1000 *
4633
+ var LOG_UPLOAD_INTERVALS = [0.1, 15, 30, 60]; // in minutes
4634
+
4635
+ var delay = 1000 * 60 *
4513
4636
  // @ts-ignore - config coming from registerPlugin
4514
4637
  this.config.logUploadIntervalMultiplicationFactor * LOG_UPLOAD_INTERVALS[this.logUploadIntervalIndex];
4515
4638
  if (this.logUploadIntervalIndex < LOG_UPLOAD_INTERVALS.length - 1) {
4516
4639
  this.logUploadIntervalIndex += 1;
4517
4640
  }
4518
4641
  this.uploadLogsTimer = (0, _commonTimers.safeSetTimeout)(function () {
4519
- _this23.uploadLogsTimer = undefined;
4520
- _this23.uploadLogs();
4642
+ _this24.uploadLogsTimer = undefined;
4643
+ _this24.uploadLogs();
4521
4644
 
4522
4645
  // just as an extra precaution, to avoid uploading logs forever in case something goes wrong
4523
4646
  // and the page remains opened, we stop it if there is no media connection
4524
- if (!_this23.mediaProperties.webrtcMediaConnection) {
4647
+ if (!_this24.mediaProperties.webrtcMediaConnection) {
4525
4648
  return;
4526
4649
  }
4527
- _this23.setLogUploadTimer();
4650
+ _this24.setLogUploadTimer();
4528
4651
  }, delay);
4529
4652
  }
4530
4653
 
@@ -4591,7 +4714,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4591
4714
  }, {
4592
4715
  key: "closeRemoteStreams",
4593
4716
  value: function closeRemoteStreams() {
4594
- var _this24 = this;
4717
+ var _this25 = this;
4595
4718
  var _this$mediaProperties4 = this.mediaProperties,
4596
4719
  remoteAudioStream = _this$mediaProperties4.remoteAudioStream,
4597
4720
  remoteVideoStream = _this$mediaProperties4.remoteVideoStream,
@@ -4605,7 +4728,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4605
4728
  */
4606
4729
  // eslint-disable-next-line @typescript-eslint/no-shadow
4607
4730
  var triggerMediaStoppedEvent = function triggerMediaStoppedEvent(mediaType) {
4608
- _triggerProxy.default.trigger(_this24, {
4731
+ _triggerProxy.default.trigger(_this25, {
4609
4732
  file: 'meeting/index',
4610
4733
  function: 'closeRemoteStreams'
4611
4734
  }, _constants.EVENT_TRIGGERS.MEDIA_STOPPED, {
@@ -4639,11 +4762,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4639
4762
  }, {
4640
4763
  key: "setLocalAudioStream",
4641
4764
  value: (function () {
4642
- var _setLocalAudioStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11(localStream) {
4765
+ var _setLocalAudioStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee12(localStream) {
4643
4766
  var _this$audio2;
4644
4767
  var oldStream;
4645
- return _regenerator.default.wrap(function _callee11$(_context11) {
4646
- while (1) switch (_context11.prev = _context11.next) {
4768
+ return _regenerator.default.wrap(function _callee12$(_context12) {
4769
+ while (1) switch (_context12.prev = _context12.next) {
4647
4770
  case 0:
4648
4771
  oldStream = this.mediaProperties.audioStream;
4649
4772
  oldStream === null || oldStream === void 0 ? void 0 : oldStream.off(_mediaHelpers.LocalStreamEventNames.UserMuteStateChange, this.localAudioStreamMuteStateHandler);
@@ -4657,21 +4780,21 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4657
4780
  localStream === null || localStream === void 0 ? void 0 : localStream.on(_mediaHelpers.LocalStreamEventNames.SystemMuteStateChange, this.localAudioStreamMuteStateHandler);
4658
4781
  localStream === null || localStream === void 0 ? void 0 : localStream.on(_mediaHelpers.LocalStreamEventNames.OutputTrackChange, this.localOutputTrackChangeHandler);
4659
4782
  if (!(!this.isMultistream || !localStream)) {
4660
- _context11.next = 12;
4783
+ _context12.next = 12;
4661
4784
  break;
4662
4785
  }
4663
- _context11.next = 12;
4786
+ _context12.next = 12;
4664
4787
  return this.unpublishStream(_internalMediaCore.MediaType.AudioMain, oldStream);
4665
4788
  case 12:
4666
- _context11.next = 14;
4789
+ _context12.next = 14;
4667
4790
  return this.publishStream(_internalMediaCore.MediaType.AudioMain, this.mediaProperties.audioStream);
4668
4791
  case 14:
4669
4792
  case "end":
4670
- return _context11.stop();
4793
+ return _context12.stop();
4671
4794
  }
4672
- }, _callee11, this);
4795
+ }, _callee12, this);
4673
4796
  }));
4674
- function setLocalAudioStream(_x11) {
4797
+ function setLocalAudioStream(_x12) {
4675
4798
  return _setLocalAudioStream.apply(this, arguments);
4676
4799
  }
4677
4800
  return setLocalAudioStream;
@@ -4687,11 +4810,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4687
4810
  }, {
4688
4811
  key: "setLocalVideoStream",
4689
4812
  value: (function () {
4690
- var _setLocalVideoStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee12(localStream) {
4813
+ var _setLocalVideoStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee13(localStream) {
4691
4814
  var _this$video2;
4692
4815
  var oldStream;
4693
- return _regenerator.default.wrap(function _callee12$(_context12) {
4694
- while (1) switch (_context12.prev = _context12.next) {
4816
+ return _regenerator.default.wrap(function _callee13$(_context13) {
4817
+ while (1) switch (_context13.prev = _context13.next) {
4695
4818
  case 0:
4696
4819
  oldStream = this.mediaProperties.videoStream;
4697
4820
  oldStream === null || oldStream === void 0 ? void 0 : oldStream.off(_mediaHelpers.LocalStreamEventNames.UserMuteStateChange, this.localVideoStreamMuteStateHandler);
@@ -4705,21 +4828,21 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4705
4828
  localStream === null || localStream === void 0 ? void 0 : localStream.on(_mediaHelpers.LocalStreamEventNames.SystemMuteStateChange, this.localVideoStreamMuteStateHandler);
4706
4829
  localStream === null || localStream === void 0 ? void 0 : localStream.on(_mediaHelpers.LocalStreamEventNames.OutputTrackChange, this.localOutputTrackChangeHandler);
4707
4830
  if (!(!this.isMultistream || !localStream)) {
4708
- _context12.next = 12;
4831
+ _context13.next = 12;
4709
4832
  break;
4710
4833
  }
4711
- _context12.next = 12;
4834
+ _context13.next = 12;
4712
4835
  return this.unpublishStream(_internalMediaCore.MediaType.VideoMain, oldStream);
4713
4836
  case 12:
4714
- _context12.next = 14;
4837
+ _context13.next = 14;
4715
4838
  return this.publishStream(_internalMediaCore.MediaType.VideoMain, this.mediaProperties.videoStream);
4716
4839
  case 14:
4717
4840
  case "end":
4718
- return _context12.stop();
4841
+ return _context13.stop();
4719
4842
  }
4720
- }, _callee12, this);
4843
+ }, _callee13, this);
4721
4844
  }));
4722
- function setLocalVideoStream(_x12) {
4845
+ function setLocalVideoStream(_x13) {
4723
4846
  return _setLocalVideoStream.apply(this, arguments);
4724
4847
  }
4725
4848
  return setLocalVideoStream;
@@ -4736,10 +4859,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4736
4859
  }, {
4737
4860
  key: "setLocalShareVideoStream",
4738
4861
  value: (function () {
4739
- var _setLocalShareVideoStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee13(localDisplayStream) {
4862
+ var _setLocalShareVideoStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee14(localDisplayStream) {
4740
4863
  var oldStream;
4741
- return _regenerator.default.wrap(function _callee13$(_context13) {
4742
- while (1) switch (_context13.prev = _context13.next) {
4864
+ return _regenerator.default.wrap(function _callee14$(_context14) {
4865
+ while (1) switch (_context14.prev = _context14.next) {
4743
4866
  case 0:
4744
4867
  oldStream = this.mediaProperties.shareVideoStream;
4745
4868
  oldStream === null || oldStream === void 0 ? void 0 : oldStream.off(_mediaHelpers.LocalStreamEventNames.SystemMuteStateChange, this.handleShareVideoStreamMuteStateChange);
@@ -4751,21 +4874,21 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4751
4874
  localDisplayStream === null || localDisplayStream === void 0 ? void 0 : localDisplayStream.on(_mediaHelpers.LocalStreamEventNames.OutputTrackChange, this.localOutputTrackChangeHandler);
4752
4875
  this.mediaProperties.mediaDirection.sendShare = this.mediaProperties.hasLocalShareStream();
4753
4876
  if (!(!this.isMultistream || !localDisplayStream)) {
4754
- _context13.next = 12;
4877
+ _context14.next = 12;
4755
4878
  break;
4756
4879
  }
4757
- _context13.next = 12;
4880
+ _context14.next = 12;
4758
4881
  return this.unpublishStream(_internalMediaCore.MediaType.VideoSlides, oldStream);
4759
4882
  case 12:
4760
- _context13.next = 14;
4883
+ _context14.next = 14;
4761
4884
  return this.publishStream(_internalMediaCore.MediaType.VideoSlides, this.mediaProperties.shareVideoStream);
4762
4885
  case 14:
4763
4886
  case "end":
4764
- return _context13.stop();
4887
+ return _context14.stop();
4765
4888
  }
4766
- }, _callee13, this);
4889
+ }, _callee14, this);
4767
4890
  }));
4768
- function setLocalShareVideoStream(_x13) {
4891
+ function setLocalShareVideoStream(_x14) {
4769
4892
  return _setLocalShareVideoStream.apply(this, arguments);
4770
4893
  }
4771
4894
  return setLocalShareVideoStream;
@@ -4781,10 +4904,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4781
4904
  }, {
4782
4905
  key: "setLocalShareAudioStream",
4783
4906
  value: (function () {
4784
- var _setLocalShareAudioStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee14(localSystemAudioStream) {
4907
+ var _setLocalShareAudioStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee15(localSystemAudioStream) {
4785
4908
  var oldStream;
4786
- return _regenerator.default.wrap(function _callee14$(_context14) {
4787
- while (1) switch (_context14.prev = _context14.next) {
4909
+ return _regenerator.default.wrap(function _callee15$(_context15) {
4910
+ while (1) switch (_context15.prev = _context15.next) {
4788
4911
  case 0:
4789
4912
  oldStream = this.mediaProperties.shareAudioStream;
4790
4913
  oldStream === null || oldStream === void 0 ? void 0 : oldStream.off(_mediaHelpers.StreamEventNames.Ended, this.handleShareAudioStreamEnded);
@@ -4794,21 +4917,21 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4794
4917
  localSystemAudioStream === null || localSystemAudioStream === void 0 ? void 0 : localSystemAudioStream.on(_mediaHelpers.LocalStreamEventNames.OutputTrackChange, this.localOutputTrackChangeHandler);
4795
4918
  this.mediaProperties.mediaDirection.sendShare = this.mediaProperties.hasLocalShareStream();
4796
4919
  if (!(!this.isMultistream || !localSystemAudioStream)) {
4797
- _context14.next = 10;
4920
+ _context15.next = 10;
4798
4921
  break;
4799
4922
  }
4800
- _context14.next = 10;
4923
+ _context15.next = 10;
4801
4924
  return this.unpublishStream(_internalMediaCore.MediaType.AudioSlides, oldStream);
4802
4925
  case 10:
4803
- _context14.next = 12;
4926
+ _context15.next = 12;
4804
4927
  return this.publishStream(_internalMediaCore.MediaType.AudioSlides, this.mediaProperties.shareAudioStream);
4805
4928
  case 12:
4806
4929
  case "end":
4807
- return _context14.stop();
4930
+ return _context15.stop();
4808
4931
  }
4809
- }, _callee14, this);
4932
+ }, _callee15, this);
4810
4933
  }));
4811
- function setLocalShareAudioStream(_x14) {
4934
+ function setLocalShareAudioStream(_x15) {
4812
4935
  return _setLocalShareAudioStream.apply(this, arguments);
4813
4936
  }
4814
4937
  return setLocalShareAudioStream;
@@ -4913,7 +5036,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4913
5036
  }, {
4914
5037
  key: "setMercuryListener",
4915
5038
  value: function setMercuryListener() {
4916
- var _this25 = this;
5039
+ var _this26 = this;
4917
5040
  // Client will have a socket manager and handle reconnecting to mercury, when we reconnect to mercury
4918
5041
  // if the meeting has active peer connections, it should try to reconnect.
4919
5042
  // @ts-ignore
@@ -4921,33 +5044,33 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4921
5044
  _loggerProxy.default.logger.info('Meeting:index#setMercuryListener --> Web socket online');
4922
5045
 
4923
5046
  // Only send restore event when it was disconnected before and for connected later
4924
- if (!_this25.hasWebsocketConnected) {
5047
+ if (!_this26.hasWebsocketConnected) {
4925
5048
  // @ts-ignore
4926
- _this25.webex.internal.newMetrics.submitClientEvent({
5049
+ _this26.webex.internal.newMetrics.submitClientEvent({
4927
5050
  name: 'client.mercury.connection.restored',
4928
5051
  options: {
4929
- meetingId: _this25.id
5052
+ meetingId: _this26.id
4930
5053
  }
4931
5054
  });
4932
5055
  _metrics.default.sendBehavioralMetric(_constants2.default.MERCURY_CONNECTION_RESTORED, {
4933
- correlation_id: _this25.correlationId
5056
+ correlation_id: _this26.correlationId
4934
5057
  });
4935
5058
  }
4936
- _this25.hasWebsocketConnected = true;
5059
+ _this26.hasWebsocketConnected = true;
4937
5060
  });
4938
5061
 
4939
5062
  // @ts-ignore
4940
5063
  this.webex.internal.mercury.on(_constants.OFFLINE, function () {
4941
5064
  _loggerProxy.default.logger.error('Meeting:index#setMercuryListener --> Web socket offline');
4942
5065
  // @ts-ignore
4943
- _this25.webex.internal.newMetrics.submitClientEvent({
5066
+ _this26.webex.internal.newMetrics.submitClientEvent({
4944
5067
  name: 'client.mercury.connection.lost',
4945
5068
  options: {
4946
- meetingId: _this25.id
5069
+ meetingId: _this26.id
4947
5070
  }
4948
5071
  });
4949
5072
  _metrics.default.sendBehavioralMetric(_constants2.default.MERCURY_CONNECTION_FAILURE, {
4950
- correlation_id: _this25.correlationId
5073
+ correlation_id: _this26.correlationId
4951
5074
  });
4952
5075
  });
4953
5076
  }
@@ -4956,6 +5079,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4956
5079
  * Close the peer connections and remove them from the class.
4957
5080
  * Cleanup any media connection related things.
4958
5081
  *
5082
+ * @param {boolean} resetMuteStates whether to also reset the audio/video mute state information
4959
5083
  * @returns {Promise}
4960
5084
  * @public
4961
5085
  * @memberof Meeting
@@ -4963,6 +5087,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4963
5087
  }, {
4964
5088
  key: "closePeerConnections",
4965
5089
  value: function closePeerConnections() {
5090
+ var resetMuteStates = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
4966
5091
  if (this.mediaProperties.webrtcMediaConnection) {
4967
5092
  if (this.remoteMediaManager) {
4968
5093
  this.remoteMediaManager.stop();
@@ -4976,8 +5101,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4976
5101
  this.sendSlotManager.reset();
4977
5102
  this.setNetworkStatus(undefined);
4978
5103
  }
4979
- this.audio = null;
4980
- this.video = null;
5104
+ if (resetMuteStates) {
5105
+ this.audio = null;
5106
+ this.video = null;
5107
+ }
4981
5108
  return _promise.default.resolve();
4982
5109
  }
4983
5110
 
@@ -5049,7 +5176,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5049
5176
  }, {
5050
5177
  key: "muteAudio",
5051
5178
  value: function muteAudio() {
5052
- var _this26 = this;
5179
+ var _this27 = this;
5053
5180
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5054
5181
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5055
5182
  }
@@ -5065,22 +5192,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5065
5192
 
5066
5193
  // First, stop sending the local audio media
5067
5194
  return logRequest(this.audio.handleClientRequest(this, true).then(function () {
5068
- _util2.default.handleAudioLogging(_this26.mediaProperties.audioStream);
5195
+ _util2.default.handleAudioLogging(_this27.mediaProperties.audioStream);
5069
5196
  // @ts-ignore
5070
- _this26.webex.internal.newMetrics.submitClientEvent({
5197
+ _this27.webex.internal.newMetrics.submitClientEvent({
5071
5198
  name: 'client.muted',
5072
5199
  payload: {
5073
5200
  trigger: 'user-interaction',
5074
5201
  mediaType: 'audio'
5075
5202
  },
5076
5203
  options: {
5077
- meetingId: _this26.id
5204
+ meetingId: _this27.id
5078
5205
  }
5079
5206
  });
5080
5207
  }).catch(function (error) {
5081
5208
  _metrics.default.sendBehavioralMetric(_constants2.default.MUTE_AUDIO_FAILURE, {
5082
- correlation_id: _this26.correlationId,
5083
- locus_id: _this26.locusUrl.split('/').pop(),
5209
+ correlation_id: _this27.correlationId,
5210
+ locus_id: _this27.locusUrl.split('/').pop(),
5084
5211
  reason: error.message,
5085
5212
  stack: error.stack
5086
5213
  });
@@ -5099,7 +5226,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5099
5226
  }, {
5100
5227
  key: "unmuteAudio",
5101
5228
  value: function unmuteAudio() {
5102
- var _this27 = this;
5229
+ var _this28 = this;
5103
5230
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5104
5231
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5105
5232
  }
@@ -5115,22 +5242,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5115
5242
 
5116
5243
  // First, send the control to unmute the participant on the server
5117
5244
  return logRequest(this.audio.handleClientRequest(this, false).then(function () {
5118
- _util2.default.handleAudioLogging(_this27.mediaProperties.audioStream);
5245
+ _util2.default.handleAudioLogging(_this28.mediaProperties.audioStream);
5119
5246
  // @ts-ignore
5120
- _this27.webex.internal.newMetrics.submitClientEvent({
5247
+ _this28.webex.internal.newMetrics.submitClientEvent({
5121
5248
  name: 'client.unmuted',
5122
5249
  payload: {
5123
5250
  trigger: 'user-interaction',
5124
5251
  mediaType: 'audio'
5125
5252
  },
5126
5253
  options: {
5127
- meetingId: _this27.id
5254
+ meetingId: _this28.id
5128
5255
  }
5129
5256
  });
5130
5257
  }).catch(function (error) {
5131
5258
  _metrics.default.sendBehavioralMetric(_constants2.default.UNMUTE_AUDIO_FAILURE, {
5132
- correlation_id: _this27.correlationId,
5133
- locus_id: _this27.locusUrl.split('/').pop(),
5259
+ correlation_id: _this28.correlationId,
5260
+ locus_id: _this28.locusUrl.split('/').pop(),
5134
5261
  reason: error.message,
5135
5262
  stack: error.stack
5136
5263
  });
@@ -5149,7 +5276,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5149
5276
  }, {
5150
5277
  key: "muteVideo",
5151
5278
  value: function muteVideo() {
5152
- var _this28 = this;
5279
+ var _this29 = this;
5153
5280
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5154
5281
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5155
5282
  }
@@ -5163,22 +5290,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5163
5290
  return _promise.default.reject(new _parameter.default('no video control associated to the meeting'));
5164
5291
  }
5165
5292
  return logRequest(this.video.handleClientRequest(this, true).then(function () {
5166
- _util2.default.handleVideoLogging(_this28.mediaProperties.videoStream);
5293
+ _util2.default.handleVideoLogging(_this29.mediaProperties.videoStream);
5167
5294
  // @ts-ignore
5168
- _this28.webex.internal.newMetrics.submitClientEvent({
5295
+ _this29.webex.internal.newMetrics.submitClientEvent({
5169
5296
  name: 'client.muted',
5170
5297
  payload: {
5171
5298
  trigger: 'user-interaction',
5172
5299
  mediaType: 'video'
5173
5300
  },
5174
5301
  options: {
5175
- meetingId: _this28.id
5302
+ meetingId: _this29.id
5176
5303
  }
5177
5304
  });
5178
5305
  }).catch(function (error) {
5179
5306
  _metrics.default.sendBehavioralMetric(_constants2.default.MUTE_VIDEO_FAILURE, {
5180
- correlation_id: _this28.correlationId,
5181
- locus_id: _this28.locusUrl.split('/').pop(),
5307
+ correlation_id: _this29.correlationId,
5308
+ locus_id: _this29.locusUrl.split('/').pop(),
5182
5309
  reason: error.message,
5183
5310
  stack: error.stack
5184
5311
  });
@@ -5197,7 +5324,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5197
5324
  }, {
5198
5325
  key: "unmuteVideo",
5199
5326
  value: function unmuteVideo() {
5200
- var _this29 = this;
5327
+ var _this30 = this;
5201
5328
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5202
5329
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5203
5330
  }
@@ -5211,22 +5338,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5211
5338
  return _promise.default.reject(new _parameter.default('no audio control associated to the meeting'));
5212
5339
  }
5213
5340
  return logRequest(this.video.handleClientRequest(this, false).then(function () {
5214
- _util2.default.handleVideoLogging(_this29.mediaProperties.videoStream);
5341
+ _util2.default.handleVideoLogging(_this30.mediaProperties.videoStream);
5215
5342
  // @ts-ignore
5216
- _this29.webex.internal.newMetrics.submitClientEvent({
5343
+ _this30.webex.internal.newMetrics.submitClientEvent({
5217
5344
  name: 'client.unmuted',
5218
5345
  payload: {
5219
5346
  trigger: 'user-interaction',
5220
5347
  mediaType: 'video'
5221
5348
  },
5222
5349
  options: {
5223
- meetingId: _this29.id
5350
+ meetingId: _this30.id
5224
5351
  }
5225
5352
  });
5226
5353
  }).catch(function (error) {
5227
5354
  _metrics.default.sendBehavioralMetric(_constants2.default.UNMUTE_VIDEO_FAILURE, {
5228
- correlation_id: _this29.correlationId,
5229
- locus_id: _this29.locusUrl.split('/').pop(),
5355
+ correlation_id: _this30.correlationId,
5356
+ locus_id: _this30.locusUrl.split('/').pop(),
5230
5357
  reason: error.message,
5231
5358
  stack: error.stack
5232
5359
  });
@@ -5241,7 +5368,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5241
5368
  * @param {Object} options - options to join with media
5242
5369
  * @param {JoinOptions} [options.joinOptions] - see #join()
5243
5370
  * @param {AddMediaOptions} [options.mediaOptions] - see #addMedia()
5244
- * @returns {Promise} -- {join: see join(), media: see addMedia()}
5371
+ * @returns {Promise} -- {join: see join(), media: see addMedia(), multistreamEnabled: flag to indicate if we managed to join in multistream mode}
5245
5372
  * @public
5246
5373
  * @memberof Meeting
5247
5374
  * @example
@@ -5255,8 +5382,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5255
5382
  }, {
5256
5383
  key: "joinWithMedia",
5257
5384
  value: (function () {
5258
- var _joinWithMedia = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee15() {
5259
- var _this30 = this;
5385
+ var _joinWithMedia = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee16() {
5386
+ var _this31 = this;
5260
5387
  var options,
5261
5388
  mediaOptions,
5262
5389
  _options$joinOptions,
@@ -5276,51 +5403,51 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5276
5403
  _leaveError,
5277
5404
  leaveError,
5278
5405
  shouldRetry,
5279
- _args15 = arguments;
5280
- return _regenerator.default.wrap(function _callee15$(_context15) {
5281
- while (1) switch (_context15.prev = _context15.next) {
5406
+ _args16 = arguments;
5407
+ return _regenerator.default.wrap(function _callee16$(_context16) {
5408
+ while (1) switch (_context16.prev = _context16.next) {
5282
5409
  case 0:
5283
- options = _args15.length > 0 && _args15[0] !== undefined ? _args15[0] : {};
5410
+ options = _args16.length > 0 && _args16[0] !== undefined ? _args16[0] : {};
5284
5411
  mediaOptions = options.mediaOptions, _options$joinOptions = options.joinOptions, joinOptions = _options$joinOptions === void 0 ? {} : _options$joinOptions;
5285
5412
  _this$joinWithMediaRe = this.joinWithMediaRetryInfo, isRetry = _this$joinWithMediaRe.isRetry, prevJoinResponse = _this$joinWithMediaRe.prevJoinResponse;
5286
5413
  if (mediaOptions !== null && mediaOptions !== void 0 && mediaOptions.allowMediaInLobby) {
5287
- _context15.next = 5;
5414
+ _context16.next = 5;
5288
5415
  break;
5289
5416
  }
5290
- return _context15.abrupt("return", _promise.default.reject(new _parameter.default('joinWithMedia() can only be used with allowMediaInLobby set to true')));
5417
+ return _context16.abrupt("return", _promise.default.reject(new _parameter.default('joinWithMedia() can only be used with allowMediaInLobby set to true')));
5291
5418
  case 5:
5292
5419
  this.allowMediaInLobby = true;
5293
5420
  _loggerProxy.default.logger.info('Meeting:index#joinWithMedia called');
5294
5421
  joined = false;
5295
5422
  joinResponse = prevJoinResponse;
5296
- _context15.prev = 9;
5423
+ _context16.prev = 9;
5297
5424
  forceTurnDiscovery = false;
5298
5425
  if (joinResponse) {
5299
- _context15.next = 33;
5426
+ _context16.next = 33;
5300
5427
  break;
5301
5428
  }
5302
- _context15.next = 14;
5429
+ _context16.next = 14;
5303
5430
  return this.roap.generateTurnDiscoveryRequestMessage(this, true);
5304
5431
  case 14:
5305
- turnDiscoveryRequest = _context15.sent;
5432
+ turnDiscoveryRequest = _context16.sent;
5306
5433
  turnDiscoverySkippedReason = turnDiscoveryRequest.turnDiscoverySkippedReason;
5307
5434
  joinOptions.roapMessage = turnDiscoveryRequest.roapMessage;
5308
5435
  _loggerProxy.default.logger.info('Meeting:index#joinWithMedia ---> calling join with joinOptions, ', joinOptions);
5309
- _context15.next = 20;
5436
+ _context16.next = 20;
5310
5437
  return this.join(joinOptions);
5311
5438
  case 20:
5312
- joinResponse = _context15.sent;
5439
+ joinResponse = _context16.sent;
5313
5440
  joined = true;
5314
5441
 
5315
5442
  // if we sent out TURN discovery Roap message with join, process the TURN discovery response
5316
5443
  if (!joinOptions.roapMessage) {
5317
- _context15.next = 31;
5444
+ _context16.next = 31;
5318
5445
  break;
5319
5446
  }
5320
- _context15.next = 25;
5447
+ _context16.next = 25;
5321
5448
  return this.roap.handleTurnDiscoveryHttpResponse(this, joinResponse);
5322
5449
  case 25:
5323
- _yield$this$roap$hand = _context15.sent;
5450
+ _yield$this$roap$hand = _context16.sent;
5324
5451
  turnServerInfo = _yield$this$roap$hand.turnServerInfo;
5325
5452
  turnDiscoverySkippedReason = _yield$this$roap$hand.turnDiscoverySkippedReason;
5326
5453
  this.turnDiscoverySkippedReason = turnDiscoverySkippedReason;
@@ -5329,7 +5456,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5329
5456
  this.roap.abortTurnDiscovery();
5330
5457
  }
5331
5458
  case 31:
5332
- _context15.next = 35;
5459
+ _context16.next = 35;
5333
5460
  break;
5334
5461
  case 33:
5335
5462
  // This is a retry, when join succeeded but addMedia failed, so we'll just call addMedia() again,
@@ -5337,82 +5464,85 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5337
5464
  forceTurnDiscovery = true;
5338
5465
  joined = true;
5339
5466
  case 35:
5340
- _context15.next = 37;
5467
+ _context16.next = 37;
5341
5468
  return this.addMediaInternal(function () {
5342
- return _this30.joinWithMediaRetryInfo.isRetry ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
5469
+ return _this31.joinWithMediaRetryInfo.isRetry ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
5343
5470
  }, turnServerInfo, forceTurnDiscovery, mediaOptions);
5344
5471
  case 37:
5345
- mediaResponse = _context15.sent;
5472
+ mediaResponse = _context16.sent;
5346
5473
  this.joinWithMediaRetryInfo = {
5347
5474
  isRetry: false,
5348
5475
  prevJoinResponse: undefined
5349
5476
  };
5350
- return _context15.abrupt("return", {
5477
+ return _context16.abrupt("return", {
5351
5478
  join: joinResponse,
5352
- media: mediaResponse
5479
+ media: mediaResponse,
5480
+ multistreamEnabled: this.isMultistream
5353
5481
  });
5354
5482
  case 42:
5355
- _context15.prev = 42;
5356
- _context15.t0 = _context15["catch"](9);
5357
- _loggerProxy.default.logger.error('Meeting:index#joinWithMedia --> ', _context15.t0);
5483
+ _context16.prev = 42;
5484
+ _context16.t0 = _context16["catch"](9);
5485
+ _loggerProxy.default.logger.error('Meeting:index#joinWithMedia --> ', _context16.t0);
5358
5486
  this.roap.abortTurnDiscovery();
5359
- if (!(joined && isRetry)) {
5360
- _context15.next = 56;
5487
+
5488
+ // if this was the first attempt, let's do a retry
5489
+ shouldRetry = !isRetry;
5490
+ if (_internalPluginMetrics.CallDiagnosticUtils.isSdpOfferCreationError(_context16.t0)) {
5491
+ // errors related to offer creation (for example missing H264 codec) will happen again no matter how many times we try,
5492
+ // so there is no point doing a retry
5493
+ shouldRetry = false;
5494
+ }
5495
+
5496
+ // we only want to call leave if join was successful and this was a retry or we won't be doing any more retries
5497
+ if (!(joined && (isRetry || !shouldRetry))) {
5498
+ _context16.next = 58;
5361
5499
  break;
5362
5500
  }
5363
- _context15.prev = 47;
5364
- _context15.next = 50;
5501
+ _context16.prev = 49;
5502
+ _context16.next = 52;
5365
5503
  return this.leave({
5366
5504
  resourceId: joinOptions === null || joinOptions === void 0 ? void 0 : joinOptions.resourceId,
5367
5505
  reason: 'joinWithMedia failure'
5368
5506
  });
5369
- case 50:
5370
- _context15.next = 56;
5371
- break;
5372
5507
  case 52:
5373
- _context15.prev = 52;
5374
- _context15.t1 = _context15["catch"](47);
5375
- _loggerProxy.default.logger.error('Meeting:index#joinWithMedia --> leave error', _context15.t1);
5376
- leaveError = _context15.t1;
5377
- case 56:
5508
+ _context16.next = 58;
5509
+ break;
5510
+ case 54:
5511
+ _context16.prev = 54;
5512
+ _context16.t1 = _context16["catch"](49);
5513
+ _loggerProxy.default.logger.error('Meeting:index#joinWithMedia --> leave error', _context16.t1);
5514
+ leaveError = _context16.t1;
5515
+ case 58:
5378
5516
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_WITH_MEDIA_FAILURE, {
5379
5517
  correlation_id: this.correlationId,
5380
5518
  locus_id: (_this$locusUrl = this.locusUrl) === null || _this$locusUrl === void 0 ? void 0 : _this$locusUrl.split('/').pop(),
5381
5519
  // if join fails, we may end up with no locusUrl
5382
- reason: _context15.t0.message,
5383
- stack: _context15.t0.stack,
5520
+ reason: _context16.t0.message,
5521
+ stack: _context16.t0.stack,
5384
5522
  leaveErrorReason: (_leaveError = leaveError) === null || _leaveError === void 0 ? void 0 : _leaveError.message,
5385
5523
  isRetry: isRetry
5386
5524
  }, {
5387
- type: _context15.t0.name
5525
+ type: _context16.t0.name
5388
5526
  });
5389
-
5390
- // if this was the first attempt, let's do a retry
5391
- shouldRetry = !isRetry;
5392
- if (_internalPluginMetrics.CallDiagnosticUtils.isSdpOfferCreationError(_context15.t0)) {
5393
- // errors related to offer creation (for example missing H264 codec) will happen again no matter how many times we try,
5394
- // so there is no point doing a retry
5395
- shouldRetry = false;
5396
- }
5397
5527
  if (!shouldRetry) {
5398
- _context15.next = 64;
5528
+ _context16.next = 64;
5399
5529
  break;
5400
5530
  }
5401
5531
  _loggerProxy.default.logger.warn('Meeting:index#joinWithMedia --> retrying call to joinWithMedia');
5402
5532
  this.joinWithMediaRetryInfo.isRetry = true;
5403
5533
  this.joinWithMediaRetryInfo.prevJoinResponse = joinResponse;
5404
- return _context15.abrupt("return", this.joinWithMedia(options));
5534
+ return _context16.abrupt("return", this.joinWithMedia(options));
5405
5535
  case 64:
5406
5536
  this.joinWithMediaRetryInfo = {
5407
5537
  isRetry: false,
5408
5538
  prevJoinResponse: undefined
5409
5539
  };
5410
- throw _context15.t0;
5540
+ throw _context16.t0;
5411
5541
  case 66:
5412
5542
  case "end":
5413
- return _context15.stop();
5543
+ return _context16.stop();
5414
5544
  }
5415
- }, _callee15, this, [[9, 42], [47, 52]]);
5545
+ }, _callee16, this, [[9, 42], [49, 54]]);
5416
5546
  }));
5417
5547
  function joinWithMedia() {
5418
5548
  return _joinWithMedia.apply(this, arguments);
@@ -5431,7 +5561,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5431
5561
  }, {
5432
5562
  key: "reconnect",
5433
5563
  value: function reconnect(options) {
5434
- var _this31 = this;
5564
+ var _this32 = this;
5435
5565
  _loggerProxy.default.logger.log("Meeting:index#reconnect --> attempting to reconnect meeting ".concat(this.id));
5436
5566
  if (!this.reconnectionManager || !this.reconnectionManager.reconnect) {
5437
5567
  return _promise.default.reject(new _parameter.default('Cannot reconnect, ReconnectionManager must first be defined.'));
@@ -5442,20 +5572,20 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5442
5572
  return _promise.default.reject(new _parameter.default('Cannot reconnect, Media has not established to reconnect'));
5443
5573
  }
5444
5574
  this.cleanUpBeforeReconnection();
5445
- return this.reconnectionManager.reconnect(options, /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee16() {
5446
- return _regenerator.default.wrap(function _callee16$(_context16) {
5447
- while (1) switch (_context16.prev = _context16.next) {
5575
+ return this.reconnectionManager.reconnect(options, /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee17() {
5576
+ return _regenerator.default.wrap(function _callee17$(_context17) {
5577
+ while (1) switch (_context17.prev = _context17.next) {
5448
5578
  case 0:
5449
- _context16.next = 2;
5450
- return _this31.waitForRemoteSDPAnswer();
5579
+ _context17.next = 2;
5580
+ return _this32.waitForRemoteSDPAnswer();
5451
5581
  case 2:
5452
- _context16.next = 4;
5453
- return _this31.waitForMediaConnectionConnected();
5582
+ _context17.next = 4;
5583
+ return _this32.waitForMediaConnectionConnected();
5454
5584
  case 4:
5455
5585
  case "end":
5456
- return _context16.stop();
5586
+ return _context17.stop();
5457
5587
  }
5458
- }, _callee16);
5588
+ }, _callee17);
5459
5589
  }))).then(function () {
5460
5590
  _loggerProxy.default.logger.log('Meeting:index#reconnect --> Meeting reconnect success');
5461
5591
  }).catch(function (error) {
@@ -5464,7 +5594,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5464
5594
  return _promise.default.resolve();
5465
5595
  }
5466
5596
  _loggerProxy.default.logger.error('Meeting:index#reconnect --> Meeting reconnect failed', error);
5467
- _this31.uploadLogs({
5597
+ _this32.uploadLogs({
5468
5598
  file: 'meeting/index',
5469
5599
  function: 'reconnect'
5470
5600
  });
@@ -5511,19 +5641,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5511
5641
  }, {
5512
5642
  key: "setCaptionLanguage",
5513
5643
  value: function setCaptionLanguage(language) {
5514
- var _this32 = this;
5644
+ var _this33 = this;
5515
5645
  return new _promise.default(function (resolve, reject) {
5516
- if (!_this32.isTranscriptionSupported()) {
5646
+ if (!_this33.isTranscriptionSupported()) {
5517
5647
  _loggerProxy.default.logger.error('Meeting:index#setCaptionLanguage --> Webex Assistant is not enabled/supported');
5518
5648
  reject(new Error('Webex Assistant is not enabled/supported'));
5519
5649
  }
5520
5650
  try {
5521
5651
  var voiceaListenerCaptionUpdate = function voiceaListenerCaptionUpdate(payload) {
5522
5652
  // @ts-ignore
5523
- _this32.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5653
+ _this33.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5524
5654
  var statusCode = payload.statusCode;
5525
5655
  if (statusCode === 200) {
5526
- _this32.transcription.languageOptions = _objectSpread(_objectSpread({}, _this32.transcription.languageOptions), {}, {
5656
+ _this33.transcription.languageOptions = _objectSpread(_objectSpread({}, _this33.transcription.languageOptions), {}, {
5527
5657
  currentCaptionLanguage: language
5528
5658
  });
5529
5659
  resolve(language);
@@ -5532,9 +5662,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5532
5662
  }
5533
5663
  };
5534
5664
  // @ts-ignore
5535
- _this32.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5665
+ _this33.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5536
5666
  // @ts-ignore
5537
- _this32.webex.internal.voicea.requestLanguage(language);
5667
+ _this33.webex.internal.voicea.requestLanguage(language);
5538
5668
  } catch (error) {
5539
5669
  _loggerProxy.default.logger.error("Meeting:index#setCaptionLanguage --> ".concat(error));
5540
5670
  reject(error);
@@ -5550,23 +5680,23 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5550
5680
  }, {
5551
5681
  key: "setSpokenLanguage",
5552
5682
  value: function setSpokenLanguage(language) {
5553
- var _this33 = this;
5683
+ var _this34 = this;
5554
5684
  return new _promise.default(function (resolve, reject) {
5555
- if (!_this33.isTranscriptionSupported()) {
5685
+ if (!_this34.isTranscriptionSupported()) {
5556
5686
  _loggerProxy.default.logger.error('Meeting:index#setCaptionLanguage --> Webex Assistant is not enabled/supported');
5557
5687
  reject(new Error('Webex Assistant is not enabled/supported'));
5558
5688
  }
5559
- if (_this33.getCurUserType() !== 'host') {
5689
+ if (_this34.getCurUserType() !== 'host') {
5560
5690
  _loggerProxy.default.logger.error('Meeting:index#setSpokenLanguage --> Only host can set spoken language');
5561
5691
  reject(new Error('Only host can set spoken language'));
5562
5692
  }
5563
5693
  try {
5564
5694
  var voiceaListenerLanguageUpdate = function voiceaListenerLanguageUpdate(payload) {
5565
5695
  // @ts-ignore
5566
- _this33.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5696
+ _this34.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5567
5697
  var languageCode = payload.languageCode;
5568
5698
  if (languageCode) {
5569
- _this33.transcription.languageOptions = _objectSpread(_objectSpread({}, _this33.transcription.languageOptions), {}, {
5699
+ _this34.transcription.languageOptions = _objectSpread(_objectSpread({}, _this34.transcription.languageOptions), {}, {
5570
5700
  currentSpokenLanguage: languageCode
5571
5701
  });
5572
5702
  resolve(languageCode);
@@ -5576,10 +5706,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5576
5706
  };
5577
5707
 
5578
5708
  // @ts-ignore
5579
- _this33.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5709
+ _this34.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5580
5710
 
5581
5711
  // @ts-ignore
5582
- _this33.webex.internal.voicea.setSpokenLanguage(language);
5712
+ _this34.webex.internal.voicea.setSpokenLanguage(language);
5583
5713
  } catch (error) {
5584
5714
  _loggerProxy.default.logger.error("Meeting:index#setSpokenLanguage --> ".concat(error));
5585
5715
  reject(error);
@@ -5596,48 +5726,48 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5596
5726
  }, {
5597
5727
  key: "startTranscription",
5598
5728
  value: (function () {
5599
- var _startTranscription = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee17(options) {
5600
- return _regenerator.default.wrap(function _callee17$(_context17) {
5601
- while (1) switch (_context17.prev = _context17.next) {
5729
+ var _startTranscription = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee18(options) {
5730
+ return _regenerator.default.wrap(function _callee18$(_context18) {
5731
+ while (1) switch (_context18.prev = _context18.next) {
5602
5732
  case 0:
5603
5733
  if (!this.isJoined()) {
5604
- _context17.next = 14;
5734
+ _context18.next = 14;
5605
5735
  break;
5606
5736
  }
5607
5737
  _loggerProxy.default.logger.info('Meeting:index#startTranscription --> Attempting to enable transcription!');
5608
- _context17.prev = 2;
5738
+ _context18.prev = 2;
5609
5739
  if (!this.areVoiceaEventsSetup) {
5610
5740
  this.setUpVoiceaListeners();
5611
5741
  }
5612
5742
 
5613
5743
  // @ts-ignore
5614
- _context17.next = 6;
5744
+ _context18.next = 6;
5615
5745
  return this.webex.internal.voicea.turnOnCaptions(options === null || options === void 0 ? void 0 : options.spokenLanguage);
5616
5746
  case 6:
5617
- _context17.next = 12;
5747
+ _context18.next = 12;
5618
5748
  break;
5619
5749
  case 8:
5620
- _context17.prev = 8;
5621
- _context17.t0 = _context17["catch"](2);
5622
- _loggerProxy.default.logger.error("Meeting:index#startTranscription --> ".concat(_context17.t0));
5750
+ _context18.prev = 8;
5751
+ _context18.t0 = _context18["catch"](2);
5752
+ _loggerProxy.default.logger.error("Meeting:index#startTranscription --> ".concat(_context18.t0));
5623
5753
  _metrics.default.sendBehavioralMetric(_constants2.default.RECEIVE_TRANSCRIPTION_FAILURE, {
5624
5754
  correlation_id: this.correlationId,
5625
- reason: _context17.t0.message,
5626
- stack: _context17.t0.stack
5755
+ reason: _context18.t0.message,
5756
+ stack: _context18.t0.stack
5627
5757
  });
5628
5758
  case 12:
5629
- _context17.next = 16;
5759
+ _context18.next = 16;
5630
5760
  break;
5631
5761
  case 14:
5632
5762
  _loggerProxy.default.logger.error("Meeting:index#startTranscription --> meeting joined : ".concat(this.isJoined()));
5633
5763
  throw new Error('Meeting is not joined');
5634
5764
  case 16:
5635
5765
  case "end":
5636
- return _context17.stop();
5766
+ return _context18.stop();
5637
5767
  }
5638
- }, _callee17, this, [[2, 8]]);
5768
+ }, _callee18, this, [[2, 8]]);
5639
5769
  }));
5640
- function startTranscription(_x15) {
5770
+ function startTranscription(_x16) {
5641
5771
  return _startTranscription.apply(this, arguments);
5642
5772
  }
5643
5773
  return startTranscription;
@@ -5662,6 +5792,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5662
5792
 
5663
5793
  // @ts-ignore
5664
5794
  this.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.NEW_CAPTION, this.voiceaListenerCallbacks[_internalPluginVoicea.EVENT_TRIGGERS.NEW_CAPTION]);
5795
+
5796
+ // @ts-ignore
5797
+ this.webex.internal.voicea.deregisterEvents();
5665
5798
  this.areVoiceaEventsSetup = false;
5666
5799
  this.triggerStopReceivingTranscriptionEvent();
5667
5800
  }
@@ -5698,36 +5831,36 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5698
5831
  * Scenario D: Joining any other way (sip, pstn, conversationUrl, link just need to specify resourceId)
5699
5832
  */
5700
5833
  function () {
5701
- var _join = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee18() {
5702
- var _this34 = this;
5834
+ var _join = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee19() {
5835
+ var _this35 = this;
5703
5836
  var options,
5704
5837
  errorMessage,
5705
5838
  error,
5706
5839
  joinFailed,
5707
5840
  joinSuccess,
5708
- _errorMessage,
5709
- _error,
5710
5841
  _errorMessage2,
5711
5842
  _error2,
5712
- _args18 = arguments;
5713
- return _regenerator.default.wrap(function _callee18$(_context18) {
5714
- while (1) switch (_context18.prev = _context18.next) {
5843
+ _errorMessage3,
5844
+ _error3,
5845
+ _args19 = arguments;
5846
+ return _regenerator.default.wrap(function _callee19$(_context19) {
5847
+ while (1) switch (_context19.prev = _context19.next) {
5715
5848
  case 0:
5716
- options = _args18.length > 0 && _args18[0] !== undefined ? _args18[0] : {};
5849
+ options = _args19.length > 0 && _args19[0] !== undefined ? _args19[0] : {};
5717
5850
  if (this.webex.meetings.registered) {
5718
- _context18.next = 6;
5851
+ _context19.next = 6;
5719
5852
  break;
5720
5853
  }
5721
5854
  errorMessage = 'Meeting:index#join --> Device not registered';
5722
5855
  error = new Error(errorMessage);
5723
5856
  _loggerProxy.default.logger.error(errorMessage);
5724
- return _context18.abrupt("return", _promise.default.reject(error));
5857
+ return _context19.abrupt("return", _promise.default.reject(error));
5725
5858
  case 6:
5726
5859
  if (!this.deferJoin) {
5727
- _context18.next = 8;
5860
+ _context19.next = 8;
5728
5861
  break;
5729
5862
  }
5730
- return _context18.abrupt("return", this.deferJoin);
5863
+ return _context19.abrupt("return", this.deferJoin);
5731
5864
  case 8:
5732
5865
  // Create a deferred promise for a consistent resolve value from utils.
5733
5866
  // This also prevents redundant API calls.
@@ -5751,18 +5884,21 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5751
5884
  this.meetingFiniteStateMachine.reset();
5752
5885
  }
5753
5886
 
5754
- // @ts-ignore
5755
- this.webex.internal.newMetrics.submitClientEvent({
5756
- name: 'client.call.initiated',
5757
- payload: {
5758
- trigger: this.callStateForMetrics.joinTrigger || 'user-interaction',
5759
- isRoapCallEnabled: true,
5760
- pstnAudioType: options === null || options === void 0 ? void 0 : options.pstnAudioType
5761
- },
5762
- options: {
5763
- meetingId: this.id
5764
- }
5765
- });
5887
+ // send client.call.initiated unless told not to
5888
+ if (options.sendCallInitiated !== false) {
5889
+ // @ts-ignore
5890
+ this.webex.internal.newMetrics.submitClientEvent({
5891
+ name: 'client.call.initiated',
5892
+ payload: {
5893
+ trigger: this.callStateForMetrics.joinTrigger || 'user-interaction',
5894
+ isRoapCallEnabled: true,
5895
+ pstnAudioType: options === null || options === void 0 ? void 0 : options.pstnAudioType
5896
+ },
5897
+ options: {
5898
+ meetingId: this.id
5899
+ }
5900
+ });
5901
+ }
5766
5902
  _loggerProxy.default.logger.log('Meeting:index#join --> Joining a meeting');
5767
5903
  if (this.meetingFiniteStateMachine.state === _constants.MEETING_STATE_MACHINE.STATES.ENDED) {
5768
5904
  this.meetingFiniteStateMachine.reset();
@@ -5776,131 +5912,131 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5776
5912
  this.wirelessShare = true;
5777
5913
  }
5778
5914
  if (!options.meetingQuality) {
5779
- _context18.next = 36;
5915
+ _context19.next = 36;
5780
5916
  break;
5781
5917
  }
5782
5918
  if (!(typeof options.meetingQuality === 'string')) {
5783
- _context18.next = 27;
5919
+ _context19.next = 27;
5784
5920
  break;
5785
5921
  }
5786
5922
  if (_constants.QUALITY_LEVELS[options.meetingQuality]) {
5787
- _context18.next = 26;
5923
+ _context19.next = 26;
5788
5924
  break;
5789
5925
  }
5790
- _errorMessage = "Meeting:index#join --> ".concat(options.meetingQuality, " not defined");
5791
- _error = new Error(_errorMessage);
5792
- _loggerProxy.default.logger.error(_errorMessage);
5793
- joinFailed(_error);
5926
+ _errorMessage2 = "Meeting:index#join --> ".concat(options.meetingQuality, " not defined");
5927
+ _error2 = new Error(_errorMessage2);
5928
+ _loggerProxy.default.logger.error(_errorMessage2);
5929
+ joinFailed(_error2);
5794
5930
  this.deferJoin = undefined;
5795
- return _context18.abrupt("return", _promise.default.reject(_error));
5931
+ return _context19.abrupt("return", _promise.default.reject(_error2));
5796
5932
  case 26:
5797
5933
  this.mediaProperties.setRemoteQualityLevel(options.meetingQuality);
5798
5934
  case 27:
5799
5935
  if (!((0, _typeof2.default)(options.meetingQuality) === 'object')) {
5800
- _context18.next = 36;
5936
+ _context19.next = 36;
5801
5937
  break;
5802
5938
  }
5803
5939
  if (_constants.QUALITY_LEVELS[options.meetingQuality.remote]) {
5804
- _context18.next = 35;
5940
+ _context19.next = 35;
5805
5941
  break;
5806
5942
  }
5807
- _errorMessage2 = "Meeting:index#join --> ".concat(options.meetingQuality.remote, " not defined");
5808
- _loggerProxy.default.logger.error(_errorMessage2);
5809
- _error2 = new Error(_errorMessage2);
5810
- joinFailed(_error2);
5943
+ _errorMessage3 = "Meeting:index#join --> ".concat(options.meetingQuality.remote, " not defined");
5944
+ _loggerProxy.default.logger.error(_errorMessage3);
5945
+ _error3 = new Error(_errorMessage3);
5946
+ joinFailed(_error3);
5811
5947
  this.deferJoin = undefined;
5812
- return _context18.abrupt("return", _promise.default.reject(new Error(_errorMessage2)));
5948
+ return _context19.abrupt("return", _promise.default.reject(new Error(_errorMessage3)));
5813
5949
  case 35:
5814
5950
  if (options.meetingQuality.remote) {
5815
5951
  this.mediaProperties.setRemoteQualityLevel(options.meetingQuality.remote);
5816
5952
  }
5817
5953
  case 36:
5818
5954
  this.isMultistream = !!options.enableMultistream;
5819
- _context18.prev = 37;
5820
- _context18.next = 40;
5955
+ _context19.prev = 37;
5956
+ _context19.next = 40;
5821
5957
  return this.checkAndRefreshPermissionToken(_constants.MEETING_PERMISSION_TOKEN_REFRESH_THRESHOLD_IN_SEC, _constants.MEETING_PERMISSION_TOKEN_REFRESH_REASON);
5822
5958
  case 40:
5823
- _context18.next = 51;
5959
+ _context19.next = 51;
5824
5960
  break;
5825
5961
  case 42:
5826
- _context18.prev = 42;
5827
- _context18.t0 = _context18["catch"](37);
5828
- _loggerProxy.default.logger.error('Meeting:index#join --> Failed to refresh permission token:', _context18.t0);
5829
- if (!(_context18.t0 instanceof _captchaError.default || _context18.t0 instanceof _passwordError.default || _context18.t0 instanceof _permission.default)) {
5830
- _context18.next = 51;
5962
+ _context19.prev = 42;
5963
+ _context19.t0 = _context19["catch"](37);
5964
+ _loggerProxy.default.logger.error('Meeting:index#join --> Failed to refresh permission token:', _context19.t0);
5965
+ if (!(_context19.t0 instanceof _captchaError.default || _context19.t0 instanceof _passwordError.default || _context19.t0 instanceof _permission.default)) {
5966
+ _context19.next = 51;
5831
5967
  break;
5832
5968
  }
5833
- this.meetingFiniteStateMachine.fail(_context18.t0);
5969
+ this.meetingFiniteStateMachine.fail(_context19.t0);
5834
5970
 
5835
5971
  // Upload logs on refreshpermissionToken refresh Failure
5836
5972
  _triggerProxy.default.trigger(this, {
5837
5973
  file: 'meeting/index',
5838
5974
  function: 'join'
5839
5975
  }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, this);
5840
- joinFailed(_context18.t0);
5976
+ joinFailed(_context19.t0);
5841
5977
  this.deferJoin = undefined;
5842
5978
 
5843
5979
  // if refresh permission token requires captcha, password or permission, we are throwing the errors
5844
5980
  // and bubble it up to client
5845
- return _context18.abrupt("return", _promise.default.reject(_context18.t0));
5981
+ return _context19.abrupt("return", _promise.default.reject(_context19.t0));
5846
5982
  case 51:
5847
- return _context18.abrupt("return", _util2.default.joinMeetingOptions(this, options).then(function (join) {
5848
- _this34.meetingFiniteStateMachine.join();
5849
- _this34.setupLocusMediaRequest();
5983
+ return _context19.abrupt("return", _util2.default.joinMeetingOptions(this, options).then(function (join) {
5984
+ _this35.meetingFiniteStateMachine.join();
5985
+ _this35.setupLocusMediaRequest();
5850
5986
 
5851
5987
  // @ts-ignore
5852
- _this34.webex.internal.device.meetingStarted();
5853
- (0, _classPrivateFieldSet2.default)(_this34, _isoLocalClientMeetingJoinTime, new Date().toISOString());
5988
+ _this35.webex.internal.device.meetingStarted();
5989
+ (0, _classPrivateFieldSet2.default)(_this35, _isoLocalClientMeetingJoinTime, new Date().toISOString());
5854
5990
  _loggerProxy.default.logger.log('Meeting:index#join --> Success');
5855
5991
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_SUCCESS, {
5856
- correlation_id: _this34.correlationId
5992
+ correlation_id: _this35.correlationId
5857
5993
  });
5858
5994
  joinSuccess(join);
5859
- _this34.deferJoin = undefined;
5995
+ _this35.deferJoin = undefined;
5860
5996
  return join;
5861
5997
  }).catch(function (error) {
5862
- var _this34$meetingInfo, _error$error;
5863
- _this34.meetingFiniteStateMachine.fail(error);
5998
+ var _this35$meetingInfo, _error$error;
5999
+ _this35.meetingFiniteStateMachine.fail(error);
5864
6000
  _loggerProxy.default.logger.error('Meeting:index#join --> Failed', error);
5865
6001
 
5866
6002
  // @ts-ignore
5867
- _this34.webex.internal.newMetrics.submitClientEvent({
6003
+ _this35.webex.internal.newMetrics.submitClientEvent({
5868
6004
  name: 'client.locus.join.response',
5869
6005
  payload: {
5870
6006
  identifiers: {
5871
- meetingLookupUrl: (_this34$meetingInfo = _this34.meetingInfo) === null || _this34$meetingInfo === void 0 ? void 0 : _this34$meetingInfo.meetingLookupUrl
6007
+ meetingLookupUrl: (_this35$meetingInfo = _this35.meetingInfo) === null || _this35$meetingInfo === void 0 ? void 0 : _this35$meetingInfo.meetingLookupUrl
5872
6008
  }
5873
6009
  },
5874
6010
  options: {
5875
- meetingId: _this34.id,
6011
+ meetingId: _this35.id,
5876
6012
  rawError: error
5877
6013
  }
5878
6014
  });
5879
6015
 
5880
6016
  // TODO: change this to error codes and pre defined dictionary
5881
6017
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_FAILURE, {
5882
- correlation_id: _this34.correlationId,
6018
+ correlation_id: _this35.correlationId,
5883
6019
  reason: (_error$error = error.error) === null || _error$error === void 0 ? void 0 : _error$error.message,
5884
6020
  stack: error.stack
5885
6021
  });
5886
6022
 
5887
6023
  // Upload logs on join Failure
5888
- _triggerProxy.default.trigger(_this34, {
6024
+ _triggerProxy.default.trigger(_this35, {
5889
6025
  file: 'meeting/index',
5890
6026
  function: 'join'
5891
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this34);
6027
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this35);
5892
6028
  joinFailed(error);
5893
- _this34.deferJoin = undefined;
6029
+ _this35.deferJoin = undefined;
5894
6030
  return _promise.default.reject(error);
5895
6031
  }).then(function (join) {
5896
6032
  // @ts-ignore - config coming from registerPlugin
5897
- if (_this34.config.enableAutomaticLLM) {
6033
+ if (_this35.config.enableAutomaticLLM) {
5898
6034
  // @ts-ignore
5899
- _this34.webex.internal.llm.on('online', _this34.handleLLMOnline);
5900
- _this34.updateLLMConnection().catch(function (error) {
6035
+ _this35.webex.internal.llm.on('online', _this35.handleLLMOnline);
6036
+ _this35.updateLLMConnection().catch(function (error) {
5901
6037
  _loggerProxy.default.logger.error('Meeting:index#join --> Transcription Socket Connection Failed', error);
5902
6038
  _metrics.default.sendBehavioralMetric(_constants2.default.LLM_CONNECTION_AFTER_JOIN_FAILURE, {
5903
- correlation_id: _this34.correlationId,
6039
+ correlation_id: _this35.correlationId,
5904
6040
  reason: error === null || error === void 0 ? void 0 : error.message,
5905
6041
  stack: error.stack
5906
6042
  });
@@ -5912,9 +6048,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5912
6048
  }));
5913
6049
  case 52:
5914
6050
  case "end":
5915
- return _context18.stop();
6051
+ return _context19.stop();
5916
6052
  }
5917
- }, _callee18, this, [[37, 42]]);
6053
+ }, _callee19, this, [[37, 42]]);
5918
6054
  }));
5919
6055
  function join() {
5920
6056
  return _join.apply(this, arguments);
@@ -5931,54 +6067,55 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5931
6067
  }, {
5932
6068
  key: "updateLLMConnection",
5933
6069
  value: (function () {
5934
- var _updateLLMConnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee19() {
5935
- var _this35 = this;
5936
- var _this$locusInfo6, url, _this$locusInfo6$info, _this$locusInfo6$info2, datachannelUrl, isJoined;
5937
- return _regenerator.default.wrap(function _callee19$(_context19) {
5938
- while (1) switch (_context19.prev = _context19.next) {
6070
+ var _updateLLMConnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee20() {
6071
+ var _this36 = this;
6072
+ var _this$locusInfo6, url, _this$locusInfo6$info, _this$locusInfo6$info2, datachannelUrl, practiceSessionDatachannelUrl, isJoined, dataChannelUrl;
6073
+ return _regenerator.default.wrap(function _callee20$(_context20) {
6074
+ while (1) switch (_context20.prev = _context20.next) {
5939
6075
  case 0:
5940
6076
  // @ts-ignore - Fix type
5941
- _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;
5942
- isJoined = this.isJoined(); // @ts-ignore - Fix type
6077
+ _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;
6078
+ isJoined = this.isJoined(); // webinar panelist should use new data channel in practice session
6079
+ dataChannelUrl = this.webinar.isJoinPracticeSessionDataChannel() && practiceSessionDatachannelUrl ? practiceSessionDatachannelUrl : datachannelUrl; // @ts-ignore - Fix type
5943
6080
  if (!this.webex.internal.llm.isConnected()) {
5944
- _context19.next = 8;
6081
+ _context20.next = 9;
5945
6082
  break;
5946
6083
  }
5947
6084
  if (!(
5948
6085
  // @ts-ignore - Fix type
5949
6086
  url === this.webex.internal.llm.getLocusUrl() &&
5950
6087
  // @ts-ignore - Fix type
5951
- datachannelUrl === this.webex.internal.llm.getDatachannelUrl() && isJoined)) {
5952
- _context19.next = 5;
6088
+ dataChannelUrl === this.webex.internal.llm.getDatachannelUrl() && isJoined)) {
6089
+ _context20.next = 6;
5953
6090
  break;
5954
6091
  }
5955
- return _context19.abrupt("return", undefined);
5956
- case 5:
5957
- _context19.next = 7;
6092
+ return _context20.abrupt("return", undefined);
6093
+ case 6:
6094
+ _context20.next = 8;
5958
6095
  return this.webex.internal.llm.disconnectLLM();
5959
- case 7:
6096
+ case 8:
5960
6097
  // @ts-ignore - Fix type
5961
6098
  this.webex.internal.llm.off('event:relay.event', this.processRelayEvent);
5962
- case 8:
6099
+ case 9:
5963
6100
  if (isJoined) {
5964
- _context19.next = 10;
6101
+ _context20.next = 11;
5965
6102
  break;
5966
6103
  }
5967
- return _context19.abrupt("return", undefined);
5968
- case 10:
5969
- return _context19.abrupt("return", this.webex.internal.llm.registerAndConnect(url, datachannelUrl).then(function (registerAndConnectResult) {
6104
+ return _context20.abrupt("return", undefined);
6105
+ case 11:
6106
+ return _context20.abrupt("return", this.webex.internal.llm.registerAndConnect(url, dataChannelUrl).then(function (registerAndConnectResult) {
5970
6107
  // @ts-ignore - Fix type
5971
- _this35.webex.internal.llm.off('event:relay.event', _this35.processRelayEvent);
6108
+ _this36.webex.internal.llm.off('event:relay.event', _this36.processRelayEvent);
5972
6109
  // @ts-ignore - Fix type
5973
- _this35.webex.internal.llm.on('event:relay.event', _this35.processRelayEvent);
6110
+ _this36.webex.internal.llm.on('event:relay.event', _this36.processRelayEvent);
5974
6111
  _loggerProxy.default.logger.info('Meeting:index#updateLLMConnection --> enabled to receive relay events!');
5975
6112
  return _promise.default.resolve(registerAndConnectResult);
5976
6113
  }));
5977
- case 11:
6114
+ case 12:
5978
6115
  case "end":
5979
- return _context19.stop();
6116
+ return _context20.stop();
5980
6117
  }
5981
- }, _callee19, this);
6118
+ }, _callee20, this);
5982
6119
  }));
5983
6120
  function updateLLMConnection() {
5984
6121
  return _updateLLMConnection.apply(this, arguments);
@@ -6024,7 +6161,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6024
6161
  }, {
6025
6162
  key: "dialInPstn",
6026
6163
  value: function dialInPstn() {
6027
- var _this36 = this;
6164
+ var _this37 = this;
6028
6165
  if (this.isPhoneProvisioned(this.dialInDeviceStatus)) return _promise.default.resolve(); // prevent multiple dial in devices from being provisioned
6029
6166
 
6030
6167
  var correlationId = this.correlationId,
@@ -6040,10 +6177,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6040
6177
  }).catch(function (error) {
6041
6178
  var _error$error2;
6042
6179
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_DIAL_IN_FAILURE, {
6043
- correlation_id: _this36.correlationId,
6044
- dial_in_url: _this36.dialInUrl,
6180
+ correlation_id: _this37.correlationId,
6181
+ dial_in_url: _this37.dialInUrl,
6045
6182
  locus_id: locusUrl.split('/').pop(),
6046
- client_url: _this36.deviceUrl,
6183
+ client_url: _this37.deviceUrl,
6047
6184
  reason: (_error$error2 = error.error) === null || _error$error2 === void 0 ? void 0 : _error$error2.message,
6048
6185
  stack: error.stack
6049
6186
  });
@@ -6061,7 +6198,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6061
6198
  }, {
6062
6199
  key: "dialOutPstn",
6063
6200
  value: function dialOutPstn(phoneNumber) {
6064
- var _this37 = this;
6201
+ var _this38 = this;
6065
6202
  if (this.isPhoneProvisioned(this.dialOutDeviceStatus)) return _promise.default.resolve(); // prevent multiple dial out devices from being provisioned
6066
6203
 
6067
6204
  var correlationId = this.correlationId,
@@ -6078,10 +6215,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6078
6215
  }).catch(function (error) {
6079
6216
  var _error$error3;
6080
6217
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_DIAL_OUT_FAILURE, {
6081
- correlation_id: _this37.correlationId,
6082
- dial_out_url: _this37.dialOutUrl,
6218
+ correlation_id: _this38.correlationId,
6219
+ dial_out_url: _this38.dialOutUrl,
6083
6220
  locus_id: locusUrl.split('/').pop(),
6084
- client_url: _this37.deviceUrl,
6221
+ client_url: _this38.deviceUrl,
6085
6222
  reason: (_error$error3 = error.error) === null || _error$error3 === void 0 ? void 0 : _error$error3.message,
6086
6223
  stack: error.stack
6087
6224
  });
@@ -6112,7 +6249,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6112
6249
  }, {
6113
6250
  key: "moveTo",
6114
6251
  value: function moveTo(resourceId) {
6115
- var _this38 = this;
6252
+ var _this39 = this;
6116
6253
  if (!resourceId) {
6117
6254
  throw new _parameter.default('Cannot move call without a resourceId.');
6118
6255
  }
@@ -6150,18 +6287,18 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6150
6287
  meetingId: this.id
6151
6288
  }
6152
6289
  });
6153
- this.locusInfo.once(_constants.LOCUSINFO.EVENTS.SELF_OBSERVING, /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee20() {
6290
+ this.locusInfo.once(_constants.LOCUSINFO.EVENTS.SELF_OBSERVING, /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee21() {
6154
6291
  var mediaSettings;
6155
- return _regenerator.default.wrap(function _callee20$(_context20) {
6156
- while (1) switch (_context20.prev = _context20.next) {
6292
+ return _regenerator.default.wrap(function _callee21$(_context21) {
6293
+ while (1) switch (_context21.prev = _context21.next) {
6157
6294
  case 0:
6158
- _context20.prev = 0;
6159
- if (!(_this38.screenShareFloorState === ScreenShareFloorStatus.GRANTED)) {
6160
- _context20.next = 4;
6295
+ _context21.prev = 0;
6296
+ if (!(_this39.screenShareFloorState === ScreenShareFloorStatus.GRANTED)) {
6297
+ _context21.next = 4;
6161
6298
  break;
6162
6299
  }
6163
- _context20.next = 4;
6164
- return _this38.releaseScreenShareFloor();
6300
+ _context21.next = 4;
6301
+ return _this39.releaseScreenShareFloor();
6165
6302
  case 4:
6166
6303
  mediaSettings = {
6167
6304
  mediaDirection: {
@@ -6173,55 +6310,55 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6173
6310
  receiveShare: true
6174
6311
  }
6175
6312
  };
6176
- _this38.mediaProperties.setMediaDirection(mediaSettings.mediaDirection);
6177
- _this38.mediaProperties.unsetRemoteMedia();
6313
+ _this39.mediaProperties.setMediaDirection(mediaSettings.mediaDirection);
6314
+ _this39.mediaProperties.unsetRemoteMedia();
6178
6315
 
6179
6316
  // 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
6180
6317
  // once the device answers we close the old connection and create new media server connection with only share enabled
6181
- if (!_this38.statsAnalyzer) {
6182
- _context20.next = 10;
6318
+ if (!_this39.statsAnalyzer) {
6319
+ _context21.next = 10;
6183
6320
  break;
6184
6321
  }
6185
- _context20.next = 10;
6186
- return _this38.statsAnalyzer.stopAnalyzer();
6322
+ _context21.next = 10;
6323
+ return _this39.statsAnalyzer.stopAnalyzer();
6187
6324
  case 10:
6188
- _context20.next = 12;
6189
- return _this38.closeRemoteStreams();
6325
+ _context21.next = 12;
6326
+ return _this39.closeRemoteStreams();
6190
6327
  case 12:
6191
- _context20.next = 14;
6192
- return _this38.closePeerConnections();
6328
+ _context21.next = 14;
6329
+ return _this39.closePeerConnections();
6193
6330
  case 14:
6194
- _this38.cleanupLocalStreams();
6195
- _this38.unsetRemoteStreams();
6196
- _this38.unsetPeerConnections();
6197
- _this38.reconnectionManager.cleanUp();
6198
- _context20.next = 20;
6199
- return _this38.addMedia({
6331
+ _this39.cleanupLocalStreams();
6332
+ _this39.unsetRemoteStreams();
6333
+ _this39.unsetPeerConnections();
6334
+ _this39.reconnectionManager.cleanUp();
6335
+ _context21.next = 20;
6336
+ return _this39.addMedia({
6200
6337
  audioEnabled: false,
6201
6338
  videoEnabled: false,
6202
6339
  shareVideoEnabled: true
6203
6340
  });
6204
6341
  case 20:
6205
6342
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_SUCCESS);
6206
- _this38.isMoveToInProgress = false;
6207
- _context20.next = 29;
6343
+ _this39.isMoveToInProgress = false;
6344
+ _context21.next = 29;
6208
6345
  break;
6209
6346
  case 24:
6210
- _context20.prev = 24;
6211
- _context20.t0 = _context20["catch"](0);
6212
- _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', _context20.t0);
6347
+ _context21.prev = 24;
6348
+ _context21.t0 = _context21["catch"](0);
6349
+ _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', _context21.t0);
6213
6350
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
6214
- correlation_id: _this38.correlationId,
6215
- locus_id: _this38.locusUrl.split('/').pop(),
6216
- reason: _context20.t0.message,
6217
- stack: _context20.t0.stack
6351
+ correlation_id: _this39.correlationId,
6352
+ locus_id: _this39.locusUrl.split('/').pop(),
6353
+ reason: _context21.t0.message,
6354
+ stack: _context21.t0.stack
6218
6355
  });
6219
- _this38.isMoveToInProgress = false;
6356
+ _this39.isMoveToInProgress = false;
6220
6357
  case 29:
6221
6358
  case "end":
6222
- return _context20.stop();
6359
+ return _context21.stop();
6223
6360
  }
6224
- }, _callee20, null, [[0, 24]]);
6361
+ }, _callee21, null, [[0, 24]]);
6225
6362
  })));
6226
6363
  _loggerProxy.default.logger.info('Meeting:index#moveTo --> Initated moved to using resourceId', resourceId);
6227
6364
 
@@ -6232,17 +6369,17 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6232
6369
  resourceId: resourceId,
6233
6370
  moveToResource: true
6234
6371
  }).then(function () {
6235
- _this38.meetingFiniteStateMachine.join();
6372
+ _this39.meetingFiniteStateMachine.join();
6236
6373
  }).catch(function (error) {
6237
- _this38.meetingFiniteStateMachine.fail(error);
6374
+ _this39.meetingFiniteStateMachine.fail(error);
6238
6375
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
6239
- correlation_id: _this38.correlationId,
6240
- locus_id: _this38.locusUrl.split('/').pop(),
6376
+ correlation_id: _this39.correlationId,
6377
+ locus_id: _this39.locusUrl.split('/').pop(),
6241
6378
  reason: error.message,
6242
6379
  stack: error.stack
6243
6380
  });
6244
6381
  _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', error);
6245
- _this38.isMoveToInProgress = false;
6382
+ _this39.isMoveToInProgress = false;
6246
6383
  return _promise.default.reject(error);
6247
6384
  });
6248
6385
  }
@@ -6257,7 +6394,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6257
6394
  }, {
6258
6395
  key: "moveFrom",
6259
6396
  value: function moveFrom(resourceId) {
6260
- var _this39 = this;
6397
+ var _this40 = this;
6261
6398
  // On moveFrom ask the developer to re capture it moveFrom then updateMedia
6262
6399
  if (!resourceId) {
6263
6400
  throw new _parameter.default('Cannot move call without a resourceId.');
@@ -6272,19 +6409,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6272
6409
  }
6273
6410
  });
6274
6411
  return _util2.default.joinMeetingOptions(this).then(function () {
6275
- return _util2.default.leaveMeeting(_this39, {
6412
+ return _util2.default.leaveMeeting(_this40, {
6276
6413
  resourceId: resourceId,
6277
6414
  correlationId: oldCorrelationId,
6278
6415
  moveMeeting: true
6279
6416
  }).then(function () {
6280
- _this39.resourceId = '';
6417
+ _this40.resourceId = '';
6281
6418
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_FROM_SUCCESS);
6282
6419
  });
6283
6420
  }).catch(function (error) {
6284
- _this39.meetingFiniteStateMachine.fail(error);
6421
+ _this40.meetingFiniteStateMachine.fail(error);
6285
6422
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_FROM_FAILURE, {
6286
- correlation_id: _this39.correlationId,
6287
- locus_id: _this39.locusUrl.split('/').pop(),
6423
+ correlation_id: _this40.correlationId,
6424
+ locus_id: _this40.locusUrl.split('/').pop(),
6288
6425
  reason: error.message,
6289
6426
  stack: error.stack
6290
6427
  });
@@ -6309,10 +6446,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6309
6446
  }, {
6310
6447
  key: "createMediaConnection",
6311
6448
  value: (function () {
6312
- var _createMediaConnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee21(turnServerInfo, bundlePolicy) {
6449
+ var _createMediaConnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee22(turnServerInfo, bundlePolicy) {
6313
6450
  var mc, audioEnabled, videoEnabled, shareEnabled;
6314
- return _regenerator.default.wrap(function _callee21$(_context21) {
6315
- while (1) switch (_context21.prev = _context21.next) {
6451
+ return _regenerator.default.wrap(function _callee22$(_context22) {
6452
+ while (1) switch (_context22.prev = _context22.next) {
6316
6453
  case 0:
6317
6454
  this.rtcMetrics = this.isMultistream ?
6318
6455
  // @ts-ignore
@@ -6344,42 +6481,42 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6344
6481
 
6345
6482
  // publish the streams
6346
6483
  if (!this.mediaProperties.audioStream) {
6347
- _context21.next = 9;
6484
+ _context22.next = 9;
6348
6485
  break;
6349
6486
  }
6350
6487
  this.setSendNamedMediaGroup(_internalMediaCore.MediaType.AudioMain);
6351
- _context21.next = 9;
6488
+ _context22.next = 9;
6352
6489
  return this.publishStream(_internalMediaCore.MediaType.AudioMain, this.mediaProperties.audioStream);
6353
6490
  case 9:
6354
6491
  if (!this.mediaProperties.videoStream) {
6355
- _context21.next = 12;
6492
+ _context22.next = 12;
6356
6493
  break;
6357
6494
  }
6358
- _context21.next = 12;
6495
+ _context22.next = 12;
6359
6496
  return this.publishStream(_internalMediaCore.MediaType.VideoMain, this.mediaProperties.videoStream);
6360
6497
  case 12:
6361
6498
  if (!this.mediaProperties.shareVideoStream) {
6362
- _context21.next = 15;
6499
+ _context22.next = 15;
6363
6500
  break;
6364
6501
  }
6365
- _context21.next = 15;
6502
+ _context22.next = 15;
6366
6503
  return this.publishStream(_internalMediaCore.MediaType.VideoSlides, this.mediaProperties.shareVideoStream);
6367
6504
  case 15:
6368
6505
  if (!(this.isMultistream && this.mediaProperties.shareAudioStream)) {
6369
- _context21.next = 18;
6506
+ _context22.next = 18;
6370
6507
  break;
6371
6508
  }
6372
- _context21.next = 18;
6509
+ _context22.next = 18;
6373
6510
  return this.publishStream(_internalMediaCore.MediaType.AudioSlides, this.mediaProperties.shareAudioStream);
6374
6511
  case 18:
6375
- return _context21.abrupt("return", mc);
6512
+ return _context22.abrupt("return", mc);
6376
6513
  case 19:
6377
6514
  case "end":
6378
- return _context21.stop();
6515
+ return _context22.stop();
6379
6516
  }
6380
- }, _callee21, this);
6517
+ }, _callee22, this);
6381
6518
  }));
6382
- function createMediaConnection(_x16, _x17) {
6519
+ function createMediaConnection(_x17, _x18) {
6383
6520
  return _createMediaConnection.apply(this, arguments);
6384
6521
  }
6385
6522
  return createMediaConnection;
@@ -6397,9 +6534,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6397
6534
  }, {
6398
6535
  key: "forwardEvent",
6399
6536
  value: function forwardEvent(eventEmitter, eventTypeToForward, meetingEventType) {
6400
- var _this40 = this;
6537
+ var _this41 = this;
6401
6538
  eventEmitter.on(eventTypeToForward, function (data) {
6402
- return _triggerProxy.default.trigger(_this40, {
6539
+ return _triggerProxy.default.trigger(_this41, {
6403
6540
  file: 'meetings',
6404
6541
  function: 'addMedia'
6405
6542
  }, meetingEventType, data);
@@ -6417,11 +6554,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6417
6554
  }, {
6418
6555
  key: "setUpLocalStreamReferences",
6419
6556
  value: (function () {
6420
- var _setUpLocalStreamReferences = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee22(localStreams) {
6557
+ var _setUpLocalStreamReferences = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee23(localStreams) {
6421
6558
  var _localStreams$microph, _localStreams$camera, _localStreams$screenS, _localStreams$screenS2, _localStreams$screenS3, _localStreams$screenS4, _localStreams$screenS5, _localStreams$screenS6;
6422
6559
  var setUpStreamPromises;
6423
- return _regenerator.default.wrap(function _callee22$(_context22) {
6424
- while (1) switch (_context22.prev = _context22.next) {
6560
+ return _regenerator.default.wrap(function _callee23$(_context23) {
6561
+ while (1) switch (_context23.prev = _context23.next) {
6425
6562
  case 0:
6426
6563
  setUpStreamPromises = [];
6427
6564
  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') {
@@ -6436,24 +6573,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6436
6573
  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') {
6437
6574
  setUpStreamPromises.push(this.setLocalShareAudioStream(localStreams.screenShare.audio));
6438
6575
  }
6439
- _context22.prev = 5;
6440
- _context22.next = 8;
6576
+ _context23.prev = 5;
6577
+ _context23.next = 8;
6441
6578
  return _promise.default.all(setUpStreamPromises);
6442
6579
  case 8:
6443
- _context22.next = 14;
6580
+ _context23.next = 14;
6444
6581
  break;
6445
6582
  case 10:
6446
- _context22.prev = 10;
6447
- _context22.t0 = _context22["catch"](5);
6448
- _loggerProxy.default.logger.error("Meeting:index#addMedia():setUpLocalStreamReferences --> Error , ", _context22.t0);
6449
- throw _context22.t0;
6583
+ _context23.prev = 10;
6584
+ _context23.t0 = _context23["catch"](5);
6585
+ _loggerProxy.default.logger.error("Meeting:index#addMedia():setUpLocalStreamReferences --> Error , ", _context23.t0);
6586
+ throw _context23.t0;
6450
6587
  case 14:
6451
6588
  case "end":
6452
- return _context22.stop();
6589
+ return _context23.stop();
6453
6590
  }
6454
- }, _callee22, this, [[5, 10]]);
6591
+ }, _callee23, this, [[5, 10]]);
6455
6592
  }));
6456
- function setUpLocalStreamReferences(_x18) {
6593
+ function setUpLocalStreamReferences(_x19) {
6457
6594
  return _setUpLocalStreamReferences.apply(this, arguments);
6458
6595
  }
6459
6596
  return setUpLocalStreamReferences;
@@ -6468,72 +6605,72 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6468
6605
  }, {
6469
6606
  key: "waitForMediaConnectionConnected",
6470
6607
  value: (function () {
6471
- var _waitForMediaConnectionConnected = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee23() {
6608
+ var _waitForMediaConnectionConnected = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee24() {
6472
6609
  var iceConnected, _this$mediaProperties6, _this$mediaProperties7, _this$mediaProperties8, _this$mediaProperties9, _this$mediaProperties10, _this$mediaProperties11, _this$mediaProperties12;
6473
- return _regenerator.default.wrap(function _callee23$(_context23) {
6474
- while (1) switch (_context23.prev = _context23.next) {
6610
+ return _regenerator.default.wrap(function _callee24$(_context24) {
6611
+ while (1) switch (_context24.prev = _context24.next) {
6475
6612
  case 0:
6476
- _context23.prev = 0;
6477
- _context23.next = 3;
6613
+ _context24.prev = 0;
6614
+ _context24.next = 3;
6478
6615
  return this.mediaProperties.waitForMediaConnectionConnected();
6479
6616
  case 3:
6480
- _context23.next = 30;
6617
+ _context24.next = 30;
6481
6618
  break;
6482
6619
  case 5:
6483
- _context23.prev = 5;
6484
- _context23.t0 = _context23["catch"](0);
6485
- iceConnected = _context23.t0.iceConnected;
6620
+ _context24.prev = 5;
6621
+ _context24.t0 = _context24["catch"](0);
6622
+ iceConnected = _context24.t0.iceConnected;
6486
6623
  if (this.hasMediaConnectionConnectedAtLeastOnce) {
6487
- _context23.next = 29;
6624
+ _context24.next = 29;
6488
6625
  break;
6489
6626
  }
6490
- _context23.t1 = this.webex.internal.newMetrics;
6491
- _context23.t2 = !this.turnServerUsed;
6492
- _context23.t3 = this.addMediaData.icePhaseCallback();
6493
- _context23.t4 = this.webex.internal.newMetrics.callDiagnosticMetrics;
6494
- _context23.t5 = _internalPluginMetrics.CallDiagnosticUtils;
6495
- _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';
6496
- _context23.t7 = iceConnected;
6497
- _context23.t8 = this.turnServerUsed;
6498
- _context23.next = 19;
6627
+ _context24.t1 = this.webex.internal.newMetrics;
6628
+ _context24.t2 = !this.turnServerUsed;
6629
+ _context24.t3 = this.addMediaData.icePhaseCallback();
6630
+ _context24.t4 = this.webex.internal.newMetrics.callDiagnosticMetrics;
6631
+ _context24.t5 = _internalPluginMetrics.CallDiagnosticUtils;
6632
+ _context24.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';
6633
+ _context24.t7 = iceConnected;
6634
+ _context24.t8 = this.turnServerUsed;
6635
+ _context24.next = 19;
6499
6636
  return this.webex.meetings.reachability.isWebexMediaBackendUnreachable().catch(function () {
6500
6637
  return false;
6501
6638
  });
6502
6639
  case 19:
6503
- _context23.t9 = _context23.sent;
6504
- _context23.t10 = {
6505
- signalingState: _context23.t6,
6506
- iceConnected: _context23.t7,
6507
- turnServerUsed: _context23.t8,
6508
- unreachable: _context23.t9
6640
+ _context24.t9 = _context24.sent;
6641
+ _context24.t10 = {
6642
+ signalingState: _context24.t6,
6643
+ iceConnected: _context24.t7,
6644
+ turnServerUsed: _context24.t8,
6645
+ unreachable: _context24.t9
6509
6646
  };
6510
- _context23.t11 = _context23.t5.generateClientErrorCodeForIceFailure.call(_context23.t5, _context23.t10);
6511
- _context23.t12 = {
6512
- clientErrorCode: _context23.t11
6647
+ _context24.t11 = _context24.t5.generateClientErrorCodeForIceFailure.call(_context24.t5, _context24.t10);
6648
+ _context24.t12 = {
6649
+ clientErrorCode: _context24.t11
6513
6650
  };
6514
- _context23.t13 = _context23.t4.getErrorPayloadForClientErrorCode.call(_context23.t4, _context23.t12);
6515
- _context23.t14 = [_context23.t13];
6516
- _context23.t15 = {
6517
- canProceed: _context23.t2,
6518
- icePhase: _context23.t3,
6519
- errors: _context23.t14
6651
+ _context24.t13 = _context24.t4.getErrorPayloadForClientErrorCode.call(_context24.t4, _context24.t12);
6652
+ _context24.t14 = [_context24.t13];
6653
+ _context24.t15 = {
6654
+ canProceed: _context24.t2,
6655
+ icePhase: _context24.t3,
6656
+ errors: _context24.t14
6520
6657
  };
6521
- _context23.t16 = {
6658
+ _context24.t16 = {
6522
6659
  meetingId: this.id
6523
6660
  };
6524
- _context23.t17 = {
6661
+ _context24.t17 = {
6525
6662
  name: 'client.ice.end',
6526
- payload: _context23.t15,
6527
- options: _context23.t16
6663
+ payload: _context24.t15,
6664
+ options: _context24.t16
6528
6665
  };
6529
- _context23.t1.submitClientEvent.call(_context23.t1, _context23.t17);
6666
+ _context24.t1.submitClientEvent.call(_context24.t1, _context24.t17);
6530
6667
  case 29:
6531
6668
  throw new Error("Timed out waiting for media connection to be connected, correlationId=".concat(this.correlationId));
6532
6669
  case 30:
6533
6670
  case "end":
6534
- return _context23.stop();
6671
+ return _context24.stop();
6535
6672
  }
6536
- }, _callee23, this, [[0, 5]]);
6673
+ }, _callee24, this, [[0, 5]]);
6537
6674
  }));
6538
6675
  function waitForMediaConnectionConnected() {
6539
6676
  return _waitForMediaConnectionConnected.apply(this, arguments);
@@ -6565,18 +6702,6 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6565
6702
  }
6566
6703
  }
6567
6704
 
6568
- /**
6569
- * Handles device logging
6570
- *
6571
- * @private
6572
- * @static
6573
- * @param {boolean} isAudioEnabled
6574
- * @param {boolean} isVideoEnabled
6575
- * @returns {Promise<void>}
6576
- */
6577
- }, {
6578
- key: "waitForRemoteSDPAnswer",
6579
- value: (
6580
6705
  /**
6581
6706
  * Returns a promise. This promise is created once the local sdp offer has been successfully created and is resolved
6582
6707
  * once the remote sdp answer has been received.
@@ -6584,49 +6709,51 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6584
6709
  * @private
6585
6710
  * @returns {Promise<void>}
6586
6711
  */
6587
- function () {
6588
- var _waitForRemoteSDPAnswer = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee24() {
6589
- var _this41 = this;
6712
+ }, {
6713
+ key: "waitForRemoteSDPAnswer",
6714
+ value: (function () {
6715
+ var _waitForRemoteSDPAnswer = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee25() {
6716
+ var _this42 = this;
6590
6717
  var LOG_HEADER, deferSDPAnswer;
6591
- return _regenerator.default.wrap(function _callee24$(_context24) {
6592
- while (1) switch (_context24.prev = _context24.next) {
6718
+ return _regenerator.default.wrap(function _callee25$(_context25) {
6719
+ while (1) switch (_context25.prev = _context25.next) {
6593
6720
  case 0:
6594
6721
  LOG_HEADER = 'Meeting:index#addMedia():waitForRemoteSDPAnswer -->';
6595
6722
  if (this.deferSDPAnswer) {
6596
- _context24.next = 4;
6723
+ _context25.next = 4;
6597
6724
  break;
6598
6725
  }
6599
6726
  _loggerProxy.default.logger.warn("".concat(LOG_HEADER, " offer not created yet"));
6600
- return _context24.abrupt("return", _promise.default.reject(new Error('waitForRemoteSDPAnswer() called before local sdp offer created')));
6727
+ return _context25.abrupt("return", _promise.default.reject(new Error('waitForRemoteSDPAnswer() called before local sdp offer created')));
6601
6728
  case 4:
6602
6729
  deferSDPAnswer = this.deferSDPAnswer;
6603
6730
  this.sdpResponseTimer = setTimeout(function () {
6604
6731
  _loggerProxy.default.logger.warn("".concat(LOG_HEADER, " timeout! no REMOTE SDP ANSWER received within ").concat(_constants.ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT / 1000, " seconds"));
6605
6732
  // @ts-ignore
6606
- _this41.webex.internal.newMetrics.submitClientEvent({
6733
+ _this42.webex.internal.newMetrics.submitClientEvent({
6607
6734
  name: 'client.media-engine.remote-sdp-received',
6608
6735
  payload: {
6609
6736
  canProceed: false,
6610
6737
  errors: [
6611
6738
  // @ts-ignore
6612
- _this41.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({
6739
+ _this42.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({
6613
6740
  clientErrorCode: _internalPluginMetrics.CALL_DIAGNOSTIC_CONFIG.MISSING_ROAP_ANSWER_CLIENT_CODE
6614
6741
  })]
6615
6742
  },
6616
6743
  options: {
6617
- meetingId: _this41.id,
6744
+ meetingId: _this42.id,
6618
6745
  rawError: new Error('Timeout waiting for SDP answer')
6619
6746
  }
6620
6747
  });
6621
6748
  deferSDPAnswer.reject(new Error('Timed out waiting for REMOTE SDP ANSWER'));
6622
6749
  }, _constants.ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT);
6623
6750
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " waiting for REMOTE SDP ANSWER..."));
6624
- return _context24.abrupt("return", deferSDPAnswer.promise);
6751
+ return _context25.abrupt("return", deferSDPAnswer.promise);
6625
6752
  case 8:
6626
6753
  case "end":
6627
- return _context24.stop();
6754
+ return _context25.stop();
6628
6755
  }
6629
- }, _callee24, this);
6756
+ }, _callee25, this);
6630
6757
  }));
6631
6758
  function waitForRemoteSDPAnswer() {
6632
6759
  return _waitForRemoteSDPAnswer.apply(this, arguments);
@@ -6645,30 +6772,30 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6645
6772
  }, {
6646
6773
  key: "retryEstablishMediaConnectionWithForcedTurnDiscovery",
6647
6774
  value: (function () {
6648
- var _retryEstablishMediaConnectionWithForcedTurnDiscovery = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee25(remoteMediaManagerConfig, bundlePolicy) {
6775
+ var _retryEstablishMediaConnectionWithForcedTurnDiscovery = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee26(remoteMediaManagerConfig, bundlePolicy) {
6649
6776
  var LOG_HEADER;
6650
- return _regenerator.default.wrap(function _callee25$(_context25) {
6651
- while (1) switch (_context25.prev = _context25.next) {
6777
+ return _regenerator.default.wrap(function _callee26$(_context26) {
6778
+ while (1) switch (_context26.prev = _context26.next) {
6652
6779
  case 0:
6653
6780
  LOG_HEADER = 'Meeting:index#addMedia():retryEstablishMediaConnectionWithForcedTurnDiscovery -->';
6654
- _context25.prev = 1;
6655
- _context25.next = 4;
6781
+ _context26.prev = 1;
6782
+ _context26.next = 4;
6656
6783
  return this.establishMediaConnection(remoteMediaManagerConfig, bundlePolicy, true);
6657
6784
  case 4:
6658
- _context25.next = 10;
6785
+ _context26.next = 10;
6659
6786
  break;
6660
6787
  case 6:
6661
- _context25.prev = 6;
6662
- _context25.t0 = _context25["catch"](1);
6663
- _loggerProxy.default.logger.error("".concat(LOG_HEADER, " retry with TURN-TLS failed, media connection unable to connect, "), _context25.t0);
6664
- throw _context25.t0;
6788
+ _context26.prev = 6;
6789
+ _context26.t0 = _context26["catch"](1);
6790
+ _loggerProxy.default.logger.error("".concat(LOG_HEADER, " retry with TURN-TLS failed, media connection unable to connect, "), _context26.t0);
6791
+ throw _context26.t0;
6665
6792
  case 10:
6666
6793
  case "end":
6667
- return _context25.stop();
6794
+ return _context26.stop();
6668
6795
  }
6669
- }, _callee25, this, [[1, 6]]);
6796
+ }, _callee26, this, [[1, 6]]);
6670
6797
  }));
6671
- function retryEstablishMediaConnectionWithForcedTurnDiscovery(_x19, _x20) {
6798
+ function retryEstablishMediaConnectionWithForcedTurnDiscovery(_x20, _x21) {
6672
6799
  return _retryEstablishMediaConnectionWithForcedTurnDiscovery.apply(this, arguments);
6673
6800
  }
6674
6801
  return retryEstablishMediaConnectionWithForcedTurnDiscovery;
@@ -6686,14 +6813,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6686
6813
  }, {
6687
6814
  key: "retryWithForcedTurnDiscovery",
6688
6815
  value: (function () {
6689
- var _retryWithForcedTurnDiscovery = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee26(remoteMediaManagerConfig, bundlePolicy) {
6816
+ var _retryWithForcedTurnDiscovery = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee27(remoteMediaManagerConfig, bundlePolicy) {
6690
6817
  var LOG_HEADER;
6691
- return _regenerator.default.wrap(function _callee26$(_context26) {
6692
- while (1) switch (_context26.prev = _context26.next) {
6818
+ return _regenerator.default.wrap(function _callee27$(_context27) {
6819
+ while (1) switch (_context27.prev = _context27.next) {
6693
6820
  case 0:
6694
6821
  this.addMediaData.retriedWithTurnServer = true;
6695
6822
  LOG_HEADER = 'Meeting:index#addMedia():retryWithForcedTurnDiscovery -->';
6696
- _context26.next = 4;
6823
+ _context27.next = 4;
6697
6824
  return this.cleanUpBeforeRetryWithTurnServer();
6698
6825
  case 4:
6699
6826
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_RETRY, {
@@ -6703,24 +6830,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6703
6830
  reason: 'forcingTurnTls'
6704
6831
  });
6705
6832
  if (!(this.state === _constants.MEETING_STATE.STATES.LEFT)) {
6706
- _context26.next = 9;
6833
+ _context27.next = 9;
6707
6834
  break;
6708
6835
  }
6709
6836
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " meeting state was LEFT after first attempt to establish media connection. Attempting to rejoin. "));
6710
- _context26.next = 9;
6837
+ _context27.next = 9;
6711
6838
  return this.join({
6712
6839
  rejoin: true
6713
6840
  });
6714
6841
  case 9:
6715
- _context26.next = 11;
6842
+ _context27.next = 11;
6716
6843
  return this.retryEstablishMediaConnectionWithForcedTurnDiscovery(remoteMediaManagerConfig, bundlePolicy);
6717
6844
  case 11:
6718
6845
  case "end":
6719
- return _context26.stop();
6846
+ return _context27.stop();
6720
6847
  }
6721
- }, _callee26, this);
6848
+ }, _callee27, this);
6722
6849
  }));
6723
- function retryWithForcedTurnDiscovery(_x21, _x22) {
6850
+ function retryWithForcedTurnDiscovery(_x22, _x23) {
6724
6851
  return _retryWithForcedTurnDiscovery.apply(this, arguments);
6725
6852
  }
6726
6853
  return retryWithForcedTurnDiscovery;
@@ -6740,32 +6867,32 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6740
6867
  }, {
6741
6868
  key: "handleWaitForMediaConnectionConnectedError",
6742
6869
  value: (function () {
6743
- var _handleWaitForMediaConnectionConnectedError = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee27(error, remoteMediaManagerConfig, bundlePolicy) {
6870
+ var _handleWaitForMediaConnectionConnectedError = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee28(error, remoteMediaManagerConfig, bundlePolicy) {
6744
6871
  var LOG_HEADER;
6745
- return _regenerator.default.wrap(function _callee27$(_context27) {
6746
- while (1) switch (_context27.prev = _context27.next) {
6872
+ return _regenerator.default.wrap(function _callee28$(_context28) {
6873
+ while (1) switch (_context28.prev = _context28.next) {
6747
6874
  case 0:
6748
6875
  LOG_HEADER = 'Meeting:index#addMedia():handleWaitForMediaConnectionConnectedError -->'; // @ts-ignore - config coming from registerPlugin
6749
6876
  if (this.turnServerUsed) {
6750
- _context27.next = 7;
6877
+ _context28.next = 7;
6751
6878
  break;
6752
6879
  }
6753
6880
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " error waiting for media to connect on UDP, TCP, retrying using TURN-TLS, "), error);
6754
- _context27.next = 5;
6881
+ _context28.next = 5;
6755
6882
  return this.retryWithForcedTurnDiscovery(remoteMediaManagerConfig, bundlePolicy);
6756
6883
  case 5:
6757
- _context27.next = 9;
6884
+ _context28.next = 9;
6758
6885
  break;
6759
6886
  case 7:
6760
6887
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " error waiting for media to connect using UDP, TCP and TURN-TLS"), error);
6761
6888
  throw new _webexErrors.AddMediaFailed();
6762
6889
  case 9:
6763
6890
  case "end":
6764
- return _context27.stop();
6891
+ return _context28.stop();
6765
6892
  }
6766
- }, _callee27, this);
6893
+ }, _callee28, this);
6767
6894
  }));
6768
- function handleWaitForMediaConnectionConnectedError(_x23, _x24, _x25) {
6895
+ function handleWaitForMediaConnectionConnectedError(_x24, _x25, _x26) {
6769
6896
  return _handleWaitForMediaConnectionConnectedError.apply(this, arguments);
6770
6897
  }
6771
6898
  return handleWaitForMediaConnectionConnectedError;
@@ -6781,20 +6908,20 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6781
6908
  }, {
6782
6909
  key: "doTurnDiscovery",
6783
6910
  value: (function () {
6784
- var _doTurnDiscovery = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee28(isReconnecting, isForced) {
6911
+ var _doTurnDiscovery = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee29(isReconnecting, isForced) {
6785
6912
  var cdl, turnDiscoveryResult;
6786
- return _regenerator.default.wrap(function _callee28$(_context28) {
6787
- while (1) switch (_context28.prev = _context28.next) {
6913
+ return _regenerator.default.wrap(function _callee29$(_context29) {
6914
+ while (1) switch (_context29.prev = _context29.next) {
6788
6915
  case 0:
6789
6916
  // @ts-ignore
6790
6917
  cdl = this.webex.internal.newMetrics.callDiagnosticLatencies; // @ts-ignore
6791
6918
  this.webex.internal.newMetrics.submitInternalEvent({
6792
6919
  name: 'internal.client.add-media.turn-discovery.start'
6793
6920
  });
6794
- _context28.next = 4;
6921
+ _context29.next = 4;
6795
6922
  return this.roap.doTurnDiscovery(this, isReconnecting, isForced);
6796
6923
  case 4:
6797
- turnDiscoveryResult = _context28.sent;
6924
+ turnDiscoveryResult = _context29.sent;
6798
6925
  this.turnDiscoverySkippedReason = turnDiscoveryResult === null || turnDiscoveryResult === void 0 ? void 0 : turnDiscoveryResult.turnDiscoverySkippedReason;
6799
6926
  this.turnServerUsed = !this.turnDiscoverySkippedReason;
6800
6927
 
@@ -6810,14 +6937,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6810
6937
  retriedWithTurnServer: this.addMediaData.retriedWithTurnServer
6811
6938
  });
6812
6939
  }
6813
- return _context28.abrupt("return", turnDiscoveryResult);
6940
+ return _context29.abrupt("return", turnDiscoveryResult);
6814
6941
  case 10:
6815
6942
  case "end":
6816
- return _context28.stop();
6943
+ return _context29.stop();
6817
6944
  }
6818
- }, _callee28, this);
6945
+ }, _callee29, this);
6819
6946
  }));
6820
- function doTurnDiscovery(_x26, _x27) {
6947
+ function doTurnDiscovery(_x27, _x28) {
6821
6948
  return _doTurnDiscovery.apply(this, arguments);
6822
6949
  }
6823
6950
  return doTurnDiscovery;
@@ -6836,35 +6963,35 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6836
6963
  }, {
6837
6964
  key: "establishMediaConnection",
6838
6965
  value: (function () {
6839
- var _establishMediaConnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee29(remoteMediaManagerConfig, bundlePolicy, isForced, turnServerInfo) {
6966
+ var _establishMediaConnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee30(remoteMediaManagerConfig, bundlePolicy, isForced, turnServerInfo) {
6840
6967
  var _this$locusMediaReque;
6841
6968
  var LOG_HEADER, isReconnecting, _yield$this$doTurnDis, mc;
6842
- return _regenerator.default.wrap(function _callee29$(_context29) {
6843
- while (1) switch (_context29.prev = _context29.next) {
6969
+ return _regenerator.default.wrap(function _callee30$(_context30) {
6970
+ while (1) switch (_context30.prev = _context30.next) {
6844
6971
  case 0:
6845
6972
  LOG_HEADER = 'Meeting:index#addMedia():establishMediaConnection -->';
6846
6973
  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
6847
6974
  if (this.isMoveToInProgress && this.turnServerUsed) {
6848
6975
  isForced = true;
6849
6976
  }
6850
- _context29.prev = 3;
6977
+ _context30.prev = 3;
6851
6978
  if (turnServerInfo) {
6852
- _context29.next = 9;
6979
+ _context30.next = 9;
6853
6980
  break;
6854
6981
  }
6855
- _context29.next = 7;
6982
+ _context30.next = 7;
6856
6983
  return this.doTurnDiscovery(isReconnecting, isForced);
6857
6984
  case 7:
6858
- _yield$this$doTurnDis = _context29.sent;
6985
+ _yield$this$doTurnDis = _context30.sent;
6859
6986
  turnServerInfo = _yield$this$doTurnDis.turnServerInfo;
6860
6987
  case 9:
6861
- _context29.next = 11;
6988
+ _context30.next = 11;
6862
6989
  return this.createMediaConnection(turnServerInfo, bundlePolicy);
6863
6990
  case 11:
6864
- mc = _context29.sent;
6865
- _loggerProxy.default.logger.info("".concat(LOG_HEADER, " media connection created"));
6991
+ mc = _context30.sent;
6992
+ _loggerProxy.default.logger.info("".concat(LOG_HEADER, " media connection created this.isMultistream=").concat(this.isMultistream));
6866
6993
  if (!this.isMultistream) {
6867
- _context29.next = 21;
6994
+ _context30.next = 21;
6868
6995
  break;
6869
6996
  }
6870
6997
  this.remoteMediaManager = new _remoteMediaManager.RemoteMediaManager(this.receiveSlotManager, this.mediaRequestManagers, remoteMediaManagerConfig);
@@ -6872,42 +6999,42 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6872
6999
  this.forwardEvent(this.remoteMediaManager, _remoteMediaManager.Event.InterpretationAudioCreated, _constants.EVENT_TRIGGERS.REMOTE_MEDIA_INTERPRETATION_AUDIO_CREATED);
6873
7000
  this.forwardEvent(this.remoteMediaManager, _remoteMediaManager.Event.ScreenShareAudioCreated, _constants.EVENT_TRIGGERS.REMOTE_MEDIA_SCREEN_SHARE_AUDIO_CREATED);
6874
7001
  this.forwardEvent(this.remoteMediaManager, _remoteMediaManager.Event.VideoLayoutChanged, _constants.EVENT_TRIGGERS.REMOTE_MEDIA_VIDEO_LAYOUT_CHANGED);
6875
- _context29.next = 21;
7002
+ _context30.next = 21;
6876
7003
  return this.remoteMediaManager.start();
6877
7004
  case 21:
6878
- _context29.next = 23;
7005
+ _context30.next = 23;
6879
7006
  return mc.initiateOffer();
6880
7007
  case 23:
6881
- _context29.next = 25;
7008
+ _context30.next = 25;
6882
7009
  return this.waitForRemoteSDPAnswer();
6883
7010
  case 25:
6884
7011
  this.handleMediaLogging(this.mediaProperties);
6885
- _context29.next = 32;
7012
+ _context30.next = 32;
6886
7013
  break;
6887
7014
  case 28:
6888
- _context29.prev = 28;
6889
- _context29.t0 = _context29["catch"](3);
6890
- _loggerProxy.default.logger.error("".concat(LOG_HEADER, " error establishing media connection, "), _context29.t0);
6891
- throw _context29.t0;
7015
+ _context30.prev = 28;
7016
+ _context30.t0 = _context30["catch"](3);
7017
+ _loggerProxy.default.logger.error("".concat(LOG_HEADER, " error establishing media connection, "), _context30.t0);
7018
+ throw _context30.t0;
6892
7019
  case 32:
6893
- _context29.prev = 32;
6894
- _context29.next = 35;
7020
+ _context30.prev = 32;
7021
+ _context30.next = 35;
6895
7022
  return this.waitForMediaConnectionConnected();
6896
7023
  case 35:
6897
- _context29.next = 41;
7024
+ _context30.next = 41;
6898
7025
  break;
6899
7026
  case 37:
6900
- _context29.prev = 37;
6901
- _context29.t1 = _context29["catch"](32);
6902
- _context29.next = 41;
6903
- return this.handleWaitForMediaConnectionConnectedError(_context29.t1, remoteMediaManagerConfig, bundlePolicy);
7027
+ _context30.prev = 37;
7028
+ _context30.t1 = _context30["catch"](32);
7029
+ _context30.next = 41;
7030
+ return this.handleWaitForMediaConnectionConnectedError(_context30.t1, remoteMediaManagerConfig, bundlePolicy);
6904
7031
  case 41:
6905
7032
  case "end":
6906
- return _context29.stop();
7033
+ return _context30.stop();
6907
7034
  }
6908
- }, _callee29, this, [[3, 28], [32, 37]]);
7035
+ }, _callee30, this, [[3, 28], [32, 37]]);
6909
7036
  }));
6910
- function establishMediaConnection(_x28, _x29, _x30, _x31) {
7037
+ function establishMediaConnection(_x29, _x30, _x31, _x32) {
6911
7038
  return _establishMediaConnection.apply(this, arguments);
6912
7039
  }
6913
7040
  return establishMediaConnection;
@@ -6922,22 +7049,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6922
7049
  }, {
6923
7050
  key: "cleanUpOnAddMediaFailure",
6924
7051
  value: (function () {
6925
- var _cleanUpOnAddMediaFailure = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee30() {
6926
- return _regenerator.default.wrap(function _callee30$(_context30) {
6927
- while (1) switch (_context30.prev = _context30.next) {
7052
+ var _cleanUpOnAddMediaFailure = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee31() {
7053
+ return _regenerator.default.wrap(function _callee31$(_context31) {
7054
+ while (1) switch (_context31.prev = _context31.next) {
6928
7055
  case 0:
6929
7056
  if (!this.statsAnalyzer) {
6930
- _context30.next = 3;
7057
+ _context31.next = 3;
6931
7058
  break;
6932
7059
  }
6933
- _context30.next = 3;
7060
+ _context31.next = 3;
6934
7061
  return this.statsAnalyzer.stopAnalyzer();
6935
7062
  case 3:
6936
7063
  this.statsAnalyzer = null;
6937
7064
 
6938
7065
  // when media fails, we want to upload a webrtc dump to see whats going on
6939
7066
  // this function is async, but returns once the stats have been gathered
6940
- _context30.next = 6;
7067
+ _context31.next = 6;
6941
7068
  return this.forceSendStatsReport({
6942
7069
  callFrom: 'addMedia'
6943
7070
  });
@@ -6948,15 +7075,58 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6948
7075
  }
6949
7076
  case 7:
6950
7077
  case "end":
6951
- return _context30.stop();
7078
+ return _context31.stop();
6952
7079
  }
6953
- }, _callee30, this);
7080
+ }, _callee31, this);
6954
7081
  }));
6955
7082
  function cleanUpOnAddMediaFailure() {
6956
7083
  return _cleanUpOnAddMediaFailure.apply(this, arguments);
6957
7084
  }
6958
7085
  return cleanUpOnAddMediaFailure;
6959
7086
  }()
7087
+ /**
7088
+ * Cleans up stats analyzer, peer connection and other things before
7089
+ * we can create a new transcoded media connection
7090
+ *
7091
+ * @private
7092
+ * @returns {Promise<void>}
7093
+ */
7094
+ )
7095
+ }, {
7096
+ key: "downgradeFromMultistreamToTranscoded",
7097
+ value: (function () {
7098
+ var _downgradeFromMultistreamToTranscoded = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee32() {
7099
+ var _this$locusMediaReque2;
7100
+ return _regenerator.default.wrap(function _callee32$(_context32) {
7101
+ while (1) switch (_context32.prev = _context32.next) {
7102
+ case 0:
7103
+ if (!this.statsAnalyzer) {
7104
+ _context32.next = 3;
7105
+ break;
7106
+ }
7107
+ _context32.next = 3;
7108
+ return this.statsAnalyzer.stopAnalyzer();
7109
+ case 3:
7110
+ this.statsAnalyzer = null;
7111
+ this.isMultistream = false;
7112
+ if (this.mediaProperties.webrtcMediaConnection) {
7113
+ // close peer connection, but don't reset mute state information, because we will want to use it on the retry
7114
+ this.closePeerConnections(false);
7115
+ this.mediaProperties.unsetPeerConnection();
7116
+ }
7117
+ (_this$locusMediaReque2 = this.locusMediaRequest) === null || _this$locusMediaReque2 === void 0 ? void 0 : _this$locusMediaReque2.downgradeFromMultistreamToTranscoded();
7118
+ this.createStatsAnalyzer();
7119
+ case 8:
7120
+ case "end":
7121
+ return _context32.stop();
7122
+ }
7123
+ }, _callee32, this);
7124
+ }));
7125
+ function downgradeFromMultistreamToTranscoded() {
7126
+ return _downgradeFromMultistreamToTranscoded.apply(this, arguments);
7127
+ }
7128
+ return downgradeFromMultistreamToTranscoded;
7129
+ }()
6960
7130
  /**
6961
7131
  * Sends stats report, closes peer connection and cleans up any media connection
6962
7132
  * related things before trying to establish media connection again with turn server
@@ -6968,11 +7138,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6968
7138
  }, {
6969
7139
  key: "cleanUpBeforeRetryWithTurnServer",
6970
7140
  value: (function () {
6971
- var _cleanUpBeforeRetryWithTurnServer = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee31() {
6972
- return _regenerator.default.wrap(function _callee31$(_context31) {
6973
- while (1) switch (_context31.prev = _context31.next) {
7141
+ var _cleanUpBeforeRetryWithTurnServer = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee33() {
7142
+ return _regenerator.default.wrap(function _callee33$(_context33) {
7143
+ while (1) switch (_context33.prev = _context33.next) {
6974
7144
  case 0:
6975
- _context31.next = 2;
7145
+ _context33.next = 2;
6976
7146
  return this.forceSendStatsReport({
6977
7147
  callFrom: 'cleanUpBeforeRetryWithTurnServer'
6978
7148
  });
@@ -6992,9 +7162,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6992
7162
  }
6993
7163
  case 3:
6994
7164
  case "end":
6995
- return _context31.stop();
7165
+ return _context33.stop();
6996
7166
  }
6997
- }, _callee31, this);
7167
+ }, _callee33, this);
6998
7168
  }));
6999
7169
  function cleanUpBeforeRetryWithTurnServer() {
7000
7170
  return _cleanUpBeforeRetryWithTurnServer.apply(this, arguments);
@@ -7004,34 +7174,34 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7004
7174
  }, {
7005
7175
  key: "cleanUpBeforeReconnection",
7006
7176
  value: function () {
7007
- var _cleanUpBeforeReconnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee32() {
7008
- return _regenerator.default.wrap(function _callee32$(_context32) {
7009
- while (1) switch (_context32.prev = _context32.next) {
7177
+ var _cleanUpBeforeReconnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee34() {
7178
+ return _regenerator.default.wrap(function _callee34$(_context34) {
7179
+ while (1) switch (_context34.prev = _context34.next) {
7010
7180
  case 0:
7011
- _context32.prev = 0;
7012
- _context32.next = 3;
7181
+ _context34.prev = 0;
7182
+ _context34.next = 3;
7013
7183
  return this.forceSendStatsReport({
7014
7184
  callFrom: 'cleanUpBeforeReconnection'
7015
7185
  });
7016
7186
  case 3:
7017
7187
  if (!this.statsAnalyzer) {
7018
- _context32.next = 6;
7188
+ _context34.next = 6;
7019
7189
  break;
7020
7190
  }
7021
- _context32.next = 6;
7191
+ _context34.next = 6;
7022
7192
  return this.statsAnalyzer.stopAnalyzer();
7023
7193
  case 6:
7024
- _context32.next = 11;
7194
+ _context34.next = 11;
7025
7195
  break;
7026
7196
  case 8:
7027
- _context32.prev = 8;
7028
- _context32.t0 = _context32["catch"](0);
7029
- _loggerProxy.default.logger.error('Meeting:index#cleanUpBeforeReconnection --> Error during cleanup: ', _context32.t0);
7197
+ _context34.prev = 8;
7198
+ _context34.t0 = _context34["catch"](0);
7199
+ _loggerProxy.default.logger.error('Meeting:index#cleanUpBeforeReconnection --> Error during cleanup: ', _context34.t0);
7030
7200
  case 11:
7031
7201
  case "end":
7032
- return _context32.stop();
7202
+ return _context34.stop();
7033
7203
  }
7034
- }, _callee32, this, [[0, 8]]);
7204
+ }, _callee34, this, [[0, 8]]);
7035
7205
  }));
7036
7206
  function cleanUpBeforeReconnection() {
7037
7207
  return _cleanUpBeforeReconnection.apply(this, arguments);
@@ -7078,10 +7248,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7078
7248
  }, {
7079
7249
  key: "addMedia",
7080
7250
  value: function addMedia() {
7081
- var _this42 = this;
7251
+ var _this43 = this;
7082
7252
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7083
7253
  return this.addMediaInternal(function () {
7084
- return _this42.turnServerUsed ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
7254
+ return _this43.turnServerUsed ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
7085
7255
  }, undefined, false, options);
7086
7256
  }
7087
7257
 
@@ -7099,7 +7269,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7099
7269
  }, {
7100
7270
  key: "addMediaInternal",
7101
7271
  value: (function () {
7102
- var _addMediaInternal = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee33(icePhaseCallback, turnServerInfo, forceTurnDiscovery) {
7272
+ var _addMediaInternal = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee35(icePhaseCallback, turnServerInfo, forceTurnDiscovery) {
7103
7273
  var options,
7104
7274
  LOG_HEADER,
7105
7275
  localStreams,
@@ -7147,24 +7317,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7147
7317
  _selectedCandidatePairChanges,
7148
7318
  _numTransports,
7149
7319
  _iceCandidateErrors,
7150
- _args33 = arguments;
7151
- return _regenerator.default.wrap(function _callee33$(_context33) {
7152
- while (1) switch (_context33.prev = _context33.next) {
7320
+ _args35 = arguments;
7321
+ return _regenerator.default.wrap(function _callee35$(_context35) {
7322
+ while (1) switch (_context35.prev = _context35.next) {
7153
7323
  case 0:
7154
- options = _args33.length > 3 && _args33[3] !== undefined ? _args33[3] : {};
7324
+ options = _args35.length > 3 && _args35[3] !== undefined ? _args35[3] : {};
7155
7325
  this.addMediaData.retriedWithTurnServer = false;
7156
7326
  this.addMediaData.icePhaseCallback = icePhaseCallback;
7157
7327
  this.hasMediaConnectionConnectedAtLeastOnce = false;
7158
7328
  LOG_HEADER = 'Meeting:index#addMedia -->';
7159
7329
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " called with: options=").concat((0, _stringify.default)(options), ", turnServerInfo=").concat((0, _stringify.default)(turnServerInfo), ", forceTurnDiscovery=").concat(forceTurnDiscovery));
7160
7330
  if (!(options.allowMediaInLobby !== true && this.meetingState !== _constants.FULL_STATE.ACTIVE)) {
7161
- _context33.next = 8;
7331
+ _context35.next = 8;
7162
7332
  break;
7163
7333
  }
7164
7334
  throw new _webexErrors.MeetingNotActiveError();
7165
7335
  case 8:
7166
7336
  if (!_util2.default.isUserInLeftState(this.locusInfo)) {
7167
- _context33.next = 10;
7337
+ _context35.next = 10;
7168
7338
  break;
7169
7339
  }
7170
7340
  throw new _webexErrors.UserNotJoinedError();
@@ -7175,7 +7345,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7175
7345
  // If the user is unjoined or guest waiting in lobby dont allow the user to addMedia
7176
7346
  // @ts-ignore - isUserUnadmitted coming from SelfUtil
7177
7347
  if (!(this.isUserUnadmitted && !this.wirelessShare && !this.allowMediaInLobby)) {
7178
- _context33.next = 14;
7348
+ _context35.next = 14;
7179
7349
  break;
7180
7350
  }
7181
7351
  throw new _webexErrors.UserInLobbyError();
@@ -7218,45 +7388,55 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7218
7388
  });
7219
7389
  this.audio = (0, _muteState.createMuteState)(_constants.AUDIO, this, audioEnabled);
7220
7390
  this.video = (0, _muteState.createMuteState)(_constants.VIDEO, this, videoEnabled);
7221
- _context33.prev = 18;
7222
- _context33.next = 21;
7391
+ _context35.prev = 18;
7392
+ _context35.next = 21;
7223
7393
  return this.setUpLocalStreamReferences(localStreams);
7224
7394
  case 21:
7225
7395
  this.setMercuryListener();
7226
7396
  this.createStatsAnalyzer();
7227
- _context33.next = 25;
7397
+ _context35.prev = 23;
7398
+ _context35.next = 26;
7228
7399
  return this.establishMediaConnection(remoteMediaManagerConfig, bundlePolicy, forceTurnDiscovery, turnServerInfo);
7229
- case 25:
7230
- if (!(audioEnabled || videoEnabled)) {
7231
- _context33.next = 30;
7400
+ case 26:
7401
+ _context35.next = 39;
7402
+ break;
7403
+ case 28:
7404
+ _context35.prev = 28;
7405
+ _context35.t0 = _context35["catch"](23);
7406
+ if (!(_context35.t0 instanceof _multistreamNotSupportedError.default)) {
7407
+ _context35.next = 38;
7232
7408
  break;
7233
7409
  }
7234
- _context33.next = 28;
7235
- return Meeting.handleDeviceLogging(audioEnabled, videoEnabled);
7236
- case 28:
7237
- _context33.next = 31;
7410
+ _loggerProxy.default.logger.warn("".concat(LOG_HEADER, " we asked for multistream backend (Homer), but got transcoded backend, recreating media connection..."));
7411
+ _context35.next = 34;
7412
+ return this.downgradeFromMultistreamToTranscoded();
7413
+ case 34:
7414
+ _context35.next = 36;
7415
+ return this.establishMediaConnection(remoteMediaManagerConfig, bundlePolicy, true, undefined);
7416
+ case 36:
7417
+ _context35.next = 39;
7238
7418
  break;
7239
- case 30:
7240
- _loggerProxy.default.logger.info("".concat(LOG_HEADER, " device logging not required"));
7241
- case 31:
7419
+ case 38:
7420
+ throw _context35.t0;
7421
+ case 39:
7242
7422
  if (!this.mediaProperties.hasLocalShareStream()) {
7243
- _context33.next = 34;
7423
+ _context35.next = 42;
7244
7424
  break;
7245
7425
  }
7246
- _context33.next = 34;
7426
+ _context35.next = 42;
7247
7427
  return this.enqueueScreenShareFloorRequest();
7248
- case 34:
7249
- _context33.next = 36;
7428
+ case 42:
7429
+ _context35.next = 44;
7250
7430
  return this.mediaProperties.getCurrentConnectionInfo();
7251
- case 36:
7252
- _yield$this$mediaProp = _context33.sent;
7431
+ case 44:
7432
+ _yield$this$mediaProp = _context35.sent;
7253
7433
  connectionType = _yield$this$mediaProp.connectionType;
7254
7434
  selectedCandidatePairChanges = _yield$this$mediaProp.selectedCandidatePairChanges;
7255
7435
  numTransports = _yield$this$mediaProp.numTransports;
7256
- _context33.next = 42;
7436
+ _context35.next = 50;
7257
7437
  return this.webex.meetings.reachability.getReachabilityMetrics();
7258
- case 42:
7259
- reachabilityStats = _context33.sent;
7438
+ case 50:
7439
+ reachabilityStats = _context35.sent;
7260
7440
  iceCandidateErrors = Object.fromEntries(this.iceCandidateErrors);
7261
7441
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_SUCCESS, _objectSpread(_objectSpread(_objectSpread({
7262
7442
  correlation_id: this.correlationId,
@@ -7282,31 +7462,31 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7282
7462
  // We can log ReceiveSlot SSRCs only after the SDP exchange, so doing it here:
7283
7463
  (_this$remoteMediaMana = this.remoteMediaManager) === null || _this$remoteMediaMana === void 0 ? void 0 : _this$remoteMediaMana.logAllReceiveSlots();
7284
7464
  this.startPeriodicLogUpload();
7285
- _context33.next = 69;
7465
+ _context35.next = 77;
7286
7466
  break;
7287
- case 51:
7288
- _context33.prev = 51;
7289
- _context33.t0 = _context33["catch"](18);
7290
- _loggerProxy.default.logger.error("".concat(LOG_HEADER, " failed to establish media connection: "), _context33.t0);
7467
+ case 59:
7468
+ _context35.prev = 59;
7469
+ _context35.t1 = _context35["catch"](18);
7470
+ _loggerProxy.default.logger.error("".concat(LOG_HEADER, " failed to establish media connection: "), _context35.t1);
7291
7471
 
7292
7472
  // @ts-ignore
7293
- _context33.next = 56;
7473
+ _context35.next = 64;
7294
7474
  return this.webex.meetings.reachability.getReachabilityMetrics();
7295
- case 56:
7296
- reachabilityMetrics = _context33.sent;
7297
- _context33.next = 59;
7475
+ case 64:
7476
+ reachabilityMetrics = _context35.sent;
7477
+ _context35.next = 67;
7298
7478
  return this.mediaProperties.getCurrentConnectionInfo();
7299
- case 59:
7300
- _yield$this$mediaProp2 = _context33.sent;
7479
+ case 67:
7480
+ _yield$this$mediaProp2 = _context35.sent;
7301
7481
  _selectedCandidatePairChanges = _yield$this$mediaProp2.selectedCandidatePairChanges;
7302
7482
  _numTransports = _yield$this$mediaProp2.numTransports;
7303
7483
  _iceCandidateErrors = Object.fromEntries(this.iceCandidateErrors);
7304
7484
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_FAILURE, _objectSpread(_objectSpread(_objectSpread({
7305
7485
  correlation_id: this.correlationId,
7306
7486
  locus_id: this.locusUrl.split('/').pop(),
7307
- reason: _context33.t0.message,
7308
- stack: _context33.t0.stack,
7309
- code: _context33.t0.code,
7487
+ reason: _context35.t1.message,
7488
+ stack: _context35.t1.stack,
7489
+ code: _context35.t1.code,
7310
7490
  selectedCandidatePairChanges: _selectedCandidatePairChanges,
7311
7491
  numTransports: _numTransports,
7312
7492
  turnDiscoverySkippedReason: this.turnDiscoverySkippedReason,
@@ -7320,31 +7500,31 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7320
7500
  }, reachabilityMetrics), _iceCandidateErrors), {}, {
7321
7501
  iceCandidatesCount: this.iceCandidatesCount
7322
7502
  }));
7323
- _context33.next = 66;
7503
+ _context35.next = 74;
7324
7504
  return this.cleanUpOnAddMediaFailure();
7325
- case 66:
7505
+ case 74:
7326
7506
  // Upload logs on error while adding media
7327
7507
  _triggerProxy.default.trigger(this, {
7328
7508
  file: 'meeting/index',
7329
7509
  function: 'addMedia'
7330
7510
  }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, this);
7331
- if (_context33.t0 instanceof _internalMediaCore.Errors.SdpError) {
7511
+ if (_context35.t1 instanceof _internalMediaCore.Errors.SdpError) {
7332
7512
  this.leave({
7333
7513
  reason: _constants.MEETING_REMOVED_REASON.MEETING_CONNECTION_FAILED
7334
7514
  });
7335
7515
  }
7336
- throw _context33.t0;
7337
- case 69:
7338
- _context33.prev = 69;
7516
+ throw _context35.t1;
7517
+ case 77:
7518
+ _context35.prev = 77;
7339
7519
  this.addMediaData.icePhaseCallback = DEFAULT_ICE_PHASE_CALLBACK;
7340
- return _context33.finish(69);
7341
- case 72:
7520
+ return _context35.finish(77);
7521
+ case 80:
7342
7522
  case "end":
7343
- return _context33.stop();
7523
+ return _context35.stop();
7344
7524
  }
7345
- }, _callee33, this, [[18, 51, 69, 72]]);
7525
+ }, _callee35, this, [[18, 59, 77, 80], [23, 28]]);
7346
7526
  }));
7347
- function addMediaInternal(_x32, _x33, _x34) {
7527
+ function addMediaInternal(_x33, _x34, _x35) {
7348
7528
  return _addMediaInternal.apply(this, arguments);
7349
7529
  }
7350
7530
  return addMediaInternal;
@@ -7374,7 +7554,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7374
7554
  * @memberof Meeting
7375
7555
  */
7376
7556
  function enqueueMediaUpdate(mediaUpdateType) {
7377
- var _this43 = this;
7557
+ var _this44 = this;
7378
7558
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
7379
7559
  var canUpdateMediaNow = this.canUpdateMedia();
7380
7560
  return new _promise.default(function (resolve, reject) {
@@ -7385,9 +7565,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7385
7565
  options: options
7386
7566
  };
7387
7567
  _loggerProxy.default.logger.log("Meeting:index#enqueueMediaUpdate --> enqueuing media update type=".concat(mediaUpdateType));
7388
- _this43.queuedMediaUpdates.push(queueItem);
7568
+ _this44.queuedMediaUpdates.push(queueItem);
7389
7569
  if (canUpdateMediaNow) {
7390
- _this43.processNextQueuedMediaUpdate();
7570
+ _this44.processNextQueuedMediaUpdate();
7391
7571
  }
7392
7572
  });
7393
7573
  }
@@ -7410,35 +7590,35 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7410
7590
  * @memberof Meeting
7411
7591
  */
7412
7592
  function () {
7413
- var _updateMedia = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee34(options) {
7593
+ var _updateMedia = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee36(options) {
7414
7594
  var audioEnabled, videoEnabled, shareAudioEnabled, shareVideoEnabled, _this$audio3, _this$video3;
7415
- return _regenerator.default.wrap(function _callee34$(_context34) {
7416
- while (1) switch (_context34.prev = _context34.next) {
7595
+ return _regenerator.default.wrap(function _callee36$(_context36) {
7596
+ while (1) switch (_context36.prev = _context36.next) {
7417
7597
  case 0:
7418
7598
  this.checkMediaConnection();
7419
7599
  audioEnabled = options.audioEnabled, videoEnabled = options.videoEnabled, shareAudioEnabled = options.shareAudioEnabled, shareVideoEnabled = options.shareVideoEnabled;
7420
7600
  _loggerProxy.default.logger.log("Meeting:index#updateMedia --> called with options=".concat((0, _stringify.default)(options)));
7421
7601
  if (this.canUpdateMedia()) {
7422
- _context34.next = 5;
7602
+ _context36.next = 5;
7423
7603
  break;
7424
7604
  }
7425
- return _context34.abrupt("return", this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.UPDATE_MEDIA, options));
7605
+ return _context36.abrupt("return", this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.UPDATE_MEDIA, options));
7426
7606
  case 5:
7427
7607
  if (!this.isMultistream) {
7428
- _context34.next = 10;
7608
+ _context36.next = 10;
7429
7609
  break;
7430
7610
  }
7431
7611
  if (!(shareAudioEnabled !== undefined || shareVideoEnabled !== undefined)) {
7432
- _context34.next = 8;
7612
+ _context36.next = 8;
7433
7613
  break;
7434
7614
  }
7435
7615
  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');
7436
7616
  case 8:
7437
- _context34.next = 12;
7617
+ _context36.next = 12;
7438
7618
  break;
7439
7619
  case 10:
7440
7620
  if (!(shareAudioEnabled !== undefined)) {
7441
- _context34.next = 12;
7621
+ _context36.next = 12;
7442
7622
  break;
7443
7623
  }
7444
7624
  throw new Error('toggling shareAudioEnabled in a transcoded meeting is not supported as of now');
@@ -7463,20 +7643,20 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7463
7643
  this.mediaProperties.mediaDirection.receiveShare = !!(shareAudioEnabled || shareVideoEnabled);
7464
7644
  }
7465
7645
  if (this.isMultistream) {
7466
- _context34.next = 18;
7646
+ _context36.next = 18;
7467
7647
  break;
7468
7648
  }
7469
- _context34.next = 18;
7649
+ _context36.next = 18;
7470
7650
  return this.updateTranscodedMediaConnection();
7471
7651
  case 18:
7472
- return _context34.abrupt("return", undefined);
7652
+ return _context36.abrupt("return", undefined);
7473
7653
  case 19:
7474
7654
  case "end":
7475
- return _context34.stop();
7655
+ return _context36.stop();
7476
7656
  }
7477
- }, _callee34, this);
7657
+ }, _callee36, this);
7478
7658
  }));
7479
- function updateMedia(_x35) {
7659
+ function updateMedia(_x36) {
7480
7660
  return _updateMedia.apply(this, arguments);
7481
7661
  }
7482
7662
  return updateMedia;
@@ -7492,7 +7672,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7492
7672
  }, {
7493
7673
  key: "acknowledge",
7494
7674
  value: function acknowledge(type) {
7495
- var _this44 = this;
7675
+ var _this45 = this;
7496
7676
  if (!type) {
7497
7677
  return _promise.default.reject(new _parameter.default('Type must be set to acknowledge the meeting.'));
7498
7678
  }
@@ -7504,12 +7684,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7504
7684
  }).then(function (response) {
7505
7685
  return _promise.default.resolve(response);
7506
7686
  }).then(function (response) {
7507
- _this44.meetingFiniteStateMachine.ring(type);
7687
+ _this45.meetingFiniteStateMachine.ring(type);
7508
7688
  // @ts-ignore
7509
- _this44.webex.internal.newMetrics.submitClientEvent({
7689
+ _this45.webex.internal.newMetrics.submitClientEvent({
7510
7690
  name: 'client.alert.displayed',
7511
7691
  options: {
7512
- meetingId: _this44.id
7692
+ meetingId: _this45.id
7513
7693
  }
7514
7694
  });
7515
7695
  return _promise.default.resolve({
@@ -7534,12 +7714,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7534
7714
  }, {
7535
7715
  key: "decline",
7536
7716
  value: function decline(reason) {
7537
- var _this45 = this;
7717
+ var _this46 = this;
7538
7718
  return _util2.default.declineMeeting(this, reason).then(function (decline) {
7539
- _this45.meetingFiniteStateMachine.decline();
7719
+ _this46.meetingFiniteStateMachine.decline();
7540
7720
  return _promise.default.resolve(decline);
7541
7721
  }).catch(function (error) {
7542
- _this45.meetingFiniteStateMachine.fail(error);
7722
+ _this46.meetingFiniteStateMachine.fail(error);
7543
7723
  return _promise.default.reject(error);
7544
7724
  });
7545
7725
  }
@@ -7590,7 +7770,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7590
7770
  }, {
7591
7771
  key: "leave",
7592
7772
  value: function leave() {
7593
- var _this46 = this;
7773
+ var _this47 = this;
7594
7774
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7595
7775
  var leaveReason = options.reason || _constants.MEETING_REMOVED_REASON.CLIENT_LEAVE_REQUEST;
7596
7776
 
@@ -7602,7 +7782,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7602
7782
  var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7603
7783
  return (
7604
7784
  // @ts-ignore
7605
- _this46.webex.internal.newMetrics.submitClientEvent({
7785
+ _this47.webex.internal.newMetrics.submitClientEvent({
7606
7786
  name: 'client.call.leave',
7607
7787
  payload: _objectSpread({
7608
7788
  trigger: 'user-interaction',
@@ -7610,7 +7790,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7610
7790
  leaveReason: options.clientEventLeaveReason
7611
7791
  }, payload),
7612
7792
  options: {
7613
- meetingId: _this46.id
7793
+ meetingId: _this47.id
7614
7794
  }
7615
7795
  })
7616
7796
  );
@@ -7619,24 +7799,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7619
7799
  return _util2.default.leaveMeeting(this, options).then(function (leave) {
7620
7800
  // CA team recommends submitting this *after* locus /leave
7621
7801
  submitLeaveMetric();
7622
- _this46.meetingFiniteStateMachine.leave();
7623
- _this46.clearMeetingData();
7802
+ _this47.meetingFiniteStateMachine.leave();
7803
+ _this47.clearMeetingData();
7624
7804
 
7625
7805
  // upload logs on leave irrespective of meeting delete
7626
- _triggerProxy.default.trigger(_this46, {
7806
+ _triggerProxy.default.trigger(_this47, {
7627
7807
  file: 'meeting/index',
7628
7808
  function: 'leave'
7629
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this46);
7809
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this47);
7630
7810
 
7631
7811
  // TODO: more testing before we remove this code, we are not sure the scenarios for destroy here
7632
- if (_this46.wirelessShare || _this46.guest) {
7812
+ if (_this47.wirelessShare || _this47.guest) {
7633
7813
  // If screen sharing clean the meeting object
7634
- _triggerProxy.default.trigger(_this46, {
7814
+ _triggerProxy.default.trigger(_this47, {
7635
7815
  file: 'meeting/index',
7636
7816
  function: 'leave'
7637
7817
  }, _constants.EVENTS.DESTROY_MEETING, {
7638
7818
  reason: options.reason,
7639
- meetingId: _this46.id
7819
+ meetingId: _this47.id
7640
7820
  });
7641
7821
  }
7642
7822
  _loggerProxy.default.logger.log('Meeting:index#leave --> LEAVE REASON ', leaveReason);
@@ -7653,16 +7833,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7653
7833
  shownToUser: false
7654
7834
  }]
7655
7835
  });
7656
- _this46.meetingFiniteStateMachine.fail(error);
7836
+ _this47.meetingFiniteStateMachine.fail(error);
7657
7837
  _loggerProxy.default.logger.error('Meeting:index#leave --> Failed to leave ', error);
7658
7838
  // upload logs on leave irrespective of meeting delete
7659
- _triggerProxy.default.trigger(_this46, {
7839
+ _triggerProxy.default.trigger(_this47, {
7660
7840
  file: 'meeting/index',
7661
7841
  function: 'leave'
7662
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this46);
7842
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this47);
7663
7843
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_LEAVE_FAILURE, {
7664
- correlation_id: _this46.correlationId,
7665
- locus_id: _this46.locusUrl.split('/').pop(),
7844
+ correlation_id: _this47.correlationId,
7845
+ locus_id: _this47.locusUrl.split('/').pop(),
7666
7846
  reason: error.message,
7667
7847
  stack: error.stack,
7668
7848
  code: error.code
@@ -7682,7 +7862,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7682
7862
  }, {
7683
7863
  key: "startWhiteboardShare",
7684
7864
  value: function startWhiteboardShare(channelUrl, resourceToken) {
7685
- var _this47 = this;
7865
+ var _this48 = this;
7686
7866
  var whiteboard = this.locusInfo.mediaShares.find(function (element) {
7687
7867
  return element.name === 'whiteboard';
7688
7868
  });
@@ -7711,13 +7891,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7711
7891
  body.resourceToken = resourceToken;
7712
7892
  }
7713
7893
  return this.meetingRequest.changeMeetingFloor(body).then(function () {
7714
- _this47.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
7894
+ _this48.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
7715
7895
  return _promise.default.resolve();
7716
7896
  }).catch(function (error) {
7717
7897
  _loggerProxy.default.logger.error('Meeting:index#startWhiteboardShare --> Error ', error);
7718
7898
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_START_WHITEBOARD_SHARE_FAILURE, {
7719
- correlation_id: _this47.correlationId,
7720
- locus_id: _this47.locusUrl.split('/').pop(),
7899
+ correlation_id: _this48.correlationId,
7900
+ locus_id: _this48.locusUrl.split('/').pop(),
7721
7901
  reason: error.message,
7722
7902
  stack: error.stack,
7723
7903
  board: {
@@ -7740,7 +7920,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7740
7920
  }, {
7741
7921
  key: "stopWhiteboardShare",
7742
7922
  value: function stopWhiteboardShare(channelUrl) {
7743
- var _this48 = this;
7923
+ var _this49 = this;
7744
7924
  var whiteboard = this.locusInfo.mediaShares.find(function (element) {
7745
7925
  return element.name === 'whiteboard';
7746
7926
  });
@@ -7763,8 +7943,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7763
7943
  }).catch(function (error) {
7764
7944
  _loggerProxy.default.logger.error('Meeting:index#stopWhiteboardShare --> Error ', error);
7765
7945
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_STOP_WHITEBOARD_SHARE_FAILURE, {
7766
- correlation_id: _this48.correlationId,
7767
- locus_id: _this48.locusUrl.split('/').pop(),
7946
+ correlation_id: _this49.correlationId,
7947
+ locus_id: _this49.locusUrl.split('/').pop(),
7768
7948
  reason: error.message,
7769
7949
  stack: error.stack,
7770
7950
  board: {
@@ -7786,7 +7966,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7786
7966
  }, {
7787
7967
  key: "requestScreenShareFloor",
7788
7968
  value: function requestScreenShareFloor() {
7789
- var _this49 = this;
7969
+ var _this50 = this;
7790
7970
  if (!this.mediaProperties.hasLocalShareStream() || !this.mediaProperties.mediaDirection.sendShare) {
7791
7971
  _loggerProxy.default.logger.log("Meeting:index#requestScreenShareFloor --> NOT requesting floor, because we don't have the share stream anymore (shareStream=".concat(this.mediaProperties.shareVideoStream ? 'yes' : 'no', ", sendShare=").concat(this.mediaProperties.mediaDirection.sendShare, ")"));
7792
7972
  this.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
@@ -7817,34 +7997,34 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7817
7997
  resourceUrl: this.resourceUrl,
7818
7998
  shareInstanceId: this.localShareInstanceId
7819
7999
  }).then(function () {
7820
- _this49.screenShareFloorState = ScreenShareFloorStatus.GRANTED;
8000
+ _this50.screenShareFloorState = ScreenShareFloorStatus.GRANTED;
7821
8001
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_SUCCESS, {
7822
- correlation_id: _this49.correlationId,
7823
- locus_id: _this49.locusUrl.split('/').pop()
8002
+ correlation_id: _this50.correlationId,
8003
+ locus_id: _this50.locusUrl.split('/').pop()
7824
8004
  });
7825
8005
  return _promise.default.resolve();
7826
8006
  }).catch(function (error) {
7827
8007
  _loggerProxy.default.logger.error('Meeting:index#share --> Error ', error);
7828
8008
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_FAILURE, {
7829
- correlation_id: _this49.correlationId,
7830
- locus_id: _this49.locusUrl.split('/').pop(),
8009
+ correlation_id: _this50.correlationId,
8010
+ locus_id: _this50.locusUrl.split('/').pop(),
7831
8011
  reason: error.message,
7832
8012
  stack: error.stack
7833
8013
  });
7834
8014
 
7835
8015
  // @ts-ignore
7836
- _this49.webex.internal.newMetrics.submitClientEvent({
8016
+ _this50.webex.internal.newMetrics.submitClientEvent({
7837
8017
  name: 'client.share.floor-granted.local',
7838
8018
  payload: {
7839
8019
  mediaType: 'share',
7840
8020
  errors: _util2.default.getChangeMeetingFloorErrorPayload(error.message),
7841
- shareInstanceId: _this49.localShareInstanceId
8021
+ shareInstanceId: _this50.localShareInstanceId
7842
8022
  },
7843
8023
  options: {
7844
- meetingId: _this49.id
8024
+ meetingId: _this50.id
7845
8025
  }
7846
8026
  });
7847
- _this49.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
8027
+ _this50.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
7848
8028
  return _promise.default.reject(error);
7849
8029
  });
7850
8030
  }
@@ -7867,10 +8047,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7867
8047
  }, {
7868
8048
  key: "requestScreenShareFloorIfPending",
7869
8049
  value: function requestScreenShareFloorIfPending() {
7870
- var _this50 = this;
8050
+ var _this51 = this;
7871
8051
  if (this.floorGrantPending && this.state === _constants.MEETING_STATE.STATES.JOINED) {
7872
8052
  this.requestScreenShareFloor().then(function () {
7873
- _this50.floorGrantPending = false;
8053
+ _this51.floorGrantPending = false;
7874
8054
  });
7875
8055
  }
7876
8056
  }
@@ -7884,7 +8064,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7884
8064
  }, {
7885
8065
  key: "releaseScreenShareFloor",
7886
8066
  value: function releaseScreenShareFloor() {
7887
- var _this51 = this;
8067
+ var _this52 = this;
7888
8068
  var content = this.locusInfo.mediaShares.find(function (element) {
7889
8069
  return element.name === _constants.CONTENT;
7890
8070
  });
@@ -7919,8 +8099,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7919
8099
  }).catch(function (error) {
7920
8100
  _loggerProxy.default.logger.error('Meeting:index#releaseScreenShareFloor --> Error ', error);
7921
8101
  _metrics.default.sendBehavioralMetric(_constants2.default.STOP_FLOOR_REQUEST_FAILURE, {
7922
- correlation_id: _this51.correlationId,
7923
- locus_id: _this51.locusUrl.split('/').pop(),
8102
+ correlation_id: _this52.correlationId,
8103
+ locus_id: _this52.locusUrl.split('/').pop(),
7924
8104
  reason: error.message,
7925
8105
  stack: error.stack
7926
8106
  });
@@ -8100,7 +8280,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8100
8280
  }, {
8101
8281
  key: "changeVideoLayout",
8102
8282
  value: function changeVideoLayout(layoutType) {
8103
- var _this52 = this;
8283
+ var _this53 = this;
8104
8284
  var renderInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
8105
8285
  var main = renderInfo.main,
8106
8286
  content = renderInfo.content;
@@ -8116,7 +8296,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8116
8296
  }
8117
8297
  if (layoutType) {
8118
8298
  if (!_constants.LAYOUT_TYPES.includes(layoutType)) {
8119
- return this.rejectWithErrorLog('Meeting:index#changeVideoLayout --> cannot change video layout, invalid layoutType received.');
8299
+ return this.rejectWithErrorLog("Meeting:index#changeVideoLayout --> cannot change video layout, invalid layoutType \"".concat(layoutType, "\" received."));
8120
8300
  }
8121
8301
  layoutInfo.layoutType = layoutType;
8122
8302
  }
@@ -8154,7 +8334,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8154
8334
  }
8155
8335
  this.lastVideoLayoutInfo = (0, _lodash.cloneDeep)(layoutInfo);
8156
8336
  this.locusInfo.once(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED, function (envelope) {
8157
- _triggerProxy.default.trigger(_this52, {
8337
+ _triggerProxy.default.trigger(_this53, {
8158
8338
  file: 'meeting/index',
8159
8339
  function: 'changeVideoLayout'
8160
8340
  }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_LAYOUT_UPDATE, {
@@ -8270,7 +8450,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8270
8450
  }, {
8271
8451
  key: "endMeetingForAll",
8272
8452
  value: function endMeetingForAll() {
8273
- var _this53 = this;
8453
+ var _this54 = this;
8274
8454
  // @ts-ignore
8275
8455
  this.webex.internal.newMetrics.submitClientEvent({
8276
8456
  name: 'client.call.leave',
@@ -8288,25 +8468,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8288
8468
  locus_id: this.locusId
8289
8469
  });
8290
8470
  return _util2.default.endMeetingForAll(this).then(function (end) {
8291
- _this53.meetingFiniteStateMachine.end();
8292
- _this53.clearMeetingData();
8471
+ _this54.meetingFiniteStateMachine.end();
8472
+ _this54.clearMeetingData();
8293
8473
  // upload logs on leave irrespective of meeting delete
8294
- _triggerProxy.default.trigger(_this53, {
8474
+ _triggerProxy.default.trigger(_this54, {
8295
8475
  file: 'meeting/index',
8296
8476
  function: 'endMeetingForAll'
8297
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this53);
8477
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this54);
8298
8478
  return end;
8299
8479
  }).catch(function (error) {
8300
- _this53.meetingFiniteStateMachine.fail(error);
8480
+ _this54.meetingFiniteStateMachine.fail(error);
8301
8481
  _loggerProxy.default.logger.error('Meeting:index#endMeetingForAll --> Failed to end meeting ', error);
8302
8482
  // upload logs on leave irrespective of meeting delete
8303
- _triggerProxy.default.trigger(_this53, {
8483
+ _triggerProxy.default.trigger(_this54, {
8304
8484
  file: 'meeting/index',
8305
8485
  function: 'endMeetingForAll'
8306
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this53);
8486
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this54);
8307
8487
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_END_ALL_FAILURE, {
8308
- correlation_id: _this53.correlationId,
8309
- locus_id: _this53.locusUrl.split('/').pop(),
8488
+ correlation_id: _this54.correlationId,
8489
+ locus_id: _this54.locusUrl.split('/').pop(),
8310
8490
  reason: error.message,
8311
8491
  stack: error.stack,
8312
8492
  code: error.code
@@ -8395,39 +8575,39 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8395
8575
  }, {
8396
8576
  key: "enableMusicMode",
8397
8577
  value: (function () {
8398
- var _enableMusicMode = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee35(shouldEnableMusicMode) {
8399
- return _regenerator.default.wrap(function _callee35$(_context35) {
8400
- while (1) switch (_context35.prev = _context35.next) {
8578
+ var _enableMusicMode = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee37(shouldEnableMusicMode) {
8579
+ return _regenerator.default.wrap(function _callee37$(_context37) {
8580
+ while (1) switch (_context37.prev = _context37.next) {
8401
8581
  case 0:
8402
8582
  this.checkMediaConnection();
8403
8583
  if (this.isMultistream) {
8404
- _context35.next = 3;
8584
+ _context37.next = 3;
8405
8585
  break;
8406
8586
  }
8407
8587
  throw new Error('enableMusicMode() only supported with multistream');
8408
8588
  case 3:
8409
8589
  if (!shouldEnableMusicMode) {
8410
- _context35.next = 8;
8590
+ _context37.next = 8;
8411
8591
  break;
8412
8592
  }
8413
- _context35.next = 6;
8593
+ _context37.next = 6;
8414
8594
  return this.sendSlotManager.setCodecParameters(_internalMediaCore.MediaType.AudioMain, {
8415
8595
  maxaveragebitrate: '64000',
8416
8596
  maxplaybackrate: '48000'
8417
8597
  });
8418
8598
  case 6:
8419
- _context35.next = 10;
8599
+ _context37.next = 10;
8420
8600
  break;
8421
8601
  case 8:
8422
- _context35.next = 10;
8602
+ _context37.next = 10;
8423
8603
  return this.sendSlotManager.deleteCodecParameters(_internalMediaCore.MediaType.AudioMain, ['maxaveragebitrate', 'maxplaybackrate']);
8424
8604
  case 10:
8425
8605
  case "end":
8426
- return _context35.stop();
8606
+ return _context37.stop();
8427
8607
  }
8428
- }, _callee35, this);
8608
+ }, _callee37, this);
8429
8609
  }));
8430
- function enableMusicMode(_x36) {
8610
+ function enableMusicMode(_x37) {
8431
8611
  return _enableMusicMode.apply(this, arguments);
8432
8612
  }
8433
8613
  return enableMusicMode;
@@ -8448,7 +8628,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8448
8628
  _this$mediaProperties41,
8449
8629
  _this$mediaProperties42,
8450
8630
  _this$mediaProperties43,
8451
- _this54 = this;
8631
+ _this55 = this;
8452
8632
  var LOG_HEADER = 'Meeting:index#updateTranscodedMediaConnection -->';
8453
8633
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " starting"));
8454
8634
  if (!this.canUpdateMedia()) {
@@ -8473,8 +8653,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8473
8653
  }).catch(function (error) {
8474
8654
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " Error: "), error);
8475
8655
  _metrics.default.sendBehavioralMetric(_constants2.default.UPDATE_MEDIA_FAILURE, {
8476
- correlation_id: _this54.correlationId,
8477
- locus_id: _this54.locusUrl.split('/').pop(),
8656
+ correlation_id: _this55.correlationId,
8657
+ locus_id: _this55.locusUrl.split('/').pop(),
8478
8658
  reason: error.message,
8479
8659
  stack: error.stack
8480
8660
  });
@@ -8518,25 +8698,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8518
8698
  }, {
8519
8699
  key: "publishStream",
8520
8700
  value: (function () {
8521
- var _publishStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee36(mediaType, stream) {
8522
- return _regenerator.default.wrap(function _callee36$(_context36) {
8523
- while (1) switch (_context36.prev = _context36.next) {
8701
+ var _publishStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee38(mediaType, stream) {
8702
+ return _regenerator.default.wrap(function _callee38$(_context38) {
8703
+ while (1) switch (_context38.prev = _context38.next) {
8524
8704
  case 0:
8525
8705
  if (stream) {
8526
- _context36.next = 2;
8706
+ _context38.next = 2;
8527
8707
  break;
8528
8708
  }
8529
- return _context36.abrupt("return");
8709
+ return _context38.abrupt("return");
8530
8710
  case 2:
8531
8711
  if (!this.mediaProperties.webrtcMediaConnection) {
8532
- _context36.next = 7;
8712
+ _context38.next = 7;
8533
8713
  break;
8534
8714
  }
8535
8715
  if (!(this.isMultistream && this.mediaProperties.webrtcMediaConnection)) {
8536
- _context36.next = 6;
8716
+ _context38.next = 6;
8537
8717
  break;
8538
8718
  }
8539
- _context36.next = 6;
8719
+ _context38.next = 6;
8540
8720
  return this.sendSlotManager.publishStream(mediaType, stream);
8541
8721
  case 6:
8542
8722
  this.emitPublishStateChangeEvent({
@@ -8547,11 +8727,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8547
8727
  });
8548
8728
  case 7:
8549
8729
  case "end":
8550
- return _context36.stop();
8730
+ return _context38.stop();
8551
8731
  }
8552
- }, _callee36, this);
8732
+ }, _callee38, this);
8553
8733
  }));
8554
- function publishStream(_x37, _x38) {
8734
+ function publishStream(_x38, _x39) {
8555
8735
  return _publishStream.apply(this, arguments);
8556
8736
  }
8557
8737
  return publishStream;
@@ -8567,21 +8747,21 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8567
8747
  }, {
8568
8748
  key: "unpublishStream",
8569
8749
  value: (function () {
8570
- var _unpublishStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee37(mediaType, stream) {
8571
- return _regenerator.default.wrap(function _callee37$(_context37) {
8572
- while (1) switch (_context37.prev = _context37.next) {
8750
+ var _unpublishStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee39(mediaType, stream) {
8751
+ return _regenerator.default.wrap(function _callee39$(_context39) {
8752
+ while (1) switch (_context39.prev = _context39.next) {
8573
8753
  case 0:
8574
8754
  if (stream) {
8575
- _context37.next = 2;
8755
+ _context39.next = 2;
8576
8756
  break;
8577
8757
  }
8578
- return _context37.abrupt("return");
8758
+ return _context39.abrupt("return");
8579
8759
  case 2:
8580
8760
  if (!(this.isMultistream && this.mediaProperties.webrtcMediaConnection)) {
8581
- _context37.next = 5;
8761
+ _context39.next = 5;
8582
8762
  break;
8583
8763
  }
8584
- _context37.next = 5;
8764
+ _context39.next = 5;
8585
8765
  return this.sendSlotManager.unpublishStream(mediaType);
8586
8766
  case 5:
8587
8767
  this.emitPublishStateChangeEvent({
@@ -8592,11 +8772,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8592
8772
  });
8593
8773
  case 6:
8594
8774
  case "end":
8595
- return _context37.stop();
8775
+ return _context39.stop();
8596
8776
  }
8597
- }, _callee37, this);
8777
+ }, _callee39, this);
8598
8778
  }));
8599
- function unpublishStream(_x39, _x40) {
8779
+ function unpublishStream(_x40, _x41) {
8600
8780
  return _unpublishStream.apply(this, arguments);
8601
8781
  }
8602
8782
  return unpublishStream;
@@ -8611,19 +8791,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8611
8791
  }, {
8612
8792
  key: "publishStreams",
8613
8793
  value: (function () {
8614
- var _publishStreams = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee38(streams) {
8794
+ var _publishStreams = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee40(streams) {
8615
8795
  var _streams$screenShare, _streams$screenShare2, _streams$screenShare3, _streams$screenShare4, _streams$screenShare5, _streams$screenShare6;
8616
8796
  var streamChecks, _i, _streamChecks, _streamChecks$_i, stream, name, floorRequestNeeded, _streams$screenShare7;
8617
- return _regenerator.default.wrap(function _callee38$(_context38) {
8618
- while (1) switch (_context38.prev = _context38.next) {
8797
+ return _regenerator.default.wrap(function _callee40$(_context40) {
8798
+ while (1) switch (_context40.prev = _context40.next) {
8619
8799
  case 0:
8620
8800
  _loggerProxy.default.logger.info("Meeting:index#publishStreams --> called with: ".concat((0, _stringify.default)(streams)));
8621
8801
  this.checkMediaConnection();
8622
8802
  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))) {
8623
- _context38.next = 4;
8803
+ _context40.next = 4;
8624
8804
  break;
8625
8805
  }
8626
- return _context38.abrupt("return");
8806
+ return _context40.abrupt("return");
8627
8807
  case 4:
8628
8808
  streamChecks = [{
8629
8809
  stream: streams === null || streams === void 0 ? void 0 : streams.microphone,
@@ -8641,62 +8821,62 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8641
8821
  _i = 0, _streamChecks = streamChecks;
8642
8822
  case 6:
8643
8823
  if (!(_i < _streamChecks.length)) {
8644
- _context38.next = 13;
8824
+ _context40.next = 13;
8645
8825
  break;
8646
8826
  }
8647
8827
  _streamChecks$_i = _streamChecks[_i], stream = _streamChecks$_i.stream, name = _streamChecks$_i.name;
8648
8828
  if (!((stream === null || stream === void 0 ? void 0 : stream.readyState) === 'ended')) {
8649
- _context38.next = 10;
8829
+ _context40.next = 10;
8650
8830
  break;
8651
8831
  }
8652
8832
  throw new Error("Attempted to publish ".concat(name, " stream with ended readyState, correlationId=").concat(this.correlationId));
8653
8833
  case 10:
8654
8834
  _i++;
8655
- _context38.next = 6;
8835
+ _context40.next = 6;
8656
8836
  break;
8657
8837
  case 13:
8658
8838
  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
8659
8839
  if (!(this.isMultistream && (_streams$screenShare5 = streams.screenShare) !== null && _streams$screenShare5 !== void 0 && _streams$screenShare5.audio)) {
8660
- _context38.next = 18;
8840
+ _context40.next = 18;
8661
8841
  break;
8662
8842
  }
8663
- _context38.next = 17;
8843
+ _context40.next = 17;
8664
8844
  return this.setLocalShareAudioStream(streams.screenShare.audio);
8665
8845
  case 17:
8666
8846
  floorRequestNeeded = this.screenShareFloorState === ScreenShareFloorStatus.RELEASED;
8667
8847
  case 18:
8668
8848
  if (!((_streams$screenShare6 = streams.screenShare) !== null && _streams$screenShare6 !== void 0 && _streams$screenShare6.video)) {
8669
- _context38.next = 22;
8849
+ _context40.next = 22;
8670
8850
  break;
8671
8851
  }
8672
- _context38.next = 21;
8852
+ _context40.next = 21;
8673
8853
  return this.setLocalShareVideoStream((_streams$screenShare7 = streams.screenShare) === null || _streams$screenShare7 === void 0 ? void 0 : _streams$screenShare7.video);
8674
8854
  case 21:
8675
8855
  floorRequestNeeded = this.screenShareFloorState === ScreenShareFloorStatus.RELEASED;
8676
8856
  case 22:
8677
8857
  if (!streams.microphone) {
8678
- _context38.next = 25;
8858
+ _context40.next = 25;
8679
8859
  break;
8680
8860
  }
8681
- _context38.next = 25;
8861
+ _context40.next = 25;
8682
8862
  return this.setLocalAudioStream(streams.microphone);
8683
8863
  case 25:
8684
8864
  if (!streams.camera) {
8685
- _context38.next = 28;
8865
+ _context40.next = 28;
8686
8866
  break;
8687
8867
  }
8688
- _context38.next = 28;
8868
+ _context40.next = 28;
8689
8869
  return this.setLocalVideoStream(streams.camera);
8690
8870
  case 28:
8691
8871
  if (this.isMultistream) {
8692
- _context38.next = 31;
8872
+ _context40.next = 31;
8693
8873
  break;
8694
8874
  }
8695
- _context38.next = 31;
8875
+ _context40.next = 31;
8696
8876
  return this.updateTranscodedMediaConnection();
8697
8877
  case 31:
8698
8878
  if (!floorRequestNeeded) {
8699
- _context38.next = 37;
8879
+ _context40.next = 37;
8700
8880
  break;
8701
8881
  }
8702
8882
  this.localShareInstanceId = _uuid.default.v4();
@@ -8720,15 +8900,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8720
8900
  // we're sending the http request to Locus to request the screen share floor
8721
8901
  // only after the SDP update, because that's how it's always been done for transcoded meetings
8722
8902
  // and also if sharing from the start, we need confluence to have been created
8723
- _context38.next = 37;
8903
+ _context40.next = 37;
8724
8904
  return this.enqueueScreenShareFloorRequest();
8725
8905
  case 37:
8726
8906
  case "end":
8727
- return _context38.stop();
8907
+ return _context40.stop();
8728
8908
  }
8729
- }, _callee38, this);
8909
+ }, _callee40, this);
8730
8910
  }));
8731
- function publishStreams(_x41) {
8911
+ function publishStreams(_x42) {
8732
8912
  return _publishStreams.apply(this, arguments);
8733
8913
  }
8734
8914
  return publishStreams;
@@ -8743,10 +8923,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8743
8923
  }, {
8744
8924
  key: "unpublishStreams",
8745
8925
  value: (function () {
8746
- var _unpublishStreams = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee39(streams) {
8926
+ var _unpublishStreams = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee41(streams) {
8747
8927
  var promises, _iterator, _step, stream;
8748
- return _regenerator.default.wrap(function _callee39$(_context39) {
8749
- while (1) switch (_context39.prev = _context39.next) {
8928
+ return _regenerator.default.wrap(function _callee41$(_context41) {
8929
+ while (1) switch (_context41.prev = _context41.next) {
8750
8930
  case 0:
8751
8931
  _loggerProxy.default.logger.info("Meeting:index#unpublishStreams --> called with: ".concat((0, _stringify.default)(streams)));
8752
8932
  this.checkMediaConnection();
@@ -8778,7 +8958,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8778
8958
  if (!this.isMultistream) {
8779
8959
  promises.push(this.updateTranscodedMediaConnection());
8780
8960
  }
8781
- _context39.next = 8;
8961
+ _context41.next = 8;
8782
8962
  return _promise.default.all(promises);
8783
8963
  case 8:
8784
8964
  // we're allowing for the SDK to support just audio share as well
@@ -8799,11 +8979,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8799
8979
  }
8800
8980
  case 9:
8801
8981
  case "end":
8802
- return _context39.stop();
8982
+ return _context41.stop();
8803
8983
  }
8804
- }, _callee39, this);
8984
+ }, _callee41, this);
8805
8985
  }));
8806
- function unpublishStreams(_x42) {
8986
+ function unpublishStreams(_x43) {
8807
8987
  return _unpublishStreams.apply(this, arguments);
8808
8988
  }
8809
8989
  return unpublishStreams;
@@ -8860,64 +9040,6 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8860
9040
  }
8861
9041
  return _promise.default.resolve();
8862
9042
  }
8863
- }], [{
8864
- key: "handleDeviceLogging",
8865
- value: (function () {
8866
- var _handleDeviceLogging = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee40(isAudioEnabled, isVideoEnabled) {
8867
- var devices;
8868
- return _regenerator.default.wrap(function _callee40$(_context40) {
8869
- while (1) switch (_context40.prev = _context40.next) {
8870
- case 0:
8871
- _context40.prev = 0;
8872
- devices = [];
8873
- if (!(isVideoEnabled && isAudioEnabled)) {
8874
- _context40.next = 8;
8875
- break;
8876
- }
8877
- _context40.next = 5;
8878
- return (0, _mediaHelpers.getDevices)();
8879
- case 5:
8880
- devices = _context40.sent;
8881
- _context40.next = 18;
8882
- break;
8883
- case 8:
8884
- if (!isVideoEnabled) {
8885
- _context40.next = 14;
8886
- break;
8887
- }
8888
- _context40.next = 11;
8889
- return (0, _mediaHelpers.getDevices)(_media.default.DeviceKind.VIDEO_INPUT);
8890
- case 11:
8891
- devices = _context40.sent;
8892
- _context40.next = 18;
8893
- break;
8894
- case 14:
8895
- if (!isAudioEnabled) {
8896
- _context40.next = 18;
8897
- break;
8898
- }
8899
- _context40.next = 17;
8900
- return (0, _mediaHelpers.getDevices)(_media.default.DeviceKind.AUDIO_INPUT);
8901
- case 17:
8902
- devices = _context40.sent;
8903
- case 18:
8904
- _util2.default.handleDeviceLogging(devices);
8905
- _context40.next = 23;
8906
- break;
8907
- case 21:
8908
- _context40.prev = 21;
8909
- _context40.t0 = _context40["catch"](0);
8910
- case 23:
8911
- case "end":
8912
- return _context40.stop();
8913
- }
8914
- }, _callee40, null, [[0, 21]]);
8915
- }));
8916
- function handleDeviceLogging(_x43, _x44) {
8917
- return _handleDeviceLogging.apply(this, arguments);
8918
- }
8919
- return handleDeviceLogging;
8920
- }())
8921
9043
  }]);
8922
9044
  return Meeting;
8923
9045
  }(_webexCore.StatelessWebexPlugin);