@webex/plugin-meetings 3.12.0-next.6 → 3.12.0-next.61

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 (158) hide show
  1. package/AGENTS.md +9 -0
  2. package/dist/aiEnableRequest/index.js +15 -2
  3. package/dist/aiEnableRequest/index.js.map +1 -1
  4. package/dist/breakouts/breakout.js +8 -3
  5. package/dist/breakouts/breakout.js.map +1 -1
  6. package/dist/breakouts/index.js +26 -2
  7. package/dist/breakouts/index.js.map +1 -1
  8. package/dist/config.js +2 -0
  9. package/dist/config.js.map +1 -1
  10. package/dist/constants.js +6 -3
  11. package/dist/constants.js.map +1 -1
  12. package/dist/controls-options-manager/constants.js +11 -1
  13. package/dist/controls-options-manager/constants.js.map +1 -1
  14. package/dist/controls-options-manager/index.js +38 -24
  15. package/dist/controls-options-manager/index.js.map +1 -1
  16. package/dist/controls-options-manager/util.js +91 -0
  17. package/dist/controls-options-manager/util.js.map +1 -1
  18. package/dist/hashTree/constants.js +10 -1
  19. package/dist/hashTree/constants.js.map +1 -1
  20. package/dist/hashTree/hashTreeParser.js +716 -370
  21. package/dist/hashTree/hashTreeParser.js.map +1 -1
  22. package/dist/hashTree/utils.js +22 -0
  23. package/dist/hashTree/utils.js.map +1 -1
  24. package/dist/index.js +7 -0
  25. package/dist/index.js.map +1 -1
  26. package/dist/interceptors/locusRetry.js +23 -8
  27. package/dist/interceptors/locusRetry.js.map +1 -1
  28. package/dist/interpretation/index.js +10 -1
  29. package/dist/interpretation/index.js.map +1 -1
  30. package/dist/interpretation/siLanguage.js +1 -1
  31. package/dist/locus-info/controlsUtils.js +4 -1
  32. package/dist/locus-info/controlsUtils.js.map +1 -1
  33. package/dist/locus-info/index.js +289 -87
  34. package/dist/locus-info/index.js.map +1 -1
  35. package/dist/locus-info/types.js +19 -0
  36. package/dist/locus-info/types.js.map +1 -1
  37. package/dist/media/index.js +3 -1
  38. package/dist/media/index.js.map +1 -1
  39. package/dist/media/properties.js +1 -0
  40. package/dist/media/properties.js.map +1 -1
  41. package/dist/meeting/in-meeting-actions.js +3 -1
  42. package/dist/meeting/in-meeting-actions.js.map +1 -1
  43. package/dist/meeting/index.js +907 -535
  44. package/dist/meeting/index.js.map +1 -1
  45. package/dist/meeting/util.js +19 -2
  46. package/dist/meeting/util.js.map +1 -1
  47. package/dist/meetings/index.js +231 -78
  48. package/dist/meetings/index.js.map +1 -1
  49. package/dist/meetings/meetings.types.js +6 -1
  50. package/dist/meetings/meetings.types.js.map +1 -1
  51. package/dist/meetings/request.js +39 -0
  52. package/dist/meetings/request.js.map +1 -1
  53. package/dist/meetings/util.js +79 -5
  54. package/dist/meetings/util.js.map +1 -1
  55. package/dist/member/index.js +10 -0
  56. package/dist/member/index.js.map +1 -1
  57. package/dist/member/types.js.map +1 -1
  58. package/dist/member/util.js +3 -0
  59. package/dist/member/util.js.map +1 -1
  60. package/dist/metrics/constants.js +4 -1
  61. package/dist/metrics/constants.js.map +1 -1
  62. package/dist/multistream/codec/constants.js +63 -0
  63. package/dist/multistream/codec/constants.js.map +1 -0
  64. package/dist/multistream/mediaRequestManager.js +62 -15
  65. package/dist/multistream/mediaRequestManager.js.map +1 -1
  66. package/dist/multistream/receiveSlot.js +9 -0
  67. package/dist/multistream/receiveSlot.js.map +1 -1
  68. package/dist/reactions/reactions.type.js.map +1 -1
  69. package/dist/recording-controller/index.js +1 -3
  70. package/dist/recording-controller/index.js.map +1 -1
  71. package/dist/types/config.d.ts +2 -0
  72. package/dist/types/constants.d.ts +2 -0
  73. package/dist/types/controls-options-manager/constants.d.ts +6 -1
  74. package/dist/types/controls-options-manager/index.d.ts +10 -0
  75. package/dist/types/hashTree/constants.d.ts +1 -0
  76. package/dist/types/hashTree/hashTreeParser.d.ts +92 -16
  77. package/dist/types/hashTree/utils.d.ts +11 -0
  78. package/dist/types/index.d.ts +2 -0
  79. package/dist/types/interceptors/locusRetry.d.ts +4 -4
  80. package/dist/types/locus-info/index.d.ts +46 -6
  81. package/dist/types/locus-info/types.d.ts +21 -1
  82. package/dist/types/media/properties.d.ts +1 -0
  83. package/dist/types/meeting/in-meeting-actions.d.ts +2 -0
  84. package/dist/types/meeting/index.d.ts +87 -3
  85. package/dist/types/meeting/util.d.ts +8 -0
  86. package/dist/types/meetings/index.d.ts +30 -2
  87. package/dist/types/meetings/meetings.types.d.ts +15 -0
  88. package/dist/types/meetings/request.d.ts +14 -0
  89. package/dist/types/member/index.d.ts +1 -0
  90. package/dist/types/member/types.d.ts +1 -0
  91. package/dist/types/member/util.d.ts +1 -0
  92. package/dist/types/metrics/constants.d.ts +3 -0
  93. package/dist/types/multistream/codec/constants.d.ts +7 -0
  94. package/dist/types/multistream/mediaRequestManager.d.ts +22 -5
  95. package/dist/types/reactions/reactions.type.d.ts +3 -0
  96. package/dist/webinar/index.js +361 -235
  97. package/dist/webinar/index.js.map +1 -1
  98. package/package.json +22 -22
  99. package/src/aiEnableRequest/index.ts +16 -0
  100. package/src/breakouts/breakout.ts +3 -1
  101. package/src/breakouts/index.ts +31 -0
  102. package/src/config.ts +2 -0
  103. package/src/constants.ts +5 -1
  104. package/src/controls-options-manager/constants.ts +14 -1
  105. package/src/controls-options-manager/index.ts +47 -24
  106. package/src/controls-options-manager/util.ts +81 -1
  107. package/src/hashTree/constants.ts +9 -0
  108. package/src/hashTree/hashTreeParser.ts +429 -183
  109. package/src/hashTree/utils.ts +17 -0
  110. package/src/index.ts +5 -0
  111. package/src/interceptors/locusRetry.ts +25 -4
  112. package/src/interpretation/index.ts +25 -8
  113. package/src/locus-info/controlsUtils.ts +3 -1
  114. package/src/locus-info/index.ts +291 -97
  115. package/src/locus-info/types.ts +25 -1
  116. package/src/media/index.ts +3 -0
  117. package/src/media/properties.ts +1 -0
  118. package/src/meeting/in-meeting-actions.ts +4 -0
  119. package/src/meeting/index.ts +388 -33
  120. package/src/meeting/util.ts +20 -2
  121. package/src/meetings/index.ts +134 -44
  122. package/src/meetings/meetings.types.ts +19 -0
  123. package/src/meetings/request.ts +43 -0
  124. package/src/meetings/util.ts +97 -1
  125. package/src/member/index.ts +10 -0
  126. package/src/member/types.ts +1 -0
  127. package/src/member/util.ts +3 -0
  128. package/src/metrics/constants.ts +3 -0
  129. package/src/multistream/codec/constants.ts +58 -0
  130. package/src/multistream/mediaRequestManager.ts +119 -28
  131. package/src/multistream/receiveSlot.ts +18 -0
  132. package/src/reactions/reactions.type.ts +3 -0
  133. package/src/recording-controller/index.ts +1 -2
  134. package/src/webinar/index.ts +162 -21
  135. package/test/unit/spec/aiEnableRequest/index.ts +86 -0
  136. package/test/unit/spec/breakouts/breakout.ts +9 -3
  137. package/test/unit/spec/breakouts/index.ts +49 -0
  138. package/test/unit/spec/controls-options-manager/index.js +140 -29
  139. package/test/unit/spec/controls-options-manager/util.js +165 -0
  140. package/test/unit/spec/hashTree/hashTreeParser.ts +1508 -149
  141. package/test/unit/spec/hashTree/utils.ts +88 -1
  142. package/test/unit/spec/interceptors/locusRetry.ts +205 -4
  143. package/test/unit/spec/interpretation/index.ts +26 -4
  144. package/test/unit/spec/locus-info/controlsUtils.js +172 -57
  145. package/test/unit/spec/locus-info/index.js +475 -81
  146. package/test/unit/spec/media/index.ts +31 -0
  147. package/test/unit/spec/meeting/in-meeting-actions.ts +2 -0
  148. package/test/unit/spec/meeting/index.js +1131 -49
  149. package/test/unit/spec/meeting/muteState.js +3 -0
  150. package/test/unit/spec/meeting/utils.js +33 -0
  151. package/test/unit/spec/meetings/index.js +360 -10
  152. package/test/unit/spec/meetings/request.js +141 -0
  153. package/test/unit/spec/meetings/utils.js +189 -0
  154. package/test/unit/spec/member/index.js +7 -0
  155. package/test/unit/spec/member/util.js +24 -0
  156. package/test/unit/spec/multistream/mediaRequestManager.ts +501 -37
  157. package/test/unit/spec/recording-controller/index.js +9 -8
  158. package/test/unit/spec/webinar/index.ts +141 -16
@@ -496,6 +496,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
496
496
  (0, _defineProperty3.default)(_this, "floorGrantPending", void 0);
497
497
  (0, _defineProperty3.default)(_this, "hasJoinedOnce", void 0);
498
498
  (0, _defineProperty3.default)(_this, "hasWebsocketConnected", void 0);
499
+ (0, _defineProperty3.default)(_this, "mercuryOnlineHandler", void 0);
500
+ (0, _defineProperty3.default)(_this, "mercuryOfflineHandler", void 0);
499
501
  (0, _defineProperty3.default)(_this, "inMeetingActions", void 0);
500
502
  (0, _defineProperty3.default)(_this, "isLocalShareLive", void 0);
501
503
  (0, _defineProperty3.default)(_this, "isRoapInProgress", void 0);
@@ -641,6 +643,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
641
643
  * @returns {void}
642
644
  */
643
645
  (0, _defineProperty3.default)(_this, "processRelayEvent", function (e) {
646
+ if (!_this.isRelayEventRouteValid(e)) {
647
+ return;
648
+ }
644
649
  switch (e.data.relayType) {
645
650
  case _constants3.REACTION_RELAY_TYPES.REACTION:
646
651
  if (
@@ -679,8 +684,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
679
684
  * @returns {null}
680
685
  */
681
686
  (0, _defineProperty3.default)(_this, "handleLLMOnline", function () {
682
- // @ts-ignore
683
- _this.webex.internal.llm.off('online', _this.handleLLMOnline);
687
+ _this.restoreLLMSubscriptionsIfNeeded();
684
688
  _triggerProxy.default.trigger(_this, {
685
689
  file: 'meeting/index',
686
690
  function: 'handleLLMOnline'
@@ -688,6 +692,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
688
692
  });
689
693
  /**
690
694
  * Disconnects and cleans up the default LLM session listeners/timers.
695
+ *
696
+ * Ownership-aware: only calls `disconnectLLM` when this meeting is the
697
+ * current owner of the default LLM session (or when no owner is recorded).
698
+ * Event listeners belonging to this meeting instance are always detached
699
+ * so they do not receive another meeting's relay events.
700
+ *
691
701
  * @param {Object} options
692
702
  * @param {boolean} [options.removeOnlineListener=true] removes the one-time online listener
693
703
  * @param {boolean} [options.throwOnError=true] rethrows disconnect errors when true
@@ -699,13 +709,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
699
709
  removeOnlineListener,
700
710
  _ref3$throwOnError,
701
711
  throwOnError,
712
+ currentOwner,
713
+ isOwner,
714
+ _this$webex$internal$,
715
+ _this$webex$internal$2,
702
716
  _args = arguments,
703
717
  _t;
704
718
  return _regenerator.default.wrap(function (_context) {
705
719
  while (1) switch (_context.prev = _context.next) {
706
720
  case 0:
707
721
  _ref3 = _args.length > 0 && _args[0] !== undefined ? _args[0] : {}, _ref3$removeOnlineLis = _ref3.removeOnlineListener, removeOnlineListener = _ref3$removeOnlineLis === void 0 ? true : _ref3$removeOnlineLis, _ref3$throwOnError = _ref3.throwOnError, throwOnError = _ref3$throwOnError === void 0 ? true : _ref3$throwOnError;
722
+ // @ts-ignore - Fix type
723
+ currentOwner = _this.webex.internal.llm.getOwnerMeetingId();
724
+ isOwner = !currentOwner || currentOwner === _this.id;
708
725
  _context.prev = 1;
726
+ if (!isOwner) {
727
+ _context.next = 3;
728
+ break;
729
+ }
709
730
  _context.next = 2;
710
731
  return _this.webex.internal.llm.disconnectLLM({
711
732
  code: 3050,
@@ -715,31 +736,43 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
715
736
  _context.next = 4;
716
737
  break;
717
738
  case 3:
718
- _context.prev = 3;
739
+ _loggerProxy.default.logger.info("Meeting:index#cleanupLLMConneciton --> skipping disconnect; LLM owned by meeting ".concat(currentOwner, ", not ").concat(_this.id));
740
+ case 4:
741
+ _context.next = 6;
742
+ break;
743
+ case 5:
744
+ _context.prev = 5;
719
745
  _t = _context["catch"](1);
720
746
  _loggerProxy.default.logger.error('Meeting:index#cleanupLLMConneciton --> Failed to disconnect default LLM session', _t);
721
747
  if (!throwOnError) {
722
- _context.next = 4;
748
+ _context.next = 6;
723
749
  break;
724
750
  }
725
751
  throw _t;
726
- case 4:
727
- _context.prev = 4;
752
+ case 6:
753
+ _context.prev = 6;
728
754
  if (removeOnlineListener) {
729
755
  // @ts-ignore - Fix type
730
756
  _this.webex.internal.llm.off('online', _this.handleLLMOnline);
731
757
  }
732
- // @ts-ignore - fix types
733
- _this.webex.internal.llm.off('event:relay.event', _this.processRelayEvent);
734
- // @ts-ignore - Fix type
735
- _this.webex.internal.llm.off(_constants.LOCUS_LLM_EVENT, _this.processLocusLLMEvent);
736
- _this.clearLLMHealthCheckTimer();
737
- return _context.finish(4);
738
- case 5:
758
+ _this.stopListeningForLLMEvents();
759
+
760
+ // If this meeting owned (or could have owned) the default LLM session,
761
+ // always release the owner tag here regardless of whether disconnectLLM
762
+ // resolved. `disconnectLLM` only clears the owner on its success path,
763
+ // so a failed disconnect would otherwise leave a stale owner pointing
764
+ // at a torn-down meeting and permanently block other meetings'
765
+ // `updateLLMConnection` calls via the ownership guard.
766
+ if (isOwner) {
767
+ // @ts-ignore - Fix type
768
+ (_this$webex$internal$ = (_this$webex$internal$2 = _this.webex.internal.llm).setOwnerMeetingId) === null || _this$webex$internal$ === void 0 ? void 0 : _this$webex$internal$.call(_this$webex$internal$2, undefined);
769
+ }
770
+ return _context.finish(6);
771
+ case 7:
739
772
  case "end":
740
773
  return _context.stop();
741
774
  }
742
- }, _callee, null, [[1, 3, 4, 5]]);
775
+ }, _callee, null, [[1, 5, 6, 7]]);
743
776
  })));
744
777
  /**
745
778
  * Handles ROAP_FAILURE event from the webrtc media connection
@@ -1322,6 +1355,37 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1322
1355
  }
1323
1356
  }
1324
1357
  });
1358
+ _this.statsAnalyzer.on(_internalMediaCore.StatsAnalyzerEventNames.STATS_UPDATE, function (data) {
1359
+ // Extract srtpCipher from transport stats
1360
+ var srtpCipher;
1361
+ var _iterator = _createForOfIteratorHelper(data.stats.values()),
1362
+ _step;
1363
+ try {
1364
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
1365
+ var stats = _step.value;
1366
+ if (stats.type === 'transport' && stats.srtpCipher) {
1367
+ srtpCipher = stats.srtpCipher;
1368
+ break;
1369
+ }
1370
+ }
1371
+
1372
+ // Only emit event if srtpCipher has changed
1373
+ } catch (err) {
1374
+ _iterator.e(err);
1375
+ } finally {
1376
+ _iterator.f();
1377
+ }
1378
+ if (srtpCipher && srtpCipher !== _this.mediaProperties.srtpCipher) {
1379
+ _loggerProxy.default.logger.info("Meeting:index#setupStatsAnalyzerEventHandlers --> SRTP cipher changed from ".concat(_this.mediaProperties.srtpCipher, " to ").concat(srtpCipher));
1380
+ _this.mediaProperties.srtpCipher = srtpCipher;
1381
+ _triggerProxy.default.trigger(_this, {
1382
+ file: 'meeting/index',
1383
+ function: 'setupStatsAnalyzerEventHandlers'
1384
+ }, _constants.EVENT_TRIGGERS.MEETING_SRTP_CIPHER_UPDATED, {
1385
+ srtpCipher: srtpCipher
1386
+ });
1387
+ }
1388
+ });
1325
1389
  });
1326
1390
  /**
1327
1391
  * media failed, so collect a stats report from webrtc using the wcme connection to grab the rtc stats report
@@ -1540,6 +1604,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1540
1604
  * @memberof Meeting
1541
1605
  */
1542
1606
  (0, _defineProperty3.default)(_this, "clearMeetingData", /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee5() {
1607
+ var currentOwner, isOwner;
1543
1608
  return _regenerator.default.wrap(function (_context5) {
1544
1609
  while (1) switch (_context5.prev = _context5.next) {
1545
1610
  case 0:
@@ -1550,10 +1615,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1550
1615
  _this.shareStatus = _constants.SHARE_STATUS.NO_SHARE;
1551
1616
  }
1552
1617
  _this.queuedMediaUpdates = [];
1553
- _this.stopTranscription();
1554
- _this.transcription = undefined;
1555
- _this.annotation.deregisterEvents();
1556
- _this.clearDataChannelToken();
1618
+
1619
+ // Listener teardown (transcription, annotation, llm/mercury) runs in
1620
+ // stopListeningForMeetingEvents() before /leave and /end so events
1621
+ // received mid-teardown do not trigger Locus syncs. Calling it here
1622
+ // again would double-emit MEETING_STOPPED_RECEIVING_TRANSCRIPTION
1623
+ // because stopTranscription() always fires its trigger.
1624
+ //
1625
+ // Ownership-aware token clear: only clear the shared LLM data channel
1626
+ // tokens when this meeting owns (or no meeting owns) the default LLM
1627
+ // session. Otherwise we would wipe tokens still in use by another
1628
+ // meeting's active LLM connection.
1629
+ // @ts-ignore - Fix type
1630
+ currentOwner = _this.webex.internal.llm.getOwnerMeetingId();
1631
+ isOwner = !currentOwner || currentOwner === _this.id;
1632
+ if (isOwner) {
1633
+ _this.clearDataChannelToken();
1634
+ } else {
1635
+ _loggerProxy.default.logger.info("Meeting:index#clearMeetingData --> skipping clearDataChannelToken; LLM owned by meeting ".concat(currentOwner, ", not ").concat(_this.id));
1636
+ }
1557
1637
  _context5.next = 1;
1558
1638
  return _this.cleanupLLMConneciton({
1559
1639
  throwOnError: false
@@ -1728,7 +1808,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1728
1808
  });
1729
1809
 
1730
1810
  // @ts-ignore
1731
- _this.aiEnableRequest = new _aiEnableRequest.default({}, {
1811
+ _this.aiEnableRequest = new _aiEnableRequest.default({
1812
+ locusUrl: _this.locusUrl
1813
+ }, {
1732
1814
  parent: _this.webex
1733
1815
  });
1734
1816
 
@@ -1767,6 +1849,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1767
1849
  var _this$members$findMem2;
1768
1850
  return (_this$members$findMem2 = _this.members.findMemberByCsi(csi)) === null || _this$members$findMem2 === void 0 ? void 0 : _this$members$findMem2.id;
1769
1851
  });
1852
+
1770
1853
  /**
1771
1854
  * Object containing helper classes for managing media requests for audio/video/screenshare (for multistream media connections)
1772
1855
  * All multistream media requests sent out for this meeting have to go through them.
@@ -1778,7 +1861,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1778
1861
  return;
1779
1862
  }
1780
1863
  _this.mediaProperties.webrtcMediaConnection.requestMedia(_internalMediaCore.MediaType.AudioMain, mediaRequests);
1781
- }, {
1864
+ }, _this.getIngressPayloadTypeCallback.bind(_this), {
1782
1865
  // @ts-ignore - config coming from registerPlugin
1783
1866
  degradationPreferences: _this.config.degradationPreferences,
1784
1867
  kind: 'audio',
@@ -1790,7 +1873,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1790
1873
  return;
1791
1874
  }
1792
1875
  _this.mediaProperties.webrtcMediaConnection.requestMedia(_internalMediaCore.MediaType.VideoMain, mediaRequests);
1793
- }, {
1876
+ }, _this.getIngressPayloadTypeCallback.bind(_this), {
1794
1877
  // @ts-ignore - config coming from registerPlugin
1795
1878
  degradationPreferences: _this.config.degradationPreferences,
1796
1879
  kind: 'video',
@@ -1802,7 +1885,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1802
1885
  return;
1803
1886
  }
1804
1887
  _this.mediaProperties.webrtcMediaConnection.requestMedia(_internalMediaCore.MediaType.AudioSlides, mediaRequests);
1805
- }, {
1888
+ }, _this.getIngressPayloadTypeCallback.bind(_this), {
1806
1889
  // @ts-ignore - config coming from registerPlugin
1807
1890
  degradationPreferences: _this.config.degradationPreferences,
1808
1891
  kind: 'audio',
@@ -1814,11 +1897,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1814
1897
  return;
1815
1898
  }
1816
1899
  _this.mediaProperties.webrtcMediaConnection.requestMedia(_internalMediaCore.MediaType.VideoSlides, mediaRequests);
1817
- }, {
1900
+ }, _this.getIngressPayloadTypeCallback.bind(_this), {
1818
1901
  // @ts-ignore - config coming from registerPlugin
1819
1902
  degradationPreferences: _this.config.degradationPreferences,
1820
1903
  kind: 'video',
1821
- trimRequestsToNumOfSources: false
1904
+ trimRequestsToNumOfSources: false,
1905
+ // @ts-ignore - config coming from registerPlugin
1906
+ enableAv1: _this.config.enableAv1SlidesSupport
1822
1907
  })
1823
1908
  };
1824
1909
  /**
@@ -2487,14 +2572,36 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2487
2572
  }
2488
2573
 
2489
2574
  /**
2490
- * Temporary func to return webex object,
2491
- * in order to access internal plugin metrics
2492
- * in the utils file.
2493
- * @internal
2494
- * @returns {object} webex object
2575
+ * Get the ingress payload type for a given media type and codec mime type
2576
+ * @param {MediaType} mediaType - The media type
2577
+ * @param {MediaCodecMimeType} codecMimeType - The codec mime type
2578
+ * @returns {number | undefined} - The ingress payload type
2579
+ * @private
2580
+ * @memberof Meeting
2495
2581
  */
2496
2582
  (0, _inherits2.default)(Meeting, _StatelessWebexPlugin);
2497
2583
  return (0, _createClass2.default)(Meeting, [{
2584
+ key: "getIngressPayloadTypeCallback",
2585
+ value: function getIngressPayloadTypeCallback(mediaType, codecMimeType) {
2586
+ if (this.isMultistream) {
2587
+ try {
2588
+ return this.mediaProperties.webrtcMediaConnection.getIngressPayloadType(mediaType, codecMimeType);
2589
+ } catch (error) {
2590
+ _loggerProxy.default.logger.info("Meeting:index#mediaRequestManager --> failed to get ingress payload type for mediaType=".concat(mediaType, ", codecMimeType=").concat(codecMimeType), error);
2591
+ return undefined;
2592
+ }
2593
+ }
2594
+ return undefined;
2595
+ }
2596
+
2597
+ /**
2598
+ * Temporary func to return webex object,
2599
+ * in order to access internal plugin metrics
2600
+ * in the utils file.
2601
+ * @internal
2602
+ * @returns {object} webex object
2603
+ */
2604
+ }, {
2498
2605
  key: "getWebexObject",
2499
2606
  value: function getWebexObject() {
2500
2607
  // @ts-ignore
@@ -3526,7 +3633,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3526
3633
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_RECORDING_UPDATED, function (_ref10) {
3527
3634
  var state = _ref10.state,
3528
3635
  modifiedBy = _ref10.modifiedBy,
3529
- lastModified = _ref10.lastModified;
3636
+ lastModified = _ref10.lastModified,
3637
+ modifiedByServiceAppName = _ref10.modifiedByServiceAppName,
3638
+ modifiedByServiceAppId = _ref10.modifiedByServiceAppId;
3530
3639
  var event;
3531
3640
  switch (state) {
3532
3641
  case _constants.RECORDING_STATE.RECORDING:
@@ -3550,7 +3659,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3550
3659
  _this12.recording = {
3551
3660
  state: state === _constants.RECORDING_STATE.RESUMED ? _constants.RECORDING_STATE.RECORDING : state,
3552
3661
  modifiedBy: modifiedBy,
3553
- lastModified: lastModified
3662
+ lastModified: lastModified,
3663
+ modifiedByServiceAppName: modifiedByServiceAppName,
3664
+ modifiedByServiceAppId: modifiedByServiceAppId
3554
3665
  };
3555
3666
  _triggerProxy.default.trigger(_this12, {
3556
3667
  file: 'meeting/index',
@@ -4087,6 +4198,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4087
4198
  _this14.breakouts.locusUrlUpdate(url);
4088
4199
  _this14.simultaneousInterpretation.locusUrlUpdate(url);
4089
4200
  _this14.annotation.locusUrlUpdate(url);
4201
+ _this14.aiEnableRequest.locusUrlUpdate(url);
4090
4202
  _this14.locusUrl = url;
4091
4203
  _this14.locusId = (_this14$locusUrl = _this14.locusUrl) === null || _this14$locusUrl === void 0 ? void 0 : _this14$locusUrl.split('/').pop();
4092
4204
  _this14.recordingController.setLocusUrl(_this14.locusUrl);
@@ -4325,44 +4437,34 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4325
4437
  });
4326
4438
  _this19.updateLLMConnection();
4327
4439
  });
4328
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST, /*#__PURE__*/function () {
4329
- var _ref37 = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee1(payload) {
4330
- var _this19$rtcMetrics;
4331
- return _regenerator.default.wrap(function (_context1) {
4332
- while (1) switch (_context1.prev = _context1.next) {
4333
- case 0:
4334
- _this19.stopKeepAlive();
4335
- if (payload) {
4336
- _triggerProxy.default.trigger(_this19, {
4337
- file: 'meeting/index',
4338
- function: 'setUpLocusInfoSelfListener'
4339
- }, _constants.EVENT_TRIGGERS.MEETING_SELF_GUEST_ADMITTED, {
4340
- payload: payload
4341
- });
4440
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST, function (payload) {
4441
+ var _this19$rtcMetrics;
4442
+ _this19.stopKeepAlive();
4443
+ if (payload) {
4444
+ _triggerProxy.default.trigger(_this19, {
4445
+ file: 'meeting/index',
4446
+ function: 'setUpLocusInfoSelfListener'
4447
+ }, _constants.EVENT_TRIGGERS.MEETING_SELF_GUEST_ADMITTED, {
4448
+ payload: payload
4449
+ });
4342
4450
 
4343
- // @ts-ignore
4344
- _this19.webex.internal.newMetrics.submitClientEvent({
4345
- name: 'client.lobby.exited',
4346
- options: {
4347
- meetingId: _this19.id
4348
- }
4349
- });
4350
- _metrics.default.sendBehavioralMetric(_constants2.default.GUEST_EXITED_LOBBY, {
4351
- correlation_id: _this19.correlationId
4352
- });
4353
- }
4354
- (_this19$rtcMetrics = _this19.rtcMetrics) === null || _this19$rtcMetrics === void 0 ? void 0 : _this19$rtcMetrics.sendNextMetrics();
4355
- _this19.updateLLMConnection();
4356
- case 1:
4357
- case "end":
4358
- return _context1.stop();
4451
+ // @ts-ignore
4452
+ _this19.webex.internal.newMetrics.submitClientEvent({
4453
+ name: 'client.lobby.exited',
4454
+ options: {
4455
+ meetingId: _this19.id
4359
4456
  }
4360
- }, _callee1);
4361
- }));
4362
- return function (_x9) {
4363
- return _ref37.apply(this, arguments);
4364
- };
4365
- }());
4457
+ });
4458
+ _metrics.default.sendBehavioralMetric(_constants2.default.GUEST_EXITED_LOBBY, {
4459
+ correlation_id: _this19.correlationId
4460
+ });
4461
+ }
4462
+ (_this19$rtcMetrics = _this19.rtcMetrics) === null || _this19$rtcMetrics === void 0 ? void 0 : _this19$rtcMetrics.sendNextMetrics();
4463
+ _this19.ensureDefaultDatachannelTokenAfterAdmit().catch(function (error) {
4464
+ _loggerProxy.default.logger.warn("Meeting:index#setUpLocusInfoSelfListener --> failed post-admit token prefetch flow: ".concat((error === null || error === void 0 ? void 0 : error.message) || String(error)));
4465
+ });
4466
+ _this19.updateLLMConnection();
4467
+ });
4366
4468
 
4367
4469
  // @ts-ignore - check if MEDIA_INACTIVITY exists
4368
4470
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEDIA_INACTIVITY, function () {
@@ -4482,49 +4584,49 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4482
4584
  }
4483
4585
  });
4484
4586
  this.locusInfo.on(_constants.EVENTS.DESTROY_MEETING, /*#__PURE__*/function () {
4485
- var _ref38 = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee10(payload) {
4587
+ var _ref37 = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee1(payload) {
4486
4588
  var _t9;
4487
- return _regenerator.default.wrap(function (_context10) {
4488
- while (1) switch (_context10.prev = _context10.next) {
4589
+ return _regenerator.default.wrap(function (_context1) {
4590
+ while (1) switch (_context1.prev = _context1.next) {
4489
4591
  case 0:
4490
4592
  if (!_this20.wirelessShare) {
4491
- _context10.next = 2;
4593
+ _context1.next = 2;
4492
4594
  break;
4493
4595
  }
4494
4596
  if (!_this20.mediaProperties.shareVideoStream) {
4495
- _context10.next = 1;
4597
+ _context1.next = 1;
4496
4598
  break;
4497
4599
  }
4498
- _context10.next = 1;
4600
+ _context1.next = 1;
4499
4601
  return _this20.setLocalShareVideoStream(undefined);
4500
4602
  case 1:
4501
4603
  if (!_this20.mediaProperties.shareAudioStream) {
4502
- _context10.next = 2;
4604
+ _context1.next = 2;
4503
4605
  break;
4504
4606
  }
4505
- _context10.next = 2;
4607
+ _context1.next = 2;
4506
4608
  return _this20.setLocalShareAudioStream(undefined);
4507
4609
  case 2:
4508
4610
  if (!payload.shouldLeave) {
4509
- _context10.next = 7;
4611
+ _context1.next = 7;
4510
4612
  break;
4511
4613
  }
4512
- _context10.prev = 3;
4513
- _context10.next = 4;
4614
+ _context1.prev = 3;
4615
+ _context1.next = 4;
4514
4616
  return _this20.leave({
4515
4617
  reason: payload.reason
4516
4618
  });
4517
4619
  case 4:
4518
4620
  _loggerProxy.default.logger.warn('Meeting:index#setUpLocusInfoMeetingListener --> DESTROY_MEETING. The meeting has been left, but has not been destroyed, you should see a later event for leave.');
4519
- _context10.next = 6;
4621
+ _context1.next = 6;
4520
4622
  break;
4521
4623
  case 5:
4522
- _context10.prev = 5;
4523
- _t9 = _context10["catch"](3);
4624
+ _context1.prev = 5;
4625
+ _t9 = _context1["catch"](3);
4524
4626
  // @ts-ignore
4525
4627
  _loggerProxy.default.logger.error("Meeting:index#setUpLocusInfoMeetingListener --> DESTROY_MEETING. Issue with leave for meeting, meeting still in collection: ".concat(_this20, ", error: ").concat(_t9));
4526
4628
  case 6:
4527
- _context10.next = 8;
4629
+ _context1.next = 8;
4528
4630
  break;
4529
4631
  case 7:
4530
4632
  _loggerProxy.default.logger.info('Meeting:index#setUpLocusInfoMeetingListener --> MEETING_REMOVED_REASON', payload.reason);
@@ -4538,12 +4640,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4538
4640
  });
4539
4641
  case 8:
4540
4642
  case "end":
4541
- return _context10.stop();
4643
+ return _context1.stop();
4542
4644
  }
4543
- }, _callee10, null, [[3, 5]]);
4645
+ }, _callee1, null, [[3, 5]]);
4544
4646
  }));
4545
- return function (_x0) {
4546
- return _ref38.apply(this, arguments);
4647
+ return function (_x9) {
4648
+ return _ref37.apply(this, arguments);
4547
4649
  };
4548
4650
  }());
4549
4651
  }
@@ -4661,31 +4763,31 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4661
4763
  }, {
4662
4764
  key: "beRightBack",
4663
4765
  value: (function () {
4664
- var _beRightBack = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee11(enabled) {
4766
+ var _beRightBack = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee10(enabled) {
4665
4767
  var _this22 = this;
4666
4768
  var errorMessage, error, _errorMessage, _error;
4667
- return _regenerator.default.wrap(function (_context11) {
4668
- while (1) switch (_context11.prev = _context11.next) {
4769
+ return _regenerator.default.wrap(function (_context10) {
4770
+ while (1) switch (_context10.prev = _context10.next) {
4669
4771
  case 0:
4670
4772
  if (this.isMultistream) {
4671
- _context11.next = 1;
4773
+ _context10.next = 1;
4672
4774
  break;
4673
4775
  }
4674
4776
  errorMessage = 'Meeting:index#beRightBack --> Not a multistream meeting';
4675
4777
  error = new Error(errorMessage);
4676
4778
  _loggerProxy.default.logger.error(error);
4677
- return _context11.abrupt("return", _promise.default.reject(error));
4779
+ return _context10.abrupt("return", _promise.default.reject(error));
4678
4780
  case 1:
4679
4781
  if (this.mediaProperties.webrtcMediaConnection) {
4680
- _context11.next = 2;
4782
+ _context10.next = 2;
4681
4783
  break;
4682
4784
  }
4683
4785
  _errorMessage = 'Meeting:index#beRightBack --> WebRTC media connection is not defined';
4684
4786
  _error = new Error(_errorMessage);
4685
4787
  _loggerProxy.default.logger.error(_error);
4686
- return _context11.abrupt("return", _promise.default.reject(_error));
4788
+ return _context10.abrupt("return", _promise.default.reject(_error));
4687
4789
  case 2:
4688
- return _context11.abrupt("return", this.brbState.enable(enabled, this.sendSlotManager).then(function () {
4790
+ return _context10.abrupt("return", this.brbState.enable(enabled, this.sendSlotManager).then(function () {
4689
4791
  if (_this22.audio && enabled) {
4690
4792
  // locus mutes the participant with brb enabled request,
4691
4793
  // so we need to explicitly update remote mute for correct logic flow
@@ -4696,11 +4798,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4696
4798
  }));
4697
4799
  case 3:
4698
4800
  case "end":
4699
- return _context11.stop();
4801
+ return _context10.stop();
4700
4802
  }
4701
- }, _callee11, this);
4803
+ }, _callee10, this);
4702
4804
  }));
4703
- function beRightBack(_x1) {
4805
+ function beRightBack(_x0) {
4704
4806
  return _beRightBack.apply(this, arguments);
4705
4807
  }
4706
4808
  return beRightBack;
@@ -5128,7 +5230,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5128
5230
  displayHints: this.userDisplayHints
5129
5231
  }),
5130
5232
  canAttendeeRequestAiAssistantEnabled: _util2.default.canAttendeeRequestAiAssistantEnabled(this.userDisplayHints, this.roles),
5131
- isAttendeeRequestAiAssistantDeclinedAll: _util2.default.attendeeRequestAiAssistantDeclinedAll(this.userDisplayHints)
5233
+ isAttendeeRequestAiAssistantDeclinedAll: _util2.default.attendeeRequestAiAssistantDeclinedAll(this.userDisplayHints),
5234
+ isAnonymizeDisplayNamesEnabled: _util2.default.isAnonymizeDisplayNamesEnabled(this.userDisplayHints)
5132
5235
  }) || changed;
5133
5236
  }
5134
5237
  if (changed) {
@@ -5179,6 +5282,51 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5179
5282
  this.sipUri = sipUri;
5180
5283
  }
5181
5284
 
5285
+ /**
5286
+ * After initial locus setup, refreshes destination with synced locus data and optionally
5287
+ * performs deferred meeting info fetch when initial locus was incomplete.
5288
+ * @param {LocusDTO} locus
5289
+ * @returns {void}
5290
+ */
5291
+ }, {
5292
+ key: "finalizeMeetingAfterInitialLocusSetup",
5293
+ value: (function () {
5294
+ var _finalizeMeetingAfterInitialLocusSetup = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee11(locus) {
5295
+ var _this$destination;
5296
+ var _t0;
5297
+ return _regenerator.default.wrap(function (_context11) {
5298
+ while (1) switch (_context11.prev = _context11.next) {
5299
+ case 0:
5300
+ if (locus && (this === null || this === void 0 ? void 0 : this.destinationType) === _constants.DESTINATION_TYPE.LOCUS_ID) {
5301
+ // destination is initialized from the initial locus snapshot in constructor,
5302
+ // so refresh it after locus sync to avoid stale partial hash-tree data.
5303
+ this.destination = locus;
5304
+ }
5305
+ if (!((!this.meetingInfo || (0, _lodash.isEmpty)(this.meetingInfo)) && (_this$destination = this.destination) !== null && _this$destination !== void 0 && _this$destination.info && !this.fetchMeetingInfoTimeoutId && !_util3.default.isOneOnOneCall(locus))) {
5306
+ _context11.next = 4;
5307
+ break;
5308
+ }
5309
+ _context11.prev = 1;
5310
+ _context11.next = 2;
5311
+ return this.fetchMeetingInfo({});
5312
+ case 2:
5313
+ _context11.next = 4;
5314
+ break;
5315
+ case 3:
5316
+ _context11.prev = 3;
5317
+ _t0 = _context11["catch"](1);
5318
+ _loggerProxy.default.logger.info("Meeting:index#finalizeMeetingAfterInitialLocusSetup --> deferred fetchMeetingInfo failed: ".concat(_t0.message));
5319
+ case 4:
5320
+ case "end":
5321
+ return _context11.stop();
5322
+ }
5323
+ }, _callee11, this, [[1, 3]]);
5324
+ }));
5325
+ function finalizeMeetingAfterInitialLocusSetup(_x1) {
5326
+ return _finalizeMeetingAfterInitialLocusSetup.apply(this, arguments);
5327
+ }
5328
+ return finalizeMeetingAfterInitialLocusSetup;
5329
+ }()
5182
5330
  /**
5183
5331
  * Set the locus info the class instance. Should be called with the parsed locus
5184
5332
  * we got in the join response.
@@ -5194,6 +5342,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5194
5342
  * @private
5195
5343
  * @memberof Meeting
5196
5344
  */
5345
+ )
5197
5346
  }, {
5198
5347
  key: "setLocus",
5199
5348
  value: function setLocus(data) {
@@ -5653,8 +5802,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5653
5802
  var _this25 = this;
5654
5803
  // Client will have a socket manager and handle reconnecting to mercury, when we reconnect to mercury
5655
5804
  // if the meeting has active peer connections, it should try to reconnect.
5656
- // @ts-ignore
5657
- this.webex.internal.mercury.on(_constants.ONLINE, function () {
5805
+ this.mercuryOnlineHandler = function () {
5658
5806
  _loggerProxy.default.logger.info('Meeting:index#setMercuryListener --> Web socket online');
5659
5807
 
5660
5808
  // Only send restore event when it was disconnected before and for connected later
@@ -5664,15 +5812,48 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5664
5812
  });
5665
5813
  }
5666
5814
  _this25.hasWebsocketConnected = true;
5667
- });
5668
-
5669
- // @ts-ignore
5670
- this.webex.internal.mercury.on(_constants.OFFLINE, function () {
5815
+ };
5816
+ this.mercuryOfflineHandler = function () {
5671
5817
  _loggerProxy.default.logger.error('Meeting:index#setMercuryListener --> Web socket offline');
5672
5818
  _metrics.default.sendBehavioralMetric(_constants2.default.MERCURY_CONNECTION_FAILURE, {
5673
5819
  correlation_id: _this25.correlationId
5674
5820
  });
5675
- });
5821
+ };
5822
+
5823
+ // @ts-ignore
5824
+ this.webex.internal.mercury.on(_constants.ONLINE, this.mercuryOnlineHandler);
5825
+ // @ts-ignore
5826
+ this.webex.internal.mercury.on(_constants.OFFLINE, this.mercuryOfflineHandler);
5827
+ }
5828
+
5829
+ /**
5830
+ * Removes this meeting's Mercury ONLINE/OFFLINE event listeners registered
5831
+ * by setMercuryListener(). Must be called before Locus /leave to avoid
5832
+ * unnecessary syncs/metrics triggered by events received while leaving
5833
+ * (per Locus team recommendation).
5834
+ *
5835
+ * Mercury is a process-wide singleton shared with other plugins, so we
5836
+ * pass the bound handler refs to .off() to avoid clearing every listener
5837
+ * for ONLINE/OFFLINE on the shared emitter.
5838
+ *
5839
+ * Idempotent: subsequent calls are no-ops because the handler refs are
5840
+ * cleared after detaching.
5841
+ * @private
5842
+ * @returns {void}
5843
+ */
5844
+ }, {
5845
+ key: "stopListeningForMercuryEvents",
5846
+ value: function stopListeningForMercuryEvents() {
5847
+ if (this.mercuryOnlineHandler) {
5848
+ // @ts-ignore
5849
+ this.webex.internal.mercury.off(_constants.ONLINE, this.mercuryOnlineHandler);
5850
+ this.mercuryOnlineHandler = undefined;
5851
+ }
5852
+ if (this.mercuryOfflineHandler) {
5853
+ // @ts-ignore
5854
+ this.webex.internal.mercury.off(_constants.OFFLINE, this.mercuryOfflineHandler);
5855
+ this.mercuryOfflineHandler = undefined;
5856
+ }
5676
5857
  }
5677
5858
 
5678
5859
  /**
@@ -6007,8 +6188,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6007
6188
  _error2,
6008
6189
  _error3,
6009
6190
  _args16 = arguments,
6010
- _t0,
6011
- _t1;
6191
+ _t1,
6192
+ _t10;
6012
6193
  return _regenerator.default.wrap(function (_context16) {
6013
6194
  while (1) switch (_context16.prev = _context16.next) {
6014
6195
  case 0:
@@ -6097,26 +6278,26 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6097
6278
  });
6098
6279
  case 10:
6099
6280
  _context16.prev = 10;
6100
- _t0 = _context16["catch"](2);
6101
- _loggerProxy.default.logger.error('Meeting:index#joinWithMedia --> ', _t0);
6281
+ _t1 = _context16["catch"](2);
6282
+ _loggerProxy.default.logger.error('Meeting:index#joinWithMedia --> ', _t1);
6102
6283
  this.roap.abortTurnDiscovery();
6103
6284
 
6104
6285
  // if this was the first attempt, let's do a retry
6105
6286
  shouldRetry = !isRetry;
6106
- if (_internalPluginMetrics.CallDiagnosticUtils.isSdpOfferCreationError(_t0) || _internalPluginMetrics.CallDiagnosticUtils.isWebrtcApiNotAvailableError(_t0)) {
6287
+ if (_internalPluginMetrics.CallDiagnosticUtils.isSdpOfferCreationError(_t1) || _internalPluginMetrics.CallDiagnosticUtils.isWebrtcApiNotAvailableError(_t1)) {
6107
6288
  // errors related to offer creation (for example missing H264 codec) will happen again no matter how many times we try,
6108
6289
  // so there is no point doing a retry
6109
6290
  shouldRetry = false;
6110
6291
  }
6111
- if (_internalPluginMetrics.CallDiagnosticUtils.isBrowserMediaError(_t0)) {
6292
+ if (_internalPluginMetrics.CallDiagnosticUtils.isBrowserMediaError(_t1)) {
6112
6293
  shouldRetry = false;
6113
6294
  // eslint-disable-next-line no-ex-assign
6114
- _t0 = (0, _lodash.merge)({
6295
+ _t1 = (0, _lodash.merge)({
6115
6296
  error: {
6116
6297
  body: {
6117
- errorCode: _internalPluginMetrics.CallDiagnosticUtils.getBrowserMediaErrorCode(_t0),
6118
- message: (_error2 = _t0) === null || _error2 === void 0 ? void 0 : _error2.message,
6119
- name: (_error3 = _t0) === null || _error3 === void 0 ? void 0 : _error3.name
6298
+ errorCode: _internalPluginMetrics.CallDiagnosticUtils.getBrowserMediaErrorCode(_t1),
6299
+ message: (_error2 = _t1) === null || _error2 === void 0 ? void 0 : _error2.message,
6300
+ name: (_error3 = _t1) === null || _error3 === void 0 ? void 0 : _error3.name
6120
6301
  }
6121
6302
  }
6122
6303
  });
@@ -6138,20 +6319,20 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6138
6319
  break;
6139
6320
  case 13:
6140
6321
  _context16.prev = 13;
6141
- _t1 = _context16["catch"](11);
6142
- _loggerProxy.default.logger.error('Meeting:index#joinWithMedia --> leave error', _t1);
6143
- leaveError = _t1;
6322
+ _t10 = _context16["catch"](11);
6323
+ _loggerProxy.default.logger.error('Meeting:index#joinWithMedia --> leave error', _t10);
6324
+ leaveError = _t10;
6144
6325
  case 14:
6145
6326
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_WITH_MEDIA_FAILURE, {
6146
6327
  correlation_id: this.correlationId,
6147
6328
  locus_id: (_this$locusUrl = this.locusUrl) === null || _this$locusUrl === void 0 ? void 0 : _this$locusUrl.split('/').pop(),
6148
6329
  // if join fails, we may end up with no locusUrl
6149
- reason: _t0.message,
6150
- stack: _t0.stack,
6330
+ reason: _t1.message,
6331
+ stack: _t1.stack,
6151
6332
  leaveErrorReason: (_leaveError = leaveError) === null || _leaveError === void 0 ? void 0 : _leaveError.message,
6152
6333
  isRetry: isRetry
6153
6334
  }, {
6154
- type: _t0.name
6335
+ type: _t1.name
6155
6336
  });
6156
6337
  if (!shouldRetry) {
6157
6338
  _context16.next = 15;
@@ -6166,7 +6347,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6166
6347
  isRetry: false,
6167
6348
  prevJoinResponse: undefined
6168
6349
  };
6169
- throw _t0;
6350
+ throw _t1;
6170
6351
  case 16:
6171
6352
  case "end":
6172
6353
  return _context16.stop();
@@ -6356,7 +6537,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6356
6537
  key: "startTranscription",
6357
6538
  value: (function () {
6358
6539
  var _startTranscription = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee18(options) {
6359
- var _t10;
6540
+ var _t11;
6360
6541
  return _regenerator.default.wrap(function (_context18) {
6361
6542
  while (1) switch (_context18.prev = _context18.next) {
6362
6543
  case 0:
@@ -6378,12 +6559,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6378
6559
  break;
6379
6560
  case 3:
6380
6561
  _context18.prev = 3;
6381
- _t10 = _context18["catch"](1);
6382
- _loggerProxy.default.logger.error("Meeting:index#startTranscription --> ".concat(_t10));
6562
+ _t11 = _context18["catch"](1);
6563
+ _loggerProxy.default.logger.error("Meeting:index#startTranscription --> ".concat(_t11));
6383
6564
  _metrics.default.sendBehavioralMetric(_constants2.default.RECEIVE_TRANSCRIPTION_FAILURE, {
6384
6565
  correlation_id: this.correlationId,
6385
- reason: _t10.message,
6386
- stack: _t10.stack
6566
+ reason: _t11.message,
6567
+ stack: _t11.stack
6387
6568
  });
6388
6569
  case 4:
6389
6570
  _context18.next = 6;
@@ -6402,6 +6583,28 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6402
6583
  }
6403
6584
  return startTranscription;
6404
6585
  }())
6586
+ }, {
6587
+ key: "isRelayEventRouteValid",
6588
+ value:
6589
+ /**
6590
+ * Verifies the relay event was delivered for the active LLM session binding.
6591
+ * @param {RelayEvent} event Event object coming from LLM Connection
6592
+ * @returns {boolean}
6593
+ */
6594
+ function isRelayEventRouteValid(event) {
6595
+ var _event$headers;
6596
+ var route = event === null || event === void 0 ? void 0 : (_event$headers = event.headers) === null || _event$headers === void 0 ? void 0 : _event$headers.route;
6597
+ if (!route) {
6598
+ return true;
6599
+ }
6600
+ var llm = this.webex.internal.llm;
6601
+ var isPracticeSession = llm.isConnected(_constants.LLM_PRACTICE_SESSION);
6602
+ var expectedBinding = isPracticeSession ? llm.getBinding(_constants.LLM_PRACTICE_SESSION) : llm.getBinding();
6603
+ if (!expectedBinding || route === expectedBinding) {
6604
+ return true;
6605
+ }
6606
+ return false;
6607
+ }
6405
6608
  }, {
6406
6609
  key: "stopTranscription",
6407
6610
  value:
@@ -6443,6 +6646,31 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6443
6646
  function: 'triggerStopReceivingTranscriptionEvent'
6444
6647
  }, _constants.EVENT_TRIGGERS.MEETING_STOPPED_RECEIVING_TRANSCRIPTION);
6445
6648
  }
6649
+
6650
+ /**
6651
+ * Restores LLM subchannel subscriptions after reconnect when captions are active.
6652
+ * @returns {void}
6653
+ */
6654
+ }, {
6655
+ key: "restoreLLMSubscriptionsIfNeeded",
6656
+ value: function restoreLLMSubscriptionsIfNeeded() {
6657
+ try {
6658
+ var _this$webex$internal$3, _this$webex$internal$4;
6659
+ // @ts-ignore
6660
+ var isCaptionBoxOn = (_this$webex$internal$3 = this.webex.internal.voicea) === null || _this$webex$internal$3 === void 0 ? void 0 : (_this$webex$internal$4 = _this$webex$internal$3.getIsCaptionBoxOn) === null || _this$webex$internal$4 === void 0 ? void 0 : _this$webex$internal$4.call(_this$webex$internal$3);
6661
+ if (!isCaptionBoxOn) {
6662
+ return;
6663
+ }
6664
+
6665
+ // @ts-ignore
6666
+ this.webex.internal.voicea.updateSubchannelSubscriptions({
6667
+ subscribe: ['transcription']
6668
+ });
6669
+ } catch (error) {
6670
+ var msg = (error === null || error === void 0 ? void 0 : error.message) || String(error);
6671
+ _loggerProxy.default.logger.warn("Meeting:index#restoreLLMSubscriptionsIfNeeded --> failed to restore subscriptions after LLM online: ".concat(msg));
6672
+ }
6673
+ }
6446
6674
  }, {
6447
6675
  key: "join",
6448
6676
  value: (
@@ -6471,7 +6699,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6471
6699
  _errorMessage3,
6472
6700
  _error5,
6473
6701
  _args19 = arguments,
6474
- _t11;
6702
+ _t12;
6475
6703
  return _regenerator.default.wrap(function (_context19) {
6476
6704
  while (1) switch (_context19.prev = _context19.next) {
6477
6705
  case 0:
@@ -6589,25 +6817,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6589
6817
  break;
6590
6818
  case 9:
6591
6819
  _context19.prev = 9;
6592
- _t11 = _context19["catch"](7);
6593
- _loggerProxy.default.logger.error('Meeting:index#join --> Failed to refresh permission token:', _t11);
6594
- if (!(_t11 instanceof _captchaError.default || _t11 instanceof _passwordError.default || _t11 instanceof _permission.default)) {
6820
+ _t12 = _context19["catch"](7);
6821
+ _loggerProxy.default.logger.error('Meeting:index#join --> Failed to refresh permission token:', _t12);
6822
+ if (!(_t12 instanceof _captchaError.default || _t12 instanceof _passwordError.default || _t12 instanceof _permission.default)) {
6595
6823
  _context19.next = 10;
6596
6824
  break;
6597
6825
  }
6598
- this.meetingFiniteStateMachine.fail(_t11);
6826
+ this.meetingFiniteStateMachine.fail(_t12);
6599
6827
 
6600
6828
  // Upload logs on refreshpermissionToken refresh Failure
6601
6829
  _triggerProxy.default.trigger(this, {
6602
6830
  file: 'meeting/index',
6603
6831
  function: 'join'
6604
6832
  }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, this);
6605
- joinFailed(_t11);
6833
+ joinFailed(_t12);
6606
6834
  this.deferJoin = undefined;
6607
6835
 
6608
6836
  // if refresh permission token requires captcha, password or permission, we are throwing the errors
6609
6837
  // and bubble it up to client
6610
- return _context19.abrupt("return", _promise.default.reject(_t11));
6838
+ return _context19.abrupt("return", _promise.default.reject(_t12));
6611
6839
  case 10:
6612
6840
  return _context19.abrupt("return", _util2.default.joinMeetingOptions(this, options).then(function (join) {
6613
6841
  _this34.meetingFiniteStateMachine.join();
@@ -6646,6 +6874,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6646
6874
  _this34.saveDataChannelToken(join);
6647
6875
  // @ts-ignore - config coming from registerPlugin
6648
6876
  if (_this34.config.enableAutomaticLLM) {
6877
+ // @ts-ignore
6878
+ _this34.webex.internal.llm.off('online', _this34.handleLLMOnline);
6649
6879
  // @ts-ignore
6650
6880
  _this34.webex.internal.llm.on('online', _this34.handleLLMOnline);
6651
6881
  _this34.updateLLMConnection().catch(function (error) {
@@ -6714,6 +6944,53 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6714
6944
  this.llmHealthCheckTimer = undefined;
6715
6945
  }
6716
6946
  }
6947
+
6948
+ /**
6949
+ * Removes LLM event listeners and clears the health check timer.
6950
+ * Must be called before Locus /leave to avoid unnecessary syncs triggered
6951
+ * by events received while leaving (per Locus team recommendation).
6952
+ * Idempotent: safe to call multiple times; .off() is a no-op when no
6953
+ * matching listener is registered.
6954
+ * @private
6955
+ * @returns {void}
6956
+ */
6957
+ }, {
6958
+ key: "stopListeningForLLMEvents",
6959
+ value: function stopListeningForLLMEvents() {
6960
+ // @ts-ignore - fix types
6961
+ this.webex.internal.llm.off('event:relay.event', this.processRelayEvent);
6962
+ // @ts-ignore - fix types
6963
+ this.webex.internal.llm.off(_constants.LOCUS_LLM_EVENT, this.processLocusLLMEvent);
6964
+ this.clearLLMHealthCheckTimer();
6965
+ }
6966
+
6967
+ /**
6968
+ * Stops listening on every event bus (LLM, Mercury, voicea/transcription,
6969
+ * annotation) that could otherwise deliver events to this meeting while
6970
+ * Locus is processing /leave or /end. Per the Locus team recommendation,
6971
+ * this must run before the Locus request is dispatched to avoid
6972
+ * unnecessary syncs triggered by in-flight events.
6973
+ *
6974
+ * Voicea (transcription) subscribes to llm 'event:relay.event' internally,
6975
+ * and the annotation plugin subscribes to both mercury and llm, so both
6976
+ * must be torn down alongside the direct LLM/Mercury listeners.
6977
+ *
6978
+ * Idempotent: safe to call multiple times; .off() is a no-op when no
6979
+ * matching listener is registered, and stopTranscription is guarded.
6980
+ * @private
6981
+ * @returns {void}
6982
+ */
6983
+ }, {
6984
+ key: "stopListeningForMeetingEvents",
6985
+ value: function stopListeningForMeetingEvents() {
6986
+ this.stopListeningForLLMEvents();
6987
+ this.stopListeningForMercuryEvents();
6988
+ if (this.transcription) {
6989
+ this.stopTranscription();
6990
+ this.transcription = undefined;
6991
+ }
6992
+ this.annotation.deregisterEvents();
6993
+ }
6717
6994
  }, {
6718
6995
  key: "clearDataChannelToken",
6719
6996
  value:
@@ -6749,51 +7026,143 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6749
7026
  }
6750
7027
  }
6751
7028
 
7029
+ /**
7030
+ * Ensures default-session data channel token exists after lobby admission.
7031
+ * Some lobby users do not receive a token until they are admitted.
7032
+ * @returns {Promise<boolean>} true when a new token is fetched and cached
7033
+ */
7034
+ }, {
7035
+ key: "ensureDefaultDatachannelTokenAfterAdmit",
7036
+ value: (function () {
7037
+ var _ensureDefaultDatachannelTokenAfterAdmit = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee20() {
7038
+ var _response$body, datachannelToken, isDataChannelTokenEnabled, response, fetchedDatachannelToken, msg, _t13;
7039
+ return _regenerator.default.wrap(function (_context20) {
7040
+ while (1) switch (_context20.prev = _context20.next) {
7041
+ case 0:
7042
+ _context20.prev = 0;
7043
+ // @ts-ignore
7044
+ datachannelToken = this.webex.internal.llm.getDatachannelToken(); // @ts-ignore
7045
+ _context20.next = 1;
7046
+ return this.webex.internal.llm.isDataChannelTokenEnabled();
7047
+ case 1:
7048
+ isDataChannelTokenEnabled = _context20.sent;
7049
+ if (!(!isDataChannelTokenEnabled || datachannelToken)) {
7050
+ _context20.next = 2;
7051
+ break;
7052
+ }
7053
+ return _context20.abrupt("return", false);
7054
+ case 2:
7055
+ _context20.next = 3;
7056
+ return this.meetingRequest.fetchDatachannelToken({
7057
+ locusUrl: this.locusUrl,
7058
+ requestingParticipantId: this.members.selfId,
7059
+ isPracticeSession: false
7060
+ });
7061
+ case 3:
7062
+ response = _context20.sent;
7063
+ fetchedDatachannelToken = response === null || response === void 0 ? void 0 : (_response$body = response.body) === null || _response$body === void 0 ? void 0 : _response$body.datachannelToken;
7064
+ if (fetchedDatachannelToken) {
7065
+ _context20.next = 4;
7066
+ break;
7067
+ }
7068
+ return _context20.abrupt("return", false);
7069
+ case 4:
7070
+ // @ts-ignore
7071
+ this.webex.internal.llm.setDatachannelToken(fetchedDatachannelToken, _internalPluginLlm.DataChannelTokenType.Default);
7072
+ return _context20.abrupt("return", true);
7073
+ case 5:
7074
+ _context20.prev = 5;
7075
+ _t13 = _context20["catch"](0);
7076
+ msg = (_t13 === null || _t13 === void 0 ? void 0 : _t13.message) || String(_t13);
7077
+ _loggerProxy.default.logger.warn("Meeting:index#ensureDefaultDatachannelTokenAfterAdmit --> failed to proactively fetch default data channel token after admit: ".concat(msg), {
7078
+ statusCode: _t13 === null || _t13 === void 0 ? void 0 : _t13.statusCode
7079
+ });
7080
+ return _context20.abrupt("return", false);
7081
+ case 6:
7082
+ case "end":
7083
+ return _context20.stop();
7084
+ }
7085
+ }, _callee20, this, [[0, 5]]);
7086
+ }));
7087
+ function ensureDefaultDatachannelTokenAfterAdmit() {
7088
+ return _ensureDefaultDatachannelTokenAfterAdmit.apply(this, arguments);
7089
+ }
7090
+ return ensureDefaultDatachannelTokenAfterAdmit;
7091
+ }()
6752
7092
  /**
6753
7093
  * Connects to low latency mercury and reconnects if the address has changed
6754
7094
  * It will also disconnect if called when the meeting has ended
6755
7095
  * @returns {Promise}
6756
7096
  */
7097
+ )
6757
7098
  }, {
6758
7099
  key: "updateLLMConnection",
6759
7100
  value: (function () {
6760
- var _updateLLMConnection = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee20() {
7101
+ var _updateLLMConnection = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee21() {
6761
7102
  var _this36 = this;
6762
- var _ref40, _ref40$url, url, _ref40$info, _ref40$info2, _ref40$info2$datachan, datachannelUrl, isJoined, datachannelToken, dataChannelUrl;
6763
- return _regenerator.default.wrap(function (_context20) {
6764
- while (1) switch (_context20.prev = _context20.next) {
7103
+ var _ref39, _ref39$url, url, _ref39$info, _ref39$info2, _ref39$info2$datachan, datachannelUrl, isJoined, datachannelToken, dataChannelUrl, currentOwner;
7104
+ return _regenerator.default.wrap(function (_context21) {
7105
+ while (1) switch (_context21.prev = _context21.next) {
6765
7106
  case 0:
6766
7107
  // @ts-ignore - Fix type
6767
- _ref40 = this.locusInfo || {}, _ref40$url = _ref40.url, url = _ref40$url === void 0 ? undefined : _ref40$url, _ref40$info = _ref40.info, _ref40$info2 = _ref40$info === void 0 ? {} : _ref40$info, _ref40$info2$datachan = _ref40$info2.datachannelUrl, datachannelUrl = _ref40$info2$datachan === void 0 ? undefined : _ref40$info2$datachan;
7108
+ _ref39 = this.locusInfo || {}, _ref39$url = _ref39.url, url = _ref39$url === void 0 ? undefined : _ref39$url, _ref39$info = _ref39.info, _ref39$info2 = _ref39$info === void 0 ? {} : _ref39$info, _ref39$info2$datachan = _ref39$info2.datachannelUrl, datachannelUrl = _ref39$info2$datachan === void 0 ? undefined : _ref39$info2$datachan;
6768
7109
  isJoined = this.isJoined(); // @ts-ignore
6769
7110
  datachannelToken = this.webex.internal.llm.getDatachannelToken(_internalPluginLlm.DataChannelTokenType.Default);
6770
- dataChannelUrl = datachannelUrl; // @ts-ignore - Fix type
7111
+ dataChannelUrl = datachannelUrl; // Ownership guard: when the default LLM session is already connected and
7112
+ // owned by a *different* Meeting instance, do not disconnect or reconfigure
7113
+ // it. Another meeting's `updateLLMConnection` must be ignored here to
7114
+ // avoid killing the socket it relies on. We only proceed to manage the
7115
+ // connection when this meeting is the current owner, or when no owner is
7116
+ // set yet (first claim).
7117
+ // @ts-ignore - Fix type
7118
+ currentOwner = this.webex.internal.llm.getOwnerMeetingId(); // @ts-ignore - Fix type
6771
7119
  if (!this.webex.internal.llm.isConnected()) {
6772
- _context20.next = 2;
7120
+ _context21.next = 3;
7121
+ break;
7122
+ }
7123
+ if (!(currentOwner && currentOwner !== this.id)) {
7124
+ _context21.next = 1;
6773
7125
  break;
6774
7126
  }
7127
+ // Another meeting owns the live LLM socket. We must not disconnect
7128
+ // or reconfigure it -- doing so would tear down a session the
7129
+ // owning meeting still relies on. Locus/datachannel URL mismatch is
7130
+ // expected here (each meeting has its own locus URL) and is NOT a
7131
+ // valid signal of staleness, so we never reclaim from this path.
7132
+ // The only safe reclaim mechanism is the `finally`-block owner-tag
7133
+ // release in `cleanupLLMConneciton`, which fires when this meeting
7134
+ // itself is being torn down.
7135
+ _loggerProxy.default.logger.info("Meeting:index#updateLLMConnection --> skipping; LLM owned by meeting ".concat(currentOwner, ", not ").concat(this.id));
7136
+ return _context21.abrupt("return", undefined);
7137
+ case 1:
6775
7138
  if (!(
6776
7139
  // @ts-ignore - Fix type
6777
7140
  url === this.webex.internal.llm.getLocusUrl() &&
6778
7141
  // @ts-ignore - Fix type
6779
7142
  dataChannelUrl === this.webex.internal.llm.getDatachannelUrl() && isJoined)) {
6780
- _context20.next = 1;
7143
+ _context21.next = 2;
6781
7144
  break;
6782
7145
  }
6783
- return _context20.abrupt("return", undefined);
6784
- case 1:
6785
- _context20.next = 2;
7146
+ return _context21.abrupt("return", undefined);
7147
+ case 2:
7148
+ _context21.next = 3;
6786
7149
  return this.cleanupLLMConneciton({
6787
7150
  removeOnlineListener: false
6788
7151
  });
6789
- case 2:
7152
+ case 3:
6790
7153
  if (isJoined) {
6791
- _context20.next = 3;
7154
+ _context21.next = 4;
6792
7155
  break;
6793
7156
  }
6794
- return _context20.abrupt("return", undefined);
6795
- case 3:
6796
- return _context20.abrupt("return", this.webex.internal.llm.registerAndConnect(url, dataChannelUrl, datachannelToken).then(function (registerAndConnectResult) {
7157
+ return _context21.abrupt("return", undefined);
7158
+ case 4:
7159
+ return _context21.abrupt("return", this.webex.internal.llm.registerAndConnect(url, dataChannelUrl, datachannelToken).then(function (registerAndConnectResult) {
7160
+ var _this36$webex$interna, _this36$webex$interna2;
7161
+ // Record ownership of the default LLM session for this meeting so
7162
+ // subsequent cross-meeting `updateLLMConnection` / `cleanupLLMConneciton`
7163
+ // calls can detect and skip work that doesn't belong to them.
7164
+ // @ts-ignore - Fix type
7165
+ (_this36$webex$interna = (_this36$webex$interna2 = _this36.webex.internal.llm).setOwnerMeetingId) === null || _this36$webex$interna === void 0 ? void 0 : _this36$webex$interna.call(_this36$webex$interna2, _this36.id);
6797
7166
  // @ts-ignore - Fix type
6798
7167
  _this36.webex.internal.llm.off('event:relay.event', _this36.processRelayEvent);
6799
7168
  // @ts-ignore - Fix type
@@ -6806,11 +7175,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6806
7175
  _this36.startLLMHealthCheckTimer();
6807
7176
  return _promise.default.resolve(registerAndConnectResult);
6808
7177
  }));
6809
- case 4:
7178
+ case 5:
6810
7179
  case "end":
6811
- return _context20.stop();
7180
+ return _context21.stop();
6812
7181
  }
6813
- }, _callee20, this);
7182
+ }, _callee21, this);
6814
7183
  }));
6815
7184
  function updateLLMConnection() {
6816
7185
  return _updateLLMConnection.apply(this, arguments);
@@ -6996,17 +7365,17 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6996
7365
  meetingId: this.id
6997
7366
  }
6998
7367
  });
6999
- this.locusInfo.once(_constants.LOCUSINFO.EVENTS.SELF_OBSERVING, /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee21() {
7000
- var mediaSettings, _t12;
7001
- return _regenerator.default.wrap(function (_context21) {
7002
- while (1) switch (_context21.prev = _context21.next) {
7368
+ this.locusInfo.once(_constants.LOCUSINFO.EVENTS.SELF_OBSERVING, /*#__PURE__*/(0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee22() {
7369
+ var mediaSettings, _t14;
7370
+ return _regenerator.default.wrap(function (_context22) {
7371
+ while (1) switch (_context22.prev = _context22.next) {
7003
7372
  case 0:
7004
- _context21.prev = 0;
7373
+ _context22.prev = 0;
7005
7374
  if (!(_this40.screenShareFloorState === ScreenShareFloorStatus.GRANTED)) {
7006
- _context21.next = 1;
7375
+ _context22.next = 1;
7007
7376
  break;
7008
7377
  }
7009
- _context21.next = 1;
7378
+ _context22.next = 1;
7010
7379
  return _this40.releaseScreenShareFloor();
7011
7380
  case 1:
7012
7381
  mediaSettings = {
@@ -7025,23 +7394,23 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7025
7394
  // 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
7026
7395
  // once the device answers we close the old connection and create new media server connection with only share enabled
7027
7396
  if (!_this40.statsAnalyzer) {
7028
- _context21.next = 2;
7397
+ _context22.next = 2;
7029
7398
  break;
7030
7399
  }
7031
- _context21.next = 2;
7400
+ _context22.next = 2;
7032
7401
  return _this40.statsAnalyzer.stopAnalyzer();
7033
7402
  case 2:
7034
- _context21.next = 3;
7403
+ _context22.next = 3;
7035
7404
  return _this40.closeRemoteStreams();
7036
7405
  case 3:
7037
- _context21.next = 4;
7406
+ _context22.next = 4;
7038
7407
  return _this40.closePeerConnections();
7039
7408
  case 4:
7040
7409
  _this40.cleanupLocalStreams();
7041
7410
  _this40.unsetRemoteStreams();
7042
7411
  _this40.unsetPeerConnections();
7043
7412
  _this40.reconnectionManager.cleanUp();
7044
- _context21.next = 5;
7413
+ _context22.next = 5;
7045
7414
  return _this40.addMedia({
7046
7415
  audioEnabled: false,
7047
7416
  videoEnabled: false,
@@ -7050,24 +7419,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7050
7419
  case 5:
7051
7420
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_SUCCESS);
7052
7421
  _this40.isMoveToInProgress = false;
7053
- _context21.next = 7;
7422
+ _context22.next = 7;
7054
7423
  break;
7055
7424
  case 6:
7056
- _context21.prev = 6;
7057
- _t12 = _context21["catch"](0);
7058
- _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', _t12);
7425
+ _context22.prev = 6;
7426
+ _t14 = _context22["catch"](0);
7427
+ _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', _t14);
7059
7428
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
7060
7429
  correlation_id: _this40.correlationId,
7061
7430
  locus_id: _this40.locusUrl.split('/').pop(),
7062
- reason: _t12.message,
7063
- stack: _t12.stack
7431
+ reason: _t14.message,
7432
+ stack: _t14.stack
7064
7433
  });
7065
7434
  _this40.isMoveToInProgress = false;
7066
7435
  case 7:
7067
7436
  case "end":
7068
- return _context21.stop();
7437
+ return _context22.stop();
7069
7438
  }
7070
- }, _callee21, null, [[0, 6]]);
7439
+ }, _callee22, null, [[0, 6]]);
7071
7440
  })));
7072
7441
  _loggerProxy.default.logger.info('Meeting:index#moveTo --> Initated moved to using resourceId', resourceId);
7073
7442
 
@@ -7155,10 +7524,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7155
7524
  }, {
7156
7525
  key: "createMediaConnection",
7157
7526
  value: (function () {
7158
- var _createMediaConnection = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee22(turnServerInfo, bundlePolicy) {
7527
+ var _createMediaConnection = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee23(turnServerInfo, bundlePolicy) {
7159
7528
  var mc, audioEnabled, videoEnabled, shareEnabled;
7160
- return _regenerator.default.wrap(function (_context22) {
7161
- while (1) switch (_context22.prev = _context22.next) {
7529
+ return _regenerator.default.wrap(function (_context23) {
7530
+ while (1) switch (_context23.prev = _context23.next) {
7162
7531
  case 0:
7163
7532
  this.rtcMetrics = this.isMultistream ?
7164
7533
  // @ts-ignore
@@ -7184,6 +7553,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7184
7553
  disableAudioMainDtx: this.config.experimental.disableAudioMainDtx,
7185
7554
  // @ts-ignore - config coming from registerPlugin
7186
7555
  enableAudioTwcc: this.config.enableAudioTwccForMultistream,
7556
+ // @ts-ignore - config coming from registerPlugin
7557
+ enableAv1SlidesSupport: this.config.enableAv1SlidesSupport,
7187
7558
  stopIceGatheringAfterFirstRelayCandidate:
7188
7559
  // @ts-ignore - config coming from registerPlugin
7189
7560
  this.config.stopIceGatheringAfterFirstRelayCandidate
@@ -7200,40 +7571,40 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7200
7571
 
7201
7572
  // publish the streams
7202
7573
  if (!this.mediaProperties.audioStream) {
7203
- _context22.next = 1;
7574
+ _context23.next = 1;
7204
7575
  break;
7205
7576
  }
7206
7577
  this.setSendNamedMediaGroup(_internalMediaCore.MediaType.AudioMain);
7207
- _context22.next = 1;
7578
+ _context23.next = 1;
7208
7579
  return this.publishStream(_internalMediaCore.MediaType.AudioMain, this.mediaProperties.audioStream);
7209
7580
  case 1:
7210
7581
  if (!this.mediaProperties.videoStream) {
7211
- _context22.next = 2;
7582
+ _context23.next = 2;
7212
7583
  break;
7213
7584
  }
7214
- _context22.next = 2;
7585
+ _context23.next = 2;
7215
7586
  return this.publishStream(_internalMediaCore.MediaType.VideoMain, this.mediaProperties.videoStream);
7216
7587
  case 2:
7217
7588
  if (!this.mediaProperties.shareVideoStream) {
7218
- _context22.next = 3;
7589
+ _context23.next = 3;
7219
7590
  break;
7220
7591
  }
7221
- _context22.next = 3;
7592
+ _context23.next = 3;
7222
7593
  return this.publishStream(_internalMediaCore.MediaType.VideoSlides, this.mediaProperties.shareVideoStream);
7223
7594
  case 3:
7224
7595
  if (!(this.isMultistream && this.mediaProperties.shareAudioStream)) {
7225
- _context22.next = 4;
7596
+ _context23.next = 4;
7226
7597
  break;
7227
7598
  }
7228
- _context22.next = 4;
7599
+ _context23.next = 4;
7229
7600
  return this.publishStream(_internalMediaCore.MediaType.AudioSlides, this.mediaProperties.shareAudioStream);
7230
7601
  case 4:
7231
- return _context22.abrupt("return", mc);
7602
+ return _context23.abrupt("return", mc);
7232
7603
  case 5:
7233
7604
  case "end":
7234
- return _context22.stop();
7605
+ return _context23.stop();
7235
7606
  }
7236
- }, _callee22, this);
7607
+ }, _callee23, this);
7237
7608
  }));
7238
7609
  function createMediaConnection(_x15, _x16) {
7239
7610
  return _createMediaConnection.apply(this, arguments);
@@ -7273,11 +7644,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7273
7644
  }, {
7274
7645
  key: "setUpLocalStreamReferences",
7275
7646
  value: (function () {
7276
- var _setUpLocalStreamReferences = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee23(localStreams) {
7647
+ var _setUpLocalStreamReferences = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee24(localStreams) {
7277
7648
  var _localStreams$microph, _localStreams$camera, _localStreams$screenS, _localStreams$screenS2, _localStreams$screenS3, _localStreams$screenS4, _localStreams$screenS5, _localStreams$screenS6;
7278
- var setUpStreamPromises, _t13;
7279
- return _regenerator.default.wrap(function (_context23) {
7280
- while (1) switch (_context23.prev = _context23.next) {
7649
+ var setUpStreamPromises, _t15;
7650
+ return _regenerator.default.wrap(function (_context24) {
7651
+ while (1) switch (_context24.prev = _context24.next) {
7281
7652
  case 0:
7282
7653
  setUpStreamPromises = [];
7283
7654
  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') {
@@ -7292,22 +7663,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7292
7663
  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') {
7293
7664
  setUpStreamPromises.push(this.setLocalShareAudioStream(localStreams.screenShare.audio));
7294
7665
  }
7295
- _context23.prev = 1;
7296
- _context23.next = 2;
7666
+ _context24.prev = 1;
7667
+ _context24.next = 2;
7297
7668
  return _promise.default.all(setUpStreamPromises);
7298
7669
  case 2:
7299
- _context23.next = 4;
7670
+ _context24.next = 4;
7300
7671
  break;
7301
7672
  case 3:
7302
- _context23.prev = 3;
7303
- _t13 = _context23["catch"](1);
7304
- _loggerProxy.default.logger.error("Meeting:index#addMedia():setUpLocalStreamReferences --> Error , ", _t13);
7305
- throw _t13;
7673
+ _context24.prev = 3;
7674
+ _t15 = _context24["catch"](1);
7675
+ _loggerProxy.default.logger.error("Meeting:index#addMedia():setUpLocalStreamReferences --> Error , ", _t15);
7676
+ throw _t15;
7306
7677
  case 4:
7307
7678
  case "end":
7308
- return _context23.stop();
7679
+ return _context24.stop();
7309
7680
  }
7310
- }, _callee23, this, [[1, 3]]);
7681
+ }, _callee24, this, [[1, 3]]);
7311
7682
  }));
7312
7683
  function setUpLocalStreamReferences(_x17) {
7313
7684
  return _setUpLocalStreamReferences.apply(this, arguments);
@@ -7324,72 +7695,72 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7324
7695
  }, {
7325
7696
  key: "waitForMediaConnectionConnected",
7326
7697
  value: (function () {
7327
- var _waitForMediaConnectionConnected = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee24() {
7328
- var iceConnected, _this$mediaProperties9, _this$mediaProperties0, _this$mediaProperties1, _this$mediaProperties10, _this$mediaProperties11, _this$mediaProperties12, _this$mediaProperties13, timedOutError, _t14, _t15, _t16, _t17, _t18, _t19, _t20, _t21, _t22, _t23, _t24, _t25, _t26, _t27, _t28;
7329
- return _regenerator.default.wrap(function (_context24) {
7330
- while (1) switch (_context24.prev = _context24.next) {
7698
+ var _waitForMediaConnectionConnected = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee25() {
7699
+ var iceConnected, _this$mediaProperties9, _this$mediaProperties0, _this$mediaProperties1, _this$mediaProperties10, _this$mediaProperties11, _this$mediaProperties12, _this$mediaProperties13, timedOutError, _t16, _t17, _t18, _t19, _t20, _t21, _t22, _t23, _t24, _t25, _t26, _t27, _t28, _t29, _t30;
7700
+ return _regenerator.default.wrap(function (_context25) {
7701
+ while (1) switch (_context25.prev = _context25.next) {
7331
7702
  case 0:
7332
- _context24.prev = 0;
7333
- _context24.next = 1;
7703
+ _context25.prev = 0;
7704
+ _context25.next = 1;
7334
7705
  return this.mediaProperties.waitForMediaConnectionConnected(this.correlationId);
7335
7706
  case 1:
7336
- _context24.next = 5;
7707
+ _context25.next = 5;
7337
7708
  break;
7338
7709
  case 2:
7339
- _context24.prev = 2;
7340
- _t14 = _context24["catch"](0);
7341
- iceConnected = _t14.iceConnected;
7710
+ _context25.prev = 2;
7711
+ _t16 = _context25["catch"](0);
7712
+ iceConnected = _t16.iceConnected;
7342
7713
  if (this.hasMediaConnectionConnectedAtLeastOnce) {
7343
- _context24.next = 4;
7714
+ _context25.next = 4;
7344
7715
  break;
7345
7716
  }
7346
- _t15 = this.webex.internal.newMetrics;
7347
- _t16 = !this.turnServerUsed;
7348
- _t17 = this.addMediaData.icePhaseCallback();
7349
- _t18 = this.webex.internal.newMetrics.callDiagnosticMetrics;
7350
- _t19 = _internalPluginMetrics.CallDiagnosticUtils;
7351
- _t20 = ((_this$mediaProperties9 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties9 === void 0 ? void 0 : (_this$mediaProperties0 = _this$mediaProperties9.multistreamConnection) === null || _this$mediaProperties0 === void 0 ? void 0 : (_this$mediaProperties1 = _this$mediaProperties0.pc) === null || _this$mediaProperties1 === void 0 ? void 0 : (_this$mediaProperties10 = _this$mediaProperties1.pc) === null || _this$mediaProperties10 === void 0 ? void 0 : _this$mediaProperties10.signalingState) || ((_this$mediaProperties11 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties11 === void 0 ? void 0 : (_this$mediaProperties12 = _this$mediaProperties11.mediaConnection) === null || _this$mediaProperties12 === void 0 ? void 0 : (_this$mediaProperties13 = _this$mediaProperties12.pc) === null || _this$mediaProperties13 === void 0 ? void 0 : _this$mediaProperties13.signalingState) || 'unknown';
7352
- _t21 = iceConnected;
7353
- _t22 = this.turnServerUsed;
7354
- _context24.next = 3;
7717
+ _t17 = this.webex.internal.newMetrics;
7718
+ _t18 = !this.turnServerUsed;
7719
+ _t19 = this.addMediaData.icePhaseCallback();
7720
+ _t20 = this.webex.internal.newMetrics.callDiagnosticMetrics;
7721
+ _t21 = _internalPluginMetrics.CallDiagnosticUtils;
7722
+ _t22 = ((_this$mediaProperties9 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties9 === void 0 ? void 0 : (_this$mediaProperties0 = _this$mediaProperties9.multistreamConnection) === null || _this$mediaProperties0 === void 0 ? void 0 : (_this$mediaProperties1 = _this$mediaProperties0.pc) === null || _this$mediaProperties1 === void 0 ? void 0 : (_this$mediaProperties10 = _this$mediaProperties1.pc) === null || _this$mediaProperties10 === void 0 ? void 0 : _this$mediaProperties10.signalingState) || ((_this$mediaProperties11 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties11 === void 0 ? void 0 : (_this$mediaProperties12 = _this$mediaProperties11.mediaConnection) === null || _this$mediaProperties12 === void 0 ? void 0 : (_this$mediaProperties13 = _this$mediaProperties12.pc) === null || _this$mediaProperties13 === void 0 ? void 0 : _this$mediaProperties13.signalingState) || 'unknown';
7723
+ _t23 = iceConnected;
7724
+ _t24 = this.turnServerUsed;
7725
+ _context25.next = 3;
7355
7726
  return this.webex.meetings.reachability.isWebexMediaBackendUnreachable().catch(function () {
7356
7727
  return false;
7357
7728
  });
7358
7729
  case 3:
7359
- _t23 = _context24.sent;
7360
- _t24 = _t19.generateClientErrorCodeForIceFailure.call(_t19, {
7361
- signalingState: _t20,
7362
- iceConnected: _t21,
7363
- turnServerUsed: _t22,
7364
- unreachable: _t23
7730
+ _t25 = _context25.sent;
7731
+ _t26 = _t21.generateClientErrorCodeForIceFailure.call(_t21, {
7732
+ signalingState: _t22,
7733
+ iceConnected: _t23,
7734
+ turnServerUsed: _t24,
7735
+ unreachable: _t25
7365
7736
  });
7366
- _t25 = _t18.getErrorPayloadForClientErrorCode.call(_t18, {
7367
- clientErrorCode: _t24
7737
+ _t27 = _t20.getErrorPayloadForClientErrorCode.call(_t20, {
7738
+ clientErrorCode: _t26
7368
7739
  });
7369
- _t26 = [_t25];
7370
- _t27 = {
7371
- canProceed: _t16,
7372
- icePhase: _t17,
7373
- errors: _t26
7740
+ _t28 = [_t27];
7741
+ _t29 = {
7742
+ canProceed: _t18,
7743
+ icePhase: _t19,
7744
+ errors: _t28
7374
7745
  };
7375
- _t28 = {
7746
+ _t30 = {
7376
7747
  meetingId: this.id,
7377
- rawError: _t14
7748
+ rawError: _t16
7378
7749
  };
7379
- _t15.submitClientEvent.call(_t15, {
7750
+ _t17.submitClientEvent.call(_t17, {
7380
7751
  name: 'client.ice.end',
7381
- payload: _t27,
7382
- options: _t28
7752
+ payload: _t29,
7753
+ options: _t30
7383
7754
  });
7384
7755
  case 4:
7385
7756
  timedOutError = new Error("Timed out waiting for media connection to be connected, correlationId=".concat(this.correlationId));
7386
- timedOutError.cause = _t14;
7757
+ timedOutError.cause = _t16;
7387
7758
  throw timedOutError;
7388
7759
  case 5:
7389
7760
  case "end":
7390
- return _context24.stop();
7761
+ return _context25.stop();
7391
7762
  }
7392
- }, _callee24, this, [[0, 2]]);
7763
+ }, _callee25, this, [[0, 2]]);
7393
7764
  }));
7394
7765
  function waitForMediaConnectionConnected() {
7395
7766
  return _waitForMediaConnectionConnected.apply(this, arguments);
@@ -7456,19 +7827,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7456
7827
  }, {
7457
7828
  key: "waitForRemoteSDPAnswer",
7458
7829
  value: (function () {
7459
- var _waitForRemoteSDPAnswer = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee25() {
7830
+ var _waitForRemoteSDPAnswer = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee26() {
7460
7831
  var _this44 = this;
7461
7832
  var LOG_HEADER, deferSDPAnswer;
7462
- return _regenerator.default.wrap(function (_context25) {
7463
- while (1) switch (_context25.prev = _context25.next) {
7833
+ return _regenerator.default.wrap(function (_context26) {
7834
+ while (1) switch (_context26.prev = _context26.next) {
7464
7835
  case 0:
7465
7836
  LOG_HEADER = 'Meeting:index#addMedia():waitForRemoteSDPAnswer -->';
7466
7837
  if (this.deferSDPAnswer) {
7467
- _context25.next = 1;
7838
+ _context26.next = 1;
7468
7839
  break;
7469
7840
  }
7470
7841
  _loggerProxy.default.logger.warn("".concat(LOG_HEADER, " offer not created yet"));
7471
- return _context25.abrupt("return", _promise.default.reject(new Error('waitForRemoteSDPAnswer() called before local sdp offer created')));
7842
+ return _context26.abrupt("return", _promise.default.reject(new Error('waitForRemoteSDPAnswer() called before local sdp offer created')));
7472
7843
  case 1:
7473
7844
  deferSDPAnswer = this.deferSDPAnswer;
7474
7845
  this.sdpResponseTimer = setTimeout(function () {
@@ -7494,12 +7865,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7494
7865
  deferSDPAnswer.reject(error);
7495
7866
  }, _constants.ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT);
7496
7867
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " waiting for REMOTE SDP ANSWER..."));
7497
- return _context25.abrupt("return", deferSDPAnswer.promise);
7868
+ return _context26.abrupt("return", deferSDPAnswer.promise);
7498
7869
  case 2:
7499
7870
  case "end":
7500
- return _context25.stop();
7871
+ return _context26.stop();
7501
7872
  }
7502
- }, _callee25, this);
7873
+ }, _callee26, this);
7503
7874
  }));
7504
7875
  function waitForRemoteSDPAnswer() {
7505
7876
  return _waitForRemoteSDPAnswer.apply(this, arguments);
@@ -7518,28 +7889,28 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7518
7889
  }, {
7519
7890
  key: "retryEstablishMediaConnectionWithForcedTurnDiscovery",
7520
7891
  value: (function () {
7521
- var _retryEstablishMediaConnectionWithForcedTurnDiscovery = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee26(remoteMediaManagerConfig, bundlePolicy) {
7522
- var LOG_HEADER, _t29;
7523
- return _regenerator.default.wrap(function (_context26) {
7524
- while (1) switch (_context26.prev = _context26.next) {
7892
+ var _retryEstablishMediaConnectionWithForcedTurnDiscovery = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee27(remoteMediaManagerConfig, bundlePolicy) {
7893
+ var LOG_HEADER, _t31;
7894
+ return _regenerator.default.wrap(function (_context27) {
7895
+ while (1) switch (_context27.prev = _context27.next) {
7525
7896
  case 0:
7526
7897
  LOG_HEADER = 'Meeting:index#addMedia():retryEstablishMediaConnectionWithForcedTurnDiscovery -->';
7527
- _context26.prev = 1;
7528
- _context26.next = 2;
7898
+ _context27.prev = 1;
7899
+ _context27.next = 2;
7529
7900
  return this.establishMediaConnection(remoteMediaManagerConfig, bundlePolicy, true);
7530
7901
  case 2:
7531
- _context26.next = 4;
7902
+ _context27.next = 4;
7532
7903
  break;
7533
7904
  case 3:
7534
- _context26.prev = 3;
7535
- _t29 = _context26["catch"](1);
7536
- _loggerProxy.default.logger.error("".concat(LOG_HEADER, " retry with TURN-TLS failed, media connection unable to connect, "), _t29);
7537
- throw _t29;
7905
+ _context27.prev = 3;
7906
+ _t31 = _context27["catch"](1);
7907
+ _loggerProxy.default.logger.error("".concat(LOG_HEADER, " retry with TURN-TLS failed, media connection unable to connect, "), _t31);
7908
+ throw _t31;
7538
7909
  case 4:
7539
7910
  case "end":
7540
- return _context26.stop();
7911
+ return _context27.stop();
7541
7912
  }
7542
- }, _callee26, this, [[1, 3]]);
7913
+ }, _callee27, this, [[1, 3]]);
7543
7914
  }));
7544
7915
  function retryEstablishMediaConnectionWithForcedTurnDiscovery(_x18, _x19) {
7545
7916
  return _retryEstablishMediaConnectionWithForcedTurnDiscovery.apply(this, arguments);
@@ -7559,14 +7930,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7559
7930
  }, {
7560
7931
  key: "retryWithForcedTurnDiscovery",
7561
7932
  value: (function () {
7562
- var _retryWithForcedTurnDiscovery = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee27(remoteMediaManagerConfig, bundlePolicy) {
7933
+ var _retryWithForcedTurnDiscovery = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee28(remoteMediaManagerConfig, bundlePolicy) {
7563
7934
  var LOG_HEADER;
7564
- return _regenerator.default.wrap(function (_context27) {
7565
- while (1) switch (_context27.prev = _context27.next) {
7935
+ return _regenerator.default.wrap(function (_context28) {
7936
+ while (1) switch (_context28.prev = _context28.next) {
7566
7937
  case 0:
7567
7938
  this.addMediaData.retriedWithTurnServer = true;
7568
7939
  LOG_HEADER = 'Meeting:index#addMedia():retryWithForcedTurnDiscovery -->';
7569
- _context27.next = 1;
7940
+ _context28.next = 1;
7570
7941
  return this.cleanUpBeforeRetryWithTurnServer();
7571
7942
  case 1:
7572
7943
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_RETRY, {
@@ -7576,22 +7947,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7576
7947
  reason: 'forcingTurnTls'
7577
7948
  });
7578
7949
  if (!(this.state === _constants.MEETING_STATE.STATES.LEFT)) {
7579
- _context27.next = 2;
7950
+ _context28.next = 2;
7580
7951
  break;
7581
7952
  }
7582
7953
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " meeting state was LEFT after first attempt to establish media connection. Attempting to rejoin. "));
7583
- _context27.next = 2;
7954
+ _context28.next = 2;
7584
7955
  return this.join({
7585
7956
  rejoin: true
7586
7957
  });
7587
7958
  case 2:
7588
- _context27.next = 3;
7959
+ _context28.next = 3;
7589
7960
  return this.retryEstablishMediaConnectionWithForcedTurnDiscovery(remoteMediaManagerConfig, bundlePolicy);
7590
7961
  case 3:
7591
7962
  case "end":
7592
- return _context27.stop();
7963
+ return _context28.stop();
7593
7964
  }
7594
- }, _callee27, this);
7965
+ }, _callee28, this);
7595
7966
  }));
7596
7967
  function retryWithForcedTurnDiscovery(_x20, _x21) {
7597
7968
  return _retryWithForcedTurnDiscovery.apply(this, arguments);
@@ -7613,30 +7984,30 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7613
7984
  }, {
7614
7985
  key: "handleWaitForMediaConnectionConnectedError",
7615
7986
  value: (function () {
7616
- var _handleWaitForMediaConnectionConnectedError = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee28(error, remoteMediaManagerConfig, bundlePolicy) {
7987
+ var _handleWaitForMediaConnectionConnectedError = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee29(error, remoteMediaManagerConfig, bundlePolicy) {
7617
7988
  var LOG_HEADER;
7618
- return _regenerator.default.wrap(function (_context28) {
7619
- while (1) switch (_context28.prev = _context28.next) {
7989
+ return _regenerator.default.wrap(function (_context29) {
7990
+ while (1) switch (_context29.prev = _context29.next) {
7620
7991
  case 0:
7621
7992
  LOG_HEADER = 'Meeting:index#addMedia():handleWaitForMediaConnectionConnectedError -->'; // @ts-ignore - config coming from registerPlugin
7622
7993
  if (this.turnServerUsed) {
7623
- _context28.next = 2;
7994
+ _context29.next = 2;
7624
7995
  break;
7625
7996
  }
7626
7997
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " error waiting for media to connect on UDP, TCP, retrying using TURN-TLS, "), error);
7627
- _context28.next = 1;
7998
+ _context29.next = 1;
7628
7999
  return this.retryWithForcedTurnDiscovery(remoteMediaManagerConfig, bundlePolicy);
7629
8000
  case 1:
7630
- _context28.next = 3;
8001
+ _context29.next = 3;
7631
8002
  break;
7632
8003
  case 2:
7633
8004
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " error waiting for media to connect using UDP, TCP and TURN-TLS"), error);
7634
8005
  throw new _webexErrors.AddMediaFailed(error);
7635
8006
  case 3:
7636
8007
  case "end":
7637
- return _context28.stop();
8008
+ return _context29.stop();
7638
8009
  }
7639
- }, _callee28, this);
8010
+ }, _callee29, this);
7640
8011
  }));
7641
8012
  function handleWaitForMediaConnectionConnectedError(_x22, _x23, _x24) {
7642
8013
  return _handleWaitForMediaConnectionConnectedError.apply(this, arguments);
@@ -7654,20 +8025,20 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7654
8025
  }, {
7655
8026
  key: "doTurnDiscovery",
7656
8027
  value: (function () {
7657
- var _doTurnDiscovery = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee29(isReconnecting, isForced) {
8028
+ var _doTurnDiscovery = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee30(isReconnecting, isForced) {
7658
8029
  var cdl, turnDiscoveryResult;
7659
- return _regenerator.default.wrap(function (_context29) {
7660
- while (1) switch (_context29.prev = _context29.next) {
8030
+ return _regenerator.default.wrap(function (_context30) {
8031
+ while (1) switch (_context30.prev = _context30.next) {
7661
8032
  case 0:
7662
8033
  // @ts-ignore
7663
8034
  cdl = this.webex.internal.newMetrics.callDiagnosticLatencies; // @ts-ignore
7664
8035
  this.webex.internal.newMetrics.submitInternalEvent({
7665
8036
  name: 'internal.client.add-media.turn-discovery.start'
7666
8037
  });
7667
- _context29.next = 1;
8038
+ _context30.next = 1;
7668
8039
  return this.roap.doTurnDiscovery(this, isReconnecting, isForced);
7669
8040
  case 1:
7670
- turnDiscoveryResult = _context29.sent;
8041
+ turnDiscoveryResult = _context30.sent;
7671
8042
  this.turnDiscoverySkippedReason = turnDiscoveryResult === null || turnDiscoveryResult === void 0 ? void 0 : turnDiscoveryResult.turnDiscoverySkippedReason;
7672
8043
  this.turnServerUsed = !this.turnDiscoverySkippedReason;
7673
8044
 
@@ -7683,12 +8054,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7683
8054
  retriedWithTurnServer: this.addMediaData.retriedWithTurnServer
7684
8055
  });
7685
8056
  }
7686
- return _context29.abrupt("return", turnDiscoveryResult);
8057
+ return _context30.abrupt("return", turnDiscoveryResult);
7687
8058
  case 2:
7688
8059
  case "end":
7689
- return _context29.stop();
8060
+ return _context30.stop();
7690
8061
  }
7691
- }, _callee29, this);
8062
+ }, _callee30, this);
7692
8063
  }));
7693
8064
  function doTurnDiscovery(_x25, _x26) {
7694
8065
  return _doTurnDiscovery.apply(this, arguments);
@@ -7709,35 +8080,35 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7709
8080
  }, {
7710
8081
  key: "establishMediaConnection",
7711
8082
  value: (function () {
7712
- var _establishMediaConnection = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee30(remoteMediaManagerConfig, bundlePolicy, isForced, turnServerInfo) {
8083
+ var _establishMediaConnection = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee31(remoteMediaManagerConfig, bundlePolicy, isForced, turnServerInfo) {
7713
8084
  var _this$locusMediaReque;
7714
- var LOG_HEADER, isReconnecting, _yield$this$doTurnDis, mc, _t30, _t31;
7715
- return _regenerator.default.wrap(function (_context30) {
7716
- while (1) switch (_context30.prev = _context30.next) {
8085
+ var LOG_HEADER, isReconnecting, _yield$this$doTurnDis, mc, _t32, _t33;
8086
+ return _regenerator.default.wrap(function (_context31) {
8087
+ while (1) switch (_context31.prev = _context31.next) {
7717
8088
  case 0:
7718
8089
  LOG_HEADER = 'Meeting:index#addMedia():establishMediaConnection -->';
7719
8090
  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
7720
8091
  if (this.isMoveToInProgress && this.turnServerUsed) {
7721
8092
  isForced = true;
7722
8093
  }
7723
- _context30.prev = 1;
8094
+ _context31.prev = 1;
7724
8095
  if (turnServerInfo) {
7725
- _context30.next = 3;
8096
+ _context31.next = 3;
7726
8097
  break;
7727
8098
  }
7728
- _context30.next = 2;
8099
+ _context31.next = 2;
7729
8100
  return this.doTurnDiscovery(isReconnecting, isForced);
7730
8101
  case 2:
7731
- _yield$this$doTurnDis = _context30.sent;
8102
+ _yield$this$doTurnDis = _context31.sent;
7732
8103
  turnServerInfo = _yield$this$doTurnDis.turnServerInfo;
7733
8104
  case 3:
7734
- _context30.next = 4;
8105
+ _context31.next = 4;
7735
8106
  return this.createMediaConnection(turnServerInfo, bundlePolicy);
7736
8107
  case 4:
7737
- mc = _context30.sent;
8108
+ mc = _context31.sent;
7738
8109
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " media connection created this.isMultistream=").concat(this.isMultistream));
7739
8110
  if (!this.isMultistream) {
7740
- _context30.next = 5;
8111
+ _context31.next = 5;
7741
8112
  break;
7742
8113
  }
7743
8114
  this.remoteMediaManager = new _remoteMediaManager.RemoteMediaManager(this.receiveSlotManager, this.mediaRequestManagers, remoteMediaManagerConfig);
@@ -7745,40 +8116,40 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7745
8116
  this.forwardEvent(this.remoteMediaManager, _remoteMediaManager.Event.InterpretationAudioCreated, _constants.EVENT_TRIGGERS.REMOTE_MEDIA_INTERPRETATION_AUDIO_CREATED);
7746
8117
  this.forwardEvent(this.remoteMediaManager, _remoteMediaManager.Event.ScreenShareAudioCreated, _constants.EVENT_TRIGGERS.REMOTE_MEDIA_SCREEN_SHARE_AUDIO_CREATED);
7747
8118
  this.forwardEvent(this.remoteMediaManager, _remoteMediaManager.Event.VideoLayoutChanged, _constants.EVENT_TRIGGERS.REMOTE_MEDIA_VIDEO_LAYOUT_CHANGED);
7748
- _context30.next = 5;
8119
+ _context31.next = 5;
7749
8120
  return this.remoteMediaManager.start();
7750
8121
  case 5:
7751
- _context30.next = 6;
8122
+ _context31.next = 6;
7752
8123
  return mc.initiateOffer();
7753
8124
  case 6:
7754
- _context30.next = 7;
8125
+ _context31.next = 7;
7755
8126
  return this.waitForRemoteSDPAnswer();
7756
8127
  case 7:
7757
8128
  this.handleMediaLogging(this.mediaProperties);
7758
- _context30.next = 9;
8129
+ _context31.next = 9;
7759
8130
  break;
7760
8131
  case 8:
7761
- _context30.prev = 8;
7762
- _t30 = _context30["catch"](1);
7763
- _loggerProxy.default.logger.error("".concat(LOG_HEADER, " error establishing media connection, "), _t30);
7764
- throw _t30;
8132
+ _context31.prev = 8;
8133
+ _t32 = _context31["catch"](1);
8134
+ _loggerProxy.default.logger.error("".concat(LOG_HEADER, " error establishing media connection, "), _t32);
8135
+ throw _t32;
7765
8136
  case 9:
7766
- _context30.prev = 9;
7767
- _context30.next = 10;
8137
+ _context31.prev = 9;
8138
+ _context31.next = 10;
7768
8139
  return this.waitForMediaConnectionConnected();
7769
8140
  case 10:
7770
- _context30.next = 12;
8141
+ _context31.next = 12;
7771
8142
  break;
7772
8143
  case 11:
7773
- _context30.prev = 11;
7774
- _t31 = _context30["catch"](9);
7775
- _context30.next = 12;
7776
- return this.handleWaitForMediaConnectionConnectedError(_t31, remoteMediaManagerConfig, bundlePolicy);
8144
+ _context31.prev = 11;
8145
+ _t33 = _context31["catch"](9);
8146
+ _context31.next = 12;
8147
+ return this.handleWaitForMediaConnectionConnectedError(_t33, remoteMediaManagerConfig, bundlePolicy);
7777
8148
  case 12:
7778
8149
  case "end":
7779
- return _context30.stop();
8150
+ return _context31.stop();
7780
8151
  }
7781
- }, _callee30, this, [[1, 8], [9, 11]]);
8152
+ }, _callee31, this, [[1, 8], [9, 11]]);
7782
8153
  }));
7783
8154
  function establishMediaConnection(_x27, _x28, _x29, _x30) {
7784
8155
  return _establishMediaConnection.apply(this, arguments);
@@ -7795,16 +8166,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7795
8166
  }, {
7796
8167
  key: "cleanUpOnAddMediaFailure",
7797
8168
  value: (function () {
7798
- var _cleanUpOnAddMediaFailure = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee31() {
8169
+ var _cleanUpOnAddMediaFailure = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee32() {
7799
8170
  var _this$networkQualityM, _this$statsMonitor;
7800
- return _regenerator.default.wrap(function (_context31) {
7801
- while (1) switch (_context31.prev = _context31.next) {
8171
+ return _regenerator.default.wrap(function (_context32) {
8172
+ while (1) switch (_context32.prev = _context32.next) {
7802
8173
  case 0:
7803
8174
  if (!this.statsAnalyzer) {
7804
- _context31.next = 1;
8175
+ _context32.next = 1;
7805
8176
  break;
7806
8177
  }
7807
- _context31.next = 1;
8178
+ _context32.next = 1;
7808
8179
  return this.statsAnalyzer.stopAnalyzer();
7809
8180
  case 1:
7810
8181
  this.statsAnalyzer = null;
@@ -7815,7 +8186,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7815
8186
 
7816
8187
  // when media fails, we want to upload a webrtc dump to see whats going on
7817
8188
  // this function is async, but returns once the stats have been gathered
7818
- _context31.next = 2;
8189
+ _context32.next = 2;
7819
8190
  return this.forceSendStatsReport({
7820
8191
  callFrom: 'addMedia'
7821
8192
  });
@@ -7826,9 +8197,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7826
8197
  }
7827
8198
  case 3:
7828
8199
  case "end":
7829
- return _context31.stop();
8200
+ return _context32.stop();
7830
8201
  }
7831
- }, _callee31, this);
8202
+ }, _callee32, this);
7832
8203
  }));
7833
8204
  function cleanUpOnAddMediaFailure() {
7834
8205
  return _cleanUpOnAddMediaFailure.apply(this, arguments);
@@ -7846,16 +8217,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7846
8217
  }, {
7847
8218
  key: "downgradeFromMultistreamToTranscoded",
7848
8219
  value: (function () {
7849
- var _downgradeFromMultistreamToTranscoded = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee32() {
8220
+ var _downgradeFromMultistreamToTranscoded = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee33() {
7850
8221
  var _this$networkQualityM2, _this$statsMonitor2, _this$locusMediaReque2;
7851
- return _regenerator.default.wrap(function (_context32) {
7852
- while (1) switch (_context32.prev = _context32.next) {
8222
+ return _regenerator.default.wrap(function (_context33) {
8223
+ while (1) switch (_context33.prev = _context33.next) {
7853
8224
  case 0:
7854
8225
  if (!this.statsAnalyzer) {
7855
- _context32.next = 1;
8226
+ _context33.next = 1;
7856
8227
  break;
7857
8228
  }
7858
- _context32.next = 1;
8229
+ _context33.next = 1;
7859
8230
  return this.statsAnalyzer.stopAnalyzer();
7860
8231
  case 1:
7861
8232
  this.statsAnalyzer = null;
@@ -7873,9 +8244,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7873
8244
  this.createStatsAnalyzer();
7874
8245
  case 2:
7875
8246
  case "end":
7876
- return _context32.stop();
8247
+ return _context33.stop();
7877
8248
  }
7878
- }, _callee32, this);
8249
+ }, _callee33, this);
7879
8250
  }));
7880
8251
  function downgradeFromMultistreamToTranscoded() {
7881
8252
  return _downgradeFromMultistreamToTranscoded.apply(this, arguments);
@@ -7893,11 +8264,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7893
8264
  }, {
7894
8265
  key: "cleanUpBeforeRetryWithTurnServer",
7895
8266
  value: (function () {
7896
- var _cleanUpBeforeRetryWithTurnServer = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee33() {
7897
- return _regenerator.default.wrap(function (_context33) {
7898
- while (1) switch (_context33.prev = _context33.next) {
8267
+ var _cleanUpBeforeRetryWithTurnServer = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee34() {
8268
+ return _regenerator.default.wrap(function (_context34) {
8269
+ while (1) switch (_context34.prev = _context34.next) {
7899
8270
  case 0:
7900
- _context33.next = 1;
8271
+ _context34.next = 1;
7901
8272
  return this.forceSendStatsReport({
7902
8273
  callFrom: 'cleanUpBeforeRetryWithTurnServer'
7903
8274
  });
@@ -7917,9 +8288,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7917
8288
  }
7918
8289
  case 2:
7919
8290
  case "end":
7920
- return _context33.stop();
8291
+ return _context34.stop();
7921
8292
  }
7922
- }, _callee33, this);
8293
+ }, _callee34, this);
7923
8294
  }));
7924
8295
  function cleanUpBeforeRetryWithTurnServer() {
7925
8296
  return _cleanUpBeforeRetryWithTurnServer.apply(this, arguments);
@@ -7929,35 +8300,35 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7929
8300
  }, {
7930
8301
  key: "cleanUpBeforeReconnection",
7931
8302
  value: function () {
7932
- var _cleanUpBeforeReconnection = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee34() {
7933
- var _t32;
7934
- return _regenerator.default.wrap(function (_context34) {
7935
- while (1) switch (_context34.prev = _context34.next) {
8303
+ var _cleanUpBeforeReconnection = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee35() {
8304
+ var _t34;
8305
+ return _regenerator.default.wrap(function (_context35) {
8306
+ while (1) switch (_context35.prev = _context35.next) {
7936
8307
  case 0:
7937
- _context34.prev = 0;
7938
- _context34.next = 1;
8308
+ _context35.prev = 0;
8309
+ _context35.next = 1;
7939
8310
  return this.forceSendStatsReport({
7940
8311
  callFrom: 'cleanUpBeforeReconnection'
7941
8312
  });
7942
8313
  case 1:
7943
8314
  if (!this.statsAnalyzer) {
7944
- _context34.next = 2;
8315
+ _context35.next = 2;
7945
8316
  break;
7946
8317
  }
7947
- _context34.next = 2;
8318
+ _context35.next = 2;
7948
8319
  return this.statsAnalyzer.stopAnalyzer();
7949
8320
  case 2:
7950
- _context34.next = 4;
8321
+ _context35.next = 4;
7951
8322
  break;
7952
8323
  case 3:
7953
- _context34.prev = 3;
7954
- _t32 = _context34["catch"](0);
7955
- _loggerProxy.default.logger.error('Meeting:index#cleanUpBeforeReconnection --> Error during cleanup: ', _t32);
8324
+ _context35.prev = 3;
8325
+ _t34 = _context35["catch"](0);
8326
+ _loggerProxy.default.logger.error('Meeting:index#cleanUpBeforeReconnection --> Error during cleanup: ', _t34);
7956
8327
  case 4:
7957
8328
  case "end":
7958
- return _context34.stop();
8329
+ return _context35.stop();
7959
8330
  }
7960
- }, _callee34, this, [[0, 3]]);
8331
+ }, _callee35, this, [[0, 3]]);
7961
8332
  }));
7962
8333
  function cleanUpBeforeReconnection() {
7963
8334
  return _cleanUpBeforeReconnection.apply(this, arguments);
@@ -8025,7 +8396,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8025
8396
  }, {
8026
8397
  key: "addMediaInternal",
8027
8398
  value: (function () {
8028
- var _addMediaInternal = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee35(icePhaseCallback, turnServerInfo, forceTurnDiscovery) {
8399
+ var _addMediaInternal = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee36(icePhaseCallback, turnServerInfo, forceTurnDiscovery) {
8029
8400
  var options,
8030
8401
  LOG_HEADER,
8031
8402
  localStreams,
@@ -8087,26 +8458,26 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8087
8458
  _selectedCandidatePairChanges,
8088
8459
  _numTransports,
8089
8460
  _iceCandidateErrors,
8090
- _args35 = arguments,
8091
- _t33,
8092
- _t34;
8093
- return _regenerator.default.wrap(function (_context35) {
8094
- while (1) switch (_context35.prev = _context35.next) {
8461
+ _args36 = arguments,
8462
+ _t35,
8463
+ _t36;
8464
+ return _regenerator.default.wrap(function (_context36) {
8465
+ while (1) switch (_context36.prev = _context36.next) {
8095
8466
  case 0:
8096
- options = _args35.length > 3 && _args35[3] !== undefined ? _args35[3] : {};
8467
+ options = _args36.length > 3 && _args36[3] !== undefined ? _args36[3] : {};
8097
8468
  this.addMediaData.retriedWithTurnServer = false;
8098
8469
  this.addMediaData.icePhaseCallback = icePhaseCallback;
8099
8470
  this.hasMediaConnectionConnectedAtLeastOnce = false;
8100
8471
  LOG_HEADER = 'Meeting:index#addMedia -->';
8101
8472
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " called with: options=").concat((0, _stringify.default)(options), ", turnServerInfo=").concat((0, _stringify.default)(turnServerInfo), ", forceTurnDiscovery=").concat(forceTurnDiscovery));
8102
8473
  if (!(options.allowMediaInLobby !== true && this.meetingState !== _constants.FULL_STATE.ACTIVE)) {
8103
- _context35.next = 1;
8474
+ _context36.next = 1;
8104
8475
  break;
8105
8476
  }
8106
8477
  throw new _webexErrors.MeetingNotActiveError();
8107
8478
  case 1:
8108
8479
  if (!_util2.default.isUserInLeftState(this.locusInfo)) {
8109
- _context35.next = 2;
8480
+ _context36.next = 2;
8110
8481
  break;
8111
8482
  }
8112
8483
  throw new _webexErrors.UserNotJoinedError();
@@ -8123,7 +8494,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8123
8494
  ipver = _util2.default.getIpVersion(this.webex); // used just for metrics
8124
8495
  // If the user is unjoined or guest waiting in lobby dont allow the user to addMedia
8125
8496
  if (!(this.isUserUnadmitted && !this.wirelessShare && !this.allowMediaInLobby)) {
8126
- _context35.next = 3;
8497
+ _context36.next = 3;
8127
8498
  break;
8128
8499
  }
8129
8500
  throw new _webexErrors.UserInLobbyError();
@@ -8167,62 +8538,62 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8167
8538
  this.audio = (0, _muteState.createMuteState)(_constants.AUDIO, this, audioEnabled);
8168
8539
  this.video = (0, _muteState.createMuteState)(_constants.VIDEO, this, videoEnabled);
8169
8540
  this.brbState = (0, _brbState.createBrbState)(this, false);
8170
- _context35.prev = 4;
8541
+ _context36.prev = 4;
8171
8542
  if (!(allowPublishMediaInLobby || !this.isUserUnadmitted)) {
8172
- _context35.next = 5;
8543
+ _context36.next = 5;
8173
8544
  break;
8174
8545
  }
8175
- _context35.next = 5;
8546
+ _context36.next = 5;
8176
8547
  return this.setUpLocalStreamReferences(localStreams);
8177
8548
  case 5:
8178
8549
  this.setMercuryListener();
8179
8550
  this.createStatsAnalyzer();
8180
- _context35.prev = 6;
8181
- _context35.next = 7;
8551
+ _context36.prev = 6;
8552
+ _context36.next = 7;
8182
8553
  return this.establishMediaConnection(remoteMediaManagerConfig, bundlePolicy, forceTurnDiscovery, turnServerInfo);
8183
8554
  case 7:
8184
- _context35.next = 12;
8555
+ _context36.next = 12;
8185
8556
  break;
8186
8557
  case 8:
8187
- _context35.prev = 8;
8188
- _t33 = _context35["catch"](6);
8189
- if (!(_t33 instanceof _multistreamNotSupportedError.default)) {
8190
- _context35.next = 11;
8558
+ _context36.prev = 8;
8559
+ _t35 = _context36["catch"](6);
8560
+ if (!(_t35 instanceof _multistreamNotSupportedError.default)) {
8561
+ _context36.next = 11;
8191
8562
  break;
8192
8563
  }
8193
8564
  _loggerProxy.default.logger.warn("".concat(LOG_HEADER, " we asked for multistream backend (Homer), but got transcoded backend, recreating media connection..."));
8194
- _context35.next = 9;
8565
+ _context36.next = 9;
8195
8566
  return this.downgradeFromMultistreamToTranscoded();
8196
8567
  case 9:
8197
- _context35.next = 10;
8568
+ _context36.next = 10;
8198
8569
  return this.establishMediaConnection(remoteMediaManagerConfig, bundlePolicy, true, undefined);
8199
8570
  case 10:
8200
- _context35.next = 12;
8571
+ _context36.next = 12;
8201
8572
  break;
8202
8573
  case 11:
8203
- throw _t33;
8574
+ throw _t35;
8204
8575
  case 12:
8205
8576
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " media connected, finalizing..."));
8206
8577
  if (!this.mediaProperties.hasLocalShareStream()) {
8207
- _context35.next = 13;
8578
+ _context36.next = 13;
8208
8579
  break;
8209
8580
  }
8210
- _context35.next = 13;
8581
+ _context36.next = 13;
8211
8582
  return this.enqueueScreenShareFloorRequest();
8212
8583
  case 13:
8213
- _context35.next = 14;
8584
+ _context36.next = 14;
8214
8585
  return this.mediaProperties.getCurrentConnectionInfo();
8215
8586
  case 14:
8216
- _yield$this$mediaProp = _context35.sent;
8587
+ _yield$this$mediaProp = _context36.sent;
8217
8588
  connectionType = _yield$this$mediaProp.connectionType;
8218
8589
  ipVersion = _yield$this$mediaProp.ipVersion;
8219
8590
  selectedCandidatePairChanges = _yield$this$mediaProp.selectedCandidatePairChanges;
8220
8591
  numTransports = _yield$this$mediaProp.numTransports;
8221
8592
  iceCandidateErrors = Object.fromEntries(this.iceCandidateErrors);
8222
- _context35.next = 15;
8593
+ _context36.next = 15;
8223
8594
  return this.getMediaReachabilityMetricFields();
8224
8595
  case 15:
8225
- reachabilityMetrics = _context35.sent;
8596
+ reachabilityMetrics = _context36.sent;
8226
8597
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_SUCCESS, _objectSpread(_objectSpread(_objectSpread({
8227
8598
  correlation_id: this.correlationId,
8228
8599
  locus_id: this.locusUrl.split('/').pop(),
@@ -8252,31 +8623,31 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8252
8623
  // We can log ReceiveSlot SSRCs only after the SDP exchange, so doing it here:
8253
8624
  (_this$remoteMediaMana = this.remoteMediaManager) === null || _this$remoteMediaMana === void 0 ? void 0 : _this$remoteMediaMana.logAllReceiveSlots();
8254
8625
  this.startPeriodicLogUpload();
8255
- _context35.next = 20;
8626
+ _context36.next = 20;
8256
8627
  break;
8257
8628
  case 16:
8258
- _context35.prev = 16;
8259
- _t34 = _context35["catch"](4);
8260
- _loggerProxy.default.logger.error("".concat(LOG_HEADER, " failed to establish media connection: "), _t34);
8629
+ _context36.prev = 16;
8630
+ _t36 = _context36["catch"](4);
8631
+ _loggerProxy.default.logger.error("".concat(LOG_HEADER, " failed to establish media connection: "), _t36);
8261
8632
 
8262
8633
  // @ts-ignore
8263
- _context35.next = 17;
8634
+ _context36.next = 17;
8264
8635
  return this.getMediaReachabilityMetricFields();
8265
8636
  case 17:
8266
- _reachabilityMetrics = _context35.sent;
8267
- _context35.next = 18;
8637
+ _reachabilityMetrics = _context36.sent;
8638
+ _context36.next = 18;
8268
8639
  return this.mediaProperties.getCurrentConnectionInfo();
8269
8640
  case 18:
8270
- _yield$this$mediaProp2 = _context35.sent;
8641
+ _yield$this$mediaProp2 = _context36.sent;
8271
8642
  _selectedCandidatePairChanges = _yield$this$mediaProp2.selectedCandidatePairChanges;
8272
8643
  _numTransports = _yield$this$mediaProp2.numTransports;
8273
8644
  _iceCandidateErrors = Object.fromEntries(this.iceCandidateErrors);
8274
8645
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_FAILURE, _objectSpread(_objectSpread(_objectSpread({
8275
8646
  correlation_id: this.correlationId,
8276
8647
  locus_id: this.locusUrl.split('/').pop(),
8277
- reason: _t34.message,
8278
- stack: _t34.stack,
8279
- code: _t34.code,
8648
+ reason: _t36.message,
8649
+ stack: _t36.stack,
8650
+ code: _t36.code,
8280
8651
  selectedCandidatePairChanges: _selectedCandidatePairChanges,
8281
8652
  numTransports: _numTransports,
8282
8653
  turnDiscoverySkippedReason: this.turnDiscoverySkippedReason,
@@ -8291,7 +8662,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8291
8662
  iceCandidatesCount: this.iceCandidatesCount,
8292
8663
  ipver: ipver
8293
8664
  }));
8294
- _context35.next = 19;
8665
+ _context36.next = 19;
8295
8666
  return this.cleanUpOnAddMediaFailure();
8296
8667
  case 19:
8297
8668
  // Upload logs on error while adding media
@@ -8299,21 +8670,21 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8299
8670
  file: 'meeting/index',
8300
8671
  function: 'addMedia'
8301
8672
  }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, this);
8302
- if (_t34 instanceof _internalMediaCore.Errors.SdpError) {
8673
+ if (_t36 instanceof _internalMediaCore.Errors.SdpError) {
8303
8674
  this.leave({
8304
8675
  reason: _constants.MEETING_REMOVED_REASON.MEETING_CONNECTION_FAILED
8305
8676
  });
8306
8677
  }
8307
- throw _t34;
8678
+ throw _t36;
8308
8679
  case 20:
8309
- _context35.prev = 20;
8680
+ _context36.prev = 20;
8310
8681
  this.addMediaData.icePhaseCallback = DEFAULT_ICE_PHASE_CALLBACK;
8311
- return _context35.finish(20);
8682
+ return _context36.finish(20);
8312
8683
  case 21:
8313
8684
  case "end":
8314
- return _context35.stop();
8685
+ return _context36.stop();
8315
8686
  }
8316
- }, _callee35, this, [[4, 16, 20, 21], [6, 8]]);
8687
+ }, _callee36, this, [[4, 16, 20, 21], [6, 8]]);
8317
8688
  }));
8318
8689
  function addMediaInternal(_x31, _x32, _x33) {
8319
8690
  return _addMediaInternal.apply(this, arguments);
@@ -8381,35 +8752,35 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8381
8752
  * @memberof Meeting
8382
8753
  */
8383
8754
  function () {
8384
- var _updateMedia = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee36(options) {
8755
+ var _updateMedia = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee37(options) {
8385
8756
  var audioEnabled, videoEnabled, shareAudioEnabled, shareVideoEnabled, _this$audio3, _this$video3;
8386
- return _regenerator.default.wrap(function (_context36) {
8387
- while (1) switch (_context36.prev = _context36.next) {
8757
+ return _regenerator.default.wrap(function (_context37) {
8758
+ while (1) switch (_context37.prev = _context37.next) {
8388
8759
  case 0:
8389
8760
  this.checkMediaConnection();
8390
8761
  audioEnabled = options.audioEnabled, videoEnabled = options.videoEnabled, shareAudioEnabled = options.shareAudioEnabled, shareVideoEnabled = options.shareVideoEnabled;
8391
8762
  _loggerProxy.default.logger.log("Meeting:index#updateMedia --> called with options=".concat((0, _stringify.default)(options)));
8392
8763
  if (this.canUpdateMedia()) {
8393
- _context36.next = 1;
8764
+ _context37.next = 1;
8394
8765
  break;
8395
8766
  }
8396
- return _context36.abrupt("return", this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.UPDATE_MEDIA, options));
8767
+ return _context37.abrupt("return", this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.UPDATE_MEDIA, options));
8397
8768
  case 1:
8398
8769
  if (!this.isMultistream) {
8399
- _context36.next = 3;
8770
+ _context37.next = 3;
8400
8771
  break;
8401
8772
  }
8402
8773
  if (!(shareAudioEnabled !== undefined || shareVideoEnabled !== undefined)) {
8403
- _context36.next = 2;
8774
+ _context37.next = 2;
8404
8775
  break;
8405
8776
  }
8406
8777
  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');
8407
8778
  case 2:
8408
- _context36.next = 4;
8779
+ _context37.next = 4;
8409
8780
  break;
8410
8781
  case 3:
8411
8782
  if (!(shareAudioEnabled !== undefined)) {
8412
- _context36.next = 4;
8783
+ _context37.next = 4;
8413
8784
  break;
8414
8785
  }
8415
8786
  throw new Error('toggling shareAudioEnabled in a transcoded meeting is not supported as of now');
@@ -8434,18 +8805,18 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8434
8805
  this.mediaProperties.mediaDirection.receiveShare = !!(shareAudioEnabled || shareVideoEnabled);
8435
8806
  }
8436
8807
  if (this.isMultistream) {
8437
- _context36.next = 5;
8808
+ _context37.next = 5;
8438
8809
  break;
8439
8810
  }
8440
- _context36.next = 5;
8811
+ _context37.next = 5;
8441
8812
  return this.updateTranscodedMediaConnection();
8442
8813
  case 5:
8443
- return _context36.abrupt("return", undefined);
8814
+ return _context37.abrupt("return", undefined);
8444
8815
  case 6:
8445
8816
  case "end":
8446
- return _context36.stop();
8817
+ return _context37.stop();
8447
8818
  }
8448
- }, _callee36, this);
8819
+ }, _callee37, this);
8449
8820
  }));
8450
8821
  function updateMedia(_x34) {
8451
8822
  return _updateMedia.apply(this, arguments);
@@ -8587,15 +8958,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8587
8958
  );
8588
8959
  };
8589
8960
  _loggerProxy.default.logger.log('Meeting:index#leave --> Leaving a meeting');
8961
+ this.stopListeningForMeetingEvents();
8590
8962
  return _util2.default.leaveMeeting(this, options).then(/*#__PURE__*/function () {
8591
- var _ref42 = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee37(leave) {
8592
- return _regenerator.default.wrap(function (_context37) {
8593
- while (1) switch (_context37.prev = _context37.next) {
8963
+ var _ref41 = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee38(leave) {
8964
+ return _regenerator.default.wrap(function (_context38) {
8965
+ while (1) switch (_context38.prev = _context38.next) {
8594
8966
  case 0:
8595
8967
  // CA team recommends submitting this *after* locus /leave
8596
8968
  submitLeaveMetric();
8597
8969
  _this49.meetingFiniteStateMachine.leave();
8598
- _context37.next = 1;
8970
+ _context38.next = 1;
8599
8971
  return _this49.clearMeetingData();
8600
8972
  case 1:
8601
8973
  // upload logs on leave irrespective of meeting delete
@@ -8616,15 +8988,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8616
8988
  });
8617
8989
  }
8618
8990
  _loggerProxy.default.logger.log('Meeting:index#leave --> LEAVE REASON ', leaveReason);
8619
- return _context37.abrupt("return", leave);
8991
+ return _context38.abrupt("return", leave);
8620
8992
  case 2:
8621
8993
  case "end":
8622
- return _context37.stop();
8994
+ return _context38.stop();
8623
8995
  }
8624
- }, _callee37);
8996
+ }, _callee38);
8625
8997
  }));
8626
8998
  return function (_x35) {
8627
- return _ref42.apply(this, arguments);
8999
+ return _ref41.apply(this, arguments);
8628
9000
  };
8629
9001
  }()).catch(function (error) {
8630
9002
  // CA team recommends submitting this *after* locus /leave
@@ -9288,13 +9660,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9288
9660
  correlation_id: this.correlationId,
9289
9661
  locus_id: this.locusId
9290
9662
  });
9663
+ this.stopListeningForMeetingEvents();
9291
9664
  return _util2.default.endMeetingForAll(this).then(/*#__PURE__*/function () {
9292
- var _ref43 = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee38(end) {
9293
- return _regenerator.default.wrap(function (_context38) {
9294
- while (1) switch (_context38.prev = _context38.next) {
9665
+ var _ref42 = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee39(end) {
9666
+ return _regenerator.default.wrap(function (_context39) {
9667
+ while (1) switch (_context39.prev = _context39.next) {
9295
9668
  case 0:
9296
9669
  _this56.meetingFiniteStateMachine.end();
9297
- _context38.next = 1;
9670
+ _context39.next = 1;
9298
9671
  return _this56.clearMeetingData();
9299
9672
  case 1:
9300
9673
  // upload logs on leave irrespective of meeting delete
@@ -9302,15 +9675,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9302
9675
  file: 'meeting/index',
9303
9676
  function: 'endMeetingForAll'
9304
9677
  }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this56);
9305
- return _context38.abrupt("return", end);
9678
+ return _context39.abrupt("return", end);
9306
9679
  case 2:
9307
9680
  case "end":
9308
- return _context38.stop();
9681
+ return _context39.stop();
9309
9682
  }
9310
- }, _callee38);
9683
+ }, _callee39);
9311
9684
  }));
9312
9685
  return function (_x36) {
9313
- return _ref43.apply(this, arguments);
9686
+ return _ref42.apply(this, arguments);
9314
9687
  };
9315
9688
  }()).catch(function (error) {
9316
9689
  _this56.meetingFiniteStateMachine.fail(error);
@@ -9346,10 +9719,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9346
9719
  var _this$locusInfo7, _this$locusInfo7$cont, _this$locusInfo7$cont2;
9347
9720
  var reactionChannelUrl = (_this$locusInfo7 = this.locusInfo) === null || _this$locusInfo7 === void 0 ? void 0 : (_this$locusInfo7$cont = _this$locusInfo7.controls) === null || _this$locusInfo7$cont === void 0 ? void 0 : (_this$locusInfo7$cont2 = _this$locusInfo7$cont.reactions) === null || _this$locusInfo7$cont2 === void 0 ? void 0 : _this$locusInfo7$cont2.reactionChannelUrl;
9348
9721
  var participantId = this.members.selfId;
9349
- var reactionData = _reactions.Reactions[reactionType];
9350
- if (!reactionData) {
9351
- return _promise.default.reject(new Error("".concat(reactionType, " is not a valid reaction.")));
9352
- }
9722
+ var reactionData = _reactions.Reactions[reactionType] || {
9723
+ type: reactionType
9724
+ };
9353
9725
  var skinToneData = _reactions.SkinTones[skinToneType] || _reactions.SkinTones.normal;
9354
9726
  var reaction = _objectSpread(_objectSpread({}, reactionData), {}, {
9355
9727
  tone: skinToneData
@@ -9374,12 +9746,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9374
9746
  */
9375
9747
  }, {
9376
9748
  key: "extendMeeting",
9377
- value: function extendMeeting(_ref44) {
9378
- var meetingPolicyUrl = _ref44.meetingPolicyUrl,
9379
- meetingInstanceId = _ref44.meetingInstanceId,
9380
- participantId = _ref44.participantId,
9381
- _ref44$extensionMinut = _ref44.extensionMinutes,
9382
- extensionMinutes = _ref44$extensionMinut === void 0 ? 30 : _ref44$extensionMinut;
9749
+ value: function extendMeeting(_ref43) {
9750
+ var meetingPolicyUrl = _ref43.meetingPolicyUrl,
9751
+ meetingInstanceId = _ref43.meetingInstanceId,
9752
+ participantId = _ref43.participantId,
9753
+ _ref43$extensionMinut = _ref43.extensionMinutes,
9754
+ extensionMinutes = _ref43$extensionMinut === void 0 ? 30 : _ref43$extensionMinut;
9383
9755
  if (!meetingInstanceId || !participantId) {
9384
9756
  return _promise.default.reject(new Error('Missing meetingInstanceId or participantId'));
9385
9757
  }
@@ -9460,37 +9832,37 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9460
9832
  }, {
9461
9833
  key: "enableMusicMode",
9462
9834
  value: (function () {
9463
- var _enableMusicMode = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee39(shouldEnableMusicMode) {
9464
- return _regenerator.default.wrap(function (_context39) {
9465
- while (1) switch (_context39.prev = _context39.next) {
9835
+ var _enableMusicMode = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee40(shouldEnableMusicMode) {
9836
+ return _regenerator.default.wrap(function (_context40) {
9837
+ while (1) switch (_context40.prev = _context40.next) {
9466
9838
  case 0:
9467
9839
  this.checkMediaConnection();
9468
9840
  if (this.isMultistream) {
9469
- _context39.next = 1;
9841
+ _context40.next = 1;
9470
9842
  break;
9471
9843
  }
9472
9844
  throw new Error('enableMusicMode() only supported with multistream');
9473
9845
  case 1:
9474
9846
  if (!shouldEnableMusicMode) {
9475
- _context39.next = 3;
9847
+ _context40.next = 3;
9476
9848
  break;
9477
9849
  }
9478
- _context39.next = 2;
9850
+ _context40.next = 2;
9479
9851
  return this.sendSlotManager.setCustomCodecParameters(_internalMediaCore.MediaType.AudioMain, _internalMediaCore.MediaCodecMimeType.OPUS, {
9480
9852
  maxaveragebitrate: '64000',
9481
9853
  maxplaybackrate: '48000'
9482
9854
  });
9483
9855
  case 2:
9484
- _context39.next = 4;
9856
+ _context40.next = 4;
9485
9857
  break;
9486
9858
  case 3:
9487
- _context39.next = 4;
9859
+ _context40.next = 4;
9488
9860
  return this.sendSlotManager.markCustomCodecParametersForDeletion(_internalMediaCore.MediaType.AudioMain, _internalMediaCore.MediaCodecMimeType.OPUS, ['maxaveragebitrate', 'maxplaybackrate']);
9489
9861
  case 4:
9490
9862
  case "end":
9491
- return _context39.stop();
9863
+ return _context40.stop();
9492
9864
  }
9493
- }, _callee39, this);
9865
+ }, _callee40, this);
9494
9866
  }));
9495
9867
  function enableMusicMode(_x37) {
9496
9868
  return _enableMusicMode.apply(this, arguments);
@@ -9583,25 +9955,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9583
9955
  }, {
9584
9956
  key: "publishStream",
9585
9957
  value: (function () {
9586
- var _publishStream = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee40(mediaType, stream) {
9587
- return _regenerator.default.wrap(function (_context40) {
9588
- while (1) switch (_context40.prev = _context40.next) {
9958
+ var _publishStream = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee41(mediaType, stream) {
9959
+ return _regenerator.default.wrap(function (_context41) {
9960
+ while (1) switch (_context41.prev = _context41.next) {
9589
9961
  case 0:
9590
9962
  if (stream) {
9591
- _context40.next = 1;
9963
+ _context41.next = 1;
9592
9964
  break;
9593
9965
  }
9594
- return _context40.abrupt("return");
9966
+ return _context41.abrupt("return");
9595
9967
  case 1:
9596
9968
  if (!this.mediaProperties.webrtcMediaConnection) {
9597
- _context40.next = 3;
9969
+ _context41.next = 3;
9598
9970
  break;
9599
9971
  }
9600
9972
  if (!(this.isMultistream && this.mediaProperties.webrtcMediaConnection)) {
9601
- _context40.next = 2;
9973
+ _context41.next = 2;
9602
9974
  break;
9603
9975
  }
9604
- _context40.next = 2;
9976
+ _context41.next = 2;
9605
9977
  return this.sendSlotManager.publishStream(mediaType, stream);
9606
9978
  case 2:
9607
9979
  this.emitPublishStateChangeEvent({
@@ -9612,9 +9984,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9612
9984
  });
9613
9985
  case 3:
9614
9986
  case "end":
9615
- return _context40.stop();
9987
+ return _context41.stop();
9616
9988
  }
9617
- }, _callee40, this);
9989
+ }, _callee41, this);
9618
9990
  }));
9619
9991
  function publishStream(_x38, _x39) {
9620
9992
  return _publishStream.apply(this, arguments);
@@ -9632,21 +10004,21 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9632
10004
  }, {
9633
10005
  key: "unpublishStream",
9634
10006
  value: (function () {
9635
- var _unpublishStream = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee41(mediaType, stream) {
9636
- return _regenerator.default.wrap(function (_context41) {
9637
- while (1) switch (_context41.prev = _context41.next) {
10007
+ var _unpublishStream = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee42(mediaType, stream) {
10008
+ return _regenerator.default.wrap(function (_context42) {
10009
+ while (1) switch (_context42.prev = _context42.next) {
9638
10010
  case 0:
9639
10011
  if (stream) {
9640
- _context41.next = 1;
10012
+ _context42.next = 1;
9641
10013
  break;
9642
10014
  }
9643
- return _context41.abrupt("return");
10015
+ return _context42.abrupt("return");
9644
10016
  case 1:
9645
10017
  if (!(this.isMultistream && this.mediaProperties.webrtcMediaConnection)) {
9646
- _context41.next = 2;
10018
+ _context42.next = 2;
9647
10019
  break;
9648
10020
  }
9649
- _context41.next = 2;
10021
+ _context42.next = 2;
9650
10022
  return this.sendSlotManager.unpublishStream(mediaType);
9651
10023
  case 2:
9652
10024
  this.emitPublishStateChangeEvent({
@@ -9657,9 +10029,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9657
10029
  });
9658
10030
  case 3:
9659
10031
  case "end":
9660
- return _context41.stop();
10032
+ return _context42.stop();
9661
10033
  }
9662
- }, _callee41, this);
10034
+ }, _callee42, this);
9663
10035
  }));
9664
10036
  function unpublishStream(_x40, _x41) {
9665
10037
  return _unpublishStream.apply(this, arguments);
@@ -9676,19 +10048,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9676
10048
  }, {
9677
10049
  key: "publishStreams",
9678
10050
  value: (function () {
9679
- var _publishStreams = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee42(streams) {
10051
+ var _publishStreams = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee43(streams) {
9680
10052
  var _streams$screenShare, _streams$screenShare2, _streams$screenShare3, _streams$screenShare4, _streams$screenShare5, _streams$screenShare6;
9681
10053
  var streamChecks, _i, _streamChecks, _streamChecks$_i, stream, name, floorRequestNeeded, _streams$screenShare7;
9682
- return _regenerator.default.wrap(function (_context42) {
9683
- while (1) switch (_context42.prev = _context42.next) {
10054
+ return _regenerator.default.wrap(function (_context43) {
10055
+ while (1) switch (_context43.prev = _context43.next) {
9684
10056
  case 0:
9685
10057
  _loggerProxy.default.logger.info("Meeting:index#publishStreams --> called with: ".concat((0, _stringify.default)(streams)));
9686
10058
  this.checkMediaConnection();
9687
10059
  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))) {
9688
- _context42.next = 1;
10060
+ _context43.next = 1;
9689
10061
  break;
9690
10062
  }
9691
- return _context42.abrupt("return");
10063
+ return _context43.abrupt("return");
9692
10064
  case 1:
9693
10065
  streamChecks = [{
9694
10066
  stream: streams === null || streams === void 0 ? void 0 : streams.microphone,
@@ -9706,62 +10078,62 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9706
10078
  _i = 0, _streamChecks = streamChecks;
9707
10079
  case 2:
9708
10080
  if (!(_i < _streamChecks.length)) {
9709
- _context42.next = 4;
10081
+ _context43.next = 4;
9710
10082
  break;
9711
10083
  }
9712
10084
  _streamChecks$_i = _streamChecks[_i], stream = _streamChecks$_i.stream, name = _streamChecks$_i.name;
9713
10085
  if (!((stream === null || stream === void 0 ? void 0 : stream.readyState) === 'ended')) {
9714
- _context42.next = 3;
10086
+ _context43.next = 3;
9715
10087
  break;
9716
10088
  }
9717
10089
  throw new Error("Attempted to publish ".concat(name, " stream with ended readyState, correlationId=").concat(this.correlationId));
9718
10090
  case 3:
9719
10091
  _i++;
9720
- _context42.next = 2;
10092
+ _context43.next = 2;
9721
10093
  break;
9722
10094
  case 4:
9723
10095
  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
9724
10096
  if (!(this.isMultistream && (_streams$screenShare5 = streams.screenShare) !== null && _streams$screenShare5 !== void 0 && _streams$screenShare5.audio)) {
9725
- _context42.next = 6;
10097
+ _context43.next = 6;
9726
10098
  break;
9727
10099
  }
9728
- _context42.next = 5;
10100
+ _context43.next = 5;
9729
10101
  return this.setLocalShareAudioStream(streams.screenShare.audio);
9730
10102
  case 5:
9731
10103
  floorRequestNeeded = this.screenShareFloorState === ScreenShareFloorStatus.RELEASED;
9732
10104
  case 6:
9733
10105
  if (!((_streams$screenShare6 = streams.screenShare) !== null && _streams$screenShare6 !== void 0 && _streams$screenShare6.video)) {
9734
- _context42.next = 8;
10106
+ _context43.next = 8;
9735
10107
  break;
9736
10108
  }
9737
- _context42.next = 7;
10109
+ _context43.next = 7;
9738
10110
  return this.setLocalShareVideoStream((_streams$screenShare7 = streams.screenShare) === null || _streams$screenShare7 === void 0 ? void 0 : _streams$screenShare7.video);
9739
10111
  case 7:
9740
10112
  floorRequestNeeded = this.screenShareFloorState === ScreenShareFloorStatus.RELEASED;
9741
10113
  case 8:
9742
10114
  if (!streams.microphone) {
9743
- _context42.next = 9;
10115
+ _context43.next = 9;
9744
10116
  break;
9745
10117
  }
9746
- _context42.next = 9;
10118
+ _context43.next = 9;
9747
10119
  return this.setLocalAudioStream(streams.microphone);
9748
10120
  case 9:
9749
10121
  if (!streams.camera) {
9750
- _context42.next = 10;
10122
+ _context43.next = 10;
9751
10123
  break;
9752
10124
  }
9753
- _context42.next = 10;
10125
+ _context43.next = 10;
9754
10126
  return this.setLocalVideoStream(streams.camera);
9755
10127
  case 10:
9756
10128
  if (this.isMultistream) {
9757
- _context42.next = 11;
10129
+ _context43.next = 11;
9758
10130
  break;
9759
10131
  }
9760
- _context42.next = 11;
10132
+ _context43.next = 11;
9761
10133
  return this.updateTranscodedMediaConnection();
9762
10134
  case 11:
9763
10135
  if (!floorRequestNeeded) {
9764
- _context42.next = 12;
10136
+ _context43.next = 12;
9765
10137
  break;
9766
10138
  }
9767
10139
  this.localShareInstanceId = _uuid.default.v4();
@@ -9792,13 +10164,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9792
10164
  // we're sending the http request to Locus to request the screen share floor
9793
10165
  // only after the SDP update, because that's how it's always been done for transcoded meetings
9794
10166
  // and also if sharing from the start, we need confluence to have been created
9795
- _context42.next = 12;
10167
+ _context43.next = 12;
9796
10168
  return this.enqueueScreenShareFloorRequest();
9797
10169
  case 12:
9798
10170
  case "end":
9799
- return _context42.stop();
10171
+ return _context43.stop();
9800
10172
  }
9801
- }, _callee42, this);
10173
+ }, _callee43, this);
9802
10174
  }));
9803
10175
  function publishStreams(_x42) {
9804
10176
  return _publishStreams.apply(this, arguments);
@@ -9815,20 +10187,20 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9815
10187
  }, {
9816
10188
  key: "unpublishStreams",
9817
10189
  value: (function () {
9818
- var _unpublishStreams = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee43(streams) {
9819
- var promises, _iterator, _step, stream;
9820
- return _regenerator.default.wrap(function (_context43) {
9821
- while (1) switch (_context43.prev = _context43.next) {
10190
+ var _unpublishStreams = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee44(streams) {
10191
+ var promises, _iterator2, _step2, stream;
10192
+ return _regenerator.default.wrap(function (_context44) {
10193
+ while (1) switch (_context44.prev = _context44.next) {
9822
10194
  case 0:
9823
10195
  _loggerProxy.default.logger.info("Meeting:index#unpublishStreams --> called with: ".concat((0, _stringify.default)(streams)));
9824
10196
  this.checkMediaConnection();
9825
10197
  promises = [];
9826
- _iterator = _createForOfIteratorHelper(streams.filter(function (t) {
10198
+ _iterator2 = _createForOfIteratorHelper(streams.filter(function (t) {
9827
10199
  return !!t;
9828
10200
  }));
9829
10201
  try {
9830
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
9831
- stream = _step.value;
10202
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
10203
+ stream = _step2.value;
9832
10204
  if (stream === this.mediaProperties.shareAudioStream) {
9833
10205
  promises.push(this.setLocalShareAudioStream(undefined));
9834
10206
  }
@@ -9843,14 +10215,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9843
10215
  }
9844
10216
  }
9845
10217
  } catch (err) {
9846
- _iterator.e(err);
10218
+ _iterator2.e(err);
9847
10219
  } finally {
9848
- _iterator.f();
10220
+ _iterator2.f();
9849
10221
  }
9850
10222
  if (!this.isMultistream) {
9851
10223
  promises.push(this.updateTranscodedMediaConnection());
9852
10224
  }
9853
- _context43.next = 1;
10225
+ _context44.next = 1;
9854
10226
  return _promise.default.all(promises);
9855
10227
  case 1:
9856
10228
  // we're allowing for the SDK to support just audio share as well
@@ -9871,9 +10243,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9871
10243
  }
9872
10244
  case 2:
9873
10245
  case "end":
9874
- return _context43.stop();
10246
+ return _context44.stop();
9875
10247
  }
9876
- }, _callee43, this);
10248
+ }, _callee44, this);
9877
10249
  }));
9878
10250
  function unpublishStreams(_x43) {
9879
10251
  return _unpublishStreams.apply(this, arguments);
@@ -9941,16 +10313,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9941
10313
  }, {
9942
10314
  key: "getMediaReachabilityMetricFields",
9943
10315
  value: (function () {
9944
- var _getMediaReachabilityMetricFields = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee44() {
10316
+ var _getMediaReachabilityMetricFields = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee45() {
9945
10317
  var _this$mediaServerIp, _this$mediaConnection, _this$mediaConnection2, _this$mediaConnection3;
9946
10318
  var reachabilityMetrics, successKeys, totalSuccessCases, selectedSubnetFirstOctet, isSubnetReachable, selectedCluster;
9947
- return _regenerator.default.wrap(function (_context44) {
9948
- while (1) switch (_context44.prev = _context44.next) {
10319
+ return _regenerator.default.wrap(function (_context45) {
10320
+ while (1) switch (_context45.prev = _context45.next) {
9949
10321
  case 0:
9950
- _context44.next = 1;
10322
+ _context45.next = 1;
9951
10323
  return this.webex.meetings.reachability.getReachabilityMetrics();
9952
10324
  case 1:
9953
- reachabilityMetrics = _context44.sent;
10325
+ reachabilityMetrics = _context45.sent;
9954
10326
  successKeys = ['reachability_public_udp_success', 'reachability_public_tcp_success', 'reachability_public_xtls_success', 'reachability_vmn_udp_success', 'reachability_vmn_tcp_success', 'reachability_vmn_xtls_success'];
9955
10327
  totalSuccessCases = successKeys.reduce(function (total, key) {
9956
10328
  var value = reachabilityMetrics[key];
@@ -9967,16 +10339,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9967
10339
  this.webex.meetings.reachability.isSubnetReachable(selectedSubnetFirstOctet);
9968
10340
  }
9969
10341
  selectedCluster = (_this$mediaConnection = (_this$mediaConnection2 = this.mediaConnections) === null || _this$mediaConnection2 === void 0 ? void 0 : (_this$mediaConnection3 = _this$mediaConnection2[0]) === null || _this$mediaConnection3 === void 0 ? void 0 : _this$mediaConnection3.mediaAgentCluster) !== null && _this$mediaConnection !== void 0 ? _this$mediaConnection : null;
9970
- return _context44.abrupt("return", _objectSpread(_objectSpread({}, reachabilityMetrics), {}, {
10342
+ return _context45.abrupt("return", _objectSpread(_objectSpread({}, reachabilityMetrics), {}, {
9971
10343
  subnet_reachable: isSubnetReachable,
9972
10344
  selected_cluster: selectedCluster,
9973
10345
  selected_subnet: selectedSubnetFirstOctet ? "".concat(selectedSubnetFirstOctet, ".X.X.X") : null
9974
10346
  }));
9975
10347
  case 2:
9976
10348
  case "end":
9977
- return _context44.stop();
10349
+ return _context45.stop();
9978
10350
  }
9979
- }, _callee44, this);
10351
+ }, _callee45, this);
9980
10352
  }));
9981
10353
  function getMediaReachabilityMetricFields() {
9982
10354
  return _getMediaReachabilityMetricFields.apply(this, arguments);
@@ -9993,17 +10365,17 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9993
10365
  }, {
9994
10366
  key: "setStage",
9995
10367
  value: function setStage() {
9996
- var _ref45 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
9997
- _ref45$activeSpeakerP = _ref45.activeSpeakerProportion,
9998
- activeSpeakerProportion = _ref45$activeSpeakerP === void 0 ? 0.5 : _ref45$activeSpeakerP,
9999
- customBackground = _ref45.customBackground,
10000
- customLogo = _ref45.customLogo,
10001
- customNameLabel = _ref45.customNameLabel,
10002
- importantParticipants = _ref45.importantParticipants,
10003
- _ref45$lockAttendeeVi = _ref45.lockAttendeeViewOnStage,
10004
- lockAttendeeViewOnStage = _ref45$lockAttendeeVi === void 0 ? false : _ref45$lockAttendeeVi,
10005
- _ref45$showActiveSpea = _ref45.showActiveSpeaker,
10006
- showActiveSpeaker = _ref45$showActiveSpea === void 0 ? false : _ref45$showActiveSpea;
10368
+ var _ref44 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
10369
+ _ref44$activeSpeakerP = _ref44.activeSpeakerProportion,
10370
+ activeSpeakerProportion = _ref44$activeSpeakerP === void 0 ? 0.5 : _ref44$activeSpeakerP,
10371
+ customBackground = _ref44.customBackground,
10372
+ customLogo = _ref44.customLogo,
10373
+ customNameLabel = _ref44.customNameLabel,
10374
+ importantParticipants = _ref44.importantParticipants,
10375
+ _ref44$lockAttendeeVi = _ref44.lockAttendeeViewOnStage,
10376
+ lockAttendeeViewOnStage = _ref44$lockAttendeeVi === void 0 ? false : _ref44$lockAttendeeVi,
10377
+ _ref44$showActiveSpea = _ref44.showActiveSpeaker,
10378
+ showActiveSpeaker = _ref44$showActiveSpea === void 0 ? false : _ref44$showActiveSpea;
10007
10379
  var videoLayout = {
10008
10380
  overrideDefault: true,
10009
10381
  lockAttendeeViewOnStageOnly: lockAttendeeViewOnStage,
@@ -10107,41 +10479,41 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
10107
10479
  }, {
10108
10480
  key: "refreshDataChannelToken",
10109
10481
  value: (function () {
10110
- var _refreshDataChannelToken = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee45() {
10111
- var isPracticeSession, dataChannelTokenType, res, msg, _t35;
10112
- return _regenerator.default.wrap(function (_context45) {
10113
- while (1) switch (_context45.prev = _context45.next) {
10482
+ var _refreshDataChannelToken = (0, _asyncToGenerator2.default)(/*#__PURE__*/_regenerator.default.mark(function _callee46() {
10483
+ var isPracticeSession, dataChannelTokenType, res, msg, _t37;
10484
+ return _regenerator.default.wrap(function (_context46) {
10485
+ while (1) switch (_context46.prev = _context46.next) {
10114
10486
  case 0:
10115
10487
  isPracticeSession = this.webinar.isJoinPracticeSessionDataChannel();
10116
10488
  dataChannelTokenType = this.getDataChannelTokenType();
10117
- _context45.prev = 1;
10118
- _context45.next = 2;
10489
+ _context46.prev = 1;
10490
+ _context46.next = 2;
10119
10491
  return this.meetingRequest.fetchDatachannelToken({
10120
10492
  locusUrl: this.locusUrl,
10121
10493
  requestingParticipantId: this.members.selfId,
10122
10494
  isPracticeSession: isPracticeSession
10123
10495
  });
10124
10496
  case 2:
10125
- res = _context45.sent;
10126
- return _context45.abrupt("return", {
10497
+ res = _context46.sent;
10498
+ return _context46.abrupt("return", {
10127
10499
  body: {
10128
10500
  datachannelToken: res.body.datachannelToken,
10129
10501
  dataChannelTokenType: dataChannelTokenType
10130
10502
  }
10131
10503
  });
10132
10504
  case 3:
10133
- _context45.prev = 3;
10134
- _t35 = _context45["catch"](1);
10135
- msg = (_t35 === null || _t35 === void 0 ? void 0 : _t35.message) || String(_t35);
10505
+ _context46.prev = 3;
10506
+ _t37 = _context46["catch"](1);
10507
+ msg = (_t37 === null || _t37 === void 0 ? void 0 : _t37.message) || String(_t37);
10136
10508
  _loggerProxy.default.logger.warn("Meeting:index#refreshDataChannelToken --> DataChannel token refresh failed (likely locus changed or participant left): ".concat(msg), {
10137
- statusCode: _t35 === null || _t35 === void 0 ? void 0 : _t35.statusCode
10509
+ statusCode: _t37 === null || _t37 === void 0 ? void 0 : _t37.statusCode
10138
10510
  });
10139
- return _context45.abrupt("return", null);
10511
+ return _context46.abrupt("return", null);
10140
10512
  case 4:
10141
10513
  case "end":
10142
- return _context45.stop();
10514
+ return _context46.stop();
10143
10515
  }
10144
- }, _callee45, this, [[1, 3]]);
10516
+ }, _callee46, this, [[1, 3]]);
10145
10517
  }));
10146
10518
  function refreshDataChannelToken() {
10147
10519
  return _refreshDataChannelToken.apply(this, arguments);