@webex/plugin-meetings 3.6.0-next.9 → 3.7.0-ipv6-multi-turn-urls.1

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 (159) hide show
  1. package/README.md +2 -1
  2. package/dist/breakouts/breakout.js +1 -1
  3. package/dist/breakouts/index.js +1 -1
  4. package/dist/common/errors/{webinar-registration-error.js → join-webinar-error.js} +12 -12
  5. package/dist/common/errors/join-webinar-error.js.map +1 -0
  6. package/dist/config.js +3 -1
  7. package/dist/config.js.map +1 -1
  8. package/dist/constants.js +50 -7
  9. package/dist/constants.js.map +1 -1
  10. package/dist/controls-options-manager/enums.js +1 -0
  11. package/dist/controls-options-manager/enums.js.map +1 -1
  12. package/dist/controls-options-manager/index.js +10 -3
  13. package/dist/controls-options-manager/index.js.map +1 -1
  14. package/dist/controls-options-manager/types.js.map +1 -1
  15. package/dist/controls-options-manager/util.js +12 -0
  16. package/dist/controls-options-manager/util.js.map +1 -1
  17. package/dist/index.js +7 -7
  18. package/dist/index.js.map +1 -1
  19. package/dist/interpretation/index.js +1 -1
  20. package/dist/interpretation/siLanguage.js +1 -1
  21. package/dist/locus-info/controlsUtils.js +28 -4
  22. package/dist/locus-info/controlsUtils.js.map +1 -1
  23. package/dist/locus-info/fullState.js +2 -1
  24. package/dist/locus-info/fullState.js.map +1 -1
  25. package/dist/locus-info/index.js +61 -3
  26. package/dist/locus-info/index.js.map +1 -1
  27. package/dist/media/index.js +29 -1
  28. package/dist/media/index.js.map +1 -1
  29. package/dist/meeting/in-meeting-actions.js +29 -1
  30. package/dist/meeting/in-meeting-actions.js.map +1 -1
  31. package/dist/meeting/index.js +692 -472
  32. package/dist/meeting/index.js.map +1 -1
  33. package/dist/meeting/locusMediaRequest.js +2 -6
  34. package/dist/meeting/locusMediaRequest.js.map +1 -1
  35. package/dist/meeting/request.js +21 -29
  36. package/dist/meeting/request.js.map +1 -1
  37. package/dist/meeting/util.js +95 -59
  38. package/dist/meeting/util.js.map +1 -1
  39. package/dist/meeting-info/meeting-info-v2.js +29 -17
  40. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  41. package/dist/meetings/index.js +8 -3
  42. package/dist/meetings/index.js.map +1 -1
  43. package/dist/members/index.js +3 -2
  44. package/dist/members/index.js.map +1 -1
  45. package/dist/members/util.js +13 -7
  46. package/dist/members/util.js.map +1 -1
  47. package/dist/metrics/constants.js +3 -1
  48. package/dist/metrics/constants.js.map +1 -1
  49. package/dist/multistream/remoteMedia.js +30 -15
  50. package/dist/multistream/remoteMedia.js.map +1 -1
  51. package/dist/reachability/clusterReachability.js +12 -15
  52. package/dist/reachability/clusterReachability.js.map +1 -1
  53. package/dist/reachability/index.js +433 -136
  54. package/dist/reachability/index.js.map +1 -1
  55. package/dist/reachability/reachability.types.js +7 -0
  56. package/dist/reachability/reachability.types.js.map +1 -0
  57. package/dist/reachability/request.js +23 -9
  58. package/dist/reachability/request.js.map +1 -1
  59. package/dist/recording-controller/enums.js +8 -4
  60. package/dist/recording-controller/enums.js.map +1 -1
  61. package/dist/recording-controller/index.js +18 -9
  62. package/dist/recording-controller/index.js.map +1 -1
  63. package/dist/recording-controller/util.js +13 -9
  64. package/dist/recording-controller/util.js.map +1 -1
  65. package/dist/roap/index.js +5 -7
  66. package/dist/roap/index.js.map +1 -1
  67. package/dist/roap/request.js +45 -79
  68. package/dist/roap/request.js.map +1 -1
  69. package/dist/roap/turnDiscovery.js +3 -6
  70. package/dist/roap/turnDiscovery.js.map +1 -1
  71. package/dist/types/common/errors/{webinar-registration-error.d.ts → join-webinar-error.d.ts} +2 -2
  72. package/dist/types/config.d.ts +2 -0
  73. package/dist/types/constants.d.ts +38 -1
  74. package/dist/types/controls-options-manager/enums.d.ts +2 -1
  75. package/dist/types/controls-options-manager/index.d.ts +2 -1
  76. package/dist/types/controls-options-manager/types.d.ts +2 -0
  77. package/dist/types/index.d.ts +2 -2
  78. package/dist/types/locus-info/index.d.ts +9 -0
  79. package/dist/types/meeting/in-meeting-actions.d.ts +28 -0
  80. package/dist/types/meeting/index.d.ts +34 -3
  81. package/dist/types/meeting/locusMediaRequest.d.ts +2 -3
  82. package/dist/types/meeting/request.d.ts +2 -2
  83. package/dist/types/meeting/util.d.ts +2 -2
  84. package/dist/types/meeting-info/meeting-info-v2.d.ts +4 -4
  85. package/dist/types/meetings/index.d.ts +4 -1
  86. package/dist/types/members/index.d.ts +2 -1
  87. package/dist/types/members/util.d.ts +5 -1
  88. package/dist/types/metrics/constants.d.ts +3 -1
  89. package/dist/types/reachability/clusterReachability.d.ts +1 -10
  90. package/dist/types/reachability/index.d.ts +74 -35
  91. package/dist/types/reachability/reachability.types.d.ts +64 -0
  92. package/dist/types/reachability/request.d.ts +5 -1
  93. package/dist/types/recording-controller/enums.d.ts +5 -2
  94. package/dist/types/recording-controller/index.d.ts +1 -0
  95. package/dist/types/recording-controller/util.d.ts +2 -1
  96. package/dist/types/roap/request.d.ts +1 -13
  97. package/dist/webinar/index.js +382 -19
  98. package/dist/webinar/index.js.map +1 -1
  99. package/package.json +22 -22
  100. package/src/common/errors/join-webinar-error.ts +24 -0
  101. package/src/config.ts +2 -0
  102. package/src/constants.ts +49 -3
  103. package/src/controls-options-manager/enums.ts +1 -0
  104. package/src/controls-options-manager/index.ts +19 -2
  105. package/src/controls-options-manager/types.ts +2 -0
  106. package/src/controls-options-manager/util.ts +12 -0
  107. package/src/index.ts +2 -2
  108. package/src/locus-info/controlsUtils.ts +46 -2
  109. package/src/locus-info/fullState.ts +1 -0
  110. package/src/locus-info/index.ts +60 -0
  111. package/src/media/index.ts +15 -0
  112. package/src/meeting/in-meeting-actions.ts +58 -0
  113. package/src/meeting/index.ts +232 -25
  114. package/src/meeting/locusMediaRequest.ts +4 -8
  115. package/src/meeting/request.ts +4 -11
  116. package/src/meeting/util.ts +25 -4
  117. package/src/meeting-info/meeting-info-v2.ts +23 -11
  118. package/src/meetings/index.ts +54 -41
  119. package/src/members/index.ts +4 -2
  120. package/src/members/util.ts +4 -1
  121. package/src/metrics/constants.ts +3 -1
  122. package/src/multistream/remoteMedia.ts +28 -15
  123. package/src/reachability/clusterReachability.ts +5 -15
  124. package/src/reachability/index.ts +285 -77
  125. package/src/reachability/reachability.types.ts +85 -0
  126. package/src/reachability/request.ts +55 -30
  127. package/src/recording-controller/enums.ts +5 -2
  128. package/src/recording-controller/index.ts +17 -4
  129. package/src/recording-controller/util.ts +20 -5
  130. package/src/roap/index.ts +4 -5
  131. package/src/roap/request.ts +30 -44
  132. package/src/roap/turnDiscovery.ts +2 -4
  133. package/src/webinar/index.ts +223 -17
  134. package/test/unit/spec/controls-options-manager/index.js +56 -32
  135. package/test/unit/spec/controls-options-manager/util.js +44 -0
  136. package/test/unit/spec/locus-info/controlsUtils.js +80 -4
  137. package/test/unit/spec/locus-info/index.js +59 -2
  138. package/test/unit/spec/meeting/in-meeting-actions.ts +31 -1
  139. package/test/unit/spec/meeting/index.js +369 -103
  140. package/test/unit/spec/meeting/locusMediaRequest.ts +18 -11
  141. package/test/unit/spec/meeting/request.js +3 -26
  142. package/test/unit/spec/meeting/utils.js +55 -13
  143. package/test/unit/spec/meeting-info/meetinginfov2.js +9 -4
  144. package/test/unit/spec/meetings/index.js +25 -6
  145. package/test/unit/spec/members/index.js +25 -2
  146. package/test/unit/spec/members/request.js +37 -3
  147. package/test/unit/spec/members/utils.js +110 -1
  148. package/test/unit/spec/multistream/remoteMedia.ts +11 -7
  149. package/test/unit/spec/reachability/clusterReachability.ts +7 -0
  150. package/test/unit/spec/reachability/index.ts +265 -1
  151. package/test/unit/spec/reachability/request.js +56 -15
  152. package/test/unit/spec/recording-controller/index.js +61 -5
  153. package/test/unit/spec/recording-controller/util.js +39 -3
  154. package/test/unit/spec/roap/index.ts +1 -1
  155. package/test/unit/spec/roap/request.ts +51 -109
  156. package/test/unit/spec/roap/turnDiscovery.ts +202 -147
  157. package/test/unit/spec/webinar/index.ts +443 -14
  158. package/dist/common/errors/webinar-registration-error.js.map +0 -1
  159. package/src/common/errors/webinar-registration-error.ts +0 -27
@@ -39,6 +39,7 @@ var _lodash = require("lodash");
39
39
  var _jwtDecode = _interopRequireDefault(require("jwt-decode"));
40
40
  var _webexCore = require("@webex/webex-core");
41
41
  var _common = require("@webex/common");
42
+ var _commonTimers = require("@webex/common-timers");
42
43
  var _internalPluginMetrics = require("@webex/internal-plugin-metrics");
43
44
  var _internalMediaCore = require("@webex/internal-media-core");
44
45
  var _mediaHelpers = require("@webex/media-helpers");
@@ -86,7 +87,7 @@ var _controlsOptionsManager = _interopRequireDefault(require("../controls-option
86
87
  var _permission = _interopRequireDefault(require("../common/errors/permission"));
87
88
  var _locusMediaRequest = require("./locusMediaRequest");
88
89
  var _connectionStateHandler = require("./connectionStateHandler");
89
- var _webinarRegistrationError = _interopRequireDefault(require("../common/errors/webinar-registration-error"));
90
+ var _joinWebinarError = _interopRequireDefault(require("../common/errors/join-webinar-error"));
90
91
  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; } } }; }
91
92
  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); }
92
93
  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; }
@@ -552,6 +553,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
552
553
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "iceCandidateErrors", void 0);
553
554
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "iceCandidatesCount", void 0);
554
555
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "rtcMetrics", void 0);
556
+ (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "uploadLogsTimer", void 0);
557
+ (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "logUploadIntervalIndex", void 0);
555
558
  /**
556
559
  * Callback called when a relay event is received from meeting LLM Connection
557
560
  * @param {RelayEvent} e Event object coming from LLM Connection
@@ -1004,7 +1007,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1004
1007
  });
1005
1008
  _this.iceCandidatesCount = 0;
1006
1009
  _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.MediaConnectionEventNames.ICE_CANDIDATE, function (event) {
1007
- if (event.candidate) {
1010
+ if (event.candidate && event.candidate.candidate && event.candidate.candidate.length > 0) {
1008
1011
  _this.iceCandidatesCount += 1;
1009
1012
  }
1010
1013
  });
@@ -1434,6 +1437,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1434
1437
  _loggerProxy.default.logger.log("Meetings:index#constructor --> Initializing the meeting object with generated correlation id from sdk ".concat(_this.id));
1435
1438
  _this.callStateForMetrics.correlationId = _this.id;
1436
1439
  }
1440
+ _this.logUploadIntervalIndex = 0;
1441
+
1437
1442
  /**
1438
1443
  * @instance
1439
1444
  * @type {String}
@@ -2422,19 +2427,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2422
2427
  }
2423
2428
  throw new _permission.default();
2424
2429
  case 21:
2425
- if (!(_context5.t0 instanceof _meetingInfoV.MeetingInfoV2WebinarRegistrationError)) {
2426
- _context5.next = 28;
2430
+ if (!(_context5.t0 instanceof _meetingInfoV.MeetingInfoV2JoinWebinarError)) {
2431
+ _context5.next = 29;
2427
2432
  break;
2428
2433
  }
2429
2434
  this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.WEBINAR_REGISTRATION;
2435
+ if (_constants.WEBINAR_ERROR_WEBCAST.includes(_context5.t0.wbxAppApiCode)) {
2436
+ this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.NEED_JOIN_WITH_WEBCAST;
2437
+ } else if (_constants.WEBINAR_ERROR_REGISTRATIONID.includes(_context5.t0.wbxAppApiCode)) {
2438
+ this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.WEBINAR_NEED_REGISTRATIONID;
2439
+ }
2430
2440
  this.meetingInfoFailureCode = _context5.t0.wbxAppApiCode;
2431
2441
  if (_context5.t0.meetingInfo) {
2432
2442
  this.meetingInfo = _context5.t0.meetingInfo;
2433
2443
  }
2434
- throw new _webinarRegistrationError.default();
2435
- case 28:
2444
+ throw new _joinWebinarError.default();
2445
+ case 29:
2436
2446
  if (!(_context5.t0 instanceof _meetingInfoV.MeetingInfoV2PasswordError)) {
2437
- _context5.next = 40;
2447
+ _context5.next = 41;
2438
2448
  break;
2439
2449
  }
2440
2450
  _loggerProxy.default.logger.info( // @ts-ignore
@@ -2449,16 +2459,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2449
2459
  this.passwordStatus = _constants.PASSWORD_STATUS.REQUIRED;
2450
2460
  this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.WRONG_PASSWORD;
2451
2461
  if (!this.requiredCaptcha) {
2452
- _context5.next = 37;
2462
+ _context5.next = 38;
2453
2463
  break;
2454
2464
  }
2455
- _context5.next = 37;
2465
+ _context5.next = 38;
2456
2466
  return this.refreshCaptcha();
2457
- case 37:
2467
+ case 38:
2458
2468
  throw new _passwordError.default();
2459
- case 40:
2469
+ case 41:
2460
2470
  if (!(_context5.t0 instanceof _meetingInfoV.MeetingInfoV2CaptchaError)) {
2461
- _context5.next = 49;
2471
+ _context5.next = 50;
2462
2472
  break;
2463
2473
  }
2464
2474
  _loggerProxy.default.logger.info( // @ts-ignore
@@ -2470,10 +2480,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2470
2480
  }
2471
2481
  this.requiredCaptcha = _context5.t0.captchaInfo;
2472
2482
  throw new _captchaError.default();
2473
- case 49:
2483
+ case 50:
2474
2484
  this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.OTHER;
2475
2485
  throw _context5.t0;
2476
- case 51:
2486
+ case 52:
2477
2487
  case "end":
2478
2488
  return _context5.stop();
2479
2489
  }
@@ -2702,6 +2712,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2702
2712
  this.setUpLocusInfoSelfListener();
2703
2713
  this.setUpLocusInfoMeetingListener();
2704
2714
  this.setUpLocusServicesListener();
2715
+ this.setUpLocusResourcesListener();
2705
2716
  // members update listeners
2706
2717
  this.setUpLocusFullStateListener();
2707
2718
  this.setUpLocusUrlListener();
@@ -3218,8 +3229,45 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3218
3229
  state: state
3219
3230
  });
3220
3231
  });
3221
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED, function (_ref22) {
3232
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_WEBCAST_CHANGED, function (_ref22) {
3222
3233
  var state = _ref22.state;
3234
+ _triggerProxy.default.trigger(_this13, {
3235
+ file: 'meeting/index',
3236
+ function: 'setupLocusControlsListener'
3237
+ }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_WEBCAST_UPDATED, {
3238
+ state: state
3239
+ });
3240
+ });
3241
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_FULL_CHANGED, function (_ref23) {
3242
+ var state = _ref23.state;
3243
+ _triggerProxy.default.trigger(_this13, {
3244
+ file: 'meeting/index',
3245
+ function: 'setupLocusControlsListener'
3246
+ }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_MEETING_FULL_UPDATED, {
3247
+ state: state
3248
+ });
3249
+ });
3250
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_PRACTICE_SESSION_STATUS_UPDATED, function (_ref24) {
3251
+ var state = _ref24.state;
3252
+ _this13.webinar.updatePracticeSessionStatus(state);
3253
+ _triggerProxy.default.trigger(_this13, {
3254
+ file: 'meeting/index',
3255
+ function: 'setupLocusControlsListener'
3256
+ }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_PRACTICE_SESSION_STATUS_UPDATED, {
3257
+ state: state
3258
+ });
3259
+ });
3260
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_STAGE_VIEW_UPDATED, function (_ref25) {
3261
+ var state = _ref25.state;
3262
+ _triggerProxy.default.trigger(_this13, {
3263
+ file: 'meeting/index',
3264
+ function: 'setupLocusControlsListener'
3265
+ }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_STAGE_VIEW_UPDATED, {
3266
+ state: state
3267
+ });
3268
+ });
3269
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED, function (_ref26) {
3270
+ var state = _ref26.state;
3223
3271
  _triggerProxy.default.trigger(_this13, {
3224
3272
  file: 'meeting/index',
3225
3273
  function: 'setupLocusControlsListener'
@@ -3266,7 +3314,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3266
3314
  var _this14 = this;
3267
3315
  // Will get triggered on local and remote share
3268
3316
  this.locusInfo.on(_constants.EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES, /*#__PURE__*/function () {
3269
- var _ref23 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(payload) {
3317
+ var _ref27 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(payload) {
3270
3318
  var _payload$previous, _payload$previous2;
3271
3319
  var _payload$current, contentShare, whiteboardShare, previousContentShare, previousWhiteboardShare, newShareStatus, oldShareStatus, sendStartedSharingRemote, _this14$mediaProperti;
3272
3320
  return _regenerator.default.wrap(function _callee8$(_context8) {
@@ -3464,7 +3512,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3464
3512
  }, _callee8, null, [[27,, 31, 34]]);
3465
3513
  }));
3466
3514
  return function (_x8) {
3467
- return _ref23.apply(this, arguments);
3515
+ return _ref27.apply(this, arguments);
3468
3516
  };
3469
3517
  }());
3470
3518
  }
@@ -3514,14 +3562,29 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3514
3562
  value: function setUpLocusServicesListener() {
3515
3563
  var _this16 = this;
3516
3564
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.LINKS_SERVICES, function (payload) {
3517
- var _payload$services, _payload$services$rec, _this16$locusInfo, _this16$locusInfo$ful, _payload$services2, _payload$services2$br, _payload$services3, _payload$services3$ap, _payload$services4, _payload$services4$ap, _payload$services5, _payload$services5$we, _payload$services6, _payload$services6$we;
3565
+ var _payload$services, _payload$services$rec, _this16$locusInfo, _this16$locusInfo$ful, _payload$services2, _payload$services2$br, _payload$services3, _payload$services3$ap, _payload$services4, _payload$services4$ap;
3518
3566
  _this16.recordingController.setServiceUrl(payload === null || payload === void 0 ? void 0 : (_payload$services = payload.services) === null || _payload$services === void 0 ? void 0 : (_payload$services$rec = _payload$services.record) === null || _payload$services$rec === void 0 ? void 0 : _payload$services$rec.url);
3519
3567
  _this16.recordingController.setSessionId((_this16$locusInfo = _this16.locusInfo) === null || _this16$locusInfo === void 0 ? void 0 : (_this16$locusInfo$ful = _this16$locusInfo.fullState) === null || _this16$locusInfo$ful === void 0 ? void 0 : _this16$locusInfo$ful.sessionId);
3520
3568
  _this16.breakouts.breakoutServiceUrlUpdate(payload === null || payload === void 0 ? void 0 : (_payload$services2 = payload.services) === null || _payload$services2 === void 0 ? void 0 : (_payload$services2$br = _payload$services2.breakout) === null || _payload$services2$br === void 0 ? void 0 : _payload$services2$br.url);
3521
3569
  _this16.annotation.approvalUrlUpdate(payload === null || payload === void 0 ? void 0 : (_payload$services3 = payload.services) === null || _payload$services3 === void 0 ? void 0 : (_payload$services3$ap = _payload$services3.approval) === null || _payload$services3$ap === void 0 ? void 0 : _payload$services3$ap.url);
3522
3570
  _this16.simultaneousInterpretation.approvalUrlUpdate(payload === null || payload === void 0 ? void 0 : (_payload$services4 = payload.services) === null || _payload$services4 === void 0 ? void 0 : (_payload$services4$ap = _payload$services4.approval) === null || _payload$services4$ap === void 0 ? void 0 : _payload$services4$ap.url);
3523
- _this16.webinar.webcastUrlUpdate(payload === null || payload === void 0 ? void 0 : (_payload$services5 = payload.services) === null || _payload$services5 === void 0 ? void 0 : (_payload$services5$we = _payload$services5.webcast) === null || _payload$services5$we === void 0 ? void 0 : _payload$services5$we.url);
3524
- _this16.webinar.webinarAttendeesSearchingUrlUpdate(payload === null || payload === void 0 ? void 0 : (_payload$services6 = payload.services) === null || _payload$services6 === void 0 ? void 0 : (_payload$services6$we = _payload$services6.webinarAttendeesSearching) === null || _payload$services6$we === void 0 ? void 0 : _payload$services6$we.url);
3571
+ });
3572
+ }
3573
+
3574
+ /**
3575
+ * Set up the locus info resources link listener
3576
+ * update the locusInfo for webcast instance url
3577
+ * @param {Object} payload - The event payload
3578
+ * @returns {undefined}
3579
+ * @private
3580
+ * @memberof Meeting
3581
+ */
3582
+ }, {
3583
+ key: "setUpLocusResourcesListener",
3584
+ value: function setUpLocusResourcesListener() {
3585
+ var _this17 = this;
3586
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.LINKS_RESOURCES, function (payload) {
3587
+ _this17.webinar.updateWebcastUrl(payload);
3525
3588
  });
3526
3589
  }
3527
3590
 
@@ -3534,10 +3597,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3534
3597
  }, {
3535
3598
  key: "setUpLocusInfoMeetingInfoListener",
3536
3599
  value: function setUpLocusInfoMeetingInfoListener() {
3537
- var _this17 = this;
3600
+ var _this18 = this;
3538
3601
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEETING_LOCKED, function (payload) {
3539
3602
  if (payload) {
3540
- _triggerProxy.default.trigger(_this17, {
3603
+ _triggerProxy.default.trigger(_this18, {
3541
3604
  file: 'meeting/index',
3542
3605
  function: 'setUpLocusInfoMeetingInfoListener'
3543
3606
  }, _constants.EVENT_TRIGGERS.MEETING_LOCKED, {
@@ -3547,7 +3610,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3547
3610
  });
3548
3611
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEETING_UNLOCKED, function (payload) {
3549
3612
  if (payload) {
3550
- _triggerProxy.default.trigger(_this17, {
3613
+ _triggerProxy.default.trigger(_this18, {
3551
3614
  file: 'meeting/index',
3552
3615
  function: 'setUpLocusInfoMeetingInfoListener'
3553
3616
  }, _constants.EVENT_TRIGGERS.MEETING_UNLOCKED, {
@@ -3555,16 +3618,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3555
3618
  });
3556
3619
  }
3557
3620
  });
3558
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEETING_INFO_UPDATED, function (_ref24) {
3559
- var isInitializing = _ref24.isInitializing;
3560
- _this17.updateMeetingActions();
3561
- _this17.recordingController.setDisplayHints(_this17.userDisplayHints);
3562
- _this17.recordingController.setUserPolicy(_this17.selfUserPolicies);
3563
- _this17.controlsOptionsManager.setDisplayHints(_this17.userDisplayHints);
3564
- _this17.handleDataChannelUrlChange(_this17.datachannelUrl);
3621
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEETING_INFO_UPDATED, function (_ref28) {
3622
+ var isInitializing = _ref28.isInitializing;
3623
+ _this18.updateMeetingActions();
3624
+ _this18.recordingController.setDisplayHints(_this18.userDisplayHints);
3625
+ _this18.recordingController.setUserPolicy(_this18.selfUserPolicies);
3626
+ _this18.controlsOptionsManager.setDisplayHints(_this18.userDisplayHints);
3627
+ _this18.handleDataChannelUrlChange(_this18.datachannelUrl);
3565
3628
  if (!isInitializing) {
3566
3629
  // send updated trigger only if locus is not initializing the meeting
3567
- _triggerProxy.default.trigger(_this17, {
3630
+ _triggerProxy.default.trigger(_this18, {
3568
3631
  file: 'meetings',
3569
3632
  function: 'setUpLocusInfoMeetingInfoListener'
3570
3633
  }, _constants.EVENT_TRIGGERS.MEETING_INFO_UPDATED);
@@ -3595,10 +3658,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3595
3658
  }, {
3596
3659
  key: "setUpLocusEmbeddedAppsListener",
3597
3660
  value: function setUpLocusEmbeddedAppsListener() {
3598
- var _this18 = this;
3661
+ var _this19 = this;
3599
3662
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.EMBEDDED_APPS_UPDATED, function (embeddedApps) {
3600
3663
  if (embeddedApps) {
3601
- _triggerProxy.default.trigger(_this18, {
3664
+ _triggerProxy.default.trigger(_this19, {
3602
3665
  file: 'meeting/index',
3603
3666
  function: 'setUpLocusEmbeddedAppsListener'
3604
3667
  }, _constants.EVENT_TRIGGERS.MEETING_EMBEDDED_APPS_UPDATE, embeddedApps);
@@ -3615,11 +3678,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3615
3678
  }, {
3616
3679
  key: "setUpLocusInfoSelfListener",
3617
3680
  value: function setUpLocusInfoSelfListener() {
3618
- var _this19 = this;
3681
+ var _this20 = this;
3619
3682
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUIRED, function (payload) {
3620
- if (_this19.audio) {
3621
- _this19.audio.handleServerLocalUnmuteRequired(_this19, payload.unmuteAllowed);
3622
- _triggerProxy.default.trigger(_this19, {
3683
+ if (_this20.audio) {
3684
+ _this20.audio.handleServerLocalUnmuteRequired(_this20, payload.unmuteAllowed);
3685
+ _triggerProxy.default.trigger(_this20, {
3623
3686
  file: 'meeting/index',
3624
3687
  function: 'setUpLocusInfoSelfListener'
3625
3688
  }, _constants.EVENT_TRIGGERS.MEETING_SELF_UNMUTED_BY_OTHERS, {
@@ -3629,13 +3692,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3629
3692
  });
3630
3693
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED, function (payload) {
3631
3694
  if (payload) {
3632
- if (_this19.video) {
3695
+ if (_this20.video) {
3633
3696
  var _payload$muted, _payload$unmuteAllowe;
3634
- payload.muted = (_payload$muted = payload.muted) !== null && _payload$muted !== void 0 ? _payload$muted : _this19.video.isRemotelyMuted();
3635
- payload.unmuteAllowed = (_payload$unmuteAllowe = payload.unmuteAllowed) !== null && _payload$unmuteAllowe !== void 0 ? _payload$unmuteAllowe : _this19.video.isUnmuteAllowed();
3636
- _this19.video.handleServerRemoteMuteUpdate(_this19, payload.muted, payload.unmuteAllowed);
3697
+ payload.muted = (_payload$muted = payload.muted) !== null && _payload$muted !== void 0 ? _payload$muted : _this20.video.isRemotelyMuted();
3698
+ payload.unmuteAllowed = (_payload$unmuteAllowe = payload.unmuteAllowed) !== null && _payload$unmuteAllowe !== void 0 ? _payload$unmuteAllowe : _this20.video.isUnmuteAllowed();
3699
+ _this20.video.handleServerRemoteMuteUpdate(_this20, payload.muted, payload.unmuteAllowed);
3637
3700
  }
3638
- _triggerProxy.default.trigger(_this19, {
3701
+ _triggerProxy.default.trigger(_this20, {
3639
3702
  file: 'meeting/index',
3640
3703
  function: 'setUpLocusInfoSelfListener'
3641
3704
  }, payload.muted ? _constants.EVENT_TRIGGERS.MEETING_SELF_VIDEO_MUTED_BY_OTHERS : _constants.EVENT_TRIGGERS.MEETING_SELF_VIDEO_UNMUTED_BY_OTHERS, {
@@ -3645,15 +3708,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3645
3708
  });
3646
3709
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_REMOTE_MUTE_STATUS_UPDATED, function (payload) {
3647
3710
  if (payload) {
3648
- var _this19$audio;
3649
- if (_this19.audio) {
3650
- _this19.audio.handleServerRemoteMuteUpdate(_this19, payload.muted, payload.unmuteAllowed);
3711
+ var _this20$audio;
3712
+ if (_this20.audio) {
3713
+ _this20.audio.handleServerRemoteMuteUpdate(_this20, payload.muted, payload.unmuteAllowed);
3651
3714
  }
3652
3715
  // with "mute on entry" server will send us remote mute even if we don't have media configured,
3653
3716
  // so if being muted by others, always send the notification,
3654
3717
  // but if being unmuted, only send it if we are also locally unmuted
3655
- if (payload.muted || !((_this19$audio = _this19.audio) !== null && _this19$audio !== void 0 && _this19$audio.isMuted())) {
3656
- _triggerProxy.default.trigger(_this19, {
3718
+ if (payload.muted || !((_this20$audio = _this20.audio) !== null && _this20$audio !== void 0 && _this20$audio.isMuted())) {
3719
+ _triggerProxy.default.trigger(_this20, {
3657
3720
  file: 'meeting/index',
3658
3721
  function: 'setUpLocusInfoSelfListener'
3659
3722
  }, payload.muted ? _constants.EVENT_TRIGGERS.MEETING_SELF_MUTED_BY_OTHERS : _constants.EVENT_TRIGGERS.MEETING_SELF_UNMUTED_BY_OTHERS, {
@@ -3663,7 +3726,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3663
3726
  }
3664
3727
  });
3665
3728
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUESTED, function (payload) {
3666
- _triggerProxy.default.trigger(_this19, {
3729
+ _triggerProxy.default.trigger(_this20, {
3667
3730
  file: 'meeting/index',
3668
3731
  function: 'setUpLocusInfoSelfListener'
3669
3732
  }, _constants.EVENT_TRIGGERS.MEETING_SELF_REQUESTED_TO_UNMUTE, {
@@ -3672,8 +3735,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3672
3735
  });
3673
3736
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_UNADMITTED_GUEST, function (payload) {
3674
3737
  if (payload) {
3675
- _this19.startKeepAlive();
3676
- _triggerProxy.default.trigger(_this19, {
3738
+ _this20.startKeepAlive();
3739
+ _triggerProxy.default.trigger(_this20, {
3677
3740
  file: 'meeting/index',
3678
3741
  function: 'setUpLocusInfoSelfListener'
3679
3742
  }, _constants.EVENT_TRIGGERS.MEETING_SELF_LOBBY_WAITING, {
@@ -3681,24 +3744,27 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3681
3744
  });
3682
3745
 
3683
3746
  // @ts-ignore
3684
- _this19.webex.internal.newMetrics.submitClientEvent({
3747
+ _this20.webex.internal.newMetrics.submitClientEvent({
3685
3748
  name: 'client.lobby.entered',
3686
3749
  options: {
3687
- meetingId: _this19.id
3750
+ meetingId: _this20.id
3688
3751
  }
3689
3752
  });
3690
3753
  }
3691
- _this19.updateLLMConnection();
3754
+ _metrics.default.sendBehavioralMetric(_constants2.default.GUEST_ENTERED_LOBBY, {
3755
+ correlation_id: _this20.correlationId
3756
+ });
3757
+ _this20.updateLLMConnection();
3692
3758
  });
3693
3759
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST, /*#__PURE__*/function () {
3694
- var _ref25 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(payload) {
3695
- var _this19$rtcMetrics;
3760
+ var _ref29 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(payload) {
3761
+ var _this20$rtcMetrics;
3696
3762
  return _regenerator.default.wrap(function _callee9$(_context9) {
3697
3763
  while (1) switch (_context9.prev = _context9.next) {
3698
3764
  case 0:
3699
- _this19.stopKeepAlive();
3765
+ _this20.stopKeepAlive();
3700
3766
  if (payload) {
3701
- _triggerProxy.default.trigger(_this19, {
3767
+ _triggerProxy.default.trigger(_this20, {
3702
3768
  file: 'meeting/index',
3703
3769
  function: 'setUpLocusInfoSelfListener'
3704
3770
  }, _constants.EVENT_TRIGGERS.MEETING_SELF_GUEST_ADMITTED, {
@@ -3706,15 +3772,18 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3706
3772
  });
3707
3773
 
3708
3774
  // @ts-ignore
3709
- _this19.webex.internal.newMetrics.submitClientEvent({
3775
+ _this20.webex.internal.newMetrics.submitClientEvent({
3710
3776
  name: 'client.lobby.exited',
3711
3777
  options: {
3712
- meetingId: _this19.id
3778
+ meetingId: _this20.id
3713
3779
  }
3714
3780
  });
3781
+ _metrics.default.sendBehavioralMetric(_constants2.default.GUEST_EXITED_LOBBY, {
3782
+ correlation_id: _this20.correlationId
3783
+ });
3715
3784
  }
3716
- (_this19$rtcMetrics = _this19.rtcMetrics) === null || _this19$rtcMetrics === void 0 ? void 0 : _this19$rtcMetrics.sendNextMetrics();
3717
- _this19.updateLLMConnection();
3785
+ (_this20$rtcMetrics = _this20.rtcMetrics) === null || _this20$rtcMetrics === void 0 ? void 0 : _this20$rtcMetrics.sendNextMetrics();
3786
+ _this20.updateLLMConnection();
3718
3787
  case 4:
3719
3788
  case "end":
3720
3789
  return _context9.stop();
@@ -3722,42 +3791,42 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3722
3791
  }, _callee9);
3723
3792
  }));
3724
3793
  return function (_x9) {
3725
- return _ref25.apply(this, arguments);
3794
+ return _ref29.apply(this, arguments);
3726
3795
  };
3727
3796
  }());
3728
3797
 
3729
3798
  // @ts-ignore - check if MEDIA_INACTIVITY exists
3730
3799
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEDIA_INACTIVITY, function () {
3731
3800
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_MEDIA_INACTIVE, {
3732
- correlation_id: _this19.correlationId,
3733
- locus_id: _this19.locusId
3801
+ correlation_id: _this20.correlationId,
3802
+ locus_id: _this20.locusId
3734
3803
  });
3735
3804
  _loggerProxy.default.logger.info('Meeting:index#setUpLocusInfoSelfListener --> MEDIA_INACTIVITY received, reconnecting...');
3736
- _this19.reconnect();
3805
+ _this20.reconnect();
3737
3806
  });
3738
3807
 
3739
3808
  // There is two stats for mute one is the actual media being sent or received
3740
3809
  // The second on is if the audio is muted, we need to tell the statsAnalyzer when
3741
3810
  // the audio is muted or the user is not willing to send media
3742
3811
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEDIA_STATUS_CHANGE, function (status) {
3743
- if (_this19.statsAnalyzer) {
3744
- var _this19$mediaProperti, _this19$audio2, _this19$mediaProperti2, _this19$video, _this19$mediaProperti3, _this19$mediaProperti4, _this19$mediaProperti5, _this19$mediaProperti6;
3745
- _this19.statsAnalyzer.updateMediaStatus({
3812
+ if (_this20.statsAnalyzer) {
3813
+ var _this20$mediaProperti, _this20$audio2, _this20$mediaProperti2, _this20$video, _this20$mediaProperti3, _this20$mediaProperti4, _this20$mediaProperti5, _this20$mediaProperti6;
3814
+ _this20.statsAnalyzer.updateMediaStatus({
3746
3815
  actual: status,
3747
3816
  expected: {
3748
3817
  // We need to check what should be the actual direction of media
3749
- sendAudio: ((_this19$mediaProperti = _this19.mediaProperties.mediaDirection) === null || _this19$mediaProperti === void 0 ? void 0 : _this19$mediaProperti.sendAudio) && !((_this19$audio2 = _this19.audio) !== null && _this19$audio2 !== void 0 && _this19$audio2.isMuted()),
3750
- sendVideo: ((_this19$mediaProperti2 = _this19.mediaProperties.mediaDirection) === null || _this19$mediaProperti2 === void 0 ? void 0 : _this19$mediaProperti2.sendVideo) && !((_this19$video = _this19.video) !== null && _this19$video !== void 0 && _this19$video.isMuted()),
3751
- sendShare: (_this19$mediaProperti3 = _this19.mediaProperties.mediaDirection) === null || _this19$mediaProperti3 === void 0 ? void 0 : _this19$mediaProperti3.sendShare,
3752
- receiveAudio: (_this19$mediaProperti4 = _this19.mediaProperties.mediaDirection) === null || _this19$mediaProperti4 === void 0 ? void 0 : _this19$mediaProperti4.receiveAudio,
3753
- receiveVideo: (_this19$mediaProperti5 = _this19.mediaProperties.mediaDirection) === null || _this19$mediaProperti5 === void 0 ? void 0 : _this19$mediaProperti5.receiveVideo,
3754
- receiveShare: (_this19$mediaProperti6 = _this19.mediaProperties.mediaDirection) === null || _this19$mediaProperti6 === void 0 ? void 0 : _this19$mediaProperti6.receiveShare
3818
+ sendAudio: ((_this20$mediaProperti = _this20.mediaProperties.mediaDirection) === null || _this20$mediaProperti === void 0 ? void 0 : _this20$mediaProperti.sendAudio) && !((_this20$audio2 = _this20.audio) !== null && _this20$audio2 !== void 0 && _this20$audio2.isMuted()),
3819
+ sendVideo: ((_this20$mediaProperti2 = _this20.mediaProperties.mediaDirection) === null || _this20$mediaProperti2 === void 0 ? void 0 : _this20$mediaProperti2.sendVideo) && !((_this20$video = _this20.video) !== null && _this20$video !== void 0 && _this20$video.isMuted()),
3820
+ sendShare: (_this20$mediaProperti3 = _this20.mediaProperties.mediaDirection) === null || _this20$mediaProperti3 === void 0 ? void 0 : _this20$mediaProperti3.sendShare,
3821
+ receiveAudio: (_this20$mediaProperti4 = _this20.mediaProperties.mediaDirection) === null || _this20$mediaProperti4 === void 0 ? void 0 : _this20$mediaProperti4.receiveAudio,
3822
+ receiveVideo: (_this20$mediaProperti5 = _this20.mediaProperties.mediaDirection) === null || _this20$mediaProperti5 === void 0 ? void 0 : _this20$mediaProperti5.receiveVideo,
3823
+ receiveShare: (_this20$mediaProperti6 = _this20.mediaProperties.mediaDirection) === null || _this20$mediaProperti6 === void 0 ? void 0 : _this20$mediaProperti6.receiveShare
3755
3824
  }
3756
3825
  });
3757
3826
  }
3758
3827
  });
3759
3828
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE, function (payload) {
3760
- _triggerProxy.default.trigger(_this19, {
3829
+ _triggerProxy.default.trigger(_this20, {
3761
3830
  file: 'meeting/index',
3762
3831
  function: 'setUpLocusInfoSelfListener'
3763
3832
  }, _constants.EVENT_TRIGGERS.MEETING_SELF_CANNOT_VIEW_PARTICIPANT_LIST, {
@@ -3765,29 +3834,29 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3765
3834
  });
3766
3835
  });
3767
3836
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_MEETING_BREAKOUTS_CHANGED, function (payload) {
3768
- _this19.breakouts.updateBreakoutSessions(payload);
3769
- _triggerProxy.default.trigger(_this19, {
3837
+ _this20.breakouts.updateBreakoutSessions(payload);
3838
+ _triggerProxy.default.trigger(_this20, {
3770
3839
  file: 'meeting/index',
3771
3840
  function: 'setUpLocusInfoSelfListener'
3772
3841
  }, _constants.EVENT_TRIGGERS.MEETING_BREAKOUTS_UPDATE);
3773
3842
  });
3774
3843
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_MEETING_INTERPRETATION_CHANGED, function (payload) {
3775
- var targetChanged = _this19.simultaneousInterpretation.updateSelfInterpretation(payload);
3776
- _triggerProxy.default.trigger(_this19, {
3844
+ var targetChanged = _this20.simultaneousInterpretation.updateSelfInterpretation(payload);
3845
+ _triggerProxy.default.trigger(_this20, {
3777
3846
  file: 'meeting/index',
3778
3847
  function: 'setUpLocusInfoSelfListener'
3779
3848
  }, _constants.EVENT_TRIGGERS.MEETING_INTERPRETATION_UPDATE);
3780
- if (targetChanged && _this19.mediaProperties.audioStream) {
3781
- _this19.setSendNamedMediaGroup(_internalMediaCore.MediaType.AudioMain);
3849
+ if (targetChanged && _this20.mediaProperties.audioStream) {
3850
+ _this20.setSendNamedMediaGroup(_internalMediaCore.MediaType.AudioMain);
3782
3851
  }
3783
3852
  });
3784
3853
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_ROLES_CHANGED, function (payload) {
3785
- var _payload$newRoles, _payload$newRoles2, _payload$newRoles3, _payload$newRoles4;
3854
+ var _payload$newRoles, _payload$newRoles2, _payload$newRoles3;
3786
3855
  var isModeratorOrCohost = ((_payload$newRoles = payload.newRoles) === null || _payload$newRoles === void 0 ? void 0 : _payload$newRoles.includes(_constants.SELF_ROLES.MODERATOR)) || ((_payload$newRoles2 = payload.newRoles) === null || _payload$newRoles2 === void 0 ? void 0 : _payload$newRoles2.includes(_constants.SELF_ROLES.COHOST));
3787
- _this19.breakouts.updateCanManageBreakouts(isModeratorOrCohost);
3788
- _this19.simultaneousInterpretation.updateCanManageInterpreters((_payload$newRoles3 = payload.newRoles) === null || _payload$newRoles3 === void 0 ? void 0 : _payload$newRoles3.includes(_constants.SELF_ROLES.MODERATOR));
3789
- _this19.webinar.updateCanManageWebcast((_payload$newRoles4 = payload.newRoles) === null || _payload$newRoles4 === void 0 ? void 0 : _payload$newRoles4.includes(_constants.SELF_ROLES.MODERATOR));
3790
- _triggerProxy.default.trigger(_this19, {
3856
+ _this20.breakouts.updateCanManageBreakouts(isModeratorOrCohost);
3857
+ _this20.simultaneousInterpretation.updateCanManageInterpreters((_payload$newRoles3 = payload.newRoles) === null || _payload$newRoles3 === void 0 ? void 0 : _payload$newRoles3.includes(_constants.SELF_ROLES.MODERATOR));
3858
+ _this20.webinar.updateRoleChanged(payload);
3859
+ _triggerProxy.default.trigger(_this20, {
3791
3860
  file: 'meeting/index',
3792
3861
  function: 'setUpLocusInfoSelfListener'
3793
3862
  }, _constants.EVENT_TRIGGERS.MEETING_SELF_ROLES_CHANGED, {
@@ -3795,7 +3864,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3795
3864
  });
3796
3865
  });
3797
3866
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_IS_SHARING_BLOCKED_CHANGE, function (payload) {
3798
- _triggerProxy.default.trigger(_this19, {
3867
+ _triggerProxy.default.trigger(_this20, {
3799
3868
  file: 'meeting/index',
3800
3869
  function: 'setUpLocusInfoSelfListener'
3801
3870
  }, _constants.EVENT_TRIGGERS.MEETING_SELF_IS_SHARING_BLOCKED, {
@@ -3813,42 +3882,42 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3813
3882
  }, {
3814
3883
  key: "setUpLocusInfoMeetingListener",
3815
3884
  value: function setUpLocusInfoMeetingListener() {
3816
- var _this20 = this;
3885
+ var _this21 = this;
3817
3886
  this.locusInfo.on(_constants.EVENTS.REMOTE_RESPONSE, function (payload) {
3818
- _this20.meetingFiniteStateMachine.remote(payload);
3887
+ _this21.meetingFiniteStateMachine.remote(payload);
3819
3888
  if (payload.remoteDeclined) {
3820
- _this20.leave({
3889
+ _this21.leave({
3821
3890
  reason: payload.reason
3822
3891
  }).then(function () {
3823
3892
  _loggerProxy.default.logger.info('Meeting:index#setUpLocusInfoMeetingListener --> REMOTE_RESPONSE. Attempting to leave meeting.');
3824
3893
  }).catch(function (error) {
3825
3894
  // @ts-ignore
3826
- _loggerProxy.default.logger.error("Meeting:index#setUpLocusInfoMeetingListener --> REMOTE_RESPONSE. Issue with leave for meeting, meeting still in collection: ".concat(_this20, ", error: ").concat(error));
3895
+ _loggerProxy.default.logger.error("Meeting:index#setUpLocusInfoMeetingListener --> REMOTE_RESPONSE. Issue with leave for meeting, meeting still in collection: ".concat(_this21, ", error: ").concat(error));
3827
3896
  });
3828
3897
  }
3829
3898
  });
3830
3899
  this.locusInfo.on(_constants.EVENTS.DESTROY_MEETING, /*#__PURE__*/function () {
3831
- var _ref26 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(payload) {
3900
+ var _ref30 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(payload) {
3832
3901
  return _regenerator.default.wrap(function _callee10$(_context10) {
3833
3902
  while (1) switch (_context10.prev = _context10.next) {
3834
3903
  case 0:
3835
- if (!_this20.wirelessShare) {
3904
+ if (!_this21.wirelessShare) {
3836
3905
  _context10.next = 7;
3837
3906
  break;
3838
3907
  }
3839
- if (!_this20.mediaProperties.shareVideoStream) {
3908
+ if (!_this21.mediaProperties.shareVideoStream) {
3840
3909
  _context10.next = 4;
3841
3910
  break;
3842
3911
  }
3843
3912
  _context10.next = 4;
3844
- return _this20.setLocalShareVideoStream(undefined);
3913
+ return _this21.setLocalShareVideoStream(undefined);
3845
3914
  case 4:
3846
- if (!_this20.mediaProperties.shareAudioStream) {
3915
+ if (!_this21.mediaProperties.shareAudioStream) {
3847
3916
  _context10.next = 7;
3848
3917
  break;
3849
3918
  }
3850
3919
  _context10.next = 7;
3851
- return _this20.setLocalShareAudioStream(undefined);
3920
+ return _this21.setLocalShareAudioStream(undefined);
3852
3921
  case 7:
3853
3922
  if (!payload.shouldLeave) {
3854
3923
  _context10.next = 19;
@@ -3856,7 +3925,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3856
3925
  }
3857
3926
  _context10.prev = 8;
3858
3927
  _context10.next = 11;
3859
- return _this20.leave({
3928
+ return _this21.leave({
3860
3929
  reason: payload.reason
3861
3930
  });
3862
3931
  case 11:
@@ -3867,19 +3936,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3867
3936
  _context10.prev = 14;
3868
3937
  _context10.t0 = _context10["catch"](8);
3869
3938
  // @ts-ignore
3870
- _loggerProxy.default.logger.error("Meeting:index#setUpLocusInfoMeetingListener --> DESTROY_MEETING. Issue with leave for meeting, meeting still in collection: ".concat(_this20, ", error: ").concat(_context10.t0));
3939
+ _loggerProxy.default.logger.error("Meeting:index#setUpLocusInfoMeetingListener --> DESTROY_MEETING. Issue with leave for meeting, meeting still in collection: ".concat(_this21, ", error: ").concat(_context10.t0));
3871
3940
  case 17:
3872
3941
  _context10.next = 22;
3873
3942
  break;
3874
3943
  case 19:
3875
3944
  _loggerProxy.default.logger.info('Meeting:index#setUpLocusInfoMeetingListener --> MEETING_REMOVED_REASON', payload.reason);
3876
- _util2.default.cleanUp(_this20);
3877
- _triggerProxy.default.trigger(_this20, {
3945
+ _util2.default.cleanUp(_this21);
3946
+ _triggerProxy.default.trigger(_this21, {
3878
3947
  file: 'meeting/index',
3879
3948
  function: 'setUpLocusInfoMeetingListener'
3880
3949
  }, _constants.EVENTS.DESTROY_MEETING, {
3881
3950
  reason: payload.reason,
3882
- meetingId: _this20.id
3951
+ meetingId: _this21.id
3883
3952
  });
3884
3953
  case 22:
3885
3954
  case "end":
@@ -3888,7 +3957,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3888
3957
  }, _callee10, null, [[8, 14]]);
3889
3958
  }));
3890
3959
  return function (_x10) {
3891
- return _ref26.apply(this, arguments);
3960
+ return _ref30.apply(this, arguments);
3892
3961
  };
3893
3962
  }());
3894
3963
  }
@@ -3904,13 +3973,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3904
3973
  }, {
3905
3974
  key: "updateMeetingObject",
3906
3975
  value: function updateMeetingObject(object) {
3907
- var _this21 = this;
3976
+ var _this22 = this;
3908
3977
  // Validate if these are valid meeting object property
3909
3978
  // TODO: add a check to make sure the value passed in the constructor
3910
3979
  // is not changed by any delta event
3911
3980
  if (object && (0, _keys.default)(object).length) {
3912
3981
  (0, _keys.default)(object).forEach(function (key) {
3913
- _this21[key] = object[key];
3982
+ _this22[key] = object[key];
3914
3983
  });
3915
3984
  }
3916
3985
  }
@@ -4163,6 +4232,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4163
4232
  canStopRecording: _util4.default.canUserStop(this.userDisplayHints, this.selfUserPolicies),
4164
4233
  canPauseRecording: _util4.default.canUserPause(this.userDisplayHints, this.selfUserPolicies),
4165
4234
  canResumeRecording: _util4.default.canUserResume(this.userDisplayHints, this.selfUserPolicies),
4235
+ isPremiseRecordingEnabled: _util4.default.isPremiseRecordingEnabled(this.userDisplayHints, this.selfUserPolicies),
4166
4236
  canRaiseHand: _util2.default.canUserRaiseHand(this.userDisplayHints),
4167
4237
  canLowerAllHands: _util2.default.canUserLowerAllHands(this.userDisplayHints),
4168
4238
  canLowerSomeoneElsesHand: _util2.default.canUserLowerSomeoneElsesHand(this.userDisplayHints),
@@ -4240,6 +4310,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4240
4310
  requiredHints: [_constants.DISPLAY_HINTS.DISABLE_VIEW_THE_PARTICIPANT_LIST],
4241
4311
  displayHints: this.userDisplayHints
4242
4312
  }),
4313
+ canEnableViewTheParticipantsListPanelist: _util5.default.hasHints({
4314
+ requiredHints: [_constants.DISPLAY_HINTS.ENABLE_VIEW_THE_PARTICIPANT_LIST_PANELIST],
4315
+ displayHints: this.userDisplayHints
4316
+ }),
4317
+ canDisableViewTheParticipantsListPanelist: _util5.default.hasHints({
4318
+ requiredHints: [_constants.DISPLAY_HINTS.DISABLE_VIEW_THE_PARTICIPANT_LIST_PANELIST],
4319
+ displayHints: this.userDisplayHints
4320
+ }),
4321
+ canEnableShowAttendeeCount: _util5.default.hasHints({
4322
+ requiredHints: [_constants.DISPLAY_HINTS.ENABLE_SHOW_ATTENDEE_COUNT],
4323
+ displayHints: this.userDisplayHints
4324
+ }),
4325
+ canDisableShowAttendeeCount: _util5.default.hasHints({
4326
+ requiredHints: [_constants.DISPLAY_HINTS.DISABLE_SHOW_ATTENDEE_COUNT],
4327
+ displayHints: this.userDisplayHints
4328
+ }),
4243
4329
  canEnableRaiseHand: _util5.default.hasHints({
4244
4330
  requiredHints: [_constants.DISPLAY_HINTS.ENABLE_RAISE_HAND],
4245
4331
  displayHints: this.userDisplayHints
@@ -4256,6 +4342,42 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4256
4342
  requiredHints: [_constants.DISPLAY_HINTS.DISABLE_VIDEO],
4257
4343
  displayHints: this.userDisplayHints
4258
4344
  }),
4345
+ canStartWebcast: _util5.default.hasHints({
4346
+ requiredHints: [_constants.DISPLAY_HINTS.WEBCAST_CONTROL_START],
4347
+ displayHints: this.userDisplayHints
4348
+ }),
4349
+ canStopWebcast: _util5.default.hasHints({
4350
+ requiredHints: [_constants.DISPLAY_HINTS.WEBCAST_CONTROL_STOP],
4351
+ displayHints: this.userDisplayHints
4352
+ }),
4353
+ canShowStageView: _util5.default.hasHints({
4354
+ requiredHints: [_constants.DISPLAY_HINTS.STAGE_VIEW_ACTIVE],
4355
+ displayHints: this.userDisplayHints
4356
+ }),
4357
+ canEnableStageView: _util5.default.hasHints({
4358
+ requiredHints: [_constants.DISPLAY_HINTS.ENABLE_STAGE_VIEW],
4359
+ displayHints: this.userDisplayHints
4360
+ }),
4361
+ canDisableStageView: _util5.default.hasHints({
4362
+ requiredHints: [_constants.DISPLAY_HINTS.DISABLE_STAGE_VIEW],
4363
+ displayHints: this.userDisplayHints
4364
+ }),
4365
+ isPracticeSessionOn: _util5.default.hasHints({
4366
+ requiredHints: [_constants.DISPLAY_HINTS.PRACTICE_SESSION_ON],
4367
+ displayHints: this.userDisplayHints
4368
+ }),
4369
+ isPracticeSessionOff: _util5.default.hasHints({
4370
+ requiredHints: [_constants.DISPLAY_HINTS.PRACTICE_SESSION_OFF],
4371
+ displayHints: this.userDisplayHints
4372
+ }),
4373
+ canStartPracticeSession: _util5.default.hasHints({
4374
+ requiredHints: [_constants.DISPLAY_HINTS.SHOW_PRACTICE_SESSION_START],
4375
+ displayHints: this.userDisplayHints
4376
+ }),
4377
+ canStopPracticeSession: _util5.default.hasHints({
4378
+ requiredHints: [_constants.DISPLAY_HINTS.SHOW_PRACTICE_SESSION_STOP],
4379
+ displayHints: this.userDisplayHints
4380
+ }),
4259
4381
  canShareFile: _util5.default.hasHints({
4260
4382
  requiredHints: [_constants.DISPLAY_HINTS.SHARE_FILE],
4261
4383
  displayHints: this.userDisplayHints
@@ -4400,6 +4522,65 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4400
4522
  _triggerProxy.default.trigger(this, options, _constants.EVENTS.REQUEST_UPLOAD_LOGS, this);
4401
4523
  }
4402
4524
 
4525
+ /**
4526
+ * sets the timer for periodic log upload
4527
+ * @returns {void}
4528
+ */
4529
+ }, {
4530
+ key: "setLogUploadTimer",
4531
+ value: function setLogUploadTimer() {
4532
+ var _this23 = this;
4533
+ // start with short timeouts and increase them later on so in case users have very long multi-hour meetings we don't get too fragmented logs
4534
+ var LOG_UPLOAD_INTERVALS = [0.1, 15, 30, 60]; // in minutes
4535
+
4536
+ var delay = 1000 * 60 *
4537
+ // @ts-ignore - config coming from registerPlugin
4538
+ this.config.logUploadIntervalMultiplicationFactor * LOG_UPLOAD_INTERVALS[this.logUploadIntervalIndex];
4539
+ if (this.logUploadIntervalIndex < LOG_UPLOAD_INTERVALS.length - 1) {
4540
+ this.logUploadIntervalIndex += 1;
4541
+ }
4542
+ this.uploadLogsTimer = (0, _commonTimers.safeSetTimeout)(function () {
4543
+ _this23.uploadLogsTimer = undefined;
4544
+ _this23.uploadLogs();
4545
+
4546
+ // just as an extra precaution, to avoid uploading logs forever in case something goes wrong
4547
+ // and the page remains opened, we stop it if there is no media connection
4548
+ if (!_this23.mediaProperties.webrtcMediaConnection) {
4549
+ return;
4550
+ }
4551
+ _this23.setLogUploadTimer();
4552
+ }, delay);
4553
+ }
4554
+
4555
+ /**
4556
+ * Starts a periodic upload of logs
4557
+ *
4558
+ * @returns {undefined}
4559
+ */
4560
+ }, {
4561
+ key: "startPeriodicLogUpload",
4562
+ value: function startPeriodicLogUpload() {
4563
+ // @ts-ignore - config coming from registerPlugin
4564
+ if (this.config.logUploadIntervalMultiplicationFactor && !this.uploadLogsTimer) {
4565
+ this.logUploadIntervalIndex = 0;
4566
+ this.setLogUploadTimer();
4567
+ }
4568
+ }
4569
+
4570
+ /**
4571
+ * Stops the periodic upload of logs
4572
+ *
4573
+ * @returns {undefined}
4574
+ */
4575
+ }, {
4576
+ key: "stopPeriodicLogUpload",
4577
+ value: function stopPeriodicLogUpload() {
4578
+ if (this.uploadLogsTimer) {
4579
+ clearTimeout(this.uploadLogsTimer);
4580
+ this.uploadLogsTimer = undefined;
4581
+ }
4582
+ }
4583
+
4403
4584
  /**
4404
4585
  * Removes remote audio, video and share streams from class instance's mediaProperties
4405
4586
  * @returns {undefined}
@@ -4434,7 +4615,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4434
4615
  }, {
4435
4616
  key: "closeRemoteStreams",
4436
4617
  value: function closeRemoteStreams() {
4437
- var _this22 = this;
4618
+ var _this24 = this;
4438
4619
  var _this$mediaProperties4 = this.mediaProperties,
4439
4620
  remoteAudioStream = _this$mediaProperties4.remoteAudioStream,
4440
4621
  remoteVideoStream = _this$mediaProperties4.remoteVideoStream,
@@ -4448,7 +4629,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4448
4629
  */
4449
4630
  // eslint-disable-next-line @typescript-eslint/no-shadow
4450
4631
  var triggerMediaStoppedEvent = function triggerMediaStoppedEvent(mediaType) {
4451
- _triggerProxy.default.trigger(_this22, {
4632
+ _triggerProxy.default.trigger(_this24, {
4452
4633
  file: 'meeting/index',
4453
4634
  function: 'closeRemoteStreams'
4454
4635
  }, _constants.EVENT_TRIGGERS.MEDIA_STOPPED, {
@@ -4756,7 +4937,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4756
4937
  }, {
4757
4938
  key: "setMercuryListener",
4758
4939
  value: function setMercuryListener() {
4759
- var _this23 = this;
4940
+ var _this25 = this;
4760
4941
  // Client will have a socket manager and handle reconnecting to mercury, when we reconnect to mercury
4761
4942
  // if the meeting has active peer connections, it should try to reconnect.
4762
4943
  // @ts-ignore
@@ -4764,33 +4945,33 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4764
4945
  _loggerProxy.default.logger.info('Meeting:index#setMercuryListener --> Web socket online');
4765
4946
 
4766
4947
  // Only send restore event when it was disconnected before and for connected later
4767
- if (!_this23.hasWebsocketConnected) {
4948
+ if (!_this25.hasWebsocketConnected) {
4768
4949
  // @ts-ignore
4769
- _this23.webex.internal.newMetrics.submitClientEvent({
4950
+ _this25.webex.internal.newMetrics.submitClientEvent({
4770
4951
  name: 'client.mercury.connection.restored',
4771
4952
  options: {
4772
- meetingId: _this23.id
4953
+ meetingId: _this25.id
4773
4954
  }
4774
4955
  });
4775
4956
  _metrics.default.sendBehavioralMetric(_constants2.default.MERCURY_CONNECTION_RESTORED, {
4776
- correlation_id: _this23.correlationId
4957
+ correlation_id: _this25.correlationId
4777
4958
  });
4778
4959
  }
4779
- _this23.hasWebsocketConnected = true;
4960
+ _this25.hasWebsocketConnected = true;
4780
4961
  });
4781
4962
 
4782
4963
  // @ts-ignore
4783
4964
  this.webex.internal.mercury.on(_constants.OFFLINE, function () {
4784
4965
  _loggerProxy.default.logger.error('Meeting:index#setMercuryListener --> Web socket offline');
4785
4966
  // @ts-ignore
4786
- _this23.webex.internal.newMetrics.submitClientEvent({
4967
+ _this25.webex.internal.newMetrics.submitClientEvent({
4787
4968
  name: 'client.mercury.connection.lost',
4788
4969
  options: {
4789
- meetingId: _this23.id
4970
+ meetingId: _this25.id
4790
4971
  }
4791
4972
  });
4792
4973
  _metrics.default.sendBehavioralMetric(_constants2.default.MERCURY_CONNECTION_FAILURE, {
4793
- correlation_id: _this23.correlationId
4974
+ correlation_id: _this25.correlationId
4794
4975
  });
4795
4976
  });
4796
4977
  }
@@ -4892,7 +5073,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4892
5073
  }, {
4893
5074
  key: "muteAudio",
4894
5075
  value: function muteAudio() {
4895
- var _this24 = this;
5076
+ var _this26 = this;
4896
5077
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
4897
5078
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
4898
5079
  }
@@ -4908,22 +5089,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4908
5089
 
4909
5090
  // First, stop sending the local audio media
4910
5091
  return logRequest(this.audio.handleClientRequest(this, true).then(function () {
4911
- _util2.default.handleAudioLogging(_this24.mediaProperties.audioStream);
5092
+ _util2.default.handleAudioLogging(_this26.mediaProperties.audioStream);
4912
5093
  // @ts-ignore
4913
- _this24.webex.internal.newMetrics.submitClientEvent({
5094
+ _this26.webex.internal.newMetrics.submitClientEvent({
4914
5095
  name: 'client.muted',
4915
5096
  payload: {
4916
5097
  trigger: 'user-interaction',
4917
5098
  mediaType: 'audio'
4918
5099
  },
4919
5100
  options: {
4920
- meetingId: _this24.id
5101
+ meetingId: _this26.id
4921
5102
  }
4922
5103
  });
4923
5104
  }).catch(function (error) {
4924
5105
  _metrics.default.sendBehavioralMetric(_constants2.default.MUTE_AUDIO_FAILURE, {
4925
- correlation_id: _this24.correlationId,
4926
- locus_id: _this24.locusUrl.split('/').pop(),
5106
+ correlation_id: _this26.correlationId,
5107
+ locus_id: _this26.locusUrl.split('/').pop(),
4927
5108
  reason: error.message,
4928
5109
  stack: error.stack
4929
5110
  });
@@ -4942,7 +5123,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4942
5123
  }, {
4943
5124
  key: "unmuteAudio",
4944
5125
  value: function unmuteAudio() {
4945
- var _this25 = this;
5126
+ var _this27 = this;
4946
5127
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
4947
5128
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
4948
5129
  }
@@ -4958,22 +5139,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4958
5139
 
4959
5140
  // First, send the control to unmute the participant on the server
4960
5141
  return logRequest(this.audio.handleClientRequest(this, false).then(function () {
4961
- _util2.default.handleAudioLogging(_this25.mediaProperties.audioStream);
5142
+ _util2.default.handleAudioLogging(_this27.mediaProperties.audioStream);
4962
5143
  // @ts-ignore
4963
- _this25.webex.internal.newMetrics.submitClientEvent({
5144
+ _this27.webex.internal.newMetrics.submitClientEvent({
4964
5145
  name: 'client.unmuted',
4965
5146
  payload: {
4966
5147
  trigger: 'user-interaction',
4967
5148
  mediaType: 'audio'
4968
5149
  },
4969
5150
  options: {
4970
- meetingId: _this25.id
5151
+ meetingId: _this27.id
4971
5152
  }
4972
5153
  });
4973
5154
  }).catch(function (error) {
4974
5155
  _metrics.default.sendBehavioralMetric(_constants2.default.UNMUTE_AUDIO_FAILURE, {
4975
- correlation_id: _this25.correlationId,
4976
- locus_id: _this25.locusUrl.split('/').pop(),
5156
+ correlation_id: _this27.correlationId,
5157
+ locus_id: _this27.locusUrl.split('/').pop(),
4977
5158
  reason: error.message,
4978
5159
  stack: error.stack
4979
5160
  });
@@ -4992,7 +5173,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4992
5173
  }, {
4993
5174
  key: "muteVideo",
4994
5175
  value: function muteVideo() {
4995
- var _this26 = this;
5176
+ var _this28 = this;
4996
5177
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
4997
5178
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
4998
5179
  }
@@ -5006,22 +5187,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5006
5187
  return _promise.default.reject(new _parameter.default('no video control associated to the meeting'));
5007
5188
  }
5008
5189
  return logRequest(this.video.handleClientRequest(this, true).then(function () {
5009
- _util2.default.handleVideoLogging(_this26.mediaProperties.videoStream);
5190
+ _util2.default.handleVideoLogging(_this28.mediaProperties.videoStream);
5010
5191
  // @ts-ignore
5011
- _this26.webex.internal.newMetrics.submitClientEvent({
5192
+ _this28.webex.internal.newMetrics.submitClientEvent({
5012
5193
  name: 'client.muted',
5013
5194
  payload: {
5014
5195
  trigger: 'user-interaction',
5015
5196
  mediaType: 'video'
5016
5197
  },
5017
5198
  options: {
5018
- meetingId: _this26.id
5199
+ meetingId: _this28.id
5019
5200
  }
5020
5201
  });
5021
5202
  }).catch(function (error) {
5022
5203
  _metrics.default.sendBehavioralMetric(_constants2.default.MUTE_VIDEO_FAILURE, {
5023
- correlation_id: _this26.correlationId,
5024
- locus_id: _this26.locusUrl.split('/').pop(),
5204
+ correlation_id: _this28.correlationId,
5205
+ locus_id: _this28.locusUrl.split('/').pop(),
5025
5206
  reason: error.message,
5026
5207
  stack: error.stack
5027
5208
  });
@@ -5040,7 +5221,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5040
5221
  }, {
5041
5222
  key: "unmuteVideo",
5042
5223
  value: function unmuteVideo() {
5043
- var _this27 = this;
5224
+ var _this29 = this;
5044
5225
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5045
5226
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5046
5227
  }
@@ -5054,22 +5235,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5054
5235
  return _promise.default.reject(new _parameter.default('no audio control associated to the meeting'));
5055
5236
  }
5056
5237
  return logRequest(this.video.handleClientRequest(this, false).then(function () {
5057
- _util2.default.handleVideoLogging(_this27.mediaProperties.videoStream);
5238
+ _util2.default.handleVideoLogging(_this29.mediaProperties.videoStream);
5058
5239
  // @ts-ignore
5059
- _this27.webex.internal.newMetrics.submitClientEvent({
5240
+ _this29.webex.internal.newMetrics.submitClientEvent({
5060
5241
  name: 'client.unmuted',
5061
5242
  payload: {
5062
5243
  trigger: 'user-interaction',
5063
5244
  mediaType: 'video'
5064
5245
  },
5065
5246
  options: {
5066
- meetingId: _this27.id
5247
+ meetingId: _this29.id
5067
5248
  }
5068
5249
  });
5069
5250
  }).catch(function (error) {
5070
5251
  _metrics.default.sendBehavioralMetric(_constants2.default.UNMUTE_VIDEO_FAILURE, {
5071
- correlation_id: _this27.correlationId,
5072
- locus_id: _this27.locusUrl.split('/').pop(),
5252
+ correlation_id: _this29.correlationId,
5253
+ locus_id: _this29.locusUrl.split('/').pop(),
5073
5254
  reason: error.message,
5074
5255
  stack: error.stack
5075
5256
  });
@@ -5099,7 +5280,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5099
5280
  key: "joinWithMedia",
5100
5281
  value: (function () {
5101
5282
  var _joinWithMedia = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee15() {
5102
- var _this28 = this;
5283
+ var _this30 = this;
5103
5284
  var options,
5104
5285
  mediaOptions,
5105
5286
  _options$joinOptions,
@@ -5139,34 +5320,30 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5139
5320
  _context15.prev = 9;
5140
5321
  forceTurnDiscovery = false;
5141
5322
  if (joinResponse) {
5142
- _context15.next = 36;
5323
+ _context15.next = 33;
5143
5324
  break;
5144
5325
  }
5145
5326
  _context15.next = 14;
5146
- return this.webex.meetings.reachability.getReachabilityResults();
5147
- case 14:
5148
- joinOptions.reachability = _context15.sent;
5149
- _context15.next = 17;
5150
5327
  return this.roap.generateTurnDiscoveryRequestMessage(this, true);
5151
- case 17:
5328
+ case 14:
5152
5329
  turnDiscoveryRequest = _context15.sent;
5153
5330
  turnDiscoverySkippedReason = turnDiscoveryRequest.turnDiscoverySkippedReason;
5154
5331
  joinOptions.roapMessage = turnDiscoveryRequest.roapMessage;
5155
5332
  _loggerProxy.default.logger.info('Meeting:index#joinWithMedia ---> calling join with joinOptions, ', joinOptions);
5156
- _context15.next = 23;
5333
+ _context15.next = 20;
5157
5334
  return this.join(joinOptions);
5158
- case 23:
5335
+ case 20:
5159
5336
  joinResponse = _context15.sent;
5160
5337
  joined = true;
5161
5338
 
5162
5339
  // if we sent out TURN discovery Roap message with join, process the TURN discovery response
5163
5340
  if (!joinOptions.roapMessage) {
5164
- _context15.next = 34;
5341
+ _context15.next = 31;
5165
5342
  break;
5166
5343
  }
5167
- _context15.next = 28;
5344
+ _context15.next = 25;
5168
5345
  return this.roap.handleTurnDiscoveryHttpResponse(this, joinResponse);
5169
- case 28:
5346
+ case 25:
5170
5347
  _yield$this$roap$hand = _context15.sent;
5171
5348
  turnServerInfo = _yield$this$roap$hand.turnServerInfo;
5172
5349
  turnDiscoverySkippedReason = _yield$this$roap$hand.turnDiscoverySkippedReason;
@@ -5175,20 +5352,20 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5175
5352
  if (turnServerInfo === undefined) {
5176
5353
  this.roap.abortTurnDiscovery();
5177
5354
  }
5178
- case 34:
5179
- _context15.next = 38;
5355
+ case 31:
5356
+ _context15.next = 35;
5180
5357
  break;
5181
- case 36:
5358
+ case 33:
5182
5359
  // This is a retry, when join succeeded but addMedia failed, so we'll just call addMedia() again,
5183
5360
  // but we need to ensure that it also does a new TURN discovery
5184
5361
  forceTurnDiscovery = true;
5185
5362
  joined = true;
5186
- case 38:
5187
- _context15.next = 40;
5363
+ case 35:
5364
+ _context15.next = 37;
5188
5365
  return this.addMediaInternal(function () {
5189
- return _this28.joinWithMediaRetryInfo.isRetry ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
5366
+ return _this30.joinWithMediaRetryInfo.isRetry ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
5190
5367
  }, turnServerInfo, forceTurnDiscovery, mediaOptions);
5191
- case 40:
5368
+ case 37:
5192
5369
  mediaResponse = _context15.sent;
5193
5370
  this.joinWithMediaRetryInfo = {
5194
5371
  isRetry: false,
@@ -5198,30 +5375,30 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5198
5375
  join: joinResponse,
5199
5376
  media: mediaResponse
5200
5377
  });
5201
- case 45:
5202
- _context15.prev = 45;
5378
+ case 42:
5379
+ _context15.prev = 42;
5203
5380
  _context15.t0 = _context15["catch"](9);
5204
5381
  _loggerProxy.default.logger.error('Meeting:index#joinWithMedia --> ', _context15.t0);
5205
5382
  this.roap.abortTurnDiscovery();
5206
5383
  if (!(joined && isRetry)) {
5207
- _context15.next = 59;
5384
+ _context15.next = 56;
5208
5385
  break;
5209
5386
  }
5210
- _context15.prev = 50;
5211
- _context15.next = 53;
5387
+ _context15.prev = 47;
5388
+ _context15.next = 50;
5212
5389
  return this.leave({
5213
5390
  resourceId: joinOptions === null || joinOptions === void 0 ? void 0 : joinOptions.resourceId,
5214
5391
  reason: 'joinWithMedia failure'
5215
5392
  });
5216
- case 53:
5217
- _context15.next = 59;
5393
+ case 50:
5394
+ _context15.next = 56;
5218
5395
  break;
5219
- case 55:
5220
- _context15.prev = 55;
5221
- _context15.t1 = _context15["catch"](50);
5396
+ case 52:
5397
+ _context15.prev = 52;
5398
+ _context15.t1 = _context15["catch"](47);
5222
5399
  _loggerProxy.default.logger.error('Meeting:index#joinWithMedia --> leave error', _context15.t1);
5223
5400
  leaveError = _context15.t1;
5224
- case 59:
5401
+ case 56:
5225
5402
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_WITH_MEDIA_FAILURE, {
5226
5403
  correlation_id: this.correlationId,
5227
5404
  locus_id: (_this$locusUrl = this.locusUrl) === null || _this$locusUrl === void 0 ? void 0 : _this$locusUrl.split('/').pop(),
@@ -5242,24 +5419,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5242
5419
  shouldRetry = false;
5243
5420
  }
5244
5421
  if (!shouldRetry) {
5245
- _context15.next = 67;
5422
+ _context15.next = 64;
5246
5423
  break;
5247
5424
  }
5248
5425
  _loggerProxy.default.logger.warn('Meeting:index#joinWithMedia --> retrying call to joinWithMedia');
5249
5426
  this.joinWithMediaRetryInfo.isRetry = true;
5250
5427
  this.joinWithMediaRetryInfo.prevJoinResponse = joinResponse;
5251
5428
  return _context15.abrupt("return", this.joinWithMedia(options));
5252
- case 67:
5429
+ case 64:
5253
5430
  this.joinWithMediaRetryInfo = {
5254
5431
  isRetry: false,
5255
5432
  prevJoinResponse: undefined
5256
5433
  };
5257
5434
  throw _context15.t0;
5258
- case 69:
5435
+ case 66:
5259
5436
  case "end":
5260
5437
  return _context15.stop();
5261
5438
  }
5262
- }, _callee15, this, [[9, 45], [50, 55]]);
5439
+ }, _callee15, this, [[9, 42], [47, 52]]);
5263
5440
  }));
5264
5441
  function joinWithMedia() {
5265
5442
  return _joinWithMedia.apply(this, arguments);
@@ -5278,7 +5455,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5278
5455
  }, {
5279
5456
  key: "reconnect",
5280
5457
  value: function reconnect(options) {
5281
- var _this29 = this;
5458
+ var _this31 = this;
5282
5459
  _loggerProxy.default.logger.log("Meeting:index#reconnect --> attempting to reconnect meeting ".concat(this.id));
5283
5460
  if (!this.reconnectionManager || !this.reconnectionManager.reconnect) {
5284
5461
  return _promise.default.reject(new _parameter.default('Cannot reconnect, ReconnectionManager must first be defined.'));
@@ -5288,15 +5465,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5288
5465
  if (!_util2.default.isMediaEstablished(this.currentMediaStatus)) {
5289
5466
  return _promise.default.reject(new _parameter.default('Cannot reconnect, Media has not established to reconnect'));
5290
5467
  }
5468
+ this.cleanUpBeforeReconnection();
5291
5469
  return this.reconnectionManager.reconnect(options, /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee16() {
5292
5470
  return _regenerator.default.wrap(function _callee16$(_context16) {
5293
5471
  while (1) switch (_context16.prev = _context16.next) {
5294
5472
  case 0:
5295
5473
  _context16.next = 2;
5296
- return _this29.waitForRemoteSDPAnswer();
5474
+ return _this31.waitForRemoteSDPAnswer();
5297
5475
  case 2:
5298
5476
  _context16.next = 4;
5299
- return _this29.waitForMediaConnectionConnected();
5477
+ return _this31.waitForMediaConnectionConnected();
5300
5478
  case 4:
5301
5479
  case "end":
5302
5480
  return _context16.stop();
@@ -5310,7 +5488,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5310
5488
  return _promise.default.resolve();
5311
5489
  }
5312
5490
  _loggerProxy.default.logger.error('Meeting:index#reconnect --> Meeting reconnect failed', error);
5313
- _this29.uploadLogs({
5491
+ _this31.uploadLogs({
5314
5492
  file: 'meeting/index',
5315
5493
  function: 'reconnect'
5316
5494
  });
@@ -5357,19 +5535,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5357
5535
  }, {
5358
5536
  key: "setCaptionLanguage",
5359
5537
  value: function setCaptionLanguage(language) {
5360
- var _this30 = this;
5538
+ var _this32 = this;
5361
5539
  return new _promise.default(function (resolve, reject) {
5362
- if (!_this30.isTranscriptionSupported()) {
5540
+ if (!_this32.isTranscriptionSupported()) {
5363
5541
  _loggerProxy.default.logger.error('Meeting:index#setCaptionLanguage --> Webex Assistant is not enabled/supported');
5364
5542
  reject(new Error('Webex Assistant is not enabled/supported'));
5365
5543
  }
5366
5544
  try {
5367
5545
  var voiceaListenerCaptionUpdate = function voiceaListenerCaptionUpdate(payload) {
5368
5546
  // @ts-ignore
5369
- _this30.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5547
+ _this32.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5370
5548
  var statusCode = payload.statusCode;
5371
5549
  if (statusCode === 200) {
5372
- _this30.transcription.languageOptions = _objectSpread(_objectSpread({}, _this30.transcription.languageOptions), {}, {
5550
+ _this32.transcription.languageOptions = _objectSpread(_objectSpread({}, _this32.transcription.languageOptions), {}, {
5373
5551
  currentCaptionLanguage: language
5374
5552
  });
5375
5553
  resolve(language);
@@ -5378,9 +5556,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5378
5556
  }
5379
5557
  };
5380
5558
  // @ts-ignore
5381
- _this30.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5559
+ _this32.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5382
5560
  // @ts-ignore
5383
- _this30.webex.internal.voicea.requestLanguage(language);
5561
+ _this32.webex.internal.voicea.requestLanguage(language);
5384
5562
  } catch (error) {
5385
5563
  _loggerProxy.default.logger.error("Meeting:index#setCaptionLanguage --> ".concat(error));
5386
5564
  reject(error);
@@ -5396,23 +5574,23 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5396
5574
  }, {
5397
5575
  key: "setSpokenLanguage",
5398
5576
  value: function setSpokenLanguage(language) {
5399
- var _this31 = this;
5577
+ var _this33 = this;
5400
5578
  return new _promise.default(function (resolve, reject) {
5401
- if (!_this31.isTranscriptionSupported()) {
5579
+ if (!_this33.isTranscriptionSupported()) {
5402
5580
  _loggerProxy.default.logger.error('Meeting:index#setCaptionLanguage --> Webex Assistant is not enabled/supported');
5403
5581
  reject(new Error('Webex Assistant is not enabled/supported'));
5404
5582
  }
5405
- if (_this31.getCurUserType() !== 'host') {
5583
+ if (_this33.getCurUserType() !== 'host') {
5406
5584
  _loggerProxy.default.logger.error('Meeting:index#setSpokenLanguage --> Only host can set spoken language');
5407
5585
  reject(new Error('Only host can set spoken language'));
5408
5586
  }
5409
5587
  try {
5410
5588
  var voiceaListenerLanguageUpdate = function voiceaListenerLanguageUpdate(payload) {
5411
5589
  // @ts-ignore
5412
- _this31.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5590
+ _this33.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5413
5591
  var languageCode = payload.languageCode;
5414
5592
  if (languageCode) {
5415
- _this31.transcription.languageOptions = _objectSpread(_objectSpread({}, _this31.transcription.languageOptions), {}, {
5593
+ _this33.transcription.languageOptions = _objectSpread(_objectSpread({}, _this33.transcription.languageOptions), {}, {
5416
5594
  currentSpokenLanguage: languageCode
5417
5595
  });
5418
5596
  resolve(languageCode);
@@ -5422,10 +5600,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5422
5600
  };
5423
5601
 
5424
5602
  // @ts-ignore
5425
- _this31.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5603
+ _this33.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5426
5604
 
5427
5605
  // @ts-ignore
5428
- _this31.webex.internal.voicea.setSpokenLanguage(language);
5606
+ _this33.webex.internal.voicea.setSpokenLanguage(language);
5429
5607
  } catch (error) {
5430
5608
  _loggerProxy.default.logger.error("Meeting:index#setSpokenLanguage --> ".concat(error));
5431
5609
  reject(error);
@@ -5545,7 +5723,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5545
5723
  */
5546
5724
  function () {
5547
5725
  var _join = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee18() {
5548
- var _this32 = this;
5726
+ var _this34 = this;
5549
5727
  var options,
5550
5728
  errorMessage,
5551
5729
  error,
@@ -5597,18 +5775,21 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5597
5775
  this.meetingFiniteStateMachine.reset();
5598
5776
  }
5599
5777
 
5600
- // @ts-ignore
5601
- this.webex.internal.newMetrics.submitClientEvent({
5602
- name: 'client.call.initiated',
5603
- payload: {
5604
- trigger: this.callStateForMetrics.joinTrigger || 'user-interaction',
5605
- isRoapCallEnabled: true,
5606
- pstnAudioType: options === null || options === void 0 ? void 0 : options.pstnAudioType
5607
- },
5608
- options: {
5609
- meetingId: this.id
5610
- }
5611
- });
5778
+ // send client.call.initiated unless told not to
5779
+ if (options.sendCallInitiated !== false) {
5780
+ // @ts-ignore
5781
+ this.webex.internal.newMetrics.submitClientEvent({
5782
+ name: 'client.call.initiated',
5783
+ payload: {
5784
+ trigger: this.callStateForMetrics.joinTrigger || 'user-interaction',
5785
+ isRoapCallEnabled: true,
5786
+ pstnAudioType: options === null || options === void 0 ? void 0 : options.pstnAudioType
5787
+ },
5788
+ options: {
5789
+ meetingId: this.id
5790
+ }
5791
+ });
5792
+ }
5612
5793
  _loggerProxy.default.logger.log('Meeting:index#join --> Joining a meeting');
5613
5794
  if (this.meetingFiniteStateMachine.state === _constants.MEETING_STATE_MACHINE.STATES.ENDED) {
5614
5795
  this.meetingFiniteStateMachine.reset();
@@ -5691,62 +5872,62 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5691
5872
  return _context18.abrupt("return", _promise.default.reject(_context18.t0));
5692
5873
  case 51:
5693
5874
  return _context18.abrupt("return", _util2.default.joinMeetingOptions(this, options).then(function (join) {
5694
- _this32.meetingFiniteStateMachine.join();
5695
- _this32.setupLocusMediaRequest();
5875
+ _this34.meetingFiniteStateMachine.join();
5876
+ _this34.setupLocusMediaRequest();
5696
5877
 
5697
5878
  // @ts-ignore
5698
- _this32.webex.internal.device.meetingStarted();
5699
- (0, _classPrivateFieldSet2.default)(_this32, _isoLocalClientMeetingJoinTime, new Date().toISOString());
5879
+ _this34.webex.internal.device.meetingStarted();
5880
+ (0, _classPrivateFieldSet2.default)(_this34, _isoLocalClientMeetingJoinTime, new Date().toISOString());
5700
5881
  _loggerProxy.default.logger.log('Meeting:index#join --> Success');
5701
5882
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_SUCCESS, {
5702
- correlation_id: _this32.correlationId
5883
+ correlation_id: _this34.correlationId
5703
5884
  });
5704
5885
  joinSuccess(join);
5705
- _this32.deferJoin = undefined;
5886
+ _this34.deferJoin = undefined;
5706
5887
  return join;
5707
5888
  }).catch(function (error) {
5708
- var _this32$meetingInfo, _error$error;
5709
- _this32.meetingFiniteStateMachine.fail(error);
5889
+ var _this34$meetingInfo, _error$error;
5890
+ _this34.meetingFiniteStateMachine.fail(error);
5710
5891
  _loggerProxy.default.logger.error('Meeting:index#join --> Failed', error);
5711
5892
 
5712
5893
  // @ts-ignore
5713
- _this32.webex.internal.newMetrics.submitClientEvent({
5894
+ _this34.webex.internal.newMetrics.submitClientEvent({
5714
5895
  name: 'client.locus.join.response',
5715
5896
  payload: {
5716
5897
  identifiers: {
5717
- meetingLookupUrl: (_this32$meetingInfo = _this32.meetingInfo) === null || _this32$meetingInfo === void 0 ? void 0 : _this32$meetingInfo.meetingLookupUrl
5898
+ meetingLookupUrl: (_this34$meetingInfo = _this34.meetingInfo) === null || _this34$meetingInfo === void 0 ? void 0 : _this34$meetingInfo.meetingLookupUrl
5718
5899
  }
5719
5900
  },
5720
5901
  options: {
5721
- meetingId: _this32.id,
5902
+ meetingId: _this34.id,
5722
5903
  rawError: error
5723
5904
  }
5724
5905
  });
5725
5906
 
5726
5907
  // TODO: change this to error codes and pre defined dictionary
5727
5908
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_FAILURE, {
5728
- correlation_id: _this32.correlationId,
5909
+ correlation_id: _this34.correlationId,
5729
5910
  reason: (_error$error = error.error) === null || _error$error === void 0 ? void 0 : _error$error.message,
5730
5911
  stack: error.stack
5731
5912
  });
5732
5913
 
5733
5914
  // Upload logs on join Failure
5734
- _triggerProxy.default.trigger(_this32, {
5915
+ _triggerProxy.default.trigger(_this34, {
5735
5916
  file: 'meeting/index',
5736
5917
  function: 'join'
5737
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this32);
5918
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this34);
5738
5919
  joinFailed(error);
5739
- _this32.deferJoin = undefined;
5920
+ _this34.deferJoin = undefined;
5740
5921
  return _promise.default.reject(error);
5741
5922
  }).then(function (join) {
5742
5923
  // @ts-ignore - config coming from registerPlugin
5743
- if (_this32.config.enableAutomaticLLM) {
5924
+ if (_this34.config.enableAutomaticLLM) {
5744
5925
  // @ts-ignore
5745
- _this32.webex.internal.llm.on('online', _this32.handleLLMOnline);
5746
- _this32.updateLLMConnection().catch(function (error) {
5926
+ _this34.webex.internal.llm.on('online', _this34.handleLLMOnline);
5927
+ _this34.updateLLMConnection().catch(function (error) {
5747
5928
  _loggerProxy.default.logger.error('Meeting:index#join --> Transcription Socket Connection Failed', error);
5748
5929
  _metrics.default.sendBehavioralMetric(_constants2.default.LLM_CONNECTION_AFTER_JOIN_FAILURE, {
5749
- correlation_id: _this32.correlationId,
5930
+ correlation_id: _this34.correlationId,
5750
5931
  reason: error === null || error === void 0 ? void 0 : error.message,
5751
5932
  stack: error.stack
5752
5933
  });
@@ -5778,7 +5959,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5778
5959
  key: "updateLLMConnection",
5779
5960
  value: (function () {
5780
5961
  var _updateLLMConnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee19() {
5781
- var _this33 = this;
5962
+ var _this35 = this;
5782
5963
  var _this$locusInfo6, url, _this$locusInfo6$info, _this$locusInfo6$info2, datachannelUrl, isJoined;
5783
5964
  return _regenerator.default.wrap(function _callee19$(_context19) {
5784
5965
  while (1) switch (_context19.prev = _context19.next) {
@@ -5814,9 +5995,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5814
5995
  case 10:
5815
5996
  return _context19.abrupt("return", this.webex.internal.llm.registerAndConnect(url, datachannelUrl).then(function (registerAndConnectResult) {
5816
5997
  // @ts-ignore - Fix type
5817
- _this33.webex.internal.llm.off('event:relay.event', _this33.processRelayEvent);
5998
+ _this35.webex.internal.llm.off('event:relay.event', _this35.processRelayEvent);
5818
5999
  // @ts-ignore - Fix type
5819
- _this33.webex.internal.llm.on('event:relay.event', _this33.processRelayEvent);
6000
+ _this35.webex.internal.llm.on('event:relay.event', _this35.processRelayEvent);
5820
6001
  _loggerProxy.default.logger.info('Meeting:index#updateLLMConnection --> enabled to receive relay events!');
5821
6002
  return _promise.default.resolve(registerAndConnectResult);
5822
6003
  }));
@@ -5870,7 +6051,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5870
6051
  }, {
5871
6052
  key: "dialInPstn",
5872
6053
  value: function dialInPstn() {
5873
- var _this34 = this;
6054
+ var _this36 = this;
5874
6055
  if (this.isPhoneProvisioned(this.dialInDeviceStatus)) return _promise.default.resolve(); // prevent multiple dial in devices from being provisioned
5875
6056
 
5876
6057
  var correlationId = this.correlationId,
@@ -5886,10 +6067,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5886
6067
  }).catch(function (error) {
5887
6068
  var _error$error2;
5888
6069
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_DIAL_IN_FAILURE, {
5889
- correlation_id: _this34.correlationId,
5890
- dial_in_url: _this34.dialInUrl,
6070
+ correlation_id: _this36.correlationId,
6071
+ dial_in_url: _this36.dialInUrl,
5891
6072
  locus_id: locusUrl.split('/').pop(),
5892
- client_url: _this34.deviceUrl,
6073
+ client_url: _this36.deviceUrl,
5893
6074
  reason: (_error$error2 = error.error) === null || _error$error2 === void 0 ? void 0 : _error$error2.message,
5894
6075
  stack: error.stack
5895
6076
  });
@@ -5907,7 +6088,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5907
6088
  }, {
5908
6089
  key: "dialOutPstn",
5909
6090
  value: function dialOutPstn(phoneNumber) {
5910
- var _this35 = this;
6091
+ var _this37 = this;
5911
6092
  if (this.isPhoneProvisioned(this.dialOutDeviceStatus)) return _promise.default.resolve(); // prevent multiple dial out devices from being provisioned
5912
6093
 
5913
6094
  var correlationId = this.correlationId,
@@ -5924,10 +6105,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5924
6105
  }).catch(function (error) {
5925
6106
  var _error$error3;
5926
6107
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_DIAL_OUT_FAILURE, {
5927
- correlation_id: _this35.correlationId,
5928
- dial_out_url: _this35.dialOutUrl,
6108
+ correlation_id: _this37.correlationId,
6109
+ dial_out_url: _this37.dialOutUrl,
5929
6110
  locus_id: locusUrl.split('/').pop(),
5930
- client_url: _this35.deviceUrl,
6111
+ client_url: _this37.deviceUrl,
5931
6112
  reason: (_error$error3 = error.error) === null || _error$error3 === void 0 ? void 0 : _error$error3.message,
5932
6113
  stack: error.stack
5933
6114
  });
@@ -5958,7 +6139,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5958
6139
  }, {
5959
6140
  key: "moveTo",
5960
6141
  value: function moveTo(resourceId) {
5961
- var _this36 = this;
6142
+ var _this38 = this;
5962
6143
  if (!resourceId) {
5963
6144
  throw new _parameter.default('Cannot move call without a resourceId.');
5964
6145
  }
@@ -6002,12 +6183,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6002
6183
  while (1) switch (_context20.prev = _context20.next) {
6003
6184
  case 0:
6004
6185
  _context20.prev = 0;
6005
- if (!(_this36.screenShareFloorState === ScreenShareFloorStatus.GRANTED)) {
6186
+ if (!(_this38.screenShareFloorState === ScreenShareFloorStatus.GRANTED)) {
6006
6187
  _context20.next = 4;
6007
6188
  break;
6008
6189
  }
6009
6190
  _context20.next = 4;
6010
- return _this36.releaseScreenShareFloor();
6191
+ return _this38.releaseScreenShareFloor();
6011
6192
  case 4:
6012
6193
  mediaSettings = {
6013
6194
  mediaDirection: {
@@ -6019,37 +6200,37 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6019
6200
  receiveShare: true
6020
6201
  }
6021
6202
  };
6022
- _this36.mediaProperties.setMediaDirection(mediaSettings.mediaDirection);
6023
- _this36.mediaProperties.unsetRemoteMedia();
6203
+ _this38.mediaProperties.setMediaDirection(mediaSettings.mediaDirection);
6204
+ _this38.mediaProperties.unsetRemoteMedia();
6024
6205
 
6025
6206
  // 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
6026
6207
  // once the device answers we close the old connection and create new media server connection with only share enabled
6027
- if (!_this36.statsAnalyzer) {
6208
+ if (!_this38.statsAnalyzer) {
6028
6209
  _context20.next = 10;
6029
6210
  break;
6030
6211
  }
6031
6212
  _context20.next = 10;
6032
- return _this36.statsAnalyzer.stopAnalyzer();
6213
+ return _this38.statsAnalyzer.stopAnalyzer();
6033
6214
  case 10:
6034
6215
  _context20.next = 12;
6035
- return _this36.closeRemoteStreams();
6216
+ return _this38.closeRemoteStreams();
6036
6217
  case 12:
6037
6218
  _context20.next = 14;
6038
- return _this36.closePeerConnections();
6219
+ return _this38.closePeerConnections();
6039
6220
  case 14:
6040
- _this36.cleanupLocalStreams();
6041
- _this36.unsetRemoteStreams();
6042
- _this36.unsetPeerConnections();
6043
- _this36.reconnectionManager.cleanUp();
6221
+ _this38.cleanupLocalStreams();
6222
+ _this38.unsetRemoteStreams();
6223
+ _this38.unsetPeerConnections();
6224
+ _this38.reconnectionManager.cleanUp();
6044
6225
  _context20.next = 20;
6045
- return _this36.addMedia({
6226
+ return _this38.addMedia({
6046
6227
  audioEnabled: false,
6047
6228
  videoEnabled: false,
6048
6229
  shareVideoEnabled: true
6049
6230
  });
6050
6231
  case 20:
6051
6232
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_SUCCESS);
6052
- _this36.isMoveToInProgress = false;
6233
+ _this38.isMoveToInProgress = false;
6053
6234
  _context20.next = 29;
6054
6235
  break;
6055
6236
  case 24:
@@ -6057,12 +6238,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6057
6238
  _context20.t0 = _context20["catch"](0);
6058
6239
  _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', _context20.t0);
6059
6240
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
6060
- correlation_id: _this36.correlationId,
6061
- locus_id: _this36.locusUrl.split('/').pop(),
6241
+ correlation_id: _this38.correlationId,
6242
+ locus_id: _this38.locusUrl.split('/').pop(),
6062
6243
  reason: _context20.t0.message,
6063
6244
  stack: _context20.t0.stack
6064
6245
  });
6065
- _this36.isMoveToInProgress = false;
6246
+ _this38.isMoveToInProgress = false;
6066
6247
  case 29:
6067
6248
  case "end":
6068
6249
  return _context20.stop();
@@ -6078,17 +6259,17 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6078
6259
  resourceId: resourceId,
6079
6260
  moveToResource: true
6080
6261
  }).then(function () {
6081
- _this36.meetingFiniteStateMachine.join();
6262
+ _this38.meetingFiniteStateMachine.join();
6082
6263
  }).catch(function (error) {
6083
- _this36.meetingFiniteStateMachine.fail(error);
6264
+ _this38.meetingFiniteStateMachine.fail(error);
6084
6265
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
6085
- correlation_id: _this36.correlationId,
6086
- locus_id: _this36.locusUrl.split('/').pop(),
6266
+ correlation_id: _this38.correlationId,
6267
+ locus_id: _this38.locusUrl.split('/').pop(),
6087
6268
  reason: error.message,
6088
6269
  stack: error.stack
6089
6270
  });
6090
6271
  _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', error);
6091
- _this36.isMoveToInProgress = false;
6272
+ _this38.isMoveToInProgress = false;
6092
6273
  return _promise.default.reject(error);
6093
6274
  });
6094
6275
  }
@@ -6103,7 +6284,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6103
6284
  }, {
6104
6285
  key: "moveFrom",
6105
6286
  value: function moveFrom(resourceId) {
6106
- var _this37 = this;
6287
+ var _this39 = this;
6107
6288
  // On moveFrom ask the developer to re capture it moveFrom then updateMedia
6108
6289
  if (!resourceId) {
6109
6290
  throw new _parameter.default('Cannot move call without a resourceId.');
@@ -6118,19 +6299,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6118
6299
  }
6119
6300
  });
6120
6301
  return _util2.default.joinMeetingOptions(this).then(function () {
6121
- return _util2.default.leaveMeeting(_this37, {
6302
+ return _util2.default.leaveMeeting(_this39, {
6122
6303
  resourceId: resourceId,
6123
6304
  correlationId: oldCorrelationId,
6124
6305
  moveMeeting: true
6125
6306
  }).then(function () {
6126
- _this37.resourceId = '';
6307
+ _this39.resourceId = '';
6127
6308
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_FROM_SUCCESS);
6128
6309
  });
6129
6310
  }).catch(function (error) {
6130
- _this37.meetingFiniteStateMachine.fail(error);
6311
+ _this39.meetingFiniteStateMachine.fail(error);
6131
6312
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_FROM_FAILURE, {
6132
- correlation_id: _this37.correlationId,
6133
- locus_id: _this37.locusUrl.split('/').pop(),
6313
+ correlation_id: _this39.correlationId,
6314
+ locus_id: _this39.locusUrl.split('/').pop(),
6134
6315
  reason: error.message,
6135
6316
  stack: error.stack
6136
6317
  });
@@ -6243,9 +6424,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6243
6424
  }, {
6244
6425
  key: "forwardEvent",
6245
6426
  value: function forwardEvent(eventEmitter, eventTypeToForward, meetingEventType) {
6246
- var _this38 = this;
6427
+ var _this40 = this;
6247
6428
  eventEmitter.on(eventTypeToForward, function (data) {
6248
- return _triggerProxy.default.trigger(_this38, {
6429
+ return _triggerProxy.default.trigger(_this40, {
6249
6430
  file: 'meetings',
6250
6431
  function: 'addMedia'
6251
6432
  }, meetingEventType, data);
@@ -6432,7 +6613,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6432
6613
  */
6433
6614
  function () {
6434
6615
  var _waitForRemoteSDPAnswer = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee24() {
6435
- var _this39 = this;
6616
+ var _this41 = this;
6436
6617
  var LOG_HEADER, deferSDPAnswer;
6437
6618
  return _regenerator.default.wrap(function _callee24$(_context24) {
6438
6619
  while (1) switch (_context24.prev = _context24.next) {
@@ -6449,18 +6630,18 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6449
6630
  this.sdpResponseTimer = setTimeout(function () {
6450
6631
  _loggerProxy.default.logger.warn("".concat(LOG_HEADER, " timeout! no REMOTE SDP ANSWER received within ").concat(_constants.ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT / 1000, " seconds"));
6451
6632
  // @ts-ignore
6452
- _this39.webex.internal.newMetrics.submitClientEvent({
6633
+ _this41.webex.internal.newMetrics.submitClientEvent({
6453
6634
  name: 'client.media-engine.remote-sdp-received',
6454
6635
  payload: {
6455
6636
  canProceed: false,
6456
6637
  errors: [
6457
6638
  // @ts-ignore
6458
- _this39.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({
6639
+ _this41.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({
6459
6640
  clientErrorCode: _internalPluginMetrics.CALL_DIAGNOSTIC_CONFIG.MISSING_ROAP_ANSWER_CLIENT_CODE
6460
6641
  })]
6461
6642
  },
6462
6643
  options: {
6463
- meetingId: _this39.id,
6644
+ meetingId: _this41.id,
6464
6645
  rawError: new Error('Timeout waiting for SDP answer')
6465
6646
  }
6466
6647
  });
@@ -6846,6 +7027,43 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6846
7027
  return _cleanUpBeforeRetryWithTurnServer.apply(this, arguments);
6847
7028
  }
6848
7029
  return cleanUpBeforeRetryWithTurnServer;
7030
+ }())
7031
+ }, {
7032
+ key: "cleanUpBeforeReconnection",
7033
+ value: function () {
7034
+ var _cleanUpBeforeReconnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee32() {
7035
+ return _regenerator.default.wrap(function _callee32$(_context32) {
7036
+ while (1) switch (_context32.prev = _context32.next) {
7037
+ case 0:
7038
+ _context32.prev = 0;
7039
+ _context32.next = 3;
7040
+ return this.forceSendStatsReport({
7041
+ callFrom: 'cleanUpBeforeReconnection'
7042
+ });
7043
+ case 3:
7044
+ if (!this.statsAnalyzer) {
7045
+ _context32.next = 6;
7046
+ break;
7047
+ }
7048
+ _context32.next = 6;
7049
+ return this.statsAnalyzer.stopAnalyzer();
7050
+ case 6:
7051
+ _context32.next = 11;
7052
+ break;
7053
+ case 8:
7054
+ _context32.prev = 8;
7055
+ _context32.t0 = _context32["catch"](0);
7056
+ _loggerProxy.default.logger.error('Meeting:index#cleanUpBeforeReconnection --> Error during cleanup: ', _context32.t0);
7057
+ case 11:
7058
+ case "end":
7059
+ return _context32.stop();
7060
+ }
7061
+ }, _callee32, this, [[0, 8]]);
7062
+ }));
7063
+ function cleanUpBeforeReconnection() {
7064
+ return _cleanUpBeforeReconnection.apply(this, arguments);
7065
+ }
7066
+ return cleanUpBeforeReconnection;
6849
7067
  }()
6850
7068
  /**
6851
7069
  * Creates an instance of LocusMediaRequest for this meeting - it is needed for doing any calls
@@ -6853,7 +7071,6 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6853
7071
  *
6854
7072
  * @returns {void}
6855
7073
  */
6856
- )
6857
7074
  }, {
6858
7075
  key: "setupLocusMediaRequest",
6859
7076
  value: function setupLocusMediaRequest() {
@@ -6888,10 +7105,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6888
7105
  }, {
6889
7106
  key: "addMedia",
6890
7107
  value: function addMedia() {
6891
- var _this40 = this;
7108
+ var _this42 = this;
6892
7109
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
6893
7110
  return this.addMediaInternal(function () {
6894
- return _this40.turnServerUsed ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
7111
+ return _this42.turnServerUsed ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
6895
7112
  }, undefined, false, options);
6896
7113
  }
6897
7114
 
@@ -6909,7 +7126,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6909
7126
  }, {
6910
7127
  key: "addMediaInternal",
6911
7128
  value: (function () {
6912
- var _addMediaInternal = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee32(icePhaseCallback, turnServerInfo, forceTurnDiscovery) {
7129
+ var _addMediaInternal = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee33(icePhaseCallback, turnServerInfo, forceTurnDiscovery) {
6913
7130
  var options,
6914
7131
  LOG_HEADER,
6915
7132
  localStreams,
@@ -6922,6 +7139,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6922
7139
  _options$shareVideoEn,
6923
7140
  shareVideoEnabled,
6924
7141
  remoteMediaManagerConfig,
7142
+ _options$bundlePolicy,
6925
7143
  bundlePolicy,
6926
7144
  _this$remoteMediaMana,
6927
7145
  _yield$this$mediaProp,
@@ -6956,35 +7174,35 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6956
7174
  _selectedCandidatePairChanges,
6957
7175
  _numTransports,
6958
7176
  _iceCandidateErrors,
6959
- _args32 = arguments;
6960
- return _regenerator.default.wrap(function _callee32$(_context32) {
6961
- while (1) switch (_context32.prev = _context32.next) {
7177
+ _args33 = arguments;
7178
+ return _regenerator.default.wrap(function _callee33$(_context33) {
7179
+ while (1) switch (_context33.prev = _context33.next) {
6962
7180
  case 0:
6963
- options = _args32.length > 3 && _args32[3] !== undefined ? _args32[3] : {};
7181
+ options = _args33.length > 3 && _args33[3] !== undefined ? _args33[3] : {};
6964
7182
  this.addMediaData.retriedWithTurnServer = false;
6965
7183
  this.addMediaData.icePhaseCallback = icePhaseCallback;
6966
7184
  this.hasMediaConnectionConnectedAtLeastOnce = false;
6967
7185
  LOG_HEADER = 'Meeting:index#addMedia -->';
6968
7186
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " called with: options=").concat((0, _stringify.default)(options), ", turnServerInfo=").concat((0, _stringify.default)(turnServerInfo), ", forceTurnDiscovery=").concat(forceTurnDiscovery));
6969
7187
  if (!(options.allowMediaInLobby !== true && this.meetingState !== _constants.FULL_STATE.ACTIVE)) {
6970
- _context32.next = 8;
7188
+ _context33.next = 8;
6971
7189
  break;
6972
7190
  }
6973
7191
  throw new _webexErrors.MeetingNotActiveError();
6974
7192
  case 8:
6975
7193
  if (!_util2.default.isUserInLeftState(this.locusInfo)) {
6976
- _context32.next = 10;
7194
+ _context33.next = 10;
6977
7195
  break;
6978
7196
  }
6979
7197
  throw new _webexErrors.UserNotJoinedError();
6980
7198
  case 10:
6981
- localStreams = options.localStreams, _options$audioEnabled = options.audioEnabled, audioEnabled = _options$audioEnabled === void 0 ? true : _options$audioEnabled, _options$videoEnabled = options.videoEnabled, videoEnabled = _options$videoEnabled === void 0 ? true : _options$videoEnabled, _options$shareAudioEn = options.shareAudioEnabled, shareAudioEnabled = _options$shareAudioEn === void 0 ? true : _options$shareAudioEn, _options$shareVideoEn = options.shareVideoEnabled, shareVideoEnabled = _options$shareVideoEn === void 0 ? true : _options$shareVideoEn, remoteMediaManagerConfig = options.remoteMediaManagerConfig, bundlePolicy = options.bundlePolicy;
7199
+ localStreams = options.localStreams, _options$audioEnabled = options.audioEnabled, audioEnabled = _options$audioEnabled === void 0 ? true : _options$audioEnabled, _options$videoEnabled = options.videoEnabled, videoEnabled = _options$videoEnabled === void 0 ? true : _options$videoEnabled, _options$shareAudioEn = options.shareAudioEnabled, shareAudioEnabled = _options$shareAudioEn === void 0 ? true : _options$shareAudioEn, _options$shareVideoEn = options.shareVideoEnabled, shareVideoEnabled = _options$shareVideoEn === void 0 ? true : _options$shareVideoEn, remoteMediaManagerConfig = options.remoteMediaManagerConfig, _options$bundlePolicy = options.bundlePolicy, bundlePolicy = _options$bundlePolicy === void 0 ? 'max-bundle' : _options$bundlePolicy;
6982
7200
  this.allowMediaInLobby = options === null || options === void 0 ? void 0 : options.allowMediaInLobby;
6983
7201
 
6984
7202
  // If the user is unjoined or guest waiting in lobby dont allow the user to addMedia
6985
7203
  // @ts-ignore - isUserUnadmitted coming from SelfUtil
6986
7204
  if (!(this.isUserUnadmitted && !this.wirelessShare && !this.allowMediaInLobby)) {
6987
- _context32.next = 14;
7205
+ _context33.next = 14;
6988
7206
  break;
6989
7207
  }
6990
7208
  throw new _webexErrors.UserInLobbyError();
@@ -7027,45 +7245,45 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7027
7245
  });
7028
7246
  this.audio = (0, _muteState.createMuteState)(_constants.AUDIO, this, audioEnabled);
7029
7247
  this.video = (0, _muteState.createMuteState)(_constants.VIDEO, this, videoEnabled);
7030
- _context32.prev = 18;
7031
- _context32.next = 21;
7248
+ _context33.prev = 18;
7249
+ _context33.next = 21;
7032
7250
  return this.setUpLocalStreamReferences(localStreams);
7033
7251
  case 21:
7034
7252
  this.setMercuryListener();
7035
7253
  this.createStatsAnalyzer();
7036
- _context32.next = 25;
7254
+ _context33.next = 25;
7037
7255
  return this.establishMediaConnection(remoteMediaManagerConfig, bundlePolicy, forceTurnDiscovery, turnServerInfo);
7038
7256
  case 25:
7039
7257
  if (!(audioEnabled || videoEnabled)) {
7040
- _context32.next = 30;
7258
+ _context33.next = 30;
7041
7259
  break;
7042
7260
  }
7043
- _context32.next = 28;
7261
+ _context33.next = 28;
7044
7262
  return Meeting.handleDeviceLogging(audioEnabled, videoEnabled);
7045
7263
  case 28:
7046
- _context32.next = 31;
7264
+ _context33.next = 31;
7047
7265
  break;
7048
7266
  case 30:
7049
7267
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " device logging not required"));
7050
7268
  case 31:
7051
7269
  if (!this.mediaProperties.hasLocalShareStream()) {
7052
- _context32.next = 34;
7270
+ _context33.next = 34;
7053
7271
  break;
7054
7272
  }
7055
- _context32.next = 34;
7273
+ _context33.next = 34;
7056
7274
  return this.enqueueScreenShareFloorRequest();
7057
7275
  case 34:
7058
- _context32.next = 36;
7276
+ _context33.next = 36;
7059
7277
  return this.mediaProperties.getCurrentConnectionInfo();
7060
7278
  case 36:
7061
- _yield$this$mediaProp = _context32.sent;
7279
+ _yield$this$mediaProp = _context33.sent;
7062
7280
  connectionType = _yield$this$mediaProp.connectionType;
7063
7281
  selectedCandidatePairChanges = _yield$this$mediaProp.selectedCandidatePairChanges;
7064
7282
  numTransports = _yield$this$mediaProp.numTransports;
7065
- _context32.next = 42;
7283
+ _context33.next = 42;
7066
7284
  return this.webex.meetings.reachability.getReachabilityMetrics();
7067
7285
  case 42:
7068
- reachabilityStats = _context32.sent;
7286
+ reachabilityStats = _context33.sent;
7069
7287
  iceCandidateErrors = Object.fromEntries(this.iceCandidateErrors);
7070
7288
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_SUCCESS, _objectSpread(_objectSpread(_objectSpread({
7071
7289
  correlation_id: this.correlationId,
@@ -7090,31 +7308,32 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7090
7308
 
7091
7309
  // We can log ReceiveSlot SSRCs only after the SDP exchange, so doing it here:
7092
7310
  (_this$remoteMediaMana = this.remoteMediaManager) === null || _this$remoteMediaMana === void 0 ? void 0 : _this$remoteMediaMana.logAllReceiveSlots();
7093
- _context32.next = 68;
7311
+ this.startPeriodicLogUpload();
7312
+ _context33.next = 69;
7094
7313
  break;
7095
- case 50:
7096
- _context32.prev = 50;
7097
- _context32.t0 = _context32["catch"](18);
7098
- _loggerProxy.default.logger.error("".concat(LOG_HEADER, " failed to establish media connection: "), _context32.t0);
7314
+ case 51:
7315
+ _context33.prev = 51;
7316
+ _context33.t0 = _context33["catch"](18);
7317
+ _loggerProxy.default.logger.error("".concat(LOG_HEADER, " failed to establish media connection: "), _context33.t0);
7099
7318
 
7100
7319
  // @ts-ignore
7101
- _context32.next = 55;
7320
+ _context33.next = 56;
7102
7321
  return this.webex.meetings.reachability.getReachabilityMetrics();
7103
- case 55:
7104
- reachabilityMetrics = _context32.sent;
7105
- _context32.next = 58;
7322
+ case 56:
7323
+ reachabilityMetrics = _context33.sent;
7324
+ _context33.next = 59;
7106
7325
  return this.mediaProperties.getCurrentConnectionInfo();
7107
- case 58:
7108
- _yield$this$mediaProp2 = _context32.sent;
7326
+ case 59:
7327
+ _yield$this$mediaProp2 = _context33.sent;
7109
7328
  _selectedCandidatePairChanges = _yield$this$mediaProp2.selectedCandidatePairChanges;
7110
7329
  _numTransports = _yield$this$mediaProp2.numTransports;
7111
7330
  _iceCandidateErrors = Object.fromEntries(this.iceCandidateErrors);
7112
7331
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_FAILURE, _objectSpread(_objectSpread(_objectSpread({
7113
7332
  correlation_id: this.correlationId,
7114
7333
  locus_id: this.locusUrl.split('/').pop(),
7115
- reason: _context32.t0.message,
7116
- stack: _context32.t0.stack,
7117
- code: _context32.t0.code,
7334
+ reason: _context33.t0.message,
7335
+ stack: _context33.t0.stack,
7336
+ code: _context33.t0.code,
7118
7337
  selectedCandidatePairChanges: _selectedCandidatePairChanges,
7119
7338
  numTransports: _numTransports,
7120
7339
  turnDiscoverySkippedReason: this.turnDiscoverySkippedReason,
@@ -7128,29 +7347,29 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7128
7347
  }, reachabilityMetrics), _iceCandidateErrors), {}, {
7129
7348
  iceCandidatesCount: this.iceCandidatesCount
7130
7349
  }));
7131
- _context32.next = 65;
7350
+ _context33.next = 66;
7132
7351
  return this.cleanUpOnAddMediaFailure();
7133
- case 65:
7352
+ case 66:
7134
7353
  // Upload logs on error while adding media
7135
7354
  _triggerProxy.default.trigger(this, {
7136
7355
  file: 'meeting/index',
7137
7356
  function: 'addMedia'
7138
7357
  }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, this);
7139
- if (_context32.t0 instanceof _internalMediaCore.Errors.SdpError) {
7358
+ if (_context33.t0 instanceof _internalMediaCore.Errors.SdpError) {
7140
7359
  this.leave({
7141
7360
  reason: _constants.MEETING_REMOVED_REASON.MEETING_CONNECTION_FAILED
7142
7361
  });
7143
7362
  }
7144
- throw _context32.t0;
7145
- case 68:
7146
- _context32.prev = 68;
7363
+ throw _context33.t0;
7364
+ case 69:
7365
+ _context33.prev = 69;
7147
7366
  this.addMediaData.icePhaseCallback = DEFAULT_ICE_PHASE_CALLBACK;
7148
- return _context32.finish(68);
7149
- case 71:
7367
+ return _context33.finish(69);
7368
+ case 72:
7150
7369
  case "end":
7151
- return _context32.stop();
7370
+ return _context33.stop();
7152
7371
  }
7153
- }, _callee32, this, [[18, 50, 68, 71]]);
7372
+ }, _callee33, this, [[18, 51, 69, 72]]);
7154
7373
  }));
7155
7374
  function addMediaInternal(_x32, _x33, _x34) {
7156
7375
  return _addMediaInternal.apply(this, arguments);
@@ -7182,7 +7401,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7182
7401
  * @memberof Meeting
7183
7402
  */
7184
7403
  function enqueueMediaUpdate(mediaUpdateType) {
7185
- var _this41 = this;
7404
+ var _this43 = this;
7186
7405
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
7187
7406
  var canUpdateMediaNow = this.canUpdateMedia();
7188
7407
  return new _promise.default(function (resolve, reject) {
@@ -7193,9 +7412,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7193
7412
  options: options
7194
7413
  };
7195
7414
  _loggerProxy.default.logger.log("Meeting:index#enqueueMediaUpdate --> enqueuing media update type=".concat(mediaUpdateType));
7196
- _this41.queuedMediaUpdates.push(queueItem);
7415
+ _this43.queuedMediaUpdates.push(queueItem);
7197
7416
  if (canUpdateMediaNow) {
7198
- _this41.processNextQueuedMediaUpdate();
7417
+ _this43.processNextQueuedMediaUpdate();
7199
7418
  }
7200
7419
  });
7201
7420
  }
@@ -7218,35 +7437,35 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7218
7437
  * @memberof Meeting
7219
7438
  */
7220
7439
  function () {
7221
- var _updateMedia = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee33(options) {
7440
+ var _updateMedia = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee34(options) {
7222
7441
  var audioEnabled, videoEnabled, shareAudioEnabled, shareVideoEnabled, _this$audio3, _this$video3;
7223
- return _regenerator.default.wrap(function _callee33$(_context33) {
7224
- while (1) switch (_context33.prev = _context33.next) {
7442
+ return _regenerator.default.wrap(function _callee34$(_context34) {
7443
+ while (1) switch (_context34.prev = _context34.next) {
7225
7444
  case 0:
7226
7445
  this.checkMediaConnection();
7227
7446
  audioEnabled = options.audioEnabled, videoEnabled = options.videoEnabled, shareAudioEnabled = options.shareAudioEnabled, shareVideoEnabled = options.shareVideoEnabled;
7228
7447
  _loggerProxy.default.logger.log("Meeting:index#updateMedia --> called with options=".concat((0, _stringify.default)(options)));
7229
7448
  if (this.canUpdateMedia()) {
7230
- _context33.next = 5;
7449
+ _context34.next = 5;
7231
7450
  break;
7232
7451
  }
7233
- return _context33.abrupt("return", this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.UPDATE_MEDIA, options));
7452
+ return _context34.abrupt("return", this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.UPDATE_MEDIA, options));
7234
7453
  case 5:
7235
7454
  if (!this.isMultistream) {
7236
- _context33.next = 10;
7455
+ _context34.next = 10;
7237
7456
  break;
7238
7457
  }
7239
7458
  if (!(shareAudioEnabled !== undefined || shareVideoEnabled !== undefined)) {
7240
- _context33.next = 8;
7459
+ _context34.next = 8;
7241
7460
  break;
7242
7461
  }
7243
7462
  throw new Error('toggling shareAudioEnabled or shareVideoEnabled in a multistream meeting is not supported, to control receiving screen share call meeting.remoteMediaManager.setLayout() with appropriate layout');
7244
7463
  case 8:
7245
- _context33.next = 12;
7464
+ _context34.next = 12;
7246
7465
  break;
7247
7466
  case 10:
7248
7467
  if (!(shareAudioEnabled !== undefined)) {
7249
- _context33.next = 12;
7468
+ _context34.next = 12;
7250
7469
  break;
7251
7470
  }
7252
7471
  throw new Error('toggling shareAudioEnabled in a transcoded meeting is not supported as of now');
@@ -7271,18 +7490,18 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7271
7490
  this.mediaProperties.mediaDirection.receiveShare = !!(shareAudioEnabled || shareVideoEnabled);
7272
7491
  }
7273
7492
  if (this.isMultistream) {
7274
- _context33.next = 18;
7493
+ _context34.next = 18;
7275
7494
  break;
7276
7495
  }
7277
- _context33.next = 18;
7496
+ _context34.next = 18;
7278
7497
  return this.updateTranscodedMediaConnection();
7279
7498
  case 18:
7280
- return _context33.abrupt("return", undefined);
7499
+ return _context34.abrupt("return", undefined);
7281
7500
  case 19:
7282
7501
  case "end":
7283
- return _context33.stop();
7502
+ return _context34.stop();
7284
7503
  }
7285
- }, _callee33, this);
7504
+ }, _callee34, this);
7286
7505
  }));
7287
7506
  function updateMedia(_x35) {
7288
7507
  return _updateMedia.apply(this, arguments);
@@ -7300,7 +7519,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7300
7519
  }, {
7301
7520
  key: "acknowledge",
7302
7521
  value: function acknowledge(type) {
7303
- var _this42 = this;
7522
+ var _this44 = this;
7304
7523
  if (!type) {
7305
7524
  return _promise.default.reject(new _parameter.default('Type must be set to acknowledge the meeting.'));
7306
7525
  }
@@ -7312,12 +7531,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7312
7531
  }).then(function (response) {
7313
7532
  return _promise.default.resolve(response);
7314
7533
  }).then(function (response) {
7315
- _this42.meetingFiniteStateMachine.ring(type);
7534
+ _this44.meetingFiniteStateMachine.ring(type);
7316
7535
  // @ts-ignore
7317
- _this42.webex.internal.newMetrics.submitClientEvent({
7536
+ _this44.webex.internal.newMetrics.submitClientEvent({
7318
7537
  name: 'client.alert.displayed',
7319
7538
  options: {
7320
- meetingId: _this42.id
7539
+ meetingId: _this44.id
7321
7540
  }
7322
7541
  });
7323
7542
  return _promise.default.resolve({
@@ -7342,12 +7561,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7342
7561
  }, {
7343
7562
  key: "decline",
7344
7563
  value: function decline(reason) {
7345
- var _this43 = this;
7564
+ var _this45 = this;
7346
7565
  return _util2.default.declineMeeting(this, reason).then(function (decline) {
7347
- _this43.meetingFiniteStateMachine.decline();
7566
+ _this45.meetingFiniteStateMachine.decline();
7348
7567
  return _promise.default.resolve(decline);
7349
7568
  }).catch(function (error) {
7350
- _this43.meetingFiniteStateMachine.fail(error);
7569
+ _this45.meetingFiniteStateMachine.fail(error);
7351
7570
  return _promise.default.reject(error);
7352
7571
  });
7353
7572
  }
@@ -7398,7 +7617,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7398
7617
  }, {
7399
7618
  key: "leave",
7400
7619
  value: function leave() {
7401
- var _this44 = this;
7620
+ var _this46 = this;
7402
7621
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7403
7622
  var leaveReason = options.reason || _constants.MEETING_REMOVED_REASON.CLIENT_LEAVE_REQUEST;
7404
7623
 
@@ -7410,7 +7629,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7410
7629
  var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7411
7630
  return (
7412
7631
  // @ts-ignore
7413
- _this44.webex.internal.newMetrics.submitClientEvent({
7632
+ _this46.webex.internal.newMetrics.submitClientEvent({
7414
7633
  name: 'client.call.leave',
7415
7634
  payload: _objectSpread({
7416
7635
  trigger: 'user-interaction',
@@ -7418,7 +7637,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7418
7637
  leaveReason: options.clientEventLeaveReason
7419
7638
  }, payload),
7420
7639
  options: {
7421
- meetingId: _this44.id
7640
+ meetingId: _this46.id
7422
7641
  }
7423
7642
  })
7424
7643
  );
@@ -7427,24 +7646,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7427
7646
  return _util2.default.leaveMeeting(this, options).then(function (leave) {
7428
7647
  // CA team recommends submitting this *after* locus /leave
7429
7648
  submitLeaveMetric();
7430
- _this44.meetingFiniteStateMachine.leave();
7431
- _this44.clearMeetingData();
7649
+ _this46.meetingFiniteStateMachine.leave();
7650
+ _this46.clearMeetingData();
7432
7651
 
7433
7652
  // upload logs on leave irrespective of meeting delete
7434
- _triggerProxy.default.trigger(_this44, {
7653
+ _triggerProxy.default.trigger(_this46, {
7435
7654
  file: 'meeting/index',
7436
7655
  function: 'leave'
7437
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this44);
7656
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this46);
7438
7657
 
7439
7658
  // TODO: more testing before we remove this code, we are not sure the scenarios for destroy here
7440
- if (_this44.wirelessShare || _this44.guest) {
7659
+ if (_this46.wirelessShare || _this46.guest) {
7441
7660
  // If screen sharing clean the meeting object
7442
- _triggerProxy.default.trigger(_this44, {
7661
+ _triggerProxy.default.trigger(_this46, {
7443
7662
  file: 'meeting/index',
7444
7663
  function: 'leave'
7445
7664
  }, _constants.EVENTS.DESTROY_MEETING, {
7446
7665
  reason: options.reason,
7447
- meetingId: _this44.id
7666
+ meetingId: _this46.id
7448
7667
  });
7449
7668
  }
7450
7669
  _loggerProxy.default.logger.log('Meeting:index#leave --> LEAVE REASON ', leaveReason);
@@ -7461,16 +7680,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7461
7680
  shownToUser: false
7462
7681
  }]
7463
7682
  });
7464
- _this44.meetingFiniteStateMachine.fail(error);
7683
+ _this46.meetingFiniteStateMachine.fail(error);
7465
7684
  _loggerProxy.default.logger.error('Meeting:index#leave --> Failed to leave ', error);
7466
7685
  // upload logs on leave irrespective of meeting delete
7467
- _triggerProxy.default.trigger(_this44, {
7686
+ _triggerProxy.default.trigger(_this46, {
7468
7687
  file: 'meeting/index',
7469
7688
  function: 'leave'
7470
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this44);
7689
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this46);
7471
7690
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_LEAVE_FAILURE, {
7472
- correlation_id: _this44.correlationId,
7473
- locus_id: _this44.locusUrl.split('/').pop(),
7691
+ correlation_id: _this46.correlationId,
7692
+ locus_id: _this46.locusUrl.split('/').pop(),
7474
7693
  reason: error.message,
7475
7694
  stack: error.stack,
7476
7695
  code: error.code
@@ -7490,7 +7709,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7490
7709
  }, {
7491
7710
  key: "startWhiteboardShare",
7492
7711
  value: function startWhiteboardShare(channelUrl, resourceToken) {
7493
- var _this45 = this;
7712
+ var _this47 = this;
7494
7713
  var whiteboard = this.locusInfo.mediaShares.find(function (element) {
7495
7714
  return element.name === 'whiteboard';
7496
7715
  });
@@ -7519,13 +7738,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7519
7738
  body.resourceToken = resourceToken;
7520
7739
  }
7521
7740
  return this.meetingRequest.changeMeetingFloor(body).then(function () {
7522
- _this45.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
7741
+ _this47.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
7523
7742
  return _promise.default.resolve();
7524
7743
  }).catch(function (error) {
7525
7744
  _loggerProxy.default.logger.error('Meeting:index#startWhiteboardShare --> Error ', error);
7526
7745
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_START_WHITEBOARD_SHARE_FAILURE, {
7527
- correlation_id: _this45.correlationId,
7528
- locus_id: _this45.locusUrl.split('/').pop(),
7746
+ correlation_id: _this47.correlationId,
7747
+ locus_id: _this47.locusUrl.split('/').pop(),
7529
7748
  reason: error.message,
7530
7749
  stack: error.stack,
7531
7750
  board: {
@@ -7548,7 +7767,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7548
7767
  }, {
7549
7768
  key: "stopWhiteboardShare",
7550
7769
  value: function stopWhiteboardShare(channelUrl) {
7551
- var _this46 = this;
7770
+ var _this48 = this;
7552
7771
  var whiteboard = this.locusInfo.mediaShares.find(function (element) {
7553
7772
  return element.name === 'whiteboard';
7554
7773
  });
@@ -7571,8 +7790,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7571
7790
  }).catch(function (error) {
7572
7791
  _loggerProxy.default.logger.error('Meeting:index#stopWhiteboardShare --> Error ', error);
7573
7792
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_STOP_WHITEBOARD_SHARE_FAILURE, {
7574
- correlation_id: _this46.correlationId,
7575
- locus_id: _this46.locusUrl.split('/').pop(),
7793
+ correlation_id: _this48.correlationId,
7794
+ locus_id: _this48.locusUrl.split('/').pop(),
7576
7795
  reason: error.message,
7577
7796
  stack: error.stack,
7578
7797
  board: {
@@ -7594,7 +7813,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7594
7813
  }, {
7595
7814
  key: "requestScreenShareFloor",
7596
7815
  value: function requestScreenShareFloor() {
7597
- var _this47 = this;
7816
+ var _this49 = this;
7598
7817
  if (!this.mediaProperties.hasLocalShareStream() || !this.mediaProperties.mediaDirection.sendShare) {
7599
7818
  _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, ")"));
7600
7819
  this.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
@@ -7625,34 +7844,34 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7625
7844
  resourceUrl: this.resourceUrl,
7626
7845
  shareInstanceId: this.localShareInstanceId
7627
7846
  }).then(function () {
7628
- _this47.screenShareFloorState = ScreenShareFloorStatus.GRANTED;
7847
+ _this49.screenShareFloorState = ScreenShareFloorStatus.GRANTED;
7629
7848
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_SUCCESS, {
7630
- correlation_id: _this47.correlationId,
7631
- locus_id: _this47.locusUrl.split('/').pop()
7849
+ correlation_id: _this49.correlationId,
7850
+ locus_id: _this49.locusUrl.split('/').pop()
7632
7851
  });
7633
7852
  return _promise.default.resolve();
7634
7853
  }).catch(function (error) {
7635
7854
  _loggerProxy.default.logger.error('Meeting:index#share --> Error ', error);
7636
7855
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_FAILURE, {
7637
- correlation_id: _this47.correlationId,
7638
- locus_id: _this47.locusUrl.split('/').pop(),
7856
+ correlation_id: _this49.correlationId,
7857
+ locus_id: _this49.locusUrl.split('/').pop(),
7639
7858
  reason: error.message,
7640
7859
  stack: error.stack
7641
7860
  });
7642
7861
 
7643
7862
  // @ts-ignore
7644
- _this47.webex.internal.newMetrics.submitClientEvent({
7863
+ _this49.webex.internal.newMetrics.submitClientEvent({
7645
7864
  name: 'client.share.floor-granted.local',
7646
7865
  payload: {
7647
7866
  mediaType: 'share',
7648
7867
  errors: _util2.default.getChangeMeetingFloorErrorPayload(error.message),
7649
- shareInstanceId: _this47.localShareInstanceId
7868
+ shareInstanceId: _this49.localShareInstanceId
7650
7869
  },
7651
7870
  options: {
7652
- meetingId: _this47.id
7871
+ meetingId: _this49.id
7653
7872
  }
7654
7873
  });
7655
- _this47.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
7874
+ _this49.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
7656
7875
  return _promise.default.reject(error);
7657
7876
  });
7658
7877
  }
@@ -7675,10 +7894,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7675
7894
  }, {
7676
7895
  key: "requestScreenShareFloorIfPending",
7677
7896
  value: function requestScreenShareFloorIfPending() {
7678
- var _this48 = this;
7897
+ var _this50 = this;
7679
7898
  if (this.floorGrantPending && this.state === _constants.MEETING_STATE.STATES.JOINED) {
7680
7899
  this.requestScreenShareFloor().then(function () {
7681
- _this48.floorGrantPending = false;
7900
+ _this50.floorGrantPending = false;
7682
7901
  });
7683
7902
  }
7684
7903
  }
@@ -7692,7 +7911,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7692
7911
  }, {
7693
7912
  key: "releaseScreenShareFloor",
7694
7913
  value: function releaseScreenShareFloor() {
7695
- var _this49 = this;
7914
+ var _this51 = this;
7696
7915
  var content = this.locusInfo.mediaShares.find(function (element) {
7697
7916
  return element.name === _constants.CONTENT;
7698
7917
  });
@@ -7727,8 +7946,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7727
7946
  }).catch(function (error) {
7728
7947
  _loggerProxy.default.logger.error('Meeting:index#releaseScreenShareFloor --> Error ', error);
7729
7948
  _metrics.default.sendBehavioralMetric(_constants2.default.STOP_FLOOR_REQUEST_FAILURE, {
7730
- correlation_id: _this49.correlationId,
7731
- locus_id: _this49.locusUrl.split('/').pop(),
7949
+ correlation_id: _this51.correlationId,
7950
+ locus_id: _this51.locusUrl.split('/').pop(),
7732
7951
  reason: error.message,
7733
7952
  stack: error.stack
7734
7953
  });
@@ -7784,13 +8003,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7784
8003
  * @param {boolean} mutedEnabled
7785
8004
  * @param {boolean} disallowUnmuteEnabled
7786
8005
  * @param {boolean} muteOnEntryEnabled
8006
+ * @param {array} roles
7787
8007
  * @public
7788
8008
  * @memberof Meeting
7789
8009
  */
7790
8010
  }, {
7791
8011
  key: "setMuteAll",
7792
- value: function setMuteAll(mutedEnabled, disallowUnmuteEnabled, muteOnEntryEnabled) {
7793
- return this.controlsOptionsManager.setMuteAll(mutedEnabled, disallowUnmuteEnabled, muteOnEntryEnabled);
8012
+ value: function setMuteAll(mutedEnabled, disallowUnmuteEnabled, muteOnEntryEnabled, roles) {
8013
+ return this.controlsOptionsManager.setMuteAll(mutedEnabled, disallowUnmuteEnabled, muteOnEntryEnabled, roles);
7794
8014
  }
7795
8015
 
7796
8016
  /**
@@ -7907,7 +8127,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7907
8127
  }, {
7908
8128
  key: "changeVideoLayout",
7909
8129
  value: function changeVideoLayout(layoutType) {
7910
- var _this50 = this;
8130
+ var _this52 = this;
7911
8131
  var renderInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
7912
8132
  var main = renderInfo.main,
7913
8133
  content = renderInfo.content;
@@ -7961,7 +8181,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7961
8181
  }
7962
8182
  this.lastVideoLayoutInfo = (0, _lodash.cloneDeep)(layoutInfo);
7963
8183
  this.locusInfo.once(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED, function (envelope) {
7964
- _triggerProxy.default.trigger(_this50, {
8184
+ _triggerProxy.default.trigger(_this52, {
7965
8185
  file: 'meeting/index',
7966
8186
  function: 'changeVideoLayout'
7967
8187
  }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_LAYOUT_UPDATE, {
@@ -8077,7 +8297,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8077
8297
  }, {
8078
8298
  key: "endMeetingForAll",
8079
8299
  value: function endMeetingForAll() {
8080
- var _this51 = this;
8300
+ var _this53 = this;
8081
8301
  // @ts-ignore
8082
8302
  this.webex.internal.newMetrics.submitClientEvent({
8083
8303
  name: 'client.call.leave',
@@ -8095,25 +8315,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8095
8315
  locus_id: this.locusId
8096
8316
  });
8097
8317
  return _util2.default.endMeetingForAll(this).then(function (end) {
8098
- _this51.meetingFiniteStateMachine.end();
8099
- _this51.clearMeetingData();
8318
+ _this53.meetingFiniteStateMachine.end();
8319
+ _this53.clearMeetingData();
8100
8320
  // upload logs on leave irrespective of meeting delete
8101
- _triggerProxy.default.trigger(_this51, {
8321
+ _triggerProxy.default.trigger(_this53, {
8102
8322
  file: 'meeting/index',
8103
8323
  function: 'endMeetingForAll'
8104
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this51);
8324
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this53);
8105
8325
  return end;
8106
8326
  }).catch(function (error) {
8107
- _this51.meetingFiniteStateMachine.fail(error);
8327
+ _this53.meetingFiniteStateMachine.fail(error);
8108
8328
  _loggerProxy.default.logger.error('Meeting:index#endMeetingForAll --> Failed to end meeting ', error);
8109
8329
  // upload logs on leave irrespective of meeting delete
8110
- _triggerProxy.default.trigger(_this51, {
8330
+ _triggerProxy.default.trigger(_this53, {
8111
8331
  file: 'meeting/index',
8112
8332
  function: 'endMeetingForAll'
8113
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this51);
8333
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this53);
8114
8334
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_END_ALL_FAILURE, {
8115
- correlation_id: _this51.correlationId,
8116
- locus_id: _this51.locusUrl.split('/').pop(),
8335
+ correlation_id: _this53.correlationId,
8336
+ locus_id: _this53.locusUrl.split('/').pop(),
8117
8337
  reason: error.message,
8118
8338
  stack: error.stack,
8119
8339
  code: error.code
@@ -8202,37 +8422,37 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8202
8422
  }, {
8203
8423
  key: "enableMusicMode",
8204
8424
  value: (function () {
8205
- var _enableMusicMode = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee34(shouldEnableMusicMode) {
8206
- return _regenerator.default.wrap(function _callee34$(_context34) {
8207
- while (1) switch (_context34.prev = _context34.next) {
8425
+ var _enableMusicMode = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee35(shouldEnableMusicMode) {
8426
+ return _regenerator.default.wrap(function _callee35$(_context35) {
8427
+ while (1) switch (_context35.prev = _context35.next) {
8208
8428
  case 0:
8209
8429
  this.checkMediaConnection();
8210
8430
  if (this.isMultistream) {
8211
- _context34.next = 3;
8431
+ _context35.next = 3;
8212
8432
  break;
8213
8433
  }
8214
8434
  throw new Error('enableMusicMode() only supported with multistream');
8215
8435
  case 3:
8216
8436
  if (!shouldEnableMusicMode) {
8217
- _context34.next = 8;
8437
+ _context35.next = 8;
8218
8438
  break;
8219
8439
  }
8220
- _context34.next = 6;
8440
+ _context35.next = 6;
8221
8441
  return this.sendSlotManager.setCodecParameters(_internalMediaCore.MediaType.AudioMain, {
8222
8442
  maxaveragebitrate: '64000',
8223
8443
  maxplaybackrate: '48000'
8224
8444
  });
8225
8445
  case 6:
8226
- _context34.next = 10;
8446
+ _context35.next = 10;
8227
8447
  break;
8228
8448
  case 8:
8229
- _context34.next = 10;
8449
+ _context35.next = 10;
8230
8450
  return this.sendSlotManager.deleteCodecParameters(_internalMediaCore.MediaType.AudioMain, ['maxaveragebitrate', 'maxplaybackrate']);
8231
8451
  case 10:
8232
8452
  case "end":
8233
- return _context34.stop();
8453
+ return _context35.stop();
8234
8454
  }
8235
- }, _callee34, this);
8455
+ }, _callee35, this);
8236
8456
  }));
8237
8457
  function enableMusicMode(_x36) {
8238
8458
  return _enableMusicMode.apply(this, arguments);
@@ -8255,7 +8475,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8255
8475
  _this$mediaProperties41,
8256
8476
  _this$mediaProperties42,
8257
8477
  _this$mediaProperties43,
8258
- _this52 = this;
8478
+ _this54 = this;
8259
8479
  var LOG_HEADER = 'Meeting:index#updateTranscodedMediaConnection -->';
8260
8480
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " starting"));
8261
8481
  if (!this.canUpdateMedia()) {
@@ -8280,8 +8500,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8280
8500
  }).catch(function (error) {
8281
8501
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " Error: "), error);
8282
8502
  _metrics.default.sendBehavioralMetric(_constants2.default.UPDATE_MEDIA_FAILURE, {
8283
- correlation_id: _this52.correlationId,
8284
- locus_id: _this52.locusUrl.split('/').pop(),
8503
+ correlation_id: _this54.correlationId,
8504
+ locus_id: _this54.locusUrl.split('/').pop(),
8285
8505
  reason: error.message,
8286
8506
  stack: error.stack
8287
8507
  });
@@ -8325,25 +8545,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8325
8545
  }, {
8326
8546
  key: "publishStream",
8327
8547
  value: (function () {
8328
- var _publishStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee35(mediaType, stream) {
8329
- return _regenerator.default.wrap(function _callee35$(_context35) {
8330
- while (1) switch (_context35.prev = _context35.next) {
8548
+ var _publishStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee36(mediaType, stream) {
8549
+ return _regenerator.default.wrap(function _callee36$(_context36) {
8550
+ while (1) switch (_context36.prev = _context36.next) {
8331
8551
  case 0:
8332
8552
  if (stream) {
8333
- _context35.next = 2;
8553
+ _context36.next = 2;
8334
8554
  break;
8335
8555
  }
8336
- return _context35.abrupt("return");
8556
+ return _context36.abrupt("return");
8337
8557
  case 2:
8338
8558
  if (!this.mediaProperties.webrtcMediaConnection) {
8339
- _context35.next = 7;
8559
+ _context36.next = 7;
8340
8560
  break;
8341
8561
  }
8342
8562
  if (!(this.isMultistream && this.mediaProperties.webrtcMediaConnection)) {
8343
- _context35.next = 6;
8563
+ _context36.next = 6;
8344
8564
  break;
8345
8565
  }
8346
- _context35.next = 6;
8566
+ _context36.next = 6;
8347
8567
  return this.sendSlotManager.publishStream(mediaType, stream);
8348
8568
  case 6:
8349
8569
  this.emitPublishStateChangeEvent({
@@ -8354,9 +8574,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8354
8574
  });
8355
8575
  case 7:
8356
8576
  case "end":
8357
- return _context35.stop();
8577
+ return _context36.stop();
8358
8578
  }
8359
- }, _callee35, this);
8579
+ }, _callee36, this);
8360
8580
  }));
8361
8581
  function publishStream(_x37, _x38) {
8362
8582
  return _publishStream.apply(this, arguments);
@@ -8374,21 +8594,21 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8374
8594
  }, {
8375
8595
  key: "unpublishStream",
8376
8596
  value: (function () {
8377
- var _unpublishStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee36(mediaType, stream) {
8378
- return _regenerator.default.wrap(function _callee36$(_context36) {
8379
- while (1) switch (_context36.prev = _context36.next) {
8597
+ var _unpublishStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee37(mediaType, stream) {
8598
+ return _regenerator.default.wrap(function _callee37$(_context37) {
8599
+ while (1) switch (_context37.prev = _context37.next) {
8380
8600
  case 0:
8381
8601
  if (stream) {
8382
- _context36.next = 2;
8602
+ _context37.next = 2;
8383
8603
  break;
8384
8604
  }
8385
- return _context36.abrupt("return");
8605
+ return _context37.abrupt("return");
8386
8606
  case 2:
8387
8607
  if (!(this.isMultistream && this.mediaProperties.webrtcMediaConnection)) {
8388
- _context36.next = 5;
8608
+ _context37.next = 5;
8389
8609
  break;
8390
8610
  }
8391
- _context36.next = 5;
8611
+ _context37.next = 5;
8392
8612
  return this.sendSlotManager.unpublishStream(mediaType);
8393
8613
  case 5:
8394
8614
  this.emitPublishStateChangeEvent({
@@ -8399,9 +8619,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8399
8619
  });
8400
8620
  case 6:
8401
8621
  case "end":
8402
- return _context36.stop();
8622
+ return _context37.stop();
8403
8623
  }
8404
- }, _callee36, this);
8624
+ }, _callee37, this);
8405
8625
  }));
8406
8626
  function unpublishStream(_x39, _x40) {
8407
8627
  return _unpublishStream.apply(this, arguments);
@@ -8418,19 +8638,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8418
8638
  }, {
8419
8639
  key: "publishStreams",
8420
8640
  value: (function () {
8421
- var _publishStreams = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee37(streams) {
8641
+ var _publishStreams = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee38(streams) {
8422
8642
  var _streams$screenShare, _streams$screenShare2, _streams$screenShare3, _streams$screenShare4, _streams$screenShare5, _streams$screenShare6;
8423
8643
  var streamChecks, _i, _streamChecks, _streamChecks$_i, stream, name, floorRequestNeeded, _streams$screenShare7;
8424
- return _regenerator.default.wrap(function _callee37$(_context37) {
8425
- while (1) switch (_context37.prev = _context37.next) {
8644
+ return _regenerator.default.wrap(function _callee38$(_context38) {
8645
+ while (1) switch (_context38.prev = _context38.next) {
8426
8646
  case 0:
8427
8647
  _loggerProxy.default.logger.info("Meeting:index#publishStreams --> called with: ".concat((0, _stringify.default)(streams)));
8428
8648
  this.checkMediaConnection();
8429
8649
  if (!(!streams.microphone && !streams.camera && !((_streams$screenShare = streams.screenShare) !== null && _streams$screenShare !== void 0 && _streams$screenShare.audio) && !((_streams$screenShare2 = streams.screenShare) !== null && _streams$screenShare2 !== void 0 && _streams$screenShare2.video))) {
8430
- _context37.next = 4;
8650
+ _context38.next = 4;
8431
8651
  break;
8432
8652
  }
8433
- return _context37.abrupt("return");
8653
+ return _context38.abrupt("return");
8434
8654
  case 4:
8435
8655
  streamChecks = [{
8436
8656
  stream: streams === null || streams === void 0 ? void 0 : streams.microphone,
@@ -8448,62 +8668,62 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8448
8668
  _i = 0, _streamChecks = streamChecks;
8449
8669
  case 6:
8450
8670
  if (!(_i < _streamChecks.length)) {
8451
- _context37.next = 13;
8671
+ _context38.next = 13;
8452
8672
  break;
8453
8673
  }
8454
8674
  _streamChecks$_i = _streamChecks[_i], stream = _streamChecks$_i.stream, name = _streamChecks$_i.name;
8455
8675
  if (!((stream === null || stream === void 0 ? void 0 : stream.readyState) === 'ended')) {
8456
- _context37.next = 10;
8676
+ _context38.next = 10;
8457
8677
  break;
8458
8678
  }
8459
8679
  throw new Error("Attempted to publish ".concat(name, " stream with ended readyState, correlationId=").concat(this.correlationId));
8460
8680
  case 10:
8461
8681
  _i++;
8462
- _context37.next = 6;
8682
+ _context38.next = 6;
8463
8683
  break;
8464
8684
  case 13:
8465
8685
  floorRequestNeeded = false; // Screenshare Audio is supported only in multi stream. So we check for screenshare audio presence only if it's a multi stream meeting
8466
8686
  if (!(this.isMultistream && (_streams$screenShare5 = streams.screenShare) !== null && _streams$screenShare5 !== void 0 && _streams$screenShare5.audio)) {
8467
- _context37.next = 18;
8687
+ _context38.next = 18;
8468
8688
  break;
8469
8689
  }
8470
- _context37.next = 17;
8690
+ _context38.next = 17;
8471
8691
  return this.setLocalShareAudioStream(streams.screenShare.audio);
8472
8692
  case 17:
8473
8693
  floorRequestNeeded = this.screenShareFloorState === ScreenShareFloorStatus.RELEASED;
8474
8694
  case 18:
8475
8695
  if (!((_streams$screenShare6 = streams.screenShare) !== null && _streams$screenShare6 !== void 0 && _streams$screenShare6.video)) {
8476
- _context37.next = 22;
8696
+ _context38.next = 22;
8477
8697
  break;
8478
8698
  }
8479
- _context37.next = 21;
8699
+ _context38.next = 21;
8480
8700
  return this.setLocalShareVideoStream((_streams$screenShare7 = streams.screenShare) === null || _streams$screenShare7 === void 0 ? void 0 : _streams$screenShare7.video);
8481
8701
  case 21:
8482
8702
  floorRequestNeeded = this.screenShareFloorState === ScreenShareFloorStatus.RELEASED;
8483
8703
  case 22:
8484
8704
  if (!streams.microphone) {
8485
- _context37.next = 25;
8705
+ _context38.next = 25;
8486
8706
  break;
8487
8707
  }
8488
- _context37.next = 25;
8708
+ _context38.next = 25;
8489
8709
  return this.setLocalAudioStream(streams.microphone);
8490
8710
  case 25:
8491
8711
  if (!streams.camera) {
8492
- _context37.next = 28;
8712
+ _context38.next = 28;
8493
8713
  break;
8494
8714
  }
8495
- _context37.next = 28;
8715
+ _context38.next = 28;
8496
8716
  return this.setLocalVideoStream(streams.camera);
8497
8717
  case 28:
8498
8718
  if (this.isMultistream) {
8499
- _context37.next = 31;
8719
+ _context38.next = 31;
8500
8720
  break;
8501
8721
  }
8502
- _context37.next = 31;
8722
+ _context38.next = 31;
8503
8723
  return this.updateTranscodedMediaConnection();
8504
8724
  case 31:
8505
8725
  if (!floorRequestNeeded) {
8506
- _context37.next = 37;
8726
+ _context38.next = 37;
8507
8727
  break;
8508
8728
  }
8509
8729
  this.localShareInstanceId = _uuid.default.v4();
@@ -8527,13 +8747,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8527
8747
  // we're sending the http request to Locus to request the screen share floor
8528
8748
  // only after the SDP update, because that's how it's always been done for transcoded meetings
8529
8749
  // and also if sharing from the start, we need confluence to have been created
8530
- _context37.next = 37;
8750
+ _context38.next = 37;
8531
8751
  return this.enqueueScreenShareFloorRequest();
8532
8752
  case 37:
8533
8753
  case "end":
8534
- return _context37.stop();
8754
+ return _context38.stop();
8535
8755
  }
8536
- }, _callee37, this);
8756
+ }, _callee38, this);
8537
8757
  }));
8538
8758
  function publishStreams(_x41) {
8539
8759
  return _publishStreams.apply(this, arguments);
@@ -8550,10 +8770,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8550
8770
  }, {
8551
8771
  key: "unpublishStreams",
8552
8772
  value: (function () {
8553
- var _unpublishStreams = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee38(streams) {
8773
+ var _unpublishStreams = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee39(streams) {
8554
8774
  var promises, _iterator, _step, stream;
8555
- return _regenerator.default.wrap(function _callee38$(_context38) {
8556
- while (1) switch (_context38.prev = _context38.next) {
8775
+ return _regenerator.default.wrap(function _callee39$(_context39) {
8776
+ while (1) switch (_context39.prev = _context39.next) {
8557
8777
  case 0:
8558
8778
  _loggerProxy.default.logger.info("Meeting:index#unpublishStreams --> called with: ".concat((0, _stringify.default)(streams)));
8559
8779
  this.checkMediaConnection();
@@ -8585,7 +8805,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8585
8805
  if (!this.isMultistream) {
8586
8806
  promises.push(this.updateTranscodedMediaConnection());
8587
8807
  }
8588
- _context38.next = 8;
8808
+ _context39.next = 8;
8589
8809
  return _promise.default.all(promises);
8590
8810
  case 8:
8591
8811
  // we're allowing for the SDK to support just audio share as well
@@ -8606,9 +8826,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8606
8826
  }
8607
8827
  case 9:
8608
8828
  case "end":
8609
- return _context38.stop();
8829
+ return _context39.stop();
8610
8830
  }
8611
- }, _callee38, this);
8831
+ }, _callee39, this);
8612
8832
  }));
8613
8833
  function unpublishStreams(_x42) {
8614
8834
  return _unpublishStreams.apply(this, arguments);
@@ -8670,55 +8890,55 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8670
8890
  }], [{
8671
8891
  key: "handleDeviceLogging",
8672
8892
  value: (function () {
8673
- var _handleDeviceLogging = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee39(isAudioEnabled, isVideoEnabled) {
8893
+ var _handleDeviceLogging = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee40(isAudioEnabled, isVideoEnabled) {
8674
8894
  var devices;
8675
- return _regenerator.default.wrap(function _callee39$(_context39) {
8676
- while (1) switch (_context39.prev = _context39.next) {
8895
+ return _regenerator.default.wrap(function _callee40$(_context40) {
8896
+ while (1) switch (_context40.prev = _context40.next) {
8677
8897
  case 0:
8678
- _context39.prev = 0;
8898
+ _context40.prev = 0;
8679
8899
  devices = [];
8680
8900
  if (!(isVideoEnabled && isAudioEnabled)) {
8681
- _context39.next = 8;
8901
+ _context40.next = 8;
8682
8902
  break;
8683
8903
  }
8684
- _context39.next = 5;
8904
+ _context40.next = 5;
8685
8905
  return (0, _mediaHelpers.getDevices)();
8686
8906
  case 5:
8687
- devices = _context39.sent;
8688
- _context39.next = 18;
8907
+ devices = _context40.sent;
8908
+ _context40.next = 18;
8689
8909
  break;
8690
8910
  case 8:
8691
8911
  if (!isVideoEnabled) {
8692
- _context39.next = 14;
8912
+ _context40.next = 14;
8693
8913
  break;
8694
8914
  }
8695
- _context39.next = 11;
8915
+ _context40.next = 11;
8696
8916
  return (0, _mediaHelpers.getDevices)(_media.default.DeviceKind.VIDEO_INPUT);
8697
8917
  case 11:
8698
- devices = _context39.sent;
8699
- _context39.next = 18;
8918
+ devices = _context40.sent;
8919
+ _context40.next = 18;
8700
8920
  break;
8701
8921
  case 14:
8702
8922
  if (!isAudioEnabled) {
8703
- _context39.next = 18;
8923
+ _context40.next = 18;
8704
8924
  break;
8705
8925
  }
8706
- _context39.next = 17;
8926
+ _context40.next = 17;
8707
8927
  return (0, _mediaHelpers.getDevices)(_media.default.DeviceKind.AUDIO_INPUT);
8708
8928
  case 17:
8709
- devices = _context39.sent;
8929
+ devices = _context40.sent;
8710
8930
  case 18:
8711
8931
  _util2.default.handleDeviceLogging(devices);
8712
- _context39.next = 23;
8932
+ _context40.next = 23;
8713
8933
  break;
8714
8934
  case 21:
8715
- _context39.prev = 21;
8716
- _context39.t0 = _context39["catch"](0);
8935
+ _context40.prev = 21;
8936
+ _context40.t0 = _context40["catch"](0);
8717
8937
  case 23:
8718
8938
  case "end":
8719
- return _context39.stop();
8939
+ return _context40.stop();
8720
8940
  }
8721
- }, _callee39, null, [[0, 21]]);
8941
+ }, _callee40, null, [[0, 21]]);
8722
8942
  }));
8723
8943
  function handleDeviceLogging(_x43, _x44) {
8724
8944
  return _handleDeviceLogging.apply(this, arguments);