@webex/plugin-meetings 3.0.0-beta.16 → 3.0.0-beta.18

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 (156) hide show
  1. package/dist/breakouts/breakout.js +116 -0
  2. package/dist/breakouts/breakout.js.map +1 -0
  3. package/dist/breakouts/collection.js +23 -0
  4. package/dist/breakouts/collection.js.map +1 -0
  5. package/dist/breakouts/index.js +226 -0
  6. package/dist/breakouts/index.js.map +1 -0
  7. package/dist/config.js +4 -1
  8. package/dist/config.js.map +1 -1
  9. package/dist/constants.js +43 -6
  10. package/dist/constants.js.map +1 -1
  11. package/dist/locus-info/controlsUtils.js +2 -1
  12. package/dist/locus-info/controlsUtils.js.map +1 -1
  13. package/dist/locus-info/index.js +48 -0
  14. package/dist/locus-info/index.js.map +1 -1
  15. package/dist/locus-info/parser.js +1 -0
  16. package/dist/locus-info/parser.js.map +1 -1
  17. package/dist/locus-info/selfUtils.js +19 -11
  18. package/dist/locus-info/selfUtils.js.map +1 -1
  19. package/dist/media/index.js +3 -3
  20. package/dist/media/index.js.map +1 -1
  21. package/dist/media/properties.js +4 -4
  22. package/dist/media/properties.js.map +1 -1
  23. package/dist/meeting/in-meeting-actions.js +5 -1
  24. package/dist/meeting/in-meeting-actions.js.map +1 -1
  25. package/dist/meeting/index.js +652 -459
  26. package/dist/meeting/index.js.map +1 -1
  27. package/dist/meeting/request.js +25 -44
  28. package/dist/meeting/request.js.map +1 -1
  29. package/dist/meeting/request.type.js.map +1 -1
  30. package/dist/meeting/util.js +22 -57
  31. package/dist/meeting/util.js.map +1 -1
  32. package/dist/meeting-info/meeting-info-v2.js +2 -0
  33. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  34. package/dist/meetings/index.js +28 -18
  35. package/dist/meetings/index.js.map +1 -1
  36. package/dist/meetings/request.js +14 -12
  37. package/dist/meetings/request.js.map +1 -1
  38. package/dist/member/index.js +9 -0
  39. package/dist/member/index.js.map +1 -1
  40. package/dist/member/util.js +14 -1
  41. package/dist/member/util.js.map +1 -1
  42. package/dist/members/index.js +8 -6
  43. package/dist/members/index.js.map +1 -1
  44. package/dist/members/request.js +3 -1
  45. package/dist/members/request.js.map +1 -1
  46. package/dist/multistream/mediaRequestManager.js +46 -6
  47. package/dist/multistream/mediaRequestManager.js.map +1 -1
  48. package/dist/multistream/multistreamMedia.js +4 -0
  49. package/dist/multistream/multistreamMedia.js.map +1 -1
  50. package/dist/multistream/receiveSlot.js +3 -3
  51. package/dist/multistream/receiveSlot.js.map +1 -1
  52. package/dist/multistream/receiveSlotManager.js +8 -6
  53. package/dist/multistream/receiveSlotManager.js.map +1 -1
  54. package/dist/multistream/remoteMedia.js.map +1 -1
  55. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  56. package/dist/multistream/remoteMediaManager.js +168 -63
  57. package/dist/multistream/remoteMediaManager.js.map +1 -1
  58. package/dist/reachability/index.js +63 -51
  59. package/dist/reachability/index.js.map +1 -1
  60. package/dist/reactions/constants.js +13 -0
  61. package/dist/reactions/constants.js.map +1 -0
  62. package/dist/reactions/reactions.type.js.map +1 -1
  63. package/dist/reconnection-manager/index.js +25 -12
  64. package/dist/reconnection-manager/index.js.map +1 -1
  65. package/dist/recording-controller/enums.js +17 -0
  66. package/dist/recording-controller/enums.js.map +1 -0
  67. package/dist/recording-controller/index.js +343 -0
  68. package/dist/recording-controller/index.js.map +1 -0
  69. package/dist/recording-controller/util.js +63 -0
  70. package/dist/recording-controller/util.js.map +1 -0
  71. package/dist/roap/request.js +88 -68
  72. package/dist/roap/request.js.map +1 -1
  73. package/dist/roap/turnDiscovery.js +72 -47
  74. package/dist/roap/turnDiscovery.js.map +1 -1
  75. package/dist/statsAnalyzer/index.js +3 -3
  76. package/dist/statsAnalyzer/index.js.map +1 -1
  77. package/dist/statsAnalyzer/mqaUtil.js +18 -6
  78. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  79. package/package.json +24 -19
  80. package/src/breakouts/README.md +190 -0
  81. package/src/breakouts/breakout.ts +110 -0
  82. package/src/breakouts/collection.ts +19 -0
  83. package/src/breakouts/index.ts +225 -0
  84. package/src/config.ts +4 -1
  85. package/src/constants.ts +39 -1
  86. package/src/locus-info/controlsUtils.ts +2 -0
  87. package/src/locus-info/index.ts +59 -1
  88. package/src/locus-info/parser.ts +1 -0
  89. package/src/locus-info/selfUtils.ts +8 -0
  90. package/src/media/index.ts +1 -2
  91. package/src/media/properties.ts +6 -9
  92. package/src/meeting/in-meeting-actions.ts +8 -0
  93. package/src/meeting/index.ts +360 -111
  94. package/src/meeting/request.ts +9 -31
  95. package/src/meeting/request.type.ts +2 -0
  96. package/src/meeting/util.ts +25 -60
  97. package/src/meeting-info/meeting-info-v2.ts +2 -0
  98. package/src/meetings/index.ts +10 -5
  99. package/src/meetings/request.ts +1 -1
  100. package/src/member/index.ts +9 -0
  101. package/src/member/util.ts +14 -1
  102. package/src/members/index.ts +1 -0
  103. package/src/members/request.ts +1 -0
  104. package/src/multistream/mediaRequestManager.ts +79 -15
  105. package/src/multistream/multistreamMedia.ts +4 -0
  106. package/src/multistream/receiveSlot.ts +17 -12
  107. package/src/multistream/receiveSlotManager.ts +22 -21
  108. package/src/multistream/remoteMedia.ts +1 -1
  109. package/src/multistream/remoteMediaGroup.ts +2 -2
  110. package/src/multistream/remoteMediaManager.ts +150 -37
  111. package/src/reachability/index.ts +16 -13
  112. package/src/reactions/constants.ts +4 -0
  113. package/src/reactions/reactions.type.ts +25 -0
  114. package/src/reconnection-manager/index.ts +18 -9
  115. package/src/recording-controller/enums.ts +8 -0
  116. package/src/recording-controller/index.ts +315 -0
  117. package/src/recording-controller/util.ts +58 -0
  118. package/src/roap/request.ts +78 -73
  119. package/src/roap/turnDiscovery.ts +8 -6
  120. package/src/statsAnalyzer/index.ts +4 -4
  121. package/src/statsAnalyzer/mqaUtil.ts +6 -0
  122. package/test/unit/spec/breakouts/breakout.ts +119 -0
  123. package/test/unit/spec/breakouts/collection.ts +15 -0
  124. package/test/unit/spec/breakouts/index.ts +293 -0
  125. package/test/unit/spec/locus-info/controlsUtils.js +20 -0
  126. package/test/unit/spec/locus-info/index.js +103 -0
  127. package/test/unit/spec/locus-info/selfConstant.js +25 -0
  128. package/test/unit/spec/locus-info/selfUtils.js +84 -0
  129. package/test/unit/spec/media/index.ts +1 -1
  130. package/test/unit/spec/media/properties.ts +9 -9
  131. package/test/unit/spec/meeting/effectsState.js +5 -1
  132. package/test/unit/spec/meeting/in-meeting-actions.ts +5 -1
  133. package/test/unit/spec/meeting/index.js +241 -50
  134. package/test/unit/spec/meeting/request.js +17 -0
  135. package/test/unit/spec/meeting/utils.js +28 -122
  136. package/test/unit/spec/meetings/index.js +1 -0
  137. package/test/unit/spec/member/util.js +26 -1
  138. package/test/unit/spec/multistream/mediaRequestManager.ts +312 -50
  139. package/test/unit/spec/multistream/receiveSlot.ts +6 -6
  140. package/test/unit/spec/multistream/receiveSlotManager.ts +13 -13
  141. package/test/unit/spec/multistream/remoteMedia.ts +2 -2
  142. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  143. package/test/unit/spec/multistream/remoteMediaManager.ts +354 -65
  144. package/test/unit/spec/reachability/index.ts +58 -24
  145. package/test/unit/spec/reconnection-manager/index.js +42 -13
  146. package/test/unit/spec/recording-controller/index.js +231 -0
  147. package/test/unit/spec/recording-controller/util.js +102 -0
  148. package/test/unit/spec/roap/index.ts +2 -1
  149. package/test/unit/spec/roap/request.ts +114 -0
  150. package/test/unit/spec/roap/turnDiscovery.ts +45 -29
  151. package/test/unit/spec/stats-analyzer/index.js +2 -2
  152. package/test/utils/webex-test-users.js +1 -0
  153. package/tsconfig.json +6 -0
  154. package/dist/media/internal-media-core-wrapper.js +0 -18
  155. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  156. package/src/media/internal-media-core-wrapper.ts +0 -9
@@ -54,8 +54,10 @@ var _reconnectionManager = _interopRequireDefault(require("../reconnection-manag
54
54
  var _request = _interopRequireDefault(require("./request"));
55
55
  var _index2 = _interopRequireDefault(require("../members/index"));
56
56
  var _util = _interopRequireDefault(require("./util"));
57
- var _util2 = _interopRequireDefault(require("../media/util"));
57
+ var _util2 = _interopRequireDefault(require("../recording-controller/util"));
58
+ var _util3 = _interopRequireDefault(require("../media/util"));
58
59
  var _transcription = _interopRequireDefault(require("../transcription"));
60
+ var _reactions = require("../reactions/reactions");
59
61
  var _passwordError = _interopRequireDefault(require("../common/errors/password-error"));
60
62
  var _captchaError = _interopRequireDefault(require("../common/errors/captcha-error"));
61
63
  var _reconnection = _interopRequireDefault(require("../common/errors/reconnection"));
@@ -70,8 +72,10 @@ var _receiveSlotManager = require("../multistream/receiveSlotManager");
70
72
  var _mediaRequestManager = require("../multistream/mediaRequestManager");
71
73
  var _remoteMediaManager = require("../multistream/remoteMediaManager");
72
74
  var _multistreamMedia = require("../multistream/multistreamMedia");
73
- var _reactions = require("../reactions/reactions");
75
+ var _breakouts = _interopRequireDefault(require("../breakouts"));
74
76
  var _inMeetingActions = _interopRequireDefault(require("./in-meeting-actions"));
77
+ var _constants3 = require("../reactions/constants");
78
+ var _recordingController = _interopRequireDefault(require("../recording-controller"));
75
79
  function ownKeys(object, enumerableOnly) { var keys = _Object$keys2(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
76
80
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
77
81
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
@@ -399,6 +403,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
399
403
  * @memberof Meeting
400
404
  */
401
405
  function Meeting(attrs, _options) {
406
+ var _this$locusInfo, _this$locusInfo$links, _this$locusInfo$links2, _this$locusInfo$links3, _this$locusInfo2, _this$locusInfo2$full, _this$locusInfo3;
402
407
  var _this;
403
408
  (0, _classCallCheck2.default)(this, Meeting);
404
409
  _this = _super.call(this, {}, _options);
@@ -411,6 +416,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
411
416
  */
412
417
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "attrs", void 0);
413
418
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "audio", void 0);
419
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "breakouts", void 0);
414
420
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "conversationUrl", void 0);
415
421
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "correlationId", void 0);
416
422
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "destination", void 0);
@@ -467,6 +473,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
467
473
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "queuedMediaUpdates", void 0);
468
474
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "recording", void 0);
469
475
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "remoteMediaManager", void 0);
476
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "recordingController", void 0);
470
477
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "requiredCaptcha", void 0);
471
478
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "receiveSlotManager", void 0);
472
479
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "shareStatus", void 0);
@@ -492,6 +499,31 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
492
499
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "selfId", void 0);
493
500
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "state", void 0);
494
501
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "namespace", _constants.MEETINGS);
502
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "processRelayEvent", function (e) {
503
+ switch (e.data.relayType) {
504
+ case _constants3.REACTION_RELAY_TYPES.REACTION:
505
+ if (
506
+ // @ts-ignore - config coming from registerPlugin
507
+ (_this.config.receiveReactions || options.receiveReactions) && _this.isReactionsSupported()) {
508
+ var _this$members$members = _this.members.membersCollection.get(e.data.sender.participantId),
509
+ name = _this$members$members.name;
510
+ var processedReaction = {
511
+ reaction: e.data.reaction,
512
+ sender: {
513
+ id: e.data.sender.participantId,
514
+ name: name
515
+ }
516
+ };
517
+ _triggerProxy.default.trigger((0, _assertThisInitialized2.default)(_this), {
518
+ file: 'meeting/index',
519
+ function: 'join'
520
+ }, _constants.EVENT_TRIGGERS.MEETING_RECEIVE_REACTIONS, processedReaction);
521
+ }
522
+ break;
523
+ default:
524
+ break;
525
+ }
526
+ });
495
527
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "getMediaStreams", function (mediaDirection) {
496
528
  var audioVideo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _constants.VIDEO_RESOLUTIONS[_this.mediaProperties.localQualityLevel];
497
529
  var sharePreferences = arguments.length > 2 ? arguments[2] : undefined;
@@ -599,7 +631,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
599
631
  };
600
632
  _metrics.default.sendBehavioralMetric(metricName, data, metadata);
601
633
  };
602
- if (error instanceof _internalMediaCore.MediaConnection.Errors.SdpOfferCreationError) {
634
+ if (error instanceof _internalMediaCore.Errors.SdpOfferCreationError) {
603
635
  sendBehavioralMetric(_constants2.default.PEERCONNECTION_FAILURE, error, _this.id);
604
636
  _metrics.default.postEvent({
605
637
  event: _config.eventType.LOCAL_SDP_GENERATED,
@@ -609,7 +641,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
609
641
  errors: [_metrics.default.generateErrorPayload(2001, true, _config.error.name.MEDIA_ENGINE, undefined)]
610
642
  }
611
643
  });
612
- } else if (error instanceof _internalMediaCore.MediaConnection.Errors.SdpOfferHandlingError || error instanceof _internalMediaCore.MediaConnection.Errors.SdpAnswerHandlingError) {
644
+ } else if (error instanceof _internalMediaCore.Errors.SdpOfferHandlingError || error instanceof _internalMediaCore.Errors.SdpAnswerHandlingError) {
613
645
  sendBehavioralMetric(_constants2.default.PEERCONNECTION_FAILURE, error, _this.id);
614
646
  _metrics.default.postEvent({
615
647
  event: _config.eventType.REMOTE_SDP_RECEIVED,
@@ -619,8 +651,8 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
619
651
  errors: [_metrics.default.generateErrorPayload(2001, true, _config.error.name.MEDIA_ENGINE, undefined)]
620
652
  }
621
653
  });
622
- } else if (error instanceof _internalMediaCore.MediaConnection.Errors.SdpError) {
623
- // this covers also the case of MC.Errors.IceGatheringError which extends MC.Errors.SdpError
654
+ } else if (error instanceof _internalMediaCore.Errors.SdpError) {
655
+ // this covers also the case of Errors.IceGatheringError which extends Errors.SdpError
624
656
  sendBehavioralMetric(_constants2.default.INVALID_ICE_CANDIDATE, error, _this.id);
625
657
  _metrics.default.postEvent({
626
658
  event: _config.eventType.LOCAL_SDP_GENERATED,
@@ -633,16 +665,16 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
633
665
  }
634
666
  });
635
667
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "setupMediaConnectionListeners", function () {
636
- _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.MediaConnection.Event.ROAP_STARTED, function () {
668
+ _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.Event.ROAP_STARTED, function () {
637
669
  _this.isRoapInProgress = true;
638
670
  });
639
- _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.MediaConnection.Event.ROAP_DONE, function () {
671
+ _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.Event.ROAP_DONE, function () {
640
672
  _this.mediaNegotiatedEvent();
641
673
  _this.isRoapInProgress = false;
642
674
  _this.processNextQueuedMediaUpdate();
643
675
  });
644
- _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.MediaConnection.Event.ROAP_FAILURE, _this.handleRoapFailure);
645
- _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.MediaConnection.Event.ROAP_MESSAGE_TO_SEND, function (event) {
676
+ _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.Event.ROAP_FAILURE, _this.handleRoapFailure);
677
+ _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.Event.ROAP_MESSAGE_TO_SEND, function (event) {
646
678
  var LOG_HEADER = 'Meeting:index#setupMediaConnectionListeners.ROAP_MESSAGE_TO_SEND -->';
647
679
  switch (event.roapMessage.messageType) {
648
680
  case 'OK':
@@ -707,7 +739,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
707
739
  });
708
740
  break;
709
741
  case 'ERROR':
710
- if (event.roapMessage.errorType === _internalMediaCore.MediaConnection.ErrorType.CONFLICT || event.roapMessage.errorType === _internalMediaCore.MediaConnection.ErrorType.DOUBLECONFLICT) {
742
+ if (event.roapMessage.errorType === _internalMediaCore.ErrorType.CONFLICT || event.roapMessage.errorType === _internalMediaCore.ErrorType.DOUBLECONFLICT) {
711
743
  _metrics.default.sendBehavioralMetric(_constants2.default.ROAP_GLARE_CONDITION, {
712
744
  correlation_id: _this.correlationId,
713
745
  locus_id: _this.locusUrl.split('/').pop(),
@@ -732,22 +764,22 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
732
764
  });
733
765
 
734
766
  // eslint-disable-next-line no-param-reassign
735
- _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.MediaConnection.Event.REMOTE_TRACK_ADDED, function (event) {
767
+ _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.Event.REMOTE_TRACK_ADDED, function (event) {
736
768
  _loggerProxy.default.logger.log("Meeting:index#setupMediaConnectionListeners --> REMOTE_TRACK_ADDED event received for webrtcMediaConnection: ".concat((0, _stringify.default)(event)));
737
769
  var mediaTrack = event.track;
738
770
 
739
771
  // eslint-disable-next-line @typescript-eslint/no-shadow
740
772
  var eventType;
741
773
  switch (event.type) {
742
- case _internalMediaCore.MediaConnection.RemoteTrackType.AUDIO:
774
+ case _internalMediaCore.RemoteTrackType.AUDIO:
743
775
  eventType = _constants.EVENT_TYPES.REMOTE_AUDIO;
744
776
  _this.mediaProperties.setRemoteAudioTrack(event.track);
745
777
  break;
746
- case _internalMediaCore.MediaConnection.RemoteTrackType.VIDEO:
778
+ case _internalMediaCore.RemoteTrackType.VIDEO:
747
779
  eventType = _constants.EVENT_TYPES.REMOTE_VIDEO;
748
780
  _this.mediaProperties.setRemoteVideoTrack(event.track);
749
781
  break;
750
- case _internalMediaCore.MediaConnection.RemoteTrackType.SCREENSHARE_VIDEO:
782
+ case _internalMediaCore.RemoteTrackType.SCREENSHARE_VIDEO:
751
783
  if (event.track) {
752
784
  eventType = _constants.EVENT_TYPES.REMOTE_SHARE;
753
785
  _this.mediaProperties.setRemoteShare(event.track);
@@ -768,11 +800,11 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
768
800
  function: 'setupRemoteTrackListener:Event.REMOTE_TRACK_ADDED'
769
801
  }, _constants.EVENT_TRIGGERS.MEDIA_READY, {
770
802
  type: eventType,
771
- stream: _util2.default.createMediaStream([mediaTrack])
803
+ stream: _util3.default.createMediaStream([mediaTrack])
772
804
  });
773
805
  }
774
806
  });
775
- _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.MediaConnection.Event.CONNECTION_STATE_CHANGED, function (event) {
807
+ _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.Event.CONNECTION_STATE_CHANGED, function (event) {
776
808
  var connectionFailed = function connectionFailed() {
777
809
  // we know the media connection failed and browser will not attempt to recover it any more
778
810
  // so reset the timer as it's not needed anymore, we want to reconnect immediately
@@ -799,13 +831,13 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
799
831
  };
800
832
  _loggerProxy.default.logger.info("Meeting:index#setupMediaConnectionListeners --> connection state changed to ".concat(event.state));
801
833
  switch (event.state) {
802
- case _internalMediaCore.MediaConnection.ConnectionState.Connecting:
834
+ case _internalMediaCore.ConnectionState.Connecting:
803
835
  _metrics.default.postEvent({
804
836
  event: _config.eventType.ICE_START,
805
837
  meeting: (0, _assertThisInitialized2.default)(_this)
806
838
  });
807
839
  break;
808
- case _internalMediaCore.MediaConnection.ConnectionState.Connected:
840
+ case _internalMediaCore.ConnectionState.Connected:
809
841
  _metrics.default.postEvent({
810
842
  event: _config.eventType.ICE_END,
811
843
  meeting: (0, _assertThisInitialized2.default)(_this)
@@ -817,27 +849,29 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
817
849
  _this.setNetworkStatus(_constants.NETWORK_STATUS.CONNECTED);
818
850
  _this.reconnectionManager.iceReconnected();
819
851
  break;
820
- case _internalMediaCore.MediaConnection.ConnectionState.Disconnected:
852
+ case _internalMediaCore.ConnectionState.Disconnected:
821
853
  _this.setNetworkStatus(_constants.NETWORK_STATUS.DISCONNECTED);
822
854
  _this.reconnectionManager.waitForIceReconnect().catch(function () {
823
855
  _loggerProxy.default.logger.info('Meeting:index#setupMediaConnectionListeners --> state DISCONNECTED, automatic reconnection timed out.');
824
856
  connectionFailed();
825
857
  });
826
858
  break;
827
- case _internalMediaCore.MediaConnection.ConnectionState.Failed:
859
+ case _internalMediaCore.ConnectionState.Failed:
828
860
  connectionFailed();
829
861
  break;
830
862
  default:
831
863
  break;
832
864
  }
833
865
  });
834
- _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.MediaConnection.Event.ACTIVE_SPEAKERS_CHANGED, function (msg) {
866
+ _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.Event.ACTIVE_SPEAKERS_CHANGED, function (msg) {
835
867
  _triggerProxy.default.trigger((0, _assertThisInitialized2.default)(_this), {
836
868
  file: 'meeting/index',
837
869
  function: 'setupMediaConnectionListeners'
838
870
  }, _constants.EVENT_TRIGGERS.ACTIVE_SPEAKER_CHANGED, {
839
871
  seqNum: msg.seqNum,
840
- memberIds: msg.csis.map(function (csi) {
872
+ memberIds: msg.csis
873
+ // @ts-ignore
874
+ .map(function (csi) {
841
875
  var _this$members$findMem;
842
876
  return (_this$members$findMem = _this.members.findMemberByCsi(csi)) === null || _this$members$findMem === void 0 ? void 0 : _this$members$findMem.id;
843
877
  }).filter(function (item) {
@@ -845,7 +879,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
845
879
  })
846
880
  });
847
881
  });
848
- _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.MediaConnection.Event.VIDEO_SOURCES_COUNT_CHANGED, function (numTotalSources, numLiveSources) {
882
+ _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.Event.VIDEO_SOURCES_COUNT_CHANGED, function (numTotalSources, numLiveSources) {
849
883
  _triggerProxy.default.trigger((0, _assertThisInitialized2.default)(_this), {
850
884
  file: 'meeting/index',
851
885
  function: 'setupMediaConnectionListeners'
@@ -854,7 +888,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
854
888
  numLiveSources: numLiveSources
855
889
  });
856
890
  });
857
- _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.MediaConnection.Event.AUDIO_SOURCES_COUNT_CHANGED, function (numTotalSources, numLiveSources) {
891
+ _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.Event.AUDIO_SOURCES_COUNT_CHANGED, function (numTotalSources, numLiveSources) {
858
892
  _triggerProxy.default.trigger((0, _assertThisInitialized2.default)(_this), {
859
893
  file: 'meeting/index',
860
894
  function: 'setupMediaConnectionListeners'
@@ -870,7 +904,9 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
870
904
  // TODO: might have to send the same event to the developer
871
905
  // Add ip address info if geo hint is present
872
906
  // @ts-ignore fix type
873
- options.data.intervalMetadata.peerReflexiveIP = ((_this$webex$meetings$ = _this.webex.meetings.geoHintInfo) === null || _this$webex$meetings$ === void 0 ? void 0 : _this$webex$meetings$.clientAddress) || options.data.intervalMetadata.peerReflexiveIP || _constants.MQA_STATS.DEFAULT_IP;
907
+ options.data.intervalMetadata.peerReflexiveIP =
908
+ // @ts-ignore
909
+ ((_this$webex$meetings$ = _this.webex.meetings.geoHintInfo) === null || _this$webex$meetings$ === void 0 ? void 0 : _this$webex$meetings$.clientAddress) || options.data.intervalMetadata.peerReflexiveIP || _constants.MQA_STATS.DEFAULT_IP;
874
910
  _metrics.default.postEvent({
875
911
  event: _config.eventType.MEDIA_QUALITY,
876
912
  meeting: (0, _assertThisInitialized2.default)(_this),
@@ -941,20 +977,20 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
941
977
  pendingPromiseResolve = _this$queuedMediaUpda.pendingPromiseResolve,
942
978
  pendingPromiseReject = _this$queuedMediaUpda.pendingPromiseReject,
943
979
  mediaUpdateType = _this$queuedMediaUpda.mediaUpdateType,
944
- options = _this$queuedMediaUpda.options;
980
+ _options2 = _this$queuedMediaUpda.options;
945
981
  _loggerProxy.default.logger.log("Meeting:index#processNextQueuedMediaUpdate --> performing delayed media update type=".concat(mediaUpdateType));
946
982
  switch (mediaUpdateType) {
947
983
  case MEDIA_UPDATE_TYPE.ALL:
948
- _this.updateMedia(options).then(pendingPromiseResolve, pendingPromiseReject);
984
+ _this.updateMedia(_options2).then(pendingPromiseResolve, pendingPromiseReject);
949
985
  break;
950
986
  case MEDIA_UPDATE_TYPE.AUDIO:
951
- _this.updateAudio(options).then(pendingPromiseResolve, pendingPromiseReject);
987
+ _this.updateAudio(_options2).then(pendingPromiseResolve, pendingPromiseReject);
952
988
  break;
953
989
  case MEDIA_UPDATE_TYPE.VIDEO:
954
- _this.updateVideo(options).then(pendingPromiseResolve, pendingPromiseReject);
990
+ _this.updateVideo(_options2).then(pendingPromiseResolve, pendingPromiseReject);
955
991
  break;
956
992
  case MEDIA_UPDATE_TYPE.SHARE:
957
- _this.updateShare(options).then(pendingPromiseResolve, pendingPromiseReject);
993
+ _this.updateShare(_options2).then(pendingPromiseResolve, pendingPromiseReject);
958
994
  break;
959
995
  default:
960
996
  _loggerProxy.default.logger.error("Peer-connection-manager:index#processNextQueuedMediaUpdate --> unsupported media update type ".concat(mediaUpdateType, " found in the queue"));
@@ -1081,28 +1117,58 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1081
1117
  */
1082
1118
  // TODO: needs to be defined as a class
1083
1119
  _this.meetingInfo = {};
1120
+ /**
1121
+ * @instance
1122
+ * @type {Breakouts}
1123
+ * @public
1124
+ * @memberof Meeting
1125
+ */
1126
+ // @ts-ignore
1127
+ _this.breakouts = new _breakouts.default({}, {
1128
+ parent: _this.webex
1129
+ });
1084
1130
  /**
1085
1131
  * helper class for managing receive slots (for multistream media connections)
1086
1132
  */
1087
1133
  _this.receiveSlotManager = new _receiveSlotManager.ReceiveSlotManager((0, _assertThisInitialized2.default)(_this));
1088
1134
  /**
1089
- * Helper class for managing media requests for main video (for multistream media connections)
1090
- * All media requests sent out for main video for this meeting have to go through it.
1135
+ * Object containing helper classes for managing media requests for audio/video/screenshare (for multistream media connections)
1136
+ * All multistream media requests sent out for this meeting have to go through them.
1091
1137
  */
1092
1138
  _this.mediaRequestManagers = {
1093
- audio: new _mediaRequestManager.MediaRequestManager(function (mediaRequests) {
1139
+ // @ts-ignore - config coming from registerPlugin
1140
+ audio: new _mediaRequestManager.MediaRequestManager(_this.config.degradationPreferences, function (mediaRequests) {
1094
1141
  if (!_this.mediaProperties.webrtcMediaConnection) {
1095
1142
  _loggerProxy.default.logger.warn('Meeting:index#mediaRequestManager --> trying to send audio media request before media connection was created');
1096
1143
  return;
1097
1144
  }
1098
- _this.mediaProperties.webrtcMediaConnection.requestMedia(_internalMediaCore.MediaConnection.MediaType.AudioMain, mediaRequests);
1145
+ _this.mediaProperties.webrtcMediaConnection.requestMedia(_internalMediaCore.MediaType.AudioMain, mediaRequests);
1099
1146
  }),
1100
- video: new _mediaRequestManager.MediaRequestManager(function (mediaRequests) {
1147
+ // @ts-ignore - config coming from registerPlugin
1148
+ video: new _mediaRequestManager.MediaRequestManager(_this.config.degradationPreferences, function (mediaRequests) {
1101
1149
  if (!_this.mediaProperties.webrtcMediaConnection) {
1102
1150
  _loggerProxy.default.logger.warn('Meeting:index#mediaRequestManager --> trying to send video media request before media connection was created');
1103
1151
  return;
1104
1152
  }
1105
- _this.mediaProperties.webrtcMediaConnection.requestMedia(_internalMediaCore.MediaConnection.MediaType.VideoMain, mediaRequests);
1153
+ _this.mediaProperties.webrtcMediaConnection.requestMedia(_internalMediaCore.MediaType.VideoMain, mediaRequests);
1154
+ }),
1155
+ screenShareAudio: new _mediaRequestManager.MediaRequestManager(
1156
+ // @ts-ignore - config coming from registerPlugin
1157
+ _this.config.degradationPreferences, function (mediaRequests) {
1158
+ if (!_this.mediaProperties.webrtcMediaConnection) {
1159
+ _loggerProxy.default.logger.warn('Meeting:index#mediaRequestManager --> trying to send screenshare audio media request before media connection was created');
1160
+ return;
1161
+ }
1162
+ _this.mediaProperties.webrtcMediaConnection.requestMedia(_internalMediaCore.MediaType.AudioSlides, mediaRequests);
1163
+ }),
1164
+ screenShareVideo: new _mediaRequestManager.MediaRequestManager(
1165
+ // @ts-ignore - config coming from registerPlugin
1166
+ _this.config.degradationPreferences, function (mediaRequests) {
1167
+ if (!_this.mediaProperties.webrtcMediaConnection) {
1168
+ _loggerProxy.default.logger.warn('Meeting:index#mediaRequestManager --> trying to send screenshare video media request before media connection was created');
1169
+ return;
1170
+ }
1171
+ _this.mediaProperties.webrtcMediaConnection.requestMedia(_internalMediaCore.MediaType.VideoSlides, mediaRequests);
1106
1172
  })
1107
1173
  };
1108
1174
  /**
@@ -1115,8 +1181,9 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1115
1181
  locusUrl: attrs.locus && attrs.locus.url,
1116
1182
  receiveSlotManager: _this.receiveSlotManager,
1117
1183
  mediaRequestManagers: _this.mediaRequestManagers
1118
- // @ts-ignore - Fix type
1119
- }, {
1184
+ },
1185
+ // @ts-ignore - Fix type
1186
+ {
1120
1187
  parent: _this.webex
1121
1188
  });
1122
1189
  /**
@@ -1421,6 +1488,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1421
1488
  */
1422
1489
  // @ts-ignore - Fix type
1423
1490
  _this.locusInfo = new _locusInfo.default(_this.updateMeetingObject.bind((0, _assertThisInitialized2.default)(_this)), _this.webex, _this.id);
1491
+
1424
1492
  // We had to add listeners first before setting up the locus instance
1425
1493
  /**
1426
1494
  * @instance
@@ -1523,6 +1591,20 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1523
1591
  * @memberof Meeting
1524
1592
  */
1525
1593
  _this.keepAliveTimerId = null;
1594
+
1595
+ /**
1596
+ * The class that helps to control recording functions: start, stop, pause, resume, etc
1597
+ * @instance
1598
+ * @type {RecordingController}
1599
+ * @public
1600
+ * @memberof Meeting
1601
+ */
1602
+ _this.recordingController = new _recordingController.default(_this.meetingRequest, {
1603
+ serviceUrl: (_this$locusInfo = _this.locusInfo) === null || _this$locusInfo === void 0 ? void 0 : (_this$locusInfo$links = _this$locusInfo.links) === null || _this$locusInfo$links === void 0 ? void 0 : (_this$locusInfo$links2 = _this$locusInfo$links.services) === null || _this$locusInfo$links2 === void 0 ? void 0 : (_this$locusInfo$links3 = _this$locusInfo$links2.record) === null || _this$locusInfo$links3 === void 0 ? void 0 : _this$locusInfo$links3.url,
1604
+ sessionId: (_this$locusInfo2 = _this.locusInfo) === null || _this$locusInfo2 === void 0 ? void 0 : (_this$locusInfo2$full = _this$locusInfo2.fullState) === null || _this$locusInfo2$full === void 0 ? void 0 : _this$locusInfo2$full.sessionId,
1605
+ locusUrl: (_this$locusInfo3 = _this.locusInfo) === null || _this$locusInfo3 === void 0 ? void 0 : _this$locusInfo3.url,
1606
+ displayHints: []
1607
+ });
1526
1608
  _this.setUpLocusInfoListeners();
1527
1609
  _this.locusInfo.init(attrs.locus ? attrs.locus : {});
1528
1610
  _this.hasJoinedOnce = false;
@@ -1600,8 +1682,8 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1600
1682
  _context.next = 33;
1601
1683
  break;
1602
1684
  }
1603
- // @ts-ignore
1604
- _loggerProxy.default.logger.info("Meeting:index#fetchMeetingInfo --> Info Unable to fetch meeting info for ".concat(this.destination, " - password required (code=").concat(_context.t0 === null || _context.t0 === void 0 ? void 0 : (_err$body = _context.t0.body) === null || _err$body === void 0 ? void 0 : _err$body.code, ")."));
1685
+ _loggerProxy.default.logger.info( // @ts-ignore
1686
+ "Meeting:index#fetchMeetingInfo --> Info Unable to fetch meeting info for ".concat(this.destination, " - password required (code=").concat(_context.t0 === null || _context.t0 === void 0 ? void 0 : (_err$body = _context.t0.body) === null || _err$body === void 0 ? void 0 : _err$body.code, ")."));
1605
1687
 
1606
1688
  // when wbxappapi requires password it still populates partial meeting info in the response
1607
1689
  if (_context.t0.meetingInfo) {
@@ -1623,8 +1705,8 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1623
1705
  _context.next = 41;
1624
1706
  break;
1625
1707
  }
1626
- // @ts-ignore
1627
- _loggerProxy.default.logger.info("Meeting:index#fetchMeetingInfo --> Info Unable to fetch meeting info for ".concat(this.destination, " - captcha required (code=").concat(_context.t0 === null || _context.t0 === void 0 ? void 0 : (_err$body2 = _context.t0.body) === null || _err$body2 === void 0 ? void 0 : _err$body2.code, ")."));
1708
+ _loggerProxy.default.logger.info( // @ts-ignore
1709
+ "Meeting:index#fetchMeetingInfo --> Info Unable to fetch meeting info for ".concat(this.destination, " - captcha required (code=").concat(_context.t0 === null || _context.t0 === void 0 ? void 0 : (_err$body2 = _context.t0.body) === null || _err$body2 === void 0 ? void 0 : _err$body2.code, ")."));
1628
1710
  this.meetingInfoFailureReason = this.requiredCaptcha ? _constants.MEETING_INFO_FAILURE_REASON.WRONG_CAPTCHA : _constants.MEETING_INFO_FAILURE_REASON.WRONG_PASSWORD;
1629
1711
  if (_context.t0.isPasswordRequired) {
1630
1712
  this.passwordStatus = _constants.PASSWORD_STATUS.REQUIRED;
@@ -1699,7 +1781,9 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1699
1781
  // we have to pass the wbxappapi hostname as the siteFullName parameter
1700
1782
  var _URL = new URL(this.requiredCaptcha.refreshURL),
1701
1783
  hostname = _URL.hostname;
1702
- return this.meetingRequest.refreshCaptcha({
1784
+ return this.meetingRequest
1785
+ // @ts-ignore
1786
+ .refreshCaptcha({
1703
1787
  captchaRefreshUrl: "".concat(this.requiredCaptcha.refreshURL, "&siteFullName=").concat(hostname),
1704
1788
  captchaId: this.requiredCaptcha.captchaId
1705
1789
  }).then(function (response) {
@@ -1724,6 +1808,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1724
1808
  // meeting update listeners
1725
1809
  this.setUpLocusInfoSelfListener();
1726
1810
  this.setUpLocusInfoMeetingListener();
1811
+ this.setUpLocusServicesListener();
1727
1812
  // members update listeners
1728
1813
  this.setUpLocusFullStateListener();
1729
1814
  this.setUpLocusUrlListener();
@@ -1736,6 +1821,37 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1736
1821
  this.setUpLocusInfoMeetingInfoListener();
1737
1822
  this.setUpLocusInfoAssignHostListener();
1738
1823
  this.setUpLocusInfoMediaInactiveListener();
1824
+ this.setUpBreakoutsListener();
1825
+ }
1826
+
1827
+ /**
1828
+ * Set up the listeners for breakouts
1829
+ * @returns {undefined}
1830
+ * @private
1831
+ * @memberof Meeting
1832
+ */
1833
+ }, {
1834
+ key: "setUpBreakoutsListener",
1835
+ value: function setUpBreakoutsListener() {
1836
+ var _this4 = this;
1837
+ this.breakouts.on(_constants.BREAKOUTS.EVENTS.BREAKOUTS_CLOSING, function () {
1838
+ _triggerProxy.default.trigger(_this4, {
1839
+ file: 'meeting/index',
1840
+ function: 'setUpBreakoutsListener'
1841
+ }, _constants.EVENT_TRIGGERS.MEETING_BREAKOUTS_CLOSING);
1842
+ });
1843
+ this.breakouts.on(_constants.BREAKOUTS.EVENTS.MESSAGE, function (messageEvent) {
1844
+ _triggerProxy.default.trigger(_this4, {
1845
+ file: 'meeting/index',
1846
+ function: 'setUpBreakoutsListener'
1847
+ }, _constants.EVENT_TRIGGERS.MEETING_BREAKOUTS_MESSAGE, messageEvent);
1848
+ });
1849
+ this.breakouts.on(_constants.BREAKOUTS.EVENTS.MEMBERS_UPDATE, function () {
1850
+ _triggerProxy.default.trigger(_this4, {
1851
+ file: 'meeting/index',
1852
+ function: 'setUpBreakoutsListener'
1853
+ }, _constants.EVENT_TRIGGERS.MEETING_BREAKOUTS_UPDATE);
1854
+ });
1739
1855
  }
1740
1856
 
1741
1857
  /**
@@ -1747,30 +1863,30 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1747
1863
  }, {
1748
1864
  key: "setUpLocusInfoMediaInactiveListener",
1749
1865
  value: function setUpLocusInfoMediaInactiveListener() {
1750
- var _this4 = this;
1866
+ var _this5 = this;
1751
1867
  // User gets kicked off the meeting due to inactivity or user did a refresh
1752
1868
  this.locusInfo.on(_constants.EVENTS.DISCONNECT_DUE_TO_INACTIVITY, function (res) {
1753
1869
  // https:// jira-eng-gpk2.cisco.com/jira/browse/SPARK-240520
1754
1870
  // TODO: send custom parameter explaining why the inactivity happened
1755
1871
  // refresh , no media or network got dsconnected or something else
1756
1872
  _metrics.default.sendBehavioralMetric(_constants2.default.DISCONNECT_DUE_TO_INACTIVITY, {
1757
- correlation_id: _this4.correlationId,
1758
- locus_id: _this4.locusId
1873
+ correlation_id: _this5.correlationId,
1874
+ locus_id: _this5.locusId
1759
1875
  });
1760
1876
 
1761
1877
  // Upload logs on media inactivity
1762
1878
  // Normally media should not be inactive
1763
- _triggerProxy.default.trigger(_this4, {
1879
+ _triggerProxy.default.trigger(_this5, {
1764
1880
  file: 'meeting/index',
1765
1881
  function: 'setUpLocusInfoMediaInactiveListener'
1766
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this4);
1882
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this5);
1767
1883
  _loggerProxy.default.logger.error("Meeting:index#setUpLocusInfoMediaInactiveListener --> Meeting disconnected due to inactivity: ".concat(res.reason));
1768
1884
 
1769
1885
  // @ts-ignore - config coming from registerPlugin
1770
- if (_this4.config.reconnection.autoRejoin) {
1771
- _this4.reconnect();
1886
+ if (_this5.config.reconnection.autoRejoin) {
1887
+ _this5.reconnect();
1772
1888
  } else {
1773
- _triggerProxy.default.trigger(_this4, {
1889
+ _triggerProxy.default.trigger(_this5, {
1774
1890
  file: 'meeting/index',
1775
1891
  function: 'setUpLocusInfoMediaInactiveListener'
1776
1892
  }, _constants.EVENT_TRIGGERS.MEETING_SELF_LEFT, res.reason);
@@ -1787,16 +1903,16 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1787
1903
  }, {
1788
1904
  key: "setUpLocusInfoAssignHostListener",
1789
1905
  value: function setUpLocusInfoAssignHostListener() {
1790
- var _this5 = this;
1906
+ var _this6 = this;
1791
1907
  this.locusInfo.on(_constants.EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST, function (payload) {
1792
- var changed = _this5.inMeetingActions.set({
1908
+ var changed = _this6.inMeetingActions.set({
1793
1909
  canAssignHost: payload.canAssignHost
1794
1910
  });
1795
1911
  if (changed) {
1796
- _triggerProxy.default.trigger(_this5, {
1912
+ _triggerProxy.default.trigger(_this6, {
1797
1913
  file: 'meeting/index',
1798
1914
  function: 'setUpLocusInfoAssignHostListener'
1799
- }, _constants.EVENT_TRIGGERS.MEETING_ACTIONS_UPDATE, _this5.inMeetingActions.get());
1915
+ }, _constants.EVENT_TRIGGERS.MEETING_ACTIONS_UPDATE, _this6.inMeetingActions.get());
1800
1916
  }
1801
1917
  });
1802
1918
  }
@@ -1810,9 +1926,9 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1810
1926
  }, {
1811
1927
  key: "setUpLocusFullStateListener",
1812
1928
  value: function setUpLocusFullStateListener() {
1813
- var _this6 = this;
1929
+ var _this7 = this;
1814
1930
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.FULL_STATE_MEETING_STATE_CHANGE, function (payload) {
1815
- _triggerProxy.default.trigger(_this6, {
1931
+ _triggerProxy.default.trigger(_this7, {
1816
1932
  file: 'meeting/index',
1817
1933
  function: 'setUpLocusFullStateListener'
1818
1934
  }, _constants.EVENT_TRIGGERS.MEETING_STATE_CHANGE, {
@@ -1820,7 +1936,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
1820
1936
  });
1821
1937
  });
1822
1938
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.FULL_STATE_TYPE_UPDATE, function (payload) {
1823
- _this6.members.locusFullStateTypeUpdate(payload);
1939
+ _this7.members.locusFullStateTypeUpdate(payload);
1824
1940
  });
1825
1941
  }
1826
1942
 
@@ -2009,15 +2125,15 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2009
2125
  }, {
2010
2126
  key: "setUpLocusSelfListener",
2011
2127
  value: function setUpLocusSelfListener() {
2012
- var _this7 = this;
2128
+ var _this8 = this;
2013
2129
  this.locusInfo.on(_constants.EVENTS.LOCUS_INFO_UPDATE_SELF, function (payload) {
2014
- _this7.members.locusSelfUpdate(payload);
2015
- _this7.pstnUpdate(payload);
2130
+ _this8.members.locusSelfUpdate(payload);
2131
+ _this8.pstnUpdate(payload);
2016
2132
 
2017
2133
  // If user moved to a JOINED state and there is a pending floor grant trigger it
2018
- if (_this7.floorGrantPending && payload.newSelf.state === _constants.MEETING_STATE.STATES.JOINED) {
2019
- _this7.requestScreenShareFloor().then(function () {
2020
- _this7.floorGrantPending = false;
2134
+ if (_this8.floorGrantPending && payload.newSelf.state === _constants.MEETING_STATE.STATES.JOINED) {
2135
+ _this8.requestScreenShareFloor().then(function () {
2136
+ _this8.floorGrantPending = false;
2021
2137
  });
2022
2138
  }
2023
2139
  });
@@ -2033,14 +2149,14 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2033
2149
  }, {
2034
2150
  key: "pstnUpdate",
2035
2151
  value: function pstnUpdate(payload) {
2036
- var _this8 = this;
2152
+ var _this9 = this;
2037
2153
  if (this.locusInfo.self) {
2038
2154
  var _payload$newSelf, _payload$newSelf2;
2039
2155
  var dialInPstnDevice = (_payload$newSelf = payload.newSelf) === null || _payload$newSelf === void 0 ? void 0 : _payload$newSelf.pstnDevices.find(function (device) {
2040
- return device.url === _this8.dialInUrl;
2156
+ return device.url === _this9.dialInUrl;
2041
2157
  });
2042
2158
  var dialOutPstnDevice = (_payload$newSelf2 = payload.newSelf) === null || _payload$newSelf2 === void 0 ? void 0 : _payload$newSelf2.pstnDevices.find(function (device) {
2043
- return device.url === _this8.dialOutUrl;
2159
+ return device.url === _this9.dialOutUrl;
2044
2160
  });
2045
2161
  var changed = false;
2046
2162
  if (dialInPstnDevice) {
@@ -2088,9 +2204,9 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2088
2204
  }, {
2089
2205
  key: "setUpLocusHostListener",
2090
2206
  value: function setUpLocusHostListener() {
2091
- var _this9 = this;
2207
+ var _this10 = this;
2092
2208
  this.locusInfo.on(_constants.EVENTS.LOCUS_INFO_UPDATE_HOST, function (payload) {
2093
- _this9.members.locusHostUpdate(payload);
2209
+ _this10.members.locusHostUpdate(payload);
2094
2210
  });
2095
2211
  }
2096
2212
 
@@ -2105,9 +2221,9 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2105
2221
  }, {
2106
2222
  key: "setUpLocusParticipantsListener",
2107
2223
  value: function setUpLocusParticipantsListener() {
2108
- var _this10 = this;
2224
+ var _this11 = this;
2109
2225
  this.locusInfo.on(_constants.EVENTS.LOCUS_INFO_UPDATE_PARTICIPANTS, function (payload) {
2110
- _this10.members.locusParticipantsUpdate(payload);
2226
+ _this11.members.locusParticipantsUpdate(payload);
2111
2227
  });
2112
2228
  }
2113
2229
 
@@ -2132,7 +2248,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2132
2248
  }, {
2133
2249
  key: "setupLocusControlsListener",
2134
2250
  value: function setupLocusControlsListener() {
2135
- var _this11 = this;
2251
+ var _this12 = this;
2136
2252
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_RECORDING_UPDATED, function (_ref5) {
2137
2253
  var state = _ref5.state,
2138
2254
  modifiedBy = _ref5.modifiedBy,
@@ -2157,19 +2273,19 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2157
2273
  }
2158
2274
 
2159
2275
  // `RESUMED` state should be converted to `RECORDING` after triggering the event
2160
- _this11.recording = {
2276
+ _this12.recording = {
2161
2277
  state: state === _constants.RECORDING_STATE.RESUMED ? _constants.RECORDING_STATE.RECORDING : state,
2162
2278
  modifiedBy: modifiedBy,
2163
2279
  lastModified: lastModified
2164
2280
  };
2165
- _triggerProxy.default.trigger(_this11, {
2281
+ _triggerProxy.default.trigger(_this12, {
2166
2282
  file: 'meeting/index',
2167
2283
  function: 'setupLocusControlsListener'
2168
- }, event, _this11.recording);
2284
+ }, event, _this12.recording);
2169
2285
  });
2170
2286
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_CONTAINER_UPDATED, function (_ref6) {
2171
2287
  var meetingContainerUrl = _ref6.meetingContainerUrl;
2172
- _triggerProxy.default.trigger(_this11, {
2288
+ _triggerProxy.default.trigger(_this12, {
2173
2289
  file: 'meeting/index',
2174
2290
  function: 'setupLocusControlsListener'
2175
2291
  }, _constants.EVENT_TRIGGERS.MEETING_MEETING_CONTAINER_UPDATE, {
@@ -2180,10 +2296,10 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2180
2296
  var caption = _ref7.caption,
2181
2297
  transcribing = _ref7.transcribing;
2182
2298
  // @ts-ignore - config coming from registerPlugin
2183
- if (transcribing && _this11.transcription && _this11.config.receiveTranscription) {
2184
- _this11.receiveTranscription();
2185
- } else if (!transcribing && _this11.transcription) {
2186
- _triggerProxy.default.trigger(_this11, {
2299
+ if (transcribing && _this12.transcription && _this12.config.receiveTranscription) {
2300
+ _this12.receiveTranscription();
2301
+ } else if (!transcribing && _this12.transcription) {
2302
+ _triggerProxy.default.trigger(_this12, {
2187
2303
  file: 'meeting/index',
2188
2304
  function: 'setupLocusControlsListener'
2189
2305
  }, _constants.EVENT_TRIGGERS.MEETING_STOPPED_RECEIVING_TRANSCRIPTION, {
@@ -2192,9 +2308,17 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2192
2308
  });
2193
2309
  }
2194
2310
  });
2195
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED, function (_ref8) {
2196
- var entryExitTone = _ref8.entryExitTone;
2197
- _triggerProxy.default.trigger(_this11, {
2311
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED, function (_ref8) {
2312
+ var breakout = _ref8.breakout;
2313
+ _this12.breakouts.updateBreakout(breakout);
2314
+ _triggerProxy.default.trigger(_this12, {
2315
+ file: 'meeting/index',
2316
+ function: 'setupLocusControlsListener'
2317
+ }, _constants.EVENT_TRIGGERS.MEETING_BREAKOUTS_UPDATE);
2318
+ });
2319
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED, function (_ref9) {
2320
+ var entryExitTone = _ref9.entryExitTone;
2321
+ _triggerProxy.default.trigger(_this12, {
2198
2322
  file: 'meeting/index',
2199
2323
  function: 'setupLocusControlsListener'
2200
2324
  }, _constants.EVENT_TRIGGERS.MEETING_ENTRY_EXIT_TONE_UPDATE, {
@@ -2214,7 +2338,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2214
2338
  }, {
2215
2339
  key: "setUpLocusMediaSharesListener",
2216
2340
  value: function setUpLocusMediaSharesListener() {
2217
- var _this12 = this;
2341
+ var _this13 = this;
2218
2342
  // Will get triggered on local and remote share
2219
2343
  this.locusInfo.on(_constants.EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES, function (payload) {
2220
2344
  var _payload$previous, _payload$previous2;
@@ -2228,18 +2352,18 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2228
2352
  // (this happens when we steal presentation from remote)
2229
2353
  return;
2230
2354
  }
2231
- var newShareStatus = _this12.shareStatus;
2355
+ var newShareStatus = _this13.shareStatus;
2232
2356
 
2233
2357
  // REMOTE - check if remote started sharing
2234
- if (_this12.selfId !== contentShare.beneficiaryId && contentShare.disposition === _constants.FLOOR_ACTION.GRANTED) {
2358
+ if (_this13.selfId !== contentShare.beneficiaryId && contentShare.disposition === _constants.FLOOR_ACTION.GRANTED) {
2235
2359
  // CONTENT - sharing content remote
2236
2360
  newShareStatus = _constants.SHARE_STATUS.REMOTE_SHARE_ACTIVE;
2237
2361
  }
2238
2362
  // LOCAL - check if we started sharing content
2239
- else if (_this12.selfId === contentShare.beneficiaryId && contentShare.disposition === _constants.FLOOR_ACTION.GRANTED) {
2240
- var _this12$mediaProperti;
2241
- if (((_this12$mediaProperti = _this12.mediaProperties.shareTrack) === null || _this12$mediaProperti === void 0 ? void 0 : _this12$mediaProperti.readyState) === 'ended') {
2242
- _this12.stopShare({
2363
+ else if (_this13.selfId === contentShare.beneficiaryId && contentShare.disposition === _constants.FLOOR_ACTION.GRANTED) {
2364
+ var _this13$mediaProperti;
2365
+ if (((_this13$mediaProperti = _this13.mediaProperties.shareTrack) === null || _this13$mediaProperti === void 0 ? void 0 : _this13$mediaProperti.readyState) === 'ended') {
2366
+ _this13.stopShare({
2243
2367
  skipSignalingCheck: true
2244
2368
  }).catch(function (error) {
2245
2369
  _loggerProxy.default.logger.log('Meeting:index#setUpLocusMediaSharesListener --> Error stopping share: ', error);
@@ -2260,22 +2384,22 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2260
2384
  else if ((previousContentShare && contentShare.disposition === _constants.FLOOR_ACTION.RELEASED || contentShare.disposition === null) && (previousWhiteboardShare && whiteboardShare.disposition === _constants.FLOOR_ACTION.RELEASED || whiteboardShare.disposition === null)) {
2261
2385
  newShareStatus = _constants.SHARE_STATUS.NO_SHARE;
2262
2386
  }
2263
- if (newShareStatus !== _this12.shareStatus) {
2264
- var oldShareStatus = _this12.shareStatus;
2387
+ if (newShareStatus !== _this13.shareStatus) {
2388
+ var oldShareStatus = _this13.shareStatus;
2265
2389
 
2266
2390
  // update our state before we send out any notifications
2267
- _this12.shareStatus = newShareStatus;
2391
+ _this13.shareStatus = newShareStatus;
2268
2392
 
2269
2393
  // send out "stop" notifications for the old state
2270
2394
  switch (oldShareStatus) {
2271
2395
  case _constants.SHARE_STATUS.REMOTE_SHARE_ACTIVE:
2272
- _triggerProxy.default.trigger(_this12, {
2396
+ _triggerProxy.default.trigger(_this13, {
2273
2397
  file: 'meetings/index',
2274
2398
  function: 'remoteShare'
2275
2399
  }, _constants.EVENT_TRIGGERS.MEETING_STOPPED_SHARING_REMOTE);
2276
2400
  break;
2277
2401
  case _constants.SHARE_STATUS.LOCAL_SHARE_ACTIVE:
2278
- _triggerProxy.default.trigger(_this12, {
2402
+ _triggerProxy.default.trigger(_this13, {
2279
2403
  file: 'meeting/index',
2280
2404
  function: 'localShare'
2281
2405
  }, _constants.EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL, {
@@ -2283,7 +2407,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2283
2407
  });
2284
2408
  break;
2285
2409
  case _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE:
2286
- _triggerProxy.default.trigger(_this12, {
2410
+ _triggerProxy.default.trigger(_this13, {
2287
2411
  file: 'meeting/index',
2288
2412
  function: 'stopWhiteboardShare'
2289
2413
  }, _constants.EVENT_TRIGGERS.MEETING_STOPPED_SHARING_WHITEBOARD);
@@ -2299,9 +2423,9 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2299
2423
  switch (newShareStatus) {
2300
2424
  case _constants.SHARE_STATUS.REMOTE_SHARE_ACTIVE:
2301
2425
  {
2302
- var _this12$mediaProperti2;
2426
+ var _this13$mediaProperti2;
2303
2427
  var sendStartedSharingRemote = function sendStartedSharingRemote() {
2304
- _triggerProxy.default.trigger(_this12, {
2428
+ _triggerProxy.default.trigger(_this13, {
2305
2429
  file: 'meetings/index',
2306
2430
  function: 'remoteShare'
2307
2431
  }, _constants.EVENT_TRIGGERS.MEETING_STARTED_SHARING_REMOTE, {
@@ -2310,12 +2434,12 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2310
2434
  };
2311
2435
 
2312
2436
  // if a remote participant is stealing the presentation from us
2313
- if (!((_this12$mediaProperti2 = _this12.mediaProperties.mediaDirection) !== null && _this12$mediaProperti2 !== void 0 && _this12$mediaProperti2.sendShare) || oldShareStatus === _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE) {
2437
+ if (!((_this13$mediaProperti2 = _this13.mediaProperties.mediaDirection) !== null && _this13$mediaProperti2 !== void 0 && _this13$mediaProperti2.sendShare) || oldShareStatus === _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE) {
2314
2438
  sendStartedSharingRemote();
2315
2439
  } else {
2316
- _this12.updateShare({
2440
+ _this13.updateShare({
2317
2441
  sendShare: false,
2318
- receiveShare: _this12.mediaProperties.mediaDirection.receiveShare
2442
+ receiveShare: _this13.mediaProperties.mediaDirection.receiveShare
2319
2443
  }).finally(function () {
2320
2444
  sendStartedSharingRemote();
2321
2445
  });
@@ -2323,17 +2447,17 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2323
2447
  break;
2324
2448
  }
2325
2449
  case _constants.SHARE_STATUS.LOCAL_SHARE_ACTIVE:
2326
- _triggerProxy.default.trigger(_this12, {
2450
+ _triggerProxy.default.trigger(_this13, {
2327
2451
  file: 'meeting/index',
2328
2452
  function: 'share'
2329
2453
  }, _constants.EVENT_TRIGGERS.MEETING_STARTED_SHARING_LOCAL);
2330
2454
  _metrics.default.postEvent({
2331
2455
  event: _config.eventType.LOCAL_SHARE_FLOOR_GRANTED,
2332
- meeting: _this12
2456
+ meeting: _this13
2333
2457
  });
2334
2458
  break;
2335
2459
  case _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE:
2336
- _triggerProxy.default.trigger(_this12, {
2460
+ _triggerProxy.default.trigger(_this13, {
2337
2461
  file: 'meeting/index',
2338
2462
  function: 'startWhiteboardShare'
2339
2463
  }, _constants.EVENT_TRIGGERS.MEETING_STARTED_SHARING_WHITEBOARD, {
@@ -2342,7 +2466,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2342
2466
  });
2343
2467
  _metrics.default.postEvent({
2344
2468
  event: _config.eventType.WHITEBOARD_SHARE_FLOOR_GRANTED,
2345
- meeting: _this12
2469
+ meeting: _this13
2346
2470
  });
2347
2471
  break;
2348
2472
  case _constants.SHARE_STATUS.NO_SHARE:
@@ -2351,21 +2475,21 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2351
2475
  default:
2352
2476
  break;
2353
2477
  }
2354
- _this12.members.locusMediaSharesUpdate(payload);
2478
+ _this13.members.locusMediaSharesUpdate(payload);
2355
2479
  } else if (newShareStatus === _constants.SHARE_STATUS.REMOTE_SHARE_ACTIVE) {
2356
2480
  // if we got here, then some remote participant has stolen
2357
2481
  // the presentation from another remote participant
2358
- _triggerProxy.default.trigger(_this12, {
2482
+ _triggerProxy.default.trigger(_this13, {
2359
2483
  file: 'meetings/index',
2360
2484
  function: 'remoteShare'
2361
2485
  }, _constants.EVENT_TRIGGERS.MEETING_STARTED_SHARING_REMOTE, {
2362
2486
  memberId: contentShare.beneficiaryId
2363
2487
  });
2364
- _this12.members.locusMediaSharesUpdate(payload);
2488
+ _this13.members.locusMediaSharesUpdate(payload);
2365
2489
  } else if (newShareStatus === _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE) {
2366
2490
  // if we got here, then some remote participant has stolen
2367
2491
  // the presentation from another remote participant
2368
- _triggerProxy.default.trigger(_this12, {
2492
+ _triggerProxy.default.trigger(_this13, {
2369
2493
  file: 'meeting/index',
2370
2494
  function: 'startWhiteboardShare'
2371
2495
  }, _constants.EVENT_TRIGGERS.MEETING_STARTED_SHARING_WHITEBOARD, {
@@ -2374,9 +2498,9 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2374
2498
  });
2375
2499
  _metrics.default.postEvent({
2376
2500
  event: _config.eventType.WHITEBOARD_SHARE_FLOOR_GRANTED,
2377
- meeting: _this12
2501
+ meeting: _this13
2378
2502
  });
2379
- _this12.members.locusMediaSharesUpdate(payload);
2503
+ _this13.members.locusMediaSharesUpdate(payload);
2380
2504
  }
2381
2505
  });
2382
2506
  }
@@ -2391,12 +2515,34 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2391
2515
  }, {
2392
2516
  key: "setUpLocusUrlListener",
2393
2517
  value: function setUpLocusUrlListener() {
2394
- var _this13 = this;
2518
+ var _this14 = this;
2395
2519
  this.locusInfo.on(_constants.EVENTS.LOCUS_INFO_UPDATE_URL, function (payload) {
2396
- var _this13$locusUrl;
2397
- _this13.members.locusUrlUpdate(payload);
2398
- _this13.locusUrl = payload;
2399
- _this13.locusId = (_this13$locusUrl = _this13.locusUrl) === null || _this13$locusUrl === void 0 ? void 0 : _this13$locusUrl.split('/').pop();
2520
+ var _this14$locusUrl;
2521
+ _this14.members.locusUrlUpdate(payload);
2522
+ _this14.breakouts.locusUrlUpdate(payload);
2523
+ _this14.locusUrl = payload;
2524
+ _this14.locusId = (_this14$locusUrl = _this14.locusUrl) === null || _this14$locusUrl === void 0 ? void 0 : _this14$locusUrl.split('/').pop();
2525
+ _this14.recordingController.setLocusUrl(_this14.locusUrl);
2526
+ });
2527
+ }
2528
+
2529
+ /**
2530
+ * Set up the locus info service link listener
2531
+ * update the locusInfo for recording controller
2532
+ * does not currently re-emit the event as it's internal only
2533
+ * payload is unused
2534
+ * @returns {undefined}
2535
+ * @private
2536
+ * @memberof Meeting
2537
+ */
2538
+ }, {
2539
+ key: "setUpLocusServicesListener",
2540
+ value: function setUpLocusServicesListener() {
2541
+ var _this15 = this;
2542
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.LINKS_SERVICES, function (payload) {
2543
+ var _payload$services, _payload$services$rec, _this15$locusInfo, _this15$locusInfo$ful;
2544
+ _this15.recordingController.setServiceUrl(payload === null || payload === void 0 ? void 0 : (_payload$services = payload.services) === null || _payload$services === void 0 ? void 0 : (_payload$services$rec = _payload$services.record) === null || _payload$services$rec === void 0 ? void 0 : _payload$services$rec.url);
2545
+ _this15.recordingController.setSessionId((_this15$locusInfo = _this15.locusInfo) === null || _this15$locusInfo === void 0 ? void 0 : (_this15$locusInfo$ful = _this15$locusInfo.fullState) === null || _this15$locusInfo$ful === void 0 ? void 0 : _this15$locusInfo$ful.sessionId);
2400
2546
  });
2401
2547
  }
2402
2548
 
@@ -2409,10 +2555,10 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2409
2555
  }, {
2410
2556
  key: "setUpLocusInfoMeetingInfoListener",
2411
2557
  value: function setUpLocusInfoMeetingInfoListener() {
2412
- var _this14 = this;
2558
+ var _this16 = this;
2413
2559
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEETING_LOCKED, function (payload) {
2414
2560
  if (payload) {
2415
- _triggerProxy.default.trigger(_this14, {
2561
+ _triggerProxy.default.trigger(_this16, {
2416
2562
  file: 'meeting/index',
2417
2563
  function: 'setUpLocusInfoMeetingInfoListener'
2418
2564
  }, _constants.EVENT_TRIGGERS.MEETING_LOCKED, {
@@ -2422,7 +2568,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2422
2568
  });
2423
2569
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEETING_UNLOCKED, function (payload) {
2424
2570
  if (payload) {
2425
- _triggerProxy.default.trigger(_this14, {
2571
+ _triggerProxy.default.trigger(_this16, {
2426
2572
  file: 'meeting/index',
2427
2573
  function: 'setUpLocusInfoMeetingInfoListener'
2428
2574
  }, _constants.EVENT_TRIGGERS.MEETING_UNLOCKED, {
@@ -2432,15 +2578,15 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2432
2578
  });
2433
2579
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEETING_INFO_UPDATED, function (payload) {
2434
2580
  if (payload && payload.info) {
2435
- var changed = _this14.inMeetingActions.set({
2581
+ var changed = _this16.inMeetingActions.set({
2436
2582
  canInviteNewParticipants: _util.default.canInviteNewParticipants(payload.info.userDisplayHints),
2437
2583
  canAdmitParticipant: _util.default.canAdmitParticipant(payload.info.userDisplayHints),
2438
2584
  canLock: _util.default.canUserLock(payload.info.userDisplayHints),
2439
2585
  canUnlock: _util.default.canUserUnlock(payload.info.userDisplayHints),
2440
- canStartRecording: _util.default.canUserRecord(payload.info.userDisplayHints),
2441
- canStopRecording: _util.default.canUserStop(payload.info.userDisplayHints),
2442
- canPauseRecording: _util.default.canUserPause(payload.info.userDisplayHints),
2443
- canResumeRecording: _util.default.canUserResume(payload.info.userDisplayHints),
2586
+ canStartRecording: _util2.default.canUserStart(payload.info.userDisplayHints),
2587
+ canStopRecording: _util2.default.canUserStop(payload.info.userDisplayHints),
2588
+ canPauseRecording: _util2.default.canUserPause(payload.info.userDisplayHints),
2589
+ canResumeRecording: _util2.default.canUserResume(payload.info.userDisplayHints),
2444
2590
  canRaiseHand: _util.default.canUserRaiseHand(payload.info.userDisplayHints),
2445
2591
  canLowerAllHands: _util.default.canUserLowerAllHands(payload.info.userDisplayHints),
2446
2592
  canLowerSomeoneElsesHand: _util.default.canUserLowerSomeoneElsesHand(payload.info.userDisplayHints),
@@ -2453,15 +2599,18 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2453
2599
  canViewCaptionPanel: _util.default.canViewCaptionPanel(payload.info.userDisplayHints),
2454
2600
  isRealTimeTranslationEnabled: _util.default.isRealTimeTranslationEnabled(payload.info.userDisplayHints),
2455
2601
  canSelectSpokenLanguages: _util.default.canSelectSpokenLanguages(payload.info.userDisplayHints),
2456
- waitingForOthersToJoin: _util.default.waitingForOthersToJoin(payload.info.userDisplayHints)
2602
+ waitingForOthersToJoin: _util.default.waitingForOthersToJoin(payload.info.userDisplayHints),
2603
+ canEnableReactions: _util.default.canEnableReactions(_this16.inMeetingActions.canEnableReactions, payload.info.userDisplayHints),
2604
+ canSendReactions: _util.default.canSendReactions(_this16.inMeetingActions.canSendReactions, payload.info.userDisplayHints)
2457
2605
  });
2606
+ _this16.recordingController.setDisplayHints(payload.info.userDisplayHints);
2458
2607
  if (changed) {
2459
- _triggerProxy.default.trigger(_this14, {
2608
+ _triggerProxy.default.trigger(_this16, {
2460
2609
  file: 'meeting/index',
2461
2610
  function: 'setUpLocusInfoMeetingInfoListener'
2462
- }, _constants.EVENT_TRIGGERS.MEETING_ACTIONS_UPDATE, _this14.inMeetingActions.get());
2611
+ }, _constants.EVENT_TRIGGERS.MEETING_ACTIONS_UPDATE, _this16.inMeetingActions.get());
2463
2612
  }
2464
- _this14.handleDataChannelUrlChange(payload.info.datachannelUrl);
2613
+ _this16.handleDataChannelUrlChange(payload.info.datachannelUrl);
2465
2614
  }
2466
2615
  });
2467
2616
  }
@@ -2474,12 +2623,13 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2474
2623
  }, {
2475
2624
  key: "handleDataChannelUrlChange",
2476
2625
  value: function handleDataChannelUrlChange(datachannelUrl) {
2477
- var _this15 = this;
2626
+ var _this17 = this;
2627
+ // @ts-ignore - config coming from registerPlugin
2478
2628
  if (datachannelUrl && this.config.enableAutomaticLLM) {
2479
2629
  // Defer this as updateLLMConnection relies upon this.locusInfo.url which is only set
2480
2630
  // after the MEETING_INFO_UPDATED callback finishes
2481
2631
  (0, _defer2.default)(function () {
2482
- _this15.updateLLMConnection();
2632
+ _this17.updateLLMConnection();
2483
2633
  });
2484
2634
  }
2485
2635
  }
@@ -2493,10 +2643,10 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2493
2643
  }, {
2494
2644
  key: "setUpLocusEmbeddedAppsListener",
2495
2645
  value: function setUpLocusEmbeddedAppsListener() {
2496
- var _this16 = this;
2646
+ var _this18 = this;
2497
2647
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.EMBEDDED_APPS_UPDATED, function (embeddedApps) {
2498
2648
  if (embeddedApps) {
2499
- _triggerProxy.default.trigger(_this16, {
2649
+ _triggerProxy.default.trigger(_this18, {
2500
2650
  file: 'meeting/index',
2501
2651
  function: 'setUpLocusEmbeddedAppsListener'
2502
2652
  }, _constants.EVENT_TRIGGERS.MEETING_EMBEDDED_APPS_UPDATE, embeddedApps);
@@ -2513,11 +2663,11 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2513
2663
  }, {
2514
2664
  key: "setUpLocusInfoSelfListener",
2515
2665
  value: function setUpLocusInfoSelfListener() {
2516
- var _this17 = this;
2666
+ var _this19 = this;
2517
2667
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUIRED, function (payload) {
2518
- if (_this17.audio) {
2519
- _this17.audio.handleServerLocalUnmuteRequired(_this17);
2520
- _triggerProxy.default.trigger(_this17, {
2668
+ if (_this19.audio) {
2669
+ _this19.audio.handleServerLocalUnmuteRequired(_this19);
2670
+ _triggerProxy.default.trigger(_this19, {
2521
2671
  file: 'meeting/index',
2522
2672
  function: 'setUpLocusInfoSelfListener'
2523
2673
  }, _constants.EVENT_TRIGGERS.MEETING_SELF_UNMUTED_BY_OTHERS, {
@@ -2527,15 +2677,15 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2527
2677
  });
2528
2678
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_REMOTE_MUTE_STATUS_UPDATED, function (payload) {
2529
2679
  if (payload) {
2530
- var _this17$audio;
2531
- if (_this17.audio) {
2532
- _this17.audio.handleServerRemoteMuteUpdate(payload.muted, payload.unmuteAllowed);
2680
+ var _this19$audio;
2681
+ if (_this19.audio) {
2682
+ _this19.audio.handleServerRemoteMuteUpdate(payload.muted, payload.unmuteAllowed);
2533
2683
  }
2534
2684
  // with "mute on entry" server will send us remote mute even if we don't have media configured,
2535
2685
  // so if being muted by others, always send the notification,
2536
2686
  // but if being unmuted, only send it if we are also locally unmuted
2537
- if (payload.muted || !((_this17$audio = _this17.audio) !== null && _this17$audio !== void 0 && _this17$audio.isMuted())) {
2538
- _triggerProxy.default.trigger(_this17, {
2687
+ if (payload.muted || !((_this19$audio = _this19.audio) !== null && _this19$audio !== void 0 && _this19$audio.isMuted())) {
2688
+ _triggerProxy.default.trigger(_this19, {
2539
2689
  file: 'meeting/index',
2540
2690
  function: 'setUpLocusInfoSelfListener'
2541
2691
  }, payload.muted ? _constants.EVENT_TRIGGERS.MEETING_SELF_MUTED_BY_OTHERS : _constants.EVENT_TRIGGERS.MEETING_SELF_UNMUTED_BY_OTHERS, {
@@ -2545,7 +2695,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2545
2695
  }
2546
2696
  });
2547
2697
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUESTED, function (payload) {
2548
- _triggerProxy.default.trigger(_this17, {
2698
+ _triggerProxy.default.trigger(_this19, {
2549
2699
  file: 'meeting/index',
2550
2700
  function: 'setUpLocusInfoSelfListener'
2551
2701
  }, _constants.EVENT_TRIGGERS.MEETING_SELF_REQUESTED_TO_UNMUTE, {
@@ -2554,8 +2704,8 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2554
2704
  });
2555
2705
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_UNADMITTED_GUEST, function (payload) {
2556
2706
  if (payload) {
2557
- _this17.startKeepAlive();
2558
- _triggerProxy.default.trigger(_this17, {
2707
+ _this19.startKeepAlive();
2708
+ _triggerProxy.default.trigger(_this19, {
2559
2709
  file: 'meeting/index',
2560
2710
  function: 'setUpLocusInfoSelfListener'
2561
2711
  }, _constants.EVENT_TRIGGERS.MEETING_SELF_LOBBY_WAITING, {
@@ -2563,14 +2713,14 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2563
2713
  });
2564
2714
  _metrics.default.postEvent({
2565
2715
  event: _config.eventType.LOBBY_ENTERED,
2566
- meeting: _this17
2716
+ meeting: _this19
2567
2717
  });
2568
2718
  }
2569
2719
  });
2570
2720
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST, function (payload) {
2571
- _this17.stopKeepAlive();
2721
+ _this19.stopKeepAlive();
2572
2722
  if (payload) {
2573
- _triggerProxy.default.trigger(_this17, {
2723
+ _triggerProxy.default.trigger(_this19, {
2574
2724
  file: 'meeting/index',
2575
2725
  function: 'setUpLocusInfoSelfListener'
2576
2726
  }, _constants.EVENT_TRIGGERS.MEETING_SELF_GUEST_ADMITTED, {
@@ -2578,7 +2728,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2578
2728
  });
2579
2729
  _metrics.default.postEvent({
2580
2730
  event: _config.eventType.LOBBY_EXITED,
2581
- meeting: _this17
2731
+ meeting: _this19
2582
2732
  });
2583
2733
  }
2584
2734
  });
@@ -2586,42 +2736,49 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2586
2736
  // @ts-ignore - check if MEDIA_INACTIVITY exists
2587
2737
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEDIA_INACTIVITY, function () {
2588
2738
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_MEDIA_INACTIVE, {
2589
- correlation_id: _this17.correlationId,
2590
- locus_id: _this17.locusId
2739
+ correlation_id: _this19.correlationId,
2740
+ locus_id: _this19.locusId
2591
2741
  });
2592
- _this17.reconnect();
2742
+ _this19.reconnect();
2593
2743
  });
2594
2744
 
2595
2745
  // There is two stats for mute one is the actual media being sent or received
2596
2746
  // The second on is if the audio is muted, we need to tell the statsAnalyzer when
2597
2747
  // the audio is muted or the user is not willing to send media
2598
2748
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEDIA_STATUS_CHANGE, function (status) {
2599
- if (_this17.statsAnalyzer) {
2600
- var _this17$mediaProperti, _this17$audio2, _this17$mediaProperti2, _this17$video, _this17$mediaProperti3, _this17$mediaProperti4, _this17$mediaProperti5, _this17$mediaProperti6;
2601
- _this17.statsAnalyzer.updateMediaStatus({
2749
+ if (_this19.statsAnalyzer) {
2750
+ var _this19$mediaProperti, _this19$audio2, _this19$mediaProperti2, _this19$video, _this19$mediaProperti3, _this19$mediaProperti4, _this19$mediaProperti5, _this19$mediaProperti6;
2751
+ _this19.statsAnalyzer.updateMediaStatus({
2602
2752
  actual: status,
2603
2753
  expected: {
2604
2754
  // We need to check what should be the actual direction of media
2605
- sendAudio: ((_this17$mediaProperti = _this17.mediaProperties.mediaDirection) === null || _this17$mediaProperti === void 0 ? void 0 : _this17$mediaProperti.sendAudio) && !((_this17$audio2 = _this17.audio) !== null && _this17$audio2 !== void 0 && _this17$audio2.isMuted()),
2606
- sendVideo: ((_this17$mediaProperti2 = _this17.mediaProperties.mediaDirection) === null || _this17$mediaProperti2 === void 0 ? void 0 : _this17$mediaProperti2.sendVideo) && !((_this17$video = _this17.video) !== null && _this17$video !== void 0 && _this17$video.isMuted()),
2607
- sendShare: (_this17$mediaProperti3 = _this17.mediaProperties.mediaDirection) === null || _this17$mediaProperti3 === void 0 ? void 0 : _this17$mediaProperti3.sendShare,
2608
- receiveAudio: (_this17$mediaProperti4 = _this17.mediaProperties.mediaDirection) === null || _this17$mediaProperti4 === void 0 ? void 0 : _this17$mediaProperti4.receiveAudio,
2609
- receiveVideo: (_this17$mediaProperti5 = _this17.mediaProperties.mediaDirection) === null || _this17$mediaProperti5 === void 0 ? void 0 : _this17$mediaProperti5.receiveVideo,
2610
- receiveShare: (_this17$mediaProperti6 = _this17.mediaProperties.mediaDirection) === null || _this17$mediaProperti6 === void 0 ? void 0 : _this17$mediaProperti6.receiveShare
2755
+ sendAudio: ((_this19$mediaProperti = _this19.mediaProperties.mediaDirection) === null || _this19$mediaProperti === void 0 ? void 0 : _this19$mediaProperti.sendAudio) && !((_this19$audio2 = _this19.audio) !== null && _this19$audio2 !== void 0 && _this19$audio2.isMuted()),
2756
+ sendVideo: ((_this19$mediaProperti2 = _this19.mediaProperties.mediaDirection) === null || _this19$mediaProperti2 === void 0 ? void 0 : _this19$mediaProperti2.sendVideo) && !((_this19$video = _this19.video) !== null && _this19$video !== void 0 && _this19$video.isMuted()),
2757
+ sendShare: (_this19$mediaProperti3 = _this19.mediaProperties.mediaDirection) === null || _this19$mediaProperti3 === void 0 ? void 0 : _this19$mediaProperti3.sendShare,
2758
+ receiveAudio: (_this19$mediaProperti4 = _this19.mediaProperties.mediaDirection) === null || _this19$mediaProperti4 === void 0 ? void 0 : _this19$mediaProperti4.receiveAudio,
2759
+ receiveVideo: (_this19$mediaProperti5 = _this19.mediaProperties.mediaDirection) === null || _this19$mediaProperti5 === void 0 ? void 0 : _this19$mediaProperti5.receiveVideo,
2760
+ receiveShare: (_this19$mediaProperti6 = _this19.mediaProperties.mediaDirection) === null || _this19$mediaProperti6 === void 0 ? void 0 : _this19$mediaProperti6.receiveShare
2611
2761
  }
2612
2762
  });
2613
2763
  }
2614
2764
  });
2615
2765
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE, function (payload) {
2616
- _triggerProxy.default.trigger(_this17, {
2766
+ _triggerProxy.default.trigger(_this19, {
2617
2767
  file: 'meeting/index',
2618
2768
  function: 'setUpLocusInfoSelfListener'
2619
2769
  }, _constants.EVENT_TRIGGERS.MEETING_SELF_CANNOT_VIEW_PARTICIPANT_LIST, {
2620
2770
  payload: payload
2621
2771
  });
2622
2772
  });
2773
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_MEETING_BREAKOUTS_CHANGED, function (payload) {
2774
+ _this19.breakouts.updateBreakoutSessions(payload);
2775
+ _triggerProxy.default.trigger(_this19, {
2776
+ file: 'meeting/index',
2777
+ function: 'setUpLocusInfoSelfListener'
2778
+ }, _constants.EVENT_TRIGGERS.MEETING_BREAKOUTS_UPDATE);
2779
+ });
2623
2780
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_IS_SHARING_BLOCKED_CHANGE, function (payload) {
2624
- _triggerProxy.default.trigger(_this17, {
2781
+ _triggerProxy.default.trigger(_this19, {
2625
2782
  file: 'meeting/index',
2626
2783
  function: 'setUpLocusInfoSelfListener'
2627
2784
  }, _constants.EVENT_TRIGGERS.MEETING_SELF_IS_SHARING_BLOCKED, {
@@ -2639,17 +2796,17 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2639
2796
  }, {
2640
2797
  key: "setUpLocusInfoMeetingListener",
2641
2798
  value: function setUpLocusInfoMeetingListener() {
2642
- var _this18 = this;
2799
+ var _this20 = this;
2643
2800
  this.locusInfo.on(_constants.EVENTS.REMOTE_RESPONSE, function (payload) {
2644
- _this18.meetingFiniteStateMachine.remote(payload);
2801
+ _this20.meetingFiniteStateMachine.remote(payload);
2645
2802
  if (payload.remoteDeclined) {
2646
- _this18.leave({
2803
+ _this20.leave({
2647
2804
  reason: payload.reason
2648
2805
  }).then(function () {
2649
2806
  _loggerProxy.default.logger.info('Meeting:index#setUpLocusInfoMeetingListener --> REMOTE_RESPONSE. Attempting to leave meeting.');
2650
2807
  }).catch(function (error) {
2651
2808
  // @ts-ignore
2652
- _loggerProxy.default.logger.error("Meeting:index#setUpLocusInfoMeetingListener --> REMOTE_RESPONSE. Issue with leave for meeting, meeting still in collection: ".concat(_this18.meeting, ", error: ").concat(error));
2809
+ _loggerProxy.default.logger.error("Meeting:index#setUpLocusInfoMeetingListener --> REMOTE_RESPONSE. Issue with leave for meeting, meeting still in collection: ".concat(_this20, ", error: ").concat(error));
2653
2810
  });
2654
2811
  }
2655
2812
  });
@@ -2657,10 +2814,10 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2657
2814
  // if self state is NOT left
2658
2815
 
2659
2816
  // TODO: Handle sharing and wireless sharing when meeting end
2660
- if (_this18.wirelessShare) {
2661
- if (_this18.mediaProperties.shareTrack) {
2662
- _this18.mediaProperties.shareTrack.onended = null;
2663
- _this18.mediaProperties.shareTrack.stop();
2817
+ if (_this20.wirelessShare) {
2818
+ if (_this20.mediaProperties.shareTrack) {
2819
+ _this20.mediaProperties.shareTrack.onended = null;
2820
+ _this20.mediaProperties.shareTrack.stop();
2664
2821
  }
2665
2822
  }
2666
2823
  // when multiple WEB deviceType join with same user
@@ -2674,23 +2831,23 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2674
2831
  if (payload.shouldLeave) {
2675
2832
  // TODO: We should do cleaning of meeting object if the shouldLeave: false because there might be meeting object which we are not cleaning
2676
2833
 
2677
- _this18.leave({
2834
+ _this20.leave({
2678
2835
  reason: payload.reason
2679
2836
  }).then(function () {
2680
2837
  _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.');
2681
2838
  }).catch(function (error) {
2682
2839
  // @ts-ignore
2683
- _loggerProxy.default.logger.error("Meeting:index#setUpLocusInfoMeetingListener --> DESTROY_MEETING. Issue with leave for meeting, meeting still in collection: ".concat(_this18.meeting, ", error: ").concat(error));
2840
+ _loggerProxy.default.logger.error("Meeting:index#setUpLocusInfoMeetingListener --> DESTROY_MEETING. Issue with leave for meeting, meeting still in collection: ".concat(_this20, ", error: ").concat(error));
2684
2841
  });
2685
2842
  } else {
2686
2843
  _loggerProxy.default.logger.info('Meeting:index#setUpLocusInfoMeetingListener --> MEETING_REMOVED_REASON', payload.reason);
2687
- _util.default.cleanUp(_this18);
2688
- _triggerProxy.default.trigger(_this18, {
2844
+ _util.default.cleanUp(_this20);
2845
+ _triggerProxy.default.trigger(_this20, {
2689
2846
  file: 'meeting/index',
2690
2847
  function: 'setUpLocusInfoMeetingListener'
2691
2848
  }, _constants.EVENTS.DESTROY_MEETING, {
2692
2849
  reason: payload.reason,
2693
- meetingId: _this18.id
2850
+ meetingId: _this20.id
2694
2851
  });
2695
2852
  }
2696
2853
  });
@@ -2707,13 +2864,13 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2707
2864
  }, {
2708
2865
  key: "updateMeetingObject",
2709
2866
  value: function updateMeetingObject(object) {
2710
- var _this19 = this;
2867
+ var _this21 = this;
2711
2868
  // Validate if these are valid meeting object property
2712
2869
  // TODO: add a check to make sure the value passed in the constructor
2713
2870
  // is not changed by any delta event
2714
2871
  if (object && (0, _keys.default)(object).length) {
2715
2872
  (0, _keys.default)(object).forEach(function (key) {
2716
- _this19[key] = object[key];
2873
+ _this21[key] = object[key];
2717
2874
  });
2718
2875
  }
2719
2876
  }
@@ -2921,7 +3078,9 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
2921
3078
  this.conversationUrl = ((_locusMeetingObject = locusMeetingObject) === null || _locusMeetingObject === void 0 ? void 0 : _locusMeetingObject.conversationUrl) || (webexMeetingInfo === null || webexMeetingInfo === void 0 ? void 0 : webexMeetingInfo.conversationUrl) || this.conversationUrl;
2922
3079
  this.locusUrl = ((_locusMeetingObject2 = locusMeetingObject) === null || _locusMeetingObject2 === void 0 ? void 0 : _locusMeetingObject2.url) || (webexMeetingInfo === null || webexMeetingInfo === void 0 ? void 0 : webexMeetingInfo.locusUrl) || this.locusUrl;
2923
3080
  // @ts-ignore - config coming from registerPlugin
2924
- this.setSipUri(this.config.experimental.enableUnifiedMeetings ? ((_locusMeetingObject3 = locusMeetingObject) === null || _locusMeetingObject3 === void 0 ? void 0 : _locusMeetingObject3.info.sipUri) || (webexMeetingInfo === null || webexMeetingInfo === void 0 ? void 0 : webexMeetingInfo.sipUrl) : ((_locusMeetingObject4 = locusMeetingObject) === null || _locusMeetingObject4 === void 0 ? void 0 : _locusMeetingObject4.info.sipUri) || (webexMeetingInfo === null || webexMeetingInfo === void 0 ? void 0 : webexMeetingInfo.sipMeetingUri) || this.sipUri);
3081
+ this.setSipUri(
3082
+ // @ts-ignore
3083
+ this.config.experimental.enableUnifiedMeetings ? ((_locusMeetingObject3 = locusMeetingObject) === null || _locusMeetingObject3 === void 0 ? void 0 : _locusMeetingObject3.info.sipUri) || (webexMeetingInfo === null || webexMeetingInfo === void 0 ? void 0 : webexMeetingInfo.sipUrl) : ((_locusMeetingObject4 = locusMeetingObject) === null || _locusMeetingObject4 === void 0 ? void 0 : _locusMeetingObject4.info.sipUri) || (webexMeetingInfo === null || webexMeetingInfo === void 0 ? void 0 : webexMeetingInfo.sipMeetingUri) || this.sipUri);
2925
3084
  // @ts-ignore - config coming from registerPlugin
2926
3085
  if (this.config.experimental.enableUnifiedMeetings) {
2927
3086
  var _locusMeetingObject5;
@@ -3074,7 +3233,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3074
3233
  }, {
3075
3234
  key: "closeRemoteTracks",
3076
3235
  value: function closeRemoteTracks() {
3077
- var _this20 = this;
3236
+ var _this22 = this;
3078
3237
  var _this$mediaProperties = this.mediaProperties,
3079
3238
  remoteAudioTrack = _this$mediaProperties.remoteAudioTrack,
3080
3239
  remoteVideoTrack = _this$mediaProperties.remoteVideoTrack,
@@ -3088,7 +3247,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3088
3247
  */
3089
3248
  // eslint-disable-next-line @typescript-eslint/no-shadow
3090
3249
  var triggerMediaStoppedEvent = function triggerMediaStoppedEvent(mediaType) {
3091
- _triggerProxy.default.trigger(_this20, {
3250
+ _triggerProxy.default.trigger(_this22, {
3092
3251
  file: 'meeting/index',
3093
3252
  function: 'closeRemoteTracks'
3094
3253
  }, _constants.EVENT_TRIGGERS.MEDIA_STOPPED, {
@@ -3132,7 +3291,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3132
3291
  function: 'setLocalTracks'
3133
3292
  }, _constants.EVENT_TRIGGERS.MEDIA_READY, {
3134
3293
  type: _constants.EVENT_TYPES.LOCAL,
3135
- stream: _util2.default.createMediaStream([this.mediaProperties.audioTrack, this.mediaProperties.videoTrack])
3294
+ stream: _util3.default.createMediaStream([this.mediaProperties.audioTrack, this.mediaProperties.videoTrack])
3136
3295
  });
3137
3296
  }
3138
3297
 
@@ -3236,7 +3395,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3236
3395
  }, {
3237
3396
  key: "setLocalShareTrack",
3238
3397
  value: function setLocalShareTrack(localShare) {
3239
- var _this21 = this;
3398
+ var _this23 = this;
3240
3399
  var settings = null;
3241
3400
  if (localShare) {
3242
3401
  this.mediaProperties.setLocalShareTrack(_util.default.getTrack(localShare).videoTrack);
@@ -3254,7 +3413,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3254
3413
  _loggerProxy.default.logger.log('Meeting:index#setLocalShareTrack --> Screen settings.', (0, _stringify.default)(this.mediaProperties.mediaSettings.screen));
3255
3414
  }
3256
3415
  contentTracks.onended = function () {
3257
- return _this21.handleShareTrackEnded(localShare);
3416
+ return _this23.handleShareTrackEnded(localShare);
3258
3417
  };
3259
3418
  _triggerProxy.default.trigger(this, {
3260
3419
  file: 'meeting/index',
@@ -3276,7 +3435,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3276
3435
  }, {
3277
3436
  key: "closeLocalStream",
3278
3437
  value: function closeLocalStream() {
3279
- var _this22 = this;
3438
+ var _this24 = this;
3280
3439
  var _this$mediaProperties2 = this.mediaProperties,
3281
3440
  audioTrack = _this$mediaProperties2.audioTrack,
3282
3441
  videoTrack = _this$mediaProperties2.videoTrack;
@@ -3288,7 +3447,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3288
3447
 
3289
3448
  // triggers event for audio and video stop , sometime either audio or video one of them exists
3290
3449
  if (audioStopped || videoStopped) {
3291
- _triggerProxy.default.trigger(_this22, {
3450
+ _triggerProxy.default.trigger(_this24, {
3292
3451
  file: 'meeting/index',
3293
3452
  function: 'closeLocalStream'
3294
3453
  }, _constants.EVENT_TRIGGERS.MEDIA_STOPPED, {
@@ -3310,11 +3469,11 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3310
3469
  }, {
3311
3470
  key: "closeLocalShare",
3312
3471
  value: function closeLocalShare() {
3313
- var _this23 = this;
3472
+ var _this25 = this;
3314
3473
  var track = this.mediaProperties.shareTrack;
3315
3474
  return _media.default.stopTracks(track).then(function () {
3316
3475
  if (track && track.readyState === _constants.ENDED) {
3317
- _triggerProxy.default.trigger(_this23, {
3476
+ _triggerProxy.default.trigger(_this25, {
3318
3477
  file: 'meeting/index',
3319
3478
  function: 'closeLocalShare'
3320
3479
  }, _constants.EVENT_TRIGGERS.MEDIA_STOPPED, {
@@ -3360,7 +3519,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3360
3519
  }, {
3361
3520
  key: "setMercuryListener",
3362
3521
  value: function setMercuryListener() {
3363
- var _this24 = this;
3522
+ var _this26 = this;
3364
3523
  // Client will have a socket manager and handle reconnecting to mercury, when we reconnect to mercury
3365
3524
  // if the meeting has active peer connections, it should try to reconnect.
3366
3525
  // @ts-ignore
@@ -3368,16 +3527,16 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3368
3527
  _loggerProxy.default.logger.info('Meeting:index#setMercuryListener --> Web socket online');
3369
3528
 
3370
3529
  // Only send restore event when it was disconnected before and for connected later
3371
- if (!_this24.hasWebsocketConnected) {
3530
+ if (!_this26.hasWebsocketConnected) {
3372
3531
  _metrics.default.postEvent({
3373
3532
  event: _config.eventType.MERCURY_CONNECTION_RESTORED,
3374
- meeting: _this24
3533
+ meeting: _this26
3375
3534
  });
3376
3535
  _metrics.default.sendBehavioralMetric(_constants2.default.MERCURY_CONNECTION_RESTORED, {
3377
- correlation_id: _this24.correlationId
3536
+ correlation_id: _this26.correlationId
3378
3537
  });
3379
3538
  }
3380
- _this24.hasWebsocketConnected = true;
3539
+ _this26.hasWebsocketConnected = true;
3381
3540
  });
3382
3541
 
3383
3542
  // @ts-ignore
@@ -3385,10 +3544,10 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3385
3544
  _loggerProxy.default.logger.error('Meeting:index#setMercuryListener --> Web socket offline');
3386
3545
  _metrics.default.postEvent({
3387
3546
  event: _config.eventType.MERCURY_CONNECTION_LOST,
3388
- meeting: _this24
3547
+ meeting: _this26
3389
3548
  });
3390
3549
  _metrics.default.sendBehavioralMetric(_constants2.default.MERCURY_CONNECTION_FAILURE, {
3391
- correlation_id: _this24.correlationId
3550
+ correlation_id: _this26.correlationId
3392
3551
  });
3393
3552
  });
3394
3553
  }
@@ -3458,7 +3617,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3458
3617
  }, {
3459
3618
  key: "muteAudio",
3460
3619
  value: function muteAudio() {
3461
- var _this25 = this;
3620
+ var _this27 = this;
3462
3621
  if (!_util.default.isUserInJoinedState(this.locusInfo)) {
3463
3622
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
3464
3623
  }
@@ -3475,10 +3634,10 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3475
3634
 
3476
3635
  // First, stop sending the local audio media
3477
3636
  return logRequest(this.audio.handleClientRequest(this, true).then(function () {
3478
- _util.default.handleAudioLogging(_this25.mediaProperties.audioTrack);
3637
+ _util.default.handleAudioLogging(_this27.mediaProperties.audioTrack);
3479
3638
  _metrics.default.postEvent({
3480
3639
  event: _config.eventType.MUTED,
3481
- meeting: _this25,
3640
+ meeting: _this27,
3482
3641
  data: {
3483
3642
  trigger: _config.trigger.USER_INTERACTION,
3484
3643
  mediaType: _config.mediaType.AUDIO
@@ -3486,8 +3645,8 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3486
3645
  });
3487
3646
  }).catch(function (error) {
3488
3647
  _metrics.default.sendBehavioralMetric(_constants2.default.MUTE_AUDIO_FAILURE, {
3489
- correlation_id: _this25.correlationId,
3490
- locus_id: _this25.locusUrl.split('/').pop(),
3648
+ correlation_id: _this27.correlationId,
3649
+ locus_id: _this27.locusUrl.split('/').pop(),
3491
3650
  reason: error.message,
3492
3651
  stack: error.stack
3493
3652
  });
@@ -3508,7 +3667,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3508
3667
  }, {
3509
3668
  key: "unmuteAudio",
3510
3669
  value: function unmuteAudio() {
3511
- var _this26 = this;
3670
+ var _this28 = this;
3512
3671
  if (!_util.default.isUserInJoinedState(this.locusInfo)) {
3513
3672
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
3514
3673
  }
@@ -3525,10 +3684,10 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3525
3684
 
3526
3685
  // First, send the control to unmute the participant on the server
3527
3686
  return logRequest(this.audio.handleClientRequest(this, false).then(function () {
3528
- _util.default.handleAudioLogging(_this26.mediaProperties.audioTrack);
3687
+ _util.default.handleAudioLogging(_this28.mediaProperties.audioTrack);
3529
3688
  _metrics.default.postEvent({
3530
3689
  event: _config.eventType.UNMUTED,
3531
- meeting: _this26,
3690
+ meeting: _this28,
3532
3691
  data: {
3533
3692
  trigger: _config.trigger.USER_INTERACTION,
3534
3693
  mediaType: _config.mediaType.AUDIO
@@ -3536,8 +3695,8 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3536
3695
  });
3537
3696
  }).catch(function (error) {
3538
3697
  _metrics.default.sendBehavioralMetric(_constants2.default.UNMUTE_AUDIO_FAILURE, {
3539
- correlation_id: _this26.correlationId,
3540
- locus_id: _this26.locusUrl.split('/').pop(),
3698
+ correlation_id: _this28.correlationId,
3699
+ locus_id: _this28.locusUrl.split('/').pop(),
3541
3700
  reason: error.message,
3542
3701
  stack: error.stack
3543
3702
  });
@@ -3558,7 +3717,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3558
3717
  }, {
3559
3718
  key: "muteVideo",
3560
3719
  value: function muteVideo() {
3561
- var _this27 = this;
3720
+ var _this29 = this;
3562
3721
  if (!_util.default.isUserInJoinedState(this.locusInfo)) {
3563
3722
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
3564
3723
  }
@@ -3573,10 +3732,10 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3573
3732
  }
3574
3733
  var LOG_HEADER = 'Meeting:index#muteVideo -->';
3575
3734
  return logRequest(this.video.handleClientRequest(this, true).then(function () {
3576
- _util.default.handleVideoLogging(_this27.mediaProperties.videoTrack);
3735
+ _util.default.handleVideoLogging(_this29.mediaProperties.videoTrack);
3577
3736
  _metrics.default.postEvent({
3578
3737
  event: _config.eventType.MUTED,
3579
- meeting: _this27,
3738
+ meeting: _this29,
3580
3739
  data: {
3581
3740
  trigger: _config.trigger.USER_INTERACTION,
3582
3741
  mediaType: _config.mediaType.VIDEO
@@ -3584,8 +3743,8 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3584
3743
  });
3585
3744
  }).catch(function (error) {
3586
3745
  _metrics.default.sendBehavioralMetric(_constants2.default.MUTE_VIDEO_FAILURE, {
3587
- correlation_id: _this27.correlationId,
3588
- locus_id: _this27.locusUrl.split('/').pop(),
3746
+ correlation_id: _this29.correlationId,
3747
+ locus_id: _this29.locusUrl.split('/').pop(),
3589
3748
  reason: error.message,
3590
3749
  stack: error.stack
3591
3750
  });
@@ -3606,7 +3765,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3606
3765
  }, {
3607
3766
  key: "unmuteVideo",
3608
3767
  value: function unmuteVideo() {
3609
- var _this28 = this;
3768
+ var _this30 = this;
3610
3769
  if (!_util.default.isUserInJoinedState(this.locusInfo)) {
3611
3770
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
3612
3771
  }
@@ -3621,10 +3780,10 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3621
3780
  }
3622
3781
  var LOG_HEADER = 'Meeting:index#unmuteVideo -->';
3623
3782
  return logRequest(this.video.handleClientRequest(this, false).then(function () {
3624
- _util.default.handleVideoLogging(_this28.mediaProperties.videoTrack);
3783
+ _util.default.handleVideoLogging(_this30.mediaProperties.videoTrack);
3625
3784
  _metrics.default.postEvent({
3626
3785
  event: _config.eventType.UNMUTED,
3627
- meeting: _this28,
3786
+ meeting: _this30,
3628
3787
  data: {
3629
3788
  trigger: _config.trigger.USER_INTERACTION,
3630
3789
  mediaType: _config.mediaType.VIDEO
@@ -3632,8 +3791,8 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3632
3791
  });
3633
3792
  }).catch(function (error) {
3634
3793
  _metrics.default.sendBehavioralMetric(_constants2.default.UNMUTE_VIDEO_FAILURE, {
3635
- correlation_id: _this28.correlationId,
3636
- locus_id: _this28.locusUrl.split('/').pop(),
3794
+ correlation_id: _this30.correlationId,
3795
+ locus_id: _this30.locusUrl.split('/').pop(),
3637
3796
  reason: error.message,
3638
3797
  stack: error.stack
3639
3798
  });
@@ -3673,18 +3832,18 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3673
3832
  }, {
3674
3833
  key: "joinWithMedia",
3675
3834
  value: function joinWithMedia() {
3676
- var _this29 = this;
3835
+ var _this31 = this;
3677
3836
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
3678
3837
  // TODO: add validations for parameters
3679
3838
  var mediaSettings = options.mediaSettings,
3680
3839
  joinOptions = options.joinOptions,
3681
3840
  audioVideoOptions = options.audioVideoOptions;
3682
3841
  return this.join(joinOptions).then(function (joinResponse) {
3683
- return _this29.getMediaStreams(mediaSettings, audioVideoOptions).then(function (_ref9) {
3684
- var _ref10 = (0, _slicedToArray2.default)(_ref9, 2),
3685
- localStream = _ref10[0],
3686
- localShare = _ref10[1];
3687
- return _this29.addMedia({
3842
+ return _this31.getMediaStreams(mediaSettings, audioVideoOptions).then(function (_ref10) {
3843
+ var _ref11 = (0, _slicedToArray2.default)(_ref10, 2),
3844
+ localStream = _ref11[0],
3845
+ localShare = _ref11[1];
3846
+ return _this31.addMedia({
3688
3847
  mediaSettings: mediaSettings,
3689
3848
  localShare: localShare,
3690
3849
  localStream: localStream
@@ -3699,8 +3858,8 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3699
3858
  }).catch(function (error) {
3700
3859
  _loggerProxy.default.logger.error('Meeting:index#joinWithMedia --> ', error);
3701
3860
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_WITH_MEDIA_FAILURE, {
3702
- correlation_id: _this29.correlationId,
3703
- locus_id: _this29.locusUrl.split('/').pop(),
3861
+ correlation_id: _this31.correlationId,
3862
+ locus_id: _this31.locusUrl.split('/').pop(),
3704
3863
  reason: error.message,
3705
3864
  stack: error.stack
3706
3865
  }, {
@@ -3721,7 +3880,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3721
3880
  }, {
3722
3881
  key: "reconnect",
3723
3882
  value: function reconnect(options) {
3724
- var _this30 = this;
3883
+ var _this32 = this;
3725
3884
  _loggerProxy.default.logger.log("Meeting:index#reconnect --> attempting to reconnect meeting ".concat(this.id));
3726
3885
  if (!this.reconnectionManager || !this.reconnectionManager.reconnect) {
3727
3886
  return _promise.default.reject(new _parameter.default('Cannot reconnect, ReconnectionManager must first be defined.'));
@@ -3749,13 +3908,13 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3749
3908
  function: 'reconnect'
3750
3909
  }, _constants.EVENT_TRIGGERS.MEETING_RECONNECTION_STARTING);
3751
3910
  return this.reconnectionManager.reconnect(options).then(function () {
3752
- _triggerProxy.default.trigger(_this30, {
3911
+ _triggerProxy.default.trigger(_this32, {
3753
3912
  file: 'meeting/index',
3754
3913
  function: 'reconnect'
3755
3914
  }, _constants.EVENT_TRIGGERS.MEETING_RECONNECTION_SUCCESS);
3756
3915
  _loggerProxy.default.logger.log('Meeting:index#reconnect --> Meeting reconnect success');
3757
3916
  }).catch(function (error) {
3758
- _triggerProxy.default.trigger(_this30, {
3917
+ _triggerProxy.default.trigger(_this32, {
3759
3918
  file: 'meeting/index',
3760
3919
  function: 'reconnect'
3761
3920
  }, _constants.EVENT_TRIGGERS.MEETING_RECONNECTION_FAILURE, {
@@ -3763,18 +3922,18 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3763
3922
  });
3764
3923
  _loggerProxy.default.logger.error('Meeting:index#reconnect --> Meeting reconnect failed', error);
3765
3924
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_RECONNECT_FAILURE, {
3766
- correlation_id: _this30.correlationId,
3767
- locus_id: _this30.locusUrl.split('/').pop(),
3925
+ correlation_id: _this32.correlationId,
3926
+ locus_id: _this32.locusUrl.split('/').pop(),
3768
3927
  reason: error.message,
3769
3928
  stack: error.stack
3770
3929
  });
3771
- _this30.uploadLogs({
3930
+ _this32.uploadLogs({
3772
3931
  file: 'meeting/index',
3773
3932
  function: 'reconnect'
3774
3933
  });
3775
3934
  return _promise.default.reject(new _reconnection.default('Reconnection failure event', error));
3776
3935
  }).finally(function () {
3777
- _this30.reconnectionManager.reset();
3936
+ _this32.reconnectionManager.reset();
3778
3937
  });
3779
3938
  }
3780
3939
 
@@ -3794,6 +3953,21 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3794
3953
  return false;
3795
3954
  }
3796
3955
 
3956
+ /**
3957
+ * Check if the meeting supports the Reactions
3958
+ * @returns {boolean}
3959
+ */
3960
+ }, {
3961
+ key: "isReactionsSupported",
3962
+ value: function isReactionsSupported() {
3963
+ var _this$locusInfo4, _this$locusInfo4$cont;
3964
+ if ((_this$locusInfo4 = this.locusInfo) !== null && _this$locusInfo4 !== void 0 && (_this$locusInfo4$cont = _this$locusInfo4.controls) !== null && _this$locusInfo4$cont !== void 0 && _this$locusInfo4$cont.reactions.enabled) {
3965
+ return true;
3966
+ }
3967
+ _loggerProxy.default.logger.error('Meeting:index#isReactionsSupported --> Reactions is not supported');
3968
+ return false;
3969
+ }
3970
+
3797
3971
  /**
3798
3972
  * Monitor the Low-Latency Mercury (LLM) web socket connection on `onError` and `onClose` states
3799
3973
  * @private
@@ -3802,16 +3976,16 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3802
3976
  }, {
3803
3977
  key: "monitorTranscriptionSocketConnection",
3804
3978
  value: function monitorTranscriptionSocketConnection() {
3805
- var _this31 = this;
3979
+ var _this33 = this;
3806
3980
  this.transcription.onCloseSocket(function (event) {
3807
3981
  _loggerProxy.default.logger.info("Meeting:index#onCloseSocket -->\n unable to continue receiving transcription;\n low-latency mercury web socket connection is closed now.\n ".concat(event));
3808
- _this31.triggerStopReceivingTranscriptionEvent();
3982
+ _this33.triggerStopReceivingTranscriptionEvent();
3809
3983
  });
3810
3984
  this.transcription.onErrorSocket(function (event) {
3811
3985
  _loggerProxy.default.logger.error("Meeting:index#onErrorSocket -->\n unable to continue receiving transcription;\n low-latency mercury web socket connection error had occured.\n ".concat(event));
3812
- _this31.triggerStopReceivingTranscriptionEvent();
3986
+ _this33.triggerStopReceivingTranscriptionEvent();
3813
3987
  _metrics.default.sendBehavioralMetric(_constants2.default.RECEIVE_TRANSCRIPTION_FAILURE, {
3814
- correlation_id: _this31.correlationId,
3988
+ correlation_id: _this33.correlationId,
3815
3989
  reason: 'unexpected error: transcription LLM web socket connection error had occured.',
3816
3990
  event: event
3817
3991
  });
@@ -3827,7 +4001,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3827
4001
  key: "receiveTranscription",
3828
4002
  value: function () {
3829
4003
  var _receiveTranscription = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
3830
- var _this32 = this;
4004
+ var _this34 = this;
3831
4005
  var datachannelUrl, _yield$this$request, webSocketUrl;
3832
4006
  return _regenerator.default.wrap(function _callee2$(_context2) {
3833
4007
  while (1) switch (_context2.prev = _context2.next) {
@@ -3854,7 +4028,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3854
4028
 
3855
4029
  // retrieve and pass the payload
3856
4030
  this.transcription.subscribe(function (payload) {
3857
- _triggerProxy.default.trigger(_this32, {
4031
+ _triggerProxy.default.trigger(_this34, {
3858
4032
  file: 'meeting/index',
3859
4033
  function: 'join'
3860
4034
  }, _constants.EVENT_TRIGGERS.MEETING_STARTED_RECEIVING_TRANSCRIPTION, payload);
@@ -3885,13 +4059,20 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3885
4059
  return receiveTranscription;
3886
4060
  }()
3887
4061
  /**
3888
- * stop recieving Transcription by closing
3889
- * the web socket connection properly
4062
+ * Callback called when a relay event is received from meeting LLM Connection
4063
+ * @param {RelayEvent} e Event object coming from LLM Connection
4064
+ * @private
3890
4065
  * @returns {void}
3891
4066
  */
3892
4067
  }, {
3893
4068
  key: "stopReceivingTranscription",
3894
- value: function stopReceivingTranscription() {
4069
+ value:
4070
+ /**
4071
+ * stop recieving Transcription by closing
4072
+ * the web socket connection properly
4073
+ * @returns {void}
4074
+ */
4075
+ function stopReceivingTranscription() {
3895
4076
  if (this.transcription) {
3896
4077
  this.transcription.closeSocket();
3897
4078
  }
@@ -3928,7 +4109,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
3928
4109
  }, {
3929
4110
  key: "join",
3930
4111
  value: function join() {
3931
- var _this33 = this;
4112
+ var _this35 = this;
3932
4113
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
3933
4114
  // @ts-ignore - fix type
3934
4115
  if (!this.webex.meetings.registered) {
@@ -4016,40 +4197,44 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4016
4197
  }
4017
4198
  this.isMultistream = !!options.enableMultistream;
4018
4199
  return _util.default.joinMeetingOptions(this, options).then(function (join) {
4019
- _this33.meetingFiniteStateMachine.join();
4200
+ _this35.meetingFiniteStateMachine.join();
4020
4201
  _loggerProxy.default.logger.log('Meeting:index#join --> Success');
4021
4202
  return join;
4022
4203
  }).then(function (join) {
4023
4204
  joinSuccess(join);
4024
- _this33.deferJoin = undefined;
4205
+ _this35.deferJoin = undefined;
4025
4206
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_SUCCESS, {
4026
- correlation_id: _this33.correlationId
4207
+ correlation_id: _this35.correlationId
4027
4208
  });
4028
4209
  return join;
4029
4210
  }).then( /*#__PURE__*/function () {
4030
- var _ref11 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(join) {
4211
+ var _ref12 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(join) {
4031
4212
  return _regenerator.default.wrap(function _callee3$(_context3) {
4032
4213
  while (1) switch (_context3.prev = _context3.next) {
4033
4214
  case 0:
4034
- if (!_this33.config.enableAutomaticLLM) {
4035
- _context3.next = 3;
4215
+ if (!_this35.config.enableAutomaticLLM) {
4216
+ _context3.next = 5;
4036
4217
  break;
4037
4218
  }
4038
4219
  _context3.next = 3;
4039
- return _this33.updateLLMConnection();
4220
+ return _this35.updateLLMConnection();
4040
4221
  case 3:
4222
+ // @ts-ignore - Fix type
4223
+ _this35.webex.internal.llm.on('event:relay.event', _this35.processRelayEvent);
4224
+ _loggerProxy.default.logger.info('Meeting:index#join --> enabled to receive relay events!');
4225
+ case 5:
4041
4226
  return _context3.abrupt("return", join);
4042
- case 4:
4227
+ case 6:
4043
4228
  case "end":
4044
4229
  return _context3.stop();
4045
4230
  }
4046
4231
  }, _callee3);
4047
4232
  }));
4048
4233
  return function (_x2) {
4049
- return _ref11.apply(this, arguments);
4234
+ return _ref12.apply(this, arguments);
4050
4235
  };
4051
4236
  }()).then( /*#__PURE__*/function () {
4052
- var _ref12 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(join) {
4237
+ var _ref13 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(join) {
4053
4238
  return _regenerator.default.wrap(function _callee4$(_context4) {
4054
4239
  while (1) switch (_context4.prev = _context4.next) {
4055
4240
  case 0:
@@ -4057,16 +4242,16 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4057
4242
  _context4.next = 8;
4058
4243
  break;
4059
4244
  }
4060
- if (!(_this33.config.receiveTranscription || options.receiveTranscription)) {
4245
+ if (!(_this35.config.receiveTranscription || options.receiveTranscription)) {
4061
4246
  _context4.next = 6;
4062
4247
  break;
4063
4248
  }
4064
- if (!_this33.isTranscriptionSupported()) {
4249
+ if (!_this35.isTranscriptionSupported()) {
4065
4250
  _context4.next = 6;
4066
4251
  break;
4067
4252
  }
4068
4253
  _context4.next = 5;
4069
- return _this33.receiveTranscription();
4254
+ return _this35.receiveTranscription();
4070
4255
  case 5:
4071
4256
  _loggerProxy.default.logger.info('Meeting:index#join --> enabled to recieve transcription!');
4072
4257
  case 6:
@@ -4083,16 +4268,16 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4083
4268
  }, _callee4);
4084
4269
  }));
4085
4270
  return function (_x3) {
4086
- return _ref12.apply(this, arguments);
4271
+ return _ref13.apply(this, arguments);
4087
4272
  };
4088
4273
  }()).catch(function (error) {
4089
4274
  var _error$error;
4090
- _this33.meetingFiniteStateMachine.fail(error);
4275
+ _this35.meetingFiniteStateMachine.fail(error);
4091
4276
  _loggerProxy.default.logger.error('Meeting:index#join --> Failed', error);
4092
4277
  _metrics.default.postEvent({
4093
4278
  event: _config.eventType.LOCUS_JOIN_RESPONSE,
4094
- meeting: _this33,
4095
- meetingId: _this33.id,
4279
+ meeting: _this35,
4280
+ meetingId: _this35.id,
4096
4281
  data: {
4097
4282
  errors: [_metrics.default.parseLocusError(error.error, true)]
4098
4283
  }
@@ -4100,18 +4285,18 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4100
4285
 
4101
4286
  // TODO: change this to error codes and pre defined dictionary
4102
4287
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_FAILURE, {
4103
- correlation_id: _this33.correlationId,
4288
+ correlation_id: _this35.correlationId,
4104
4289
  reason: (_error$error = error.error) === null || _error$error === void 0 ? void 0 : _error$error.message,
4105
4290
  stack: error.stack
4106
4291
  });
4107
4292
 
4108
4293
  // Upload logs on join Failure
4109
- _triggerProxy.default.trigger(_this33, {
4294
+ _triggerProxy.default.trigger(_this35, {
4110
4295
  file: 'meeting/index',
4111
4296
  function: 'join'
4112
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this33);
4297
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this35);
4113
4298
  joinFailed(error);
4114
- _this33.deferJoin = undefined;
4299
+ _this35.deferJoin = undefined;
4115
4300
  return _promise.default.reject(error);
4116
4301
  });
4117
4302
  }
@@ -4126,14 +4311,15 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4126
4311
  key: "updateLLMConnection",
4127
4312
  value: function () {
4128
4313
  var _updateLLMConnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {
4129
- var _this$locusInfo, url, _this$locusInfo$info, _this$locusInfo$info2, datachannelUrl, isJoined;
4314
+ var _this$locusInfo5, url, _this$locusInfo5$info, _this$locusInfo5$info2, datachannelUrl, isJoined;
4130
4315
  return _regenerator.default.wrap(function _callee5$(_context5) {
4131
4316
  while (1) switch (_context5.prev = _context5.next) {
4132
4317
  case 0:
4133
- _this$locusInfo = this.locusInfo, url = _this$locusInfo.url, _this$locusInfo$info = _this$locusInfo.info, _this$locusInfo$info2 = _this$locusInfo$info === void 0 ? {} : _this$locusInfo$info, datachannelUrl = _this$locusInfo$info2.datachannelUrl;
4134
- isJoined = this.joinedWith && this.joinedWith.state === 'JOINED';
4318
+ // @ts-ignore - Fix type
4319
+ _this$locusInfo5 = this.locusInfo, url = _this$locusInfo5.url, _this$locusInfo5$info = _this$locusInfo5.info, _this$locusInfo5$info2 = _this$locusInfo5$info === void 0 ? {} : _this$locusInfo5$info, datachannelUrl = _this$locusInfo5$info2.datachannelUrl;
4320
+ isJoined = this.joinedWith && this.joinedWith.state === 'JOINED'; // @ts-ignore - Fix type
4135
4321
  if (!this.webex.internal.llm.isConnected()) {
4136
- _context5.next = 7;
4322
+ _context5.next = 8;
4137
4323
  break;
4138
4324
  }
4139
4325
  if (!(url === this.webex.internal.llm.getLocusUrl() && isJoined)) {
@@ -4145,14 +4331,17 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4145
4331
  _context5.next = 7;
4146
4332
  return this.webex.internal.llm.disconnectLLM();
4147
4333
  case 7:
4334
+ // @ts-ignore - Fix type
4335
+ this.webex.internal.llm.off('event:relay.event', this.processRelayEvent);
4336
+ case 8:
4148
4337
  if (isJoined) {
4149
- _context5.next = 9;
4338
+ _context5.next = 10;
4150
4339
  break;
4151
4340
  }
4152
4341
  return _context5.abrupt("return", undefined);
4153
- case 9:
4154
- return _context5.abrupt("return", this.webex.internal.llm.registerAndConnect(url, datachannelUrl));
4155
4342
  case 10:
4343
+ return _context5.abrupt("return", this.webex.internal.llm.registerAndConnect(url, datachannelUrl));
4344
+ case 11:
4156
4345
  case "end":
4157
4346
  return _context5.stop();
4158
4347
  }
@@ -4201,26 +4390,28 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4201
4390
  }, {
4202
4391
  key: "dialInPstn",
4203
4392
  value: function dialInPstn() {
4204
- var _this34 = this;
4393
+ var _this36 = this;
4205
4394
  if (this.isPhoneProvisioned(this.dialInDeviceStatus)) return _promise.default.resolve(); // prevent multiple dial in devices from being provisioned
4206
4395
 
4207
4396
  var correlationId = this.correlationId,
4208
4397
  locusUrl = this.locusUrl;
4209
4398
  if (!this.dialInUrl) this.dialInUrl = "dialin:///".concat(_uuid.default.v4());
4210
- return this.meetingRequest.dialIn({
4399
+ return this.meetingRequest
4400
+ // @ts-ignore
4401
+ .dialIn({
4211
4402
  correlationId: correlationId,
4212
4403
  dialInUrl: this.dialInUrl,
4213
4404
  locusUrl: locusUrl,
4214
4405
  clientUrl: this.deviceUrl
4215
4406
  }).then(function (res) {
4216
- _this34.locusInfo.onFullLocus(res.body.locus);
4407
+ _this36.locusInfo.onFullLocus(res.body.locus);
4217
4408
  }).catch(function (error) {
4218
4409
  var _error$error2;
4219
4410
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_DIAL_IN_FAILURE, {
4220
- correlation_id: _this34.correlationId,
4221
- dial_in_url: _this34.dialInUrl,
4411
+ correlation_id: _this36.correlationId,
4412
+ dial_in_url: _this36.dialInUrl,
4222
4413
  locus_id: locusUrl.split('/').pop(),
4223
- client_url: _this34.deviceUrl,
4414
+ client_url: _this36.deviceUrl,
4224
4415
  reason: (_error$error2 = error.error) === null || _error$error2 === void 0 ? void 0 : _error$error2.message,
4225
4416
  stack: error.stack
4226
4417
  });
@@ -4238,27 +4429,29 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4238
4429
  }, {
4239
4430
  key: "dialOutPstn",
4240
4431
  value: function dialOutPstn(phoneNumber) {
4241
- var _this35 = this;
4432
+ var _this37 = this;
4242
4433
  if (this.isPhoneProvisioned(this.dialOutDeviceStatus)) return _promise.default.resolve(); // prevent multiple dial out devices from being provisioned
4243
4434
 
4244
4435
  var correlationId = this.correlationId,
4245
4436
  locusUrl = this.locusUrl;
4246
4437
  if (!this.dialOutUrl) this.dialOutUrl = "dialout:///".concat(_uuid.default.v4());
4247
- return this.meetingRequest.dialOut({
4438
+ return this.meetingRequest
4439
+ // @ts-ignore
4440
+ .dialOut({
4248
4441
  correlationId: correlationId,
4249
4442
  dialOutUrl: this.dialOutUrl,
4250
4443
  phoneNumber: phoneNumber,
4251
4444
  locusUrl: locusUrl,
4252
4445
  clientUrl: this.deviceUrl
4253
4446
  }).then(function (res) {
4254
- _this35.locusInfo.onFullLocus(res.body.locus);
4447
+ _this37.locusInfo.onFullLocus(res.body.locus);
4255
4448
  }).catch(function (error) {
4256
4449
  var _error$error3;
4257
4450
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_DIAL_OUT_FAILURE, {
4258
- correlation_id: _this35.correlationId,
4259
- dial_out_url: _this35.dialOutUrl,
4451
+ correlation_id: _this37.correlationId,
4452
+ dial_out_url: _this37.dialOutUrl,
4260
4453
  locus_id: locusUrl.split('/').pop(),
4261
- client_url: _this35.deviceUrl,
4454
+ client_url: _this37.deviceUrl,
4262
4455
  reason: (_error$error3 = error.error) === null || _error$error3 === void 0 ? void 0 : _error$error3.message,
4263
4456
  stack: error.stack
4264
4457
  });
@@ -4289,7 +4482,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4289
4482
  }, {
4290
4483
  key: "moveTo",
4291
4484
  value: function moveTo(resourceId) {
4292
- var _this36 = this;
4485
+ var _this38 = this;
4293
4486
  if (!resourceId) {
4294
4487
  throw new _parameter.default('Cannot move call without a resourceId.');
4295
4488
  }
@@ -4325,12 +4518,12 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4325
4518
  while (1) switch (_context6.prev = _context6.next) {
4326
4519
  case 0:
4327
4520
  _context6.prev = 0;
4328
- if (!_this36.isSharing) {
4521
+ if (!_this38.isSharing) {
4329
4522
  _context6.next = 4;
4330
4523
  break;
4331
4524
  }
4332
4525
  _context6.next = 4;
4333
- return _this36.releaseScreenShareFloor();
4526
+ return _this38.releaseScreenShareFloor();
4334
4527
  case 4:
4335
4528
  mediaSettings = {
4336
4529
  mediaDirection: {
@@ -4342,22 +4535,22 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4342
4535
  receiveShare: true
4343
4536
  }
4344
4537
  }; // clean up the local tracks
4345
- _this36.mediaProperties.setMediaDirection(mediaSettings.mediaDirection);
4538
+ _this38.mediaProperties.setMediaDirection(mediaSettings.mediaDirection);
4346
4539
 
4347
4540
  // close the existing local tracks
4348
4541
  _context6.next = 8;
4349
- return _this36.closeLocalStream();
4542
+ return _this38.closeLocalStream();
4350
4543
  case 8:
4351
4544
  _context6.next = 10;
4352
- return _this36.closeLocalShare();
4545
+ return _this38.closeLocalShare();
4353
4546
  case 10:
4354
- _this36.mediaProperties.unsetMediaTracks();
4547
+ _this38.mediaProperties.unsetMediaTracks();
4355
4548
 
4356
4549
  // when a move to is intiated by the client , Locus delets the existing media node from the server as soon the DX answers the meeting
4357
4550
  // once the DX answers we establish connection back the media server with only receiveShare enabled
4358
4551
  // @ts-ignore - reconnectMedia does not accept any argument
4359
4552
  _context6.next = 13;
4360
- return _this36.reconnectionManager.reconnectMedia(mediaSettings).then(function () {
4553
+ return _this38.reconnectionManager.reconnectMedia(mediaSettings).then(function () {
4361
4554
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_SUCCESS);
4362
4555
  });
4363
4556
  case 13:
@@ -4368,8 +4561,8 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4368
4561
  _context6.t0 = _context6["catch"](0);
4369
4562
  _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', _context6.t0);
4370
4563
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
4371
- correlation_id: _this36.correlationId,
4372
- locus_id: _this36.locusUrl.split('/').pop(),
4564
+ correlation_id: _this38.correlationId,
4565
+ locus_id: _this38.locusUrl.split('/').pop(),
4373
4566
  reason: _context6.t0.message,
4374
4567
  stack: _context6.t0.stack
4375
4568
  });
@@ -4384,12 +4577,12 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4384
4577
  resourceId: resourceId,
4385
4578
  moveToResource: true
4386
4579
  }).then(function () {
4387
- _this36.meetingFiniteStateMachine.join();
4580
+ _this38.meetingFiniteStateMachine.join();
4388
4581
  }).catch(function (error) {
4389
- _this36.meetingFiniteStateMachine.fail(error);
4582
+ _this38.meetingFiniteStateMachine.fail(error);
4390
4583
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
4391
- correlation_id: _this36.correlationId,
4392
- locus_id: _this36.locusUrl.split('/').pop(),
4584
+ correlation_id: _this38.correlationId,
4585
+ locus_id: _this38.locusUrl.split('/').pop(),
4393
4586
  reason: error.message,
4394
4587
  stack: error.stack
4395
4588
  });
@@ -4408,7 +4601,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4408
4601
  }, {
4409
4602
  key: "moveFrom",
4410
4603
  value: function moveFrom(resourceId) {
4411
- var _this37 = this;
4604
+ var _this39 = this;
4412
4605
  // On moveFrom ask the developer to re capture it moveFrom then updateMedia
4413
4606
  if (!resourceId) {
4414
4607
  throw new _parameter.default('Cannot move call without a resourceId.');
@@ -4419,19 +4612,19 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4419
4612
  meeting: this
4420
4613
  });
4421
4614
  return _util.default.joinMeetingOptions(this).then(function () {
4422
- return _util.default.leaveMeeting(_this37, {
4615
+ return _util.default.leaveMeeting(_this39, {
4423
4616
  resourceId: resourceId,
4424
4617
  correlationId: oldCorrelationId,
4425
4618
  moveMeeting: true
4426
4619
  }).then(function () {
4427
- _this37.resourceId = '';
4620
+ _this39.resourceId = '';
4428
4621
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_FROM_SUCCESS);
4429
4622
  });
4430
4623
  }).catch(function (error) {
4431
- _this37.meetingFiniteStateMachine.fail(error);
4624
+ _this39.meetingFiniteStateMachine.fail(error);
4432
4625
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_FROM_FAILURE, {
4433
- correlation_id: _this37.correlationId,
4434
- locus_id: _this37.locusUrl.split('/').pop(),
4626
+ correlation_id: _this39.correlationId,
4627
+ locus_id: _this39.locusUrl.split('/').pop(),
4435
4628
  reason: error.message,
4436
4629
  stack: error.stack
4437
4630
  });
@@ -4487,9 +4680,9 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4487
4680
  }, {
4488
4681
  key: "forwardEvent",
4489
4682
  value: function forwardEvent(eventEmitter, eventTypeToForward, meetingEventType) {
4490
- var _this38 = this;
4683
+ var _this40 = this;
4491
4684
  eventEmitter.on(eventTypeToForward, function (data) {
4492
- return _triggerProxy.default.trigger(_this38, {
4685
+ return _triggerProxy.default.trigger(_this40, {
4493
4686
  file: 'meetings',
4494
4687
  function: 'addMedia'
4495
4688
  }, meetingEventType, data);
@@ -4511,7 +4704,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4511
4704
  }, {
4512
4705
  key: "addMedia",
4513
4706
  value: function addMedia() {
4514
- var _this39 = this;
4707
+ var _this41 = this;
4515
4708
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
4516
4709
  var LOG_HEADER = 'Meeting:index#addMedia -->';
4517
4710
  var turnDiscoverySkippedReason;
@@ -4555,41 +4748,41 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4555
4748
  }
4556
4749
  });
4557
4750
  return _util.default.validateOptions(options).then(function () {
4558
- return _this39.roap.doTurnDiscovery(_this39, false);
4751
+ return _this41.roap.doTurnDiscovery(_this41, false);
4559
4752
  }).then(function (turnDiscoveryObject) {
4560
4753
  turnDiscoverySkippedReason = turnDiscoveryObject.turnDiscoverySkippedReason;
4561
4754
  turnServerUsed = !turnDiscoverySkippedReason;
4562
4755
  var turnServerInfo = turnDiscoveryObject.turnServerInfo;
4563
- _this39.preMedia(localStream, localShare, mediaSettings);
4564
- var mc = _this39.createMediaConnection(turnServerInfo);
4565
- if (_this39.isMultistream) {
4566
- _this39.remoteMediaManager = new _remoteMediaManager.RemoteMediaManager(_this39.receiveSlotManager, _this39.mediaRequestManagers, remoteMediaManagerConfig);
4567
- _this39.forwardEvent(_this39.remoteMediaManager, _remoteMediaManager.Event.AudioCreated, _constants.EVENT_TRIGGERS.REMOTE_MEDIA_AUDIO_CREATED);
4568
- _this39.forwardEvent(_this39.remoteMediaManager, _remoteMediaManager.Event.ScreenShareAudioCreated, _constants.EVENT_TRIGGERS.REMOTE_MEDIA_SCREEN_SHARE_AUDIO_CREATED);
4569
- _this39.forwardEvent(_this39.remoteMediaManager, _remoteMediaManager.Event.VideoLayoutChanged, _constants.EVENT_TRIGGERS.REMOTE_MEDIA_VIDEO_LAYOUT_CHANGED);
4570
- return _this39.remoteMediaManager.start().then(function () {
4756
+ _this41.preMedia(localStream, localShare, mediaSettings);
4757
+ var mc = _this41.createMediaConnection(turnServerInfo);
4758
+ if (_this41.isMultistream) {
4759
+ _this41.remoteMediaManager = new _remoteMediaManager.RemoteMediaManager(_this41.receiveSlotManager, _this41.mediaRequestManagers, remoteMediaManagerConfig);
4760
+ _this41.forwardEvent(_this41.remoteMediaManager, _remoteMediaManager.Event.AudioCreated, _constants.EVENT_TRIGGERS.REMOTE_MEDIA_AUDIO_CREATED);
4761
+ _this41.forwardEvent(_this41.remoteMediaManager, _remoteMediaManager.Event.ScreenShareAudioCreated, _constants.EVENT_TRIGGERS.REMOTE_MEDIA_SCREEN_SHARE_AUDIO_CREATED);
4762
+ _this41.forwardEvent(_this41.remoteMediaManager, _remoteMediaManager.Event.VideoLayoutChanged, _constants.EVENT_TRIGGERS.REMOTE_MEDIA_VIDEO_LAYOUT_CHANGED);
4763
+ return _this41.remoteMediaManager.start().then(function () {
4571
4764
  return mc.initiateOffer();
4572
4765
  });
4573
4766
  }
4574
4767
  return mc.initiateOffer();
4575
4768
  }).then(function () {
4576
- _this39.setMercuryListener();
4769
+ _this41.setMercuryListener();
4577
4770
  }).then(function () {
4578
- return _this39.getDevices().then(function (devices) {
4771
+ return _this41.getDevices().then(function (devices) {
4579
4772
  _util.default.handleDeviceLogging(devices);
4580
4773
  });
4581
4774
  }).then(function () {
4582
- _this39.handleMediaLogging(_this39.mediaProperties);
4775
+ _this41.handleMediaLogging(_this41.mediaProperties);
4583
4776
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " media connection created"));
4584
4777
 
4585
4778
  // @ts-ignore - config coming from registerPlugin
4586
- if (_this39.config.stats.enableStatsAnalyzer) {
4779
+ if (_this41.config.stats.enableStatsAnalyzer) {
4587
4780
  // @ts-ignore - config coming from registerPlugin
4588
- _this39.networkQualityMonitor = new _networkQualityMonitor.default(_this39.config.stats);
4781
+ _this41.networkQualityMonitor = new _networkQualityMonitor.default(_this41.config.stats);
4589
4782
  // @ts-ignore - config coming from registerPlugin
4590
- _this39.statsAnalyzer = new _statsAnalyzer.StatsAnalyzer(_this39.config.stats, _this39.networkQualityMonitor);
4591
- _this39.setupStatsAnalyzerEventHandlers();
4592
- _this39.networkQualityMonitor.on(_constants.EVENT_TRIGGERS.NETWORK_QUALITY, _this39.sendNetworkQualityEvent.bind(_this39));
4783
+ _this41.statsAnalyzer = new _statsAnalyzer.StatsAnalyzer(_this41.config.stats, _this41.networkQualityMonitor);
4784
+ _this41.setupStatsAnalyzerEventHandlers();
4785
+ _this41.networkQualityMonitor.on(_constants.EVENT_TRIGGERS.NETWORK_QUALITY, _this41.sendNetworkQualityEvent.bind(_this41));
4593
4786
  }
4594
4787
  }).catch(function (error) {
4595
4788
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " Error adding media , setting up peerconnection, "), error);
@@ -4600,12 +4793,12 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4600
4793
 
4601
4794
  // eslint-disable-next-line func-names
4602
4795
  // eslint-disable-next-line prefer-arrow-callback
4603
- if (_this39.type === _constants._CALL_) {
4796
+ if (_this41.type === _constants._CALL_) {
4604
4797
  resolve();
4605
4798
  }
4606
4799
  var joiningTimer = setInterval(function () {
4607
4800
  timerCount += 1;
4608
- if (_this39.meetingState === _constants.FULL_STATE.ACTIVE) {
4801
+ if (_this41.meetingState === _constants.FULL_STATE.ACTIVE) {
4609
4802
  clearInterval(joiningTimer);
4610
4803
  resolve();
4611
4804
  }
@@ -4616,41 +4809,41 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4616
4809
  }, 1000);
4617
4810
  });
4618
4811
  }).then(function () {
4619
- return _this39.mediaProperties.waitForMediaConnectionConnected().catch(function () {
4812
+ return _this41.mediaProperties.waitForMediaConnectionConnected().catch(function () {
4620
4813
  throw (0, _webexErrors.createMeetingsError)(30202, 'Meeting connection failed');
4621
4814
  });
4622
4815
  }).then(function () {
4623
4816
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " PeerConnection CONNECTED"));
4624
4817
  if (mediaSettings && mediaSettings.sendShare && localShare) {
4625
- if (_this39.state === _constants.MEETING_STATE.STATES.JOINED) {
4626
- return _this39.requestScreenShareFloor();
4818
+ if (_this41.state === _constants.MEETING_STATE.STATES.JOINED) {
4819
+ return _this41.requestScreenShareFloor();
4627
4820
  }
4628
4821
 
4629
4822
  // When the self state changes to JOINED then request the floor
4630
- _this39.floorGrantPending = true;
4823
+ _this41.floorGrantPending = true;
4631
4824
  }
4632
4825
  return {};
4633
4826
  }).then(function () {
4634
- return _this39.mediaProperties.getCurrentConnectionType();
4827
+ return _this41.mediaProperties.getCurrentConnectionType();
4635
4828
  }).then(function (connectionType) {
4636
4829
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_SUCCESS, {
4637
- correlation_id: _this39.correlationId,
4638
- locus_id: _this39.locusUrl.split('/').pop(),
4830
+ correlation_id: _this41.correlationId,
4831
+ locus_id: _this41.locusUrl.split('/').pop(),
4639
4832
  connectionType: connectionType
4640
4833
  });
4641
4834
  }).catch(function (error) {
4642
4835
  // Clean up stats analyzer, peer connection, and turn off listeners
4643
- var stopStatsAnalyzer = _this39.statsAnalyzer ? _this39.statsAnalyzer.stopAnalyzer() : _promise.default.resolve();
4836
+ var stopStatsAnalyzer = _this41.statsAnalyzer ? _this41.statsAnalyzer.stopAnalyzer() : _promise.default.resolve();
4644
4837
  return stopStatsAnalyzer.then(function () {
4645
- _this39.statsAnalyzer = null;
4646
- if (_this39.mediaProperties.webrtcMediaConnection) {
4647
- _this39.closePeerConnections();
4648
- _this39.unsetPeerConnections();
4838
+ _this41.statsAnalyzer = null;
4839
+ if (_this41.mediaProperties.webrtcMediaConnection) {
4840
+ _this41.closePeerConnections();
4841
+ _this41.unsetPeerConnections();
4649
4842
  }
4650
4843
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " Error adding media failed to initiate PC and send request, "), error);
4651
4844
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_FAILURE, {
4652
- correlation_id: _this39.correlationId,
4653
- locus_id: _this39.locusUrl.split('/').pop(),
4845
+ correlation_id: _this41.correlationId,
4846
+ locus_id: _this41.locusUrl.split('/').pop(),
4654
4847
  reason: error.message,
4655
4848
  stack: error.stack,
4656
4849
  code: error.code,
@@ -4659,12 +4852,12 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4659
4852
  });
4660
4853
 
4661
4854
  // Upload logs on error while adding media
4662
- _triggerProxy.default.trigger(_this39, {
4855
+ _triggerProxy.default.trigger(_this41, {
4663
4856
  file: 'meeting/index',
4664
4857
  function: 'addMedia'
4665
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this39);
4666
- if (error instanceof _internalMediaCore.MediaConnection.Errors.SdpError) {
4667
- _this39.leave({
4858
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this41);
4859
+ if (error instanceof _internalMediaCore.Errors.SdpError) {
4860
+ _this41.leave({
4668
4861
  reason: _constants.MEETING_REMOVED_REASON.MEETING_CONNECTION_FAILED
4669
4862
  });
4670
4863
  }
@@ -4697,7 +4890,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4697
4890
  }, {
4698
4891
  key: "enqueueMediaUpdate",
4699
4892
  value: function enqueueMediaUpdate(mediaUpdateType, options) {
4700
- var _this40 = this;
4893
+ var _this42 = this;
4701
4894
  return new _promise.default(function (resolve, reject) {
4702
4895
  var queueItem = {
4703
4896
  pendingPromiseResolve: resolve,
@@ -4706,7 +4899,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4706
4899
  options: options
4707
4900
  };
4708
4901
  _loggerProxy.default.logger.log("Meeting:index#enqueueMediaUpdate --> enqueuing media update type=".concat(mediaUpdateType));
4709
- _this40.queuedMediaUpdates.push(queueItem);
4902
+ _this42.queuedMediaUpdates.push(queueItem);
4710
4903
  });
4711
4904
  }
4712
4905
 
@@ -4731,7 +4924,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4731
4924
  * @memberof Meeting
4732
4925
  */
4733
4926
  function updateMedia() {
4734
- var _this41 = this;
4927
+ var _this43 = this;
4735
4928
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
4736
4929
  var LOG_HEADER = 'Meeting:index#updateMedia -->';
4737
4930
  if (!this.canUpdateMedia()) {
@@ -4745,27 +4938,27 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4745
4938
  return _promise.default.reject(new Error('media connection not established, call addMedia() first'));
4746
4939
  }
4747
4940
  return _util.default.validateOptions(options).then(function () {
4748
- return _this41.preMedia(localStream, localShare, mediaSettings);
4941
+ return _this43.preMedia(localStream, localShare, mediaSettings);
4749
4942
  }).then(function () {
4750
- return _this41.mediaProperties.webrtcMediaConnection.updateSendReceiveOptions({
4943
+ return _this43.mediaProperties.webrtcMediaConnection.updateSendReceiveOptions({
4751
4944
  send: {
4752
- audio: _this41.mediaProperties.mediaDirection.sendAudio ? _this41.mediaProperties.audioTrack : null,
4753
- video: _this41.mediaProperties.mediaDirection.sendVideo ? _this41.mediaProperties.videoTrack : null,
4754
- screenShareVideo: _this41.mediaProperties.mediaDirection.sendShare ? _this41.mediaProperties.shareTrack : null
4945
+ audio: _this43.mediaProperties.mediaDirection.sendAudio ? _this43.mediaProperties.audioTrack : null,
4946
+ video: _this43.mediaProperties.mediaDirection.sendVideo ? _this43.mediaProperties.videoTrack : null,
4947
+ screenShareVideo: _this43.mediaProperties.mediaDirection.sendShare ? _this43.mediaProperties.shareTrack : null
4755
4948
  },
4756
4949
  receive: {
4757
- audio: _this41.mediaProperties.mediaDirection.receiveAudio,
4758
- video: _this41.mediaProperties.mediaDirection.receiveVideo,
4759
- screenShareVideo: _this41.mediaProperties.mediaDirection.receiveShare,
4760
- remoteQualityLevel: _this41.mediaProperties.remoteQualityLevel
4950
+ audio: _this43.mediaProperties.mediaDirection.receiveAudio,
4951
+ video: _this43.mediaProperties.mediaDirection.receiveVideo,
4952
+ screenShareVideo: _this43.mediaProperties.mediaDirection.receiveShare,
4953
+ remoteQualityLevel: _this43.mediaProperties.remoteQualityLevel
4761
4954
  }
4762
4955
  }).then(function () {
4763
4956
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " webrtcMediaConnection.updateSendReceiveOptions done"));
4764
4957
  }).catch(function (error) {
4765
4958
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " Error updatedMedia, "), error);
4766
4959
  _metrics.default.sendBehavioralMetric(_constants2.default.UPDATE_MEDIA_FAILURE, {
4767
- correlation_id: _this41.correlationId,
4768
- locus_id: _this41.locusUrl.split('/').pop(),
4960
+ correlation_id: _this43.correlationId,
4961
+ locus_id: _this43.locusUrl.split('/').pop(),
4769
4962
  reason: error.message,
4770
4963
  stack: error.stack
4771
4964
  });
@@ -4776,13 +4969,13 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4776
4969
  // if not, ensure it's called after (now it's called after roap message is sent out, but we're not
4777
4970
  // waiting for sendRoapMediaRequest() to be resolved)
4778
4971
  .then(function () {
4779
- return _this41.checkForStopShare(mediaSettings.sendShare, previousSendShareStatus);
4972
+ return _this43.checkForStopShare(mediaSettings.sendShare, previousSendShareStatus);
4780
4973
  }).then(function (startShare) {
4781
4974
  // This is a special case if we do an /floor grant followed by /media
4782
4975
  // we actually get a OFFER from the server and a GLAR condition happens
4783
4976
  if (startShare) {
4784
4977
  // We are assuming that the clients are connected when doing an update
4785
- return _this41.requestScreenShareFloor();
4978
+ return _this43.requestScreenShareFloor();
4786
4979
  }
4787
4980
  return _promise.default.resolve();
4788
4981
  });
@@ -4806,7 +4999,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4806
4999
  key: "updateAudio",
4807
5000
  value: function () {
4808
5001
  var _updateAudio = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7(options) {
4809
- var _this42 = this;
5002
+ var _this44 = this;
4810
5003
  var sendAudio, receiveAudio, stream, track, bnrEnabled;
4811
5004
  return _regenerator.default.wrap(function _callee7$(_context7) {
4812
5005
  while (1) switch (_context7.prev = _context7.next) {
@@ -4851,25 +5044,25 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4851
5044
  sendAudio: sendAudio,
4852
5045
  localStream: stream
4853
5046
  }).then(function () {
4854
- return _this42.mediaProperties.webrtcMediaConnection.updateSendReceiveOptions({
5047
+ return _this44.mediaProperties.webrtcMediaConnection.updateSendReceiveOptions({
4855
5048
  send: {
4856
5049
  audio: track
4857
5050
  },
4858
5051
  receive: {
4859
5052
  audio: options.receiveAudio,
4860
- video: _this42.mediaProperties.mediaDirection.receiveVideo,
4861
- screenShareVideo: _this42.mediaProperties.mediaDirection.receiveShare,
4862
- remoteQualityLevel: _this42.mediaProperties.remoteQualityLevel
5053
+ video: _this44.mediaProperties.mediaDirection.receiveVideo,
5054
+ screenShareVideo: _this44.mediaProperties.mediaDirection.receiveShare,
5055
+ remoteQualityLevel: _this44.mediaProperties.remoteQualityLevel
4863
5056
  }
4864
5057
  });
4865
5058
  }).then(function () {
4866
- _this42.setLocalAudioTrack(track);
5059
+ _this44.setLocalAudioTrack(track);
4867
5060
  // todo: maybe this.mediaProperties.mediaDirection could be removed? it's duplicating stuff from webrtcMediaConnection
4868
- _this42.mediaProperties.mediaDirection.sendAudio = sendAudio;
4869
- _this42.mediaProperties.mediaDirection.receiveAudio = receiveAudio;
5061
+ _this44.mediaProperties.mediaDirection.sendAudio = sendAudio;
5062
+ _this44.mediaProperties.mediaDirection.receiveAudio = receiveAudio;
4870
5063
 
4871
5064
  // audio state could be undefined if you have not sent audio before
4872
- _this42.audio = _this42.audio || (0, _muteState.default)(_constants.AUDIO, _this42, _this42.mediaProperties.mediaDirection);
5065
+ _this44.audio = _this44.audio || (0, _muteState.default)(_constants.AUDIO, _this44, _this44.mediaProperties.mediaDirection);
4873
5066
  }));
4874
5067
  case 17:
4875
5068
  case "end":
@@ -4898,7 +5091,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4898
5091
  }, {
4899
5092
  key: "updateVideo",
4900
5093
  value: function updateVideo(options) {
4901
- var _this43 = this;
5094
+ var _this45 = this;
4902
5095
  if (!this.canUpdateMedia()) {
4903
5096
  return this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.VIDEO, options);
4904
5097
  }
@@ -4916,24 +5109,24 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4916
5109
  sendVideo: sendVideo,
4917
5110
  localStream: stream
4918
5111
  }).then(function () {
4919
- return _this43.mediaProperties.webrtcMediaConnection.updateSendReceiveOptions({
5112
+ return _this45.mediaProperties.webrtcMediaConnection.updateSendReceiveOptions({
4920
5113
  send: {
4921
5114
  video: track
4922
5115
  },
4923
5116
  receive: {
4924
- audio: _this43.mediaProperties.mediaDirection.receiveAudio,
5117
+ audio: _this45.mediaProperties.mediaDirection.receiveAudio,
4925
5118
  video: options.receiveVideo,
4926
- screenShareVideo: _this43.mediaProperties.mediaDirection.receiveShare,
4927
- remoteQualityLevel: _this43.mediaProperties.remoteQualityLevel
5119
+ screenShareVideo: _this45.mediaProperties.mediaDirection.receiveShare,
5120
+ remoteQualityLevel: _this45.mediaProperties.remoteQualityLevel
4928
5121
  }
4929
5122
  });
4930
5123
  }).then(function () {
4931
- _this43.setLocalVideoTrack(track);
4932
- _this43.mediaProperties.mediaDirection.sendVideo = sendVideo;
4933
- _this43.mediaProperties.mediaDirection.receiveVideo = receiveVideo;
5124
+ _this45.setLocalVideoTrack(track);
5125
+ _this45.mediaProperties.mediaDirection.sendVideo = sendVideo;
5126
+ _this45.mediaProperties.mediaDirection.receiveVideo = receiveVideo;
4934
5127
 
4935
5128
  // video state could be undefined if you have not sent video before
4936
- _this43.video = _this43.video || (0, _muteState.default)(_constants.VIDEO, _this43, _this43.mediaProperties.mediaDirection);
5129
+ _this45.video = _this45.video || (0, _muteState.default)(_constants.VIDEO, _this45, _this45.mediaProperties.mediaDirection);
4937
5130
  });
4938
5131
  }
4939
5132
 
@@ -4976,7 +5169,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4976
5169
  }, {
4977
5170
  key: "updateShare",
4978
5171
  value: function updateShare(options) {
4979
- var _this44 = this;
5172
+ var _this46 = this;
4980
5173
  if (!options.skipSignalingCheck && !this.canUpdateMedia()) {
4981
5174
  return this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.SHARE, options);
4982
5175
  }
@@ -4996,29 +5189,29 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
4996
5189
  sendShare: sendShare,
4997
5190
  localShare: stream
4998
5191
  }).then(function () {
4999
- return _this44.checkForStopShare(sendShare, previousSendShareStatus);
5192
+ return _this46.checkForStopShare(sendShare, previousSendShareStatus);
5000
5193
  }).then(function (startShare) {
5001
- return _this44.mediaProperties.webrtcMediaConnection.updateSendReceiveOptions({
5194
+ return _this46.mediaProperties.webrtcMediaConnection.updateSendReceiveOptions({
5002
5195
  send: {
5003
5196
  screenShareVideo: track
5004
5197
  },
5005
5198
  receive: {
5006
- audio: _this44.mediaProperties.mediaDirection.receiveAudio,
5007
- video: _this44.mediaProperties.mediaDirection.receiveVideo,
5199
+ audio: _this46.mediaProperties.mediaDirection.receiveAudio,
5200
+ video: _this46.mediaProperties.mediaDirection.receiveVideo,
5008
5201
  screenShareVideo: options.receiveShare,
5009
- remoteQualityLevel: _this44.mediaProperties.remoteQualityLevel
5202
+ remoteQualityLevel: _this46.mediaProperties.remoteQualityLevel
5010
5203
  }
5011
5204
  }).then(function () {
5012
5205
  if (startShare) {
5013
- return _this44.requestScreenShareFloor();
5206
+ return _this46.requestScreenShareFloor();
5014
5207
  }
5015
5208
  return _promise.default.resolve();
5016
5209
  });
5017
5210
  }).then(function () {
5018
- _this44.mediaProperties.mediaDirection.sendShare = sendShare;
5019
- _this44.mediaProperties.mediaDirection.receiveShare = receiveShare;
5211
+ _this46.mediaProperties.mediaDirection.sendShare = sendShare;
5212
+ _this46.mediaProperties.mediaDirection.receiveShare = receiveShare;
5020
5213
  }).catch(function (error) {
5021
- _this44.unsetLocalShareTrack();
5214
+ _this46.unsetLocalShareTrack();
5022
5215
  throw error;
5023
5216
  });
5024
5217
  }
@@ -5058,7 +5251,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5058
5251
  }, {
5059
5252
  key: "acknowledge",
5060
5253
  value: function acknowledge(type) {
5061
- var _this45 = this;
5254
+ var _this47 = this;
5062
5255
  if (!type) {
5063
5256
  return _promise.default.reject(new _parameter.default('Type must be set to acknowledge the meeting.'));
5064
5257
  }
@@ -5070,10 +5263,10 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5070
5263
  }).then(function (response) {
5071
5264
  return _promise.default.resolve(response);
5072
5265
  }).then(function (response) {
5073
- _this45.meetingFiniteStateMachine.ring(type);
5266
+ _this47.meetingFiniteStateMachine.ring(type);
5074
5267
  _metrics.default.postEvent({
5075
5268
  event: _config.eventType.ALERT_DISPLAYED,
5076
- meeting: _this45
5269
+ meeting: _this47
5077
5270
  });
5078
5271
  return _promise.default.resolve({
5079
5272
  response: response
@@ -5097,12 +5290,12 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5097
5290
  }, {
5098
5291
  key: "decline",
5099
5292
  value: function decline(reason) {
5100
- var _this46 = this;
5293
+ var _this48 = this;
5101
5294
  return _util.default.declineMeeting(this, reason).then(function (decline) {
5102
- _this46.meetingFiniteStateMachine.decline();
5295
+ _this48.meetingFiniteStateMachine.decline();
5103
5296
  return _promise.default.resolve(decline);
5104
5297
  }).catch(function (error) {
5105
- _this46.meetingFiniteStateMachine.fail(error);
5298
+ _this48.meetingFiniteStateMachine.fail(error);
5106
5299
  return _promise.default.reject(error);
5107
5300
  });
5108
5301
  }
@@ -5118,7 +5311,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5118
5311
  }, {
5119
5312
  key: "leave",
5120
5313
  value: function leave() {
5121
- var _this47 = this;
5314
+ var _this49 = this;
5122
5315
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
5123
5316
  _metrics.default.postEvent({
5124
5317
  event: _config.eventType.LEAVE,
@@ -5131,39 +5324,39 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5131
5324
  var leaveReason = options.reason || _constants.MEETING_REMOVED_REASON.CLIENT_LEAVE_REQUEST;
5132
5325
  _loggerProxy.default.logger.log('Meeting:index#leave --> Leaving a meeting');
5133
5326
  return _util.default.leaveMeeting(this, options).then(function (leave) {
5134
- _this47.meetingFiniteStateMachine.leave();
5135
- _this47.clearMeetingData();
5327
+ _this49.meetingFiniteStateMachine.leave();
5328
+ _this49.clearMeetingData();
5136
5329
 
5137
5330
  // upload logs on leave irrespective of meeting delete
5138
- _triggerProxy.default.trigger(_this47, {
5331
+ _triggerProxy.default.trigger(_this49, {
5139
5332
  file: 'meeting/index',
5140
5333
  function: 'leave'
5141
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this47);
5334
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this49);
5142
5335
 
5143
5336
  // TODO: more testing before we remove this code, we are not sure the scenarios for destroy here
5144
- if (_this47.wirelessShare || _this47.guest) {
5337
+ if (_this49.wirelessShare || _this49.guest) {
5145
5338
  // If screen sharing clean the meeting object
5146
- _triggerProxy.default.trigger(_this47, {
5339
+ _triggerProxy.default.trigger(_this49, {
5147
5340
  file: 'meeting/index',
5148
5341
  function: 'leave'
5149
5342
  }, _constants.EVENTS.DESTROY_MEETING, {
5150
5343
  reason: options.reason,
5151
- meetingId: _this47.id
5344
+ meetingId: _this49.id
5152
5345
  });
5153
5346
  }
5154
5347
  _loggerProxy.default.logger.log('Meeting:index#leave --> LEAVE REASON ', leaveReason);
5155
5348
  return leave;
5156
5349
  }).catch(function (error) {
5157
- _this47.meetingFiniteStateMachine.fail(error);
5350
+ _this49.meetingFiniteStateMachine.fail(error);
5158
5351
  _loggerProxy.default.logger.error('Meeting:index#leave --> Failed to leave ', error);
5159
5352
  // upload logs on leave irrespective of meeting delete
5160
- _triggerProxy.default.trigger(_this47, {
5353
+ _triggerProxy.default.trigger(_this49, {
5161
5354
  file: 'meeting/index',
5162
5355
  function: 'leave'
5163
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this47);
5356
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this49);
5164
5357
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_LEAVE_FAILURE, {
5165
- correlation_id: _this47.correlationId,
5166
- locus_id: _this47.locusUrl.split('/').pop(),
5358
+ correlation_id: _this49.correlationId,
5359
+ locus_id: _this49.locusUrl.split('/').pop(),
5167
5360
  reason: error.message,
5168
5361
  stack: error.stack,
5169
5362
  code: error.code
@@ -5183,7 +5376,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5183
5376
  }, {
5184
5377
  key: "startWhiteboardShare",
5185
5378
  value: function startWhiteboardShare(channelUrl, resourceToken) {
5186
- var _this48 = this;
5379
+ var _this50 = this;
5187
5380
  var whiteboard = this.locusInfo.mediaShares.find(function (element) {
5188
5381
  return element.name === 'whiteboard';
5189
5382
  });
@@ -5206,13 +5399,13 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5206
5399
  body.resourceToken = resourceToken;
5207
5400
  }
5208
5401
  return this.meetingRequest.changeMeetingFloor(body).then(function () {
5209
- _this48.isSharing = false;
5402
+ _this50.isSharing = false;
5210
5403
  return _promise.default.resolve();
5211
5404
  }).catch(function (error) {
5212
5405
  _loggerProxy.default.logger.error('Meeting:index#startWhiteboardShare --> Error ', error);
5213
5406
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_START_WHITEBOARD_SHARE_FAILURE, {
5214
- correlation_id: _this48.correlationId,
5215
- locus_id: _this48.locusUrl.split('/').pop(),
5407
+ correlation_id: _this50.correlationId,
5408
+ locus_id: _this50.locusUrl.split('/').pop(),
5216
5409
  reason: error.message,
5217
5410
  stack: error.stack,
5218
5411
  board: {
@@ -5235,7 +5428,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5235
5428
  }, {
5236
5429
  key: "stopWhiteboardShare",
5237
5430
  value: function stopWhiteboardShare(channelUrl) {
5238
- var _this49 = this;
5431
+ var _this51 = this;
5239
5432
  var whiteboard = this.locusInfo.mediaShares.find(function (element) {
5240
5433
  return element.name === 'whiteboard';
5241
5434
  });
@@ -5254,8 +5447,8 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5254
5447
  _metrics.default.sendBehavioralMetric(
5255
5448
  // @ts-ignore - check if STOP_WHITEBOARD_SHARE_FAILURE exists
5256
5449
  _constants2.default.STOP_WHITEBOARD_SHARE_FAILURE, {
5257
- correlation_id: _this49.correlationId,
5258
- locus_id: _this49.locusUrl.split('/').pop(),
5450
+ correlation_id: _this51.correlationId,
5451
+ locus_id: _this51.locusUrl.split('/').pop(),
5259
5452
  reason: error.message,
5260
5453
  stack: error.stack,
5261
5454
  board: {
@@ -5277,7 +5470,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5277
5470
  }, {
5278
5471
  key: "requestScreenShareFloor",
5279
5472
  value: function requestScreenShareFloor() {
5280
- var _this50 = this;
5473
+ var _this52 = this;
5281
5474
  var content = this.locusInfo.mediaShares.find(function (element) {
5282
5475
  return element.name === _constants.CONTENT;
5283
5476
  });
@@ -5293,13 +5486,13 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5293
5486
  uri: content.url,
5294
5487
  resourceUrl: this.resourceUrl
5295
5488
  }).then(function () {
5296
- _this50.isSharing = true;
5489
+ _this52.isSharing = true;
5297
5490
  return _promise.default.resolve();
5298
5491
  }).catch(function (error) {
5299
5492
  _loggerProxy.default.logger.error('Meeting:index#share --> Error ', error);
5300
5493
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_FAILURE, {
5301
- correlation_id: _this50.correlationId,
5302
- locus_id: _this50.locusUrl.split('/').pop(),
5494
+ correlation_id: _this52.correlationId,
5495
+ locus_id: _this52.locusUrl.split('/').pop(),
5303
5496
  reason: error.message,
5304
5497
  stack: error.stack
5305
5498
  });
@@ -5336,7 +5529,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5336
5529
  }, {
5337
5530
  key: "releaseScreenShareFloor",
5338
5531
  value: function releaseScreenShareFloor() {
5339
- var _this51 = this;
5532
+ var _this53 = this;
5340
5533
  var content = this.locusInfo.mediaShares.find(function (element) {
5341
5534
  return element.name === _constants.CONTENT;
5342
5535
  });
@@ -5360,14 +5553,14 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5360
5553
  }).catch(function (error) {
5361
5554
  _loggerProxy.default.logger.error('Meeting:index#releaseScreenShareFloor --> Error ', error);
5362
5555
  _metrics.default.sendBehavioralMetric(_constants2.default.STOP_FLOOR_REQUEST_FAILURE, {
5363
- correlation_id: _this51.correlationId,
5364
- locus_id: _this51.locusUrl.split('/').pop(),
5556
+ correlation_id: _this53.correlationId,
5557
+ locus_id: _this53.locusUrl.split('/').pop(),
5365
5558
  reason: error.message,
5366
5559
  stack: error.stack
5367
5560
  });
5368
5561
  return _promise.default.reject(error);
5369
5562
  }).finally(function () {
5370
- _this51.isSharing = false;
5563
+ _this53.isSharing = false;
5371
5564
  });
5372
5565
  }
5373
5566
  return _promise.default.reject(new _parameter.default('Cannot stop share without content'));
@@ -5382,7 +5575,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5382
5575
  }, {
5383
5576
  key: "startRecording",
5384
5577
  value: function startRecording() {
5385
- return _util.default.startRecording(this.meetingRequest, this.locusUrl, this.locusInfo);
5578
+ return this.recordingController.startRecording();
5386
5579
  }
5387
5580
 
5388
5581
  /**
@@ -5394,7 +5587,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5394
5587
  }, {
5395
5588
  key: "stopRecording",
5396
5589
  value: function stopRecording() {
5397
- return _util.default.stopRecording(this.meetingRequest, this.locusUrl, this.locusInfo);
5590
+ return this.recordingController.stopRecording();
5398
5591
  }
5399
5592
 
5400
5593
  /**
@@ -5406,7 +5599,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5406
5599
  }, {
5407
5600
  key: "pauseRecording",
5408
5601
  value: function pauseRecording() {
5409
- return _util.default.pauseRecording(this.meetingRequest, this.locusUrl, this.locusInfo);
5602
+ return this.recordingController.pauseRecording();
5410
5603
  }
5411
5604
 
5412
5605
  /**
@@ -5418,7 +5611,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5418
5611
  }, {
5419
5612
  key: "resumeRecording",
5420
5613
  value: function resumeRecording() {
5421
- return _util.default.resumeRecording(this.meetingRequest, this.locusUrl, this.locusInfo);
5614
+ return this.recordingController.resumeRecording();
5422
5615
  }
5423
5616
 
5424
5617
  /**
@@ -5499,7 +5692,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5499
5692
  }, {
5500
5693
  key: "changeVideoLayout",
5501
5694
  value: function changeVideoLayout(layoutType) {
5502
- var _this52 = this;
5695
+ var _this54 = this;
5503
5696
  var renderInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
5504
5697
  var main = renderInfo.main,
5505
5698
  content = renderInfo.content;
@@ -5553,7 +5746,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5553
5746
  }
5554
5747
  this.lastVideoLayoutInfo = (0, _cloneDeep2.default)(layoutInfo);
5555
5748
  this.locusInfo.once(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED, function (envelope) {
5556
- _triggerProxy.default.trigger(_this52, {
5749
+ _triggerProxy.default.trigger(_this54, {
5557
5750
  file: 'meeting/index',
5558
5751
  function: 'changeVideoLayout'
5559
5752
  }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_LAYOUT_UPDATE, {
@@ -5568,7 +5761,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5568
5761
  content: layoutInfo.content
5569
5762
  }).then(function (response) {
5570
5763
  if (response && response.body && response.body.locus) {
5571
- _this52.locusInfo.onFullLocus(response.body.locus);
5764
+ _this54.locusInfo.onFullLocus(response.body.locus);
5572
5765
  }
5573
5766
  }).catch(function (error) {
5574
5767
  _loggerProxy.default.logger.error('Meeting:index#changeVideoLayout --> Error ', error);
@@ -5584,7 +5777,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5584
5777
  }, {
5585
5778
  key: "setLocalVideoQuality",
5586
5779
  value: function setLocalVideoQuality(level) {
5587
- var _this53 = this;
5780
+ var _this55 = this;
5588
5781
  _loggerProxy.default.logger.log("Meeting:index#setLocalVideoQuality --> Setting quality to ".concat(level));
5589
5782
  if (!_constants.VIDEO_RESOLUTIONS[level]) {
5590
5783
  return this.rejectWithErrorLog("Meeting:index#setLocalVideoQuality --> ".concat(level, " not defined"));
@@ -5613,14 +5806,14 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5613
5806
  // open bug link: https://bugs.chromium.org/p/chromium/issues/detail?id=943469
5614
5807
  if (isBrowser('chrome') && this.mediaProperties.videoTrack) _media.default.stopTracks(this.mediaProperties.videoTrack);
5615
5808
  return this.getMediaStreams(mediaDirection, _constants.VIDEO_RESOLUTIONS[level]).then( /*#__PURE__*/function () {
5616
- var _ref15 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(_ref14) {
5617
- var _ref16, localStream;
5809
+ var _ref16 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(_ref15) {
5810
+ var _ref17, localStream;
5618
5811
  return _regenerator.default.wrap(function _callee8$(_context8) {
5619
5812
  while (1) switch (_context8.prev = _context8.next) {
5620
5813
  case 0:
5621
- _ref16 = (0, _slicedToArray2.default)(_ref14, 1), localStream = _ref16[0];
5814
+ _ref17 = (0, _slicedToArray2.default)(_ref15, 1), localStream = _ref17[0];
5622
5815
  _context8.next = 3;
5623
- return _this53.updateVideo({
5816
+ return _this55.updateVideo({
5624
5817
  sendVideo: true,
5625
5818
  receiveVideo: true,
5626
5819
  stream: localStream
@@ -5634,7 +5827,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5634
5827
  }, _callee8);
5635
5828
  }));
5636
5829
  return function (_x5) {
5637
- return _ref15.apply(this, arguments);
5830
+ return _ref16.apply(this, arguments);
5638
5831
  };
5639
5832
  }());
5640
5833
  }
@@ -5677,7 +5870,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5677
5870
  }, {
5678
5871
  key: "setMeetingQuality",
5679
5872
  value: function setMeetingQuality(level) {
5680
- var _this54 = this;
5873
+ var _this56 = this;
5681
5874
  _loggerProxy.default.logger.log("Meeting:index#setMeetingQuality --> Setting quality to ".concat(level));
5682
5875
  if (!_constants.QUALITY_LEVELS[level]) {
5683
5876
  return this.rejectWithErrorLog("Meeting:index#setMeetingQuality --> ".concat(level, " not defined"));
@@ -5699,15 +5892,15 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5699
5892
  receiveVideo = _this$mediaProperties4.receiveVideo,
5700
5893
  sendVideo = _this$mediaProperties4.sendVideo;
5701
5894
  return (sendVideo ? this.setLocalVideoQuality(level) : _promise.default.resolve()).then(function () {
5702
- return receiveAudio || receiveVideo ? _this54.setRemoteQualityLevel(level) : _promise.default.resolve();
5895
+ return receiveAudio || receiveVideo ? _this56.setRemoteQualityLevel(level) : _promise.default.resolve();
5703
5896
  }).catch(function (error) {
5704
5897
  // From troubleshooting it seems that the stream itself doesn't change the max-fs if the peer connection isn't stable
5705
- _this54.mediaProperties.setLocalQualityLevel(previousLevel.local);
5706
- _this54.mediaProperties.setRemoteQualityLevel(previousLevel.remote);
5898
+ _this56.mediaProperties.setLocalQualityLevel(previousLevel.local);
5899
+ _this56.mediaProperties.setRemoteQualityLevel(previousLevel.remote);
5707
5900
  _loggerProxy.default.logger.error("Meeting:index#setMeetingQuality --> ".concat(error.message));
5708
5901
  _metrics.default.sendBehavioralMetric(_constants2.default.SET_MEETING_QUALITY_FAILURE, {
5709
- correlation_id: _this54.correlationId,
5710
- locus_id: _this54.locusUrl.split('/').pop(),
5902
+ correlation_id: _this56.correlationId,
5903
+ locus_id: _this56.locusUrl.split('/').pop(),
5711
5904
  reason: error.message,
5712
5905
  stack: error.stack
5713
5906
  }, {
@@ -5733,7 +5926,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5733
5926
  }, {
5734
5927
  key: "shareScreen",
5735
5928
  value: function shareScreen() {
5736
- var _this55 = this;
5929
+ var _this57 = this;
5737
5930
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
5738
5931
  _loggerProxy.default.logger.log('Meeting:index#shareScreen --> Getting local share');
5739
5932
  var shareConstraints = _objectSpread({
@@ -5743,9 +5936,9 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5743
5936
 
5744
5937
  // @ts-ignore - config coming from registerPlugin
5745
5938
  return _media.default.getDisplayMedia(shareConstraints, this.config).then(function (shareStream) {
5746
- return _this55.updateShare({
5939
+ return _this57.updateShare({
5747
5940
  sendShare: true,
5748
- receiveShare: _this55.mediaProperties.mediaDirection.receiveShare,
5941
+ receiveShare: _this57.mediaProperties.mediaDirection.receiveShare,
5749
5942
  stream: shareStream
5750
5943
  });
5751
5944
  }).catch(function (error) {
@@ -5758,8 +5951,8 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5758
5951
  // TODO: The getDisplayMedia errors need to be moved inside `media.getDisplayMedia`
5759
5952
  var metricName = _constants2.default.GET_DISPLAY_MEDIA_FAILURE;
5760
5953
  var data = {
5761
- correlation_id: _this55.correlationId,
5762
- locus_id: _this55.locusUrl.split('/').pop(),
5954
+ correlation_id: _this57.correlationId,
5955
+ locus_id: _this57.locusUrl.split('/').pop(),
5763
5956
  reason: error.message,
5764
5957
  stack: error.stack
5765
5958
  };
@@ -5835,9 +6028,9 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
5835
6028
  */
5836
6029
  }, {
5837
6030
  key: "handleMediaLogging",
5838
- value: function handleMediaLogging(_ref17) {
5839
- var audioTrack = _ref17.audioTrack,
5840
- videoTrack = _ref17.videoTrack;
6031
+ value: function handleMediaLogging(_ref18) {
6032
+ var audioTrack = _ref18.audioTrack,
6033
+ videoTrack = _ref18.videoTrack;
5841
6034
  _util.default.handleVideoLogging(videoTrack);
5842
6035
  _util.default.handleAudioLogging(audioTrack);
5843
6036
  }
@@ -6044,7 +6237,7 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
6044
6237
  }, {
6045
6238
  key: "endMeetingForAll",
6046
6239
  value: function endMeetingForAll() {
6047
- var _this56 = this;
6240
+ var _this58 = this;
6048
6241
  _metrics.default.postEvent({
6049
6242
  event: _config.eventType.LEAVE,
6050
6243
  meeting: this,
@@ -6059,25 +6252,25 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
6059
6252
  locus_id: this.locusId
6060
6253
  });
6061
6254
  return _util.default.endMeetingForAll(this).then(function (end) {
6062
- _this56.meetingFiniteStateMachine.end();
6063
- _this56.clearMeetingData();
6255
+ _this58.meetingFiniteStateMachine.end();
6256
+ _this58.clearMeetingData();
6064
6257
  // upload logs on leave irrespective of meeting delete
6065
- _triggerProxy.default.trigger(_this56, {
6258
+ _triggerProxy.default.trigger(_this58, {
6066
6259
  file: 'meeting/index',
6067
6260
  function: 'endMeetingForAll'
6068
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this56);
6261
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this58);
6069
6262
  return end;
6070
6263
  }).catch(function (error) {
6071
- _this56.meetingFiniteStateMachine.fail(error);
6264
+ _this58.meetingFiniteStateMachine.fail(error);
6072
6265
  _loggerProxy.default.logger.error('Meeting:index#endMeetingForAll --> Failed to end meeting ', error);
6073
6266
  // upload logs on leave irrespective of meeting delete
6074
- _triggerProxy.default.trigger(_this56, {
6267
+ _triggerProxy.default.trigger(_this58, {
6075
6268
  file: 'meeting/index',
6076
6269
  function: 'endMeetingForAll'
6077
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this56);
6270
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this58);
6078
6271
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_END_ALL_FAILURE, {
6079
- correlation_id: _this56.correlationId,
6080
- locus_id: _this56.locusUrl.split('/').pop(),
6272
+ correlation_id: _this58.correlationId,
6273
+ locus_id: _this58.locusUrl.split('/').pop(),
6081
6274
  reason: error.message,
6082
6275
  stack: error.stack,
6083
6276
  code: error.code
@@ -6221,8 +6414,8 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
6221
6414
  * @memberof Meeting
6222
6415
  */
6223
6416
  function sendReaction(reactionType, skinToneType) {
6224
- var _this$locusInfo2, _this$locusInfo2$cont, _this$locusInfo2$cont2;
6225
- var reactionChannelUrl = (_this$locusInfo2 = this.locusInfo) === null || _this$locusInfo2 === void 0 ? void 0 : (_this$locusInfo2$cont = _this$locusInfo2.controls) === null || _this$locusInfo2$cont === void 0 ? void 0 : (_this$locusInfo2$cont2 = _this$locusInfo2$cont.reactions) === null || _this$locusInfo2$cont2 === void 0 ? void 0 : _this$locusInfo2$cont2.reactionChannelUrl;
6417
+ var _this$locusInfo6, _this$locusInfo6$cont, _this$locusInfo6$cont2;
6418
+ var reactionChannelUrl = (_this$locusInfo6 = this.locusInfo) === null || _this$locusInfo6 === void 0 ? void 0 : (_this$locusInfo6$cont = _this$locusInfo6.controls) === null || _this$locusInfo6$cont === void 0 ? void 0 : (_this$locusInfo6$cont2 = _this$locusInfo6$cont.reactions) === null || _this$locusInfo6$cont2 === void 0 ? void 0 : _this$locusInfo6$cont2.reactionChannelUrl;
6226
6419
  var participantId = this.members.selfId;
6227
6420
  var reactionData = _reactions.Reactions[reactionType];
6228
6421
  if (!reactionData) {
@@ -6253,8 +6446,8 @@ var Meeting = /*#__PURE__*/function (_StatelessWebexPlugin) {
6253
6446
  }, {
6254
6447
  key: "toggleReactions",
6255
6448
  value: function toggleReactions(enable) {
6256
- var _this$locusInfo3, _this$locusInfo3$cont, _this$locusInfo3$cont2;
6257
- var isEnabled = (_this$locusInfo3 = this.locusInfo) === null || _this$locusInfo3 === void 0 ? void 0 : (_this$locusInfo3$cont = _this$locusInfo3.controls) === null || _this$locusInfo3$cont === void 0 ? void 0 : (_this$locusInfo3$cont2 = _this$locusInfo3$cont.reactions) === null || _this$locusInfo3$cont2 === void 0 ? void 0 : _this$locusInfo3$cont2.enabled;
6449
+ var _this$locusInfo7, _this$locusInfo7$cont, _this$locusInfo7$cont2;
6450
+ var isEnabled = (_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.enabled;
6258
6451
  if (isEnabled && enable || !isEnabled && !enable) {
6259
6452
  return _promise.default.resolve("Reactions are already ".concat(isEnabled ? 'enabled' : 'disabled', "."));
6260
6453
  }