@webex/plugin-meetings 3.8.1 → 3.9.0-next.2

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 (290) hide show
  1. package/README.md +26 -13
  2. package/dist/breakouts/breakout.js +1 -1
  3. package/dist/breakouts/index.js +1 -1
  4. package/dist/constants.js +32 -3
  5. package/dist/constants.js.map +1 -1
  6. package/dist/controls-options-manager/enums.js +1 -0
  7. package/dist/controls-options-manager/enums.js.map +1 -1
  8. package/dist/controls-options-manager/types.js.map +1 -1
  9. package/dist/controls-options-manager/util.js +26 -0
  10. package/dist/controls-options-manager/util.js.map +1 -1
  11. package/dist/interpretation/index.js +1 -1
  12. package/dist/interpretation/siLanguage.js +1 -1
  13. package/dist/locus-info/controlsUtils.js +11 -3
  14. package/dist/locus-info/controlsUtils.js.map +1 -1
  15. package/dist/locus-info/index.js +69 -85
  16. package/dist/locus-info/index.js.map +1 -1
  17. package/dist/media/index.js +2 -2
  18. package/dist/media/index.js.map +1 -1
  19. package/dist/meeting/brbState.js +17 -14
  20. package/dist/meeting/brbState.js.map +1 -1
  21. package/dist/meeting/in-meeting-actions.js +11 -1
  22. package/dist/meeting/in-meeting-actions.js.map +1 -1
  23. package/dist/meeting/index.js +476 -284
  24. package/dist/meeting/index.js.map +1 -1
  25. package/dist/meeting/request.js +19 -0
  26. package/dist/meeting/request.js.map +1 -1
  27. package/dist/meeting/request.type.js.map +1 -1
  28. package/dist/{rtcMetrics/constants.js → meeting/type.js} +1 -5
  29. package/dist/meeting/type.js.map +1 -0
  30. package/dist/meeting/util.js +68 -2
  31. package/dist/meeting/util.js.map +1 -1
  32. package/dist/meetings/index.js +35 -33
  33. package/dist/meetings/index.js.map +1 -1
  34. package/dist/members/index.js +11 -9
  35. package/dist/members/index.js.map +1 -1
  36. package/dist/members/request.js +3 -3
  37. package/dist/members/request.js.map +1 -1
  38. package/dist/members/util.js +18 -6
  39. package/dist/members/util.js.map +1 -1
  40. package/dist/metrics/constants.js +1 -0
  41. package/dist/metrics/constants.js.map +1 -1
  42. package/dist/multistream/mediaRequestManager.js +1 -1
  43. package/dist/multistream/mediaRequestManager.js.map +1 -1
  44. package/dist/multistream/remoteMedia.js +34 -5
  45. package/dist/multistream/remoteMedia.js.map +1 -1
  46. package/dist/multistream/remoteMediaGroup.js +42 -2
  47. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  48. package/dist/multistream/sendSlotManager.js +32 -2
  49. package/dist/multistream/sendSlotManager.js.map +1 -1
  50. package/dist/reachability/index.js +5 -10
  51. package/dist/reachability/index.js.map +1 -1
  52. package/dist/types/constants.d.ts +28 -0
  53. package/dist/types/controls-options-manager/enums.d.ts +2 -1
  54. package/dist/types/controls-options-manager/types.d.ts +4 -1
  55. package/dist/types/locus-info/index.d.ts +0 -9
  56. package/dist/types/meeting/brbState.d.ts +0 -1
  57. package/dist/types/meeting/in-meeting-actions.d.ts +10 -0
  58. package/dist/types/meeting/index.d.ts +47 -19
  59. package/dist/types/meeting/request.d.ts +9 -1
  60. package/dist/types/meeting/request.type.d.ts +74 -0
  61. package/dist/types/meeting/type.d.ts +9 -0
  62. package/dist/types/meeting/util.d.ts +3 -0
  63. package/dist/types/members/index.d.ts +10 -7
  64. package/dist/types/members/request.d.ts +1 -1
  65. package/dist/types/members/util.d.ts +7 -3
  66. package/dist/types/metrics/constants.d.ts +1 -0
  67. package/dist/types/multistream/remoteMedia.d.ts +20 -1
  68. package/dist/types/multistream/remoteMediaGroup.d.ts +11 -0
  69. package/dist/types/multistream/sendSlotManager.d.ts +16 -0
  70. package/dist/types/reachability/index.d.ts +2 -2
  71. package/dist/webinar/index.js +1 -1
  72. package/package.json +24 -25
  73. package/src/constants.ts +32 -2
  74. package/src/controls-options-manager/enums.ts +1 -0
  75. package/src/controls-options-manager/types.ts +6 -1
  76. package/src/controls-options-manager/util.ts +31 -0
  77. package/src/locus-info/controlsUtils.ts +15 -0
  78. package/src/locus-info/index.ts +89 -86
  79. package/src/media/index.ts +2 -2
  80. package/src/meeting/brbState.ts +13 -9
  81. package/src/meeting/in-meeting-actions.ts +21 -0
  82. package/src/meeting/index.ts +271 -71
  83. package/src/meeting/request.ts +16 -0
  84. package/src/meeting/request.type.ts +64 -0
  85. package/src/meeting/type.ts +9 -0
  86. package/src/meeting/util.ts +73 -2
  87. package/src/meetings/index.ts +3 -2
  88. package/src/members/index.ts +13 -10
  89. package/src/members/request.ts +2 -2
  90. package/src/members/util.ts +16 -4
  91. package/src/metrics/constants.ts +1 -0
  92. package/src/multistream/mediaRequestManager.ts +7 -7
  93. package/src/multistream/remoteMedia.ts +34 -4
  94. package/src/multistream/remoteMediaGroup.ts +37 -2
  95. package/src/multistream/sendSlotManager.ts +34 -2
  96. package/src/reachability/index.ts +5 -13
  97. package/test/unit/spec/controls-options-manager/util.js +58 -0
  98. package/test/unit/spec/locus-info/controlsUtils.js +52 -0
  99. package/test/unit/spec/locus-info/index.js +240 -82
  100. package/test/unit/spec/media/index.ts +107 -0
  101. package/test/unit/spec/meeting/brbState.ts +23 -4
  102. package/test/unit/spec/meeting/in-meeting-actions.ts +10 -0
  103. package/test/unit/spec/meeting/index.js +954 -85
  104. package/test/unit/spec/meeting/request.js +71 -0
  105. package/test/unit/spec/meeting/utils.js +122 -1
  106. package/test/unit/spec/meetings/index.js +2 -0
  107. package/test/unit/spec/members/index.js +68 -9
  108. package/test/unit/spec/members/request.js +2 -2
  109. package/test/unit/spec/members/utils.js +27 -7
  110. package/test/unit/spec/multistream/mediaRequestManager.ts +19 -6
  111. package/test/unit/spec/multistream/remoteMedia.ts +66 -2
  112. package/test/unit/spec/multistream/sendSlotManager.ts +59 -0
  113. package/test/unit/spec/reachability/index.ts +2 -6
  114. package/dist/annotation/annotation.types.d.ts +0 -42
  115. package/dist/annotation/constants.d.ts +0 -31
  116. package/dist/annotation/index.d.ts +0 -117
  117. package/dist/breakouts/breakout.d.ts +0 -8
  118. package/dist/breakouts/collection.d.ts +0 -5
  119. package/dist/breakouts/edit-lock-error.d.ts +0 -15
  120. package/dist/breakouts/events.d.ts +0 -8
  121. package/dist/breakouts/index.d.ts +0 -5
  122. package/dist/breakouts/request.d.ts +0 -22
  123. package/dist/breakouts/utils.d.ts +0 -15
  124. package/dist/common/browser-detection.d.ts +0 -9
  125. package/dist/common/collection.d.ts +0 -48
  126. package/dist/common/config.d.ts +0 -2
  127. package/dist/common/errors/captcha-error.d.ts +0 -15
  128. package/dist/common/errors/intent-to-join.d.ts +0 -16
  129. package/dist/common/errors/join-meeting.d.ts +0 -17
  130. package/dist/common/errors/media.d.ts +0 -15
  131. package/dist/common/errors/no-meeting-info.d.ts +0 -14
  132. package/dist/common/errors/parameter.d.ts +0 -15
  133. package/dist/common/errors/password-error.d.ts +0 -15
  134. package/dist/common/errors/permission.d.ts +0 -14
  135. package/dist/common/errors/reclaim-host-role-error.d.ts +0 -60
  136. package/dist/common/errors/reclaim-host-role-error.js +0 -158
  137. package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
  138. package/dist/common/errors/reclaim-host-role-errors.d.ts +0 -60
  139. package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
  140. package/dist/common/errors/reconnection-in-progress.js +0 -35
  141. package/dist/common/errors/reconnection-in-progress.js.map +0 -1
  142. package/dist/common/errors/reconnection.d.ts +0 -15
  143. package/dist/common/errors/stats.d.ts +0 -15
  144. package/dist/common/errors/webex-errors.d.ts +0 -81
  145. package/dist/common/errors/webex-meetings-error.d.ts +0 -20
  146. package/dist/common/events/events-scope.d.ts +0 -17
  147. package/dist/common/events/events.d.ts +0 -12
  148. package/dist/common/events/trigger-proxy.d.ts +0 -2
  149. package/dist/common/events/util.d.ts +0 -2
  150. package/dist/common/logs/logger-config.d.ts +0 -2
  151. package/dist/common/logs/logger-proxy.d.ts +0 -2
  152. package/dist/common/logs/request.d.ts +0 -34
  153. package/dist/common/queue.d.ts +0 -32
  154. package/dist/config.d.ts +0 -73
  155. package/dist/constants.d.ts +0 -952
  156. package/dist/controls-options-manager/constants.d.ts +0 -4
  157. package/dist/controls-options-manager/enums.d.ts +0 -5
  158. package/dist/controls-options-manager/index.d.ts +0 -120
  159. package/dist/controls-options-manager/types.d.ts +0 -43
  160. package/dist/controls-options-manager/util.d.ts +0 -7
  161. package/dist/index.d.ts +0 -4
  162. package/dist/interceptors/index.d.ts +0 -2
  163. package/dist/interceptors/locusRetry.d.ts +0 -27
  164. package/dist/interpretation/collection.d.ts +0 -5
  165. package/dist/interpretation/index.d.ts +0 -5
  166. package/dist/interpretation/siLanguage.d.ts +0 -5
  167. package/dist/locus-info/controlsUtils.d.ts +0 -2
  168. package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
  169. package/dist/locus-info/fullState.d.ts +0 -2
  170. package/dist/locus-info/hostUtils.d.ts +0 -2
  171. package/dist/locus-info/index.d.ts +0 -269
  172. package/dist/locus-info/infoUtils.d.ts +0 -2
  173. package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
  174. package/dist/locus-info/parser.d.ts +0 -212
  175. package/dist/locus-info/selfUtils.d.ts +0 -2
  176. package/dist/media/index.d.ts +0 -32
  177. package/dist/media/properties.d.ts +0 -108
  178. package/dist/media/util.d.ts +0 -2
  179. package/dist/mediaQualityMetrics/config.d.ts +0 -233
  180. package/dist/mediaQualityMetrics/config.js +0 -513
  181. package/dist/mediaQualityMetrics/config.js.map +0 -1
  182. package/dist/meeting/effectsState.d.ts +0 -42
  183. package/dist/meeting/effectsState.js +0 -260
  184. package/dist/meeting/effectsState.js.map +0 -1
  185. package/dist/meeting/in-meeting-actions.d.ts +0 -79
  186. package/dist/meeting/index.d.ts +0 -1622
  187. package/dist/meeting/locusMediaRequest.d.ts +0 -74
  188. package/dist/meeting/muteState.d.ts +0 -116
  189. package/dist/meeting/request.d.ts +0 -257
  190. package/dist/meeting/request.type.d.ts +0 -11
  191. package/dist/meeting/state.d.ts +0 -9
  192. package/dist/meeting/util.d.ts +0 -2
  193. package/dist/meeting/voicea-meeting.d.ts +0 -16
  194. package/dist/meeting-info/collection.d.ts +0 -20
  195. package/dist/meeting-info/index.d.ts +0 -57
  196. package/dist/meeting-info/meeting-info-v2.d.ts +0 -93
  197. package/dist/meeting-info/request.d.ts +0 -22
  198. package/dist/meeting-info/util.d.ts +0 -2
  199. package/dist/meeting-info/utilv2.d.ts +0 -2
  200. package/dist/meetings/collection.d.ts +0 -23
  201. package/dist/meetings/index.d.ts +0 -296
  202. package/dist/meetings/meetings.types.d.ts +0 -4
  203. package/dist/meetings/request.d.ts +0 -27
  204. package/dist/meetings/util.d.ts +0 -18
  205. package/dist/member/index.d.ts +0 -148
  206. package/dist/member/member.types.d.ts +0 -11
  207. package/dist/member/member.types.js +0 -18
  208. package/dist/member/member.types.js.map +0 -1
  209. package/dist/member/types.d.ts +0 -32
  210. package/dist/member/util.d.ts +0 -2
  211. package/dist/members/collection.d.ts +0 -24
  212. package/dist/members/index.d.ts +0 -308
  213. package/dist/members/request.d.ts +0 -58
  214. package/dist/members/types.d.ts +0 -25
  215. package/dist/members/util.d.ts +0 -2
  216. package/dist/metrics/config.d.ts +0 -169
  217. package/dist/metrics/config.js +0 -289
  218. package/dist/metrics/config.js.map +0 -1
  219. package/dist/metrics/constants.d.ts +0 -59
  220. package/dist/metrics/index.d.ts +0 -152
  221. package/dist/multistream/mediaRequestManager.d.ts +0 -119
  222. package/dist/multistream/receiveSlot.d.ts +0 -68
  223. package/dist/multistream/receiveSlotManager.d.ts +0 -56
  224. package/dist/multistream/remoteMedia.d.ts +0 -72
  225. package/dist/multistream/remoteMediaGroup.d.ts +0 -49
  226. package/dist/multistream/remoteMediaManager.d.ts +0 -300
  227. package/dist/multistream/sendSlotManager.d.ts +0 -69
  228. package/dist/networkQualityMonitor/index.d.ts +0 -70
  229. package/dist/networkQualityMonitor/index.js +0 -226
  230. package/dist/networkQualityMonitor/index.js.map +0 -1
  231. package/dist/peer-connection-manager/index.d.ts +0 -6
  232. package/dist/peer-connection-manager/index.js +0 -671
  233. package/dist/peer-connection-manager/index.js.map +0 -1
  234. package/dist/peer-connection-manager/util.d.ts +0 -6
  235. package/dist/peer-connection-manager/util.js +0 -110
  236. package/dist/peer-connection-manager/util.js.map +0 -1
  237. package/dist/personal-meeting-room/index.d.ts +0 -47
  238. package/dist/personal-meeting-room/request.d.ts +0 -14
  239. package/dist/personal-meeting-room/util.d.ts +0 -2
  240. package/dist/reachability/clusterReachability.d.ts +0 -109
  241. package/dist/reachability/index.d.ts +0 -139
  242. package/dist/reachability/request.d.ts +0 -35
  243. package/dist/reachability/util.d.ts +0 -8
  244. package/dist/reactions/constants.d.ts +0 -3
  245. package/dist/reactions/reactions.d.ts +0 -4
  246. package/dist/reactions/reactions.type.d.ts +0 -32
  247. package/dist/reconnection-manager/index.d.ts +0 -112
  248. package/dist/recording-controller/enums.d.ts +0 -7
  249. package/dist/recording-controller/index.d.ts +0 -193
  250. package/dist/recording-controller/util.d.ts +0 -13
  251. package/dist/roap/collection.d.ts +0 -10
  252. package/dist/roap/collection.js +0 -63
  253. package/dist/roap/collection.js.map +0 -1
  254. package/dist/roap/handler.d.ts +0 -47
  255. package/dist/roap/handler.js +0 -279
  256. package/dist/roap/handler.js.map +0 -1
  257. package/dist/roap/index.d.ts +0 -116
  258. package/dist/roap/request.d.ts +0 -35
  259. package/dist/roap/state.d.ts +0 -9
  260. package/dist/roap/state.js +0 -127
  261. package/dist/roap/state.js.map +0 -1
  262. package/dist/roap/turnDiscovery.d.ts +0 -81
  263. package/dist/roap/util.d.ts +0 -2
  264. package/dist/roap/util.js +0 -76
  265. package/dist/roap/util.js.map +0 -1
  266. package/dist/rtcMetrics/constants.d.ts +0 -4
  267. package/dist/rtcMetrics/constants.js.map +0 -1
  268. package/dist/rtcMetrics/index.d.ts +0 -61
  269. package/dist/rtcMetrics/index.js +0 -197
  270. package/dist/rtcMetrics/index.js.map +0 -1
  271. package/dist/statsAnalyzer/global.d.ts +0 -118
  272. package/dist/statsAnalyzer/global.js +0 -127
  273. package/dist/statsAnalyzer/global.js.map +0 -1
  274. package/dist/statsAnalyzer/index.d.ts +0 -193
  275. package/dist/statsAnalyzer/index.js +0 -1019
  276. package/dist/statsAnalyzer/index.js.map +0 -1
  277. package/dist/statsAnalyzer/mqaUtil.d.ts +0 -22
  278. package/dist/statsAnalyzer/mqaUtil.js +0 -181
  279. package/dist/statsAnalyzer/mqaUtil.js.map +0 -1
  280. package/dist/transcription/index.d.ts +0 -64
  281. package/dist/types/common/errors/reconnection-in-progress.d.ts +0 -9
  282. package/dist/types/mediaQualityMetrics/config.d.ts +0 -241
  283. package/dist/types/networkQualityMonitor/index.d.ts +0 -70
  284. package/dist/types/rtcMetrics/constants.d.ts +0 -4
  285. package/dist/types/rtcMetrics/index.d.ts +0 -71
  286. package/dist/types/statsAnalyzer/global.d.ts +0 -36
  287. package/dist/types/statsAnalyzer/index.d.ts +0 -217
  288. package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -48
  289. package/dist/webinar/collection.d.ts +0 -16
  290. package/dist/webinar/index.d.ts +0 -5
@@ -382,10 +382,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
382
382
  /**
383
383
  * @param {Object} attrs
384
384
  * @param {Object} options
385
+ * @param {Function} callback - if provided, it will be called with the newly created meeting object as soon as the meeting.id is set
385
386
  * @constructor
386
387
  * @memberof Meeting
387
388
  */
388
- function Meeting(attrs, _options) {
389
+ function Meeting(attrs, _options, callback) {
389
390
  var _attrs$callStateForMe, _attrs$callStateForMe2, _this$locusInfo, _this$locusInfo$links, _this$locusInfo$links2, _this$locusInfo$links3, _this$locusInfo2, _this$locusInfo2$full, _this$locusInfo3, _this$locusInfo4;
390
391
  var _this;
391
392
  (0, _classCallCheck2.default)(this, Meeting);
@@ -1489,6 +1490,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1489
1490
  * @memberof Meeting
1490
1491
  */
1491
1492
  _this.id = _uuid.default.v4();
1493
+ if (callback) {
1494
+ callback((0, _assertThisInitialized2.default)(_this));
1495
+ }
1496
+
1492
1497
  /**
1493
1498
  * Call state used for metrics
1494
1499
  * @instance
@@ -2042,7 +2047,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2042
2047
  captions: [],
2043
2048
  isListening: false,
2044
2049
  commandText: '',
2045
- languageOptions: {},
2050
+ languageOptions: {
2051
+ currentSpokenLanguage: 'en'
2052
+ },
2046
2053
  showCaptionBox: false,
2047
2054
  transcribingRequestStatus: 'INACTIVE',
2048
2055
  isCaptioning: false,
@@ -2375,6 +2382,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2375
2382
  this.callStateForMetrics.correlationId = correlationId;
2376
2383
  }
2377
2384
 
2385
+ /**
2386
+ * Getter - Returns callStateForMetrics.pstnCorrelationId
2387
+ * @returns {string | undefined}
2388
+ */
2389
+ }, {
2390
+ key: "pstnCorrelationId",
2391
+ get: function get() {
2392
+ return this.callStateForMetrics.pstnCorrelationId;
2393
+ }
2394
+
2395
+ /**
2396
+ * Setter - sets callStateForMetrics.pstnCorrelationId
2397
+ * @param {string | undefined} correlationId
2398
+ */,
2399
+ set: function set(correlationId) {
2400
+ this.callStateForMetrics.pstnCorrelationId = correlationId;
2401
+ }
2402
+
2378
2403
  /**
2379
2404
  * Getter - Returns callStateForMetrics.userNameInput
2380
2405
  * @returns {string}
@@ -3400,8 +3425,26 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3400
3425
  }
3401
3426
  }
3402
3427
  });
3403
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_MANUAL_CAPTION_UPDATED, function (_ref12) {
3404
- var enable = _ref12.enable;
3428
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED, function (_ref12) {
3429
+ var spokenLanguage = _ref12.spokenLanguage;
3430
+ if (spokenLanguage) {
3431
+ var _this14$transcription;
3432
+ if ((_this14$transcription = _this14.transcription) !== null && _this14$transcription !== void 0 && _this14$transcription.languageOptions) {
3433
+ _this14.transcription.languageOptions.currentSpokenLanguage = spokenLanguage;
3434
+ }
3435
+ // @ts-ignore
3436
+ _this14.webex.internal.voicea.onSpokenLanguageUpdate(spokenLanguage, _this14.id);
3437
+ _triggerProxy.default.trigger(_this14, {
3438
+ file: 'meeting/index',
3439
+ function: 'setupLocusControlsListener'
3440
+ }, _constants.EVENT_TRIGGERS.MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED, {
3441
+ spokenLanguage: spokenLanguage,
3442
+ meetingId: _this14.id
3443
+ });
3444
+ }
3445
+ });
3446
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_MANUAL_CAPTION_UPDATED, function (_ref13) {
3447
+ var enable = _ref13.enable;
3405
3448
  _triggerProxy.default.trigger(_this14, {
3406
3449
  file: 'meeting/index',
3407
3450
  function: 'setupLocusControlsListener'
@@ -3409,24 +3452,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3409
3452
  enable: enable
3410
3453
  });
3411
3454
  });
3412
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED, function (_ref13) {
3413
- var breakout = _ref13.breakout;
3455
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED, function (_ref14) {
3456
+ var breakout = _ref14.breakout;
3414
3457
  _this14.breakouts.updateBreakout(breakout);
3415
3458
  _triggerProxy.default.trigger(_this14, {
3416
3459
  file: 'meeting/index',
3417
3460
  function: 'setupLocusControlsListener'
3418
3461
  }, _constants.EVENT_TRIGGERS.MEETING_BREAKOUTS_UPDATE);
3419
3462
  });
3420
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_INTERPRETATION_UPDATED, function (_ref14) {
3421
- var interpretation = _ref14.interpretation;
3463
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_INTERPRETATION_UPDATED, function (_ref15) {
3464
+ var interpretation = _ref15.interpretation;
3422
3465
  _this14.simultaneousInterpretation.updateInterpretation(interpretation);
3423
3466
  _triggerProxy.default.trigger(_this14, {
3424
3467
  file: 'meeting/index',
3425
3468
  function: 'setupLocusControlsListener'
3426
3469
  }, _constants.EVENT_TRIGGERS.MEETING_INTERPRETATION_UPDATE);
3427
3470
  });
3428
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED, function (_ref15) {
3429
- var entryExitTone = _ref15.entryExitTone;
3471
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED, function (_ref16) {
3472
+ var entryExitTone = _ref16.entryExitTone;
3430
3473
  _triggerProxy.default.trigger(_this14, {
3431
3474
  file: 'meeting/index',
3432
3475
  function: 'setupLocusControlsListener'
@@ -3434,8 +3477,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3434
3477
  entryExitTone: entryExitTone
3435
3478
  });
3436
3479
  });
3437
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED, function (_ref16) {
3438
- var state = _ref16.state;
3480
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED, function (_ref17) {
3481
+ var state = _ref17.state;
3439
3482
  _triggerProxy.default.trigger(_this14, {
3440
3483
  file: 'meeting/index',
3441
3484
  function: 'setupLocusControlsListener'
@@ -3443,8 +3486,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3443
3486
  state: state
3444
3487
  });
3445
3488
  });
3446
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED, function (_ref17) {
3447
- var state = _ref17.state;
3489
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED, function (_ref18) {
3490
+ var state = _ref18.state;
3448
3491
  _triggerProxy.default.trigger(_this14, {
3449
3492
  file: 'meeting/index',
3450
3493
  function: 'setupLocusControlsListener'
@@ -3452,8 +3495,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3452
3495
  state: state
3453
3496
  });
3454
3497
  });
3455
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED, function (_ref18) {
3456
- var state = _ref18.state;
3498
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED, function (_ref19) {
3499
+ var state = _ref19.state;
3457
3500
  _triggerProxy.default.trigger(_this14, {
3458
3501
  file: 'meeting/index',
3459
3502
  function: 'setupLocusControlsListener'
@@ -3461,8 +3504,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3461
3504
  state: state
3462
3505
  });
3463
3506
  });
3464
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED, function (_ref19) {
3465
- var state = _ref19.state;
3507
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED, function (_ref20) {
3508
+ var state = _ref20.state;
3466
3509
  _triggerProxy.default.trigger(_this14, {
3467
3510
  file: 'meeting/index',
3468
3511
  function: 'setupLocusControlsListener'
@@ -3470,8 +3513,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3470
3513
  state: state
3471
3514
  });
3472
3515
  });
3473
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED, function (_ref20) {
3474
- var state = _ref20.state;
3516
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED, function (_ref21) {
3517
+ var state = _ref21.state;
3475
3518
  _triggerProxy.default.trigger(_this14, {
3476
3519
  file: 'meeting/index',
3477
3520
  function: 'setupLocusControlsListener'
@@ -3479,8 +3522,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3479
3522
  state: state
3480
3523
  });
3481
3524
  });
3482
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED, function (_ref21) {
3483
- var state = _ref21.state;
3525
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED, function (_ref22) {
3526
+ var state = _ref22.state;
3484
3527
  _triggerProxy.default.trigger(_this14, {
3485
3528
  file: 'meeting/index',
3486
3529
  function: 'setupLocusControlsListener'
@@ -3488,8 +3531,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3488
3531
  state: state
3489
3532
  });
3490
3533
  });
3491
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_WEBCAST_CHANGED, function (_ref22) {
3492
- var state = _ref22.state;
3534
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_WEBCAST_CHANGED, function (_ref23) {
3535
+ var state = _ref23.state;
3493
3536
  _triggerProxy.default.trigger(_this14, {
3494
3537
  file: 'meeting/index',
3495
3538
  function: 'setupLocusControlsListener'
@@ -3497,8 +3540,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3497
3540
  state: state
3498
3541
  });
3499
3542
  });
3500
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_FULL_CHANGED, function (_ref23) {
3501
- var state = _ref23.state;
3543
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_FULL_CHANGED, function (_ref24) {
3544
+ var state = _ref24.state;
3502
3545
  _triggerProxy.default.trigger(_this14, {
3503
3546
  file: 'meeting/index',
3504
3547
  function: 'setupLocusControlsListener'
@@ -3506,8 +3549,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3506
3549
  state: state
3507
3550
  });
3508
3551
  });
3509
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_PRACTICE_SESSION_STATUS_UPDATED, function (_ref24) {
3510
- var state = _ref24.state;
3552
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_PRACTICE_SESSION_STATUS_UPDATED, function (_ref25) {
3553
+ var state = _ref25.state;
3511
3554
  _this14.webinar.updatePracticeSessionStatus(state);
3512
3555
  _triggerProxy.default.trigger(_this14, {
3513
3556
  file: 'meeting/index',
@@ -3516,8 +3559,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3516
3559
  state: state
3517
3560
  });
3518
3561
  });
3519
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_STAGE_VIEW_UPDATED, function (_ref25) {
3520
- var state = _ref25.state;
3562
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_STAGE_VIEW_UPDATED, function (_ref26) {
3563
+ var state = _ref26.state;
3521
3564
  _triggerProxy.default.trigger(_this14, {
3522
3565
  file: 'meeting/index',
3523
3566
  function: 'setupLocusControlsListener'
@@ -3525,8 +3568,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3525
3568
  state: state
3526
3569
  });
3527
3570
  });
3528
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED, function (_ref26) {
3529
- var state = _ref26.state;
3571
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED, function (_ref27) {
3572
+ var state = _ref27.state;
3530
3573
  _triggerProxy.default.trigger(_this14, {
3531
3574
  file: 'meeting/index',
3532
3575
  function: 'setupLocusControlsListener'
@@ -3534,8 +3577,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3534
3577
  state: state
3535
3578
  });
3536
3579
  });
3537
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_ANNOTATION_CHANGED, function (_ref27) {
3538
- var state = _ref27.state;
3580
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_ANNOTATION_CHANGED, function (_ref28) {
3581
+ var state = _ref28.state;
3539
3582
  _triggerProxy.default.trigger(_this14, {
3540
3583
  file: 'meeting/index',
3541
3584
  function: 'setupLocusControlsListener'
@@ -3543,8 +3586,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3543
3586
  state: state
3544
3587
  });
3545
3588
  });
3546
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED, function (_ref28) {
3547
- var state = _ref28.state;
3589
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED, function (_ref29) {
3590
+ var state = _ref29.state;
3548
3591
  _triggerProxy.default.trigger(_this14, {
3549
3592
  file: 'meeting/index',
3550
3593
  function: 'setupLocusControlsListener'
@@ -3552,6 +3595,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3552
3595
  state: state
3553
3596
  });
3554
3597
  });
3598
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_POLLING_QA_CHANGED, function (_ref30) {
3599
+ var state = _ref30.state;
3600
+ _triggerProxy.default.trigger(_this14, {
3601
+ file: 'meeting/index',
3602
+ function: 'setupLocusControlsListener'
3603
+ }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_POLLING_QA_UPDATED, {
3604
+ state: state
3605
+ });
3606
+ });
3555
3607
  }
3556
3608
 
3557
3609
  /**
@@ -3591,7 +3643,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3591
3643
  var _this15 = this;
3592
3644
  // Will get triggered on local and remote share
3593
3645
  this.locusInfo.on(_constants.EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES, /*#__PURE__*/function () {
3594
- var _ref29 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(payload) {
3646
+ var _ref31 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(payload) {
3595
3647
  var _payload$previous, _payload$previous2;
3596
3648
  var _payload$current, contentShare, whiteboardShare, previousContentShare, previousWhiteboardShare, newShareStatus, _this15$locusInfo, _this15$locusInfo$inf, _this15$webinar, oldShareStatus, sendStartedSharingRemote, _this15$mediaProperti;
3597
3649
  return _regenerator.default.wrap(function _callee8$(_context8) {
@@ -3626,9 +3678,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3626
3678
  // There is no concept of local/remote share for whiteboard
3627
3679
  // It does not matter who requested to share the whiteboard, everyone gets the same view
3628
3680
  else if (whiteboardShare.disposition === _constants.FLOOR_ACTION.GRANTED) {
3629
- // WHITEBOARD - sharing whiteboard
3630
- // Webinar attendee should receive whiteboard as remote share
3631
- newShareStatus = (_this15$locusInfo = _this15.locusInfo) !== null && _this15$locusInfo !== void 0 && (_this15$locusInfo$inf = _this15$locusInfo.info) !== null && _this15$locusInfo$inf !== void 0 && _this15$locusInfo$inf.isWebinar && (_this15$webinar = _this15.webinar) !== null && _this15$webinar !== void 0 && _this15$webinar.selfIsAttendee ? _constants.SHARE_STATUS.REMOTE_SHARE_ACTIVE : _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE;
3681
+ if ((_this15$locusInfo = _this15.locusInfo) !== null && _this15$locusInfo !== void 0 && (_this15$locusInfo$inf = _this15$locusInfo.info) !== null && _this15$locusInfo$inf !== void 0 && _this15$locusInfo$inf.isWebinar && (_this15$webinar = _this15.webinar) !== null && _this15$webinar !== void 0 && _this15$webinar.selfIsAttendee) {
3682
+ // WHITEBOARD - sharing whiteboard
3683
+ // Webinar attendee should receive whiteboard as remote share
3684
+ newShareStatus = _constants.SHARE_STATUS.REMOTE_SHARE_ACTIVE;
3685
+ } else if (_this15.guest) {
3686
+ // If user is a guest to a meeting, they should receive whiteboard as remote share
3687
+ newShareStatus = _constants.SHARE_STATUS.REMOTE_SHARE_ACTIVE;
3688
+ } else {
3689
+ newShareStatus = _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE;
3690
+ }
3632
3691
  }
3633
3692
  // or if content share is either released or null and whiteboard share is either released or null, no one is sharing
3634
3693
  else if ((previousContentShare && contentShare.disposition === _constants.FLOOR_ACTION.RELEASED || contentShare.disposition === null) && (previousWhiteboardShare && whiteboardShare.disposition === _constants.FLOOR_ACTION.RELEASED || whiteboardShare.disposition === null)) {
@@ -3636,7 +3695,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3636
3695
  }
3637
3696
  _loggerProxy.default.logger.info("Meeting:index#setUpLocusInfoMediaInactiveListener --> this.shareStatus=".concat(_this15.shareStatus, " newShareStatus=").concat(newShareStatus));
3638
3697
  if (!(newShareStatus !== _this15.shareStatus)) {
3639
- _context8.next = 46;
3698
+ _context8.next = 48;
3640
3699
  break;
3641
3700
  }
3642
3701
  oldShareStatus = _this15.shareStatus; // update our state before we send out any notifications
@@ -3644,14 +3703,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3644
3703
 
3645
3704
  // send out "stop" notifications for the old state
3646
3705
  _context8.t0 = oldShareStatus;
3647
- _context8.next = _context8.t0 === _constants.SHARE_STATUS.REMOTE_SHARE_ACTIVE ? 15 : _context8.t0 === _constants.SHARE_STATUS.LOCAL_SHARE_ACTIVE ? 17 : _context8.t0 === _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE ? 19 : _context8.t0 === _constants.SHARE_STATUS.NO_SHARE ? 21 : 22;
3706
+ _context8.next = _context8.t0 === _constants.SHARE_STATUS.REMOTE_SHARE_ACTIVE ? 15 : _context8.t0 === _constants.SHARE_STATUS.LOCAL_SHARE_ACTIVE ? 17 : _context8.t0 === _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE ? 19 : _context8.t0 === _constants.SHARE_STATUS.NO_SHARE ? 23 : 24;
3648
3707
  break;
3649
3708
  case 15:
3650
3709
  _triggerProxy.default.trigger(_this15, {
3651
3710
  file: 'meetings/index',
3652
3711
  function: 'remoteShare'
3653
3712
  }, _constants.EVENT_TRIGGERS.MEETING_STOPPED_SHARING_REMOTE);
3654
- return _context8.abrupt("break", 23);
3713
+ return _context8.abrupt("break", 25);
3655
3714
  case 17:
3656
3715
  _triggerProxy.default.trigger(_this15, {
3657
3716
  file: 'meeting/index',
@@ -3659,22 +3718,39 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3659
3718
  }, _constants.EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL, {
3660
3719
  reason: _constants.SHARE_STOPPED_REASON.SELF_STOPPED
3661
3720
  });
3662
- return _context8.abrupt("break", 23);
3721
+ return _context8.abrupt("break", 25);
3663
3722
  case 19:
3664
3723
  _triggerProxy.default.trigger(_this15, {
3665
3724
  file: 'meeting/index',
3666
3725
  function: 'stopWhiteboardShare'
3667
3726
  }, _constants.EVENT_TRIGGERS.MEETING_STOPPED_SHARING_WHITEBOARD);
3668
- return _context8.abrupt("break", 23);
3669
- case 21:
3670
- return _context8.abrupt("break", 23);
3671
- case 22:
3672
- return _context8.abrupt("break", 23);
3727
+ // @ts-ignore
3728
+ _this15.webex.internal.newMetrics.callDiagnosticLatencies.saveTimestamp({
3729
+ key: 'internal.client.share.stopped'
3730
+ });
3731
+ // @ts-ignore
3732
+ _this15.webex.internal.newMetrics.submitClientEvent({
3733
+ name: 'client.share.stopped',
3734
+ payload: {
3735
+ mediaType: 'whiteboard',
3736
+ shareDuration:
3737
+ // @ts-ignore
3738
+ _this15.webex.internal.newMetrics.callDiagnosticLatencies.getShareDuration()
3739
+ },
3740
+ options: {
3741
+ meetingId: _this15.id
3742
+ }
3743
+ });
3744
+ return _context8.abrupt("break", 25);
3673
3745
  case 23:
3746
+ return _context8.abrupt("break", 25);
3747
+ case 24:
3748
+ return _context8.abrupt("break", 25);
3749
+ case 25:
3674
3750
  _context8.t1 = newShareStatus;
3675
- _context8.next = _context8.t1 === _constants.SHARE_STATUS.REMOTE_SHARE_ACTIVE ? 26 : _context8.t1 === _constants.SHARE_STATUS.LOCAL_SHARE_ACTIVE ? 35 : _context8.t1 === _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE ? 38 : _context8.t1 === _constants.SHARE_STATUS.NO_SHARE ? 41 : 42;
3751
+ _context8.next = _context8.t1 === _constants.SHARE_STATUS.REMOTE_SHARE_ACTIVE ? 28 : _context8.t1 === _constants.SHARE_STATUS.LOCAL_SHARE_ACTIVE ? 37 : _context8.t1 === _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE ? 40 : _context8.t1 === _constants.SHARE_STATUS.NO_SHARE ? 43 : 44;
3676
3752
  break;
3677
- case 26:
3753
+ case 28:
3678
3754
  sendStartedSharingRemote = function sendStartedSharingRemote() {
3679
3755
  _this15.remoteShareInstanceId = contentShare.shareInstanceId;
3680
3756
  _this15.shareCAEventSentStatus.receiveStart = false;
@@ -3690,20 +3766,20 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3690
3766
  resourceType: contentShare.resourceType
3691
3767
  });
3692
3768
  };
3693
- _context8.prev = 27;
3769
+ _context8.prev = 29;
3694
3770
  if (!((_this15$mediaProperti = _this15.mediaProperties.mediaDirection) !== null && _this15$mediaProperti !== void 0 && _this15$mediaProperti.sendShare && oldShareStatus === _constants.SHARE_STATUS.LOCAL_SHARE_ACTIVE)) {
3695
- _context8.next = 31;
3771
+ _context8.next = 33;
3696
3772
  break;
3697
3773
  }
3698
- _context8.next = 31;
3774
+ _context8.next = 33;
3699
3775
  return _this15.unpublishStreams([_this15.mediaProperties.shareVideoStream, _this15.mediaProperties.shareAudioStream]);
3700
- case 31:
3701
- _context8.prev = 31;
3776
+ case 33:
3777
+ _context8.prev = 33;
3702
3778
  sendStartedSharingRemote();
3703
- return _context8.finish(31);
3704
- case 34:
3705
- return _context8.abrupt("break", 43);
3706
- case 35:
3779
+ return _context8.finish(33);
3780
+ case 36:
3781
+ return _context8.abrupt("break", 45);
3782
+ case 37:
3707
3783
  _triggerProxy.default.trigger(_this15, {
3708
3784
  file: 'meeting/index',
3709
3785
  function: 'share'
@@ -3719,8 +3795,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3719
3795
  meetingId: _this15.id
3720
3796
  }
3721
3797
  });
3722
- return _context8.abrupt("break", 43);
3723
- case 38:
3798
+ return _context8.abrupt("break", 45);
3799
+ case 40:
3724
3800
  _triggerProxy.default.trigger(_this15, {
3725
3801
  file: 'meeting/index',
3726
3802
  function: 'startWhiteboardShare'
@@ -3738,16 +3814,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3738
3814
  meetingId: _this15.id
3739
3815
  }
3740
3816
  });
3741
- return _context8.abrupt("break", 43);
3742
- case 41:
3743
- return _context8.abrupt("break", 43);
3744
- case 42:
3745
- return _context8.abrupt("break", 43);
3817
+ return _context8.abrupt("break", 45);
3746
3818
  case 43:
3819
+ return _context8.abrupt("break", 45);
3820
+ case 44:
3821
+ return _context8.abrupt("break", 45);
3822
+ case 45:
3747
3823
  _this15.members.locusMediaSharesUpdate(payload);
3748
- _context8.next = 47;
3824
+ _context8.next = 49;
3749
3825
  break;
3750
- case 46:
3826
+ case 48:
3751
3827
  if (newShareStatus === _constants.SHARE_STATUS.REMOTE_SHARE_ACTIVE) {
3752
3828
  // if we got here, then some remote participant has stolen
3753
3829
  // the presentation from another remote participant
@@ -3787,14 +3863,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3787
3863
  });
3788
3864
  _this15.members.locusMediaSharesUpdate(payload);
3789
3865
  }
3790
- case 47:
3866
+ case 49:
3791
3867
  case "end":
3792
3868
  return _context8.stop();
3793
3869
  }
3794
- }, _callee8, null, [[27,, 31, 34]]);
3870
+ }, _callee8, null, [[29,, 33, 36]]);
3795
3871
  }));
3796
3872
  return function (_x8) {
3797
- return _ref29.apply(this, arguments);
3873
+ return _ref31.apply(this, arguments);
3798
3874
  };
3799
3875
  }());
3800
3876
  }
@@ -3908,8 +3984,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3908
3984
  });
3909
3985
  }
3910
3986
  });
3911
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEETING_INFO_UPDATED, function (_ref30) {
3912
- var isInitializing = _ref30.isInitializing;
3987
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEETING_INFO_UPDATED, function (_ref32) {
3988
+ var isInitializing = _ref32.isInitializing;
3913
3989
  _this19.updateMeetingActions();
3914
3990
  _this19.recordingController.setDisplayHints(_this19.userDisplayHints);
3915
3991
  _this19.recordingController.setUserPolicy(_this19.selfUserPolicies);
@@ -4047,7 +4123,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4047
4123
  _this21.updateLLMConnection();
4048
4124
  });
4049
4125
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST, /*#__PURE__*/function () {
4050
- var _ref31 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(payload) {
4126
+ var _ref33 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(payload) {
4051
4127
  var _this21$rtcMetrics;
4052
4128
  return _regenerator.default.wrap(function _callee9$(_context9) {
4053
4129
  while (1) switch (_context9.prev = _context9.next) {
@@ -4081,7 +4157,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4081
4157
  }, _callee9);
4082
4158
  }));
4083
4159
  return function (_x9) {
4084
- return _ref31.apply(this, arguments);
4160
+ return _ref33.apply(this, arguments);
4085
4161
  };
4086
4162
  }());
4087
4163
 
@@ -4200,7 +4276,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4200
4276
  }
4201
4277
  });
4202
4278
  this.locusInfo.on(_constants.EVENTS.DESTROY_MEETING, /*#__PURE__*/function () {
4203
- var _ref32 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(payload) {
4279
+ var _ref34 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(payload) {
4204
4280
  return _regenerator.default.wrap(function _callee10$(_context10) {
4205
4281
  while (1) switch (_context10.prev = _context10.next) {
4206
4282
  case 0:
@@ -4260,7 +4336,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4260
4336
  }, _callee10, null, [[8, 14]]);
4261
4337
  }));
4262
4338
  return function (_x10) {
4263
- return _ref32.apply(this, arguments);
4339
+ return _ref34.apply(this, arguments);
4264
4340
  };
4265
4341
  }());
4266
4342
  }
@@ -4289,11 +4365,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4289
4365
 
4290
4366
  /**
4291
4367
  * Invite a guest to the call that isn't normally part of this call
4292
- * @param {Object} invitee
4368
+ * @param {Invitee} invitee
4293
4369
  * @param {String} invitee.emailAddress
4294
4370
  * @param {String} invitee.email
4295
4371
  * @param {String} invitee.phoneNumber
4296
4372
  * @param {Boolean} [alertIfActive]
4373
+ * @param {Boolean} [invitee.skipEmailValidation]
4374
+ * @param {Boolean} [invitee.isInternalNumber]
4297
4375
  * @returns {Promise} see #members.addMember
4298
4376
  * @public
4299
4377
  * @memberof Meeting
@@ -4307,7 +4385,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4307
4385
 
4308
4386
  /**
4309
4387
  * Cancel an outgoing phone call invitation made during a meeting
4310
- * @param {Object} invitee
4388
+ * @param {Invitee} invitee
4311
4389
  * @param {String} invitee.phoneNumber
4312
4390
  * @returns {Promise} see #members.cancelPhoneInvite
4313
4391
  * @public
@@ -4320,17 +4398,18 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4320
4398
  }
4321
4399
 
4322
4400
  /**
4323
- * Cancel an SIP call invitation made during a meeting
4324
- * @param {Object} invitee
4401
+ * Cancel an SIP/phone call invitation made during a meeting
4402
+ * @param {Invitee} invitee
4325
4403
  * @param {String} invitee.memberId
4326
- * @returns {Promise} see #members.cancelSIPInvite
4404
+ * @param {Boolean} [invitee.isInternalNumber] - When cancel phone invitation, if the number is internal
4405
+ * @returns {Promise} see #members.cancelInviteByMemberId
4327
4406
  * @public
4328
4407
  * @memberof Meeting
4329
4408
  */
4330
4409
  }, {
4331
- key: "cancelSIPInvite",
4332
- value: function cancelSIPInvite(invitee) {
4333
- return this.members.cancelSIPInvite(invitee);
4410
+ key: "cancelInviteByMemberId",
4411
+ value: function cancelInviteByMemberId(invitee) {
4412
+ return this.members.cancelInviteByMemberId(invitee);
4334
4413
  }
4335
4414
 
4336
4415
  /**
@@ -4405,6 +4484,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4405
4484
  // so we need to explicitly update remote mute for correct logic flow
4406
4485
  _this24.audio.handleServerRemoteMuteUpdate(_this24, enabled);
4407
4486
  }
4487
+ }).catch(function (error) {
4488
+ return _promise.default.reject(error);
4408
4489
  }));
4409
4490
  case 11:
4410
4491
  case "end":
@@ -4613,6 +4694,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4613
4694
  isClosedCaptionActive: _util2.default.isClosedCaptionActive(this.userDisplayHints),
4614
4695
  canStartManualCaption: _util2.default.canStartManualCaption(this.userDisplayHints),
4615
4696
  canStopManualCaption: _util2.default.canStopManualCaption(this.userDisplayHints),
4697
+ isLocalRecordingStarted: _util2.default.isLocalRecordingStarted(this.userDisplayHints),
4698
+ isLocalRecordingStopped: _util2.default.isLocalRecordingStopped(this.userDisplayHints),
4699
+ isLocalRecordingPaused: _util2.default.isLocalRecordingPaused(this.userDisplayHints),
4616
4700
  isManualCaptionActive: _util2.default.isManualCaptionActive(this.userDisplayHints),
4617
4701
  isSaveTranscriptsEnabled: _util2.default.isSaveTranscriptsEnabled(this.userDisplayHints),
4618
4702
  isWebexAssistantActive: _util2.default.isWebexAssistantActive(this.userDisplayHints),
@@ -4822,6 +4906,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4822
4906
  canDisableRemoteDesktopControl: _util5.default.hasHints({
4823
4907
  requiredHints: [_constants.DISPLAY_HINTS.DISABLE_RDC_MEETING_OPTION],
4824
4908
  displayHints: this.userDisplayHints
4909
+ }),
4910
+ canEnablePollingQA: _util5.default.hasHints({
4911
+ requiredHints: [_constants.DISPLAY_HINTS.ENABLE_ATTENDEE_START_POLLING_QA],
4912
+ displayHints: this.userDisplayHints
4913
+ }),
4914
+ canDisablePollingQA: _util5.default.hasHints({
4915
+ requiredHints: [_constants.DISPLAY_HINTS.DISABLE_ATTENDEE_START_POLLING_QA],
4916
+ displayHints: this.userDisplayHints
4825
4917
  })
4826
4918
  }) || changed;
4827
4919
  }
@@ -5343,13 +5435,6 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5343
5435
 
5344
5436
  // Only send restore event when it was disconnected before and for connected later
5345
5437
  if (!_this27.hasWebsocketConnected) {
5346
- // @ts-ignore
5347
- _this27.webex.internal.newMetrics.submitClientEvent({
5348
- name: 'client.mercury.connection.restored',
5349
- options: {
5350
- meetingId: _this27.id
5351
- }
5352
- });
5353
5438
  _metrics.default.sendBehavioralMetric(_constants2.default.MERCURY_CONNECTION_RESTORED, {
5354
5439
  correlation_id: _this27.correlationId
5355
5440
  });
@@ -5360,13 +5445,6 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5360
5445
  // @ts-ignore
5361
5446
  this.webex.internal.mercury.on(_constants.OFFLINE, function () {
5362
5447
  _loggerProxy.default.logger.error('Meeting:index#setMercuryListener --> Web socket offline');
5363
- // @ts-ignore
5364
- _this27.webex.internal.newMetrics.submitClientEvent({
5365
- name: 'client.mercury.connection.lost',
5366
- options: {
5367
- meetingId: _this27.id
5368
- }
5369
- });
5370
5448
  _metrics.default.sendBehavioralMetric(_constants2.default.MERCURY_CONNECTION_FAILURE, {
5371
5449
  correlation_id: _this27.correlationId
5372
5450
  });
@@ -6293,24 +6371,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6293
6371
  _this36.deferJoin = undefined;
6294
6372
  return join;
6295
6373
  }).catch(function (error) {
6296
- var _this36$meetingInfo, _error$error;
6374
+ var _error$error;
6297
6375
  _this36.meetingFiniteStateMachine.fail(error);
6298
6376
  _loggerProxy.default.logger.error('Meeting:index#join --> Failed', error);
6299
6377
 
6300
- // @ts-ignore
6301
- _this36.webex.internal.newMetrics.submitClientEvent({
6302
- name: 'client.locus.join.response',
6303
- payload: {
6304
- identifiers: {
6305
- meetingLookupUrl: (_this36$meetingInfo = _this36.meetingInfo) === null || _this36$meetingInfo === void 0 ? void 0 : _this36$meetingInfo.meetingLookupUrl
6306
- }
6307
- },
6308
- options: {
6309
- meetingId: _this36.id,
6310
- rawError: error
6311
- }
6312
- });
6313
-
6314
6378
  // TODO: change this to error codes and pre defined dictionary
6315
6379
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_FAILURE, {
6316
6380
  correlation_id: _this36.correlationId,
@@ -6464,14 +6528,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6464
6528
  value: function dialInPstn() {
6465
6529
  var _this38 = this;
6466
6530
  if (this.isPhoneProvisioned(this.dialInDeviceStatus)) return _promise.default.resolve(); // prevent multiple dial in devices from being provisioned
6467
-
6468
- var correlationId = this.correlationId,
6531
+ this.pstnCorrelationId = _uuid.default.v4();
6532
+ var pstnCorrelationId = this.pstnCorrelationId,
6469
6533
  locusUrl = this.locusUrl;
6470
6534
  if (!this.dialInUrl) this.dialInUrl = "dialin:///".concat(_uuid.default.v4());
6471
6535
  return this.meetingRequest
6472
6536
  // @ts-ignore
6473
6537
  .dialIn({
6474
- correlationId: correlationId,
6538
+ correlationId: pstnCorrelationId,
6475
6539
  dialInUrl: this.dialInUrl,
6476
6540
  locusUrl: locusUrl,
6477
6541
  clientUrl: this.deviceUrl
@@ -6480,11 +6544,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6480
6544
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_DIAL_IN_FAILURE, {
6481
6545
  correlation_id: _this38.correlationId,
6482
6546
  dial_in_url: _this38.dialInUrl,
6547
+ dial_in_correlation_id: pstnCorrelationId,
6483
6548
  locus_id: locusUrl.split('/').pop(),
6484
6549
  client_url: _this38.deviceUrl,
6485
6550
  reason: (_error$error2 = error.error) === null || _error$error2 === void 0 ? void 0 : _error$error2.message,
6486
6551
  stack: error.stack
6487
6552
  });
6553
+ if (_this38.pstnCorrelationId === pstnCorrelationId) {
6554
+ _this38.pstnCorrelationId = undefined;
6555
+ }
6488
6556
  return _promise.default.reject(error);
6489
6557
  });
6490
6558
  }
@@ -6501,14 +6569,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6501
6569
  value: function dialOutPstn(phoneNumber) {
6502
6570
  var _this39 = this;
6503
6571
  if (this.isPhoneProvisioned(this.dialOutDeviceStatus)) return _promise.default.resolve(); // prevent multiple dial out devices from being provisioned
6504
-
6505
- var correlationId = this.correlationId,
6506
- locusUrl = this.locusUrl;
6572
+ this.pstnCorrelationId = _uuid.default.v4();
6573
+ var locusUrl = this.locusUrl,
6574
+ pstnCorrelationId = this.pstnCorrelationId;
6507
6575
  if (!this.dialOutUrl) this.dialOutUrl = "dialout:///".concat(_uuid.default.v4());
6508
6576
  return this.meetingRequest
6509
6577
  // @ts-ignore
6510
6578
  .dialOut({
6511
- correlationId: correlationId,
6579
+ correlationId: pstnCorrelationId,
6512
6580
  dialOutUrl: this.dialOutUrl,
6513
6581
  phoneNumber: phoneNumber,
6514
6582
  locusUrl: locusUrl,
@@ -6518,11 +6586,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6518
6586
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_DIAL_OUT_FAILURE, {
6519
6587
  correlation_id: _this39.correlationId,
6520
6588
  dial_out_url: _this39.dialOutUrl,
6589
+ dial_out_correlation_id: pstnCorrelationId,
6521
6590
  locus_id: locusUrl.split('/').pop(),
6522
6591
  client_url: _this39.deviceUrl,
6523
6592
  reason: (_error$error3 = error.error) === null || _error$error3 === void 0 ? void 0 : _error$error3.message,
6524
6593
  stack: error.stack
6525
6594
  });
6595
+ if (_this39.pstnCorrelationId === pstnCorrelationId) {
6596
+ _this39.pstnCorrelationId = undefined;
6597
+ }
6526
6598
  return _promise.default.reject(error);
6527
6599
  });
6528
6600
  }
@@ -6537,7 +6609,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6537
6609
  }, {
6538
6610
  key: "disconnectPhoneAudio",
6539
6611
  value: function disconnectPhoneAudio() {
6540
- return _promise.default.all([this.isPhoneProvisioned(this.dialInDeviceStatus) ? _util2.default.disconnectPhoneAudio(this, this.dialInUrl) : _promise.default.resolve(), this.isPhoneProvisioned(this.dialOutDeviceStatus) ? _util2.default.disconnectPhoneAudio(this, this.dialOutUrl) : _promise.default.resolve()]);
6612
+ var _this40 = this;
6613
+ var correlationToClear = this.pstnCorrelationId;
6614
+ return _promise.default.all([this.isPhoneProvisioned(this.dialInDeviceStatus) ? _util2.default.disconnectPhoneAudio(this, this.dialInUrl) : _promise.default.resolve(), this.isPhoneProvisioned(this.dialOutDeviceStatus) ? _util2.default.disconnectPhoneAudio(this, this.dialOutUrl) : _promise.default.resolve()]).then(function () {
6615
+ if (_this40.pstnCorrelationId === correlationToClear) {
6616
+ _this40.pstnCorrelationId = undefined;
6617
+ }
6618
+ });
6541
6619
  }
6542
6620
 
6543
6621
  /**
@@ -6550,7 +6628,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6550
6628
  }, {
6551
6629
  key: "moveTo",
6552
6630
  value: function moveTo(resourceId) {
6553
- var _this40 = this;
6631
+ var _this41 = this;
6554
6632
  if (!resourceId) {
6555
6633
  throw new _parameter.default('Cannot move call without a resourceId.');
6556
6634
  }
@@ -6594,12 +6672,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6594
6672
  while (1) switch (_context21.prev = _context21.next) {
6595
6673
  case 0:
6596
6674
  _context21.prev = 0;
6597
- if (!(_this40.screenShareFloorState === ScreenShareFloorStatus.GRANTED)) {
6675
+ if (!(_this41.screenShareFloorState === ScreenShareFloorStatus.GRANTED)) {
6598
6676
  _context21.next = 4;
6599
6677
  break;
6600
6678
  }
6601
6679
  _context21.next = 4;
6602
- return _this40.releaseScreenShareFloor();
6680
+ return _this41.releaseScreenShareFloor();
6603
6681
  case 4:
6604
6682
  mediaSettings = {
6605
6683
  mediaDirection: {
@@ -6611,37 +6689,37 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6611
6689
  receiveShare: true
6612
6690
  }
6613
6691
  };
6614
- _this40.mediaProperties.setMediaDirection(mediaSettings.mediaDirection);
6615
- _this40.mediaProperties.unsetRemoteMedia();
6692
+ _this41.mediaProperties.setMediaDirection(mediaSettings.mediaDirection);
6693
+ _this41.mediaProperties.unsetRemoteMedia();
6616
6694
 
6617
6695
  // 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
6618
6696
  // once the device answers we close the old connection and create new media server connection with only share enabled
6619
- if (!_this40.statsAnalyzer) {
6697
+ if (!_this41.statsAnalyzer) {
6620
6698
  _context21.next = 10;
6621
6699
  break;
6622
6700
  }
6623
6701
  _context21.next = 10;
6624
- return _this40.statsAnalyzer.stopAnalyzer();
6702
+ return _this41.statsAnalyzer.stopAnalyzer();
6625
6703
  case 10:
6626
6704
  _context21.next = 12;
6627
- return _this40.closeRemoteStreams();
6705
+ return _this41.closeRemoteStreams();
6628
6706
  case 12:
6629
6707
  _context21.next = 14;
6630
- return _this40.closePeerConnections();
6708
+ return _this41.closePeerConnections();
6631
6709
  case 14:
6632
- _this40.cleanupLocalStreams();
6633
- _this40.unsetRemoteStreams();
6634
- _this40.unsetPeerConnections();
6635
- _this40.reconnectionManager.cleanUp();
6710
+ _this41.cleanupLocalStreams();
6711
+ _this41.unsetRemoteStreams();
6712
+ _this41.unsetPeerConnections();
6713
+ _this41.reconnectionManager.cleanUp();
6636
6714
  _context21.next = 20;
6637
- return _this40.addMedia({
6715
+ return _this41.addMedia({
6638
6716
  audioEnabled: false,
6639
6717
  videoEnabled: false,
6640
6718
  shareVideoEnabled: true
6641
6719
  });
6642
6720
  case 20:
6643
6721
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_SUCCESS);
6644
- _this40.isMoveToInProgress = false;
6722
+ _this41.isMoveToInProgress = false;
6645
6723
  _context21.next = 29;
6646
6724
  break;
6647
6725
  case 24:
@@ -6649,12 +6727,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6649
6727
  _context21.t0 = _context21["catch"](0);
6650
6728
  _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', _context21.t0);
6651
6729
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
6652
- correlation_id: _this40.correlationId,
6653
- locus_id: _this40.locusUrl.split('/').pop(),
6730
+ correlation_id: _this41.correlationId,
6731
+ locus_id: _this41.locusUrl.split('/').pop(),
6654
6732
  reason: _context21.t0.message,
6655
6733
  stack: _context21.t0.stack
6656
6734
  });
6657
- _this40.isMoveToInProgress = false;
6735
+ _this41.isMoveToInProgress = false;
6658
6736
  case 29:
6659
6737
  case "end":
6660
6738
  return _context21.stop();
@@ -6670,17 +6748,17 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6670
6748
  resourceId: resourceId,
6671
6749
  moveToResource: true
6672
6750
  }).then(function () {
6673
- _this40.meetingFiniteStateMachine.join();
6751
+ _this41.meetingFiniteStateMachine.join();
6674
6752
  }).catch(function (error) {
6675
- _this40.meetingFiniteStateMachine.fail(error);
6753
+ _this41.meetingFiniteStateMachine.fail(error);
6676
6754
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
6677
- correlation_id: _this40.correlationId,
6678
- locus_id: _this40.locusUrl.split('/').pop(),
6755
+ correlation_id: _this41.correlationId,
6756
+ locus_id: _this41.locusUrl.split('/').pop(),
6679
6757
  reason: error.message,
6680
6758
  stack: error.stack
6681
6759
  });
6682
6760
  _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', error);
6683
- _this40.isMoveToInProgress = false;
6761
+ _this41.isMoveToInProgress = false;
6684
6762
  return _promise.default.reject(error);
6685
6763
  });
6686
6764
  }
@@ -6695,7 +6773,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6695
6773
  }, {
6696
6774
  key: "moveFrom",
6697
6775
  value: function moveFrom(resourceId) {
6698
- var _this41 = this;
6776
+ var _this42 = this;
6699
6777
  // On moveFrom ask the developer to re capture it moveFrom then updateMedia
6700
6778
  if (!resourceId) {
6701
6779
  throw new _parameter.default('Cannot move call without a resourceId.');
@@ -6710,19 +6788,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6710
6788
  }
6711
6789
  });
6712
6790
  return _util2.default.joinMeetingOptions(this).then(function () {
6713
- return _util2.default.leaveMeeting(_this41, {
6791
+ return _util2.default.leaveMeeting(_this42, {
6714
6792
  resourceId: resourceId,
6715
6793
  correlationId: oldCorrelationId,
6716
6794
  moveMeeting: true
6717
6795
  }).then(function () {
6718
- _this41.resourceId = '';
6796
+ _this42.resourceId = '';
6719
6797
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_FROM_SUCCESS);
6720
6798
  });
6721
6799
  }).catch(function (error) {
6722
- _this41.meetingFiniteStateMachine.fail(error);
6800
+ _this42.meetingFiniteStateMachine.fail(error);
6723
6801
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_FROM_FAILURE, {
6724
- correlation_id: _this41.correlationId,
6725
- locus_id: _this41.locusUrl.split('/').pop(),
6802
+ correlation_id: _this42.correlationId,
6803
+ locus_id: _this42.locusUrl.split('/').pop(),
6726
6804
  reason: error.message,
6727
6805
  stack: error.stack
6728
6806
  });
@@ -6845,9 +6923,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6845
6923
  }, {
6846
6924
  key: "forwardEvent",
6847
6925
  value: function forwardEvent(eventEmitter, eventTypeToForward, meetingEventType) {
6848
- var _this42 = this;
6926
+ var _this43 = this;
6849
6927
  eventEmitter.on(eventTypeToForward, function (data) {
6850
- return _triggerProxy.default.trigger(_this42, {
6928
+ return _triggerProxy.default.trigger(_this43, {
6851
6929
  file: 'meetings',
6852
6930
  function: 'addMedia'
6853
6931
  }, meetingEventType, data);
@@ -7033,7 +7111,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7033
7111
  key: "waitForRemoteSDPAnswer",
7034
7112
  value: (function () {
7035
7113
  var _waitForRemoteSDPAnswer = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee25() {
7036
- var _this43 = this;
7114
+ var _this44 = this;
7037
7115
  var LOG_HEADER, deferSDPAnswer;
7038
7116
  return _regenerator.default.wrap(function _callee25$(_context25) {
7039
7117
  while (1) switch (_context25.prev = _context25.next) {
@@ -7052,18 +7130,18 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7052
7130
  var error = new Error('Timed out waiting for REMOTE SDP ANSWER');
7053
7131
 
7054
7132
  // @ts-ignore
7055
- _this43.webex.internal.newMetrics.submitClientEvent({
7133
+ _this44.webex.internal.newMetrics.submitClientEvent({
7056
7134
  name: 'client.media-engine.remote-sdp-received',
7057
7135
  payload: {
7058
7136
  canProceed: false,
7059
7137
  errors: [
7060
7138
  // @ts-ignore
7061
- _this43.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({
7139
+ _this44.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({
7062
7140
  clientErrorCode: _internalPluginMetrics.CALL_DIAGNOSTIC_CONFIG.MISSING_ROAP_ANSWER_CLIENT_CODE
7063
7141
  })]
7064
7142
  },
7065
7143
  options: {
7066
- meetingId: _this43.id,
7144
+ meetingId: _this44.id,
7067
7145
  rawError: error
7068
7146
  }
7069
7147
  });
@@ -7570,10 +7648,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7570
7648
  }, {
7571
7649
  key: "addMedia",
7572
7650
  value: function addMedia() {
7573
- var _this44 = this;
7651
+ var _this45 = this;
7574
7652
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7575
7653
  return this.addMediaInternal(function () {
7576
- return _this44.turnServerUsed ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
7654
+ return _this45.turnServerUsed ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
7577
7655
  }, undefined, false, options);
7578
7656
  }
7579
7657
 
@@ -7606,6 +7684,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7606
7684
  remoteMediaManagerConfig,
7607
7685
  _options$bundlePolicy,
7608
7686
  bundlePolicy,
7687
+ _options$additionalMe,
7688
+ additionalMediaOptions,
7689
+ rawSendVideo,
7690
+ rawReceiveVideo,
7691
+ rawSendAudio,
7692
+ rawReceiveAudio,
7693
+ sendVideo,
7694
+ receiveVideo,
7695
+ sendAudio,
7696
+ receiveAudio,
7609
7697
  _this$remoteMediaMana,
7610
7698
  _yield$this$mediaProp,
7611
7699
  connectionType,
@@ -7662,17 +7750,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7662
7750
  }
7663
7751
  throw new _webexErrors.UserNotJoinedError();
7664
7752
  case 10:
7665
- 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;
7753
+ 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, _options$additionalMe = options.additionalMediaOptions, additionalMediaOptions = _options$additionalMe === void 0 ? {} : _options$additionalMe;
7754
+ rawSendVideo = additionalMediaOptions.sendVideo, rawReceiveVideo = additionalMediaOptions.receiveVideo, rawSendAudio = additionalMediaOptions.sendAudio, rawReceiveAudio = additionalMediaOptions.receiveAudio;
7755
+ sendVideo = videoEnabled && (rawSendVideo !== null && rawSendVideo !== void 0 ? rawSendVideo : true);
7756
+ receiveVideo = videoEnabled && (rawReceiveVideo !== null && rawReceiveVideo !== void 0 ? rawReceiveVideo : true);
7757
+ sendAudio = audioEnabled && (rawSendAudio !== null && rawSendAudio !== void 0 ? rawSendAudio : true);
7758
+ receiveAudio = audioEnabled && (rawReceiveAudio !== null && rawReceiveAudio !== void 0 ? rawReceiveAudio : true);
7666
7759
  this.allowMediaInLobby = options === null || options === void 0 ? void 0 : options.allowMediaInLobby;
7667
7760
 
7668
7761
  // If the user is unjoined or guest waiting in lobby dont allow the user to addMedia
7669
7762
  // @ts-ignore - isUserUnadmitted coming from SelfUtil
7670
7763
  if (!(this.isUserUnadmitted && !this.wirelessShare && !this.allowMediaInLobby)) {
7671
- _context35.next = 14;
7764
+ _context35.next = 19;
7672
7765
  break;
7673
7766
  }
7674
7767
  throw new _webexErrors.UserInLobbyError();
7675
- case 14:
7768
+ case 19:
7676
7769
  // @ts-ignore
7677
7770
  this.webex.internal.newMetrics.submitClientEvent({
7678
7771
  name: 'client.media.capabilities',
@@ -7702,67 +7795,67 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7702
7795
  // when audioEnabled/videoEnabled is true, we set sendAudio/sendVideo to true even before any streams are published
7703
7796
  // to avoid doing an extra SDP exchange when they are published for the first time
7704
7797
  this.mediaProperties.setMediaDirection({
7705
- sendAudio: audioEnabled,
7706
- sendVideo: videoEnabled,
7798
+ sendAudio: sendAudio,
7799
+ sendVideo: sendVideo,
7707
7800
  sendShare: false,
7708
- receiveAudio: audioEnabled,
7709
- receiveVideo: videoEnabled,
7801
+ receiveAudio: receiveAudio,
7802
+ receiveVideo: receiveVideo,
7710
7803
  receiveShare: shareAudioEnabled || shareVideoEnabled
7711
7804
  });
7712
7805
  this.audio = (0, _muteState.createMuteState)(_constants.AUDIO, this, audioEnabled);
7713
7806
  this.video = (0, _muteState.createMuteState)(_constants.VIDEO, this, videoEnabled);
7714
7807
  this.brbState = (0, _brbState.createBrbState)(this, false);
7715
- _context35.prev = 19;
7716
- _context35.next = 22;
7808
+ _context35.prev = 24;
7809
+ _context35.next = 27;
7717
7810
  return this.setUpLocalStreamReferences(localStreams);
7718
- case 22:
7811
+ case 27:
7719
7812
  this.setMercuryListener();
7720
7813
  this.createStatsAnalyzer();
7721
- _context35.prev = 24;
7722
- _context35.next = 27;
7814
+ _context35.prev = 29;
7815
+ _context35.next = 32;
7723
7816
  return this.establishMediaConnection(remoteMediaManagerConfig, bundlePolicy, forceTurnDiscovery, turnServerInfo);
7724
- case 27:
7725
- _context35.next = 40;
7817
+ case 32:
7818
+ _context35.next = 45;
7726
7819
  break;
7727
- case 29:
7728
- _context35.prev = 29;
7729
- _context35.t0 = _context35["catch"](24);
7820
+ case 34:
7821
+ _context35.prev = 34;
7822
+ _context35.t0 = _context35["catch"](29);
7730
7823
  if (!(_context35.t0 instanceof _multistreamNotSupportedError.default)) {
7731
- _context35.next = 39;
7824
+ _context35.next = 44;
7732
7825
  break;
7733
7826
  }
7734
7827
  _loggerProxy.default.logger.warn("".concat(LOG_HEADER, " we asked for multistream backend (Homer), but got transcoded backend, recreating media connection..."));
7735
- _context35.next = 35;
7828
+ _context35.next = 40;
7736
7829
  return this.downgradeFromMultistreamToTranscoded();
7737
- case 35:
7738
- _context35.next = 37;
7830
+ case 40:
7831
+ _context35.next = 42;
7739
7832
  return this.establishMediaConnection(remoteMediaManagerConfig, bundlePolicy, true, undefined);
7740
- case 37:
7741
- _context35.next = 40;
7833
+ case 42:
7834
+ _context35.next = 45;
7742
7835
  break;
7743
- case 39:
7836
+ case 44:
7744
7837
  throw _context35.t0;
7745
- case 40:
7838
+ case 45:
7746
7839
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " media connected, finalizing..."));
7747
7840
  if (!this.mediaProperties.hasLocalShareStream()) {
7748
- _context35.next = 44;
7841
+ _context35.next = 49;
7749
7842
  break;
7750
7843
  }
7751
- _context35.next = 44;
7844
+ _context35.next = 49;
7752
7845
  return this.enqueueScreenShareFloorRequest();
7753
- case 44:
7754
- _context35.next = 46;
7846
+ case 49:
7847
+ _context35.next = 51;
7755
7848
  return this.mediaProperties.getCurrentConnectionInfo();
7756
- case 46:
7849
+ case 51:
7757
7850
  _yield$this$mediaProp = _context35.sent;
7758
7851
  connectionType = _yield$this$mediaProp.connectionType;
7759
7852
  ipVersion = _yield$this$mediaProp.ipVersion;
7760
7853
  selectedCandidatePairChanges = _yield$this$mediaProp.selectedCandidatePairChanges;
7761
7854
  numTransports = _yield$this$mediaProp.numTransports;
7762
7855
  iceCandidateErrors = Object.fromEntries(this.iceCandidateErrors);
7763
- _context35.next = 54;
7856
+ _context35.next = 59;
7764
7857
  return this.getMediaReachabilityMetricFields();
7765
- case 54:
7858
+ case 59:
7766
7859
  reachabilityMetrics = _context35.sent;
7767
7860
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_SUCCESS, _objectSpread(_objectSpread(_objectSpread({
7768
7861
  correlation_id: this.correlationId,
@@ -7792,21 +7885,21 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7792
7885
  // We can log ReceiveSlot SSRCs only after the SDP exchange, so doing it here:
7793
7886
  (_this$remoteMediaMana = this.remoteMediaManager) === null || _this$remoteMediaMana === void 0 ? void 0 : _this$remoteMediaMana.logAllReceiveSlots();
7794
7887
  this.startPeriodicLogUpload();
7795
- _context35.next = 80;
7888
+ _context35.next = 85;
7796
7889
  break;
7797
- case 62:
7798
- _context35.prev = 62;
7799
- _context35.t1 = _context35["catch"](19);
7890
+ case 67:
7891
+ _context35.prev = 67;
7892
+ _context35.t1 = _context35["catch"](24);
7800
7893
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " failed to establish media connection: "), _context35.t1);
7801
7894
 
7802
7895
  // @ts-ignore
7803
- _context35.next = 67;
7896
+ _context35.next = 72;
7804
7897
  return this.getMediaReachabilityMetricFields();
7805
- case 67:
7898
+ case 72:
7806
7899
  _reachabilityMetrics = _context35.sent;
7807
- _context35.next = 70;
7900
+ _context35.next = 75;
7808
7901
  return this.mediaProperties.getCurrentConnectionInfo();
7809
- case 70:
7902
+ case 75:
7810
7903
  _yield$this$mediaProp2 = _context35.sent;
7811
7904
  _selectedCandidatePairChanges = _yield$this$mediaProp2.selectedCandidatePairChanges;
7812
7905
  _numTransports = _yield$this$mediaProp2.numTransports;
@@ -7830,9 +7923,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7830
7923
  }, _reachabilityMetrics), _iceCandidateErrors), {}, {
7831
7924
  iceCandidatesCount: this.iceCandidatesCount
7832
7925
  }));
7833
- _context35.next = 77;
7926
+ _context35.next = 82;
7834
7927
  return this.cleanUpOnAddMediaFailure();
7835
- case 77:
7928
+ case 82:
7836
7929
  // Upload logs on error while adding media
7837
7930
  _triggerProxy.default.trigger(this, {
7838
7931
  file: 'meeting/index',
@@ -7844,15 +7937,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7844
7937
  });
7845
7938
  }
7846
7939
  throw _context35.t1;
7847
- case 80:
7848
- _context35.prev = 80;
7940
+ case 85:
7941
+ _context35.prev = 85;
7849
7942
  this.addMediaData.icePhaseCallback = DEFAULT_ICE_PHASE_CALLBACK;
7850
- return _context35.finish(80);
7851
- case 83:
7943
+ return _context35.finish(85);
7944
+ case 88:
7852
7945
  case "end":
7853
7946
  return _context35.stop();
7854
7947
  }
7855
- }, _callee35, this, [[19, 62, 80, 83], [24, 29]]);
7948
+ }, _callee35, this, [[24, 67, 85, 88], [29, 34]]);
7856
7949
  }));
7857
7950
  function addMediaInternal(_x33, _x34, _x35) {
7858
7951
  return _addMediaInternal.apply(this, arguments);
@@ -7884,7 +7977,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7884
7977
  * @memberof Meeting
7885
7978
  */
7886
7979
  function enqueueMediaUpdate(mediaUpdateType) {
7887
- var _this45 = this;
7980
+ var _this46 = this;
7888
7981
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
7889
7982
  var canUpdateMediaNow = this.canUpdateMedia();
7890
7983
  return new _promise.default(function (resolve, reject) {
@@ -7895,9 +7988,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7895
7988
  options: options
7896
7989
  };
7897
7990
  _loggerProxy.default.logger.log("Meeting:index#enqueueMediaUpdate --> enqueuing media update type=".concat(mediaUpdateType));
7898
- _this45.queuedMediaUpdates.push(queueItem);
7991
+ _this46.queuedMediaUpdates.push(queueItem);
7899
7992
  if (canUpdateMediaNow) {
7900
- _this45.processNextQueuedMediaUpdate();
7993
+ _this46.processNextQueuedMediaUpdate();
7901
7994
  }
7902
7995
  });
7903
7996
  }
@@ -8002,7 +8095,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8002
8095
  }, {
8003
8096
  key: "acknowledge",
8004
8097
  value: function acknowledge(type) {
8005
- var _this46 = this;
8098
+ var _this47 = this;
8006
8099
  if (!type) {
8007
8100
  return _promise.default.reject(new _parameter.default('Type must be set to acknowledge the meeting.'));
8008
8101
  }
@@ -8014,12 +8107,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8014
8107
  }).then(function (response) {
8015
8108
  return _promise.default.resolve(response);
8016
8109
  }).then(function (response) {
8017
- _this46.meetingFiniteStateMachine.ring(type);
8110
+ _this47.meetingFiniteStateMachine.ring(type);
8018
8111
  // @ts-ignore
8019
- _this46.webex.internal.newMetrics.submitClientEvent({
8112
+ _this47.webex.internal.newMetrics.submitClientEvent({
8020
8113
  name: 'client.alert.displayed',
8021
8114
  options: {
8022
- meetingId: _this46.id
8115
+ meetingId: _this47.id
8023
8116
  }
8024
8117
  });
8025
8118
  return _promise.default.resolve({
@@ -8044,12 +8137,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8044
8137
  }, {
8045
8138
  key: "decline",
8046
8139
  value: function decline(reason) {
8047
- var _this47 = this;
8140
+ var _this48 = this;
8048
8141
  return _util2.default.declineMeeting(this, reason).then(function (decline) {
8049
- _this47.meetingFiniteStateMachine.decline();
8142
+ _this48.meetingFiniteStateMachine.decline();
8050
8143
  return _promise.default.resolve(decline);
8051
8144
  }).catch(function (error) {
8052
- _this47.meetingFiniteStateMachine.fail(error);
8145
+ _this48.meetingFiniteStateMachine.fail(error);
8053
8146
  return _promise.default.reject(error);
8054
8147
  });
8055
8148
  }
@@ -8100,7 +8193,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8100
8193
  }, {
8101
8194
  key: "leave",
8102
8195
  value: function leave() {
8103
- var _this48 = this;
8196
+ var _this49 = this;
8104
8197
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
8105
8198
  var leaveReason = options.reason || _constants.MEETING_REMOVED_REASON.CLIENT_LEAVE_REQUEST;
8106
8199
 
@@ -8112,7 +8205,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8112
8205
  var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
8113
8206
  return (
8114
8207
  // @ts-ignore
8115
- _this48.webex.internal.newMetrics.submitClientEvent({
8208
+ _this49.webex.internal.newMetrics.submitClientEvent({
8116
8209
  name: 'client.call.leave',
8117
8210
  payload: _objectSpread({
8118
8211
  trigger: 'user-interaction',
@@ -8120,7 +8213,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8120
8213
  leaveReason: options.clientEventLeaveReason
8121
8214
  }, payload),
8122
8215
  options: {
8123
- meetingId: _this48.id
8216
+ meetingId: _this49.id
8124
8217
  }
8125
8218
  })
8126
8219
  );
@@ -8129,24 +8222,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8129
8222
  return _util2.default.leaveMeeting(this, options).then(function (leave) {
8130
8223
  // CA team recommends submitting this *after* locus /leave
8131
8224
  submitLeaveMetric();
8132
- _this48.meetingFiniteStateMachine.leave();
8133
- _this48.clearMeetingData();
8225
+ _this49.meetingFiniteStateMachine.leave();
8226
+ _this49.clearMeetingData();
8134
8227
 
8135
8228
  // upload logs on leave irrespective of meeting delete
8136
- _triggerProxy.default.trigger(_this48, {
8229
+ _triggerProxy.default.trigger(_this49, {
8137
8230
  file: 'meeting/index',
8138
8231
  function: 'leave'
8139
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this48);
8232
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this49);
8140
8233
 
8141
8234
  // TODO: more testing before we remove this code, we are not sure the scenarios for destroy here
8142
- if (_this48.wirelessShare || _this48.guest) {
8235
+ if (_this49.wirelessShare || _this49.guest) {
8143
8236
  // If screen sharing clean the meeting object
8144
- _triggerProxy.default.trigger(_this48, {
8237
+ _triggerProxy.default.trigger(_this49, {
8145
8238
  file: 'meeting/index',
8146
8239
  function: 'leave'
8147
8240
  }, _constants.EVENTS.DESTROY_MEETING, {
8148
8241
  reason: options.reason,
8149
- meetingId: _this48.id
8242
+ meetingId: _this49.id
8150
8243
  });
8151
8244
  }
8152
8245
  _loggerProxy.default.logger.log('Meeting:index#leave --> LEAVE REASON ', leaveReason);
@@ -8163,16 +8256,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8163
8256
  shownToUser: false
8164
8257
  }]
8165
8258
  });
8166
- _this48.meetingFiniteStateMachine.fail(error);
8259
+ _this49.meetingFiniteStateMachine.fail(error);
8167
8260
  _loggerProxy.default.logger.error('Meeting:index#leave --> Failed to leave ', error);
8168
8261
  // upload logs on leave irrespective of meeting delete
8169
- _triggerProxy.default.trigger(_this48, {
8262
+ _triggerProxy.default.trigger(_this49, {
8170
8263
  file: 'meeting/index',
8171
8264
  function: 'leave'
8172
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this48);
8265
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this49);
8173
8266
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_LEAVE_FAILURE, {
8174
- correlation_id: _this48.correlationId,
8175
- locus_id: _this48.locusUrl.split('/').pop(),
8267
+ correlation_id: _this49.correlationId,
8268
+ locus_id: _this49.locusUrl.split('/').pop(),
8176
8269
  reason: error.message,
8177
8270
  stack: error.stack,
8178
8271
  code: error.code
@@ -8192,7 +8285,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8192
8285
  }, {
8193
8286
  key: "startWhiteboardShare",
8194
8287
  value: function startWhiteboardShare(channelUrl, resourceToken) {
8195
- var _this49 = this;
8288
+ var _this50 = this;
8196
8289
  var whiteboard = this.locusInfo.mediaShares.find(function (element) {
8197
8290
  return element.name === 'whiteboard';
8198
8291
  });
@@ -8200,6 +8293,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8200
8293
  return _promise.default.reject(new _parameter.default('Cannot share without channelUrl.'));
8201
8294
  }
8202
8295
  if (whiteboard) {
8296
+ // @ts-ignore
8297
+ this.webex.internal.newMetrics.callDiagnosticLatencies.saveTimestamp({
8298
+ key: 'internal.client.share.initiated'
8299
+ });
8203
8300
  // @ts-ignore
8204
8301
  this.webex.internal.newMetrics.submitClientEvent({
8205
8302
  name: 'client.share.initiated',
@@ -8221,13 +8318,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8221
8318
  body.resourceToken = resourceToken;
8222
8319
  }
8223
8320
  return this.meetingRequest.changeMeetingFloor(body).then(function () {
8224
- _this49.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
8321
+ _this50.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
8225
8322
  return _promise.default.resolve();
8226
8323
  }).catch(function (error) {
8227
8324
  _loggerProxy.default.logger.error('Meeting:index#startWhiteboardShare --> Error ', error);
8228
8325
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_START_WHITEBOARD_SHARE_FAILURE, {
8229
- correlation_id: _this49.correlationId,
8230
- locus_id: _this49.locusUrl.split('/').pop(),
8326
+ correlation_id: _this50.correlationId,
8327
+ locus_id: _this50.locusUrl.split('/').pop(),
8231
8328
  reason: error.message,
8232
8329
  stack: error.stack,
8233
8330
  board: {
@@ -8250,16 +8347,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8250
8347
  }, {
8251
8348
  key: "stopWhiteboardShare",
8252
8349
  value: function stopWhiteboardShare(channelUrl) {
8253
- var _this50 = this;
8350
+ var _this51 = this;
8254
8351
  var whiteboard = this.locusInfo.mediaShares.find(function (element) {
8255
8352
  return element.name === 'whiteboard';
8256
8353
  });
8257
8354
  if (whiteboard) {
8355
+ // @ts-ignore
8356
+ this.webex.internal.newMetrics.callDiagnosticLatencies.saveTimestamp({
8357
+ key: 'internal.client.share.stopped'
8358
+ });
8258
8359
  // @ts-ignore
8259
8360
  this.webex.internal.newMetrics.submitClientEvent({
8260
8361
  name: 'client.share.stopped',
8261
8362
  payload: {
8262
- mediaType: 'whiteboard'
8363
+ mediaType: 'whiteboard',
8364
+ // @ts-ignore
8365
+ shareDuration: this.webex.internal.newMetrics.callDiagnosticLatencies.getShareDuration()
8263
8366
  },
8264
8367
  options: {
8265
8368
  meetingId: this.id
@@ -8273,8 +8376,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8273
8376
  }).catch(function (error) {
8274
8377
  _loggerProxy.default.logger.error('Meeting:index#stopWhiteboardShare --> Error ', error);
8275
8378
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_STOP_WHITEBOARD_SHARE_FAILURE, {
8276
- correlation_id: _this50.correlationId,
8277
- locus_id: _this50.locusUrl.split('/').pop(),
8379
+ correlation_id: _this51.correlationId,
8380
+ locus_id: _this51.locusUrl.split('/').pop(),
8278
8381
  reason: error.message,
8279
8382
  stack: error.stack,
8280
8383
  board: {
@@ -8296,7 +8399,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8296
8399
  }, {
8297
8400
  key: "requestScreenShareFloor",
8298
8401
  value: function requestScreenShareFloor() {
8299
- var _this51 = this;
8402
+ var _this52 = this;
8300
8403
  if (!this.mediaProperties.hasLocalShareStream() || !this.mediaProperties.mediaDirection.sendShare) {
8301
8404
  _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, ")"));
8302
8405
  this.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
@@ -8327,34 +8430,34 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8327
8430
  resourceUrl: this.resourceUrl,
8328
8431
  shareInstanceId: this.localShareInstanceId
8329
8432
  }).then(function () {
8330
- _this51.screenShareFloorState = ScreenShareFloorStatus.GRANTED;
8433
+ _this52.screenShareFloorState = ScreenShareFloorStatus.GRANTED;
8331
8434
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_SUCCESS, {
8332
- correlation_id: _this51.correlationId,
8333
- locus_id: _this51.locusUrl.split('/').pop()
8435
+ correlation_id: _this52.correlationId,
8436
+ locus_id: _this52.locusUrl.split('/').pop()
8334
8437
  });
8335
8438
  return _promise.default.resolve();
8336
8439
  }).catch(function (error) {
8337
8440
  _loggerProxy.default.logger.error('Meeting:index#share --> Error ', error);
8338
8441
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_FAILURE, {
8339
- correlation_id: _this51.correlationId,
8340
- locus_id: _this51.locusUrl.split('/').pop(),
8442
+ correlation_id: _this52.correlationId,
8443
+ locus_id: _this52.locusUrl.split('/').pop(),
8341
8444
  reason: error.message,
8342
8445
  stack: error.stack
8343
8446
  });
8344
8447
 
8345
8448
  // @ts-ignore
8346
- _this51.webex.internal.newMetrics.submitClientEvent({
8449
+ _this52.webex.internal.newMetrics.submitClientEvent({
8347
8450
  name: 'client.share.floor-granted.local',
8348
8451
  payload: {
8349
8452
  mediaType: 'share',
8350
8453
  errors: _util2.default.getChangeMeetingFloorErrorPayload(error.message),
8351
- shareInstanceId: _this51.localShareInstanceId
8454
+ shareInstanceId: _this52.localShareInstanceId
8352
8455
  },
8353
8456
  options: {
8354
- meetingId: _this51.id
8457
+ meetingId: _this52.id
8355
8458
  }
8356
8459
  });
8357
- _this51.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
8460
+ _this52.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
8358
8461
  return _promise.default.reject(error);
8359
8462
  });
8360
8463
  }
@@ -8377,10 +8480,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8377
8480
  }, {
8378
8481
  key: "requestScreenShareFloorIfPending",
8379
8482
  value: function requestScreenShareFloorIfPending() {
8380
- var _this52 = this;
8483
+ var _this53 = this;
8381
8484
  if (this.floorGrantPending && this.state === _constants.MEETING_STATE.STATES.JOINED) {
8382
8485
  this.requestScreenShareFloor().then(function () {
8383
- _this52.floorGrantPending = false;
8486
+ _this53.floorGrantPending = false;
8384
8487
  });
8385
8488
  }
8386
8489
  }
@@ -8394,7 +8497,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8394
8497
  }, {
8395
8498
  key: "releaseScreenShareFloor",
8396
8499
  value: function releaseScreenShareFloor() {
8397
- var _this53 = this;
8500
+ var _this54 = this;
8398
8501
  var content = this.locusInfo.mediaShares.find(function (element) {
8399
8502
  return element.name === _constants.CONTENT;
8400
8503
  });
@@ -8405,11 +8508,17 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8405
8508
  if (content) {
8406
8509
  var _content$floor;
8407
8510
  // @ts-ignore
8511
+ this.webex.internal.newMetrics.callDiagnosticLatencies.saveTimestamp({
8512
+ key: 'internal.client.share.stopped'
8513
+ });
8514
+ // @ts-ignore
8408
8515
  this.webex.internal.newMetrics.submitClientEvent({
8409
8516
  name: 'client.share.stopped',
8410
8517
  payload: {
8411
8518
  mediaType: 'share',
8412
- shareInstanceId: this.localShareInstanceId
8519
+ shareInstanceId: this.localShareInstanceId,
8520
+ // @ts-ignore
8521
+ shareDuration: this.webex.internal.newMetrics.callDiagnosticLatencies.getShareDuration()
8413
8522
  },
8414
8523
  options: {
8415
8524
  meetingId: this.id
@@ -8429,8 +8538,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8429
8538
  }).catch(function (error) {
8430
8539
  _loggerProxy.default.logger.error('Meeting:index#releaseScreenShareFloor --> Error ', error);
8431
8540
  _metrics.default.sendBehavioralMetric(_constants2.default.STOP_FLOOR_REQUEST_FAILURE, {
8432
- correlation_id: _this53.correlationId,
8433
- locus_id: _this53.locusUrl.split('/').pop(),
8541
+ correlation_id: _this54.correlationId,
8542
+ locus_id: _this54.locusUrl.split('/').pop(),
8434
8543
  reason: error.message,
8435
8544
  stack: error.stack
8436
8545
  });
@@ -8610,7 +8719,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8610
8719
  }, {
8611
8720
  key: "changeVideoLayout",
8612
8721
  value: function changeVideoLayout(layoutType) {
8613
- var _this54 = this;
8722
+ var _this55 = this;
8614
8723
  var renderInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
8615
8724
  var main = renderInfo.main,
8616
8725
  content = renderInfo.content;
@@ -8664,7 +8773,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8664
8773
  }
8665
8774
  this.lastVideoLayoutInfo = (0, _lodash.cloneDeep)(layoutInfo);
8666
8775
  this.locusInfo.once(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED, function (envelope) {
8667
- _triggerProxy.default.trigger(_this54, {
8776
+ _triggerProxy.default.trigger(_this55, {
8668
8777
  file: 'meeting/index',
8669
8778
  function: 'changeVideoLayout'
8670
8779
  }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_LAYOUT_UPDATE, {
@@ -8780,7 +8889,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8780
8889
  }, {
8781
8890
  key: "endMeetingForAll",
8782
8891
  value: function endMeetingForAll() {
8783
- var _this55 = this;
8892
+ var _this56 = this;
8784
8893
  // @ts-ignore
8785
8894
  this.webex.internal.newMetrics.submitClientEvent({
8786
8895
  name: 'client.call.leave',
@@ -8798,25 +8907,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8798
8907
  locus_id: this.locusId
8799
8908
  });
8800
8909
  return _util2.default.endMeetingForAll(this).then(function (end) {
8801
- _this55.meetingFiniteStateMachine.end();
8802
- _this55.clearMeetingData();
8910
+ _this56.meetingFiniteStateMachine.end();
8911
+ _this56.clearMeetingData();
8803
8912
  // upload logs on leave irrespective of meeting delete
8804
- _triggerProxy.default.trigger(_this55, {
8913
+ _triggerProxy.default.trigger(_this56, {
8805
8914
  file: 'meeting/index',
8806
8915
  function: 'endMeetingForAll'
8807
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this55);
8916
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this56);
8808
8917
  return end;
8809
8918
  }).catch(function (error) {
8810
- _this55.meetingFiniteStateMachine.fail(error);
8919
+ _this56.meetingFiniteStateMachine.fail(error);
8811
8920
  _loggerProxy.default.logger.error('Meeting:index#endMeetingForAll --> Failed to end meeting ', error);
8812
8921
  // upload logs on leave irrespective of meeting delete
8813
- _triggerProxy.default.trigger(_this55, {
8922
+ _triggerProxy.default.trigger(_this56, {
8814
8923
  file: 'meeting/index',
8815
8924
  function: 'endMeetingForAll'
8816
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this55);
8925
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this56);
8817
8926
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_END_ALL_FAILURE, {
8818
- correlation_id: _this55.correlationId,
8819
- locus_id: _this55.locusUrl.split('/').pop(),
8927
+ correlation_id: _this56.correlationId,
8928
+ locus_id: _this56.locusUrl.split('/').pop(),
8820
8929
  reason: error.message,
8821
8930
  stack: error.stack,
8822
8931
  code: error.code
@@ -8977,7 +9086,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8977
9086
  _this$mediaProperties43,
8978
9087
  _this$mediaProperties44,
8979
9088
  _this$mediaProperties45,
8980
- _this56 = this;
9089
+ _this57 = this;
8981
9090
  var LOG_HEADER = 'Meeting:index#updateTranscodedMediaConnection -->';
8982
9091
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " starting"));
8983
9092
  if (!this.canUpdateMedia()) {
@@ -9002,8 +9111,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9002
9111
  }).catch(function (error) {
9003
9112
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " Error: "), error);
9004
9113
  _metrics.default.sendBehavioralMetric(_constants2.default.UPDATE_MEDIA_FAILURE, {
9005
- correlation_id: _this56.correlationId,
9006
- locus_id: _this56.locusUrl.split('/').pop(),
9114
+ correlation_id: _this57.correlationId,
9115
+ locus_id: _this57.locusUrl.split('/').pop(),
9007
9116
  reason: error.message,
9008
9117
  stack: error.stack
9009
9118
  });
@@ -9225,13 +9334,18 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9225
9334
  return this.updateTranscodedMediaConnection();
9226
9335
  case 31:
9227
9336
  if (!floorRequestNeeded) {
9228
- _context40.next = 39;
9337
+ _context40.next = 40;
9229
9338
  break;
9230
9339
  }
9231
9340
  this.localShareInstanceId = _uuid.default.v4();
9232
9341
  this.shareCAEventSentStatus.transmitStart = false;
9233
9342
  this.shareCAEventSentStatus.transmitStop = false;
9234
9343
 
9344
+ // @ts-ignore
9345
+ this.webex.internal.newMetrics.callDiagnosticLatencies.saveTimestamp({
9346
+ key: 'internal.client.share.initiated'
9347
+ });
9348
+
9235
9349
  // @ts-ignore
9236
9350
  this.webex.internal.newMetrics.submitClientEvent({
9237
9351
  name: 'client.share.initiated',
@@ -9251,9 +9365,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9251
9365
  // we're sending the http request to Locus to request the screen share floor
9252
9366
  // only after the SDP update, because that's how it's always been done for transcoded meetings
9253
9367
  // and also if sharing from the start, we need confluence to have been created
9254
- _context40.next = 39;
9368
+ _context40.next = 40;
9255
9369
  return this.enqueueScreenShareFloorRequest();
9256
- case 39:
9370
+ case 40:
9257
9371
  case "end":
9258
9372
  return _context40.stop();
9259
9373
  }
@@ -9401,7 +9515,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9401
9515
  key: "getMediaReachabilityMetricFields",
9402
9516
  value: (function () {
9403
9517
  var _getMediaReachabilityMetricFields = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee42() {
9404
- var reachabilityMetrics, successKeys, totalSuccessCases, isSubnetReachable, selectedCluster;
9518
+ var _this$mediaServerIp, _this$mediaConnection, _this$mediaConnection2, _this$mediaConnection3;
9519
+ var reachabilityMetrics, successKeys, totalSuccessCases, selectedSubnetFirstOctet, isSubnetReachable, selectedCluster;
9405
9520
  return _regenerator.default.wrap(function _callee42$(_context42) {
9406
9521
  while (1) switch (_context42.prev = _context42.next) {
9407
9522
  case 0:
@@ -9417,18 +9532,18 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9417
9532
  }
9418
9533
  return total;
9419
9534
  }, 0);
9535
+ selectedSubnetFirstOctet = (_this$mediaServerIp = this.mediaServerIp) === null || _this$mediaServerIp === void 0 ? void 0 : _this$mediaServerIp.split('.')[0];
9420
9536
  isSubnetReachable = null;
9421
- if (totalSuccessCases > 0) {
9537
+ if (totalSuccessCases > 0 && selectedSubnetFirstOctet) {
9538
+ isSubnetReachable =
9422
9539
  // @ts-ignore
9423
- isSubnetReachable = this.webex.meetings.reachability.isSubnetReachable(this.mediaServerIp);
9424
- }
9425
- selectedCluster = null;
9426
- if (this.mediaConnections && this.mediaConnections.length > 0) {
9427
- selectedCluster = this.mediaConnections[0].mediaAgentCluster;
9540
+ this.webex.meetings.reachability.isSubnetReachable(selectedSubnetFirstOctet);
9428
9541
  }
9542
+ selectedCluster = (_this$mediaConnection = (_this$mediaConnection2 = this.mediaConnections) === null || _this$mediaConnection2 === void 0 ? void 0 : (_this$mediaConnection3 = _this$mediaConnection2[0]) === null || _this$mediaConnection3 === void 0 ? void 0 : _this$mediaConnection3.mediaAgentCluster) !== null && _this$mediaConnection !== void 0 ? _this$mediaConnection : null;
9429
9543
  return _context42.abrupt("return", _objectSpread(_objectSpread({}, reachabilityMetrics), {}, {
9430
- isSubnetReachable: isSubnetReachable,
9431
- selectedCluster: selectedCluster
9544
+ subnet_reachable: isSubnetReachable,
9545
+ selected_cluster: selectedCluster,
9546
+ selected_subnet: selectedSubnetFirstOctet ? "".concat(selectedSubnetFirstOctet, ".X.X.X") : null
9432
9547
  }));
9433
9548
  case 10:
9434
9549
  case "end":
@@ -9440,7 +9555,84 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9440
9555
  return _getMediaReachabilityMetricFields.apply(this, arguments);
9441
9556
  }
9442
9557
  return getMediaReachabilityMetricFields;
9443
- }())
9558
+ }()
9559
+ /**
9560
+ * Set the stage for the meeting
9561
+ *
9562
+ * @param {SetStageOptions} options Options to use when setting the stage
9563
+ * @returns {Promise} The locus request
9564
+ */
9565
+ )
9566
+ }, {
9567
+ key: "setStage",
9568
+ value: function setStage() {
9569
+ var _ref37 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
9570
+ _ref37$activeSpeakerP = _ref37.activeSpeakerProportion,
9571
+ activeSpeakerProportion = _ref37$activeSpeakerP === void 0 ? 0.5 : _ref37$activeSpeakerP,
9572
+ customBackground = _ref37.customBackground,
9573
+ customLogo = _ref37.customLogo,
9574
+ customNameLabel = _ref37.customNameLabel,
9575
+ importantParticipants = _ref37.importantParticipants,
9576
+ _ref37$lockAttendeeVi = _ref37.lockAttendeeViewOnStage,
9577
+ lockAttendeeViewOnStage = _ref37$lockAttendeeVi === void 0 ? false : _ref37$lockAttendeeVi,
9578
+ _ref37$showActiveSpea = _ref37.showActiveSpeaker,
9579
+ showActiveSpeaker = _ref37$showActiveSpea === void 0 ? false : _ref37$showActiveSpea;
9580
+ var videoLayout = {
9581
+ overrideDefault: true,
9582
+ lockAttendeeViewOnStageOnly: lockAttendeeViewOnStage,
9583
+ stageParameters: {
9584
+ activeSpeakerProportion: activeSpeakerProportion,
9585
+ showActiveSpeaker: {
9586
+ show: showActiveSpeaker,
9587
+ order: 0
9588
+ },
9589
+ stageManagerType: 0
9590
+ }
9591
+ };
9592
+ if (importantParticipants !== null && importantParticipants !== void 0 && importantParticipants.length) {
9593
+ videoLayout.stageParameters.importantParticipants = importantParticipants.map(function (importantParticipant, index) {
9594
+ return _objectSpread(_objectSpread({}, importantParticipant), {}, {
9595
+ order: index + 1
9596
+ });
9597
+ });
9598
+ }
9599
+ if (customLogo) {
9600
+ if (!videoLayout.customLayouts) {
9601
+ videoLayout.customLayouts = {};
9602
+ }
9603
+ videoLayout.customLayouts.logo = customLogo;
9604
+ // eslint-disable-next-line no-bitwise
9605
+ videoLayout.stageParameters.stageManagerType |= _constants.STAGE_MANAGER_TYPE.LOGO;
9606
+ }
9607
+ if (customBackground) {
9608
+ if (!videoLayout.customLayouts) {
9609
+ videoLayout.customLayouts = {};
9610
+ }
9611
+ videoLayout.customLayouts.background = customBackground;
9612
+ // eslint-disable-next-line no-bitwise
9613
+ videoLayout.stageParameters.stageManagerType |= _constants.STAGE_MANAGER_TYPE.BACKGROUND;
9614
+ }
9615
+ if (customNameLabel) {
9616
+ videoLayout.nameLabelStyle = customNameLabel;
9617
+ // eslint-disable-next-line no-bitwise
9618
+ videoLayout.stageParameters.stageManagerType |= _constants.STAGE_MANAGER_TYPE.NAME_LABEL;
9619
+ }
9620
+ return this.meetingRequest.synchronizeStage(this.locusUrl, videoLayout);
9621
+ }
9622
+
9623
+ /**
9624
+ * Unset the stage for the meeting
9625
+ *
9626
+ * @returns {Promise} The locus request
9627
+ */
9628
+ }, {
9629
+ key: "unsetStage",
9630
+ value: function unsetStage() {
9631
+ var videoLayout = {
9632
+ overrideDefault: false
9633
+ };
9634
+ return this.meetingRequest.synchronizeStage(this.locusUrl, videoLayout);
9635
+ }
9444
9636
  }]);
9445
9637
  return Meeting;
9446
9638
  }(_webexCore.StatelessWebexPlugin);