@webex/plugin-meetings 3.8.1 → 3.9.0

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 +68 -84
  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 +428 -253
  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 +88 -82
  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 +254 -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 +218 -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 +901 -84
  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)) {
@@ -3794,7 +3853,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3794
3853
  }, _callee8, null, [[27,, 31, 34]]);
3795
3854
  }));
3796
3855
  return function (_x8) {
3797
- return _ref29.apply(this, arguments);
3856
+ return _ref31.apply(this, arguments);
3798
3857
  };
3799
3858
  }());
3800
3859
  }
@@ -3908,8 +3967,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3908
3967
  });
3909
3968
  }
3910
3969
  });
3911
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEETING_INFO_UPDATED, function (_ref30) {
3912
- var isInitializing = _ref30.isInitializing;
3970
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEETING_INFO_UPDATED, function (_ref32) {
3971
+ var isInitializing = _ref32.isInitializing;
3913
3972
  _this19.updateMeetingActions();
3914
3973
  _this19.recordingController.setDisplayHints(_this19.userDisplayHints);
3915
3974
  _this19.recordingController.setUserPolicy(_this19.selfUserPolicies);
@@ -4047,7 +4106,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4047
4106
  _this21.updateLLMConnection();
4048
4107
  });
4049
4108
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST, /*#__PURE__*/function () {
4050
- var _ref31 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(payload) {
4109
+ var _ref33 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(payload) {
4051
4110
  var _this21$rtcMetrics;
4052
4111
  return _regenerator.default.wrap(function _callee9$(_context9) {
4053
4112
  while (1) switch (_context9.prev = _context9.next) {
@@ -4081,7 +4140,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4081
4140
  }, _callee9);
4082
4141
  }));
4083
4142
  return function (_x9) {
4084
- return _ref31.apply(this, arguments);
4143
+ return _ref33.apply(this, arguments);
4085
4144
  };
4086
4145
  }());
4087
4146
 
@@ -4200,7 +4259,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4200
4259
  }
4201
4260
  });
4202
4261
  this.locusInfo.on(_constants.EVENTS.DESTROY_MEETING, /*#__PURE__*/function () {
4203
- var _ref32 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(payload) {
4262
+ var _ref34 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(payload) {
4204
4263
  return _regenerator.default.wrap(function _callee10$(_context10) {
4205
4264
  while (1) switch (_context10.prev = _context10.next) {
4206
4265
  case 0:
@@ -4260,7 +4319,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4260
4319
  }, _callee10, null, [[8, 14]]);
4261
4320
  }));
4262
4321
  return function (_x10) {
4263
- return _ref32.apply(this, arguments);
4322
+ return _ref34.apply(this, arguments);
4264
4323
  };
4265
4324
  }());
4266
4325
  }
@@ -4289,11 +4348,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4289
4348
 
4290
4349
  /**
4291
4350
  * Invite a guest to the call that isn't normally part of this call
4292
- * @param {Object} invitee
4351
+ * @param {Invitee} invitee
4293
4352
  * @param {String} invitee.emailAddress
4294
4353
  * @param {String} invitee.email
4295
4354
  * @param {String} invitee.phoneNumber
4296
4355
  * @param {Boolean} [alertIfActive]
4356
+ * @param {Boolean} [invitee.skipEmailValidation]
4357
+ * @param {Boolean} [invitee.isInternalNumber]
4297
4358
  * @returns {Promise} see #members.addMember
4298
4359
  * @public
4299
4360
  * @memberof Meeting
@@ -4307,7 +4368,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4307
4368
 
4308
4369
  /**
4309
4370
  * Cancel an outgoing phone call invitation made during a meeting
4310
- * @param {Object} invitee
4371
+ * @param {Invitee} invitee
4311
4372
  * @param {String} invitee.phoneNumber
4312
4373
  * @returns {Promise} see #members.cancelPhoneInvite
4313
4374
  * @public
@@ -4320,17 +4381,18 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4320
4381
  }
4321
4382
 
4322
4383
  /**
4323
- * Cancel an SIP call invitation made during a meeting
4324
- * @param {Object} invitee
4384
+ * Cancel an SIP/phone call invitation made during a meeting
4385
+ * @param {Invitee} invitee
4325
4386
  * @param {String} invitee.memberId
4326
- * @returns {Promise} see #members.cancelSIPInvite
4387
+ * @param {Boolean} [invitee.isInternalNumber] - When cancel phone invitation, if the number is internal
4388
+ * @returns {Promise} see #members.cancelInviteByMemberId
4327
4389
  * @public
4328
4390
  * @memberof Meeting
4329
4391
  */
4330
4392
  }, {
4331
- key: "cancelSIPInvite",
4332
- value: function cancelSIPInvite(invitee) {
4333
- return this.members.cancelSIPInvite(invitee);
4393
+ key: "cancelInviteByMemberId",
4394
+ value: function cancelInviteByMemberId(invitee) {
4395
+ return this.members.cancelInviteByMemberId(invitee);
4334
4396
  }
4335
4397
 
4336
4398
  /**
@@ -4405,6 +4467,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4405
4467
  // so we need to explicitly update remote mute for correct logic flow
4406
4468
  _this24.audio.handleServerRemoteMuteUpdate(_this24, enabled);
4407
4469
  }
4470
+ }).catch(function (error) {
4471
+ return _promise.default.reject(error);
4408
4472
  }));
4409
4473
  case 11:
4410
4474
  case "end":
@@ -4613,6 +4677,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4613
4677
  isClosedCaptionActive: _util2.default.isClosedCaptionActive(this.userDisplayHints),
4614
4678
  canStartManualCaption: _util2.default.canStartManualCaption(this.userDisplayHints),
4615
4679
  canStopManualCaption: _util2.default.canStopManualCaption(this.userDisplayHints),
4680
+ isLocalRecordingStarted: _util2.default.isLocalRecordingStarted(this.userDisplayHints),
4681
+ isLocalRecordingStopped: _util2.default.isLocalRecordingStopped(this.userDisplayHints),
4682
+ isLocalRecordingPaused: _util2.default.isLocalRecordingPaused(this.userDisplayHints),
4616
4683
  isManualCaptionActive: _util2.default.isManualCaptionActive(this.userDisplayHints),
4617
4684
  isSaveTranscriptsEnabled: _util2.default.isSaveTranscriptsEnabled(this.userDisplayHints),
4618
4685
  isWebexAssistantActive: _util2.default.isWebexAssistantActive(this.userDisplayHints),
@@ -4822,6 +4889,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4822
4889
  canDisableRemoteDesktopControl: _util5.default.hasHints({
4823
4890
  requiredHints: [_constants.DISPLAY_HINTS.DISABLE_RDC_MEETING_OPTION],
4824
4891
  displayHints: this.userDisplayHints
4892
+ }),
4893
+ canEnablePollingQA: _util5.default.hasHints({
4894
+ requiredHints: [_constants.DISPLAY_HINTS.ENABLE_ATTENDEE_START_POLLING_QA],
4895
+ displayHints: this.userDisplayHints
4896
+ }),
4897
+ canDisablePollingQA: _util5.default.hasHints({
4898
+ requiredHints: [_constants.DISPLAY_HINTS.DISABLE_ATTENDEE_START_POLLING_QA],
4899
+ displayHints: this.userDisplayHints
4825
4900
  })
4826
4901
  }) || changed;
4827
4902
  }
@@ -5343,13 +5418,6 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5343
5418
 
5344
5419
  // Only send restore event when it was disconnected before and for connected later
5345
5420
  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
5421
  _metrics.default.sendBehavioralMetric(_constants2.default.MERCURY_CONNECTION_RESTORED, {
5354
5422
  correlation_id: _this27.correlationId
5355
5423
  });
@@ -5360,13 +5428,6 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5360
5428
  // @ts-ignore
5361
5429
  this.webex.internal.mercury.on(_constants.OFFLINE, function () {
5362
5430
  _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
5431
  _metrics.default.sendBehavioralMetric(_constants2.default.MERCURY_CONNECTION_FAILURE, {
5371
5432
  correlation_id: _this27.correlationId
5372
5433
  });
@@ -6293,24 +6354,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6293
6354
  _this36.deferJoin = undefined;
6294
6355
  return join;
6295
6356
  }).catch(function (error) {
6296
- var _this36$meetingInfo, _error$error;
6357
+ var _error$error;
6297
6358
  _this36.meetingFiniteStateMachine.fail(error);
6298
6359
  _loggerProxy.default.logger.error('Meeting:index#join --> Failed', error);
6299
6360
 
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
6361
  // TODO: change this to error codes and pre defined dictionary
6315
6362
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_FAILURE, {
6316
6363
  correlation_id: _this36.correlationId,
@@ -6464,14 +6511,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6464
6511
  value: function dialInPstn() {
6465
6512
  var _this38 = this;
6466
6513
  if (this.isPhoneProvisioned(this.dialInDeviceStatus)) return _promise.default.resolve(); // prevent multiple dial in devices from being provisioned
6467
-
6468
- var correlationId = this.correlationId,
6514
+ this.pstnCorrelationId = _uuid.default.v4();
6515
+ var pstnCorrelationId = this.pstnCorrelationId,
6469
6516
  locusUrl = this.locusUrl;
6470
6517
  if (!this.dialInUrl) this.dialInUrl = "dialin:///".concat(_uuid.default.v4());
6471
6518
  return this.meetingRequest
6472
6519
  // @ts-ignore
6473
6520
  .dialIn({
6474
- correlationId: correlationId,
6521
+ correlationId: pstnCorrelationId,
6475
6522
  dialInUrl: this.dialInUrl,
6476
6523
  locusUrl: locusUrl,
6477
6524
  clientUrl: this.deviceUrl
@@ -6480,11 +6527,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6480
6527
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_DIAL_IN_FAILURE, {
6481
6528
  correlation_id: _this38.correlationId,
6482
6529
  dial_in_url: _this38.dialInUrl,
6530
+ dial_in_correlation_id: pstnCorrelationId,
6483
6531
  locus_id: locusUrl.split('/').pop(),
6484
6532
  client_url: _this38.deviceUrl,
6485
6533
  reason: (_error$error2 = error.error) === null || _error$error2 === void 0 ? void 0 : _error$error2.message,
6486
6534
  stack: error.stack
6487
6535
  });
6536
+ if (_this38.pstnCorrelationId === pstnCorrelationId) {
6537
+ _this38.pstnCorrelationId = undefined;
6538
+ }
6488
6539
  return _promise.default.reject(error);
6489
6540
  });
6490
6541
  }
@@ -6501,14 +6552,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6501
6552
  value: function dialOutPstn(phoneNumber) {
6502
6553
  var _this39 = this;
6503
6554
  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;
6555
+ this.pstnCorrelationId = _uuid.default.v4();
6556
+ var locusUrl = this.locusUrl,
6557
+ pstnCorrelationId = this.pstnCorrelationId;
6507
6558
  if (!this.dialOutUrl) this.dialOutUrl = "dialout:///".concat(_uuid.default.v4());
6508
6559
  return this.meetingRequest
6509
6560
  // @ts-ignore
6510
6561
  .dialOut({
6511
- correlationId: correlationId,
6562
+ correlationId: pstnCorrelationId,
6512
6563
  dialOutUrl: this.dialOutUrl,
6513
6564
  phoneNumber: phoneNumber,
6514
6565
  locusUrl: locusUrl,
@@ -6518,11 +6569,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6518
6569
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_DIAL_OUT_FAILURE, {
6519
6570
  correlation_id: _this39.correlationId,
6520
6571
  dial_out_url: _this39.dialOutUrl,
6572
+ dial_out_correlation_id: pstnCorrelationId,
6521
6573
  locus_id: locusUrl.split('/').pop(),
6522
6574
  client_url: _this39.deviceUrl,
6523
6575
  reason: (_error$error3 = error.error) === null || _error$error3 === void 0 ? void 0 : _error$error3.message,
6524
6576
  stack: error.stack
6525
6577
  });
6578
+ if (_this39.pstnCorrelationId === pstnCorrelationId) {
6579
+ _this39.pstnCorrelationId = undefined;
6580
+ }
6526
6581
  return _promise.default.reject(error);
6527
6582
  });
6528
6583
  }
@@ -6537,7 +6592,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6537
6592
  }, {
6538
6593
  key: "disconnectPhoneAudio",
6539
6594
  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()]);
6595
+ var _this40 = this;
6596
+ var correlationToClear = this.pstnCorrelationId;
6597
+ 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 () {
6598
+ if (_this40.pstnCorrelationId === correlationToClear) {
6599
+ _this40.pstnCorrelationId = undefined;
6600
+ }
6601
+ });
6541
6602
  }
6542
6603
 
6543
6604
  /**
@@ -6550,7 +6611,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6550
6611
  }, {
6551
6612
  key: "moveTo",
6552
6613
  value: function moveTo(resourceId) {
6553
- var _this40 = this;
6614
+ var _this41 = this;
6554
6615
  if (!resourceId) {
6555
6616
  throw new _parameter.default('Cannot move call without a resourceId.');
6556
6617
  }
@@ -6594,12 +6655,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6594
6655
  while (1) switch (_context21.prev = _context21.next) {
6595
6656
  case 0:
6596
6657
  _context21.prev = 0;
6597
- if (!(_this40.screenShareFloorState === ScreenShareFloorStatus.GRANTED)) {
6658
+ if (!(_this41.screenShareFloorState === ScreenShareFloorStatus.GRANTED)) {
6598
6659
  _context21.next = 4;
6599
6660
  break;
6600
6661
  }
6601
6662
  _context21.next = 4;
6602
- return _this40.releaseScreenShareFloor();
6663
+ return _this41.releaseScreenShareFloor();
6603
6664
  case 4:
6604
6665
  mediaSettings = {
6605
6666
  mediaDirection: {
@@ -6611,37 +6672,37 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6611
6672
  receiveShare: true
6612
6673
  }
6613
6674
  };
6614
- _this40.mediaProperties.setMediaDirection(mediaSettings.mediaDirection);
6615
- _this40.mediaProperties.unsetRemoteMedia();
6675
+ _this41.mediaProperties.setMediaDirection(mediaSettings.mediaDirection);
6676
+ _this41.mediaProperties.unsetRemoteMedia();
6616
6677
 
6617
6678
  // 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
6679
  // once the device answers we close the old connection and create new media server connection with only share enabled
6619
- if (!_this40.statsAnalyzer) {
6680
+ if (!_this41.statsAnalyzer) {
6620
6681
  _context21.next = 10;
6621
6682
  break;
6622
6683
  }
6623
6684
  _context21.next = 10;
6624
- return _this40.statsAnalyzer.stopAnalyzer();
6685
+ return _this41.statsAnalyzer.stopAnalyzer();
6625
6686
  case 10:
6626
6687
  _context21.next = 12;
6627
- return _this40.closeRemoteStreams();
6688
+ return _this41.closeRemoteStreams();
6628
6689
  case 12:
6629
6690
  _context21.next = 14;
6630
- return _this40.closePeerConnections();
6691
+ return _this41.closePeerConnections();
6631
6692
  case 14:
6632
- _this40.cleanupLocalStreams();
6633
- _this40.unsetRemoteStreams();
6634
- _this40.unsetPeerConnections();
6635
- _this40.reconnectionManager.cleanUp();
6693
+ _this41.cleanupLocalStreams();
6694
+ _this41.unsetRemoteStreams();
6695
+ _this41.unsetPeerConnections();
6696
+ _this41.reconnectionManager.cleanUp();
6636
6697
  _context21.next = 20;
6637
- return _this40.addMedia({
6698
+ return _this41.addMedia({
6638
6699
  audioEnabled: false,
6639
6700
  videoEnabled: false,
6640
6701
  shareVideoEnabled: true
6641
6702
  });
6642
6703
  case 20:
6643
6704
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_SUCCESS);
6644
- _this40.isMoveToInProgress = false;
6705
+ _this41.isMoveToInProgress = false;
6645
6706
  _context21.next = 29;
6646
6707
  break;
6647
6708
  case 24:
@@ -6649,12 +6710,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6649
6710
  _context21.t0 = _context21["catch"](0);
6650
6711
  _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', _context21.t0);
6651
6712
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
6652
- correlation_id: _this40.correlationId,
6653
- locus_id: _this40.locusUrl.split('/').pop(),
6713
+ correlation_id: _this41.correlationId,
6714
+ locus_id: _this41.locusUrl.split('/').pop(),
6654
6715
  reason: _context21.t0.message,
6655
6716
  stack: _context21.t0.stack
6656
6717
  });
6657
- _this40.isMoveToInProgress = false;
6718
+ _this41.isMoveToInProgress = false;
6658
6719
  case 29:
6659
6720
  case "end":
6660
6721
  return _context21.stop();
@@ -6670,17 +6731,17 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6670
6731
  resourceId: resourceId,
6671
6732
  moveToResource: true
6672
6733
  }).then(function () {
6673
- _this40.meetingFiniteStateMachine.join();
6734
+ _this41.meetingFiniteStateMachine.join();
6674
6735
  }).catch(function (error) {
6675
- _this40.meetingFiniteStateMachine.fail(error);
6736
+ _this41.meetingFiniteStateMachine.fail(error);
6676
6737
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
6677
- correlation_id: _this40.correlationId,
6678
- locus_id: _this40.locusUrl.split('/').pop(),
6738
+ correlation_id: _this41.correlationId,
6739
+ locus_id: _this41.locusUrl.split('/').pop(),
6679
6740
  reason: error.message,
6680
6741
  stack: error.stack
6681
6742
  });
6682
6743
  _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', error);
6683
- _this40.isMoveToInProgress = false;
6744
+ _this41.isMoveToInProgress = false;
6684
6745
  return _promise.default.reject(error);
6685
6746
  });
6686
6747
  }
@@ -6695,7 +6756,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6695
6756
  }, {
6696
6757
  key: "moveFrom",
6697
6758
  value: function moveFrom(resourceId) {
6698
- var _this41 = this;
6759
+ var _this42 = this;
6699
6760
  // On moveFrom ask the developer to re capture it moveFrom then updateMedia
6700
6761
  if (!resourceId) {
6701
6762
  throw new _parameter.default('Cannot move call without a resourceId.');
@@ -6710,19 +6771,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6710
6771
  }
6711
6772
  });
6712
6773
  return _util2.default.joinMeetingOptions(this).then(function () {
6713
- return _util2.default.leaveMeeting(_this41, {
6774
+ return _util2.default.leaveMeeting(_this42, {
6714
6775
  resourceId: resourceId,
6715
6776
  correlationId: oldCorrelationId,
6716
6777
  moveMeeting: true
6717
6778
  }).then(function () {
6718
- _this41.resourceId = '';
6779
+ _this42.resourceId = '';
6719
6780
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_FROM_SUCCESS);
6720
6781
  });
6721
6782
  }).catch(function (error) {
6722
- _this41.meetingFiniteStateMachine.fail(error);
6783
+ _this42.meetingFiniteStateMachine.fail(error);
6723
6784
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_FROM_FAILURE, {
6724
- correlation_id: _this41.correlationId,
6725
- locus_id: _this41.locusUrl.split('/').pop(),
6785
+ correlation_id: _this42.correlationId,
6786
+ locus_id: _this42.locusUrl.split('/').pop(),
6726
6787
  reason: error.message,
6727
6788
  stack: error.stack
6728
6789
  });
@@ -6845,9 +6906,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6845
6906
  }, {
6846
6907
  key: "forwardEvent",
6847
6908
  value: function forwardEvent(eventEmitter, eventTypeToForward, meetingEventType) {
6848
- var _this42 = this;
6909
+ var _this43 = this;
6849
6910
  eventEmitter.on(eventTypeToForward, function (data) {
6850
- return _triggerProxy.default.trigger(_this42, {
6911
+ return _triggerProxy.default.trigger(_this43, {
6851
6912
  file: 'meetings',
6852
6913
  function: 'addMedia'
6853
6914
  }, meetingEventType, data);
@@ -7033,7 +7094,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7033
7094
  key: "waitForRemoteSDPAnswer",
7034
7095
  value: (function () {
7035
7096
  var _waitForRemoteSDPAnswer = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee25() {
7036
- var _this43 = this;
7097
+ var _this44 = this;
7037
7098
  var LOG_HEADER, deferSDPAnswer;
7038
7099
  return _regenerator.default.wrap(function _callee25$(_context25) {
7039
7100
  while (1) switch (_context25.prev = _context25.next) {
@@ -7052,18 +7113,18 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7052
7113
  var error = new Error('Timed out waiting for REMOTE SDP ANSWER');
7053
7114
 
7054
7115
  // @ts-ignore
7055
- _this43.webex.internal.newMetrics.submitClientEvent({
7116
+ _this44.webex.internal.newMetrics.submitClientEvent({
7056
7117
  name: 'client.media-engine.remote-sdp-received',
7057
7118
  payload: {
7058
7119
  canProceed: false,
7059
7120
  errors: [
7060
7121
  // @ts-ignore
7061
- _this43.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({
7122
+ _this44.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({
7062
7123
  clientErrorCode: _internalPluginMetrics.CALL_DIAGNOSTIC_CONFIG.MISSING_ROAP_ANSWER_CLIENT_CODE
7063
7124
  })]
7064
7125
  },
7065
7126
  options: {
7066
- meetingId: _this43.id,
7127
+ meetingId: _this44.id,
7067
7128
  rawError: error
7068
7129
  }
7069
7130
  });
@@ -7570,10 +7631,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7570
7631
  }, {
7571
7632
  key: "addMedia",
7572
7633
  value: function addMedia() {
7573
- var _this44 = this;
7634
+ var _this45 = this;
7574
7635
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7575
7636
  return this.addMediaInternal(function () {
7576
- return _this44.turnServerUsed ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
7637
+ return _this45.turnServerUsed ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
7577
7638
  }, undefined, false, options);
7578
7639
  }
7579
7640
 
@@ -7606,6 +7667,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7606
7667
  remoteMediaManagerConfig,
7607
7668
  _options$bundlePolicy,
7608
7669
  bundlePolicy,
7670
+ _options$additionalMe,
7671
+ additionalMediaOptions,
7672
+ rawSendVideo,
7673
+ rawReceiveVideo,
7674
+ rawSendAudio,
7675
+ rawReceiveAudio,
7676
+ sendVideo,
7677
+ receiveVideo,
7678
+ sendAudio,
7679
+ receiveAudio,
7609
7680
  _this$remoteMediaMana,
7610
7681
  _yield$this$mediaProp,
7611
7682
  connectionType,
@@ -7662,17 +7733,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7662
7733
  }
7663
7734
  throw new _webexErrors.UserNotJoinedError();
7664
7735
  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;
7736
+ 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;
7737
+ rawSendVideo = additionalMediaOptions.sendVideo, rawReceiveVideo = additionalMediaOptions.receiveVideo, rawSendAudio = additionalMediaOptions.sendAudio, rawReceiveAudio = additionalMediaOptions.receiveAudio;
7738
+ sendVideo = videoEnabled && (rawSendVideo !== null && rawSendVideo !== void 0 ? rawSendVideo : true);
7739
+ receiveVideo = videoEnabled && (rawReceiveVideo !== null && rawReceiveVideo !== void 0 ? rawReceiveVideo : true);
7740
+ sendAudio = audioEnabled && (rawSendAudio !== null && rawSendAudio !== void 0 ? rawSendAudio : true);
7741
+ receiveAudio = audioEnabled && (rawReceiveAudio !== null && rawReceiveAudio !== void 0 ? rawReceiveAudio : true);
7666
7742
  this.allowMediaInLobby = options === null || options === void 0 ? void 0 : options.allowMediaInLobby;
7667
7743
 
7668
7744
  // If the user is unjoined or guest waiting in lobby dont allow the user to addMedia
7669
7745
  // @ts-ignore - isUserUnadmitted coming from SelfUtil
7670
7746
  if (!(this.isUserUnadmitted && !this.wirelessShare && !this.allowMediaInLobby)) {
7671
- _context35.next = 14;
7747
+ _context35.next = 19;
7672
7748
  break;
7673
7749
  }
7674
7750
  throw new _webexErrors.UserInLobbyError();
7675
- case 14:
7751
+ case 19:
7676
7752
  // @ts-ignore
7677
7753
  this.webex.internal.newMetrics.submitClientEvent({
7678
7754
  name: 'client.media.capabilities',
@@ -7702,67 +7778,67 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7702
7778
  // when audioEnabled/videoEnabled is true, we set sendAudio/sendVideo to true even before any streams are published
7703
7779
  // to avoid doing an extra SDP exchange when they are published for the first time
7704
7780
  this.mediaProperties.setMediaDirection({
7705
- sendAudio: audioEnabled,
7706
- sendVideo: videoEnabled,
7781
+ sendAudio: sendAudio,
7782
+ sendVideo: sendVideo,
7707
7783
  sendShare: false,
7708
- receiveAudio: audioEnabled,
7709
- receiveVideo: videoEnabled,
7784
+ receiveAudio: receiveAudio,
7785
+ receiveVideo: receiveVideo,
7710
7786
  receiveShare: shareAudioEnabled || shareVideoEnabled
7711
7787
  });
7712
7788
  this.audio = (0, _muteState.createMuteState)(_constants.AUDIO, this, audioEnabled);
7713
7789
  this.video = (0, _muteState.createMuteState)(_constants.VIDEO, this, videoEnabled);
7714
7790
  this.brbState = (0, _brbState.createBrbState)(this, false);
7715
- _context35.prev = 19;
7716
- _context35.next = 22;
7791
+ _context35.prev = 24;
7792
+ _context35.next = 27;
7717
7793
  return this.setUpLocalStreamReferences(localStreams);
7718
- case 22:
7794
+ case 27:
7719
7795
  this.setMercuryListener();
7720
7796
  this.createStatsAnalyzer();
7721
- _context35.prev = 24;
7722
- _context35.next = 27;
7797
+ _context35.prev = 29;
7798
+ _context35.next = 32;
7723
7799
  return this.establishMediaConnection(remoteMediaManagerConfig, bundlePolicy, forceTurnDiscovery, turnServerInfo);
7724
- case 27:
7725
- _context35.next = 40;
7800
+ case 32:
7801
+ _context35.next = 45;
7726
7802
  break;
7727
- case 29:
7728
- _context35.prev = 29;
7729
- _context35.t0 = _context35["catch"](24);
7803
+ case 34:
7804
+ _context35.prev = 34;
7805
+ _context35.t0 = _context35["catch"](29);
7730
7806
  if (!(_context35.t0 instanceof _multistreamNotSupportedError.default)) {
7731
- _context35.next = 39;
7807
+ _context35.next = 44;
7732
7808
  break;
7733
7809
  }
7734
7810
  _loggerProxy.default.logger.warn("".concat(LOG_HEADER, " we asked for multistream backend (Homer), but got transcoded backend, recreating media connection..."));
7735
- _context35.next = 35;
7811
+ _context35.next = 40;
7736
7812
  return this.downgradeFromMultistreamToTranscoded();
7737
- case 35:
7738
- _context35.next = 37;
7813
+ case 40:
7814
+ _context35.next = 42;
7739
7815
  return this.establishMediaConnection(remoteMediaManagerConfig, bundlePolicy, true, undefined);
7740
- case 37:
7741
- _context35.next = 40;
7816
+ case 42:
7817
+ _context35.next = 45;
7742
7818
  break;
7743
- case 39:
7819
+ case 44:
7744
7820
  throw _context35.t0;
7745
- case 40:
7821
+ case 45:
7746
7822
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " media connected, finalizing..."));
7747
7823
  if (!this.mediaProperties.hasLocalShareStream()) {
7748
- _context35.next = 44;
7824
+ _context35.next = 49;
7749
7825
  break;
7750
7826
  }
7751
- _context35.next = 44;
7827
+ _context35.next = 49;
7752
7828
  return this.enqueueScreenShareFloorRequest();
7753
- case 44:
7754
- _context35.next = 46;
7829
+ case 49:
7830
+ _context35.next = 51;
7755
7831
  return this.mediaProperties.getCurrentConnectionInfo();
7756
- case 46:
7832
+ case 51:
7757
7833
  _yield$this$mediaProp = _context35.sent;
7758
7834
  connectionType = _yield$this$mediaProp.connectionType;
7759
7835
  ipVersion = _yield$this$mediaProp.ipVersion;
7760
7836
  selectedCandidatePairChanges = _yield$this$mediaProp.selectedCandidatePairChanges;
7761
7837
  numTransports = _yield$this$mediaProp.numTransports;
7762
7838
  iceCandidateErrors = Object.fromEntries(this.iceCandidateErrors);
7763
- _context35.next = 54;
7839
+ _context35.next = 59;
7764
7840
  return this.getMediaReachabilityMetricFields();
7765
- case 54:
7841
+ case 59:
7766
7842
  reachabilityMetrics = _context35.sent;
7767
7843
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_SUCCESS, _objectSpread(_objectSpread(_objectSpread({
7768
7844
  correlation_id: this.correlationId,
@@ -7792,21 +7868,21 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7792
7868
  // We can log ReceiveSlot SSRCs only after the SDP exchange, so doing it here:
7793
7869
  (_this$remoteMediaMana = this.remoteMediaManager) === null || _this$remoteMediaMana === void 0 ? void 0 : _this$remoteMediaMana.logAllReceiveSlots();
7794
7870
  this.startPeriodicLogUpload();
7795
- _context35.next = 80;
7871
+ _context35.next = 85;
7796
7872
  break;
7797
- case 62:
7798
- _context35.prev = 62;
7799
- _context35.t1 = _context35["catch"](19);
7873
+ case 67:
7874
+ _context35.prev = 67;
7875
+ _context35.t1 = _context35["catch"](24);
7800
7876
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " failed to establish media connection: "), _context35.t1);
7801
7877
 
7802
7878
  // @ts-ignore
7803
- _context35.next = 67;
7879
+ _context35.next = 72;
7804
7880
  return this.getMediaReachabilityMetricFields();
7805
- case 67:
7881
+ case 72:
7806
7882
  _reachabilityMetrics = _context35.sent;
7807
- _context35.next = 70;
7883
+ _context35.next = 75;
7808
7884
  return this.mediaProperties.getCurrentConnectionInfo();
7809
- case 70:
7885
+ case 75:
7810
7886
  _yield$this$mediaProp2 = _context35.sent;
7811
7887
  _selectedCandidatePairChanges = _yield$this$mediaProp2.selectedCandidatePairChanges;
7812
7888
  _numTransports = _yield$this$mediaProp2.numTransports;
@@ -7830,9 +7906,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7830
7906
  }, _reachabilityMetrics), _iceCandidateErrors), {}, {
7831
7907
  iceCandidatesCount: this.iceCandidatesCount
7832
7908
  }));
7833
- _context35.next = 77;
7909
+ _context35.next = 82;
7834
7910
  return this.cleanUpOnAddMediaFailure();
7835
- case 77:
7911
+ case 82:
7836
7912
  // Upload logs on error while adding media
7837
7913
  _triggerProxy.default.trigger(this, {
7838
7914
  file: 'meeting/index',
@@ -7844,15 +7920,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7844
7920
  });
7845
7921
  }
7846
7922
  throw _context35.t1;
7847
- case 80:
7848
- _context35.prev = 80;
7923
+ case 85:
7924
+ _context35.prev = 85;
7849
7925
  this.addMediaData.icePhaseCallback = DEFAULT_ICE_PHASE_CALLBACK;
7850
- return _context35.finish(80);
7851
- case 83:
7926
+ return _context35.finish(85);
7927
+ case 88:
7852
7928
  case "end":
7853
7929
  return _context35.stop();
7854
7930
  }
7855
- }, _callee35, this, [[19, 62, 80, 83], [24, 29]]);
7931
+ }, _callee35, this, [[24, 67, 85, 88], [29, 34]]);
7856
7932
  }));
7857
7933
  function addMediaInternal(_x33, _x34, _x35) {
7858
7934
  return _addMediaInternal.apply(this, arguments);
@@ -7884,7 +7960,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7884
7960
  * @memberof Meeting
7885
7961
  */
7886
7962
  function enqueueMediaUpdate(mediaUpdateType) {
7887
- var _this45 = this;
7963
+ var _this46 = this;
7888
7964
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
7889
7965
  var canUpdateMediaNow = this.canUpdateMedia();
7890
7966
  return new _promise.default(function (resolve, reject) {
@@ -7895,9 +7971,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7895
7971
  options: options
7896
7972
  };
7897
7973
  _loggerProxy.default.logger.log("Meeting:index#enqueueMediaUpdate --> enqueuing media update type=".concat(mediaUpdateType));
7898
- _this45.queuedMediaUpdates.push(queueItem);
7974
+ _this46.queuedMediaUpdates.push(queueItem);
7899
7975
  if (canUpdateMediaNow) {
7900
- _this45.processNextQueuedMediaUpdate();
7976
+ _this46.processNextQueuedMediaUpdate();
7901
7977
  }
7902
7978
  });
7903
7979
  }
@@ -8002,7 +8078,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8002
8078
  }, {
8003
8079
  key: "acknowledge",
8004
8080
  value: function acknowledge(type) {
8005
- var _this46 = this;
8081
+ var _this47 = this;
8006
8082
  if (!type) {
8007
8083
  return _promise.default.reject(new _parameter.default('Type must be set to acknowledge the meeting.'));
8008
8084
  }
@@ -8014,12 +8090,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8014
8090
  }).then(function (response) {
8015
8091
  return _promise.default.resolve(response);
8016
8092
  }).then(function (response) {
8017
- _this46.meetingFiniteStateMachine.ring(type);
8093
+ _this47.meetingFiniteStateMachine.ring(type);
8018
8094
  // @ts-ignore
8019
- _this46.webex.internal.newMetrics.submitClientEvent({
8095
+ _this47.webex.internal.newMetrics.submitClientEvent({
8020
8096
  name: 'client.alert.displayed',
8021
8097
  options: {
8022
- meetingId: _this46.id
8098
+ meetingId: _this47.id
8023
8099
  }
8024
8100
  });
8025
8101
  return _promise.default.resolve({
@@ -8044,12 +8120,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8044
8120
  }, {
8045
8121
  key: "decline",
8046
8122
  value: function decline(reason) {
8047
- var _this47 = this;
8123
+ var _this48 = this;
8048
8124
  return _util2.default.declineMeeting(this, reason).then(function (decline) {
8049
- _this47.meetingFiniteStateMachine.decline();
8125
+ _this48.meetingFiniteStateMachine.decline();
8050
8126
  return _promise.default.resolve(decline);
8051
8127
  }).catch(function (error) {
8052
- _this47.meetingFiniteStateMachine.fail(error);
8128
+ _this48.meetingFiniteStateMachine.fail(error);
8053
8129
  return _promise.default.reject(error);
8054
8130
  });
8055
8131
  }
@@ -8100,7 +8176,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8100
8176
  }, {
8101
8177
  key: "leave",
8102
8178
  value: function leave() {
8103
- var _this48 = this;
8179
+ var _this49 = this;
8104
8180
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
8105
8181
  var leaveReason = options.reason || _constants.MEETING_REMOVED_REASON.CLIENT_LEAVE_REQUEST;
8106
8182
 
@@ -8112,7 +8188,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8112
8188
  var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
8113
8189
  return (
8114
8190
  // @ts-ignore
8115
- _this48.webex.internal.newMetrics.submitClientEvent({
8191
+ _this49.webex.internal.newMetrics.submitClientEvent({
8116
8192
  name: 'client.call.leave',
8117
8193
  payload: _objectSpread({
8118
8194
  trigger: 'user-interaction',
@@ -8120,7 +8196,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8120
8196
  leaveReason: options.clientEventLeaveReason
8121
8197
  }, payload),
8122
8198
  options: {
8123
- meetingId: _this48.id
8199
+ meetingId: _this49.id
8124
8200
  }
8125
8201
  })
8126
8202
  );
@@ -8129,24 +8205,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8129
8205
  return _util2.default.leaveMeeting(this, options).then(function (leave) {
8130
8206
  // CA team recommends submitting this *after* locus /leave
8131
8207
  submitLeaveMetric();
8132
- _this48.meetingFiniteStateMachine.leave();
8133
- _this48.clearMeetingData();
8208
+ _this49.meetingFiniteStateMachine.leave();
8209
+ _this49.clearMeetingData();
8134
8210
 
8135
8211
  // upload logs on leave irrespective of meeting delete
8136
- _triggerProxy.default.trigger(_this48, {
8212
+ _triggerProxy.default.trigger(_this49, {
8137
8213
  file: 'meeting/index',
8138
8214
  function: 'leave'
8139
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this48);
8215
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this49);
8140
8216
 
8141
8217
  // TODO: more testing before we remove this code, we are not sure the scenarios for destroy here
8142
- if (_this48.wirelessShare || _this48.guest) {
8218
+ if (_this49.wirelessShare || _this49.guest) {
8143
8219
  // If screen sharing clean the meeting object
8144
- _triggerProxy.default.trigger(_this48, {
8220
+ _triggerProxy.default.trigger(_this49, {
8145
8221
  file: 'meeting/index',
8146
8222
  function: 'leave'
8147
8223
  }, _constants.EVENTS.DESTROY_MEETING, {
8148
8224
  reason: options.reason,
8149
- meetingId: _this48.id
8225
+ meetingId: _this49.id
8150
8226
  });
8151
8227
  }
8152
8228
  _loggerProxy.default.logger.log('Meeting:index#leave --> LEAVE REASON ', leaveReason);
@@ -8163,16 +8239,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8163
8239
  shownToUser: false
8164
8240
  }]
8165
8241
  });
8166
- _this48.meetingFiniteStateMachine.fail(error);
8242
+ _this49.meetingFiniteStateMachine.fail(error);
8167
8243
  _loggerProxy.default.logger.error('Meeting:index#leave --> Failed to leave ', error);
8168
8244
  // upload logs on leave irrespective of meeting delete
8169
- _triggerProxy.default.trigger(_this48, {
8245
+ _triggerProxy.default.trigger(_this49, {
8170
8246
  file: 'meeting/index',
8171
8247
  function: 'leave'
8172
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this48);
8248
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this49);
8173
8249
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_LEAVE_FAILURE, {
8174
- correlation_id: _this48.correlationId,
8175
- locus_id: _this48.locusUrl.split('/').pop(),
8250
+ correlation_id: _this49.correlationId,
8251
+ locus_id: _this49.locusUrl.split('/').pop(),
8176
8252
  reason: error.message,
8177
8253
  stack: error.stack,
8178
8254
  code: error.code
@@ -8192,7 +8268,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8192
8268
  }, {
8193
8269
  key: "startWhiteboardShare",
8194
8270
  value: function startWhiteboardShare(channelUrl, resourceToken) {
8195
- var _this49 = this;
8271
+ var _this50 = this;
8196
8272
  var whiteboard = this.locusInfo.mediaShares.find(function (element) {
8197
8273
  return element.name === 'whiteboard';
8198
8274
  });
@@ -8200,6 +8276,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8200
8276
  return _promise.default.reject(new _parameter.default('Cannot share without channelUrl.'));
8201
8277
  }
8202
8278
  if (whiteboard) {
8279
+ // @ts-ignore
8280
+ this.webex.internal.newMetrics.callDiagnosticLatencies.saveTimestamp({
8281
+ key: 'internal.client.share.initiated'
8282
+ });
8203
8283
  // @ts-ignore
8204
8284
  this.webex.internal.newMetrics.submitClientEvent({
8205
8285
  name: 'client.share.initiated',
@@ -8221,13 +8301,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8221
8301
  body.resourceToken = resourceToken;
8222
8302
  }
8223
8303
  return this.meetingRequest.changeMeetingFloor(body).then(function () {
8224
- _this49.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
8304
+ _this50.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
8225
8305
  return _promise.default.resolve();
8226
8306
  }).catch(function (error) {
8227
8307
  _loggerProxy.default.logger.error('Meeting:index#startWhiteboardShare --> Error ', error);
8228
8308
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_START_WHITEBOARD_SHARE_FAILURE, {
8229
- correlation_id: _this49.correlationId,
8230
- locus_id: _this49.locusUrl.split('/').pop(),
8309
+ correlation_id: _this50.correlationId,
8310
+ locus_id: _this50.locusUrl.split('/').pop(),
8231
8311
  reason: error.message,
8232
8312
  stack: error.stack,
8233
8313
  board: {
@@ -8250,16 +8330,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8250
8330
  }, {
8251
8331
  key: "stopWhiteboardShare",
8252
8332
  value: function stopWhiteboardShare(channelUrl) {
8253
- var _this50 = this;
8333
+ var _this51 = this;
8254
8334
  var whiteboard = this.locusInfo.mediaShares.find(function (element) {
8255
8335
  return element.name === 'whiteboard';
8256
8336
  });
8257
8337
  if (whiteboard) {
8338
+ // @ts-ignore
8339
+ this.webex.internal.newMetrics.callDiagnosticLatencies.saveTimestamp({
8340
+ key: 'internal.client.share.stopped'
8341
+ });
8258
8342
  // @ts-ignore
8259
8343
  this.webex.internal.newMetrics.submitClientEvent({
8260
8344
  name: 'client.share.stopped',
8261
8345
  payload: {
8262
- mediaType: 'whiteboard'
8346
+ mediaType: 'whiteboard',
8347
+ // @ts-ignore
8348
+ shareDuration: this.webex.internal.newMetrics.callDiagnosticLatencies.getShareDuration()
8263
8349
  },
8264
8350
  options: {
8265
8351
  meetingId: this.id
@@ -8273,8 +8359,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8273
8359
  }).catch(function (error) {
8274
8360
  _loggerProxy.default.logger.error('Meeting:index#stopWhiteboardShare --> Error ', error);
8275
8361
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_STOP_WHITEBOARD_SHARE_FAILURE, {
8276
- correlation_id: _this50.correlationId,
8277
- locus_id: _this50.locusUrl.split('/').pop(),
8362
+ correlation_id: _this51.correlationId,
8363
+ locus_id: _this51.locusUrl.split('/').pop(),
8278
8364
  reason: error.message,
8279
8365
  stack: error.stack,
8280
8366
  board: {
@@ -8296,7 +8382,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8296
8382
  }, {
8297
8383
  key: "requestScreenShareFloor",
8298
8384
  value: function requestScreenShareFloor() {
8299
- var _this51 = this;
8385
+ var _this52 = this;
8300
8386
  if (!this.mediaProperties.hasLocalShareStream() || !this.mediaProperties.mediaDirection.sendShare) {
8301
8387
  _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
8388
  this.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
@@ -8327,34 +8413,34 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8327
8413
  resourceUrl: this.resourceUrl,
8328
8414
  shareInstanceId: this.localShareInstanceId
8329
8415
  }).then(function () {
8330
- _this51.screenShareFloorState = ScreenShareFloorStatus.GRANTED;
8416
+ _this52.screenShareFloorState = ScreenShareFloorStatus.GRANTED;
8331
8417
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_SUCCESS, {
8332
- correlation_id: _this51.correlationId,
8333
- locus_id: _this51.locusUrl.split('/').pop()
8418
+ correlation_id: _this52.correlationId,
8419
+ locus_id: _this52.locusUrl.split('/').pop()
8334
8420
  });
8335
8421
  return _promise.default.resolve();
8336
8422
  }).catch(function (error) {
8337
8423
  _loggerProxy.default.logger.error('Meeting:index#share --> Error ', error);
8338
8424
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_FAILURE, {
8339
- correlation_id: _this51.correlationId,
8340
- locus_id: _this51.locusUrl.split('/').pop(),
8425
+ correlation_id: _this52.correlationId,
8426
+ locus_id: _this52.locusUrl.split('/').pop(),
8341
8427
  reason: error.message,
8342
8428
  stack: error.stack
8343
8429
  });
8344
8430
 
8345
8431
  // @ts-ignore
8346
- _this51.webex.internal.newMetrics.submitClientEvent({
8432
+ _this52.webex.internal.newMetrics.submitClientEvent({
8347
8433
  name: 'client.share.floor-granted.local',
8348
8434
  payload: {
8349
8435
  mediaType: 'share',
8350
8436
  errors: _util2.default.getChangeMeetingFloorErrorPayload(error.message),
8351
- shareInstanceId: _this51.localShareInstanceId
8437
+ shareInstanceId: _this52.localShareInstanceId
8352
8438
  },
8353
8439
  options: {
8354
- meetingId: _this51.id
8440
+ meetingId: _this52.id
8355
8441
  }
8356
8442
  });
8357
- _this51.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
8443
+ _this52.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
8358
8444
  return _promise.default.reject(error);
8359
8445
  });
8360
8446
  }
@@ -8377,10 +8463,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8377
8463
  }, {
8378
8464
  key: "requestScreenShareFloorIfPending",
8379
8465
  value: function requestScreenShareFloorIfPending() {
8380
- var _this52 = this;
8466
+ var _this53 = this;
8381
8467
  if (this.floorGrantPending && this.state === _constants.MEETING_STATE.STATES.JOINED) {
8382
8468
  this.requestScreenShareFloor().then(function () {
8383
- _this52.floorGrantPending = false;
8469
+ _this53.floorGrantPending = false;
8384
8470
  });
8385
8471
  }
8386
8472
  }
@@ -8394,7 +8480,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8394
8480
  }, {
8395
8481
  key: "releaseScreenShareFloor",
8396
8482
  value: function releaseScreenShareFloor() {
8397
- var _this53 = this;
8483
+ var _this54 = this;
8398
8484
  var content = this.locusInfo.mediaShares.find(function (element) {
8399
8485
  return element.name === _constants.CONTENT;
8400
8486
  });
@@ -8405,11 +8491,17 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8405
8491
  if (content) {
8406
8492
  var _content$floor;
8407
8493
  // @ts-ignore
8494
+ this.webex.internal.newMetrics.callDiagnosticLatencies.saveTimestamp({
8495
+ key: 'internal.client.share.stopped'
8496
+ });
8497
+ // @ts-ignore
8408
8498
  this.webex.internal.newMetrics.submitClientEvent({
8409
8499
  name: 'client.share.stopped',
8410
8500
  payload: {
8411
8501
  mediaType: 'share',
8412
- shareInstanceId: this.localShareInstanceId
8502
+ shareInstanceId: this.localShareInstanceId,
8503
+ // @ts-ignore
8504
+ shareDuration: this.webex.internal.newMetrics.callDiagnosticLatencies.getShareDuration()
8413
8505
  },
8414
8506
  options: {
8415
8507
  meetingId: this.id
@@ -8429,8 +8521,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8429
8521
  }).catch(function (error) {
8430
8522
  _loggerProxy.default.logger.error('Meeting:index#releaseScreenShareFloor --> Error ', error);
8431
8523
  _metrics.default.sendBehavioralMetric(_constants2.default.STOP_FLOOR_REQUEST_FAILURE, {
8432
- correlation_id: _this53.correlationId,
8433
- locus_id: _this53.locusUrl.split('/').pop(),
8524
+ correlation_id: _this54.correlationId,
8525
+ locus_id: _this54.locusUrl.split('/').pop(),
8434
8526
  reason: error.message,
8435
8527
  stack: error.stack
8436
8528
  });
@@ -8610,7 +8702,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8610
8702
  }, {
8611
8703
  key: "changeVideoLayout",
8612
8704
  value: function changeVideoLayout(layoutType) {
8613
- var _this54 = this;
8705
+ var _this55 = this;
8614
8706
  var renderInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
8615
8707
  var main = renderInfo.main,
8616
8708
  content = renderInfo.content;
@@ -8664,7 +8756,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8664
8756
  }
8665
8757
  this.lastVideoLayoutInfo = (0, _lodash.cloneDeep)(layoutInfo);
8666
8758
  this.locusInfo.once(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED, function (envelope) {
8667
- _triggerProxy.default.trigger(_this54, {
8759
+ _triggerProxy.default.trigger(_this55, {
8668
8760
  file: 'meeting/index',
8669
8761
  function: 'changeVideoLayout'
8670
8762
  }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_LAYOUT_UPDATE, {
@@ -8780,7 +8872,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8780
8872
  }, {
8781
8873
  key: "endMeetingForAll",
8782
8874
  value: function endMeetingForAll() {
8783
- var _this55 = this;
8875
+ var _this56 = this;
8784
8876
  // @ts-ignore
8785
8877
  this.webex.internal.newMetrics.submitClientEvent({
8786
8878
  name: 'client.call.leave',
@@ -8798,25 +8890,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8798
8890
  locus_id: this.locusId
8799
8891
  });
8800
8892
  return _util2.default.endMeetingForAll(this).then(function (end) {
8801
- _this55.meetingFiniteStateMachine.end();
8802
- _this55.clearMeetingData();
8893
+ _this56.meetingFiniteStateMachine.end();
8894
+ _this56.clearMeetingData();
8803
8895
  // upload logs on leave irrespective of meeting delete
8804
- _triggerProxy.default.trigger(_this55, {
8896
+ _triggerProxy.default.trigger(_this56, {
8805
8897
  file: 'meeting/index',
8806
8898
  function: 'endMeetingForAll'
8807
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this55);
8899
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this56);
8808
8900
  return end;
8809
8901
  }).catch(function (error) {
8810
- _this55.meetingFiniteStateMachine.fail(error);
8902
+ _this56.meetingFiniteStateMachine.fail(error);
8811
8903
  _loggerProxy.default.logger.error('Meeting:index#endMeetingForAll --> Failed to end meeting ', error);
8812
8904
  // upload logs on leave irrespective of meeting delete
8813
- _triggerProxy.default.trigger(_this55, {
8905
+ _triggerProxy.default.trigger(_this56, {
8814
8906
  file: 'meeting/index',
8815
8907
  function: 'endMeetingForAll'
8816
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this55);
8908
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this56);
8817
8909
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_END_ALL_FAILURE, {
8818
- correlation_id: _this55.correlationId,
8819
- locus_id: _this55.locusUrl.split('/').pop(),
8910
+ correlation_id: _this56.correlationId,
8911
+ locus_id: _this56.locusUrl.split('/').pop(),
8820
8912
  reason: error.message,
8821
8913
  stack: error.stack,
8822
8914
  code: error.code
@@ -8977,7 +9069,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8977
9069
  _this$mediaProperties43,
8978
9070
  _this$mediaProperties44,
8979
9071
  _this$mediaProperties45,
8980
- _this56 = this;
9072
+ _this57 = this;
8981
9073
  var LOG_HEADER = 'Meeting:index#updateTranscodedMediaConnection -->';
8982
9074
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " starting"));
8983
9075
  if (!this.canUpdateMedia()) {
@@ -9002,8 +9094,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9002
9094
  }).catch(function (error) {
9003
9095
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " Error: "), error);
9004
9096
  _metrics.default.sendBehavioralMetric(_constants2.default.UPDATE_MEDIA_FAILURE, {
9005
- correlation_id: _this56.correlationId,
9006
- locus_id: _this56.locusUrl.split('/').pop(),
9097
+ correlation_id: _this57.correlationId,
9098
+ locus_id: _this57.locusUrl.split('/').pop(),
9007
9099
  reason: error.message,
9008
9100
  stack: error.stack
9009
9101
  });
@@ -9225,13 +9317,18 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9225
9317
  return this.updateTranscodedMediaConnection();
9226
9318
  case 31:
9227
9319
  if (!floorRequestNeeded) {
9228
- _context40.next = 39;
9320
+ _context40.next = 40;
9229
9321
  break;
9230
9322
  }
9231
9323
  this.localShareInstanceId = _uuid.default.v4();
9232
9324
  this.shareCAEventSentStatus.transmitStart = false;
9233
9325
  this.shareCAEventSentStatus.transmitStop = false;
9234
9326
 
9327
+ // @ts-ignore
9328
+ this.webex.internal.newMetrics.callDiagnosticLatencies.saveTimestamp({
9329
+ key: 'internal.client.share.initiated'
9330
+ });
9331
+
9235
9332
  // @ts-ignore
9236
9333
  this.webex.internal.newMetrics.submitClientEvent({
9237
9334
  name: 'client.share.initiated',
@@ -9251,9 +9348,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9251
9348
  // we're sending the http request to Locus to request the screen share floor
9252
9349
  // only after the SDP update, because that's how it's always been done for transcoded meetings
9253
9350
  // and also if sharing from the start, we need confluence to have been created
9254
- _context40.next = 39;
9351
+ _context40.next = 40;
9255
9352
  return this.enqueueScreenShareFloorRequest();
9256
- case 39:
9353
+ case 40:
9257
9354
  case "end":
9258
9355
  return _context40.stop();
9259
9356
  }
@@ -9401,7 +9498,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9401
9498
  key: "getMediaReachabilityMetricFields",
9402
9499
  value: (function () {
9403
9500
  var _getMediaReachabilityMetricFields = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee42() {
9404
- var reachabilityMetrics, successKeys, totalSuccessCases, isSubnetReachable, selectedCluster;
9501
+ var _this$mediaServerIp, _this$mediaConnection, _this$mediaConnection2, _this$mediaConnection3;
9502
+ var reachabilityMetrics, successKeys, totalSuccessCases, selectedSubnetFirstOctet, isSubnetReachable, selectedCluster;
9405
9503
  return _regenerator.default.wrap(function _callee42$(_context42) {
9406
9504
  while (1) switch (_context42.prev = _context42.next) {
9407
9505
  case 0:
@@ -9417,18 +9515,18 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9417
9515
  }
9418
9516
  return total;
9419
9517
  }, 0);
9518
+ selectedSubnetFirstOctet = (_this$mediaServerIp = this.mediaServerIp) === null || _this$mediaServerIp === void 0 ? void 0 : _this$mediaServerIp.split('.')[0];
9420
9519
  isSubnetReachable = null;
9421
- if (totalSuccessCases > 0) {
9520
+ if (totalSuccessCases > 0 && selectedSubnetFirstOctet) {
9521
+ isSubnetReachable =
9422
9522
  // @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;
9523
+ this.webex.meetings.reachability.isSubnetReachable(selectedSubnetFirstOctet);
9428
9524
  }
9525
+ 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
9526
  return _context42.abrupt("return", _objectSpread(_objectSpread({}, reachabilityMetrics), {}, {
9430
- isSubnetReachable: isSubnetReachable,
9431
- selectedCluster: selectedCluster
9527
+ subnet_reachable: isSubnetReachable,
9528
+ selected_cluster: selectedCluster,
9529
+ selected_subnet: selectedSubnetFirstOctet ? "".concat(selectedSubnetFirstOctet, ".X.X.X") : null
9432
9530
  }));
9433
9531
  case 10:
9434
9532
  case "end":
@@ -9440,7 +9538,84 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9440
9538
  return _getMediaReachabilityMetricFields.apply(this, arguments);
9441
9539
  }
9442
9540
  return getMediaReachabilityMetricFields;
9443
- }())
9541
+ }()
9542
+ /**
9543
+ * Set the stage for the meeting
9544
+ *
9545
+ * @param {SetStageOptions} options Options to use when setting the stage
9546
+ * @returns {Promise} The locus request
9547
+ */
9548
+ )
9549
+ }, {
9550
+ key: "setStage",
9551
+ value: function setStage() {
9552
+ var _ref37 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
9553
+ _ref37$activeSpeakerP = _ref37.activeSpeakerProportion,
9554
+ activeSpeakerProportion = _ref37$activeSpeakerP === void 0 ? 0.5 : _ref37$activeSpeakerP,
9555
+ customBackground = _ref37.customBackground,
9556
+ customLogo = _ref37.customLogo,
9557
+ customNameLabel = _ref37.customNameLabel,
9558
+ importantParticipants = _ref37.importantParticipants,
9559
+ _ref37$lockAttendeeVi = _ref37.lockAttendeeViewOnStage,
9560
+ lockAttendeeViewOnStage = _ref37$lockAttendeeVi === void 0 ? false : _ref37$lockAttendeeVi,
9561
+ _ref37$showActiveSpea = _ref37.showActiveSpeaker,
9562
+ showActiveSpeaker = _ref37$showActiveSpea === void 0 ? false : _ref37$showActiveSpea;
9563
+ var videoLayout = {
9564
+ overrideDefault: true,
9565
+ lockAttendeeViewOnStageOnly: lockAttendeeViewOnStage,
9566
+ stageParameters: {
9567
+ activeSpeakerProportion: activeSpeakerProportion,
9568
+ showActiveSpeaker: {
9569
+ show: showActiveSpeaker,
9570
+ order: 0
9571
+ },
9572
+ stageManagerType: 0
9573
+ }
9574
+ };
9575
+ if (importantParticipants !== null && importantParticipants !== void 0 && importantParticipants.length) {
9576
+ videoLayout.stageParameters.importantParticipants = importantParticipants.map(function (importantParticipant, index) {
9577
+ return _objectSpread(_objectSpread({}, importantParticipant), {}, {
9578
+ order: index + 1
9579
+ });
9580
+ });
9581
+ }
9582
+ if (customLogo) {
9583
+ if (!videoLayout.customLayouts) {
9584
+ videoLayout.customLayouts = {};
9585
+ }
9586
+ videoLayout.customLayouts.logo = customLogo;
9587
+ // eslint-disable-next-line no-bitwise
9588
+ videoLayout.stageParameters.stageManagerType |= _constants.STAGE_MANAGER_TYPE.LOGO;
9589
+ }
9590
+ if (customBackground) {
9591
+ if (!videoLayout.customLayouts) {
9592
+ videoLayout.customLayouts = {};
9593
+ }
9594
+ videoLayout.customLayouts.background = customBackground;
9595
+ // eslint-disable-next-line no-bitwise
9596
+ videoLayout.stageParameters.stageManagerType |= _constants.STAGE_MANAGER_TYPE.BACKGROUND;
9597
+ }
9598
+ if (customNameLabel) {
9599
+ videoLayout.nameLabelStyle = customNameLabel;
9600
+ // eslint-disable-next-line no-bitwise
9601
+ videoLayout.stageParameters.stageManagerType |= _constants.STAGE_MANAGER_TYPE.NAME_LABEL;
9602
+ }
9603
+ return this.meetingRequest.synchronizeStage(this.locusUrl, videoLayout);
9604
+ }
9605
+
9606
+ /**
9607
+ * Unset the stage for the meeting
9608
+ *
9609
+ * @returns {Promise} The locus request
9610
+ */
9611
+ }, {
9612
+ key: "unsetStage",
9613
+ value: function unsetStage() {
9614
+ var videoLayout = {
9615
+ overrideDefault: false
9616
+ };
9617
+ return this.meetingRequest.synchronizeStage(this.locusUrl, videoLayout);
9618
+ }
9444
9619
  }]);
9445
9620
  return Meeting;
9446
9621
  }(_webexCore.StatelessWebexPlugin);