@webex/plugin-meetings 3.3.1 → 3.4.0-next.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/dist/breakouts/breakout.js +1 -1
  2. package/dist/breakouts/index.js +7 -2
  3. package/dist/breakouts/index.js.map +1 -1
  4. package/dist/constants.js +11 -4
  5. package/dist/constants.js.map +1 -1
  6. package/dist/interpretation/index.js +1 -1
  7. package/dist/interpretation/siLanguage.js +1 -1
  8. package/dist/locus-info/selfUtils.js +0 -5
  9. package/dist/locus-info/selfUtils.js.map +1 -1
  10. package/dist/media/MediaConnectionAwaiter.js +70 -15
  11. package/dist/media/MediaConnectionAwaiter.js.map +1 -1
  12. package/dist/media/index.js +18 -9
  13. package/dist/media/index.js.map +1 -1
  14. package/dist/meeting/connectionStateHandler.js +67 -0
  15. package/dist/meeting/connectionStateHandler.js.map +1 -0
  16. package/dist/meeting/index.js +576 -374
  17. package/dist/meeting/index.js.map +1 -1
  18. package/dist/meeting/locusMediaRequest.js +7 -0
  19. package/dist/meeting/locusMediaRequest.js.map +1 -1
  20. package/dist/meeting/muteState.js +6 -1
  21. package/dist/meeting/muteState.js.map +1 -1
  22. package/dist/meeting/util.js +1 -0
  23. package/dist/meeting/util.js.map +1 -1
  24. package/dist/meeting-info/index.js +4 -4
  25. package/dist/meeting-info/index.js.map +1 -1
  26. package/dist/meeting-info/meeting-info-v2.js +2 -2
  27. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  28. package/dist/meeting-info/util.js +17 -17
  29. package/dist/meeting-info/util.js.map +1 -1
  30. package/dist/meeting-info/utilv2.js +16 -16
  31. package/dist/meeting-info/utilv2.js.map +1 -1
  32. package/dist/meetings/collection.js +1 -1
  33. package/dist/meetings/collection.js.map +1 -1
  34. package/dist/meetings/index.js +41 -35
  35. package/dist/meetings/index.js.map +1 -1
  36. package/dist/meetings/meetings.types.js +8 -0
  37. package/dist/meetings/meetings.types.js.map +1 -1
  38. package/dist/meetings/util.js +3 -2
  39. package/dist/meetings/util.js.map +1 -1
  40. package/dist/metrics/constants.js +2 -1
  41. package/dist/metrics/constants.js.map +1 -1
  42. package/dist/metrics/index.js +57 -0
  43. package/dist/metrics/index.js.map +1 -1
  44. package/dist/personal-meeting-room/index.js +1 -1
  45. package/dist/personal-meeting-room/index.js.map +1 -1
  46. package/dist/reachability/clusterReachability.js +108 -53
  47. package/dist/reachability/clusterReachability.js.map +1 -1
  48. package/dist/reachability/index.js +546 -115
  49. package/dist/reachability/index.js.map +1 -1
  50. package/dist/reconnection-manager/index.js +1 -1
  51. package/dist/reconnection-manager/index.js.map +1 -1
  52. package/dist/rtcMetrics/index.js +26 -6
  53. package/dist/rtcMetrics/index.js.map +1 -1
  54. package/dist/types/constants.d.ts +11 -3
  55. package/dist/types/media/MediaConnectionAwaiter.d.ts +24 -4
  56. package/dist/types/meeting/connectionStateHandler.d.ts +30 -0
  57. package/dist/types/meeting/index.d.ts +28 -8
  58. package/dist/types/meeting/locusMediaRequest.d.ts +2 -0
  59. package/dist/types/meeting-info/index.d.ts +3 -2
  60. package/dist/types/meeting-info/meeting-info-v2.d.ts +3 -2
  61. package/dist/types/meeting-info/util.d.ts +5 -4
  62. package/dist/types/meeting-info/utilv2.d.ts +3 -2
  63. package/dist/types/meetings/collection.d.ts +3 -2
  64. package/dist/types/meetings/index.d.ts +6 -4
  65. package/dist/types/meetings/meetings.types.d.ts +9 -0
  66. package/dist/types/metrics/constants.d.ts +1 -0
  67. package/dist/types/metrics/index.d.ts +15 -0
  68. package/dist/types/reachability/clusterReachability.d.ts +31 -3
  69. package/dist/types/reachability/index.d.ts +107 -4
  70. package/dist/types/rtcMetrics/index.d.ts +11 -1
  71. package/dist/webinar/index.js +1 -1
  72. package/package.json +23 -23
  73. package/src/breakouts/index.ts +7 -1
  74. package/src/constants.ts +13 -17
  75. package/src/locus-info/selfUtils.ts +0 -5
  76. package/src/media/MediaConnectionAwaiter.ts +89 -14
  77. package/src/media/index.ts +18 -9
  78. package/src/meeting/connectionStateHandler.ts +65 -0
  79. package/src/meeting/index.ts +541 -298
  80. package/src/meeting/locusMediaRequest.ts +5 -0
  81. package/src/meeting/muteState.ts +6 -1
  82. package/src/meeting/util.ts +1 -0
  83. package/src/meeting-info/index.ts +9 -6
  84. package/src/meeting-info/meeting-info-v2.ts +4 -4
  85. package/src/meeting-info/util.ts +23 -28
  86. package/src/meeting-info/utilv2.ts +18 -24
  87. package/src/meetings/collection.ts +3 -3
  88. package/src/meetings/index.ts +43 -43
  89. package/src/meetings/meetings.types.ts +11 -0
  90. package/src/meetings/util.ts +5 -4
  91. package/src/metrics/constants.ts +1 -0
  92. package/src/metrics/index.ts +44 -0
  93. package/src/personal-meeting-room/index.ts +2 -2
  94. package/src/reachability/clusterReachability.ts +86 -25
  95. package/src/reachability/index.ts +364 -30
  96. package/src/reconnection-manager/index.ts +1 -1
  97. package/src/rtcMetrics/index.ts +25 -5
  98. package/test/unit/spec/breakouts/index.ts +51 -32
  99. package/test/unit/spec/locus-info/selfUtils.js +25 -23
  100. package/test/unit/spec/media/MediaConnectionAwaiter.ts +131 -32
  101. package/test/unit/spec/media/index.ts +75 -34
  102. package/test/unit/spec/meeting/connectionStateHandler.ts +102 -0
  103. package/test/unit/spec/meeting/index.js +807 -185
  104. package/test/unit/spec/meeting/locusMediaRequest.ts +7 -0
  105. package/test/unit/spec/meeting/muteState.js +24 -0
  106. package/test/unit/spec/meeting-info/index.js +4 -4
  107. package/test/unit/spec/meeting-info/meetinginfov2.js +24 -28
  108. package/test/unit/spec/meeting-info/request.js +2 -2
  109. package/test/unit/spec/meeting-info/utilv2.js +41 -49
  110. package/test/unit/spec/meetings/index.js +44 -3
  111. package/test/unit/spec/metrics/index.js +126 -0
  112. package/test/unit/spec/multistream/mediaRequestManager.ts +2 -2
  113. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -2
  114. package/test/unit/spec/reachability/clusterReachability.ts +116 -22
  115. package/test/unit/spec/reachability/index.ts +1398 -131
  116. package/test/unit/spec/rtcMetrics/index.ts +32 -0
  117. package/dist/mediaQualityMetrics/config.js +0 -321
  118. package/dist/mediaQualityMetrics/config.js.map +0 -1
  119. package/dist/networkQualityMonitor/index.js +0 -227
  120. package/dist/networkQualityMonitor/index.js.map +0 -1
  121. package/dist/statsAnalyzer/global.js +0 -44
  122. package/dist/statsAnalyzer/global.js.map +0 -1
  123. package/dist/statsAnalyzer/index.js +0 -1072
  124. package/dist/statsAnalyzer/index.js.map +0 -1
  125. package/dist/statsAnalyzer/mqaUtil.js +0 -368
  126. package/dist/statsAnalyzer/mqaUtil.js.map +0 -1
  127. package/dist/types/mediaQualityMetrics/config.d.ts +0 -247
  128. package/dist/types/networkQualityMonitor/index.d.ts +0 -70
  129. package/dist/types/statsAnalyzer/global.d.ts +0 -36
  130. package/dist/types/statsAnalyzer/index.d.ts +0 -217
  131. package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -48
  132. package/src/mediaQualityMetrics/config.ts +0 -255
  133. package/src/networkQualityMonitor/index.ts +0 -211
  134. package/src/statsAnalyzer/global.ts +0 -37
  135. package/src/statsAnalyzer/index.ts +0 -1318
  136. package/src/statsAnalyzer/mqaUtil.ts +0 -463
  137. package/test/unit/spec/networkQualityMonitor/index.js +0 -99
  138. package/test/unit/spec/stats-analyzer/index.js +0 -1819
@@ -19,6 +19,7 @@ exports.default = exports.ScreenShareFloorStatus = exports.MEDIA_UPDATE_TYPE = v
19
19
  var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
20
20
  var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
21
21
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
22
+ var _map = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/map"));
22
23
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
23
24
  var _values = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/values"));
24
25
  var _typeof2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/typeof"));
@@ -41,8 +42,6 @@ var _mediaHelpers = require("@webex/media-helpers");
41
42
  var _internalPluginVoicea = require("@webex/internal-plugin-voicea");
42
43
  var _voiceaMeeting = require("./voicea-meeting");
43
44
  var _webexErrors = require("../common/errors/webex-errors");
44
- var _statsAnalyzer = require("../statsAnalyzer");
45
- var _networkQualityMonitor = _interopRequireDefault(require("../networkQualityMonitor"));
46
45
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
47
46
  var _util = _interopRequireDefault(require("../common/events/util"));
48
47
  var _triggerProxy = _interopRequireDefault(require("../common/events/trigger-proxy"));
@@ -83,6 +82,8 @@ var _recordingController = _interopRequireDefault(require("../recording-controll
83
82
  var _controlsOptionsManager = _interopRequireDefault(require("../controls-options-manager"));
84
83
  var _permission = _interopRequireDefault(require("../common/errors/permission"));
85
84
  var _locusMediaRequest = require("./locusMediaRequest");
85
+ var _connectionStateHandler = require("./connectionStateHandler");
86
+ var _rtcMetrics = _interopRequireDefault(require("../rtcMetrics"));
86
87
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof _Symbol !== "undefined" && o[_Symbol$iterator] || o["@@iterator"]; if (!it) { if (_Array$isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
87
88
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return _Array$from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
88
89
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
@@ -91,6 +92,10 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
91
92
  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); }; }
92
93
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } // @ts-ignore - Fix this
93
94
  // @ts-ignore - Types not available for @webex/common
95
+ // default callback so we don't call an undefined function, but in practice it should never be used
96
+ var DEFAULT_ICE_PHASE_CALLBACK = function DEFAULT_ICE_PHASE_CALLBACK() {
97
+ return 'JOIN_MEETING_FINAL';
98
+ };
94
99
  var logRequest = function logRequest(request, _ref) {
95
100
  var _ref$logText = _ref.logText,
96
101
  logText = _ref$logText === void 0 ? '' : _ref$logText;
@@ -497,6 +502,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
497
502
  file: 'meeting/index',
498
503
  function: 'setUpVoiceaListeners'
499
504
  }), "event#").concat(_constants.EVENT_TRIGGERS.MEETING_STARTED_RECEIVING_TRANSCRIPTION));
505
+ if (_this.getCurUserType() !== 'host') {
506
+ delete payload.spokenLanguages;
507
+ }
500
508
 
501
509
  // @ts-ignore
502
510
  _this.trigger(_constants.EVENT_TRIGGERS.MEETING_STARTED_RECEIVING_TRANSCRIPTION, payload);
@@ -523,13 +531,17 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
523
531
  interimCaptions: _this.transcription.interimCaptions
524
532
  });
525
533
  }));
526
- (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "retriedWithTurnServer", void 0);
534
+ (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "addMediaData", void 0);
527
535
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "sendSlotManager", new _sendSlotManager.default(_loggerProxy.default));
528
536
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "deferSDPAnswer", void 0);
529
537
  // used for waiting for a response
530
538
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "sdpResponseTimer", void 0);
531
539
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "hasMediaConnectionConnectedAtLeastOnce", void 0);
532
540
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "joinWithMediaRetryInfo", void 0);
541
+ (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "connectionStateHandler", void 0);
542
+ (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "iceCandidateErrors", void 0);
543
+ (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "iceCandidatesCount", void 0);
544
+ (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "rtcMetrics", void 0);
533
545
  /**
534
546
  * Callback called when a relay event is received from meeting LLM Connection
535
547
  * @param {RelayEvent} e Event object coming from LLM Connection
@@ -661,7 +673,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
661
673
  * @returns {undefined}
662
674
  */
663
675
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "setupSdpListeners", function () {
664
- _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.Event.REMOTE_SDP_ANSWER_PROCESSED, function () {
676
+ _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.MediaConnectionEventNames.REMOTE_SDP_ANSWER_PROCESSED, function () {
665
677
  // @ts-ignore
666
678
  var cdl = _this.webex.internal.newMetrics.callDiagnosticLatencies;
667
679
 
@@ -683,7 +695,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
683
695
  _this.sdpResponseTimer = undefined;
684
696
  }
685
697
  });
686
- _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.Event.LOCAL_SDP_OFFER_GENERATED, function () {
698
+ _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.MediaConnectionEventNames.LOCAL_SDP_OFFER_GENERATED, function () {
687
699
  // @ts-ignore
688
700
  _this.webex.internal.newMetrics.submitClientEvent({
689
701
  name: 'client.media-engine.local-sdp-generated',
@@ -695,7 +707,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
695
707
  // Instantiate Defer so that the SDP offer/answer exchange timeout can start, see waitForRemoteSDPAnswer()
696
708
  _this.deferSDPAnswer = new _common.Defer();
697
709
  });
698
- _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.Event.LOCAL_SDP_ANSWER_GENERATED, function () {
710
+ _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.MediaConnectionEventNames.LOCAL_SDP_ANSWER_GENERATED, function () {
699
711
  // we are sending "remote-sdp-received" only after we've generated the answer - this indicates that we've fully processed that incoming offer
700
712
  // @ts-ignore
701
713
  _this.webex.internal.newMetrics.submitClientEvent({
@@ -708,16 +720,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
708
720
  });
709
721
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "setupMediaConnectionListeners", function () {
710
722
  _this.setupSdpListeners();
711
- _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.Event.ROAP_STARTED, function () {
723
+ _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.MediaConnectionEventNames.ROAP_STARTED, function () {
712
724
  _this.isRoapInProgress = true;
713
725
  });
714
- _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.Event.ROAP_DONE, function () {
726
+ _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.MediaConnectionEventNames.ROAP_DONE, function () {
715
727
  _this.mediaNegotiatedEvent();
716
728
  _this.isRoapInProgress = false;
717
729
  _this.processNextQueuedMediaUpdate();
718
730
  });
719
- _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.Event.ROAP_FAILURE, _this.handleRoapFailure);
720
- _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.Event.ROAP_MESSAGE_TO_SEND, function (event) {
731
+ _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.MediaConnectionEventNames.ROAP_FAILURE, _this.handleRoapFailure);
732
+ _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.MediaConnectionEventNames.ROAP_MESSAGE_TO_SEND, function (event) {
721
733
  var LOG_HEADER = "Meeting:index#setupMediaConnectionListeners.ROAP_MESSAGE_TO_SEND --> correlationId=".concat(_this.correlationId);
722
734
  switch (event.roapMessage.messageType) {
723
735
  case 'OK':
@@ -743,7 +755,23 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
743
755
  }
744
756
  }), {
745
757
  logText: "".concat(LOG_HEADER, " Roap Offer")
746
- }).catch(function () {
758
+ }).catch(function (error) {
759
+ // @ts-ignore
760
+ _this.webex.internal.newMetrics.submitClientEvent({
761
+ name: 'client.media-engine.remote-sdp-received',
762
+ payload: {
763
+ canProceed: false,
764
+ errors: [
765
+ // @ts-ignore
766
+ _this.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({
767
+ clientErrorCode: _internalPluginMetrics.CALL_DIAGNOSTIC_CONFIG.MISSING_ROAP_ANSWER_CLIENT_CODE
768
+ })]
769
+ },
770
+ options: {
771
+ meetingId: _this.id,
772
+ rawError: error
773
+ }
774
+ });
747
775
  _this.deferSDPAnswer.reject(new Error('failed to send ROAP SDP offer'));
748
776
  clearTimeout(_this.sdpResponseTimer);
749
777
  _this.sdpResponseTimer = undefined;
@@ -795,7 +823,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
795
823
  });
796
824
 
797
825
  // eslint-disable-next-line no-param-reassign
798
- _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.Event.REMOTE_TRACK_ADDED, function (event) {
826
+ _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.MediaConnectionEventNames.REMOTE_TRACK_ADDED, function (event) {
799
827
  _loggerProxy.default.logger.log("Meeting:index#setupMediaConnectionListeners --> REMOTE_TRACK_ADDED event received for webrtcMediaConnection: ".concat((0, _stringify.default)(event)));
800
828
  if (event.track) {
801
829
  var mediaTrack = event.track;
@@ -824,7 +852,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
824
852
  if (eventType && mediaTrack) {
825
853
  _triggerProxy.default.trigger((0, _assertThisInitialized2.default)(_this), {
826
854
  file: 'meeting/index',
827
- function: 'setupRemoteTrackListener:Event.REMOTE_TRACK_ADDED'
855
+ function: 'setupRemoteTrackListener:MediaConnectionEventNames.REMOTE_TRACK_ADDED'
828
856
  }, _constants.EVENT_TRIGGERS.MEDIA_READY, {
829
857
  type: eventType,
830
858
  stream: remoteStream.outputStream
@@ -832,7 +860,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
832
860
  }
833
861
  }
834
862
  });
835
- _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.Event.CONNECTION_STATE_CHANGED, function (event) {
863
+ _this.connectionStateHandler = new _connectionStateHandler.ConnectionStateHandler(_this.mediaProperties.webrtcMediaConnection);
864
+ _this.connectionStateHandler.on(_connectionStateHandler.ConnectionStateEvent.stateChanged, function (event) {
836
865
  var connectionFailed = function connectionFailed() {
837
866
  _metrics.default.sendBehavioralMetric(_constants2.default.CONNECTION_FAILURE, {
838
867
  correlation_id: _this.correlationId,
@@ -909,7 +938,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
909
938
  break;
910
939
  }
911
940
  });
912
- _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.Event.ACTIVE_SPEAKERS_CHANGED, function (csis) {
941
+ _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.MediaConnectionEventNames.ACTIVE_SPEAKERS_CHANGED, function (csis) {
913
942
  _triggerProxy.default.trigger((0, _assertThisInitialized2.default)(_this), {
914
943
  file: 'meeting/index',
915
944
  function: 'setupMediaConnectionListeners'
@@ -924,7 +953,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
924
953
  })
925
954
  });
926
955
  });
927
- _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.Event.VIDEO_SOURCES_COUNT_CHANGED, function (numTotalSources, numLiveSources, mediaContent) {
956
+ _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.MediaConnectionEventNames.VIDEO_SOURCES_COUNT_CHANGED, function (numTotalSources, numLiveSources, mediaContent) {
928
957
  _triggerProxy.default.trigger((0, _assertThisInitialized2.default)(_this), {
929
958
  file: 'meeting/index',
930
959
  function: 'setupMediaConnectionListeners'
@@ -937,7 +966,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
937
966
  _this.mediaRequestManagers.video.setNumCurrentSources(numTotalSources, numLiveSources);
938
967
  }
939
968
  });
940
- _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.Event.AUDIO_SOURCES_COUNT_CHANGED, function (numTotalSources, numLiveSources, mediaContent) {
969
+ _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.MediaConnectionEventNames.AUDIO_SOURCES_COUNT_CHANGED, function (numTotalSources, numLiveSources, mediaContent) {
941
970
  _triggerProxy.default.trigger((0, _assertThisInitialized2.default)(_this), {
942
971
  file: 'meeting/index',
943
972
  function: 'setupMediaConnectionListeners'
@@ -947,6 +976,28 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
947
976
  mediaContent: mediaContent
948
977
  });
949
978
  });
979
+ _this.iceCandidateErrors.clear();
980
+ _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.MediaConnectionEventNames.ICE_CANDIDATE_ERROR, function (event) {
981
+ var errorCode = event.error.errorCode;
982
+ var errorText = event.error.errorText;
983
+ if (errorCode === 600 && errorText === 'Address not associated with the desired network interface.') {
984
+ return;
985
+ }
986
+ if (errorText.endsWith('.')) {
987
+ errorText = errorText.slice(0, -1);
988
+ }
989
+ errorText = errorText.toLowerCase();
990
+ errorText = errorText.replace(/ /g, '_');
991
+ var error = "".concat(errorCode, "_").concat(errorText);
992
+ var count = _this.iceCandidateErrors.get(error) || 0;
993
+ _this.iceCandidateErrors.set(error, count + 1);
994
+ });
995
+ _this.iceCandidatesCount = 0;
996
+ _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.MediaConnectionEventNames.ICE_CANDIDATE, function (event) {
997
+ if (event.candidate) {
998
+ _this.iceCandidatesCount += 1;
999
+ }
1000
+ });
950
1001
  });
951
1002
  /**
952
1003
  * Registers for all required StatsAnalyzer events
@@ -955,7 +1006,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
955
1006
  * @memberof Meetings
956
1007
  */
957
1008
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "setupStatsAnalyzerEventHandlers", function () {
958
- _this.statsAnalyzer.on(_statsAnalyzer.EVENTS.MEDIA_QUALITY, function (options) {
1009
+ _this.statsAnalyzer.on(_internalMediaCore.StatsAnalyzerEventNames.MEDIA_QUALITY, function (options) {
959
1010
  var _this$webex$meetings$;
960
1011
  // TODO: might have to send the same event to the developer
961
1012
  // Add ip address info if geo hint is present
@@ -968,14 +1019,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
968
1019
  name: 'client.mediaquality.event',
969
1020
  options: {
970
1021
  meetingId: _this.id,
971
- networkType: options.networkType
1022
+ networkType: options.data.networkType
972
1023
  },
973
1024
  payload: {
974
1025
  intervals: [options.data]
975
1026
  }
976
1027
  });
977
1028
  });
978
- _this.statsAnalyzer.on(_statsAnalyzer.EVENTS.LOCAL_MEDIA_STARTED, function (data) {
1029
+ _this.statsAnalyzer.on(_internalMediaCore.StatsAnalyzerEventNames.LOCAL_MEDIA_STARTED, function (data) {
979
1030
  _triggerProxy.default.trigger((0, _assertThisInitialized2.default)(_this), {
980
1031
  file: 'meeting/index',
981
1032
  function: 'addMedia'
@@ -984,28 +1035,28 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
984
1035
  _this.webex.internal.newMetrics.submitClientEvent({
985
1036
  name: 'client.media.tx.start',
986
1037
  payload: {
987
- mediaType: data.type,
988
- shareInstanceId: data.type === 'share' ? _this.localShareInstanceId : undefined
1038
+ mediaType: data.mediaType,
1039
+ shareInstanceId: data.mediaType === 'share' ? _this.localShareInstanceId : undefined
989
1040
  },
990
1041
  options: {
991
1042
  meetingId: _this.id
992
1043
  }
993
1044
  });
994
1045
  });
995
- _this.statsAnalyzer.on(_statsAnalyzer.EVENTS.LOCAL_MEDIA_STOPPED, function (data) {
1046
+ _this.statsAnalyzer.on(_internalMediaCore.StatsAnalyzerEventNames.LOCAL_MEDIA_STOPPED, function (data) {
996
1047
  // @ts-ignore
997
1048
  _this.webex.internal.newMetrics.submitClientEvent({
998
1049
  name: 'client.media.tx.stop',
999
1050
  payload: {
1000
- mediaType: data.type,
1001
- shareInstanceId: data.type === 'share' ? _this.localShareInstanceId : undefined
1051
+ mediaType: data.mediaType,
1052
+ shareInstanceId: data.mediaType === 'share' ? _this.localShareInstanceId : undefined
1002
1053
  },
1003
1054
  options: {
1004
1055
  meetingId: _this.id
1005
1056
  }
1006
1057
  });
1007
1058
  });
1008
- _this.statsAnalyzer.on(_statsAnalyzer.EVENTS.REMOTE_MEDIA_STARTED, function (data) {
1059
+ _this.statsAnalyzer.on(_internalMediaCore.StatsAnalyzerEventNames.REMOTE_MEDIA_STARTED, function (data) {
1009
1060
  _triggerProxy.default.trigger((0, _assertThisInitialized2.default)(_this), {
1010
1061
  file: 'meeting/index',
1011
1062
  function: 'addMedia'
@@ -1014,14 +1065,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1014
1065
  _this.webex.internal.newMetrics.submitClientEvent({
1015
1066
  name: 'client.media.rx.start',
1016
1067
  payload: {
1017
- mediaType: data.type,
1018
- shareInstanceId: data.type === 'share' ? _this.remoteShareInstanceId : undefined
1068
+ mediaType: data.mediaType,
1069
+ shareInstanceId: data.mediaType === 'share' ? _this.remoteShareInstanceId : undefined
1019
1070
  },
1020
1071
  options: {
1021
1072
  meetingId: _this.id
1022
1073
  }
1023
1074
  });
1024
- if (data.type === 'share') {
1075
+ if (data.mediaType === 'share') {
1025
1076
  // @ts-ignore
1026
1077
  _this.webex.internal.newMetrics.submitClientEvent({
1027
1078
  name: 'client.media.render.start',
@@ -1035,19 +1086,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1035
1086
  });
1036
1087
  }
1037
1088
  });
1038
- _this.statsAnalyzer.on(_statsAnalyzer.EVENTS.REMOTE_MEDIA_STOPPED, function (data) {
1089
+ _this.statsAnalyzer.on(_internalMediaCore.StatsAnalyzerEventNames.REMOTE_MEDIA_STOPPED, function (data) {
1039
1090
  // @ts-ignore
1040
1091
  _this.webex.internal.newMetrics.submitClientEvent({
1041
1092
  name: 'client.media.rx.stop',
1042
1093
  payload: {
1043
- mediaType: data.type,
1044
- shareInstanceId: data.type === 'share' ? _this.remoteShareInstanceId : undefined
1094
+ mediaType: data.mediaType,
1095
+ shareInstanceId: data.mediaType === 'share' ? _this.remoteShareInstanceId : undefined
1045
1096
  },
1046
1097
  options: {
1047
1098
  meetingId: _this.id
1048
1099
  }
1049
1100
  });
1050
- if (data.type === 'share') {
1101
+ if (data.mediaType === 'share') {
1051
1102
  // @ts-ignore
1052
1103
  _this.webex.internal.newMetrics.submitClientEvent({
1053
1104
  name: 'client.media.render.stop',
@@ -1192,10 +1243,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1192
1243
  * @returns {undefined}
1193
1244
  */
1194
1245
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "handleShareVideoStreamMuteStateChange", function (muted) {
1246
+ var _this$statsAnalyzer;
1195
1247
  _loggerProxy.default.logger.log("Meeting:index#handleShareVideoStreamMuteStateChange --> Share video stream mute state changed to muted ".concat(muted));
1196
1248
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_VIDEO_MUTE_STATE_CHANGE, {
1197
1249
  correlationId: _this.correlationId,
1198
- muted: muted
1250
+ muted: muted,
1251
+ encoderImplementation: (_this$statsAnalyzer = _this.statsAnalyzer) === null || _this$statsAnalyzer === void 0 ? void 0 : _this$statsAnalyzer.shareVideoEncoderImplementation
1199
1252
  });
1200
1253
  });
1201
1254
  /**
@@ -2043,13 +2096,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2043
2096
  _this.turnServerUsed = false;
2044
2097
 
2045
2098
  /**
2046
- * Whether retry was done using TURN Discovery.
2099
+ * Contains information used during the addMedia() operation:
2100
+ * retriedWithTurnServer - whether retry was done using TURN Discovery
2101
+ * icePhaseCallback - callback for determining the value for icePhase when sending failure event to CA
2102
+ *
2047
2103
  * @instance
2048
- * @type {boolean}
2104
+ * @type {Object}
2049
2105
  * @private
2050
2106
  * @memberof Meeting
2051
2107
  */
2052
- _this.retriedWithTurnServer = false;
2108
+ _this.addMediaData = {
2109
+ retriedWithTurnServer: false,
2110
+ icePhaseCallback: DEFAULT_ICE_PHASE_CALLBACK
2111
+ };
2053
2112
 
2054
2113
  /**
2055
2114
  * Whether or not the media connection has ever successfully connected.
@@ -2071,6 +2130,33 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2071
2130
  isRetry: false,
2072
2131
  prevJoinResponse: undefined
2073
2132
  };
2133
+
2134
+ /**
2135
+ * Connection state handler
2136
+ * @instance
2137
+ * @type {ConnectionStateHandler}
2138
+ * @private
2139
+ * @memberof Meeting
2140
+ */
2141
+ _this.connectionStateHandler = undefined;
2142
+
2143
+ /**
2144
+ * ICE Candidates errors map
2145
+ * @instance
2146
+ * @type {Map<[number, string], number>}
2147
+ * @private
2148
+ * @memberof Meeting
2149
+ */
2150
+ _this.iceCandidateErrors = new _map.default();
2151
+
2152
+ /**
2153
+ * Gathered ICE Candidates count
2154
+ * @instance
2155
+ * @type {number}
2156
+ * @private
2157
+ * @memberof Meeting
2158
+ */
2159
+ _this.iceCandidatesCount = 0;
2074
2160
  return _this;
2075
2161
  }
2076
2162
 
@@ -2342,13 +2428,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2342
2428
  _loggerProxy.default.logger.info("Meeting:index#refreshPermissionToken --> cannot refresh the permission token, because we don't have it (reason=".concat(reason, ")"));
2343
2429
  return _context6.abrupt("return");
2344
2430
  case 3:
2345
- isStartingSpaceInstantV2Meeting = this.destinationType === _constants._CONVERSATION_URL_ &&
2431
+ isStartingSpaceInstantV2Meeting = this.destinationType === _constants.DESTINATION_TYPE.CONVERSATION_URL &&
2346
2432
  // @ts-ignore - config coming from registerPlugin
2347
2433
  this.config.experimental.enableAdhocMeetings &&
2348
2434
  // @ts-ignore
2349
2435
  this.webex.meetings.preferredWebexSite;
2350
2436
  destination = isStartingSpaceInstantV2Meeting ? this.meetingInfo.meetingJoinUrl : this.destination;
2351
- destinationType = isStartingSpaceInstantV2Meeting ? _constants._MEETING_LINK_ : this.destinationType;
2437
+ destinationType = isStartingSpaceInstantV2Meeting ? _constants.DESTINATION_TYPE.MEETING_LINK : this.destinationType;
2352
2438
  permissionTokenExpiryInfo = this.getPermissionTokenExpiryInfo();
2353
2439
  timeLeft = permissionTokenExpiryInfo === null || permissionTokenExpiryInfo === void 0 ? void 0 : permissionTokenExpiryInfo.timeLeft;
2354
2440
  expiryTime = permissionTokenExpiryInfo === null || permissionTokenExpiryInfo === void 0 ? void 0 : permissionTokenExpiryInfo.expiryTime;
@@ -3526,6 +3612,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3526
3612
  });
3527
3613
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST, /*#__PURE__*/function () {
3528
3614
  var _ref25 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(payload) {
3615
+ var _this19$rtcMetrics;
3529
3616
  return _regenerator.default.wrap(function _callee9$(_context9) {
3530
3617
  while (1) switch (_context9.prev = _context9.next) {
3531
3618
  case 0:
@@ -3546,8 +3633,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3546
3633
  }
3547
3634
  });
3548
3635
  }
3636
+ (_this19$rtcMetrics = _this19.rtcMetrics) === null || _this19$rtcMetrics === void 0 ? void 0 : _this19$rtcMetrics.sendNextMetrics();
3549
3637
  _this19.updateLLMConnection();
3550
- case 3:
3638
+ case 4:
3551
3639
  case "end":
3552
3640
  return _context9.stop();
3553
3641
  }
@@ -3564,6 +3652,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3564
3652
  correlation_id: _this19.correlationId,
3565
3653
  locus_id: _this19.locusId
3566
3654
  });
3655
+ _loggerProxy.default.logger.info('Meeting:index#setUpLocusInfoSelfListener --> MEDIA_INACTIVITY received, reconnecting...');
3567
3656
  _this19.reconnect();
3568
3657
  });
3569
3658
 
@@ -4633,7 +4722,6 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4633
4722
  }, {
4634
4723
  key: "closePeerConnections",
4635
4724
  value: function closePeerConnections() {
4636
- this.locusMediaRequest = undefined;
4637
4725
  if (this.mediaProperties.webrtcMediaConnection) {
4638
4726
  if (this.remoteMediaManager) {
4639
4727
  this.remoteMediaManager.stop();
@@ -4927,6 +5015,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4927
5015
  key: "joinWithMedia",
4928
5016
  value: (function () {
4929
5017
  var _joinWithMedia = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee15() {
5018
+ var _this28 = this;
4930
5019
  var options,
4931
5020
  mediaOptions,
4932
5021
  _options$joinOptions,
@@ -4938,12 +5027,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4938
5027
  joinResponse,
4939
5028
  turnServerInfo,
4940
5029
  turnDiscoverySkippedReason,
5030
+ forceTurnDiscovery,
4941
5031
  turnDiscoveryRequest,
4942
5032
  _yield$this$roap$hand,
4943
5033
  mediaResponse,
4944
5034
  _this$locusUrl,
4945
5035
  _leaveError,
4946
5036
  leaveError,
5037
+ shouldRetry,
4947
5038
  _args15 = arguments;
4948
5039
  return _regenerator.default.wrap(function _callee15$(_context15) {
4949
5040
  while (1) switch (_context15.prev = _context15.next) {
@@ -4962,34 +5053,36 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4962
5053
  joined = false;
4963
5054
  joinResponse = prevJoinResponse;
4964
5055
  _context15.prev = 9;
4965
- _context15.next = 12;
5056
+ forceTurnDiscovery = false;
5057
+ if (joinResponse) {
5058
+ _context15.next = 36;
5059
+ break;
5060
+ }
5061
+ _context15.next = 14;
4966
5062
  return this.webex.meetings.reachability.getReachabilityResults();
4967
- case 12:
5063
+ case 14:
4968
5064
  joinOptions.reachability = _context15.sent;
4969
- _context15.next = 15;
5065
+ _context15.next = 17;
4970
5066
  return this.roap.generateTurnDiscoveryRequestMessage(this, true);
4971
- case 15:
5067
+ case 17:
4972
5068
  turnDiscoveryRequest = _context15.sent;
4973
5069
  turnDiscoverySkippedReason = turnDiscoveryRequest.turnDiscoverySkippedReason;
4974
5070
  joinOptions.roapMessage = turnDiscoveryRequest.roapMessage;
4975
- if (joinResponse) {
4976
- _context15.next = 23;
4977
- break;
4978
- }
4979
5071
  _loggerProxy.default.logger.info('Meeting:index#joinWithMedia ---> calling join with joinOptions, ', joinOptions);
4980
- _context15.next = 22;
5072
+ _context15.next = 23;
4981
5073
  return this.join(joinOptions);
4982
- case 22:
4983
- joinResponse = _context15.sent;
4984
5074
  case 23:
5075
+ joinResponse = _context15.sent;
4985
5076
  joined = true;
5077
+
5078
+ // if we sent out TURN discovery Roap message with join, process the TURN discovery response
4986
5079
  if (!joinOptions.roapMessage) {
4987
- _context15.next = 33;
5080
+ _context15.next = 34;
4988
5081
  break;
4989
5082
  }
4990
- _context15.next = 27;
5083
+ _context15.next = 28;
4991
5084
  return this.roap.handleTurnDiscoveryHttpResponse(this, joinResponse);
4992
- case 27:
5085
+ case 28:
4993
5086
  _yield$this$roap$hand = _context15.sent;
4994
5087
  turnServerInfo = _yield$this$roap$hand.turnServerInfo;
4995
5088
  turnDiscoverySkippedReason = _yield$this$roap$hand.turnDiscoverySkippedReason;
@@ -4998,10 +5091,20 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4998
5091
  if (turnServerInfo === undefined) {
4999
5092
  this.roap.abortTurnDiscovery();
5000
5093
  }
5001
- case 33:
5002
- _context15.next = 35;
5003
- return this.addMedia(mediaOptions, turnServerInfo);
5004
- case 35:
5094
+ case 34:
5095
+ _context15.next = 38;
5096
+ break;
5097
+ case 36:
5098
+ // This is a retry, when join succeeded but addMedia failed, so we'll just call addMedia() again,
5099
+ // but we need to ensure that it also does a new TURN discovery
5100
+ forceTurnDiscovery = true;
5101
+ joined = true;
5102
+ case 38:
5103
+ _context15.next = 40;
5104
+ return this.addMediaInternal(function () {
5105
+ return _this28.joinWithMediaRetryInfo.isRetry ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
5106
+ }, turnServerInfo, forceTurnDiscovery, mediaOptions);
5107
+ case 40:
5005
5108
  mediaResponse = _context15.sent;
5006
5109
  this.joinWithMediaRetryInfo = {
5007
5110
  isRetry: false,
@@ -5011,30 +5114,30 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5011
5114
  join: joinResponse,
5012
5115
  media: mediaResponse
5013
5116
  });
5014
- case 40:
5015
- _context15.prev = 40;
5117
+ case 45:
5118
+ _context15.prev = 45;
5016
5119
  _context15.t0 = _context15["catch"](9);
5017
5120
  _loggerProxy.default.logger.error('Meeting:index#joinWithMedia --> ', _context15.t0);
5018
5121
  this.roap.abortTurnDiscovery();
5019
5122
  if (!(joined && isRetry)) {
5020
- _context15.next = 54;
5123
+ _context15.next = 59;
5021
5124
  break;
5022
5125
  }
5023
- _context15.prev = 45;
5024
- _context15.next = 48;
5126
+ _context15.prev = 50;
5127
+ _context15.next = 53;
5025
5128
  return this.leave({
5026
5129
  resourceId: joinOptions === null || joinOptions === void 0 ? void 0 : joinOptions.resourceId,
5027
5130
  reason: 'joinWithMedia failure'
5028
5131
  });
5029
- case 48:
5030
- _context15.next = 54;
5132
+ case 53:
5133
+ _context15.next = 59;
5031
5134
  break;
5032
- case 50:
5033
- _context15.prev = 50;
5034
- _context15.t1 = _context15["catch"](45);
5135
+ case 55:
5136
+ _context15.prev = 55;
5137
+ _context15.t1 = _context15["catch"](50);
5035
5138
  _loggerProxy.default.logger.error('Meeting:index#joinWithMedia --> leave error', _context15.t1);
5036
5139
  leaveError = _context15.t1;
5037
- case 54:
5140
+ case 59:
5038
5141
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_WITH_MEDIA_FAILURE, {
5039
5142
  correlation_id: this.correlationId,
5040
5143
  locus_id: (_this$locusUrl = this.locusUrl) === null || _this$locusUrl === void 0 ? void 0 : _this$locusUrl.split('/').pop(),
@@ -5046,25 +5149,33 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5046
5149
  }, {
5047
5150
  type: _context15.t0.name
5048
5151
  });
5049
- if (isRetry) {
5050
- _context15.next = 60;
5152
+
5153
+ // if this was the first attempt, let's do a retry
5154
+ shouldRetry = !isRetry;
5155
+ if (_internalPluginMetrics.CallDiagnosticUtils.isSdpOfferCreationError(_context15.t0)) {
5156
+ // errors related to offer creation (for example missing H264 codec) will happen again no matter how many times we try,
5157
+ // so there is no point doing a retry
5158
+ shouldRetry = false;
5159
+ }
5160
+ if (!shouldRetry) {
5161
+ _context15.next = 67;
5051
5162
  break;
5052
5163
  }
5053
5164
  _loggerProxy.default.logger.warn('Meeting:index#joinWithMedia --> retrying call to joinWithMedia');
5054
5165
  this.joinWithMediaRetryInfo.isRetry = true;
5055
5166
  this.joinWithMediaRetryInfo.prevJoinResponse = joinResponse;
5056
5167
  return _context15.abrupt("return", this.joinWithMedia(options));
5057
- case 60:
5168
+ case 67:
5058
5169
  this.joinWithMediaRetryInfo = {
5059
5170
  isRetry: false,
5060
5171
  prevJoinResponse: undefined
5061
5172
  };
5062
5173
  throw _context15.t0;
5063
- case 62:
5174
+ case 69:
5064
5175
  case "end":
5065
5176
  return _context15.stop();
5066
5177
  }
5067
- }, _callee15, this, [[9, 40], [45, 50]]);
5178
+ }, _callee15, this, [[9, 45], [50, 55]]);
5068
5179
  }));
5069
5180
  function joinWithMedia() {
5070
5181
  return _joinWithMedia.apply(this, arguments);
@@ -5083,7 +5194,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5083
5194
  }, {
5084
5195
  key: "reconnect",
5085
5196
  value: function reconnect(options) {
5086
- var _this28 = this;
5197
+ var _this29 = this;
5087
5198
  _loggerProxy.default.logger.log("Meeting:index#reconnect --> attempting to reconnect meeting ".concat(this.id));
5088
5199
  if (!this.reconnectionManager || !this.reconnectionManager.reconnect) {
5089
5200
  return _promise.default.reject(new _parameter.default('Cannot reconnect, ReconnectionManager must first be defined.'));
@@ -5098,10 +5209,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5098
5209
  while (1) switch (_context16.prev = _context16.next) {
5099
5210
  case 0:
5100
5211
  _context16.next = 2;
5101
- return _this28.waitForRemoteSDPAnswer();
5212
+ return _this29.waitForRemoteSDPAnswer();
5102
5213
  case 2:
5103
5214
  _context16.next = 4;
5104
- return _this28.waitForMediaConnectionConnected();
5215
+ return _this29.waitForMediaConnectionConnected();
5105
5216
  case 4:
5106
5217
  case "end":
5107
5218
  return _context16.stop();
@@ -5115,7 +5226,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5115
5226
  return _promise.default.resolve();
5116
5227
  }
5117
5228
  _loggerProxy.default.logger.error('Meeting:index#reconnect --> Meeting reconnect failed', error);
5118
- _this28.uploadLogs({
5229
+ _this29.uploadLogs({
5119
5230
  file: 'meeting/index',
5120
5231
  function: 'reconnect'
5121
5232
  });
@@ -5162,19 +5273,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5162
5273
  }, {
5163
5274
  key: "setCaptionLanguage",
5164
5275
  value: function setCaptionLanguage(language) {
5165
- var _this29 = this;
5276
+ var _this30 = this;
5166
5277
  return new _promise.default(function (resolve, reject) {
5167
- if (!_this29.isTranscriptionSupported()) {
5278
+ if (!_this30.isTranscriptionSupported()) {
5168
5279
  _loggerProxy.default.logger.error('Meeting:index#setCaptionLanguage --> Webex Assistant is not enabled/supported');
5169
5280
  reject(new Error('Webex Assistant is not enabled/supported'));
5170
5281
  }
5171
5282
  try {
5172
5283
  var voiceaListenerCaptionUpdate = function voiceaListenerCaptionUpdate(payload) {
5173
5284
  // @ts-ignore
5174
- _this29.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5285
+ _this30.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5175
5286
  var statusCode = payload.statusCode;
5176
5287
  if (statusCode === 200) {
5177
- _this29.transcription.languageOptions = _objectSpread(_objectSpread({}, _this29.transcription.languageOptions), {}, {
5288
+ _this30.transcription.languageOptions = _objectSpread(_objectSpread({}, _this30.transcription.languageOptions), {}, {
5178
5289
  currentCaptionLanguage: language
5179
5290
  });
5180
5291
  resolve(language);
@@ -5183,9 +5294,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5183
5294
  }
5184
5295
  };
5185
5296
  // @ts-ignore
5186
- _this29.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5297
+ _this30.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5187
5298
  // @ts-ignore
5188
- _this29.webex.internal.voicea.requestLanguage(language);
5299
+ _this30.webex.internal.voicea.requestLanguage(language);
5189
5300
  } catch (error) {
5190
5301
  _loggerProxy.default.logger.error("Meeting:index#setCaptionLanguage --> ".concat(error));
5191
5302
  reject(error);
@@ -5201,19 +5312,23 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5201
5312
  }, {
5202
5313
  key: "setSpokenLanguage",
5203
5314
  value: function setSpokenLanguage(language) {
5204
- var _this30 = this;
5315
+ var _this31 = this;
5205
5316
  return new _promise.default(function (resolve, reject) {
5206
- if (!_this30.isTranscriptionSupported()) {
5317
+ if (!_this31.isTranscriptionSupported()) {
5207
5318
  _loggerProxy.default.logger.error('Meeting:index#setCaptionLanguage --> Webex Assistant is not enabled/supported');
5208
5319
  reject(new Error('Webex Assistant is not enabled/supported'));
5209
5320
  }
5321
+ if (_this31.getCurUserType() !== 'host') {
5322
+ _loggerProxy.default.logger.error('Meeting:index#setSpokenLanguage --> Only host can set spoken language');
5323
+ reject(new Error('Only host can set spoken language'));
5324
+ }
5210
5325
  try {
5211
5326
  var voiceaListenerLanguageUpdate = function voiceaListenerLanguageUpdate(payload) {
5212
5327
  // @ts-ignore
5213
- _this30.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5328
+ _this31.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5214
5329
  var languageCode = payload.languageCode;
5215
5330
  if (languageCode) {
5216
- _this30.transcription.languageOptions = _objectSpread(_objectSpread({}, _this30.transcription.languageOptions), {}, {
5331
+ _this31.transcription.languageOptions = _objectSpread(_objectSpread({}, _this31.transcription.languageOptions), {}, {
5217
5332
  currentSpokenLanguage: languageCode
5218
5333
  });
5219
5334
  resolve(languageCode);
@@ -5223,10 +5338,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5223
5338
  };
5224
5339
 
5225
5340
  // @ts-ignore
5226
- _this30.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5341
+ _this31.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5227
5342
 
5228
5343
  // @ts-ignore
5229
- _this30.webex.internal.voicea.setSpokenLanguage(language);
5344
+ _this31.webex.internal.voicea.setSpokenLanguage(language);
5230
5345
  } catch (error) {
5231
5346
  _loggerProxy.default.logger.error("Meeting:index#setSpokenLanguage --> ".concat(error));
5232
5347
  reject(error);
@@ -5248,7 +5363,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5248
5363
  while (1) switch (_context17.prev = _context17.next) {
5249
5364
  case 0:
5250
5365
  if (!this.isJoined()) {
5251
- _context17.next = 15;
5366
+ _context17.next = 14;
5252
5367
  break;
5253
5368
  }
5254
5369
  _loggerProxy.default.logger.info('Meeting:index#startTranscription --> Attempting to enable transcription!');
@@ -5256,17 +5371,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5256
5371
  if (!this.areVoiceaEventsSetup) {
5257
5372
  this.setUpVoiceaListeners();
5258
5373
  }
5259
- if (!(this.getCurUserType() === 'host')) {
5260
- _context17.next = 7;
5261
- break;
5262
- }
5263
- _context17.next = 7;
5374
+
5375
+ // @ts-ignore
5376
+ _context17.next = 6;
5264
5377
  return this.webex.internal.voicea.turnOnCaptions(options === null || options === void 0 ? void 0 : options.spokenLanguage);
5265
- case 7:
5266
- _context17.next = 13;
5378
+ case 6:
5379
+ _context17.next = 12;
5267
5380
  break;
5268
- case 9:
5269
- _context17.prev = 9;
5381
+ case 8:
5382
+ _context17.prev = 8;
5270
5383
  _context17.t0 = _context17["catch"](2);
5271
5384
  _loggerProxy.default.logger.error("Meeting:index#startTranscription --> ".concat(_context17.t0));
5272
5385
  _metrics.default.sendBehavioralMetric(_constants2.default.RECEIVE_TRANSCRIPTION_FAILURE, {
@@ -5274,17 +5387,17 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5274
5387
  reason: _context17.t0.message,
5275
5388
  stack: _context17.t0.stack
5276
5389
  });
5277
- case 13:
5278
- _context17.next = 17;
5390
+ case 12:
5391
+ _context17.next = 16;
5279
5392
  break;
5280
- case 15:
5393
+ case 14:
5281
5394
  _loggerProxy.default.logger.error("Meeting:index#startTranscription --> meeting joined : ".concat(this.isJoined()));
5282
5395
  throw new Error('Meeting is not joined');
5283
- case 17:
5396
+ case 16:
5284
5397
  case "end":
5285
5398
  return _context17.stop();
5286
5399
  }
5287
- }, _callee17, this, [[2, 9]]);
5400
+ }, _callee17, this, [[2, 8]]);
5288
5401
  }));
5289
5402
  function startTranscription(_x15) {
5290
5403
  return _startTranscription.apply(this, arguments);
@@ -5348,7 +5461,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5348
5461
  */
5349
5462
  function () {
5350
5463
  var _join = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee18() {
5351
- var _this31 = this;
5464
+ var _this32 = this;
5352
5465
  var options,
5353
5466
  errorMessage,
5354
5467
  error,
@@ -5494,57 +5607,58 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5494
5607
  return _context18.abrupt("return", _promise.default.reject(_context18.t0));
5495
5608
  case 51:
5496
5609
  return _context18.abrupt("return", _util2.default.joinMeetingOptions(this, options).then(function (join) {
5497
- _this31.meetingFiniteStateMachine.join();
5610
+ _this32.meetingFiniteStateMachine.join();
5611
+ _this32.setupLocusMediaRequest();
5498
5612
  _loggerProxy.default.logger.log('Meeting:index#join --> Success');
5499
5613
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_SUCCESS, {
5500
- correlation_id: _this31.correlationId
5614
+ correlation_id: _this32.correlationId
5501
5615
  });
5502
5616
  joinSuccess(join);
5503
- _this31.deferJoin = undefined;
5617
+ _this32.deferJoin = undefined;
5504
5618
  return join;
5505
5619
  }).catch(function (error) {
5506
- var _this31$meetingInfo, _error$error;
5507
- _this31.meetingFiniteStateMachine.fail(error);
5620
+ var _this32$meetingInfo, _error$error;
5621
+ _this32.meetingFiniteStateMachine.fail(error);
5508
5622
  _loggerProxy.default.logger.error('Meeting:index#join --> Failed', error);
5509
5623
 
5510
5624
  // @ts-ignore
5511
- _this31.webex.internal.newMetrics.submitClientEvent({
5625
+ _this32.webex.internal.newMetrics.submitClientEvent({
5512
5626
  name: 'client.locus.join.response',
5513
5627
  payload: {
5514
5628
  identifiers: {
5515
- meetingLookupUrl: (_this31$meetingInfo = _this31.meetingInfo) === null || _this31$meetingInfo === void 0 ? void 0 : _this31$meetingInfo.meetingLookupUrl
5629
+ meetingLookupUrl: (_this32$meetingInfo = _this32.meetingInfo) === null || _this32$meetingInfo === void 0 ? void 0 : _this32$meetingInfo.meetingLookupUrl
5516
5630
  }
5517
5631
  },
5518
5632
  options: {
5519
- meetingId: _this31.id,
5633
+ meetingId: _this32.id,
5520
5634
  rawError: error
5521
5635
  }
5522
5636
  });
5523
5637
 
5524
5638
  // TODO: change this to error codes and pre defined dictionary
5525
5639
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_FAILURE, {
5526
- correlation_id: _this31.correlationId,
5640
+ correlation_id: _this32.correlationId,
5527
5641
  reason: (_error$error = error.error) === null || _error$error === void 0 ? void 0 : _error$error.message,
5528
5642
  stack: error.stack
5529
5643
  });
5530
5644
 
5531
5645
  // Upload logs on join Failure
5532
- _triggerProxy.default.trigger(_this31, {
5646
+ _triggerProxy.default.trigger(_this32, {
5533
5647
  file: 'meeting/index',
5534
5648
  function: 'join'
5535
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this31);
5649
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this32);
5536
5650
  joinFailed(error);
5537
- _this31.deferJoin = undefined;
5651
+ _this32.deferJoin = undefined;
5538
5652
  return _promise.default.reject(error);
5539
5653
  }).then(function (join) {
5540
5654
  // @ts-ignore - config coming from registerPlugin
5541
- if (_this31.config.enableAutomaticLLM) {
5655
+ if (_this32.config.enableAutomaticLLM) {
5542
5656
  // @ts-ignore
5543
- _this31.webex.internal.llm.on('online', _this31.handleLLMOnline);
5544
- _this31.updateLLMConnection().catch(function (error) {
5657
+ _this32.webex.internal.llm.on('online', _this32.handleLLMOnline);
5658
+ _this32.updateLLMConnection().catch(function (error) {
5545
5659
  _loggerProxy.default.logger.error('Meeting:index#join --> Transcription Socket Connection Failed', error);
5546
5660
  _metrics.default.sendBehavioralMetric(_constants2.default.LLM_CONNECTION_AFTER_JOIN_FAILURE, {
5547
- correlation_id: _this31.correlationId,
5661
+ correlation_id: _this32.correlationId,
5548
5662
  reason: error === null || error === void 0 ? void 0 : error.message,
5549
5663
  stack: error.stack
5550
5664
  });
@@ -5576,7 +5690,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5576
5690
  key: "updateLLMConnection",
5577
5691
  value: (function () {
5578
5692
  var _updateLLMConnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee19() {
5579
- var _this32 = this;
5693
+ var _this33 = this;
5580
5694
  var _this$locusInfo6, url, _this$locusInfo6$info, _this$locusInfo6$info2, datachannelUrl, isJoined;
5581
5695
  return _regenerator.default.wrap(function _callee19$(_context19) {
5582
5696
  while (1) switch (_context19.prev = _context19.next) {
@@ -5588,7 +5702,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5588
5702
  _context19.next = 8;
5589
5703
  break;
5590
5704
  }
5591
- if (!(url === this.webex.internal.llm.getLocusUrl() && isJoined)) {
5705
+ if (!(
5706
+ // @ts-ignore - Fix type
5707
+ url === this.webex.internal.llm.getLocusUrl() &&
5708
+ // @ts-ignore - Fix type
5709
+ datachannelUrl === this.webex.internal.llm.getDatachannelUrl() && isJoined)) {
5592
5710
  _context19.next = 5;
5593
5711
  break;
5594
5712
  }
@@ -5608,9 +5726,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5608
5726
  case 10:
5609
5727
  return _context19.abrupt("return", this.webex.internal.llm.registerAndConnect(url, datachannelUrl).then(function (registerAndConnectResult) {
5610
5728
  // @ts-ignore - Fix type
5611
- _this32.webex.internal.llm.off('event:relay.event', _this32.processRelayEvent);
5729
+ _this33.webex.internal.llm.off('event:relay.event', _this33.processRelayEvent);
5612
5730
  // @ts-ignore - Fix type
5613
- _this32.webex.internal.llm.on('event:relay.event', _this32.processRelayEvent);
5731
+ _this33.webex.internal.llm.on('event:relay.event', _this33.processRelayEvent);
5614
5732
  _loggerProxy.default.logger.info('Meeting:index#updateLLMConnection --> enabled to receive relay events!');
5615
5733
  return _promise.default.resolve(registerAndConnectResult);
5616
5734
  }));
@@ -5664,7 +5782,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5664
5782
  }, {
5665
5783
  key: "dialInPstn",
5666
5784
  value: function dialInPstn() {
5667
- var _this33 = this;
5785
+ var _this34 = this;
5668
5786
  if (this.isPhoneProvisioned(this.dialInDeviceStatus)) return _promise.default.resolve(); // prevent multiple dial in devices from being provisioned
5669
5787
 
5670
5788
  var correlationId = this.correlationId,
@@ -5680,10 +5798,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5680
5798
  }).catch(function (error) {
5681
5799
  var _error$error2;
5682
5800
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_DIAL_IN_FAILURE, {
5683
- correlation_id: _this33.correlationId,
5684
- dial_in_url: _this33.dialInUrl,
5801
+ correlation_id: _this34.correlationId,
5802
+ dial_in_url: _this34.dialInUrl,
5685
5803
  locus_id: locusUrl.split('/').pop(),
5686
- client_url: _this33.deviceUrl,
5804
+ client_url: _this34.deviceUrl,
5687
5805
  reason: (_error$error2 = error.error) === null || _error$error2 === void 0 ? void 0 : _error$error2.message,
5688
5806
  stack: error.stack
5689
5807
  });
@@ -5701,7 +5819,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5701
5819
  }, {
5702
5820
  key: "dialOutPstn",
5703
5821
  value: function dialOutPstn(phoneNumber) {
5704
- var _this34 = this;
5822
+ var _this35 = this;
5705
5823
  if (this.isPhoneProvisioned(this.dialOutDeviceStatus)) return _promise.default.resolve(); // prevent multiple dial out devices from being provisioned
5706
5824
 
5707
5825
  var correlationId = this.correlationId,
@@ -5718,10 +5836,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5718
5836
  }).catch(function (error) {
5719
5837
  var _error$error3;
5720
5838
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_DIAL_OUT_FAILURE, {
5721
- correlation_id: _this34.correlationId,
5722
- dial_out_url: _this34.dialOutUrl,
5839
+ correlation_id: _this35.correlationId,
5840
+ dial_out_url: _this35.dialOutUrl,
5723
5841
  locus_id: locusUrl.split('/').pop(),
5724
- client_url: _this34.deviceUrl,
5842
+ client_url: _this35.deviceUrl,
5725
5843
  reason: (_error$error3 = error.error) === null || _error$error3 === void 0 ? void 0 : _error$error3.message,
5726
5844
  stack: error.stack
5727
5845
  });
@@ -5752,7 +5870,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5752
5870
  }, {
5753
5871
  key: "moveTo",
5754
5872
  value: function moveTo(resourceId) {
5755
- var _this35 = this;
5873
+ var _this36 = this;
5756
5874
  if (!resourceId) {
5757
5875
  throw new _parameter.default('Cannot move call without a resourceId.');
5758
5876
  }
@@ -5796,12 +5914,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5796
5914
  while (1) switch (_context20.prev = _context20.next) {
5797
5915
  case 0:
5798
5916
  _context20.prev = 0;
5799
- if (!(_this35.screenShareFloorState === ScreenShareFloorStatus.GRANTED)) {
5917
+ if (!(_this36.screenShareFloorState === ScreenShareFloorStatus.GRANTED)) {
5800
5918
  _context20.next = 4;
5801
5919
  break;
5802
5920
  }
5803
5921
  _context20.next = 4;
5804
- return _this35.releaseScreenShareFloor();
5922
+ return _this36.releaseScreenShareFloor();
5805
5923
  case 4:
5806
5924
  mediaSettings = {
5807
5925
  mediaDirection: {
@@ -5813,37 +5931,37 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5813
5931
  receiveShare: true
5814
5932
  }
5815
5933
  };
5816
- _this35.mediaProperties.setMediaDirection(mediaSettings.mediaDirection);
5817
- _this35.mediaProperties.unsetRemoteMedia();
5934
+ _this36.mediaProperties.setMediaDirection(mediaSettings.mediaDirection);
5935
+ _this36.mediaProperties.unsetRemoteMedia();
5818
5936
 
5819
5937
  // when a move to is intiated by the client , Locus delets the existing media node from the server as soon the device answers the meeting
5820
5938
  // once the device answers we close the old connection and create new media server connection with only share enabled
5821
- if (!_this35.statsAnalyzer) {
5939
+ if (!_this36.statsAnalyzer) {
5822
5940
  _context20.next = 10;
5823
5941
  break;
5824
5942
  }
5825
5943
  _context20.next = 10;
5826
- return _this35.statsAnalyzer.stopAnalyzer();
5944
+ return _this36.statsAnalyzer.stopAnalyzer();
5827
5945
  case 10:
5828
5946
  _context20.next = 12;
5829
- return _this35.closeRemoteStreams();
5947
+ return _this36.closeRemoteStreams();
5830
5948
  case 12:
5831
5949
  _context20.next = 14;
5832
- return _this35.closePeerConnections();
5950
+ return _this36.closePeerConnections();
5833
5951
  case 14:
5834
- _this35.cleanupLocalStreams();
5835
- _this35.unsetRemoteStreams();
5836
- _this35.unsetPeerConnections();
5837
- _this35.reconnectionManager.cleanUp();
5952
+ _this36.cleanupLocalStreams();
5953
+ _this36.unsetRemoteStreams();
5954
+ _this36.unsetPeerConnections();
5955
+ _this36.reconnectionManager.cleanUp();
5838
5956
  _context20.next = 20;
5839
- return _this35.addMedia({
5957
+ return _this36.addMedia({
5840
5958
  audioEnabled: false,
5841
5959
  videoEnabled: false,
5842
5960
  shareVideoEnabled: true
5843
5961
  });
5844
5962
  case 20:
5845
5963
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_SUCCESS);
5846
- _this35.isMoveToInProgress = false;
5964
+ _this36.isMoveToInProgress = false;
5847
5965
  _context20.next = 29;
5848
5966
  break;
5849
5967
  case 24:
@@ -5851,12 +5969,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5851
5969
  _context20.t0 = _context20["catch"](0);
5852
5970
  _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', _context20.t0);
5853
5971
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
5854
- correlation_id: _this35.correlationId,
5855
- locus_id: _this35.locusUrl.split('/').pop(),
5972
+ correlation_id: _this36.correlationId,
5973
+ locus_id: _this36.locusUrl.split('/').pop(),
5856
5974
  reason: _context20.t0.message,
5857
5975
  stack: _context20.t0.stack
5858
5976
  });
5859
- _this35.isMoveToInProgress = false;
5977
+ _this36.isMoveToInProgress = false;
5860
5978
  case 29:
5861
5979
  case "end":
5862
5980
  return _context20.stop();
@@ -5872,17 +5990,17 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5872
5990
  resourceId: resourceId,
5873
5991
  moveToResource: true
5874
5992
  }).then(function () {
5875
- _this35.meetingFiniteStateMachine.join();
5993
+ _this36.meetingFiniteStateMachine.join();
5876
5994
  }).catch(function (error) {
5877
- _this35.meetingFiniteStateMachine.fail(error);
5995
+ _this36.meetingFiniteStateMachine.fail(error);
5878
5996
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
5879
- correlation_id: _this35.correlationId,
5880
- locus_id: _this35.locusUrl.split('/').pop(),
5997
+ correlation_id: _this36.correlationId,
5998
+ locus_id: _this36.locusUrl.split('/').pop(),
5881
5999
  reason: error.message,
5882
6000
  stack: error.stack
5883
6001
  });
5884
6002
  _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', error);
5885
- _this35.isMoveToInProgress = false;
6003
+ _this36.isMoveToInProgress = false;
5886
6004
  return _promise.default.reject(error);
5887
6005
  });
5888
6006
  }
@@ -5897,7 +6015,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5897
6015
  }, {
5898
6016
  key: "moveFrom",
5899
6017
  value: function moveFrom(resourceId) {
5900
- var _this36 = this;
6018
+ var _this37 = this;
5901
6019
  // On moveFrom ask the developer to re capture it moveFrom then updateMedia
5902
6020
  if (!resourceId) {
5903
6021
  throw new _parameter.default('Cannot move call without a resourceId.');
@@ -5912,19 +6030,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5912
6030
  }
5913
6031
  });
5914
6032
  return _util2.default.joinMeetingOptions(this).then(function () {
5915
- return _util2.default.leaveMeeting(_this36, {
6033
+ return _util2.default.leaveMeeting(_this37, {
5916
6034
  resourceId: resourceId,
5917
6035
  correlationId: oldCorrelationId,
5918
6036
  moveMeeting: true
5919
6037
  }).then(function () {
5920
- _this36.resourceId = '';
6038
+ _this37.resourceId = '';
5921
6039
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_FROM_SUCCESS);
5922
6040
  });
5923
6041
  }).catch(function (error) {
5924
- _this36.meetingFiniteStateMachine.fail(error);
6042
+ _this37.meetingFiniteStateMachine.fail(error);
5925
6043
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_FROM_FAILURE, {
5926
- correlation_id: _this36.correlationId,
5927
- locus_id: _this36.locusUrl.split('/').pop(),
6044
+ correlation_id: _this37.correlationId,
6045
+ locus_id: _this37.locusUrl.split('/').pop(),
5928
6046
  reason: error.message,
5929
6047
  stack: error.stack
5930
6048
  });
@@ -5954,9 +6072,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5954
6072
  return _regenerator.default.wrap(function _callee21$(_context21) {
5955
6073
  while (1) switch (_context21.prev = _context21.next) {
5956
6074
  case 0:
5957
- mc = _media.default.createMediaConnection(this.isMultistream, this.getMediaConnectionDebugId(),
6075
+ this.rtcMetrics = this.isMultistream ?
5958
6076
  // @ts-ignore
5959
- this.webex, this.id, this.correlationId, {
6077
+ new _rtcMetrics.default(this.webex, this.id, this.correlationId) : undefined;
6078
+ mc = _media.default.createMediaConnection(this.isMultistream, this.getMediaConnectionDebugId(), this.id, {
6079
+ rtcMetrics: this.rtcMetrics,
5960
6080
  mediaProperties: this.mediaProperties,
5961
6081
  remoteQualityLevel: this.mediaProperties.remoteQualityLevel,
5962
6082
  // @ts-ignore - config coming from registerPlugin
@@ -5978,36 +6098,36 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5978
6098
 
5979
6099
  // publish the streams
5980
6100
  if (!this.mediaProperties.audioStream) {
5981
- _context21.next = 8;
6101
+ _context21.next = 9;
5982
6102
  break;
5983
6103
  }
5984
6104
  this.setSendNamedMediaGroup(_internalMediaCore.MediaType.AudioMain);
5985
- _context21.next = 8;
6105
+ _context21.next = 9;
5986
6106
  return this.publishStream(_internalMediaCore.MediaType.AudioMain, this.mediaProperties.audioStream);
5987
- case 8:
6107
+ case 9:
5988
6108
  if (!this.mediaProperties.videoStream) {
5989
- _context21.next = 11;
6109
+ _context21.next = 12;
5990
6110
  break;
5991
6111
  }
5992
- _context21.next = 11;
6112
+ _context21.next = 12;
5993
6113
  return this.publishStream(_internalMediaCore.MediaType.VideoMain, this.mediaProperties.videoStream);
5994
- case 11:
6114
+ case 12:
5995
6115
  if (!this.mediaProperties.shareVideoStream) {
5996
- _context21.next = 14;
6116
+ _context21.next = 15;
5997
6117
  break;
5998
6118
  }
5999
- _context21.next = 14;
6119
+ _context21.next = 15;
6000
6120
  return this.publishStream(_internalMediaCore.MediaType.VideoSlides, this.mediaProperties.shareVideoStream);
6001
- case 14:
6121
+ case 15:
6002
6122
  if (!(this.isMultistream && this.mediaProperties.shareAudioStream)) {
6003
- _context21.next = 17;
6123
+ _context21.next = 18;
6004
6124
  break;
6005
6125
  }
6006
- _context21.next = 17;
6126
+ _context21.next = 18;
6007
6127
  return this.publishStream(_internalMediaCore.MediaType.AudioSlides, this.mediaProperties.shareAudioStream);
6008
- case 17:
6009
- return _context21.abrupt("return", mc);
6010
6128
  case 18:
6129
+ return _context21.abrupt("return", mc);
6130
+ case 19:
6011
6131
  case "end":
6012
6132
  return _context21.stop();
6013
6133
  }
@@ -6031,9 +6151,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6031
6151
  }, {
6032
6152
  key: "forwardEvent",
6033
6153
  value: function forwardEvent(eventEmitter, eventTypeToForward, meetingEventType) {
6034
- var _this37 = this;
6154
+ var _this38 = this;
6035
6155
  eventEmitter.on(eventTypeToForward, function (data) {
6036
- return _triggerProxy.default.trigger(_this37, {
6156
+ return _triggerProxy.default.trigger(_this38, {
6037
6157
  file: 'meetings',
6038
6158
  function: 'addMedia'
6039
6159
  }, meetingEventType, data);
@@ -6103,7 +6223,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6103
6223
  key: "waitForMediaConnectionConnected",
6104
6224
  value: (function () {
6105
6225
  var _waitForMediaConnectionConnected = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee23() {
6106
- var _this$mediaProperties6, _this$mediaProperties7, _this$mediaProperties8, _this$mediaProperties9, _this$mediaProperties10, _this$mediaProperties11, _this$mediaProperties12, _this$mediaProperties13, _this$mediaProperties14, _this$mediaProperties15, _this$mediaProperties16, _this$mediaProperties17, _this$mediaProperties18, _this$mediaProperties19;
6226
+ var iceConnected, _this$mediaProperties6, _this$mediaProperties7, _this$mediaProperties8, _this$mediaProperties9, _this$mediaProperties10, _this$mediaProperties11, _this$mediaProperties12;
6107
6227
  return _regenerator.default.wrap(function _callee23$(_context23) {
6108
6228
  while (1) switch (_context23.prev = _context23.next) {
6109
6229
  case 0:
@@ -6111,37 +6231,59 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6111
6231
  _context23.next = 3;
6112
6232
  return this.mediaProperties.waitForMediaConnectionConnected();
6113
6233
  case 3:
6114
- _context23.next = 9;
6234
+ _context23.next = 30;
6115
6235
  break;
6116
6236
  case 5:
6117
6237
  _context23.prev = 5;
6118
6238
  _context23.t0 = _context23["catch"](0);
6119
- if (!this.hasMediaConnectionConnectedAtLeastOnce) {
6120
- // Only send CA event for join flow if we haven't successfully connected media yet
6121
- // @ts-ignore
6122
- this.webex.internal.newMetrics.submitClientEvent({
6123
- name: 'client.ice.end',
6124
- payload: {
6125
- canProceed: !this.turnServerUsed,
6126
- // If we haven't done turn tls retry yet we will proceed with join attempt
6127
- icePhase: this.turnServerUsed ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY',
6128
- errors: [
6129
- // @ts-ignore
6130
- this.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({
6131
- clientErrorCode: _internalPluginMetrics.CallDiagnosticUtils.generateClientErrorCodeForIceFailure({
6132
- signalingState: ((_this$mediaProperties6 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties6 === void 0 ? void 0 : (_this$mediaProperties7 = _this$mediaProperties6.multistreamConnection) === null || _this$mediaProperties7 === void 0 ? void 0 : (_this$mediaProperties8 = _this$mediaProperties7.pc) === null || _this$mediaProperties8 === void 0 ? void 0 : (_this$mediaProperties9 = _this$mediaProperties8.pc) === null || _this$mediaProperties9 === void 0 ? void 0 : _this$mediaProperties9.signalingState) || ((_this$mediaProperties10 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties10 === void 0 ? void 0 : (_this$mediaProperties11 = _this$mediaProperties10.mediaConnection) === null || _this$mediaProperties11 === void 0 ? void 0 : (_this$mediaProperties12 = _this$mediaProperties11.pc) === null || _this$mediaProperties12 === void 0 ? void 0 : _this$mediaProperties12.signalingState) || 'unknown',
6133
- iceConnectionState: ((_this$mediaProperties13 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties13 === void 0 ? void 0 : (_this$mediaProperties14 = _this$mediaProperties13.multistreamConnection) === null || _this$mediaProperties14 === void 0 ? void 0 : (_this$mediaProperties15 = _this$mediaProperties14.pc) === null || _this$mediaProperties15 === void 0 ? void 0 : (_this$mediaProperties16 = _this$mediaProperties15.pc) === null || _this$mediaProperties16 === void 0 ? void 0 : _this$mediaProperties16.iceConnectionState) || ((_this$mediaProperties17 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties17 === void 0 ? void 0 : (_this$mediaProperties18 = _this$mediaProperties17.mediaConnection) === null || _this$mediaProperties18 === void 0 ? void 0 : (_this$mediaProperties19 = _this$mediaProperties18.pc) === null || _this$mediaProperties19 === void 0 ? void 0 : _this$mediaProperties19.iceConnectionState) || 'unknown',
6134
- turnServerUsed: this.turnServerUsed
6135
- })
6136
- })]
6137
- },
6138
- options: {
6139
- meetingId: this.id
6140
- }
6141
- });
6239
+ iceConnected = _context23.t0.iceConnected;
6240
+ if (this.hasMediaConnectionConnectedAtLeastOnce) {
6241
+ _context23.next = 29;
6242
+ break;
6142
6243
  }
6244
+ _context23.t1 = this.webex.internal.newMetrics;
6245
+ _context23.t2 = !this.turnServerUsed;
6246
+ _context23.t3 = this.addMediaData.icePhaseCallback();
6247
+ _context23.t4 = this.webex.internal.newMetrics.callDiagnosticMetrics;
6248
+ _context23.t5 = _internalPluginMetrics.CallDiagnosticUtils;
6249
+ _context23.t6 = ((_this$mediaProperties6 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties6 === void 0 ? void 0 : (_this$mediaProperties7 = _this$mediaProperties6.multistreamConnection) === null || _this$mediaProperties7 === void 0 ? void 0 : (_this$mediaProperties8 = _this$mediaProperties7.pc) === null || _this$mediaProperties8 === void 0 ? void 0 : (_this$mediaProperties9 = _this$mediaProperties8.pc) === null || _this$mediaProperties9 === void 0 ? void 0 : _this$mediaProperties9.signalingState) || ((_this$mediaProperties10 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties10 === void 0 ? void 0 : (_this$mediaProperties11 = _this$mediaProperties10.mediaConnection) === null || _this$mediaProperties11 === void 0 ? void 0 : (_this$mediaProperties12 = _this$mediaProperties11.pc) === null || _this$mediaProperties12 === void 0 ? void 0 : _this$mediaProperties12.signalingState) || 'unknown';
6250
+ _context23.t7 = iceConnected;
6251
+ _context23.t8 = this.turnServerUsed;
6252
+ _context23.next = 19;
6253
+ return this.webex.meetings.reachability.isWebexMediaBackendUnreachable().catch(function () {
6254
+ return false;
6255
+ });
6256
+ case 19:
6257
+ _context23.t9 = _context23.sent;
6258
+ _context23.t10 = {
6259
+ signalingState: _context23.t6,
6260
+ iceConnected: _context23.t7,
6261
+ turnServerUsed: _context23.t8,
6262
+ unreachable: _context23.t9
6263
+ };
6264
+ _context23.t11 = _context23.t5.generateClientErrorCodeForIceFailure.call(_context23.t5, _context23.t10);
6265
+ _context23.t12 = {
6266
+ clientErrorCode: _context23.t11
6267
+ };
6268
+ _context23.t13 = _context23.t4.getErrorPayloadForClientErrorCode.call(_context23.t4, _context23.t12);
6269
+ _context23.t14 = [_context23.t13];
6270
+ _context23.t15 = {
6271
+ canProceed: _context23.t2,
6272
+ icePhase: _context23.t3,
6273
+ errors: _context23.t14
6274
+ };
6275
+ _context23.t16 = {
6276
+ meetingId: this.id
6277
+ };
6278
+ _context23.t17 = {
6279
+ name: 'client.ice.end',
6280
+ payload: _context23.t15,
6281
+ options: _context23.t16
6282
+ };
6283
+ _context23.t1.submitClientEvent.call(_context23.t1, _context23.t17);
6284
+ case 29:
6143
6285
  throw new Error("Timed out waiting for media connection to be connected, correlationId=".concat(this.correlationId));
6144
- case 9:
6286
+ case 30:
6145
6287
  case "end":
6146
6288
  return _context23.stop();
6147
6289
  }
@@ -6162,18 +6304,18 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6162
6304
  }, {
6163
6305
  key: "createStatsAnalyzer",
6164
6306
  value: function createStatsAnalyzer() {
6165
- var _this38 = this;
6166
6307
  // @ts-ignore - config coming from registerPlugin
6167
6308
  if (this.config.stats.enableStatsAnalyzer) {
6168
6309
  // @ts-ignore - config coming from registerPlugin
6169
- this.networkQualityMonitor = new _networkQualityMonitor.default(this.config.stats);
6170
- this.statsAnalyzer = new _statsAnalyzer.StatsAnalyzer(
6171
- // @ts-ignore - config coming from registerPlugin
6172
- this.config.stats, function (ssrc) {
6173
- return _this38.receiveSlotManager.findReceiveSlotBySsrc(ssrc);
6174
- }, this.networkQualityMonitor);
6310
+ this.networkQualityMonitor = new _internalMediaCore.NetworkQualityMonitor(this.config.stats);
6311
+ this.statsAnalyzer = new _internalMediaCore.StatsAnalyzer({
6312
+ // @ts-ignore - config coming from registerPlugin
6313
+ config: this.config.stats,
6314
+ networkQualityMonitor: this.networkQualityMonitor,
6315
+ isMultistream: this.isMultistream
6316
+ });
6175
6317
  this.setupStatsAnalyzerEventHandlers();
6176
- this.networkQualityMonitor.on(_constants.EVENT_TRIGGERS.NETWORK_QUALITY, this.sendNetworkQualityEvent.bind(this));
6318
+ this.networkQualityMonitor.on(_internalMediaCore.NetworkQualityEventNames.NETWORK_QUALITY, this.sendNetworkQualityEvent.bind(this));
6177
6319
  }
6178
6320
  }
6179
6321
 
@@ -6196,6 +6338,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6196
6338
  */
6197
6339
  function () {
6198
6340
  var _waitForRemoteSDPAnswer = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee24() {
6341
+ var _this39 = this;
6199
6342
  var LOG_HEADER, deferSDPAnswer;
6200
6343
  return _regenerator.default.wrap(function _callee24$(_context24) {
6201
6344
  while (1) switch (_context24.prev = _context24.next) {
@@ -6211,6 +6354,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6211
6354
  deferSDPAnswer = this.deferSDPAnswer;
6212
6355
  this.sdpResponseTimer = setTimeout(function () {
6213
6356
  _loggerProxy.default.logger.warn("".concat(LOG_HEADER, " timeout! no REMOTE SDP ANSWER received within ").concat(_constants.ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT / 1000, " seconds"));
6357
+ // @ts-ignore
6358
+ _this39.webex.internal.newMetrics.submitClientEvent({
6359
+ name: 'client.media-engine.remote-sdp-received',
6360
+ payload: {
6361
+ canProceed: false,
6362
+ errors: [
6363
+ // @ts-ignore
6364
+ _this39.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({
6365
+ clientErrorCode: _internalPluginMetrics.CALL_DIAGNOSTIC_CONFIG.MISSING_ROAP_ANSWER_CLIENT_CODE
6366
+ })]
6367
+ },
6368
+ options: {
6369
+ meetingId: _this39.id,
6370
+ rawError: new Error('Timeout waiting for SDP answer')
6371
+ }
6372
+ });
6214
6373
  deferSDPAnswer.reject(new Error('Timed out waiting for REMOTE SDP ANSWER'));
6215
6374
  }, _constants.ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT);
6216
6375
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " waiting for REMOTE SDP ANSWER..."));
@@ -6284,7 +6443,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6284
6443
  return _regenerator.default.wrap(function _callee26$(_context26) {
6285
6444
  while (1) switch (_context26.prev = _context26.next) {
6286
6445
  case 0:
6287
- this.retriedWithTurnServer = true;
6446
+ this.addMediaData.retriedWithTurnServer = true;
6288
6447
  LOG_HEADER = 'Meeting:index#addMedia():retryWithForcedTurnDiscovery -->';
6289
6448
  _context26.next = 4;
6290
6449
  return this.cleanUpBeforeRetryWithTurnServer();
@@ -6400,7 +6559,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6400
6559
  correlation_id: this.correlationId,
6401
6560
  latency: cdl.getTurnDiscoveryTime(),
6402
6561
  turnServerUsed: this.turnServerUsed,
6403
- retriedWithTurnServer: this.retriedWithTurnServer
6562
+ retriedWithTurnServer: this.addMediaData.retriedWithTurnServer
6404
6563
  });
6405
6564
  }
6406
6565
  return _context28.abrupt("return", turnDiscoveryResult);
@@ -6430,12 +6589,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6430
6589
  key: "establishMediaConnection",
6431
6590
  value: (function () {
6432
6591
  var _establishMediaConnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee29(remoteMediaManagerConfig, bundlePolicy, isForced, turnServerInfo) {
6592
+ var _this$locusMediaReque;
6433
6593
  var LOG_HEADER, isReconnecting, _yield$this$doTurnDis, mc;
6434
6594
  return _regenerator.default.wrap(function _callee29$(_context29) {
6435
6595
  while (1) switch (_context29.prev = _context29.next) {
6436
6596
  case 0:
6437
6597
  LOG_HEADER = 'Meeting:index#addMedia():establishMediaConnection -->';
6438
- isReconnecting = this.isMoveToInProgress || this.retriedWithTurnServer; // We are forcing turn discovery if the case is moveTo and a turn server was used already
6598
+ isReconnecting = this.isMoveToInProgress || !!((_this$locusMediaReque = this.locusMediaRequest) !== null && _this$locusMediaReque !== void 0 && _this$locusMediaReque.isConfluenceCreated()); // We are forcing turn discovery if the case is moveTo and a turn server was used already
6439
6599
  if (this.isMoveToInProgress && this.turnServerUsed) {
6440
6600
  isForced = true;
6441
6601
  }
@@ -6593,23 +6753,70 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6593
6753
  }
6594
6754
  return cleanUpBeforeRetryWithTurnServer;
6595
6755
  }()
6756
+ /**
6757
+ * Creates an instance of LocusMediaRequest for this meeting - it is needed for doing any calls
6758
+ * to Locus /media API (these are used for sending Roap messages and updating audio/video mute status).
6759
+ *
6760
+ * @returns {void}
6761
+ */
6762
+ )
6763
+ }, {
6764
+ key: "setupLocusMediaRequest",
6765
+ value: function setupLocusMediaRequest() {
6766
+ var _this$webex$meetings$2, _this$webex$meetings$3;
6767
+ this.locusMediaRequest = new _locusMediaRequest.LocusMediaRequest({
6768
+ correlationId: this.correlationId,
6769
+ meetingId: this.id,
6770
+ device: {
6771
+ url: this.deviceUrl,
6772
+ // @ts-ignore
6773
+ deviceType: this.config.deviceType,
6774
+ // @ts-ignore
6775
+ countryCode: (_this$webex$meetings$2 = this.webex.meetings.geoHintInfo) === null || _this$webex$meetings$2 === void 0 ? void 0 : _this$webex$meetings$2.countryCode,
6776
+ // @ts-ignore
6777
+ regionCode: (_this$webex$meetings$3 = this.webex.meetings.geoHintInfo) === null || _this$webex$meetings$3 === void 0 ? void 0 : _this$webex$meetings$3.regionCode
6778
+ },
6779
+ preferTranscoding: !this.isMultistream
6780
+ }, {
6781
+ // @ts-ignore
6782
+ parent: this.webex
6783
+ });
6784
+ }
6785
+
6596
6786
  /**
6597
6787
  * Creates a media connection to the server. Media connection is required for sending or receiving any audio/video.
6598
6788
  *
6599
6789
  * @param {AddMediaOptions} options
6600
- * @param {TurnServerInfo} turnServerInfo - TURN server information (used only internally by the SDK)
6601
6790
  * @returns {Promise<void>}
6602
6791
  * @public
6603
6792
  * @memberof Meeting
6604
6793
  */
6605
- )
6606
6794
  }, {
6607
6795
  key: "addMedia",
6796
+ value: function addMedia() {
6797
+ var _this40 = this;
6798
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
6799
+ return this.addMediaInternal(function () {
6800
+ return _this40.turnServerUsed ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
6801
+ }, undefined, false, options);
6802
+ }
6803
+
6804
+ /**
6805
+ * Internal version of addMedia() with some more arguments for finer control of its behavior
6806
+ *
6807
+ * @param {Function} icePhaseCallback - callback to determine the icePhase for CA "client.ice.end" failure events
6808
+ * @param {TurnServerInfo} turnServerInfo - TURN server information
6809
+ * @param {boolean} forceTurnDiscovery - if true, TURN discovery will be done
6810
+ * @param {AddMediaOptions} options - same as options of the public addMedia() method
6811
+ * @returns {Promise<void>}
6812
+ * @protected
6813
+ * @memberof Meeting
6814
+ */
6815
+ }, {
6816
+ key: "addMediaInternal",
6608
6817
  value: (function () {
6609
- var _addMedia = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee32() {
6610
- var _this$webex$meetings$2, _this$webex$meetings$3;
6818
+ var _addMediaInternal = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee32(icePhaseCallback, turnServerInfo, forceTurnDiscovery) {
6611
6819
  var options,
6612
- turnServerInfo,
6613
6820
  LOG_HEADER,
6614
6821
  localStreams,
6615
6822
  _options$audioEnabled,
@@ -6628,6 +6835,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6628
6835
  selectedCandidatePairChanges,
6629
6836
  numTransports,
6630
6837
  reachabilityStats,
6838
+ iceCandidateErrors,
6839
+ _this$mediaProperties13,
6840
+ _this$mediaProperties14,
6841
+ _this$mediaProperties15,
6842
+ _this$mediaProperties16,
6843
+ _this$mediaProperties17,
6844
+ _this$mediaProperties18,
6845
+ _this$mediaProperties19,
6631
6846
  _this$mediaProperties20,
6632
6847
  _this$mediaProperties21,
6633
6848
  _this$mediaProperties22,
@@ -6642,27 +6857,21 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6642
6857
  _this$mediaProperties31,
6643
6858
  _this$mediaProperties32,
6644
6859
  _this$mediaProperties33,
6645
- _this$mediaProperties34,
6646
- _this$mediaProperties35,
6647
- _this$mediaProperties36,
6648
- _this$mediaProperties37,
6649
- _this$mediaProperties38,
6650
- _this$mediaProperties39,
6651
- _this$mediaProperties40,
6652
6860
  reachabilityMetrics,
6653
6861
  _yield$this$mediaProp2,
6654
6862
  _selectedCandidatePairChanges,
6655
6863
  _numTransports,
6864
+ _iceCandidateErrors,
6656
6865
  _args32 = arguments;
6657
6866
  return _regenerator.default.wrap(function _callee32$(_context32) {
6658
6867
  while (1) switch (_context32.prev = _context32.next) {
6659
6868
  case 0:
6660
- options = _args32.length > 0 && _args32[0] !== undefined ? _args32[0] : {};
6661
- turnServerInfo = _args32.length > 1 && _args32[1] !== undefined ? _args32[1] : undefined;
6662
- this.retriedWithTurnServer = false;
6869
+ options = _args32.length > 3 && _args32[3] !== undefined ? _args32[3] : {};
6870
+ this.addMediaData.retriedWithTurnServer = false;
6871
+ this.addMediaData.icePhaseCallback = icePhaseCallback;
6663
6872
  this.hasMediaConnectionConnectedAtLeastOnce = false;
6664
6873
  LOG_HEADER = 'Meeting:index#addMedia -->';
6665
- _loggerProxy.default.logger.info("".concat(LOG_HEADER, " called with: ").concat((0, _stringify.default)(options), ", ").concat((0, _stringify.default)(turnServerInfo)));
6874
+ _loggerProxy.default.logger.info("".concat(LOG_HEADER, " called with: options=").concat((0, _stringify.default)(options), ", turnServerInfo=").concat((0, _stringify.default)(turnServerInfo), ", forceTurnDiscovery=").concat(forceTurnDiscovery));
6666
6875
  if (!(options.allowMediaInLobby !== true && this.meetingState !== _constants.FULL_STATE.ACTIVE)) {
6667
6876
  _context32.next = 8;
6668
6877
  break;
@@ -6722,74 +6931,60 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6722
6931
  receiveVideo: videoEnabled,
6723
6932
  receiveShare: shareAudioEnabled || shareVideoEnabled
6724
6933
  });
6725
- this.locusMediaRequest = new _locusMediaRequest.LocusMediaRequest({
6726
- correlationId: this.correlationId,
6727
- meetingId: this.id,
6728
- device: {
6729
- url: this.deviceUrl,
6730
- // @ts-ignore
6731
- deviceType: this.config.deviceType,
6732
- // @ts-ignore
6733
- countryCode: (_this$webex$meetings$2 = this.webex.meetings.geoHintInfo) === null || _this$webex$meetings$2 === void 0 ? void 0 : _this$webex$meetings$2.countryCode,
6734
- // @ts-ignore
6735
- regionCode: (_this$webex$meetings$3 = this.webex.meetings.geoHintInfo) === null || _this$webex$meetings$3 === void 0 ? void 0 : _this$webex$meetings$3.regionCode
6736
- },
6737
- preferTranscoding: !this.isMultistream
6738
- }, {
6739
- // @ts-ignore
6740
- parent: this.webex
6741
- });
6742
6934
  this.audio = (0, _muteState.createMuteState)(_constants.AUDIO, this, audioEnabled);
6743
6935
  this.video = (0, _muteState.createMuteState)(_constants.VIDEO, this, videoEnabled);
6744
- _context32.prev = 19;
6745
- _context32.next = 22;
6936
+ _context32.prev = 18;
6937
+ _context32.next = 21;
6746
6938
  return this.setUpLocalStreamReferences(localStreams);
6747
- case 22:
6939
+ case 21:
6748
6940
  this.setMercuryListener();
6749
6941
  this.createStatsAnalyzer();
6750
- _context32.next = 26;
6751
- return this.establishMediaConnection(remoteMediaManagerConfig, bundlePolicy, false, turnServerInfo);
6752
- case 26:
6942
+ _context32.next = 25;
6943
+ return this.establishMediaConnection(remoteMediaManagerConfig, bundlePolicy, forceTurnDiscovery, turnServerInfo);
6944
+ case 25:
6753
6945
  if (!(audioEnabled || videoEnabled)) {
6754
- _context32.next = 31;
6946
+ _context32.next = 30;
6755
6947
  break;
6756
6948
  }
6757
- _context32.next = 29;
6949
+ _context32.next = 28;
6758
6950
  return Meeting.handleDeviceLogging();
6759
- case 29:
6760
- _context32.next = 32;
6951
+ case 28:
6952
+ _context32.next = 31;
6761
6953
  break;
6762
- case 31:
6954
+ case 30:
6763
6955
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " device logging not required"));
6764
- case 32:
6956
+ case 31:
6765
6957
  if (!this.mediaProperties.hasLocalShareStream()) {
6766
- _context32.next = 35;
6958
+ _context32.next = 34;
6767
6959
  break;
6768
6960
  }
6769
- _context32.next = 35;
6961
+ _context32.next = 34;
6770
6962
  return this.enqueueScreenShareFloorRequest();
6771
- case 35:
6772
- _context32.next = 37;
6963
+ case 34:
6964
+ _context32.next = 36;
6773
6965
  return this.mediaProperties.getCurrentConnectionInfo();
6774
- case 37:
6966
+ case 36:
6775
6967
  _yield$this$mediaProp = _context32.sent;
6776
6968
  connectionType = _yield$this$mediaProp.connectionType;
6777
6969
  selectedCandidatePairChanges = _yield$this$mediaProp.selectedCandidatePairChanges;
6778
6970
  numTransports = _yield$this$mediaProp.numTransports;
6779
- _context32.next = 43;
6971
+ _context32.next = 42;
6780
6972
  return this.webex.meetings.reachability.getReachabilityMetrics();
6781
- case 43:
6973
+ case 42:
6782
6974
  reachabilityStats = _context32.sent;
6783
- _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_SUCCESS, _objectSpread({
6975
+ iceCandidateErrors = Object.fromEntries(this.iceCandidateErrors);
6976
+ _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_SUCCESS, _objectSpread(_objectSpread(_objectSpread({
6784
6977
  correlation_id: this.correlationId,
6785
6978
  locus_id: this.locusUrl.split('/').pop(),
6786
6979
  connectionType: connectionType,
6787
6980
  selectedCandidatePairChanges: selectedCandidatePairChanges,
6788
6981
  numTransports: numTransports,
6789
6982
  isMultistream: this.isMultistream,
6790
- retriedWithTurnServer: this.retriedWithTurnServer,
6983
+ retriedWithTurnServer: this.addMediaData.retriedWithTurnServer,
6791
6984
  isJoinWithMediaRetry: this.joinWithMediaRetryInfo.isRetry
6792
- }, reachabilityStats));
6985
+ }, reachabilityStats), iceCandidateErrors), {}, {
6986
+ iceCandidatesCount: this.iceCandidatesCount
6987
+ }));
6793
6988
  // @ts-ignore
6794
6989
  this.webex.internal.newMetrics.submitClientEvent({
6795
6990
  name: 'client.media-engine.ready',
@@ -6801,11 +6996,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6801
6996
 
6802
6997
  // We can log ReceiveSlot SSRCs only after the SDP exchange, so doing it here:
6803
6998
  (_this$remoteMediaMana = this.remoteMediaManager) === null || _this$remoteMediaMana === void 0 ? void 0 : _this$remoteMediaMana.logAllReceiveSlots();
6804
- _context32.next = 67;
6999
+ _context32.next = 68;
6805
7000
  break;
6806
7001
  case 50:
6807
7002
  _context32.prev = 50;
6808
- _context32.t0 = _context32["catch"](19);
7003
+ _context32.t0 = _context32["catch"](18);
6809
7004
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " failed to establish media connection: "), _context32.t0);
6810
7005
 
6811
7006
  // @ts-ignore
@@ -6819,7 +7014,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6819
7014
  _yield$this$mediaProp2 = _context32.sent;
6820
7015
  _selectedCandidatePairChanges = _yield$this$mediaProp2.selectedCandidatePairChanges;
6821
7016
  _numTransports = _yield$this$mediaProp2.numTransports;
6822
- _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_FAILURE, _objectSpread({
7017
+ _iceCandidateErrors = Object.fromEntries(this.iceCandidateErrors);
7018
+ _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_FAILURE, _objectSpread(_objectSpread(_objectSpread({
6823
7019
  correlation_id: this.correlationId,
6824
7020
  locus_id: this.locusUrl.split('/').pop(),
6825
7021
  reason: _context32.t0.message,
@@ -6829,16 +7025,18 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6829
7025
  numTransports: _numTransports,
6830
7026
  turnDiscoverySkippedReason: this.turnDiscoverySkippedReason,
6831
7027
  turnServerUsed: this.turnServerUsed,
6832
- retriedWithTurnServer: this.retriedWithTurnServer,
7028
+ retriedWithTurnServer: this.addMediaData.retriedWithTurnServer,
6833
7029
  isMultistream: this.isMultistream,
6834
7030
  isJoinWithMediaRetry: this.joinWithMediaRetryInfo.isRetry,
6835
- signalingState: ((_this$mediaProperties20 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties20 === void 0 ? void 0 : (_this$mediaProperties21 = _this$mediaProperties20.multistreamConnection) === null || _this$mediaProperties21 === void 0 ? void 0 : (_this$mediaProperties22 = _this$mediaProperties21.pc) === null || _this$mediaProperties22 === void 0 ? void 0 : (_this$mediaProperties23 = _this$mediaProperties22.pc) === null || _this$mediaProperties23 === void 0 ? void 0 : _this$mediaProperties23.signalingState) || ((_this$mediaProperties24 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties24 === void 0 ? void 0 : (_this$mediaProperties25 = _this$mediaProperties24.mediaConnection) === null || _this$mediaProperties25 === void 0 ? void 0 : (_this$mediaProperties26 = _this$mediaProperties25.pc) === null || _this$mediaProperties26 === void 0 ? void 0 : _this$mediaProperties26.signalingState) || 'unknown',
6836
- connectionState: ((_this$mediaProperties27 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties27 === void 0 ? void 0 : (_this$mediaProperties28 = _this$mediaProperties27.multistreamConnection) === null || _this$mediaProperties28 === void 0 ? void 0 : (_this$mediaProperties29 = _this$mediaProperties28.pc) === null || _this$mediaProperties29 === void 0 ? void 0 : (_this$mediaProperties30 = _this$mediaProperties29.pc) === null || _this$mediaProperties30 === void 0 ? void 0 : _this$mediaProperties30.connectionState) || ((_this$mediaProperties31 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties31 === void 0 ? void 0 : (_this$mediaProperties32 = _this$mediaProperties31.mediaConnection) === null || _this$mediaProperties32 === void 0 ? void 0 : (_this$mediaProperties33 = _this$mediaProperties32.pc) === null || _this$mediaProperties33 === void 0 ? void 0 : _this$mediaProperties33.connectionState) || 'unknown',
6837
- iceConnectionState: ((_this$mediaProperties34 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties34 === void 0 ? void 0 : (_this$mediaProperties35 = _this$mediaProperties34.multistreamConnection) === null || _this$mediaProperties35 === void 0 ? void 0 : (_this$mediaProperties36 = _this$mediaProperties35.pc) === null || _this$mediaProperties36 === void 0 ? void 0 : (_this$mediaProperties37 = _this$mediaProperties36.pc) === null || _this$mediaProperties37 === void 0 ? void 0 : _this$mediaProperties37.iceConnectionState) || ((_this$mediaProperties38 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties38 === void 0 ? void 0 : (_this$mediaProperties39 = _this$mediaProperties38.mediaConnection) === null || _this$mediaProperties39 === void 0 ? void 0 : (_this$mediaProperties40 = _this$mediaProperties39.pc) === null || _this$mediaProperties40 === void 0 ? void 0 : _this$mediaProperties40.iceConnectionState) || 'unknown'
6838
- }, reachabilityMetrics));
6839
- _context32.next = 64;
7031
+ signalingState: ((_this$mediaProperties13 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties13 === void 0 ? void 0 : (_this$mediaProperties14 = _this$mediaProperties13.multistreamConnection) === null || _this$mediaProperties14 === void 0 ? void 0 : (_this$mediaProperties15 = _this$mediaProperties14.pc) === null || _this$mediaProperties15 === void 0 ? void 0 : (_this$mediaProperties16 = _this$mediaProperties15.pc) === null || _this$mediaProperties16 === void 0 ? void 0 : _this$mediaProperties16.signalingState) || ((_this$mediaProperties17 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties17 === void 0 ? void 0 : (_this$mediaProperties18 = _this$mediaProperties17.mediaConnection) === null || _this$mediaProperties18 === void 0 ? void 0 : (_this$mediaProperties19 = _this$mediaProperties18.pc) === null || _this$mediaProperties19 === void 0 ? void 0 : _this$mediaProperties19.signalingState) || 'unknown',
7032
+ connectionState: ((_this$mediaProperties20 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties20 === void 0 ? void 0 : (_this$mediaProperties21 = _this$mediaProperties20.multistreamConnection) === null || _this$mediaProperties21 === void 0 ? void 0 : (_this$mediaProperties22 = _this$mediaProperties21.pc) === null || _this$mediaProperties22 === void 0 ? void 0 : (_this$mediaProperties23 = _this$mediaProperties22.pc) === null || _this$mediaProperties23 === void 0 ? void 0 : _this$mediaProperties23.connectionState) || ((_this$mediaProperties24 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties24 === void 0 ? void 0 : (_this$mediaProperties25 = _this$mediaProperties24.mediaConnection) === null || _this$mediaProperties25 === void 0 ? void 0 : (_this$mediaProperties26 = _this$mediaProperties25.pc) === null || _this$mediaProperties26 === void 0 ? void 0 : _this$mediaProperties26.connectionState) || 'unknown',
7033
+ iceConnectionState: ((_this$mediaProperties27 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties27 === void 0 ? void 0 : (_this$mediaProperties28 = _this$mediaProperties27.multistreamConnection) === null || _this$mediaProperties28 === void 0 ? void 0 : (_this$mediaProperties29 = _this$mediaProperties28.pc) === null || _this$mediaProperties29 === void 0 ? void 0 : (_this$mediaProperties30 = _this$mediaProperties29.pc) === null || _this$mediaProperties30 === void 0 ? void 0 : _this$mediaProperties30.iceConnectionState) || ((_this$mediaProperties31 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties31 === void 0 ? void 0 : (_this$mediaProperties32 = _this$mediaProperties31.mediaConnection) === null || _this$mediaProperties32 === void 0 ? void 0 : (_this$mediaProperties33 = _this$mediaProperties32.pc) === null || _this$mediaProperties33 === void 0 ? void 0 : _this$mediaProperties33.iceConnectionState) || 'unknown'
7034
+ }, reachabilityMetrics), _iceCandidateErrors), {}, {
7035
+ iceCandidatesCount: this.iceCandidatesCount
7036
+ }));
7037
+ _context32.next = 65;
6840
7038
  return this.cleanUpOnAddMediaFailure();
6841
- case 64:
7039
+ case 65:
6842
7040
  // Upload logs on error while adding media
6843
7041
  _triggerProxy.default.trigger(this, {
6844
7042
  file: 'meeting/index',
@@ -6850,16 +7048,20 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6850
7048
  });
6851
7049
  }
6852
7050
  throw _context32.t0;
6853
- case 67:
7051
+ case 68:
7052
+ _context32.prev = 68;
7053
+ this.addMediaData.icePhaseCallback = DEFAULT_ICE_PHASE_CALLBACK;
7054
+ return _context32.finish(68);
7055
+ case 71:
6854
7056
  case "end":
6855
7057
  return _context32.stop();
6856
7058
  }
6857
- }, _callee32, this, [[19, 50]]);
7059
+ }, _callee32, this, [[18, 50, 68, 71]]);
6858
7060
  }));
6859
- function addMedia() {
6860
- return _addMedia.apply(this, arguments);
7061
+ function addMediaInternal(_x32, _x33, _x34) {
7062
+ return _addMediaInternal.apply(this, arguments);
6861
7063
  }
6862
- return addMedia;
7064
+ return addMediaInternal;
6863
7065
  }()
6864
7066
  /**
6865
7067
  * Informs if the peer connection is in a state that can be updated with updateMedia (audio/video/share)
@@ -6886,7 +7088,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6886
7088
  * @memberof Meeting
6887
7089
  */
6888
7090
  function enqueueMediaUpdate(mediaUpdateType) {
6889
- var _this39 = this;
7091
+ var _this41 = this;
6890
7092
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
6891
7093
  var canUpdateMediaNow = this.canUpdateMedia();
6892
7094
  return new _promise.default(function (resolve, reject) {
@@ -6897,9 +7099,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6897
7099
  options: options
6898
7100
  };
6899
7101
  _loggerProxy.default.logger.log("Meeting:index#enqueueMediaUpdate --> enqueuing media update type=".concat(mediaUpdateType));
6900
- _this39.queuedMediaUpdates.push(queueItem);
7102
+ _this41.queuedMediaUpdates.push(queueItem);
6901
7103
  if (canUpdateMediaNow) {
6902
- _this39.processNextQueuedMediaUpdate();
7104
+ _this41.processNextQueuedMediaUpdate();
6903
7105
  }
6904
7106
  });
6905
7107
  }
@@ -6988,7 +7190,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6988
7190
  }
6989
7191
  }, _callee33, this);
6990
7192
  }));
6991
- function updateMedia(_x32) {
7193
+ function updateMedia(_x35) {
6992
7194
  return _updateMedia.apply(this, arguments);
6993
7195
  }
6994
7196
  return updateMedia;
@@ -7004,7 +7206,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7004
7206
  }, {
7005
7207
  key: "acknowledge",
7006
7208
  value: function acknowledge(type) {
7007
- var _this40 = this;
7209
+ var _this42 = this;
7008
7210
  if (!type) {
7009
7211
  return _promise.default.reject(new _parameter.default('Type must be set to acknowledge the meeting.'));
7010
7212
  }
@@ -7016,12 +7218,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7016
7218
  }).then(function (response) {
7017
7219
  return _promise.default.resolve(response);
7018
7220
  }).then(function (response) {
7019
- _this40.meetingFiniteStateMachine.ring(type);
7221
+ _this42.meetingFiniteStateMachine.ring(type);
7020
7222
  // @ts-ignore
7021
- _this40.webex.internal.newMetrics.submitClientEvent({
7223
+ _this42.webex.internal.newMetrics.submitClientEvent({
7022
7224
  name: 'client.alert.displayed',
7023
7225
  options: {
7024
- meetingId: _this40.id
7226
+ meetingId: _this42.id
7025
7227
  }
7026
7228
  });
7027
7229
  return _promise.default.resolve({
@@ -7046,12 +7248,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7046
7248
  }, {
7047
7249
  key: "decline",
7048
7250
  value: function decline(reason) {
7049
- var _this41 = this;
7251
+ var _this43 = this;
7050
7252
  return _util2.default.declineMeeting(this, reason).then(function (decline) {
7051
- _this41.meetingFiniteStateMachine.decline();
7253
+ _this43.meetingFiniteStateMachine.decline();
7052
7254
  return _promise.default.resolve(decline);
7053
7255
  }).catch(function (error) {
7054
- _this41.meetingFiniteStateMachine.fail(error);
7256
+ _this43.meetingFiniteStateMachine.fail(error);
7055
7257
  return _promise.default.reject(error);
7056
7258
  });
7057
7259
  }
@@ -7102,7 +7304,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7102
7304
  }, {
7103
7305
  key: "leave",
7104
7306
  value: function leave() {
7105
- var _this42 = this;
7307
+ var _this44 = this;
7106
7308
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7107
7309
  var leaveReason = options.reason || _constants.MEETING_REMOVED_REASON.CLIENT_LEAVE_REQUEST;
7108
7310
 
@@ -7114,7 +7316,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7114
7316
  var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7115
7317
  return (
7116
7318
  // @ts-ignore
7117
- _this42.webex.internal.newMetrics.submitClientEvent({
7319
+ _this44.webex.internal.newMetrics.submitClientEvent({
7118
7320
  name: 'client.call.leave',
7119
7321
  payload: _objectSpread({
7120
7322
  trigger: 'user-interaction',
@@ -7122,7 +7324,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7122
7324
  leaveReason: options.clientEventLeaveReason
7123
7325
  }, payload),
7124
7326
  options: {
7125
- meetingId: _this42.id
7327
+ meetingId: _this44.id
7126
7328
  }
7127
7329
  })
7128
7330
  );
@@ -7131,24 +7333,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7131
7333
  return _util2.default.leaveMeeting(this, options).then(function (leave) {
7132
7334
  // CA team recommends submitting this *after* locus /leave
7133
7335
  submitLeaveMetric();
7134
- _this42.meetingFiniteStateMachine.leave();
7135
- _this42.clearMeetingData();
7336
+ _this44.meetingFiniteStateMachine.leave();
7337
+ _this44.clearMeetingData();
7136
7338
 
7137
7339
  // upload logs on leave irrespective of meeting delete
7138
- _triggerProxy.default.trigger(_this42, {
7340
+ _triggerProxy.default.trigger(_this44, {
7139
7341
  file: 'meeting/index',
7140
7342
  function: 'leave'
7141
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this42);
7343
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this44);
7142
7344
 
7143
7345
  // TODO: more testing before we remove this code, we are not sure the scenarios for destroy here
7144
- if (_this42.wirelessShare || _this42.guest) {
7346
+ if (_this44.wirelessShare || _this44.guest) {
7145
7347
  // If screen sharing clean the meeting object
7146
- _triggerProxy.default.trigger(_this42, {
7348
+ _triggerProxy.default.trigger(_this44, {
7147
7349
  file: 'meeting/index',
7148
7350
  function: 'leave'
7149
7351
  }, _constants.EVENTS.DESTROY_MEETING, {
7150
7352
  reason: options.reason,
7151
- meetingId: _this42.id
7353
+ meetingId: _this44.id
7152
7354
  });
7153
7355
  }
7154
7356
  _loggerProxy.default.logger.log('Meeting:index#leave --> LEAVE REASON ', leaveReason);
@@ -7165,16 +7367,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7165
7367
  shownToUser: false
7166
7368
  }]
7167
7369
  });
7168
- _this42.meetingFiniteStateMachine.fail(error);
7370
+ _this44.meetingFiniteStateMachine.fail(error);
7169
7371
  _loggerProxy.default.logger.error('Meeting:index#leave --> Failed to leave ', error);
7170
7372
  // upload logs on leave irrespective of meeting delete
7171
- _triggerProxy.default.trigger(_this42, {
7373
+ _triggerProxy.default.trigger(_this44, {
7172
7374
  file: 'meeting/index',
7173
7375
  function: 'leave'
7174
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this42);
7376
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this44);
7175
7377
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_LEAVE_FAILURE, {
7176
- correlation_id: _this42.correlationId,
7177
- locus_id: _this42.locusUrl.split('/').pop(),
7378
+ correlation_id: _this44.correlationId,
7379
+ locus_id: _this44.locusUrl.split('/').pop(),
7178
7380
  reason: error.message,
7179
7381
  stack: error.stack,
7180
7382
  code: error.code
@@ -7194,7 +7396,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7194
7396
  }, {
7195
7397
  key: "startWhiteboardShare",
7196
7398
  value: function startWhiteboardShare(channelUrl, resourceToken) {
7197
- var _this43 = this;
7399
+ var _this45 = this;
7198
7400
  var whiteboard = this.locusInfo.mediaShares.find(function (element) {
7199
7401
  return element.name === 'whiteboard';
7200
7402
  });
@@ -7223,13 +7425,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7223
7425
  body.resourceToken = resourceToken;
7224
7426
  }
7225
7427
  return this.meetingRequest.changeMeetingFloor(body).then(function () {
7226
- _this43.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
7428
+ _this45.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
7227
7429
  return _promise.default.resolve();
7228
7430
  }).catch(function (error) {
7229
7431
  _loggerProxy.default.logger.error('Meeting:index#startWhiteboardShare --> Error ', error);
7230
7432
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_START_WHITEBOARD_SHARE_FAILURE, {
7231
- correlation_id: _this43.correlationId,
7232
- locus_id: _this43.locusUrl.split('/').pop(),
7433
+ correlation_id: _this45.correlationId,
7434
+ locus_id: _this45.locusUrl.split('/').pop(),
7233
7435
  reason: error.message,
7234
7436
  stack: error.stack,
7235
7437
  board: {
@@ -7252,7 +7454,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7252
7454
  }, {
7253
7455
  key: "stopWhiteboardShare",
7254
7456
  value: function stopWhiteboardShare(channelUrl) {
7255
- var _this44 = this;
7457
+ var _this46 = this;
7256
7458
  var whiteboard = this.locusInfo.mediaShares.find(function (element) {
7257
7459
  return element.name === 'whiteboard';
7258
7460
  });
@@ -7275,8 +7477,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7275
7477
  }).catch(function (error) {
7276
7478
  _loggerProxy.default.logger.error('Meeting:index#stopWhiteboardShare --> Error ', error);
7277
7479
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_STOP_WHITEBOARD_SHARE_FAILURE, {
7278
- correlation_id: _this44.correlationId,
7279
- locus_id: _this44.locusUrl.split('/').pop(),
7480
+ correlation_id: _this46.correlationId,
7481
+ locus_id: _this46.locusUrl.split('/').pop(),
7280
7482
  reason: error.message,
7281
7483
  stack: error.stack,
7282
7484
  board: {
@@ -7298,7 +7500,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7298
7500
  }, {
7299
7501
  key: "requestScreenShareFloor",
7300
7502
  value: function requestScreenShareFloor() {
7301
- var _this45 = this;
7503
+ var _this47 = this;
7302
7504
  if (!this.mediaProperties.hasLocalShareStream() || !this.mediaProperties.mediaDirection.sendShare) {
7303
7505
  _loggerProxy.default.logger.log("Meeting:index#requestScreenShareFloor --> NOT requesting floor, because we don't have the share stream anymore (shareStream=".concat(this.mediaProperties.shareVideoStream ? 'yes' : 'no', ", sendShare=").concat(this.mediaProperties.mediaDirection.sendShare, ")"));
7304
7506
  this.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
@@ -7329,34 +7531,34 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7329
7531
  resourceUrl: this.resourceUrl,
7330
7532
  shareInstanceId: this.localShareInstanceId
7331
7533
  }).then(function () {
7332
- _this45.screenShareFloorState = ScreenShareFloorStatus.GRANTED;
7534
+ _this47.screenShareFloorState = ScreenShareFloorStatus.GRANTED;
7333
7535
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_SUCCESS, {
7334
- correlation_id: _this45.correlationId,
7335
- locus_id: _this45.locusUrl.split('/').pop()
7536
+ correlation_id: _this47.correlationId,
7537
+ locus_id: _this47.locusUrl.split('/').pop()
7336
7538
  });
7337
7539
  return _promise.default.resolve();
7338
7540
  }).catch(function (error) {
7339
7541
  _loggerProxy.default.logger.error('Meeting:index#share --> Error ', error);
7340
7542
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_FAILURE, {
7341
- correlation_id: _this45.correlationId,
7342
- locus_id: _this45.locusUrl.split('/').pop(),
7543
+ correlation_id: _this47.correlationId,
7544
+ locus_id: _this47.locusUrl.split('/').pop(),
7343
7545
  reason: error.message,
7344
7546
  stack: error.stack
7345
7547
  });
7346
7548
 
7347
7549
  // @ts-ignore
7348
- _this45.webex.internal.newMetrics.submitClientEvent({
7550
+ _this47.webex.internal.newMetrics.submitClientEvent({
7349
7551
  name: 'client.share.floor-granted.local',
7350
7552
  payload: {
7351
7553
  mediaType: 'share',
7352
7554
  errors: _util2.default.getChangeMeetingFloorErrorPayload(error.message),
7353
- shareInstanceId: _this45.localShareInstanceId
7555
+ shareInstanceId: _this47.localShareInstanceId
7354
7556
  },
7355
7557
  options: {
7356
- meetingId: _this45.id
7558
+ meetingId: _this47.id
7357
7559
  }
7358
7560
  });
7359
- _this45.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
7561
+ _this47.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
7360
7562
  return _promise.default.reject(error);
7361
7563
  });
7362
7564
  }
@@ -7379,10 +7581,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7379
7581
  }, {
7380
7582
  key: "requestScreenShareFloorIfPending",
7381
7583
  value: function requestScreenShareFloorIfPending() {
7382
- var _this46 = this;
7584
+ var _this48 = this;
7383
7585
  if (this.floorGrantPending && this.state === _constants.MEETING_STATE.STATES.JOINED) {
7384
7586
  this.requestScreenShareFloor().then(function () {
7385
- _this46.floorGrantPending = false;
7587
+ _this48.floorGrantPending = false;
7386
7588
  });
7387
7589
  }
7388
7590
  }
@@ -7396,7 +7598,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7396
7598
  }, {
7397
7599
  key: "releaseScreenShareFloor",
7398
7600
  value: function releaseScreenShareFloor() {
7399
- var _this47 = this;
7601
+ var _this49 = this;
7400
7602
  var content = this.locusInfo.mediaShares.find(function (element) {
7401
7603
  return element.name === _constants.CONTENT;
7402
7604
  });
@@ -7431,8 +7633,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7431
7633
  }).catch(function (error) {
7432
7634
  _loggerProxy.default.logger.error('Meeting:index#releaseScreenShareFloor --> Error ', error);
7433
7635
  _metrics.default.sendBehavioralMetric(_constants2.default.STOP_FLOOR_REQUEST_FAILURE, {
7434
- correlation_id: _this47.correlationId,
7435
- locus_id: _this47.locusUrl.split('/').pop(),
7636
+ correlation_id: _this49.correlationId,
7637
+ locus_id: _this49.locusUrl.split('/').pop(),
7436
7638
  reason: error.message,
7437
7639
  stack: error.stack
7438
7640
  });
@@ -7611,14 +7813,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7611
7813
  }, {
7612
7814
  key: "changeVideoLayout",
7613
7815
  value: function changeVideoLayout(layoutType) {
7614
- var _this48 = this;
7816
+ var _this50 = this;
7615
7817
  var renderInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
7616
7818
  var main = renderInfo.main,
7617
7819
  content = renderInfo.content;
7618
- var _this$mediaProperties41 = this.mediaProperties,
7619
- mediaDirection = _this$mediaProperties41.mediaDirection,
7620
- remoteShareStream = _this$mediaProperties41.remoteShareStream,
7621
- remoteVideoStream = _this$mediaProperties41.remoteVideoStream;
7820
+ var _this$mediaProperties34 = this.mediaProperties,
7821
+ mediaDirection = _this$mediaProperties34.mediaDirection,
7822
+ remoteShareStream = _this$mediaProperties34.remoteShareStream,
7823
+ remoteVideoStream = _this$mediaProperties34.remoteVideoStream;
7622
7824
  var layoutInfo = (0, _lodash.cloneDeep)(this.lastVideoLayoutInfo);
7623
7825
 
7624
7826
  // TODO: We need a real time value for Audio, Video and Share send indicator
@@ -7665,7 +7867,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7665
7867
  }
7666
7868
  this.lastVideoLayoutInfo = (0, _lodash.cloneDeep)(layoutInfo);
7667
7869
  this.locusInfo.once(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED, function (envelope) {
7668
- _triggerProxy.default.trigger(_this48, {
7870
+ _triggerProxy.default.trigger(_this50, {
7669
7871
  file: 'meeting/index',
7670
7872
  function: 'changeVideoLayout'
7671
7873
  }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_LAYOUT_UPDATE, {
@@ -7781,7 +7983,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7781
7983
  }, {
7782
7984
  key: "endMeetingForAll",
7783
7985
  value: function endMeetingForAll() {
7784
- var _this49 = this;
7986
+ var _this51 = this;
7785
7987
  // @ts-ignore
7786
7988
  this.webex.internal.newMetrics.submitClientEvent({
7787
7989
  name: 'client.call.leave',
@@ -7799,25 +8001,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7799
8001
  locus_id: this.locusId
7800
8002
  });
7801
8003
  return _util2.default.endMeetingForAll(this).then(function (end) {
7802
- _this49.meetingFiniteStateMachine.end();
7803
- _this49.clearMeetingData();
8004
+ _this51.meetingFiniteStateMachine.end();
8005
+ _this51.clearMeetingData();
7804
8006
  // upload logs on leave irrespective of meeting delete
7805
- _triggerProxy.default.trigger(_this49, {
8007
+ _triggerProxy.default.trigger(_this51, {
7806
8008
  file: 'meeting/index',
7807
8009
  function: 'endMeetingForAll'
7808
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this49);
8010
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this51);
7809
8011
  return end;
7810
8012
  }).catch(function (error) {
7811
- _this49.meetingFiniteStateMachine.fail(error);
8013
+ _this51.meetingFiniteStateMachine.fail(error);
7812
8014
  _loggerProxy.default.logger.error('Meeting:index#endMeetingForAll --> Failed to end meeting ', error);
7813
8015
  // upload logs on leave irrespective of meeting delete
7814
- _triggerProxy.default.trigger(_this49, {
8016
+ _triggerProxy.default.trigger(_this51, {
7815
8017
  file: 'meeting/index',
7816
8018
  function: 'endMeetingForAll'
7817
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this49);
8019
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this51);
7818
8020
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_END_ALL_FAILURE, {
7819
- correlation_id: _this49.correlationId,
7820
- locus_id: _this49.locusUrl.split('/').pop(),
8021
+ correlation_id: _this51.correlationId,
8022
+ locus_id: _this51.locusUrl.split('/').pop(),
7821
8023
  reason: error.message,
7822
8024
  stack: error.stack,
7823
8025
  code: error.code
@@ -7890,8 +8092,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7890
8092
  }, {
7891
8093
  key: "checkMediaConnection",
7892
8094
  value: function checkMediaConnection() {
7893
- var _this$mediaProperties42;
7894
- if ((_this$mediaProperties42 = this.mediaProperties) !== null && _this$mediaProperties42 !== void 0 && _this$mediaProperties42.webrtcMediaConnection) {
8095
+ var _this$mediaProperties35;
8096
+ if ((_this$mediaProperties35 = this.mediaProperties) !== null && _this$mediaProperties35 !== void 0 && _this$mediaProperties35.webrtcMediaConnection) {
7895
8097
  return;
7896
8098
  }
7897
8099
  throw new _webexErrors.NoMediaEstablishedYetError();
@@ -7938,7 +8140,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7938
8140
  }
7939
8141
  }, _callee34, this);
7940
8142
  }));
7941
- function enableMusicMode(_x33) {
8143
+ function enableMusicMode(_x36) {
7942
8144
  return _enableMusicMode.apply(this, arguments);
7943
8145
  }
7944
8146
  return enableMusicMode;
@@ -7951,15 +8153,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7951
8153
  }, {
7952
8154
  key: "updateTranscodedMediaConnection",
7953
8155
  value: function updateTranscodedMediaConnection() {
7954
- var _this$mediaProperties43,
7955
- _this$mediaProperties44,
7956
- _this$mediaProperties45,
7957
- _this$mediaProperties46,
7958
- _this$mediaProperties47,
7959
- _this$mediaProperties48,
7960
- _this$mediaProperties49,
7961
- _this$mediaProperties50,
7962
- _this50 = this;
8156
+ var _this$mediaProperties36,
8157
+ _this$mediaProperties37,
8158
+ _this$mediaProperties38,
8159
+ _this$mediaProperties39,
8160
+ _this$mediaProperties40,
8161
+ _this$mediaProperties41,
8162
+ _this$mediaProperties42,
8163
+ _this$mediaProperties43,
8164
+ _this52 = this;
7963
8165
  var LOG_HEADER = 'Meeting:index#updateTranscodedMediaConnection -->';
7964
8166
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " starting"));
7965
8167
  if (!this.canUpdateMedia()) {
@@ -7968,10 +8170,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7968
8170
  return this.mediaProperties.webrtcMediaConnection.update({
7969
8171
  // TODO: RoapMediaConnection is not ready to use stream classes yet, so we pass the raw MediaStreamTrack for now
7970
8172
  localTracks: {
7971
- audio: ((_this$mediaProperties43 = this.mediaProperties.audioStream) === null || _this$mediaProperties43 === void 0 ? void 0 : (_this$mediaProperties44 = _this$mediaProperties43.outputStream) === null || _this$mediaProperties44 === void 0 ? void 0 : _this$mediaProperties44.getTracks()[0]) || null,
7972
- video: ((_this$mediaProperties45 = this.mediaProperties.videoStream) === null || _this$mediaProperties45 === void 0 ? void 0 : (_this$mediaProperties46 = _this$mediaProperties45.outputStream) === null || _this$mediaProperties46 === void 0 ? void 0 : _this$mediaProperties46.getTracks()[0]) || null,
7973
- screenShareVideo: ((_this$mediaProperties47 = this.mediaProperties.shareVideoStream) === null || _this$mediaProperties47 === void 0 ? void 0 : (_this$mediaProperties48 = _this$mediaProperties47.outputStream) === null || _this$mediaProperties48 === void 0 ? void 0 : _this$mediaProperties48.getTracks()[0]) || null,
7974
- screenShareAudio: ((_this$mediaProperties49 = this.mediaProperties.shareAudioStream) === null || _this$mediaProperties49 === void 0 ? void 0 : (_this$mediaProperties50 = _this$mediaProperties49.outputStream) === null || _this$mediaProperties50 === void 0 ? void 0 : _this$mediaProperties50.getTracks()[0]) || null
8173
+ audio: ((_this$mediaProperties36 = this.mediaProperties.audioStream) === null || _this$mediaProperties36 === void 0 ? void 0 : (_this$mediaProperties37 = _this$mediaProperties36.outputStream) === null || _this$mediaProperties37 === void 0 ? void 0 : _this$mediaProperties37.getTracks()[0]) || null,
8174
+ video: ((_this$mediaProperties38 = this.mediaProperties.videoStream) === null || _this$mediaProperties38 === void 0 ? void 0 : (_this$mediaProperties39 = _this$mediaProperties38.outputStream) === null || _this$mediaProperties39 === void 0 ? void 0 : _this$mediaProperties39.getTracks()[0]) || null,
8175
+ screenShareVideo: ((_this$mediaProperties40 = this.mediaProperties.shareVideoStream) === null || _this$mediaProperties40 === void 0 ? void 0 : (_this$mediaProperties41 = _this$mediaProperties40.outputStream) === null || _this$mediaProperties41 === void 0 ? void 0 : _this$mediaProperties41.getTracks()[0]) || null,
8176
+ screenShareAudio: ((_this$mediaProperties42 = this.mediaProperties.shareAudioStream) === null || _this$mediaProperties42 === void 0 ? void 0 : (_this$mediaProperties43 = _this$mediaProperties42.outputStream) === null || _this$mediaProperties43 === void 0 ? void 0 : _this$mediaProperties43.getTracks()[0]) || null
7975
8177
  },
7976
8178
  direction: {
7977
8179
  audio: _media.default.getDirection(true, this.mediaProperties.mediaDirection.receiveAudio, this.mediaProperties.mediaDirection.sendAudio),
@@ -7984,8 +8186,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7984
8186
  }).catch(function (error) {
7985
8187
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " Error: "), error);
7986
8188
  _metrics.default.sendBehavioralMetric(_constants2.default.UPDATE_MEDIA_FAILURE, {
7987
- correlation_id: _this50.correlationId,
7988
- locus_id: _this50.locusUrl.split('/').pop(),
8189
+ correlation_id: _this52.correlationId,
8190
+ locus_id: _this52.locusUrl.split('/').pop(),
7989
8191
  reason: error.message,
7990
8192
  stack: error.stack
7991
8193
  });
@@ -8062,7 +8264,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8062
8264
  }
8063
8265
  }, _callee35, this);
8064
8266
  }));
8065
- function publishStream(_x34, _x35) {
8267
+ function publishStream(_x37, _x38) {
8066
8268
  return _publishStream.apply(this, arguments);
8067
8269
  }
8068
8270
  return publishStream;
@@ -8107,7 +8309,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8107
8309
  }
8108
8310
  }, _callee36, this);
8109
8311
  }));
8110
- function unpublishStream(_x36, _x37) {
8312
+ function unpublishStream(_x39, _x40) {
8111
8313
  return _unpublishStream.apply(this, arguments);
8112
8314
  }
8113
8315
  return unpublishStream;
@@ -8214,7 +8416,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8214
8416
  }
8215
8417
  }, _callee37, this);
8216
8418
  }));
8217
- function publishStreams(_x38) {
8419
+ function publishStreams(_x41) {
8218
8420
  return _publishStreams.apply(this, arguments);
8219
8421
  }
8220
8422
  return publishStreams;
@@ -8288,7 +8490,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8288
8490
  }
8289
8491
  }, _callee38, this);
8290
8492
  }));
8291
- function unpublishStreams(_x39) {
8493
+ function unpublishStreams(_x42) {
8292
8494
  return _unpublishStreams.apply(this, arguments);
8293
8495
  }
8294
8496
  return unpublishStreams;