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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (332) hide show
  1. package/README.md +2 -1
  2. package/dist/breakouts/breakout.js +1 -1
  3. package/dist/breakouts/index.js +1 -1
  4. package/dist/common/errors/join-webinar-error.js +50 -0
  5. package/dist/common/errors/join-webinar-error.js.map +1 -0
  6. package/dist/config.js +4 -1
  7. package/dist/config.js.map +1 -1
  8. package/dist/constants.js +54 -4
  9. package/dist/constants.js.map +1 -1
  10. package/dist/controls-options-manager/enums.js +1 -0
  11. package/dist/controls-options-manager/enums.js.map +1 -1
  12. package/dist/controls-options-manager/index.js +10 -3
  13. package/dist/controls-options-manager/index.js.map +1 -1
  14. package/dist/controls-options-manager/types.js.map +1 -1
  15. package/dist/controls-options-manager/util.js +12 -0
  16. package/dist/controls-options-manager/util.js.map +1 -1
  17. package/dist/index.js +7 -0
  18. package/dist/index.js.map +1 -1
  19. package/dist/interpretation/index.js +1 -1
  20. package/dist/interpretation/siLanguage.js +1 -1
  21. package/dist/locus-info/controlsUtils.js +28 -4
  22. package/dist/locus-info/controlsUtils.js.map +1 -1
  23. package/dist/locus-info/fullState.js +2 -1
  24. package/dist/locus-info/fullState.js.map +1 -1
  25. package/dist/locus-info/index.js +61 -3
  26. package/dist/locus-info/index.js.map +1 -1
  27. package/dist/locus-info/parser.js +5 -1
  28. package/dist/locus-info/parser.js.map +1 -1
  29. package/dist/media/index.js +29 -1
  30. package/dist/media/index.js.map +1 -1
  31. package/dist/meeting/in-meeting-actions.js +29 -1
  32. package/dist/meeting/in-meeting-actions.js.map +1 -1
  33. package/dist/meeting/index.js +807 -540
  34. package/dist/meeting/index.js.map +1 -1
  35. package/dist/meeting/locusMediaRequest.js +2 -6
  36. package/dist/meeting/locusMediaRequest.js.map +1 -1
  37. package/dist/meeting/muteState.js +5 -2
  38. package/dist/meeting/muteState.js.map +1 -1
  39. package/dist/meeting/request.js +21 -29
  40. package/dist/meeting/request.js.map +1 -1
  41. package/dist/meeting/util.js +98 -61
  42. package/dist/meeting/util.js.map +1 -1
  43. package/dist/meeting-info/meeting-info-v2.js +80 -17
  44. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  45. package/dist/meetings/index.js +29 -2
  46. package/dist/meetings/index.js.map +1 -1
  47. package/dist/members/index.js +3 -2
  48. package/dist/members/index.js.map +1 -1
  49. package/dist/members/util.js +13 -7
  50. package/dist/members/util.js.map +1 -1
  51. package/dist/metrics/constants.js +4 -1
  52. package/dist/metrics/constants.js.map +1 -1
  53. package/dist/multistream/remoteMedia.js +34 -15
  54. package/dist/multistream/remoteMedia.js.map +1 -1
  55. package/dist/reachability/clusterReachability.js +12 -15
  56. package/dist/reachability/clusterReachability.js.map +1 -1
  57. package/dist/reachability/index.js +433 -136
  58. package/dist/reachability/index.js.map +1 -1
  59. package/dist/{rtcMetrics/constants.js → reachability/reachability.types.js} +1 -5
  60. package/dist/reachability/reachability.types.js.map +1 -0
  61. package/dist/reachability/request.js +23 -9
  62. package/dist/reachability/request.js.map +1 -1
  63. package/dist/recording-controller/enums.js +8 -4
  64. package/dist/recording-controller/enums.js.map +1 -1
  65. package/dist/recording-controller/index.js +18 -9
  66. package/dist/recording-controller/index.js.map +1 -1
  67. package/dist/recording-controller/util.js +13 -9
  68. package/dist/recording-controller/util.js.map +1 -1
  69. package/dist/roap/index.js +5 -7
  70. package/dist/roap/index.js.map +1 -1
  71. package/dist/roap/request.js +45 -79
  72. package/dist/roap/request.js.map +1 -1
  73. package/dist/roap/turnDiscovery.js +3 -6
  74. package/dist/roap/turnDiscovery.js.map +1 -1
  75. package/dist/{common/errors/parameter.d.ts → types/common/errors/join-webinar-error.d.ts} +4 -5
  76. package/dist/types/config.d.ts +3 -0
  77. package/dist/types/constants.d.ts +43 -0
  78. package/dist/types/controls-options-manager/enums.d.ts +2 -1
  79. package/dist/types/controls-options-manager/index.d.ts +2 -1
  80. package/dist/types/controls-options-manager/types.d.ts +2 -0
  81. package/dist/types/index.d.ts +2 -1
  82. package/dist/types/locus-info/index.d.ts +9 -0
  83. package/dist/types/meeting/in-meeting-actions.d.ts +28 -0
  84. package/dist/types/meeting/index.d.ts +34 -3
  85. package/dist/types/meeting/locusMediaRequest.d.ts +2 -3
  86. package/dist/types/meeting/muteState.d.ts +2 -1
  87. package/dist/types/meeting/request.d.ts +2 -2
  88. package/dist/types/meeting/util.d.ts +2 -2
  89. package/dist/types/meeting-info/meeting-info-v2.d.ts +23 -0
  90. package/dist/types/meetings/index.d.ts +13 -1
  91. package/dist/types/members/index.d.ts +2 -1
  92. package/dist/types/members/util.d.ts +5 -1
  93. package/dist/types/metrics/constants.d.ts +3 -0
  94. package/dist/types/multistream/remoteMedia.d.ts +1 -0
  95. package/dist/types/reachability/clusterReachability.d.ts +1 -10
  96. package/dist/types/reachability/index.d.ts +74 -35
  97. package/dist/types/reachability/reachability.types.d.ts +64 -0
  98. package/dist/types/reachability/request.d.ts +5 -1
  99. package/dist/types/recording-controller/enums.d.ts +5 -2
  100. package/dist/types/recording-controller/index.d.ts +1 -0
  101. package/dist/types/recording-controller/util.d.ts +2 -1
  102. package/dist/types/roap/request.d.ts +1 -13
  103. package/dist/webinar/index.js +382 -19
  104. package/dist/webinar/index.js.map +1 -1
  105. package/package.json +22 -22
  106. package/src/common/errors/join-webinar-error.ts +24 -0
  107. package/src/config.ts +3 -0
  108. package/src/constants.ts +52 -0
  109. package/src/controls-options-manager/enums.ts +1 -0
  110. package/src/controls-options-manager/index.ts +19 -2
  111. package/src/controls-options-manager/types.ts +2 -0
  112. package/src/controls-options-manager/util.ts +12 -0
  113. package/src/index.ts +2 -0
  114. package/src/locus-info/controlsUtils.ts +46 -2
  115. package/src/locus-info/fullState.ts +1 -0
  116. package/src/locus-info/index.ts +60 -0
  117. package/src/locus-info/parser.ts +8 -1
  118. package/src/media/index.ts +15 -0
  119. package/src/meeting/in-meeting-actions.ts +58 -0
  120. package/src/meeting/index.ts +268 -32
  121. package/src/meeting/locusMediaRequest.ts +4 -8
  122. package/src/meeting/muteState.ts +6 -2
  123. package/src/meeting/request.ts +4 -11
  124. package/src/meeting/util.ts +31 -6
  125. package/src/meeting-info/meeting-info-v2.ts +63 -0
  126. package/src/meetings/index.ts +74 -40
  127. package/src/members/index.ts +4 -2
  128. package/src/members/util.ts +4 -1
  129. package/src/metrics/constants.ts +3 -0
  130. package/src/multistream/remoteMedia.ts +33 -15
  131. package/src/reachability/clusterReachability.ts +5 -15
  132. package/src/reachability/index.ts +285 -77
  133. package/src/reachability/reachability.types.ts +85 -0
  134. package/src/reachability/request.ts +55 -30
  135. package/src/recording-controller/enums.ts +5 -2
  136. package/src/recording-controller/index.ts +17 -4
  137. package/src/recording-controller/util.ts +20 -5
  138. package/src/roap/index.ts +4 -5
  139. package/src/roap/request.ts +32 -44
  140. package/src/roap/turnDiscovery.ts +2 -4
  141. package/src/webinar/index.ts +223 -17
  142. package/test/unit/spec/controls-options-manager/index.js +56 -32
  143. package/test/unit/spec/controls-options-manager/util.js +44 -0
  144. package/test/unit/spec/locus-info/controlsUtils.js +80 -4
  145. package/test/unit/spec/locus-info/index.js +88 -2
  146. package/test/unit/spec/meeting/in-meeting-actions.ts +31 -1
  147. package/test/unit/spec/meeting/index.js +407 -82
  148. package/test/unit/spec/meeting/locusMediaRequest.ts +18 -11
  149. package/test/unit/spec/meeting/muteState.js +8 -4
  150. package/test/unit/spec/meeting/request.js +3 -26
  151. package/test/unit/spec/meeting/utils.js +71 -14
  152. package/test/unit/spec/meeting-info/meetinginfov2.js +42 -0
  153. package/test/unit/spec/meetings/index.js +41 -6
  154. package/test/unit/spec/members/index.js +25 -2
  155. package/test/unit/spec/members/request.js +37 -3
  156. package/test/unit/spec/members/utils.js +110 -1
  157. package/test/unit/spec/multistream/remoteMedia.ts +27 -9
  158. package/test/unit/spec/reachability/clusterReachability.ts +7 -0
  159. package/test/unit/spec/reachability/index.ts +265 -1
  160. package/test/unit/spec/reachability/request.js +56 -15
  161. package/test/unit/spec/recording-controller/index.js +61 -5
  162. package/test/unit/spec/recording-controller/util.js +39 -3
  163. package/test/unit/spec/roap/index.ts +1 -1
  164. package/test/unit/spec/roap/request.ts +51 -109
  165. package/test/unit/spec/roap/turnDiscovery.ts +202 -147
  166. package/test/unit/spec/webinar/index.ts +443 -14
  167. package/dist/annotation/annotation.types.d.ts +0 -42
  168. package/dist/annotation/constants.d.ts +0 -31
  169. package/dist/annotation/index.d.ts +0 -117
  170. package/dist/breakouts/breakout.d.ts +0 -8
  171. package/dist/breakouts/collection.d.ts +0 -5
  172. package/dist/breakouts/edit-lock-error.d.ts +0 -15
  173. package/dist/breakouts/events.d.ts +0 -8
  174. package/dist/breakouts/index.d.ts +0 -5
  175. package/dist/breakouts/request.d.ts +0 -22
  176. package/dist/breakouts/utils.d.ts +0 -15
  177. package/dist/common/browser-detection.d.ts +0 -9
  178. package/dist/common/collection.d.ts +0 -48
  179. package/dist/common/config.d.ts +0 -2
  180. package/dist/common/errors/captcha-error.d.ts +0 -15
  181. package/dist/common/errors/intent-to-join.d.ts +0 -16
  182. package/dist/common/errors/join-meeting.d.ts +0 -17
  183. package/dist/common/errors/media.d.ts +0 -15
  184. package/dist/common/errors/no-meeting-info.d.ts +0 -14
  185. package/dist/common/errors/password-error.d.ts +0 -15
  186. package/dist/common/errors/permission.d.ts +0 -14
  187. package/dist/common/errors/reclaim-host-role-error.js +0 -149
  188. package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
  189. package/dist/common/errors/reclaim-host-role-errors.d.ts +0 -60
  190. package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
  191. package/dist/common/errors/reconnection-in-progress.js +0 -33
  192. package/dist/common/errors/reconnection-in-progress.js.map +0 -1
  193. package/dist/common/errors/reconnection.d.ts +0 -15
  194. package/dist/common/errors/stats.d.ts +0 -15
  195. package/dist/common/errors/webex-errors.d.ts +0 -93
  196. package/dist/common/errors/webex-meetings-error.d.ts +0 -20
  197. package/dist/common/events/events-scope.d.ts +0 -17
  198. package/dist/common/events/events.d.ts +0 -12
  199. package/dist/common/events/trigger-proxy.d.ts +0 -2
  200. package/dist/common/events/util.d.ts +0 -2
  201. package/dist/common/logs/logger-config.d.ts +0 -2
  202. package/dist/common/logs/logger-proxy.d.ts +0 -2
  203. package/dist/common/logs/request.d.ts +0 -36
  204. package/dist/common/queue.d.ts +0 -34
  205. package/dist/config.d.ts +0 -72
  206. package/dist/constants.d.ts +0 -1088
  207. package/dist/controls-options-manager/constants.d.ts +0 -4
  208. package/dist/controls-options-manager/enums.d.ts +0 -15
  209. package/dist/controls-options-manager/index.d.ts +0 -136
  210. package/dist/controls-options-manager/types.d.ts +0 -43
  211. package/dist/controls-options-manager/util.d.ts +0 -1
  212. package/dist/index.d.ts +0 -7
  213. package/dist/interceptors/index.d.ts +0 -2
  214. package/dist/interceptors/locusRetry.d.ts +0 -27
  215. package/dist/interpretation/collection.d.ts +0 -5
  216. package/dist/interpretation/index.d.ts +0 -5
  217. package/dist/interpretation/siLanguage.d.ts +0 -5
  218. package/dist/locus-info/controlsUtils.d.ts +0 -2
  219. package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
  220. package/dist/locus-info/fullState.d.ts +0 -2
  221. package/dist/locus-info/hostUtils.d.ts +0 -2
  222. package/dist/locus-info/index.d.ts +0 -322
  223. package/dist/locus-info/infoUtils.d.ts +0 -2
  224. package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
  225. package/dist/locus-info/parser.d.ts +0 -272
  226. package/dist/locus-info/selfUtils.d.ts +0 -2
  227. package/dist/media/index.d.ts +0 -34
  228. package/dist/media/properties.d.ts +0 -93
  229. package/dist/media/util.d.ts +0 -2
  230. package/dist/mediaQualityMetrics/config.d.ts +0 -241
  231. package/dist/mediaQualityMetrics/config.js +0 -502
  232. package/dist/mediaQualityMetrics/config.js.map +0 -1
  233. package/dist/meeting/effectsState.js +0 -260
  234. package/dist/meeting/effectsState.js.map +0 -1
  235. package/dist/meeting/in-meeting-actions.d.ts +0 -167
  236. package/dist/meeting/index.d.ts +0 -1825
  237. package/dist/meeting/locusMediaRequest.d.ts +0 -74
  238. package/dist/meeting/muteState.d.ts +0 -178
  239. package/dist/meeting/request.d.ts +0 -295
  240. package/dist/meeting/request.type.d.ts +0 -11
  241. package/dist/meeting/state.d.ts +0 -9
  242. package/dist/meeting/util.d.ts +0 -119
  243. package/dist/meeting/voicea-meeting.d.ts +0 -16
  244. package/dist/meeting-info/collection.d.ts +0 -20
  245. package/dist/meeting-info/index.d.ts +0 -69
  246. package/dist/meeting-info/meeting-info-v2.d.ts +0 -123
  247. package/dist/meeting-info/request.d.ts +0 -22
  248. package/dist/meeting-info/util.d.ts +0 -2
  249. package/dist/meeting-info/utilv2.d.ts +0 -2
  250. package/dist/meetings/collection.d.ts +0 -40
  251. package/dist/meetings/index.d.ts +0 -390
  252. package/dist/meetings/meetings.types.d.ts +0 -4
  253. package/dist/meetings/request.d.ts +0 -27
  254. package/dist/meetings/util.d.ts +0 -18
  255. package/dist/member/index.d.ts +0 -160
  256. package/dist/member/member.types.js +0 -17
  257. package/dist/member/member.types.js.map +0 -1
  258. package/dist/member/types.d.ts +0 -32
  259. package/dist/member/util.d.ts +0 -2
  260. package/dist/members/collection.d.ts +0 -29
  261. package/dist/members/index.d.ts +0 -353
  262. package/dist/members/request.d.ts +0 -114
  263. package/dist/members/types.d.ts +0 -25
  264. package/dist/members/util.d.ts +0 -215
  265. package/dist/metrics/config.js +0 -276
  266. package/dist/metrics/config.js.map +0 -1
  267. package/dist/metrics/constants.d.ts +0 -70
  268. package/dist/metrics/index.d.ts +0 -45
  269. package/dist/multistream/mediaRequestManager.d.ts +0 -119
  270. package/dist/multistream/receiveSlot.d.ts +0 -68
  271. package/dist/multistream/receiveSlotManager.d.ts +0 -56
  272. package/dist/multistream/remoteMedia.d.ts +0 -72
  273. package/dist/multistream/remoteMediaGroup.d.ts +0 -49
  274. package/dist/multistream/remoteMediaManager.d.ts +0 -300
  275. package/dist/multistream/sendSlotManager.d.ts +0 -69
  276. package/dist/networkQualityMonitor/index.d.ts +0 -70
  277. package/dist/networkQualityMonitor/index.js +0 -221
  278. package/dist/networkQualityMonitor/index.js.map +0 -1
  279. package/dist/peer-connection-manager/index.js +0 -671
  280. package/dist/peer-connection-manager/index.js.map +0 -1
  281. package/dist/peer-connection-manager/util.js +0 -109
  282. package/dist/peer-connection-manager/util.js.map +0 -1
  283. package/dist/personal-meeting-room/index.d.ts +0 -47
  284. package/dist/personal-meeting-room/request.d.ts +0 -14
  285. package/dist/personal-meeting-room/util.d.ts +0 -2
  286. package/dist/reachability/clusterReachability.d.ts +0 -109
  287. package/dist/reachability/index.d.ts +0 -105
  288. package/dist/reachability/request.d.ts +0 -39
  289. package/dist/reachability/util.d.ts +0 -8
  290. package/dist/reactions/constants.d.ts +0 -3
  291. package/dist/reactions/reactions.d.ts +0 -4
  292. package/dist/reactions/reactions.type.d.ts +0 -52
  293. package/dist/reconnection-manager/index.d.ts +0 -136
  294. package/dist/recording-controller/enums.d.ts +0 -7
  295. package/dist/recording-controller/index.d.ts +0 -207
  296. package/dist/recording-controller/util.d.ts +0 -14
  297. package/dist/roap/collection.js +0 -62
  298. package/dist/roap/collection.js.map +0 -1
  299. package/dist/roap/handler.js +0 -275
  300. package/dist/roap/handler.js.map +0 -1
  301. package/dist/roap/index.d.ts +0 -86
  302. package/dist/roap/request.d.ts +0 -39
  303. package/dist/roap/state.js +0 -126
  304. package/dist/roap/state.js.map +0 -1
  305. package/dist/roap/turnDiscovery.d.ts +0 -155
  306. package/dist/roap/util.js +0 -75
  307. package/dist/roap/util.js.map +0 -1
  308. package/dist/rtcMetrics/constants.d.ts +0 -4
  309. package/dist/rtcMetrics/constants.js.map +0 -1
  310. package/dist/rtcMetrics/index.d.ts +0 -61
  311. package/dist/rtcMetrics/index.js +0 -197
  312. package/dist/rtcMetrics/index.js.map +0 -1
  313. package/dist/statsAnalyzer/global.d.ts +0 -36
  314. package/dist/statsAnalyzer/global.js +0 -126
  315. package/dist/statsAnalyzer/global.js.map +0 -1
  316. package/dist/statsAnalyzer/index.d.ts +0 -217
  317. package/dist/statsAnalyzer/index.js +0 -1013
  318. package/dist/statsAnalyzer/index.js.map +0 -1
  319. package/dist/statsAnalyzer/mqaUtil.d.ts +0 -48
  320. package/dist/statsAnalyzer/mqaUtil.js +0 -179
  321. package/dist/statsAnalyzer/mqaUtil.js.map +0 -1
  322. package/dist/transcription/index.d.ts +0 -64
  323. package/dist/types/common/errors/reconnection-in-progress.d.ts +0 -9
  324. package/dist/types/mediaQualityMetrics/config.d.ts +0 -241
  325. package/dist/types/networkQualityMonitor/index.d.ts +0 -70
  326. package/dist/types/rtcMetrics/constants.d.ts +0 -4
  327. package/dist/types/rtcMetrics/index.d.ts +0 -71
  328. package/dist/types/statsAnalyzer/global.d.ts +0 -36
  329. package/dist/types/statsAnalyzer/index.d.ts +0 -217
  330. package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -48
  331. package/dist/webinar/collection.d.ts +0 -16
  332. package/dist/webinar/index.d.ts +0 -5
@@ -39,6 +39,7 @@ var _lodash = require("lodash");
39
39
  var _jwtDecode = _interopRequireDefault(require("jwt-decode"));
40
40
  var _webexCore = require("@webex/webex-core");
41
41
  var _common = require("@webex/common");
42
+ var _commonTimers = require("@webex/common-timers");
42
43
  var _internalPluginMetrics = require("@webex/internal-plugin-metrics");
43
44
  var _internalMediaCore = require("@webex/internal-media-core");
44
45
  var _mediaHelpers = require("@webex/media-helpers");
@@ -86,6 +87,7 @@ var _controlsOptionsManager = _interopRequireDefault(require("../controls-option
86
87
  var _permission = _interopRequireDefault(require("../common/errors/permission"));
87
88
  var _locusMediaRequest = require("./locusMediaRequest");
88
89
  var _connectionStateHandler = require("./connectionStateHandler");
90
+ var _joinWebinarError = _interopRequireDefault(require("../common/errors/join-webinar-error"));
89
91
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof _Symbol !== "undefined" && o[_Symbol$iterator] || o["@@iterator"]; if (!it) { if (_Array$isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
90
92
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return _Array$from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
91
93
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
@@ -551,6 +553,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
551
553
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "iceCandidateErrors", void 0);
552
554
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "iceCandidatesCount", void 0);
553
555
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "rtcMetrics", void 0);
556
+ (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "uploadLogsTimer", void 0);
557
+ (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "logUploadIntervalIndex", void 0);
554
558
  /**
555
559
  * Callback called when a relay event is received from meeting LLM Connection
556
560
  * @param {RelayEvent} e Event object coming from LLM Connection
@@ -1003,7 +1007,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1003
1007
  });
1004
1008
  _this.iceCandidatesCount = 0;
1005
1009
  _this.mediaProperties.webrtcMediaConnection.on(_internalMediaCore.MediaConnectionEventNames.ICE_CANDIDATE, function (event) {
1006
- if (event.candidate) {
1010
+ if (event.candidate && event.candidate.candidate && event.candidate.candidate.length > 0) {
1007
1011
  _this.iceCandidatesCount += 1;
1008
1012
  }
1009
1013
  });
@@ -1218,31 +1222,35 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1218
1222
  return _regenerator.default.wrap(function _callee2$(_context2) {
1219
1223
  while (1) switch (_context2.prev = _context2.next) {
1220
1224
  case 0:
1225
+ _loggerProxy.default.logger.info("Meeting:index#handleShareAudioStreamEnded --> audio share stream ended");
1226
+ // current share audio stream has ended, but there might be an active
1227
+ // share video stream. we only leave from wireless share if share has
1228
+ // completely ended, which means no share audio or video streams active
1221
1229
  if (!(_this.wirelessShare && !_this.mediaProperties.shareVideoStream)) {
1222
- _context2.next = 4;
1230
+ _context2.next = 5;
1223
1231
  break;
1224
1232
  }
1225
1233
  _this.leave({
1226
1234
  reason: _constants.MEETING_REMOVED_REASON.USER_ENDED_SHARE_STREAMS
1227
1235
  });
1228
- _context2.next = 12;
1236
+ _context2.next = 13;
1229
1237
  break;
1230
- case 4:
1231
- _context2.prev = 4;
1232
- _context2.next = 7;
1238
+ case 5:
1239
+ _context2.prev = 5;
1240
+ _context2.next = 8;
1233
1241
  return _this.unpublishStreams([_this.mediaProperties.shareAudioStream]);
1234
- case 7:
1235
- _context2.next = 12;
1242
+ case 8:
1243
+ _context2.next = 13;
1236
1244
  break;
1237
- case 9:
1238
- _context2.prev = 9;
1239
- _context2.t0 = _context2["catch"](4);
1245
+ case 10:
1246
+ _context2.prev = 10;
1247
+ _context2.t0 = _context2["catch"](5);
1240
1248
  _loggerProxy.default.logger.log('Meeting:index#handleShareAudioStreamEnded --> Error stopping share: ', _context2.t0);
1241
- case 12:
1249
+ case 13:
1242
1250
  case "end":
1243
1251
  return _context2.stop();
1244
1252
  }
1245
- }, _callee2, null, [[4, 9]]);
1253
+ }, _callee2, null, [[5, 10]]);
1246
1254
  })));
1247
1255
  /**
1248
1256
  * Functionality for when a share video is muted or unmuted.
@@ -1270,33 +1278,37 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1270
1278
  return _regenerator.default.wrap(function _callee3$(_context3) {
1271
1279
  while (1) switch (_context3.prev = _context3.next) {
1272
1280
  case 0:
1281
+ _loggerProxy.default.logger.info("Meeting:index#handleShareVideoStreamEnded --> video share stream ended");
1282
+ // current share video stream has ended, but there might be an active
1283
+ // share audio stream. we only leave from wireless share if share has
1284
+ // completely ended, which means no share audio or video streams active
1273
1285
  if (!(_this.wirelessShare && !_this.mediaProperties.shareAudioStream)) {
1274
- _context3.next = 4;
1286
+ _context3.next = 5;
1275
1287
  break;
1276
1288
  }
1277
1289
  _this.leave({
1278
1290
  reason: _constants.MEETING_REMOVED_REASON.USER_ENDED_SHARE_STREAMS
1279
1291
  });
1280
- _context3.next = 12;
1292
+ _context3.next = 13;
1281
1293
  break;
1282
- case 4:
1283
- _context3.prev = 4;
1284
- _context3.next = 7;
1294
+ case 5:
1295
+ _context3.prev = 5;
1296
+ _context3.next = 8;
1285
1297
  return _this.unpublishStreams([_this.mediaProperties.shareVideoStream]);
1286
- case 7:
1287
- _context3.next = 12;
1298
+ case 8:
1299
+ _context3.next = 13;
1288
1300
  break;
1289
- case 9:
1290
- _context3.prev = 9;
1291
- _context3.t0 = _context3["catch"](4);
1301
+ case 10:
1302
+ _context3.prev = 10;
1303
+ _context3.t0 = _context3["catch"](5);
1292
1304
  _loggerProxy.default.logger.log('Meeting:index#handleShareVideoStreamEnded --> Error stopping share: ', _context3.t0);
1293
- case 12:
1294
- _this.triggerStoppedSharing();
1295
1305
  case 13:
1306
+ _this.triggerStoppedSharing();
1307
+ case 14:
1296
1308
  case "end":
1297
1309
  return _context3.stop();
1298
1310
  }
1299
- }, _callee3, null, [[4, 9]]);
1311
+ }, _callee3, null, [[5, 10]]);
1300
1312
  })));
1301
1313
  /**
1302
1314
  * Emits meeting:stoppedSharingLocal
@@ -1425,6 +1437,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1425
1437
  _loggerProxy.default.logger.log("Meetings:index#constructor --> Initializing the meeting object with generated correlation id from sdk ".concat(_this.id));
1426
1438
  _this.callStateForMetrics.correlationId = _this.id;
1427
1439
  }
1440
+ _this.logUploadIntervalIndex = 0;
1441
+
1428
1442
  /**
1429
1443
  * @instance
1430
1444
  * @type {String}
@@ -2413,8 +2427,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2413
2427
  }
2414
2428
  throw new _permission.default();
2415
2429
  case 21:
2430
+ if (!(_context5.t0 instanceof _meetingInfoV.MeetingInfoV2JoinWebinarError)) {
2431
+ _context5.next = 29;
2432
+ break;
2433
+ }
2434
+ this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.WEBINAR_REGISTRATION;
2435
+ if (_constants.WEBINAR_ERROR_WEBCAST.includes(_context5.t0.wbxAppApiCode)) {
2436
+ this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.NEED_JOIN_WITH_WEBCAST;
2437
+ } else if (_constants.WEBINAR_ERROR_REGISTRATIONID.includes(_context5.t0.wbxAppApiCode)) {
2438
+ this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.WEBINAR_NEED_REGISTRATIONID;
2439
+ }
2440
+ this.meetingInfoFailureCode = _context5.t0.wbxAppApiCode;
2441
+ if (_context5.t0.meetingInfo) {
2442
+ this.meetingInfo = _context5.t0.meetingInfo;
2443
+ }
2444
+ throw new _joinWebinarError.default();
2445
+ case 29:
2416
2446
  if (!(_context5.t0 instanceof _meetingInfoV.MeetingInfoV2PasswordError)) {
2417
- _context5.next = 33;
2447
+ _context5.next = 41;
2418
2448
  break;
2419
2449
  }
2420
2450
  _loggerProxy.default.logger.info( // @ts-ignore
@@ -2429,16 +2459,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2429
2459
  this.passwordStatus = _constants.PASSWORD_STATUS.REQUIRED;
2430
2460
  this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.WRONG_PASSWORD;
2431
2461
  if (!this.requiredCaptcha) {
2432
- _context5.next = 30;
2462
+ _context5.next = 38;
2433
2463
  break;
2434
2464
  }
2435
- _context5.next = 30;
2465
+ _context5.next = 38;
2436
2466
  return this.refreshCaptcha();
2437
- case 30:
2467
+ case 38:
2438
2468
  throw new _passwordError.default();
2439
- case 33:
2469
+ case 41:
2440
2470
  if (!(_context5.t0 instanceof _meetingInfoV.MeetingInfoV2CaptchaError)) {
2441
- _context5.next = 42;
2471
+ _context5.next = 50;
2442
2472
  break;
2443
2473
  }
2444
2474
  _loggerProxy.default.logger.info( // @ts-ignore
@@ -2450,10 +2480,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2450
2480
  }
2451
2481
  this.requiredCaptcha = _context5.t0.captchaInfo;
2452
2482
  throw new _captchaError.default();
2453
- case 42:
2483
+ case 50:
2454
2484
  this.meetingInfoFailureReason = _constants.MEETING_INFO_FAILURE_REASON.OTHER;
2455
2485
  throw _context5.t0;
2456
- case 44:
2486
+ case 52:
2457
2487
  case "end":
2458
2488
  return _context5.stop();
2459
2489
  }
@@ -2682,6 +2712,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2682
2712
  this.setUpLocusInfoSelfListener();
2683
2713
  this.setUpLocusInfoMeetingListener();
2684
2714
  this.setUpLocusServicesListener();
2715
+ this.setUpLocusResourcesListener();
2685
2716
  // members update listeners
2686
2717
  this.setUpLocusFullStateListener();
2687
2718
  this.setUpLocusUrlListener();
@@ -3198,8 +3229,45 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3198
3229
  state: state
3199
3230
  });
3200
3231
  });
3201
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED, function (_ref22) {
3232
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_WEBCAST_CHANGED, function (_ref22) {
3202
3233
  var state = _ref22.state;
3234
+ _triggerProxy.default.trigger(_this13, {
3235
+ file: 'meeting/index',
3236
+ function: 'setupLocusControlsListener'
3237
+ }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_WEBCAST_UPDATED, {
3238
+ state: state
3239
+ });
3240
+ });
3241
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_FULL_CHANGED, function (_ref23) {
3242
+ var state = _ref23.state;
3243
+ _triggerProxy.default.trigger(_this13, {
3244
+ file: 'meeting/index',
3245
+ function: 'setupLocusControlsListener'
3246
+ }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_MEETING_FULL_UPDATED, {
3247
+ state: state
3248
+ });
3249
+ });
3250
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_PRACTICE_SESSION_STATUS_UPDATED, function (_ref24) {
3251
+ var state = _ref24.state;
3252
+ _this13.webinar.updatePracticeSessionStatus(state);
3253
+ _triggerProxy.default.trigger(_this13, {
3254
+ file: 'meeting/index',
3255
+ function: 'setupLocusControlsListener'
3256
+ }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_PRACTICE_SESSION_STATUS_UPDATED, {
3257
+ state: state
3258
+ });
3259
+ });
3260
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_STAGE_VIEW_UPDATED, function (_ref25) {
3261
+ var state = _ref25.state;
3262
+ _triggerProxy.default.trigger(_this13, {
3263
+ file: 'meeting/index',
3264
+ function: 'setupLocusControlsListener'
3265
+ }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_STAGE_VIEW_UPDATED, {
3266
+ state: state
3267
+ });
3268
+ });
3269
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED, function (_ref26) {
3270
+ var state = _ref26.state;
3203
3271
  _triggerProxy.default.trigger(_this13, {
3204
3272
  file: 'meeting/index',
3205
3273
  function: 'setupLocusControlsListener'
@@ -3246,7 +3314,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3246
3314
  var _this14 = this;
3247
3315
  // Will get triggered on local and remote share
3248
3316
  this.locusInfo.on(_constants.EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES, /*#__PURE__*/function () {
3249
- var _ref23 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(payload) {
3317
+ var _ref27 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(payload) {
3250
3318
  var _payload$previous, _payload$previous2;
3251
3319
  var _payload$current, contentShare, whiteboardShare, previousContentShare, previousWhiteboardShare, newShareStatus, oldShareStatus, sendStartedSharingRemote, _this14$mediaProperti;
3252
3320
  return _regenerator.default.wrap(function _callee8$(_context8) {
@@ -3288,8 +3356,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3288
3356
  else if ((previousContentShare && contentShare.disposition === _constants.FLOOR_ACTION.RELEASED || contentShare.disposition === null) && (previousWhiteboardShare && whiteboardShare.disposition === _constants.FLOOR_ACTION.RELEASED || whiteboardShare.disposition === null)) {
3289
3357
  newShareStatus = _constants.SHARE_STATUS.NO_SHARE;
3290
3358
  }
3359
+ _loggerProxy.default.logger.info("Meeting:index#setUpLocusInfoMediaInactiveListener --> this.shareStatus=".concat(_this14.shareStatus, " newShareStatus=").concat(newShareStatus));
3291
3360
  if (!(newShareStatus !== _this14.shareStatus)) {
3292
- _context8.next = 45;
3361
+ _context8.next = 46;
3293
3362
  break;
3294
3363
  }
3295
3364
  oldShareStatus = _this14.shareStatus; // update our state before we send out any notifications
@@ -3297,37 +3366,37 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3297
3366
 
3298
3367
  // send out "stop" notifications for the old state
3299
3368
  _context8.t0 = oldShareStatus;
3300
- _context8.next = _context8.t0 === _constants.SHARE_STATUS.REMOTE_SHARE_ACTIVE ? 14 : _context8.t0 === _constants.SHARE_STATUS.LOCAL_SHARE_ACTIVE ? 16 : _context8.t0 === _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE ? 18 : _context8.t0 === _constants.SHARE_STATUS.NO_SHARE ? 20 : 21;
3369
+ _context8.next = _context8.t0 === _constants.SHARE_STATUS.REMOTE_SHARE_ACTIVE ? 15 : _context8.t0 === _constants.SHARE_STATUS.LOCAL_SHARE_ACTIVE ? 17 : _context8.t0 === _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE ? 19 : _context8.t0 === _constants.SHARE_STATUS.NO_SHARE ? 21 : 22;
3301
3370
  break;
3302
- case 14:
3371
+ case 15:
3303
3372
  _triggerProxy.default.trigger(_this14, {
3304
3373
  file: 'meetings/index',
3305
3374
  function: 'remoteShare'
3306
3375
  }, _constants.EVENT_TRIGGERS.MEETING_STOPPED_SHARING_REMOTE);
3307
- return _context8.abrupt("break", 22);
3308
- case 16:
3376
+ return _context8.abrupt("break", 23);
3377
+ case 17:
3309
3378
  _triggerProxy.default.trigger(_this14, {
3310
3379
  file: 'meeting/index',
3311
3380
  function: 'localShare'
3312
3381
  }, _constants.EVENT_TRIGGERS.MEETING_STOPPED_SHARING_LOCAL, {
3313
3382
  reason: _constants.SHARE_STOPPED_REASON.SELF_STOPPED
3314
3383
  });
3315
- return _context8.abrupt("break", 22);
3316
- case 18:
3384
+ return _context8.abrupt("break", 23);
3385
+ case 19:
3317
3386
  _triggerProxy.default.trigger(_this14, {
3318
3387
  file: 'meeting/index',
3319
3388
  function: 'stopWhiteboardShare'
3320
3389
  }, _constants.EVENT_TRIGGERS.MEETING_STOPPED_SHARING_WHITEBOARD);
3321
- return _context8.abrupt("break", 22);
3322
- case 20:
3323
- return _context8.abrupt("break", 22);
3390
+ return _context8.abrupt("break", 23);
3324
3391
  case 21:
3325
- return _context8.abrupt("break", 22);
3392
+ return _context8.abrupt("break", 23);
3326
3393
  case 22:
3394
+ return _context8.abrupt("break", 23);
3395
+ case 23:
3327
3396
  _context8.t1 = newShareStatus;
3328
- _context8.next = _context8.t1 === _constants.SHARE_STATUS.REMOTE_SHARE_ACTIVE ? 25 : _context8.t1 === _constants.SHARE_STATUS.LOCAL_SHARE_ACTIVE ? 34 : _context8.t1 === _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE ? 37 : _context8.t1 === _constants.SHARE_STATUS.NO_SHARE ? 40 : 41;
3397
+ _context8.next = _context8.t1 === _constants.SHARE_STATUS.REMOTE_SHARE_ACTIVE ? 26 : _context8.t1 === _constants.SHARE_STATUS.LOCAL_SHARE_ACTIVE ? 35 : _context8.t1 === _constants.SHARE_STATUS.WHITEBOARD_SHARE_ACTIVE ? 38 : _context8.t1 === _constants.SHARE_STATUS.NO_SHARE ? 41 : 42;
3329
3398
  break;
3330
- case 25:
3399
+ case 26:
3331
3400
  sendStartedSharingRemote = function sendStartedSharingRemote() {
3332
3401
  _this14.remoteShareInstanceId = contentShare.shareInstanceId;
3333
3402
  _triggerProxy.default.trigger(_this14, {
@@ -3341,20 +3410,20 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3341
3410
  resourceType: contentShare.resourceType
3342
3411
  });
3343
3412
  };
3344
- _context8.prev = 26;
3413
+ _context8.prev = 27;
3345
3414
  if (!((_this14$mediaProperti = _this14.mediaProperties.mediaDirection) !== null && _this14$mediaProperti !== void 0 && _this14$mediaProperti.sendShare && oldShareStatus === _constants.SHARE_STATUS.LOCAL_SHARE_ACTIVE)) {
3346
- _context8.next = 30;
3415
+ _context8.next = 31;
3347
3416
  break;
3348
3417
  }
3349
- _context8.next = 30;
3418
+ _context8.next = 31;
3350
3419
  return _this14.unpublishStreams([_this14.mediaProperties.shareVideoStream, _this14.mediaProperties.shareAudioStream]);
3351
- case 30:
3352
- _context8.prev = 30;
3420
+ case 31:
3421
+ _context8.prev = 31;
3353
3422
  sendStartedSharingRemote();
3354
- return _context8.finish(30);
3355
- case 33:
3356
- return _context8.abrupt("break", 42);
3423
+ return _context8.finish(31);
3357
3424
  case 34:
3425
+ return _context8.abrupt("break", 43);
3426
+ case 35:
3358
3427
  _triggerProxy.default.trigger(_this14, {
3359
3428
  file: 'meeting/index',
3360
3429
  function: 'share'
@@ -3370,8 +3439,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3370
3439
  meetingId: _this14.id
3371
3440
  }
3372
3441
  });
3373
- return _context8.abrupt("break", 42);
3374
- case 37:
3442
+ return _context8.abrupt("break", 43);
3443
+ case 38:
3375
3444
  _triggerProxy.default.trigger(_this14, {
3376
3445
  file: 'meeting/index',
3377
3446
  function: 'startWhiteboardShare'
@@ -3389,16 +3458,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3389
3458
  meetingId: _this14.id
3390
3459
  }
3391
3460
  });
3392
- return _context8.abrupt("break", 42);
3393
- case 40:
3394
- return _context8.abrupt("break", 42);
3461
+ return _context8.abrupt("break", 43);
3395
3462
  case 41:
3396
- return _context8.abrupt("break", 42);
3463
+ return _context8.abrupt("break", 43);
3397
3464
  case 42:
3465
+ return _context8.abrupt("break", 43);
3466
+ case 43:
3398
3467
  _this14.members.locusMediaSharesUpdate(payload);
3399
- _context8.next = 46;
3468
+ _context8.next = 47;
3400
3469
  break;
3401
- case 45:
3470
+ case 46:
3402
3471
  if (newShareStatus === _constants.SHARE_STATUS.REMOTE_SHARE_ACTIVE) {
3403
3472
  // if we got here, then some remote participant has stolen
3404
3473
  // the presentation from another remote participant
@@ -3436,14 +3505,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3436
3505
  });
3437
3506
  _this14.members.locusMediaSharesUpdate(payload);
3438
3507
  }
3439
- case 46:
3508
+ case 47:
3440
3509
  case "end":
3441
3510
  return _context8.stop();
3442
3511
  }
3443
- }, _callee8, null, [[26,, 30, 33]]);
3512
+ }, _callee8, null, [[27,, 31, 34]]);
3444
3513
  }));
3445
3514
  return function (_x8) {
3446
- return _ref23.apply(this, arguments);
3515
+ return _ref27.apply(this, arguments);
3447
3516
  };
3448
3517
  }());
3449
3518
  }
@@ -3493,14 +3562,29 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3493
3562
  value: function setUpLocusServicesListener() {
3494
3563
  var _this16 = this;
3495
3564
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.LINKS_SERVICES, function (payload) {
3496
- var _payload$services, _payload$services$rec, _this16$locusInfo, _this16$locusInfo$ful, _payload$services2, _payload$services2$br, _payload$services3, _payload$services3$ap, _payload$services4, _payload$services4$ap, _payload$services5, _payload$services5$we, _payload$services6, _payload$services6$we;
3565
+ var _payload$services, _payload$services$rec, _this16$locusInfo, _this16$locusInfo$ful, _payload$services2, _payload$services2$br, _payload$services3, _payload$services3$ap, _payload$services4, _payload$services4$ap;
3497
3566
  _this16.recordingController.setServiceUrl(payload === null || payload === void 0 ? void 0 : (_payload$services = payload.services) === null || _payload$services === void 0 ? void 0 : (_payload$services$rec = _payload$services.record) === null || _payload$services$rec === void 0 ? void 0 : _payload$services$rec.url);
3498
3567
  _this16.recordingController.setSessionId((_this16$locusInfo = _this16.locusInfo) === null || _this16$locusInfo === void 0 ? void 0 : (_this16$locusInfo$ful = _this16$locusInfo.fullState) === null || _this16$locusInfo$ful === void 0 ? void 0 : _this16$locusInfo$ful.sessionId);
3499
3568
  _this16.breakouts.breakoutServiceUrlUpdate(payload === null || payload === void 0 ? void 0 : (_payload$services2 = payload.services) === null || _payload$services2 === void 0 ? void 0 : (_payload$services2$br = _payload$services2.breakout) === null || _payload$services2$br === void 0 ? void 0 : _payload$services2$br.url);
3500
3569
  _this16.annotation.approvalUrlUpdate(payload === null || payload === void 0 ? void 0 : (_payload$services3 = payload.services) === null || _payload$services3 === void 0 ? void 0 : (_payload$services3$ap = _payload$services3.approval) === null || _payload$services3$ap === void 0 ? void 0 : _payload$services3$ap.url);
3501
3570
  _this16.simultaneousInterpretation.approvalUrlUpdate(payload === null || payload === void 0 ? void 0 : (_payload$services4 = payload.services) === null || _payload$services4 === void 0 ? void 0 : (_payload$services4$ap = _payload$services4.approval) === null || _payload$services4$ap === void 0 ? void 0 : _payload$services4$ap.url);
3502
- _this16.webinar.webcastUrlUpdate(payload === null || payload === void 0 ? void 0 : (_payload$services5 = payload.services) === null || _payload$services5 === void 0 ? void 0 : (_payload$services5$we = _payload$services5.webcast) === null || _payload$services5$we === void 0 ? void 0 : _payload$services5$we.url);
3503
- _this16.webinar.webinarAttendeesSearchingUrlUpdate(payload === null || payload === void 0 ? void 0 : (_payload$services6 = payload.services) === null || _payload$services6 === void 0 ? void 0 : (_payload$services6$we = _payload$services6.webinarAttendeesSearching) === null || _payload$services6$we === void 0 ? void 0 : _payload$services6$we.url);
3571
+ });
3572
+ }
3573
+
3574
+ /**
3575
+ * Set up the locus info resources link listener
3576
+ * update the locusInfo for webcast instance url
3577
+ * @param {Object} payload - The event payload
3578
+ * @returns {undefined}
3579
+ * @private
3580
+ * @memberof Meeting
3581
+ */
3582
+ }, {
3583
+ key: "setUpLocusResourcesListener",
3584
+ value: function setUpLocusResourcesListener() {
3585
+ var _this17 = this;
3586
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.LINKS_RESOURCES, function (payload) {
3587
+ _this17.webinar.updateWebcastUrl(payload);
3504
3588
  });
3505
3589
  }
3506
3590
 
@@ -3513,10 +3597,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3513
3597
  }, {
3514
3598
  key: "setUpLocusInfoMeetingInfoListener",
3515
3599
  value: function setUpLocusInfoMeetingInfoListener() {
3516
- var _this17 = this;
3600
+ var _this18 = this;
3517
3601
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEETING_LOCKED, function (payload) {
3518
3602
  if (payload) {
3519
- _triggerProxy.default.trigger(_this17, {
3603
+ _triggerProxy.default.trigger(_this18, {
3520
3604
  file: 'meeting/index',
3521
3605
  function: 'setUpLocusInfoMeetingInfoListener'
3522
3606
  }, _constants.EVENT_TRIGGERS.MEETING_LOCKED, {
@@ -3526,7 +3610,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3526
3610
  });
3527
3611
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEETING_UNLOCKED, function (payload) {
3528
3612
  if (payload) {
3529
- _triggerProxy.default.trigger(_this17, {
3613
+ _triggerProxy.default.trigger(_this18, {
3530
3614
  file: 'meeting/index',
3531
3615
  function: 'setUpLocusInfoMeetingInfoListener'
3532
3616
  }, _constants.EVENT_TRIGGERS.MEETING_UNLOCKED, {
@@ -3534,16 +3618,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3534
3618
  });
3535
3619
  }
3536
3620
  });
3537
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEETING_INFO_UPDATED, function (_ref24) {
3538
- var isInitializing = _ref24.isInitializing;
3539
- _this17.updateMeetingActions();
3540
- _this17.recordingController.setDisplayHints(_this17.userDisplayHints);
3541
- _this17.recordingController.setUserPolicy(_this17.selfUserPolicies);
3542
- _this17.controlsOptionsManager.setDisplayHints(_this17.userDisplayHints);
3543
- _this17.handleDataChannelUrlChange(_this17.datachannelUrl);
3621
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEETING_INFO_UPDATED, function (_ref28) {
3622
+ var isInitializing = _ref28.isInitializing;
3623
+ _this18.updateMeetingActions();
3624
+ _this18.recordingController.setDisplayHints(_this18.userDisplayHints);
3625
+ _this18.recordingController.setUserPolicy(_this18.selfUserPolicies);
3626
+ _this18.controlsOptionsManager.setDisplayHints(_this18.userDisplayHints);
3627
+ _this18.handleDataChannelUrlChange(_this18.datachannelUrl);
3544
3628
  if (!isInitializing) {
3545
3629
  // send updated trigger only if locus is not initializing the meeting
3546
- _triggerProxy.default.trigger(_this17, {
3630
+ _triggerProxy.default.trigger(_this18, {
3547
3631
  file: 'meetings',
3548
3632
  function: 'setUpLocusInfoMeetingInfoListener'
3549
3633
  }, _constants.EVENT_TRIGGERS.MEETING_INFO_UPDATED);
@@ -3574,10 +3658,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3574
3658
  }, {
3575
3659
  key: "setUpLocusEmbeddedAppsListener",
3576
3660
  value: function setUpLocusEmbeddedAppsListener() {
3577
- var _this18 = this;
3661
+ var _this19 = this;
3578
3662
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.EMBEDDED_APPS_UPDATED, function (embeddedApps) {
3579
3663
  if (embeddedApps) {
3580
- _triggerProxy.default.trigger(_this18, {
3664
+ _triggerProxy.default.trigger(_this19, {
3581
3665
  file: 'meeting/index',
3582
3666
  function: 'setUpLocusEmbeddedAppsListener'
3583
3667
  }, _constants.EVENT_TRIGGERS.MEETING_EMBEDDED_APPS_UPDATE, embeddedApps);
@@ -3594,11 +3678,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3594
3678
  }, {
3595
3679
  key: "setUpLocusInfoSelfListener",
3596
3680
  value: function setUpLocusInfoSelfListener() {
3597
- var _this19 = this;
3681
+ var _this20 = this;
3598
3682
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUIRED, function (payload) {
3599
- if (_this19.audio) {
3600
- _this19.audio.handleServerLocalUnmuteRequired(_this19);
3601
- _triggerProxy.default.trigger(_this19, {
3683
+ if (_this20.audio) {
3684
+ _this20.audio.handleServerLocalUnmuteRequired(_this20, payload.unmuteAllowed);
3685
+ _triggerProxy.default.trigger(_this20, {
3602
3686
  file: 'meeting/index',
3603
3687
  function: 'setUpLocusInfoSelfListener'
3604
3688
  }, _constants.EVENT_TRIGGERS.MEETING_SELF_UNMUTED_BY_OTHERS, {
@@ -3608,13 +3692,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3608
3692
  });
3609
3693
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED, function (payload) {
3610
3694
  if (payload) {
3611
- if (_this19.video) {
3695
+ if (_this20.video) {
3612
3696
  var _payload$muted, _payload$unmuteAllowe;
3613
- payload.muted = (_payload$muted = payload.muted) !== null && _payload$muted !== void 0 ? _payload$muted : _this19.video.isRemotelyMuted();
3614
- payload.unmuteAllowed = (_payload$unmuteAllowe = payload.unmuteAllowed) !== null && _payload$unmuteAllowe !== void 0 ? _payload$unmuteAllowe : _this19.video.isUnmuteAllowed();
3615
- _this19.video.handleServerRemoteMuteUpdate(_this19, payload.muted, payload.unmuteAllowed);
3697
+ payload.muted = (_payload$muted = payload.muted) !== null && _payload$muted !== void 0 ? _payload$muted : _this20.video.isRemotelyMuted();
3698
+ payload.unmuteAllowed = (_payload$unmuteAllowe = payload.unmuteAllowed) !== null && _payload$unmuteAllowe !== void 0 ? _payload$unmuteAllowe : _this20.video.isUnmuteAllowed();
3699
+ _this20.video.handleServerRemoteMuteUpdate(_this20, payload.muted, payload.unmuteAllowed);
3616
3700
  }
3617
- _triggerProxy.default.trigger(_this19, {
3701
+ _triggerProxy.default.trigger(_this20, {
3618
3702
  file: 'meeting/index',
3619
3703
  function: 'setUpLocusInfoSelfListener'
3620
3704
  }, payload.muted ? _constants.EVENT_TRIGGERS.MEETING_SELF_VIDEO_MUTED_BY_OTHERS : _constants.EVENT_TRIGGERS.MEETING_SELF_VIDEO_UNMUTED_BY_OTHERS, {
@@ -3624,15 +3708,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3624
3708
  });
3625
3709
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_REMOTE_MUTE_STATUS_UPDATED, function (payload) {
3626
3710
  if (payload) {
3627
- var _this19$audio;
3628
- if (_this19.audio) {
3629
- _this19.audio.handleServerRemoteMuteUpdate(_this19, payload.muted, payload.unmuteAllowed);
3711
+ var _this20$audio;
3712
+ if (_this20.audio) {
3713
+ _this20.audio.handleServerRemoteMuteUpdate(_this20, payload.muted, payload.unmuteAllowed);
3630
3714
  }
3631
3715
  // with "mute on entry" server will send us remote mute even if we don't have media configured,
3632
3716
  // so if being muted by others, always send the notification,
3633
3717
  // but if being unmuted, only send it if we are also locally unmuted
3634
- if (payload.muted || !((_this19$audio = _this19.audio) !== null && _this19$audio !== void 0 && _this19$audio.isMuted())) {
3635
- _triggerProxy.default.trigger(_this19, {
3718
+ if (payload.muted || !((_this20$audio = _this20.audio) !== null && _this20$audio !== void 0 && _this20$audio.isMuted())) {
3719
+ _triggerProxy.default.trigger(_this20, {
3636
3720
  file: 'meeting/index',
3637
3721
  function: 'setUpLocusInfoSelfListener'
3638
3722
  }, payload.muted ? _constants.EVENT_TRIGGERS.MEETING_SELF_MUTED_BY_OTHERS : _constants.EVENT_TRIGGERS.MEETING_SELF_UNMUTED_BY_OTHERS, {
@@ -3642,7 +3726,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3642
3726
  }
3643
3727
  });
3644
3728
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUESTED, function (payload) {
3645
- _triggerProxy.default.trigger(_this19, {
3729
+ _triggerProxy.default.trigger(_this20, {
3646
3730
  file: 'meeting/index',
3647
3731
  function: 'setUpLocusInfoSelfListener'
3648
3732
  }, _constants.EVENT_TRIGGERS.MEETING_SELF_REQUESTED_TO_UNMUTE, {
@@ -3651,8 +3735,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3651
3735
  });
3652
3736
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_UNADMITTED_GUEST, function (payload) {
3653
3737
  if (payload) {
3654
- _this19.startKeepAlive();
3655
- _triggerProxy.default.trigger(_this19, {
3738
+ _this20.startKeepAlive();
3739
+ _triggerProxy.default.trigger(_this20, {
3656
3740
  file: 'meeting/index',
3657
3741
  function: 'setUpLocusInfoSelfListener'
3658
3742
  }, _constants.EVENT_TRIGGERS.MEETING_SELF_LOBBY_WAITING, {
@@ -3660,24 +3744,27 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3660
3744
  });
3661
3745
 
3662
3746
  // @ts-ignore
3663
- _this19.webex.internal.newMetrics.submitClientEvent({
3747
+ _this20.webex.internal.newMetrics.submitClientEvent({
3664
3748
  name: 'client.lobby.entered',
3665
3749
  options: {
3666
- meetingId: _this19.id
3750
+ meetingId: _this20.id
3667
3751
  }
3668
3752
  });
3669
3753
  }
3670
- _this19.updateLLMConnection();
3754
+ _metrics.default.sendBehavioralMetric(_constants2.default.GUEST_ENTERED_LOBBY, {
3755
+ correlation_id: _this20.correlationId
3756
+ });
3757
+ _this20.updateLLMConnection();
3671
3758
  });
3672
3759
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST, /*#__PURE__*/function () {
3673
- var _ref25 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(payload) {
3674
- var _this19$rtcMetrics;
3760
+ var _ref29 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(payload) {
3761
+ var _this20$rtcMetrics;
3675
3762
  return _regenerator.default.wrap(function _callee9$(_context9) {
3676
3763
  while (1) switch (_context9.prev = _context9.next) {
3677
3764
  case 0:
3678
- _this19.stopKeepAlive();
3765
+ _this20.stopKeepAlive();
3679
3766
  if (payload) {
3680
- _triggerProxy.default.trigger(_this19, {
3767
+ _triggerProxy.default.trigger(_this20, {
3681
3768
  file: 'meeting/index',
3682
3769
  function: 'setUpLocusInfoSelfListener'
3683
3770
  }, _constants.EVENT_TRIGGERS.MEETING_SELF_GUEST_ADMITTED, {
@@ -3685,15 +3772,18 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3685
3772
  });
3686
3773
 
3687
3774
  // @ts-ignore
3688
- _this19.webex.internal.newMetrics.submitClientEvent({
3775
+ _this20.webex.internal.newMetrics.submitClientEvent({
3689
3776
  name: 'client.lobby.exited',
3690
3777
  options: {
3691
- meetingId: _this19.id
3778
+ meetingId: _this20.id
3692
3779
  }
3693
3780
  });
3781
+ _metrics.default.sendBehavioralMetric(_constants2.default.GUEST_EXITED_LOBBY, {
3782
+ correlation_id: _this20.correlationId
3783
+ });
3694
3784
  }
3695
- (_this19$rtcMetrics = _this19.rtcMetrics) === null || _this19$rtcMetrics === void 0 ? void 0 : _this19$rtcMetrics.sendNextMetrics();
3696
- _this19.updateLLMConnection();
3785
+ (_this20$rtcMetrics = _this20.rtcMetrics) === null || _this20$rtcMetrics === void 0 ? void 0 : _this20$rtcMetrics.sendNextMetrics();
3786
+ _this20.updateLLMConnection();
3697
3787
  case 4:
3698
3788
  case "end":
3699
3789
  return _context9.stop();
@@ -3701,42 +3791,42 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3701
3791
  }, _callee9);
3702
3792
  }));
3703
3793
  return function (_x9) {
3704
- return _ref25.apply(this, arguments);
3794
+ return _ref29.apply(this, arguments);
3705
3795
  };
3706
3796
  }());
3707
3797
 
3708
3798
  // @ts-ignore - check if MEDIA_INACTIVITY exists
3709
3799
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEDIA_INACTIVITY, function () {
3710
3800
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_MEDIA_INACTIVE, {
3711
- correlation_id: _this19.correlationId,
3712
- locus_id: _this19.locusId
3801
+ correlation_id: _this20.correlationId,
3802
+ locus_id: _this20.locusId
3713
3803
  });
3714
3804
  _loggerProxy.default.logger.info('Meeting:index#setUpLocusInfoSelfListener --> MEDIA_INACTIVITY received, reconnecting...');
3715
- _this19.reconnect();
3805
+ _this20.reconnect();
3716
3806
  });
3717
3807
 
3718
3808
  // There is two stats for mute one is the actual media being sent or received
3719
3809
  // The second on is if the audio is muted, we need to tell the statsAnalyzer when
3720
3810
  // the audio is muted or the user is not willing to send media
3721
3811
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEDIA_STATUS_CHANGE, function (status) {
3722
- if (_this19.statsAnalyzer) {
3723
- var _this19$mediaProperti, _this19$audio2, _this19$mediaProperti2, _this19$video, _this19$mediaProperti3, _this19$mediaProperti4, _this19$mediaProperti5, _this19$mediaProperti6;
3724
- _this19.statsAnalyzer.updateMediaStatus({
3812
+ if (_this20.statsAnalyzer) {
3813
+ var _this20$mediaProperti, _this20$audio2, _this20$mediaProperti2, _this20$video, _this20$mediaProperti3, _this20$mediaProperti4, _this20$mediaProperti5, _this20$mediaProperti6;
3814
+ _this20.statsAnalyzer.updateMediaStatus({
3725
3815
  actual: status,
3726
3816
  expected: {
3727
3817
  // We need to check what should be the actual direction of media
3728
- sendAudio: ((_this19$mediaProperti = _this19.mediaProperties.mediaDirection) === null || _this19$mediaProperti === void 0 ? void 0 : _this19$mediaProperti.sendAudio) && !((_this19$audio2 = _this19.audio) !== null && _this19$audio2 !== void 0 && _this19$audio2.isMuted()),
3729
- sendVideo: ((_this19$mediaProperti2 = _this19.mediaProperties.mediaDirection) === null || _this19$mediaProperti2 === void 0 ? void 0 : _this19$mediaProperti2.sendVideo) && !((_this19$video = _this19.video) !== null && _this19$video !== void 0 && _this19$video.isMuted()),
3730
- sendShare: (_this19$mediaProperti3 = _this19.mediaProperties.mediaDirection) === null || _this19$mediaProperti3 === void 0 ? void 0 : _this19$mediaProperti3.sendShare,
3731
- receiveAudio: (_this19$mediaProperti4 = _this19.mediaProperties.mediaDirection) === null || _this19$mediaProperti4 === void 0 ? void 0 : _this19$mediaProperti4.receiveAudio,
3732
- receiveVideo: (_this19$mediaProperti5 = _this19.mediaProperties.mediaDirection) === null || _this19$mediaProperti5 === void 0 ? void 0 : _this19$mediaProperti5.receiveVideo,
3733
- receiveShare: (_this19$mediaProperti6 = _this19.mediaProperties.mediaDirection) === null || _this19$mediaProperti6 === void 0 ? void 0 : _this19$mediaProperti6.receiveShare
3818
+ sendAudio: ((_this20$mediaProperti = _this20.mediaProperties.mediaDirection) === null || _this20$mediaProperti === void 0 ? void 0 : _this20$mediaProperti.sendAudio) && !((_this20$audio2 = _this20.audio) !== null && _this20$audio2 !== void 0 && _this20$audio2.isMuted()),
3819
+ sendVideo: ((_this20$mediaProperti2 = _this20.mediaProperties.mediaDirection) === null || _this20$mediaProperti2 === void 0 ? void 0 : _this20$mediaProperti2.sendVideo) && !((_this20$video = _this20.video) !== null && _this20$video !== void 0 && _this20$video.isMuted()),
3820
+ sendShare: (_this20$mediaProperti3 = _this20.mediaProperties.mediaDirection) === null || _this20$mediaProperti3 === void 0 ? void 0 : _this20$mediaProperti3.sendShare,
3821
+ receiveAudio: (_this20$mediaProperti4 = _this20.mediaProperties.mediaDirection) === null || _this20$mediaProperti4 === void 0 ? void 0 : _this20$mediaProperti4.receiveAudio,
3822
+ receiveVideo: (_this20$mediaProperti5 = _this20.mediaProperties.mediaDirection) === null || _this20$mediaProperti5 === void 0 ? void 0 : _this20$mediaProperti5.receiveVideo,
3823
+ receiveShare: (_this20$mediaProperti6 = _this20.mediaProperties.mediaDirection) === null || _this20$mediaProperti6 === void 0 ? void 0 : _this20$mediaProperti6.receiveShare
3734
3824
  }
3735
3825
  });
3736
3826
  }
3737
3827
  });
3738
3828
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE, function (payload) {
3739
- _triggerProxy.default.trigger(_this19, {
3829
+ _triggerProxy.default.trigger(_this20, {
3740
3830
  file: 'meeting/index',
3741
3831
  function: 'setUpLocusInfoSelfListener'
3742
3832
  }, _constants.EVENT_TRIGGERS.MEETING_SELF_CANNOT_VIEW_PARTICIPANT_LIST, {
@@ -3744,29 +3834,29 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3744
3834
  });
3745
3835
  });
3746
3836
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_MEETING_BREAKOUTS_CHANGED, function (payload) {
3747
- _this19.breakouts.updateBreakoutSessions(payload);
3748
- _triggerProxy.default.trigger(_this19, {
3837
+ _this20.breakouts.updateBreakoutSessions(payload);
3838
+ _triggerProxy.default.trigger(_this20, {
3749
3839
  file: 'meeting/index',
3750
3840
  function: 'setUpLocusInfoSelfListener'
3751
3841
  }, _constants.EVENT_TRIGGERS.MEETING_BREAKOUTS_UPDATE);
3752
3842
  });
3753
3843
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_MEETING_INTERPRETATION_CHANGED, function (payload) {
3754
- var targetChanged = _this19.simultaneousInterpretation.updateSelfInterpretation(payload);
3755
- _triggerProxy.default.trigger(_this19, {
3844
+ var targetChanged = _this20.simultaneousInterpretation.updateSelfInterpretation(payload);
3845
+ _triggerProxy.default.trigger(_this20, {
3756
3846
  file: 'meeting/index',
3757
3847
  function: 'setUpLocusInfoSelfListener'
3758
3848
  }, _constants.EVENT_TRIGGERS.MEETING_INTERPRETATION_UPDATE);
3759
- if (targetChanged && _this19.mediaProperties.audioStream) {
3760
- _this19.setSendNamedMediaGroup(_internalMediaCore.MediaType.AudioMain);
3849
+ if (targetChanged && _this20.mediaProperties.audioStream) {
3850
+ _this20.setSendNamedMediaGroup(_internalMediaCore.MediaType.AudioMain);
3761
3851
  }
3762
3852
  });
3763
3853
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_ROLES_CHANGED, function (payload) {
3764
- var _payload$newRoles, _payload$newRoles2, _payload$newRoles3, _payload$newRoles4;
3854
+ var _payload$newRoles, _payload$newRoles2, _payload$newRoles3;
3765
3855
  var isModeratorOrCohost = ((_payload$newRoles = payload.newRoles) === null || _payload$newRoles === void 0 ? void 0 : _payload$newRoles.includes(_constants.SELF_ROLES.MODERATOR)) || ((_payload$newRoles2 = payload.newRoles) === null || _payload$newRoles2 === void 0 ? void 0 : _payload$newRoles2.includes(_constants.SELF_ROLES.COHOST));
3766
- _this19.breakouts.updateCanManageBreakouts(isModeratorOrCohost);
3767
- _this19.simultaneousInterpretation.updateCanManageInterpreters((_payload$newRoles3 = payload.newRoles) === null || _payload$newRoles3 === void 0 ? void 0 : _payload$newRoles3.includes(_constants.SELF_ROLES.MODERATOR));
3768
- _this19.webinar.updateCanManageWebcast((_payload$newRoles4 = payload.newRoles) === null || _payload$newRoles4 === void 0 ? void 0 : _payload$newRoles4.includes(_constants.SELF_ROLES.MODERATOR));
3769
- _triggerProxy.default.trigger(_this19, {
3856
+ _this20.breakouts.updateCanManageBreakouts(isModeratorOrCohost);
3857
+ _this20.simultaneousInterpretation.updateCanManageInterpreters((_payload$newRoles3 = payload.newRoles) === null || _payload$newRoles3 === void 0 ? void 0 : _payload$newRoles3.includes(_constants.SELF_ROLES.MODERATOR));
3858
+ _this20.webinar.updateRoleChanged(payload);
3859
+ _triggerProxy.default.trigger(_this20, {
3770
3860
  file: 'meeting/index',
3771
3861
  function: 'setUpLocusInfoSelfListener'
3772
3862
  }, _constants.EVENT_TRIGGERS.MEETING_SELF_ROLES_CHANGED, {
@@ -3774,7 +3864,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3774
3864
  });
3775
3865
  });
3776
3866
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_IS_SHARING_BLOCKED_CHANGE, function (payload) {
3777
- _triggerProxy.default.trigger(_this19, {
3867
+ _triggerProxy.default.trigger(_this20, {
3778
3868
  file: 'meeting/index',
3779
3869
  function: 'setUpLocusInfoSelfListener'
3780
3870
  }, _constants.EVENT_TRIGGERS.MEETING_SELF_IS_SHARING_BLOCKED, {
@@ -3792,42 +3882,42 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3792
3882
  }, {
3793
3883
  key: "setUpLocusInfoMeetingListener",
3794
3884
  value: function setUpLocusInfoMeetingListener() {
3795
- var _this20 = this;
3885
+ var _this21 = this;
3796
3886
  this.locusInfo.on(_constants.EVENTS.REMOTE_RESPONSE, function (payload) {
3797
- _this20.meetingFiniteStateMachine.remote(payload);
3887
+ _this21.meetingFiniteStateMachine.remote(payload);
3798
3888
  if (payload.remoteDeclined) {
3799
- _this20.leave({
3889
+ _this21.leave({
3800
3890
  reason: payload.reason
3801
3891
  }).then(function () {
3802
3892
  _loggerProxy.default.logger.info('Meeting:index#setUpLocusInfoMeetingListener --> REMOTE_RESPONSE. Attempting to leave meeting.');
3803
3893
  }).catch(function (error) {
3804
3894
  // @ts-ignore
3805
- _loggerProxy.default.logger.error("Meeting:index#setUpLocusInfoMeetingListener --> REMOTE_RESPONSE. Issue with leave for meeting, meeting still in collection: ".concat(_this20, ", error: ").concat(error));
3895
+ _loggerProxy.default.logger.error("Meeting:index#setUpLocusInfoMeetingListener --> REMOTE_RESPONSE. Issue with leave for meeting, meeting still in collection: ".concat(_this21, ", error: ").concat(error));
3806
3896
  });
3807
3897
  }
3808
3898
  });
3809
3899
  this.locusInfo.on(_constants.EVENTS.DESTROY_MEETING, /*#__PURE__*/function () {
3810
- var _ref26 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(payload) {
3900
+ var _ref30 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(payload) {
3811
3901
  return _regenerator.default.wrap(function _callee10$(_context10) {
3812
3902
  while (1) switch (_context10.prev = _context10.next) {
3813
3903
  case 0:
3814
- if (!_this20.wirelessShare) {
3904
+ if (!_this21.wirelessShare) {
3815
3905
  _context10.next = 7;
3816
3906
  break;
3817
3907
  }
3818
- if (!_this20.mediaProperties.shareVideoStream) {
3908
+ if (!_this21.mediaProperties.shareVideoStream) {
3819
3909
  _context10.next = 4;
3820
3910
  break;
3821
3911
  }
3822
3912
  _context10.next = 4;
3823
- return _this20.setLocalShareVideoStream(undefined);
3913
+ return _this21.setLocalShareVideoStream(undefined);
3824
3914
  case 4:
3825
- if (!_this20.mediaProperties.shareAudioStream) {
3915
+ if (!_this21.mediaProperties.shareAudioStream) {
3826
3916
  _context10.next = 7;
3827
3917
  break;
3828
3918
  }
3829
3919
  _context10.next = 7;
3830
- return _this20.setLocalShareAudioStream(undefined);
3920
+ return _this21.setLocalShareAudioStream(undefined);
3831
3921
  case 7:
3832
3922
  if (!payload.shouldLeave) {
3833
3923
  _context10.next = 19;
@@ -3835,7 +3925,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3835
3925
  }
3836
3926
  _context10.prev = 8;
3837
3927
  _context10.next = 11;
3838
- return _this20.leave({
3928
+ return _this21.leave({
3839
3929
  reason: payload.reason
3840
3930
  });
3841
3931
  case 11:
@@ -3846,19 +3936,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3846
3936
  _context10.prev = 14;
3847
3937
  _context10.t0 = _context10["catch"](8);
3848
3938
  // @ts-ignore
3849
- _loggerProxy.default.logger.error("Meeting:index#setUpLocusInfoMeetingListener --> DESTROY_MEETING. Issue with leave for meeting, meeting still in collection: ".concat(_this20, ", error: ").concat(_context10.t0));
3939
+ _loggerProxy.default.logger.error("Meeting:index#setUpLocusInfoMeetingListener --> DESTROY_MEETING. Issue with leave for meeting, meeting still in collection: ".concat(_this21, ", error: ").concat(_context10.t0));
3850
3940
  case 17:
3851
3941
  _context10.next = 22;
3852
3942
  break;
3853
3943
  case 19:
3854
3944
  _loggerProxy.default.logger.info('Meeting:index#setUpLocusInfoMeetingListener --> MEETING_REMOVED_REASON', payload.reason);
3855
- _util2.default.cleanUp(_this20);
3856
- _triggerProxy.default.trigger(_this20, {
3945
+ _util2.default.cleanUp(_this21);
3946
+ _triggerProxy.default.trigger(_this21, {
3857
3947
  file: 'meeting/index',
3858
3948
  function: 'setUpLocusInfoMeetingListener'
3859
3949
  }, _constants.EVENTS.DESTROY_MEETING, {
3860
3950
  reason: payload.reason,
3861
- meetingId: _this20.id
3951
+ meetingId: _this21.id
3862
3952
  });
3863
3953
  case 22:
3864
3954
  case "end":
@@ -3867,7 +3957,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3867
3957
  }, _callee10, null, [[8, 14]]);
3868
3958
  }));
3869
3959
  return function (_x10) {
3870
- return _ref26.apply(this, arguments);
3960
+ return _ref30.apply(this, arguments);
3871
3961
  };
3872
3962
  }());
3873
3963
  }
@@ -3883,13 +3973,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3883
3973
  }, {
3884
3974
  key: "updateMeetingObject",
3885
3975
  value: function updateMeetingObject(object) {
3886
- var _this21 = this;
3976
+ var _this22 = this;
3887
3977
  // Validate if these are valid meeting object property
3888
3978
  // TODO: add a check to make sure the value passed in the constructor
3889
3979
  // is not changed by any delta event
3890
3980
  if (object && (0, _keys.default)(object).length) {
3891
3981
  (0, _keys.default)(object).forEach(function (key) {
3892
- _this21[key] = object[key];
3982
+ _this22[key] = object[key];
3893
3983
  });
3894
3984
  }
3895
3985
  }
@@ -4142,6 +4232,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4142
4232
  canStopRecording: _util4.default.canUserStop(this.userDisplayHints, this.selfUserPolicies),
4143
4233
  canPauseRecording: _util4.default.canUserPause(this.userDisplayHints, this.selfUserPolicies),
4144
4234
  canResumeRecording: _util4.default.canUserResume(this.userDisplayHints, this.selfUserPolicies),
4235
+ isPremiseRecordingEnabled: _util4.default.isPremiseRecordingEnabled(this.userDisplayHints, this.selfUserPolicies),
4145
4236
  canRaiseHand: _util2.default.canUserRaiseHand(this.userDisplayHints),
4146
4237
  canLowerAllHands: _util2.default.canUserLowerAllHands(this.userDisplayHints),
4147
4238
  canLowerSomeoneElsesHand: _util2.default.canUserLowerSomeoneElsesHand(this.userDisplayHints),
@@ -4219,6 +4310,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4219
4310
  requiredHints: [_constants.DISPLAY_HINTS.DISABLE_VIEW_THE_PARTICIPANT_LIST],
4220
4311
  displayHints: this.userDisplayHints
4221
4312
  }),
4313
+ canEnableViewTheParticipantsListPanelist: _util5.default.hasHints({
4314
+ requiredHints: [_constants.DISPLAY_HINTS.ENABLE_VIEW_THE_PARTICIPANT_LIST_PANELIST],
4315
+ displayHints: this.userDisplayHints
4316
+ }),
4317
+ canDisableViewTheParticipantsListPanelist: _util5.default.hasHints({
4318
+ requiredHints: [_constants.DISPLAY_HINTS.DISABLE_VIEW_THE_PARTICIPANT_LIST_PANELIST],
4319
+ displayHints: this.userDisplayHints
4320
+ }),
4321
+ canEnableShowAttendeeCount: _util5.default.hasHints({
4322
+ requiredHints: [_constants.DISPLAY_HINTS.ENABLE_SHOW_ATTENDEE_COUNT],
4323
+ displayHints: this.userDisplayHints
4324
+ }),
4325
+ canDisableShowAttendeeCount: _util5.default.hasHints({
4326
+ requiredHints: [_constants.DISPLAY_HINTS.DISABLE_SHOW_ATTENDEE_COUNT],
4327
+ displayHints: this.userDisplayHints
4328
+ }),
4222
4329
  canEnableRaiseHand: _util5.default.hasHints({
4223
4330
  requiredHints: [_constants.DISPLAY_HINTS.ENABLE_RAISE_HAND],
4224
4331
  displayHints: this.userDisplayHints
@@ -4235,6 +4342,42 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4235
4342
  requiredHints: [_constants.DISPLAY_HINTS.DISABLE_VIDEO],
4236
4343
  displayHints: this.userDisplayHints
4237
4344
  }),
4345
+ canStartWebcast: _util5.default.hasHints({
4346
+ requiredHints: [_constants.DISPLAY_HINTS.WEBCAST_CONTROL_START],
4347
+ displayHints: this.userDisplayHints
4348
+ }),
4349
+ canStopWebcast: _util5.default.hasHints({
4350
+ requiredHints: [_constants.DISPLAY_HINTS.WEBCAST_CONTROL_STOP],
4351
+ displayHints: this.userDisplayHints
4352
+ }),
4353
+ canShowStageView: _util5.default.hasHints({
4354
+ requiredHints: [_constants.DISPLAY_HINTS.STAGE_VIEW_ACTIVE],
4355
+ displayHints: this.userDisplayHints
4356
+ }),
4357
+ canEnableStageView: _util5.default.hasHints({
4358
+ requiredHints: [_constants.DISPLAY_HINTS.ENABLE_STAGE_VIEW],
4359
+ displayHints: this.userDisplayHints
4360
+ }),
4361
+ canDisableStageView: _util5.default.hasHints({
4362
+ requiredHints: [_constants.DISPLAY_HINTS.DISABLE_STAGE_VIEW],
4363
+ displayHints: this.userDisplayHints
4364
+ }),
4365
+ isPracticeSessionOn: _util5.default.hasHints({
4366
+ requiredHints: [_constants.DISPLAY_HINTS.PRACTICE_SESSION_ON],
4367
+ displayHints: this.userDisplayHints
4368
+ }),
4369
+ isPracticeSessionOff: _util5.default.hasHints({
4370
+ requiredHints: [_constants.DISPLAY_HINTS.PRACTICE_SESSION_OFF],
4371
+ displayHints: this.userDisplayHints
4372
+ }),
4373
+ canStartPracticeSession: _util5.default.hasHints({
4374
+ requiredHints: [_constants.DISPLAY_HINTS.SHOW_PRACTICE_SESSION_START],
4375
+ displayHints: this.userDisplayHints
4376
+ }),
4377
+ canStopPracticeSession: _util5.default.hasHints({
4378
+ requiredHints: [_constants.DISPLAY_HINTS.SHOW_PRACTICE_SESSION_STOP],
4379
+ displayHints: this.userDisplayHints
4380
+ }),
4238
4381
  canShareFile: _util5.default.hasHints({
4239
4382
  requiredHints: [_constants.DISPLAY_HINTS.SHARE_FILE],
4240
4383
  displayHints: this.userDisplayHints
@@ -4379,6 +4522,65 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4379
4522
  _triggerProxy.default.trigger(this, options, _constants.EVENTS.REQUEST_UPLOAD_LOGS, this);
4380
4523
  }
4381
4524
 
4525
+ /**
4526
+ * sets the timer for periodic log upload
4527
+ * @returns {void}
4528
+ */
4529
+ }, {
4530
+ key: "setLogUploadTimer",
4531
+ value: function setLogUploadTimer() {
4532
+ var _this23 = this;
4533
+ // start with short timeouts and increase them later on so in case users have very long multi-hour meetings we don't get too fragmented logs
4534
+ var LOG_UPLOAD_INTERVALS = [0.1, 15, 30, 60]; // in minutes
4535
+
4536
+ var delay = 1000 * 60 *
4537
+ // @ts-ignore - config coming from registerPlugin
4538
+ this.config.logUploadIntervalMultiplicationFactor * LOG_UPLOAD_INTERVALS[this.logUploadIntervalIndex];
4539
+ if (this.logUploadIntervalIndex < LOG_UPLOAD_INTERVALS.length - 1) {
4540
+ this.logUploadIntervalIndex += 1;
4541
+ }
4542
+ this.uploadLogsTimer = (0, _commonTimers.safeSetTimeout)(function () {
4543
+ _this23.uploadLogsTimer = undefined;
4544
+ _this23.uploadLogs();
4545
+
4546
+ // just as an extra precaution, to avoid uploading logs forever in case something goes wrong
4547
+ // and the page remains opened, we stop it if there is no media connection
4548
+ if (!_this23.mediaProperties.webrtcMediaConnection) {
4549
+ return;
4550
+ }
4551
+ _this23.setLogUploadTimer();
4552
+ }, delay);
4553
+ }
4554
+
4555
+ /**
4556
+ * Starts a periodic upload of logs
4557
+ *
4558
+ * @returns {undefined}
4559
+ */
4560
+ }, {
4561
+ key: "startPeriodicLogUpload",
4562
+ value: function startPeriodicLogUpload() {
4563
+ // @ts-ignore - config coming from registerPlugin
4564
+ if (this.config.logUploadIntervalMultiplicationFactor && !this.uploadLogsTimer) {
4565
+ this.logUploadIntervalIndex = 0;
4566
+ this.setLogUploadTimer();
4567
+ }
4568
+ }
4569
+
4570
+ /**
4571
+ * Stops the periodic upload of logs
4572
+ *
4573
+ * @returns {undefined}
4574
+ */
4575
+ }, {
4576
+ key: "stopPeriodicLogUpload",
4577
+ value: function stopPeriodicLogUpload() {
4578
+ if (this.uploadLogsTimer) {
4579
+ clearTimeout(this.uploadLogsTimer);
4580
+ this.uploadLogsTimer = undefined;
4581
+ }
4582
+ }
4583
+
4382
4584
  /**
4383
4585
  * Removes remote audio, video and share streams from class instance's mediaProperties
4384
4586
  * @returns {undefined}
@@ -4413,7 +4615,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4413
4615
  }, {
4414
4616
  key: "closeRemoteStreams",
4415
4617
  value: function closeRemoteStreams() {
4416
- var _this22 = this;
4618
+ var _this24 = this;
4417
4619
  var _this$mediaProperties4 = this.mediaProperties,
4418
4620
  remoteAudioStream = _this$mediaProperties4.remoteAudioStream,
4419
4621
  remoteVideoStream = _this$mediaProperties4.remoteVideoStream,
@@ -4427,7 +4629,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4427
4629
  */
4428
4630
  // eslint-disable-next-line @typescript-eslint/no-shadow
4429
4631
  var triggerMediaStoppedEvent = function triggerMediaStoppedEvent(mediaType) {
4430
- _triggerProxy.default.trigger(_this22, {
4632
+ _triggerProxy.default.trigger(_this24, {
4431
4633
  file: 'meeting/index',
4432
4634
  function: 'closeRemoteStreams'
4433
4635
  }, _constants.EVENT_TRIGGERS.MEDIA_STOPPED, {
@@ -4735,7 +4937,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4735
4937
  }, {
4736
4938
  key: "setMercuryListener",
4737
4939
  value: function setMercuryListener() {
4738
- var _this23 = this;
4940
+ var _this25 = this;
4739
4941
  // Client will have a socket manager and handle reconnecting to mercury, when we reconnect to mercury
4740
4942
  // if the meeting has active peer connections, it should try to reconnect.
4741
4943
  // @ts-ignore
@@ -4743,33 +4945,33 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4743
4945
  _loggerProxy.default.logger.info('Meeting:index#setMercuryListener --> Web socket online');
4744
4946
 
4745
4947
  // Only send restore event when it was disconnected before and for connected later
4746
- if (!_this23.hasWebsocketConnected) {
4948
+ if (!_this25.hasWebsocketConnected) {
4747
4949
  // @ts-ignore
4748
- _this23.webex.internal.newMetrics.submitClientEvent({
4950
+ _this25.webex.internal.newMetrics.submitClientEvent({
4749
4951
  name: 'client.mercury.connection.restored',
4750
4952
  options: {
4751
- meetingId: _this23.id
4953
+ meetingId: _this25.id
4752
4954
  }
4753
4955
  });
4754
4956
  _metrics.default.sendBehavioralMetric(_constants2.default.MERCURY_CONNECTION_RESTORED, {
4755
- correlation_id: _this23.correlationId
4957
+ correlation_id: _this25.correlationId
4756
4958
  });
4757
4959
  }
4758
- _this23.hasWebsocketConnected = true;
4960
+ _this25.hasWebsocketConnected = true;
4759
4961
  });
4760
4962
 
4761
4963
  // @ts-ignore
4762
4964
  this.webex.internal.mercury.on(_constants.OFFLINE, function () {
4763
4965
  _loggerProxy.default.logger.error('Meeting:index#setMercuryListener --> Web socket offline');
4764
4966
  // @ts-ignore
4765
- _this23.webex.internal.newMetrics.submitClientEvent({
4967
+ _this25.webex.internal.newMetrics.submitClientEvent({
4766
4968
  name: 'client.mercury.connection.lost',
4767
4969
  options: {
4768
- meetingId: _this23.id
4970
+ meetingId: _this25.id
4769
4971
  }
4770
4972
  });
4771
4973
  _metrics.default.sendBehavioralMetric(_constants2.default.MERCURY_CONNECTION_FAILURE, {
4772
- correlation_id: _this23.correlationId
4974
+ correlation_id: _this25.correlationId
4773
4975
  });
4774
4976
  });
4775
4977
  }
@@ -4871,7 +5073,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4871
5073
  }, {
4872
5074
  key: "muteAudio",
4873
5075
  value: function muteAudio() {
4874
- var _this24 = this;
5076
+ var _this26 = this;
4875
5077
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
4876
5078
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
4877
5079
  }
@@ -4887,22 +5089,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4887
5089
 
4888
5090
  // First, stop sending the local audio media
4889
5091
  return logRequest(this.audio.handleClientRequest(this, true).then(function () {
4890
- _util2.default.handleAudioLogging(_this24.mediaProperties.audioStream);
5092
+ _util2.default.handleAudioLogging(_this26.mediaProperties.audioStream);
4891
5093
  // @ts-ignore
4892
- _this24.webex.internal.newMetrics.submitClientEvent({
5094
+ _this26.webex.internal.newMetrics.submitClientEvent({
4893
5095
  name: 'client.muted',
4894
5096
  payload: {
4895
5097
  trigger: 'user-interaction',
4896
5098
  mediaType: 'audio'
4897
5099
  },
4898
5100
  options: {
4899
- meetingId: _this24.id
5101
+ meetingId: _this26.id
4900
5102
  }
4901
5103
  });
4902
5104
  }).catch(function (error) {
4903
5105
  _metrics.default.sendBehavioralMetric(_constants2.default.MUTE_AUDIO_FAILURE, {
4904
- correlation_id: _this24.correlationId,
4905
- locus_id: _this24.locusUrl.split('/').pop(),
5106
+ correlation_id: _this26.correlationId,
5107
+ locus_id: _this26.locusUrl.split('/').pop(),
4906
5108
  reason: error.message,
4907
5109
  stack: error.stack
4908
5110
  });
@@ -4921,7 +5123,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4921
5123
  }, {
4922
5124
  key: "unmuteAudio",
4923
5125
  value: function unmuteAudio() {
4924
- var _this25 = this;
5126
+ var _this27 = this;
4925
5127
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
4926
5128
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
4927
5129
  }
@@ -4937,22 +5139,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4937
5139
 
4938
5140
  // First, send the control to unmute the participant on the server
4939
5141
  return logRequest(this.audio.handleClientRequest(this, false).then(function () {
4940
- _util2.default.handleAudioLogging(_this25.mediaProperties.audioStream);
5142
+ _util2.default.handleAudioLogging(_this27.mediaProperties.audioStream);
4941
5143
  // @ts-ignore
4942
- _this25.webex.internal.newMetrics.submitClientEvent({
5144
+ _this27.webex.internal.newMetrics.submitClientEvent({
4943
5145
  name: 'client.unmuted',
4944
5146
  payload: {
4945
5147
  trigger: 'user-interaction',
4946
5148
  mediaType: 'audio'
4947
5149
  },
4948
5150
  options: {
4949
- meetingId: _this25.id
5151
+ meetingId: _this27.id
4950
5152
  }
4951
5153
  });
4952
5154
  }).catch(function (error) {
4953
5155
  _metrics.default.sendBehavioralMetric(_constants2.default.UNMUTE_AUDIO_FAILURE, {
4954
- correlation_id: _this25.correlationId,
4955
- locus_id: _this25.locusUrl.split('/').pop(),
5156
+ correlation_id: _this27.correlationId,
5157
+ locus_id: _this27.locusUrl.split('/').pop(),
4956
5158
  reason: error.message,
4957
5159
  stack: error.stack
4958
5160
  });
@@ -4971,7 +5173,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4971
5173
  }, {
4972
5174
  key: "muteVideo",
4973
5175
  value: function muteVideo() {
4974
- var _this26 = this;
5176
+ var _this28 = this;
4975
5177
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
4976
5178
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
4977
5179
  }
@@ -4985,22 +5187,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4985
5187
  return _promise.default.reject(new _parameter.default('no video control associated to the meeting'));
4986
5188
  }
4987
5189
  return logRequest(this.video.handleClientRequest(this, true).then(function () {
4988
- _util2.default.handleVideoLogging(_this26.mediaProperties.videoStream);
5190
+ _util2.default.handleVideoLogging(_this28.mediaProperties.videoStream);
4989
5191
  // @ts-ignore
4990
- _this26.webex.internal.newMetrics.submitClientEvent({
5192
+ _this28.webex.internal.newMetrics.submitClientEvent({
4991
5193
  name: 'client.muted',
4992
5194
  payload: {
4993
5195
  trigger: 'user-interaction',
4994
5196
  mediaType: 'video'
4995
5197
  },
4996
5198
  options: {
4997
- meetingId: _this26.id
5199
+ meetingId: _this28.id
4998
5200
  }
4999
5201
  });
5000
5202
  }).catch(function (error) {
5001
5203
  _metrics.default.sendBehavioralMetric(_constants2.default.MUTE_VIDEO_FAILURE, {
5002
- correlation_id: _this26.correlationId,
5003
- locus_id: _this26.locusUrl.split('/').pop(),
5204
+ correlation_id: _this28.correlationId,
5205
+ locus_id: _this28.locusUrl.split('/').pop(),
5004
5206
  reason: error.message,
5005
5207
  stack: error.stack
5006
5208
  });
@@ -5019,7 +5221,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5019
5221
  }, {
5020
5222
  key: "unmuteVideo",
5021
5223
  value: function unmuteVideo() {
5022
- var _this27 = this;
5224
+ var _this29 = this;
5023
5225
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5024
5226
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5025
5227
  }
@@ -5033,22 +5235,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5033
5235
  return _promise.default.reject(new _parameter.default('no audio control associated to the meeting'));
5034
5236
  }
5035
5237
  return logRequest(this.video.handleClientRequest(this, false).then(function () {
5036
- _util2.default.handleVideoLogging(_this27.mediaProperties.videoStream);
5238
+ _util2.default.handleVideoLogging(_this29.mediaProperties.videoStream);
5037
5239
  // @ts-ignore
5038
- _this27.webex.internal.newMetrics.submitClientEvent({
5240
+ _this29.webex.internal.newMetrics.submitClientEvent({
5039
5241
  name: 'client.unmuted',
5040
5242
  payload: {
5041
5243
  trigger: 'user-interaction',
5042
5244
  mediaType: 'video'
5043
5245
  },
5044
5246
  options: {
5045
- meetingId: _this27.id
5247
+ meetingId: _this29.id
5046
5248
  }
5047
5249
  });
5048
5250
  }).catch(function (error) {
5049
5251
  _metrics.default.sendBehavioralMetric(_constants2.default.UNMUTE_VIDEO_FAILURE, {
5050
- correlation_id: _this27.correlationId,
5051
- locus_id: _this27.locusUrl.split('/').pop(),
5252
+ correlation_id: _this29.correlationId,
5253
+ locus_id: _this29.locusUrl.split('/').pop(),
5052
5254
  reason: error.message,
5053
5255
  stack: error.stack
5054
5256
  });
@@ -5078,7 +5280,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5078
5280
  key: "joinWithMedia",
5079
5281
  value: (function () {
5080
5282
  var _joinWithMedia = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee15() {
5081
- var _this28 = this;
5283
+ var _this30 = this;
5082
5284
  var options,
5083
5285
  mediaOptions,
5084
5286
  _options$joinOptions,
@@ -5118,34 +5320,30 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5118
5320
  _context15.prev = 9;
5119
5321
  forceTurnDiscovery = false;
5120
5322
  if (joinResponse) {
5121
- _context15.next = 36;
5323
+ _context15.next = 33;
5122
5324
  break;
5123
5325
  }
5124
5326
  _context15.next = 14;
5125
- return this.webex.meetings.reachability.getReachabilityResults();
5126
- case 14:
5127
- joinOptions.reachability = _context15.sent;
5128
- _context15.next = 17;
5129
5327
  return this.roap.generateTurnDiscoveryRequestMessage(this, true);
5130
- case 17:
5328
+ case 14:
5131
5329
  turnDiscoveryRequest = _context15.sent;
5132
5330
  turnDiscoverySkippedReason = turnDiscoveryRequest.turnDiscoverySkippedReason;
5133
5331
  joinOptions.roapMessage = turnDiscoveryRequest.roapMessage;
5134
5332
  _loggerProxy.default.logger.info('Meeting:index#joinWithMedia ---> calling join with joinOptions, ', joinOptions);
5135
- _context15.next = 23;
5333
+ _context15.next = 20;
5136
5334
  return this.join(joinOptions);
5137
- case 23:
5335
+ case 20:
5138
5336
  joinResponse = _context15.sent;
5139
5337
  joined = true;
5140
5338
 
5141
5339
  // if we sent out TURN discovery Roap message with join, process the TURN discovery response
5142
5340
  if (!joinOptions.roapMessage) {
5143
- _context15.next = 34;
5341
+ _context15.next = 31;
5144
5342
  break;
5145
5343
  }
5146
- _context15.next = 28;
5344
+ _context15.next = 25;
5147
5345
  return this.roap.handleTurnDiscoveryHttpResponse(this, joinResponse);
5148
- case 28:
5346
+ case 25:
5149
5347
  _yield$this$roap$hand = _context15.sent;
5150
5348
  turnServerInfo = _yield$this$roap$hand.turnServerInfo;
5151
5349
  turnDiscoverySkippedReason = _yield$this$roap$hand.turnDiscoverySkippedReason;
@@ -5154,20 +5352,20 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5154
5352
  if (turnServerInfo === undefined) {
5155
5353
  this.roap.abortTurnDiscovery();
5156
5354
  }
5157
- case 34:
5158
- _context15.next = 38;
5355
+ case 31:
5356
+ _context15.next = 35;
5159
5357
  break;
5160
- case 36:
5358
+ case 33:
5161
5359
  // This is a retry, when join succeeded but addMedia failed, so we'll just call addMedia() again,
5162
5360
  // but we need to ensure that it also does a new TURN discovery
5163
5361
  forceTurnDiscovery = true;
5164
5362
  joined = true;
5165
- case 38:
5166
- _context15.next = 40;
5363
+ case 35:
5364
+ _context15.next = 37;
5167
5365
  return this.addMediaInternal(function () {
5168
- return _this28.joinWithMediaRetryInfo.isRetry ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
5366
+ return _this30.joinWithMediaRetryInfo.isRetry ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
5169
5367
  }, turnServerInfo, forceTurnDiscovery, mediaOptions);
5170
- case 40:
5368
+ case 37:
5171
5369
  mediaResponse = _context15.sent;
5172
5370
  this.joinWithMediaRetryInfo = {
5173
5371
  isRetry: false,
@@ -5177,30 +5375,30 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5177
5375
  join: joinResponse,
5178
5376
  media: mediaResponse
5179
5377
  });
5180
- case 45:
5181
- _context15.prev = 45;
5378
+ case 42:
5379
+ _context15.prev = 42;
5182
5380
  _context15.t0 = _context15["catch"](9);
5183
5381
  _loggerProxy.default.logger.error('Meeting:index#joinWithMedia --> ', _context15.t0);
5184
5382
  this.roap.abortTurnDiscovery();
5185
5383
  if (!(joined && isRetry)) {
5186
- _context15.next = 59;
5384
+ _context15.next = 56;
5187
5385
  break;
5188
5386
  }
5189
- _context15.prev = 50;
5190
- _context15.next = 53;
5387
+ _context15.prev = 47;
5388
+ _context15.next = 50;
5191
5389
  return this.leave({
5192
5390
  resourceId: joinOptions === null || joinOptions === void 0 ? void 0 : joinOptions.resourceId,
5193
5391
  reason: 'joinWithMedia failure'
5194
5392
  });
5195
- case 53:
5196
- _context15.next = 59;
5393
+ case 50:
5394
+ _context15.next = 56;
5197
5395
  break;
5198
- case 55:
5199
- _context15.prev = 55;
5200
- _context15.t1 = _context15["catch"](50);
5396
+ case 52:
5397
+ _context15.prev = 52;
5398
+ _context15.t1 = _context15["catch"](47);
5201
5399
  _loggerProxy.default.logger.error('Meeting:index#joinWithMedia --> leave error', _context15.t1);
5202
5400
  leaveError = _context15.t1;
5203
- case 59:
5401
+ case 56:
5204
5402
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_WITH_MEDIA_FAILURE, {
5205
5403
  correlation_id: this.correlationId,
5206
5404
  locus_id: (_this$locusUrl = this.locusUrl) === null || _this$locusUrl === void 0 ? void 0 : _this$locusUrl.split('/').pop(),
@@ -5221,24 +5419,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5221
5419
  shouldRetry = false;
5222
5420
  }
5223
5421
  if (!shouldRetry) {
5224
- _context15.next = 67;
5422
+ _context15.next = 64;
5225
5423
  break;
5226
5424
  }
5227
5425
  _loggerProxy.default.logger.warn('Meeting:index#joinWithMedia --> retrying call to joinWithMedia');
5228
5426
  this.joinWithMediaRetryInfo.isRetry = true;
5229
5427
  this.joinWithMediaRetryInfo.prevJoinResponse = joinResponse;
5230
5428
  return _context15.abrupt("return", this.joinWithMedia(options));
5231
- case 67:
5429
+ case 64:
5232
5430
  this.joinWithMediaRetryInfo = {
5233
5431
  isRetry: false,
5234
5432
  prevJoinResponse: undefined
5235
5433
  };
5236
5434
  throw _context15.t0;
5237
- case 69:
5435
+ case 66:
5238
5436
  case "end":
5239
5437
  return _context15.stop();
5240
5438
  }
5241
- }, _callee15, this, [[9, 45], [50, 55]]);
5439
+ }, _callee15, this, [[9, 42], [47, 52]]);
5242
5440
  }));
5243
5441
  function joinWithMedia() {
5244
5442
  return _joinWithMedia.apply(this, arguments);
@@ -5257,7 +5455,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5257
5455
  }, {
5258
5456
  key: "reconnect",
5259
5457
  value: function reconnect(options) {
5260
- var _this29 = this;
5458
+ var _this31 = this;
5261
5459
  _loggerProxy.default.logger.log("Meeting:index#reconnect --> attempting to reconnect meeting ".concat(this.id));
5262
5460
  if (!this.reconnectionManager || !this.reconnectionManager.reconnect) {
5263
5461
  return _promise.default.reject(new _parameter.default('Cannot reconnect, ReconnectionManager must first be defined.'));
@@ -5267,15 +5465,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5267
5465
  if (!_util2.default.isMediaEstablished(this.currentMediaStatus)) {
5268
5466
  return _promise.default.reject(new _parameter.default('Cannot reconnect, Media has not established to reconnect'));
5269
5467
  }
5468
+ this.cleanUpBeforeReconnection();
5270
5469
  return this.reconnectionManager.reconnect(options, /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee16() {
5271
5470
  return _regenerator.default.wrap(function _callee16$(_context16) {
5272
5471
  while (1) switch (_context16.prev = _context16.next) {
5273
5472
  case 0:
5274
5473
  _context16.next = 2;
5275
- return _this29.waitForRemoteSDPAnswer();
5474
+ return _this31.waitForRemoteSDPAnswer();
5276
5475
  case 2:
5277
5476
  _context16.next = 4;
5278
- return _this29.waitForMediaConnectionConnected();
5477
+ return _this31.waitForMediaConnectionConnected();
5279
5478
  case 4:
5280
5479
  case "end":
5281
5480
  return _context16.stop();
@@ -5289,7 +5488,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5289
5488
  return _promise.default.resolve();
5290
5489
  }
5291
5490
  _loggerProxy.default.logger.error('Meeting:index#reconnect --> Meeting reconnect failed', error);
5292
- _this29.uploadLogs({
5491
+ _this31.uploadLogs({
5293
5492
  file: 'meeting/index',
5294
5493
  function: 'reconnect'
5295
5494
  });
@@ -5336,19 +5535,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5336
5535
  }, {
5337
5536
  key: "setCaptionLanguage",
5338
5537
  value: function setCaptionLanguage(language) {
5339
- var _this30 = this;
5538
+ var _this32 = this;
5340
5539
  return new _promise.default(function (resolve, reject) {
5341
- if (!_this30.isTranscriptionSupported()) {
5540
+ if (!_this32.isTranscriptionSupported()) {
5342
5541
  _loggerProxy.default.logger.error('Meeting:index#setCaptionLanguage --> Webex Assistant is not enabled/supported');
5343
5542
  reject(new Error('Webex Assistant is not enabled/supported'));
5344
5543
  }
5345
5544
  try {
5346
5545
  var voiceaListenerCaptionUpdate = function voiceaListenerCaptionUpdate(payload) {
5347
5546
  // @ts-ignore
5348
- _this30.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5547
+ _this32.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5349
5548
  var statusCode = payload.statusCode;
5350
5549
  if (statusCode === 200) {
5351
- _this30.transcription.languageOptions = _objectSpread(_objectSpread({}, _this30.transcription.languageOptions), {}, {
5550
+ _this32.transcription.languageOptions = _objectSpread(_objectSpread({}, _this32.transcription.languageOptions), {}, {
5352
5551
  currentCaptionLanguage: language
5353
5552
  });
5354
5553
  resolve(language);
@@ -5357,9 +5556,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5357
5556
  }
5358
5557
  };
5359
5558
  // @ts-ignore
5360
- _this30.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5559
+ _this32.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5361
5560
  // @ts-ignore
5362
- _this30.webex.internal.voicea.requestLanguage(language);
5561
+ _this32.webex.internal.voicea.requestLanguage(language);
5363
5562
  } catch (error) {
5364
5563
  _loggerProxy.default.logger.error("Meeting:index#setCaptionLanguage --> ".concat(error));
5365
5564
  reject(error);
@@ -5375,23 +5574,23 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5375
5574
  }, {
5376
5575
  key: "setSpokenLanguage",
5377
5576
  value: function setSpokenLanguage(language) {
5378
- var _this31 = this;
5577
+ var _this33 = this;
5379
5578
  return new _promise.default(function (resolve, reject) {
5380
- if (!_this31.isTranscriptionSupported()) {
5579
+ if (!_this33.isTranscriptionSupported()) {
5381
5580
  _loggerProxy.default.logger.error('Meeting:index#setCaptionLanguage --> Webex Assistant is not enabled/supported');
5382
5581
  reject(new Error('Webex Assistant is not enabled/supported'));
5383
5582
  }
5384
- if (_this31.getCurUserType() !== 'host') {
5583
+ if (_this33.getCurUserType() !== 'host') {
5385
5584
  _loggerProxy.default.logger.error('Meeting:index#setSpokenLanguage --> Only host can set spoken language');
5386
5585
  reject(new Error('Only host can set spoken language'));
5387
5586
  }
5388
5587
  try {
5389
5588
  var voiceaListenerLanguageUpdate = function voiceaListenerLanguageUpdate(payload) {
5390
5589
  // @ts-ignore
5391
- _this31.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5590
+ _this33.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5392
5591
  var languageCode = payload.languageCode;
5393
5592
  if (languageCode) {
5394
- _this31.transcription.languageOptions = _objectSpread(_objectSpread({}, _this31.transcription.languageOptions), {}, {
5593
+ _this33.transcription.languageOptions = _objectSpread(_objectSpread({}, _this33.transcription.languageOptions), {}, {
5395
5594
  currentSpokenLanguage: languageCode
5396
5595
  });
5397
5596
  resolve(languageCode);
@@ -5401,10 +5600,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5401
5600
  };
5402
5601
 
5403
5602
  // @ts-ignore
5404
- _this31.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5603
+ _this33.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5405
5604
 
5406
5605
  // @ts-ignore
5407
- _this31.webex.internal.voicea.setSpokenLanguage(language);
5606
+ _this33.webex.internal.voicea.setSpokenLanguage(language);
5408
5607
  } catch (error) {
5409
5608
  _loggerProxy.default.logger.error("Meeting:index#setSpokenLanguage --> ".concat(error));
5410
5609
  reject(error);
@@ -5524,7 +5723,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5524
5723
  */
5525
5724
  function () {
5526
5725
  var _join = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee18() {
5527
- var _this32 = this;
5726
+ var _this34 = this;
5528
5727
  var options,
5529
5728
  errorMessage,
5530
5729
  error,
@@ -5576,18 +5775,21 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5576
5775
  this.meetingFiniteStateMachine.reset();
5577
5776
  }
5578
5777
 
5579
- // @ts-ignore
5580
- this.webex.internal.newMetrics.submitClientEvent({
5581
- name: 'client.call.initiated',
5582
- payload: {
5583
- trigger: this.callStateForMetrics.joinTrigger || 'user-interaction',
5584
- isRoapCallEnabled: true,
5585
- pstnAudioType: options === null || options === void 0 ? void 0 : options.pstnAudioType
5586
- },
5587
- options: {
5588
- meetingId: this.id
5589
- }
5590
- });
5778
+ // send client.call.initiated unless told not to
5779
+ if (options.sendCallInitiated !== false) {
5780
+ // @ts-ignore
5781
+ this.webex.internal.newMetrics.submitClientEvent({
5782
+ name: 'client.call.initiated',
5783
+ payload: {
5784
+ trigger: this.callStateForMetrics.joinTrigger || 'user-interaction',
5785
+ isRoapCallEnabled: true,
5786
+ pstnAudioType: options === null || options === void 0 ? void 0 : options.pstnAudioType
5787
+ },
5788
+ options: {
5789
+ meetingId: this.id
5790
+ }
5791
+ });
5792
+ }
5591
5793
  _loggerProxy.default.logger.log('Meeting:index#join --> Joining a meeting');
5592
5794
  if (this.meetingFiniteStateMachine.state === _constants.MEETING_STATE_MACHINE.STATES.ENDED) {
5593
5795
  this.meetingFiniteStateMachine.reset();
@@ -5670,62 +5872,62 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5670
5872
  return _context18.abrupt("return", _promise.default.reject(_context18.t0));
5671
5873
  case 51:
5672
5874
  return _context18.abrupt("return", _util2.default.joinMeetingOptions(this, options).then(function (join) {
5673
- _this32.meetingFiniteStateMachine.join();
5674
- _this32.setupLocusMediaRequest();
5875
+ _this34.meetingFiniteStateMachine.join();
5876
+ _this34.setupLocusMediaRequest();
5675
5877
 
5676
5878
  // @ts-ignore
5677
- _this32.webex.internal.device.meetingStarted();
5678
- (0, _classPrivateFieldSet2.default)(_this32, _isoLocalClientMeetingJoinTime, new Date().toISOString());
5879
+ _this34.webex.internal.device.meetingStarted();
5880
+ (0, _classPrivateFieldSet2.default)(_this34, _isoLocalClientMeetingJoinTime, new Date().toISOString());
5679
5881
  _loggerProxy.default.logger.log('Meeting:index#join --> Success');
5680
5882
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_SUCCESS, {
5681
- correlation_id: _this32.correlationId
5883
+ correlation_id: _this34.correlationId
5682
5884
  });
5683
5885
  joinSuccess(join);
5684
- _this32.deferJoin = undefined;
5886
+ _this34.deferJoin = undefined;
5685
5887
  return join;
5686
5888
  }).catch(function (error) {
5687
- var _this32$meetingInfo, _error$error;
5688
- _this32.meetingFiniteStateMachine.fail(error);
5889
+ var _this34$meetingInfo, _error$error;
5890
+ _this34.meetingFiniteStateMachine.fail(error);
5689
5891
  _loggerProxy.default.logger.error('Meeting:index#join --> Failed', error);
5690
5892
 
5691
5893
  // @ts-ignore
5692
- _this32.webex.internal.newMetrics.submitClientEvent({
5894
+ _this34.webex.internal.newMetrics.submitClientEvent({
5693
5895
  name: 'client.locus.join.response',
5694
5896
  payload: {
5695
5897
  identifiers: {
5696
- meetingLookupUrl: (_this32$meetingInfo = _this32.meetingInfo) === null || _this32$meetingInfo === void 0 ? void 0 : _this32$meetingInfo.meetingLookupUrl
5898
+ meetingLookupUrl: (_this34$meetingInfo = _this34.meetingInfo) === null || _this34$meetingInfo === void 0 ? void 0 : _this34$meetingInfo.meetingLookupUrl
5697
5899
  }
5698
5900
  },
5699
5901
  options: {
5700
- meetingId: _this32.id,
5902
+ meetingId: _this34.id,
5701
5903
  rawError: error
5702
5904
  }
5703
5905
  });
5704
5906
 
5705
5907
  // TODO: change this to error codes and pre defined dictionary
5706
5908
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_FAILURE, {
5707
- correlation_id: _this32.correlationId,
5909
+ correlation_id: _this34.correlationId,
5708
5910
  reason: (_error$error = error.error) === null || _error$error === void 0 ? void 0 : _error$error.message,
5709
5911
  stack: error.stack
5710
5912
  });
5711
5913
 
5712
5914
  // Upload logs on join Failure
5713
- _triggerProxy.default.trigger(_this32, {
5915
+ _triggerProxy.default.trigger(_this34, {
5714
5916
  file: 'meeting/index',
5715
5917
  function: 'join'
5716
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this32);
5918
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this34);
5717
5919
  joinFailed(error);
5718
- _this32.deferJoin = undefined;
5920
+ _this34.deferJoin = undefined;
5719
5921
  return _promise.default.reject(error);
5720
5922
  }).then(function (join) {
5721
5923
  // @ts-ignore - config coming from registerPlugin
5722
- if (_this32.config.enableAutomaticLLM) {
5924
+ if (_this34.config.enableAutomaticLLM) {
5723
5925
  // @ts-ignore
5724
- _this32.webex.internal.llm.on('online', _this32.handleLLMOnline);
5725
- _this32.updateLLMConnection().catch(function (error) {
5926
+ _this34.webex.internal.llm.on('online', _this34.handleLLMOnline);
5927
+ _this34.updateLLMConnection().catch(function (error) {
5726
5928
  _loggerProxy.default.logger.error('Meeting:index#join --> Transcription Socket Connection Failed', error);
5727
5929
  _metrics.default.sendBehavioralMetric(_constants2.default.LLM_CONNECTION_AFTER_JOIN_FAILURE, {
5728
- correlation_id: _this32.correlationId,
5930
+ correlation_id: _this34.correlationId,
5729
5931
  reason: error === null || error === void 0 ? void 0 : error.message,
5730
5932
  stack: error.stack
5731
5933
  });
@@ -5757,7 +5959,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5757
5959
  key: "updateLLMConnection",
5758
5960
  value: (function () {
5759
5961
  var _updateLLMConnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee19() {
5760
- var _this33 = this;
5962
+ var _this35 = this;
5761
5963
  var _this$locusInfo6, url, _this$locusInfo6$info, _this$locusInfo6$info2, datachannelUrl, isJoined;
5762
5964
  return _regenerator.default.wrap(function _callee19$(_context19) {
5763
5965
  while (1) switch (_context19.prev = _context19.next) {
@@ -5793,9 +5995,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5793
5995
  case 10:
5794
5996
  return _context19.abrupt("return", this.webex.internal.llm.registerAndConnect(url, datachannelUrl).then(function (registerAndConnectResult) {
5795
5997
  // @ts-ignore - Fix type
5796
- _this33.webex.internal.llm.off('event:relay.event', _this33.processRelayEvent);
5998
+ _this35.webex.internal.llm.off('event:relay.event', _this35.processRelayEvent);
5797
5999
  // @ts-ignore - Fix type
5798
- _this33.webex.internal.llm.on('event:relay.event', _this33.processRelayEvent);
6000
+ _this35.webex.internal.llm.on('event:relay.event', _this35.processRelayEvent);
5799
6001
  _loggerProxy.default.logger.info('Meeting:index#updateLLMConnection --> enabled to receive relay events!');
5800
6002
  return _promise.default.resolve(registerAndConnectResult);
5801
6003
  }));
@@ -5849,7 +6051,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5849
6051
  }, {
5850
6052
  key: "dialInPstn",
5851
6053
  value: function dialInPstn() {
5852
- var _this34 = this;
6054
+ var _this36 = this;
5853
6055
  if (this.isPhoneProvisioned(this.dialInDeviceStatus)) return _promise.default.resolve(); // prevent multiple dial in devices from being provisioned
5854
6056
 
5855
6057
  var correlationId = this.correlationId,
@@ -5865,10 +6067,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5865
6067
  }).catch(function (error) {
5866
6068
  var _error$error2;
5867
6069
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_DIAL_IN_FAILURE, {
5868
- correlation_id: _this34.correlationId,
5869
- dial_in_url: _this34.dialInUrl,
6070
+ correlation_id: _this36.correlationId,
6071
+ dial_in_url: _this36.dialInUrl,
5870
6072
  locus_id: locusUrl.split('/').pop(),
5871
- client_url: _this34.deviceUrl,
6073
+ client_url: _this36.deviceUrl,
5872
6074
  reason: (_error$error2 = error.error) === null || _error$error2 === void 0 ? void 0 : _error$error2.message,
5873
6075
  stack: error.stack
5874
6076
  });
@@ -5886,7 +6088,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5886
6088
  }, {
5887
6089
  key: "dialOutPstn",
5888
6090
  value: function dialOutPstn(phoneNumber) {
5889
- var _this35 = this;
6091
+ var _this37 = this;
5890
6092
  if (this.isPhoneProvisioned(this.dialOutDeviceStatus)) return _promise.default.resolve(); // prevent multiple dial out devices from being provisioned
5891
6093
 
5892
6094
  var correlationId = this.correlationId,
@@ -5903,10 +6105,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5903
6105
  }).catch(function (error) {
5904
6106
  var _error$error3;
5905
6107
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_DIAL_OUT_FAILURE, {
5906
- correlation_id: _this35.correlationId,
5907
- dial_out_url: _this35.dialOutUrl,
6108
+ correlation_id: _this37.correlationId,
6109
+ dial_out_url: _this37.dialOutUrl,
5908
6110
  locus_id: locusUrl.split('/').pop(),
5909
- client_url: _this35.deviceUrl,
6111
+ client_url: _this37.deviceUrl,
5910
6112
  reason: (_error$error3 = error.error) === null || _error$error3 === void 0 ? void 0 : _error$error3.message,
5911
6113
  stack: error.stack
5912
6114
  });
@@ -5937,7 +6139,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5937
6139
  }, {
5938
6140
  key: "moveTo",
5939
6141
  value: function moveTo(resourceId) {
5940
- var _this36 = this;
6142
+ var _this38 = this;
5941
6143
  if (!resourceId) {
5942
6144
  throw new _parameter.default('Cannot move call without a resourceId.');
5943
6145
  }
@@ -5981,12 +6183,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5981
6183
  while (1) switch (_context20.prev = _context20.next) {
5982
6184
  case 0:
5983
6185
  _context20.prev = 0;
5984
- if (!(_this36.screenShareFloorState === ScreenShareFloorStatus.GRANTED)) {
6186
+ if (!(_this38.screenShareFloorState === ScreenShareFloorStatus.GRANTED)) {
5985
6187
  _context20.next = 4;
5986
6188
  break;
5987
6189
  }
5988
6190
  _context20.next = 4;
5989
- return _this36.releaseScreenShareFloor();
6191
+ return _this38.releaseScreenShareFloor();
5990
6192
  case 4:
5991
6193
  mediaSettings = {
5992
6194
  mediaDirection: {
@@ -5998,37 +6200,37 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5998
6200
  receiveShare: true
5999
6201
  }
6000
6202
  };
6001
- _this36.mediaProperties.setMediaDirection(mediaSettings.mediaDirection);
6002
- _this36.mediaProperties.unsetRemoteMedia();
6203
+ _this38.mediaProperties.setMediaDirection(mediaSettings.mediaDirection);
6204
+ _this38.mediaProperties.unsetRemoteMedia();
6003
6205
 
6004
6206
  // when a move to is intiated by the client , Locus delets the existing media node from the server as soon the device answers the meeting
6005
6207
  // once the device answers we close the old connection and create new media server connection with only share enabled
6006
- if (!_this36.statsAnalyzer) {
6208
+ if (!_this38.statsAnalyzer) {
6007
6209
  _context20.next = 10;
6008
6210
  break;
6009
6211
  }
6010
6212
  _context20.next = 10;
6011
- return _this36.statsAnalyzer.stopAnalyzer();
6213
+ return _this38.statsAnalyzer.stopAnalyzer();
6012
6214
  case 10:
6013
6215
  _context20.next = 12;
6014
- return _this36.closeRemoteStreams();
6216
+ return _this38.closeRemoteStreams();
6015
6217
  case 12:
6016
6218
  _context20.next = 14;
6017
- return _this36.closePeerConnections();
6219
+ return _this38.closePeerConnections();
6018
6220
  case 14:
6019
- _this36.cleanupLocalStreams();
6020
- _this36.unsetRemoteStreams();
6021
- _this36.unsetPeerConnections();
6022
- _this36.reconnectionManager.cleanUp();
6221
+ _this38.cleanupLocalStreams();
6222
+ _this38.unsetRemoteStreams();
6223
+ _this38.unsetPeerConnections();
6224
+ _this38.reconnectionManager.cleanUp();
6023
6225
  _context20.next = 20;
6024
- return _this36.addMedia({
6226
+ return _this38.addMedia({
6025
6227
  audioEnabled: false,
6026
6228
  videoEnabled: false,
6027
6229
  shareVideoEnabled: true
6028
6230
  });
6029
6231
  case 20:
6030
6232
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_SUCCESS);
6031
- _this36.isMoveToInProgress = false;
6233
+ _this38.isMoveToInProgress = false;
6032
6234
  _context20.next = 29;
6033
6235
  break;
6034
6236
  case 24:
@@ -6036,12 +6238,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6036
6238
  _context20.t0 = _context20["catch"](0);
6037
6239
  _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', _context20.t0);
6038
6240
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
6039
- correlation_id: _this36.correlationId,
6040
- locus_id: _this36.locusUrl.split('/').pop(),
6241
+ correlation_id: _this38.correlationId,
6242
+ locus_id: _this38.locusUrl.split('/').pop(),
6041
6243
  reason: _context20.t0.message,
6042
6244
  stack: _context20.t0.stack
6043
6245
  });
6044
- _this36.isMoveToInProgress = false;
6246
+ _this38.isMoveToInProgress = false;
6045
6247
  case 29:
6046
6248
  case "end":
6047
6249
  return _context20.stop();
@@ -6057,17 +6259,17 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6057
6259
  resourceId: resourceId,
6058
6260
  moveToResource: true
6059
6261
  }).then(function () {
6060
- _this36.meetingFiniteStateMachine.join();
6262
+ _this38.meetingFiniteStateMachine.join();
6061
6263
  }).catch(function (error) {
6062
- _this36.meetingFiniteStateMachine.fail(error);
6264
+ _this38.meetingFiniteStateMachine.fail(error);
6063
6265
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
6064
- correlation_id: _this36.correlationId,
6065
- locus_id: _this36.locusUrl.split('/').pop(),
6266
+ correlation_id: _this38.correlationId,
6267
+ locus_id: _this38.locusUrl.split('/').pop(),
6066
6268
  reason: error.message,
6067
6269
  stack: error.stack
6068
6270
  });
6069
6271
  _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', error);
6070
- _this36.isMoveToInProgress = false;
6272
+ _this38.isMoveToInProgress = false;
6071
6273
  return _promise.default.reject(error);
6072
6274
  });
6073
6275
  }
@@ -6082,7 +6284,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6082
6284
  }, {
6083
6285
  key: "moveFrom",
6084
6286
  value: function moveFrom(resourceId) {
6085
- var _this37 = this;
6287
+ var _this39 = this;
6086
6288
  // On moveFrom ask the developer to re capture it moveFrom then updateMedia
6087
6289
  if (!resourceId) {
6088
6290
  throw new _parameter.default('Cannot move call without a resourceId.');
@@ -6097,19 +6299,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6097
6299
  }
6098
6300
  });
6099
6301
  return _util2.default.joinMeetingOptions(this).then(function () {
6100
- return _util2.default.leaveMeeting(_this37, {
6302
+ return _util2.default.leaveMeeting(_this39, {
6101
6303
  resourceId: resourceId,
6102
6304
  correlationId: oldCorrelationId,
6103
6305
  moveMeeting: true
6104
6306
  }).then(function () {
6105
- _this37.resourceId = '';
6307
+ _this39.resourceId = '';
6106
6308
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_FROM_SUCCESS);
6107
6309
  });
6108
6310
  }).catch(function (error) {
6109
- _this37.meetingFiniteStateMachine.fail(error);
6311
+ _this39.meetingFiniteStateMachine.fail(error);
6110
6312
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_FROM_FAILURE, {
6111
- correlation_id: _this37.correlationId,
6112
- locus_id: _this37.locusUrl.split('/').pop(),
6313
+ correlation_id: _this39.correlationId,
6314
+ locus_id: _this39.locusUrl.split('/').pop(),
6113
6315
  reason: error.message,
6114
6316
  stack: error.stack
6115
6317
  });
@@ -6222,9 +6424,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6222
6424
  }, {
6223
6425
  key: "forwardEvent",
6224
6426
  value: function forwardEvent(eventEmitter, eventTypeToForward, meetingEventType) {
6225
- var _this38 = this;
6427
+ var _this40 = this;
6226
6428
  eventEmitter.on(eventTypeToForward, function (data) {
6227
- return _triggerProxy.default.trigger(_this38, {
6429
+ return _triggerProxy.default.trigger(_this40, {
6228
6430
  file: 'meetings',
6229
6431
  function: 'addMedia'
6230
6432
  }, meetingEventType, data);
@@ -6411,7 +6613,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6411
6613
  */
6412
6614
  function () {
6413
6615
  var _waitForRemoteSDPAnswer = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee24() {
6414
- var _this39 = this;
6616
+ var _this41 = this;
6415
6617
  var LOG_HEADER, deferSDPAnswer;
6416
6618
  return _regenerator.default.wrap(function _callee24$(_context24) {
6417
6619
  while (1) switch (_context24.prev = _context24.next) {
@@ -6428,18 +6630,18 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6428
6630
  this.sdpResponseTimer = setTimeout(function () {
6429
6631
  _loggerProxy.default.logger.warn("".concat(LOG_HEADER, " timeout! no REMOTE SDP ANSWER received within ").concat(_constants.ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT / 1000, " seconds"));
6430
6632
  // @ts-ignore
6431
- _this39.webex.internal.newMetrics.submitClientEvent({
6633
+ _this41.webex.internal.newMetrics.submitClientEvent({
6432
6634
  name: 'client.media-engine.remote-sdp-received',
6433
6635
  payload: {
6434
6636
  canProceed: false,
6435
6637
  errors: [
6436
6638
  // @ts-ignore
6437
- _this39.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({
6639
+ _this41.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({
6438
6640
  clientErrorCode: _internalPluginMetrics.CALL_DIAGNOSTIC_CONFIG.MISSING_ROAP_ANSWER_CLIENT_CODE
6439
6641
  })]
6440
6642
  },
6441
6643
  options: {
6442
- meetingId: _this39.id,
6644
+ meetingId: _this41.id,
6443
6645
  rawError: new Error('Timeout waiting for SDP answer')
6444
6646
  }
6445
6647
  });
@@ -6825,6 +7027,43 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6825
7027
  return _cleanUpBeforeRetryWithTurnServer.apply(this, arguments);
6826
7028
  }
6827
7029
  return cleanUpBeforeRetryWithTurnServer;
7030
+ }())
7031
+ }, {
7032
+ key: "cleanUpBeforeReconnection",
7033
+ value: function () {
7034
+ var _cleanUpBeforeReconnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee32() {
7035
+ return _regenerator.default.wrap(function _callee32$(_context32) {
7036
+ while (1) switch (_context32.prev = _context32.next) {
7037
+ case 0:
7038
+ _context32.prev = 0;
7039
+ _context32.next = 3;
7040
+ return this.forceSendStatsReport({
7041
+ callFrom: 'cleanUpBeforeReconnection'
7042
+ });
7043
+ case 3:
7044
+ if (!this.statsAnalyzer) {
7045
+ _context32.next = 6;
7046
+ break;
7047
+ }
7048
+ _context32.next = 6;
7049
+ return this.statsAnalyzer.stopAnalyzer();
7050
+ case 6:
7051
+ _context32.next = 11;
7052
+ break;
7053
+ case 8:
7054
+ _context32.prev = 8;
7055
+ _context32.t0 = _context32["catch"](0);
7056
+ _loggerProxy.default.logger.error('Meeting:index#cleanUpBeforeReconnection --> Error during cleanup: ', _context32.t0);
7057
+ case 11:
7058
+ case "end":
7059
+ return _context32.stop();
7060
+ }
7061
+ }, _callee32, this, [[0, 8]]);
7062
+ }));
7063
+ function cleanUpBeforeReconnection() {
7064
+ return _cleanUpBeforeReconnection.apply(this, arguments);
7065
+ }
7066
+ return cleanUpBeforeReconnection;
6828
7067
  }()
6829
7068
  /**
6830
7069
  * Creates an instance of LocusMediaRequest for this meeting - it is needed for doing any calls
@@ -6832,7 +7071,6 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6832
7071
  *
6833
7072
  * @returns {void}
6834
7073
  */
6835
- )
6836
7074
  }, {
6837
7075
  key: "setupLocusMediaRequest",
6838
7076
  value: function setupLocusMediaRequest() {
@@ -6867,10 +7105,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6867
7105
  }, {
6868
7106
  key: "addMedia",
6869
7107
  value: function addMedia() {
6870
- var _this40 = this;
7108
+ var _this42 = this;
6871
7109
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
6872
7110
  return this.addMediaInternal(function () {
6873
- return _this40.turnServerUsed ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
7111
+ return _this42.turnServerUsed ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
6874
7112
  }, undefined, false, options);
6875
7113
  }
6876
7114
 
@@ -6888,7 +7126,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6888
7126
  }, {
6889
7127
  key: "addMediaInternal",
6890
7128
  value: (function () {
6891
- var _addMediaInternal = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee32(icePhaseCallback, turnServerInfo, forceTurnDiscovery) {
7129
+ var _addMediaInternal = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee33(icePhaseCallback, turnServerInfo, forceTurnDiscovery) {
6892
7130
  var options,
6893
7131
  LOG_HEADER,
6894
7132
  localStreams,
@@ -6901,6 +7139,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6901
7139
  _options$shareVideoEn,
6902
7140
  shareVideoEnabled,
6903
7141
  remoteMediaManagerConfig,
7142
+ _options$bundlePolicy,
6904
7143
  bundlePolicy,
6905
7144
  _this$remoteMediaMana,
6906
7145
  _yield$this$mediaProp,
@@ -6935,35 +7174,35 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6935
7174
  _selectedCandidatePairChanges,
6936
7175
  _numTransports,
6937
7176
  _iceCandidateErrors,
6938
- _args32 = arguments;
6939
- return _regenerator.default.wrap(function _callee32$(_context32) {
6940
- while (1) switch (_context32.prev = _context32.next) {
7177
+ _args33 = arguments;
7178
+ return _regenerator.default.wrap(function _callee33$(_context33) {
7179
+ while (1) switch (_context33.prev = _context33.next) {
6941
7180
  case 0:
6942
- options = _args32.length > 3 && _args32[3] !== undefined ? _args32[3] : {};
7181
+ options = _args33.length > 3 && _args33[3] !== undefined ? _args33[3] : {};
6943
7182
  this.addMediaData.retriedWithTurnServer = false;
6944
7183
  this.addMediaData.icePhaseCallback = icePhaseCallback;
6945
7184
  this.hasMediaConnectionConnectedAtLeastOnce = false;
6946
7185
  LOG_HEADER = 'Meeting:index#addMedia -->';
6947
7186
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " called with: options=").concat((0, _stringify.default)(options), ", turnServerInfo=").concat((0, _stringify.default)(turnServerInfo), ", forceTurnDiscovery=").concat(forceTurnDiscovery));
6948
7187
  if (!(options.allowMediaInLobby !== true && this.meetingState !== _constants.FULL_STATE.ACTIVE)) {
6949
- _context32.next = 8;
7188
+ _context33.next = 8;
6950
7189
  break;
6951
7190
  }
6952
7191
  throw new _webexErrors.MeetingNotActiveError();
6953
7192
  case 8:
6954
7193
  if (!_util2.default.isUserInLeftState(this.locusInfo)) {
6955
- _context32.next = 10;
7194
+ _context33.next = 10;
6956
7195
  break;
6957
7196
  }
6958
7197
  throw new _webexErrors.UserNotJoinedError();
6959
7198
  case 10:
6960
- localStreams = options.localStreams, _options$audioEnabled = options.audioEnabled, audioEnabled = _options$audioEnabled === void 0 ? true : _options$audioEnabled, _options$videoEnabled = options.videoEnabled, videoEnabled = _options$videoEnabled === void 0 ? true : _options$videoEnabled, _options$shareAudioEn = options.shareAudioEnabled, shareAudioEnabled = _options$shareAudioEn === void 0 ? true : _options$shareAudioEn, _options$shareVideoEn = options.shareVideoEnabled, shareVideoEnabled = _options$shareVideoEn === void 0 ? true : _options$shareVideoEn, remoteMediaManagerConfig = options.remoteMediaManagerConfig, bundlePolicy = options.bundlePolicy;
7199
+ localStreams = options.localStreams, _options$audioEnabled = options.audioEnabled, audioEnabled = _options$audioEnabled === void 0 ? true : _options$audioEnabled, _options$videoEnabled = options.videoEnabled, videoEnabled = _options$videoEnabled === void 0 ? true : _options$videoEnabled, _options$shareAudioEn = options.shareAudioEnabled, shareAudioEnabled = _options$shareAudioEn === void 0 ? true : _options$shareAudioEn, _options$shareVideoEn = options.shareVideoEnabled, shareVideoEnabled = _options$shareVideoEn === void 0 ? true : _options$shareVideoEn, remoteMediaManagerConfig = options.remoteMediaManagerConfig, _options$bundlePolicy = options.bundlePolicy, bundlePolicy = _options$bundlePolicy === void 0 ? 'max-bundle' : _options$bundlePolicy;
6961
7200
  this.allowMediaInLobby = options === null || options === void 0 ? void 0 : options.allowMediaInLobby;
6962
7201
 
6963
7202
  // If the user is unjoined or guest waiting in lobby dont allow the user to addMedia
6964
7203
  // @ts-ignore - isUserUnadmitted coming from SelfUtil
6965
7204
  if (!(this.isUserUnadmitted && !this.wirelessShare && !this.allowMediaInLobby)) {
6966
- _context32.next = 14;
7205
+ _context33.next = 14;
6967
7206
  break;
6968
7207
  }
6969
7208
  throw new _webexErrors.UserInLobbyError();
@@ -7006,45 +7245,45 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7006
7245
  });
7007
7246
  this.audio = (0, _muteState.createMuteState)(_constants.AUDIO, this, audioEnabled);
7008
7247
  this.video = (0, _muteState.createMuteState)(_constants.VIDEO, this, videoEnabled);
7009
- _context32.prev = 18;
7010
- _context32.next = 21;
7248
+ _context33.prev = 18;
7249
+ _context33.next = 21;
7011
7250
  return this.setUpLocalStreamReferences(localStreams);
7012
7251
  case 21:
7013
7252
  this.setMercuryListener();
7014
7253
  this.createStatsAnalyzer();
7015
- _context32.next = 25;
7254
+ _context33.next = 25;
7016
7255
  return this.establishMediaConnection(remoteMediaManagerConfig, bundlePolicy, forceTurnDiscovery, turnServerInfo);
7017
7256
  case 25:
7018
7257
  if (!(audioEnabled || videoEnabled)) {
7019
- _context32.next = 30;
7258
+ _context33.next = 30;
7020
7259
  break;
7021
7260
  }
7022
- _context32.next = 28;
7261
+ _context33.next = 28;
7023
7262
  return Meeting.handleDeviceLogging(audioEnabled, videoEnabled);
7024
7263
  case 28:
7025
- _context32.next = 31;
7264
+ _context33.next = 31;
7026
7265
  break;
7027
7266
  case 30:
7028
7267
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " device logging not required"));
7029
7268
  case 31:
7030
7269
  if (!this.mediaProperties.hasLocalShareStream()) {
7031
- _context32.next = 34;
7270
+ _context33.next = 34;
7032
7271
  break;
7033
7272
  }
7034
- _context32.next = 34;
7273
+ _context33.next = 34;
7035
7274
  return this.enqueueScreenShareFloorRequest();
7036
7275
  case 34:
7037
- _context32.next = 36;
7276
+ _context33.next = 36;
7038
7277
  return this.mediaProperties.getCurrentConnectionInfo();
7039
7278
  case 36:
7040
- _yield$this$mediaProp = _context32.sent;
7279
+ _yield$this$mediaProp = _context33.sent;
7041
7280
  connectionType = _yield$this$mediaProp.connectionType;
7042
7281
  selectedCandidatePairChanges = _yield$this$mediaProp.selectedCandidatePairChanges;
7043
7282
  numTransports = _yield$this$mediaProp.numTransports;
7044
- _context32.next = 42;
7283
+ _context33.next = 42;
7045
7284
  return this.webex.meetings.reachability.getReachabilityMetrics();
7046
7285
  case 42:
7047
- reachabilityStats = _context32.sent;
7286
+ reachabilityStats = _context33.sent;
7048
7287
  iceCandidateErrors = Object.fromEntries(this.iceCandidateErrors);
7049
7288
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_SUCCESS, _objectSpread(_objectSpread(_objectSpread({
7050
7289
  correlation_id: this.correlationId,
@@ -7069,31 +7308,32 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7069
7308
 
7070
7309
  // We can log ReceiveSlot SSRCs only after the SDP exchange, so doing it here:
7071
7310
  (_this$remoteMediaMana = this.remoteMediaManager) === null || _this$remoteMediaMana === void 0 ? void 0 : _this$remoteMediaMana.logAllReceiveSlots();
7072
- _context32.next = 68;
7311
+ this.startPeriodicLogUpload();
7312
+ _context33.next = 69;
7073
7313
  break;
7074
- case 50:
7075
- _context32.prev = 50;
7076
- _context32.t0 = _context32["catch"](18);
7077
- _loggerProxy.default.logger.error("".concat(LOG_HEADER, " failed to establish media connection: "), _context32.t0);
7314
+ case 51:
7315
+ _context33.prev = 51;
7316
+ _context33.t0 = _context33["catch"](18);
7317
+ _loggerProxy.default.logger.error("".concat(LOG_HEADER, " failed to establish media connection: "), _context33.t0);
7078
7318
 
7079
7319
  // @ts-ignore
7080
- _context32.next = 55;
7320
+ _context33.next = 56;
7081
7321
  return this.webex.meetings.reachability.getReachabilityMetrics();
7082
- case 55:
7083
- reachabilityMetrics = _context32.sent;
7084
- _context32.next = 58;
7322
+ case 56:
7323
+ reachabilityMetrics = _context33.sent;
7324
+ _context33.next = 59;
7085
7325
  return this.mediaProperties.getCurrentConnectionInfo();
7086
- case 58:
7087
- _yield$this$mediaProp2 = _context32.sent;
7326
+ case 59:
7327
+ _yield$this$mediaProp2 = _context33.sent;
7088
7328
  _selectedCandidatePairChanges = _yield$this$mediaProp2.selectedCandidatePairChanges;
7089
7329
  _numTransports = _yield$this$mediaProp2.numTransports;
7090
7330
  _iceCandidateErrors = Object.fromEntries(this.iceCandidateErrors);
7091
7331
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_FAILURE, _objectSpread(_objectSpread(_objectSpread({
7092
7332
  correlation_id: this.correlationId,
7093
7333
  locus_id: this.locusUrl.split('/').pop(),
7094
- reason: _context32.t0.message,
7095
- stack: _context32.t0.stack,
7096
- code: _context32.t0.code,
7334
+ reason: _context33.t0.message,
7335
+ stack: _context33.t0.stack,
7336
+ code: _context33.t0.code,
7097
7337
  selectedCandidatePairChanges: _selectedCandidatePairChanges,
7098
7338
  numTransports: _numTransports,
7099
7339
  turnDiscoverySkippedReason: this.turnDiscoverySkippedReason,
@@ -7107,29 +7347,29 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7107
7347
  }, reachabilityMetrics), _iceCandidateErrors), {}, {
7108
7348
  iceCandidatesCount: this.iceCandidatesCount
7109
7349
  }));
7110
- _context32.next = 65;
7350
+ _context33.next = 66;
7111
7351
  return this.cleanUpOnAddMediaFailure();
7112
- case 65:
7352
+ case 66:
7113
7353
  // Upload logs on error while adding media
7114
7354
  _triggerProxy.default.trigger(this, {
7115
7355
  file: 'meeting/index',
7116
7356
  function: 'addMedia'
7117
7357
  }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, this);
7118
- if (_context32.t0 instanceof _internalMediaCore.Errors.SdpError) {
7358
+ if (_context33.t0 instanceof _internalMediaCore.Errors.SdpError) {
7119
7359
  this.leave({
7120
7360
  reason: _constants.MEETING_REMOVED_REASON.MEETING_CONNECTION_FAILED
7121
7361
  });
7122
7362
  }
7123
- throw _context32.t0;
7124
- case 68:
7125
- _context32.prev = 68;
7363
+ throw _context33.t0;
7364
+ case 69:
7365
+ _context33.prev = 69;
7126
7366
  this.addMediaData.icePhaseCallback = DEFAULT_ICE_PHASE_CALLBACK;
7127
- return _context32.finish(68);
7128
- case 71:
7367
+ return _context33.finish(69);
7368
+ case 72:
7129
7369
  case "end":
7130
- return _context32.stop();
7370
+ return _context33.stop();
7131
7371
  }
7132
- }, _callee32, this, [[18, 50, 68, 71]]);
7372
+ }, _callee33, this, [[18, 51, 69, 72]]);
7133
7373
  }));
7134
7374
  function addMediaInternal(_x32, _x33, _x34) {
7135
7375
  return _addMediaInternal.apply(this, arguments);
@@ -7161,7 +7401,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7161
7401
  * @memberof Meeting
7162
7402
  */
7163
7403
  function enqueueMediaUpdate(mediaUpdateType) {
7164
- var _this41 = this;
7404
+ var _this43 = this;
7165
7405
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
7166
7406
  var canUpdateMediaNow = this.canUpdateMedia();
7167
7407
  return new _promise.default(function (resolve, reject) {
@@ -7172,9 +7412,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7172
7412
  options: options
7173
7413
  };
7174
7414
  _loggerProxy.default.logger.log("Meeting:index#enqueueMediaUpdate --> enqueuing media update type=".concat(mediaUpdateType));
7175
- _this41.queuedMediaUpdates.push(queueItem);
7415
+ _this43.queuedMediaUpdates.push(queueItem);
7176
7416
  if (canUpdateMediaNow) {
7177
- _this41.processNextQueuedMediaUpdate();
7417
+ _this43.processNextQueuedMediaUpdate();
7178
7418
  }
7179
7419
  });
7180
7420
  }
@@ -7197,35 +7437,35 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7197
7437
  * @memberof Meeting
7198
7438
  */
7199
7439
  function () {
7200
- var _updateMedia = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee33(options) {
7440
+ var _updateMedia = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee34(options) {
7201
7441
  var audioEnabled, videoEnabled, shareAudioEnabled, shareVideoEnabled, _this$audio3, _this$video3;
7202
- return _regenerator.default.wrap(function _callee33$(_context33) {
7203
- while (1) switch (_context33.prev = _context33.next) {
7442
+ return _regenerator.default.wrap(function _callee34$(_context34) {
7443
+ while (1) switch (_context34.prev = _context34.next) {
7204
7444
  case 0:
7205
7445
  this.checkMediaConnection();
7206
7446
  audioEnabled = options.audioEnabled, videoEnabled = options.videoEnabled, shareAudioEnabled = options.shareAudioEnabled, shareVideoEnabled = options.shareVideoEnabled;
7207
7447
  _loggerProxy.default.logger.log("Meeting:index#updateMedia --> called with options=".concat((0, _stringify.default)(options)));
7208
7448
  if (this.canUpdateMedia()) {
7209
- _context33.next = 5;
7449
+ _context34.next = 5;
7210
7450
  break;
7211
7451
  }
7212
- return _context33.abrupt("return", this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.UPDATE_MEDIA, options));
7452
+ return _context34.abrupt("return", this.enqueueMediaUpdate(MEDIA_UPDATE_TYPE.UPDATE_MEDIA, options));
7213
7453
  case 5:
7214
7454
  if (!this.isMultistream) {
7215
- _context33.next = 10;
7455
+ _context34.next = 10;
7216
7456
  break;
7217
7457
  }
7218
7458
  if (!(shareAudioEnabled !== undefined || shareVideoEnabled !== undefined)) {
7219
- _context33.next = 8;
7459
+ _context34.next = 8;
7220
7460
  break;
7221
7461
  }
7222
7462
  throw new Error('toggling shareAudioEnabled or shareVideoEnabled in a multistream meeting is not supported, to control receiving screen share call meeting.remoteMediaManager.setLayout() with appropriate layout');
7223
7463
  case 8:
7224
- _context33.next = 12;
7464
+ _context34.next = 12;
7225
7465
  break;
7226
7466
  case 10:
7227
7467
  if (!(shareAudioEnabled !== undefined)) {
7228
- _context33.next = 12;
7468
+ _context34.next = 12;
7229
7469
  break;
7230
7470
  }
7231
7471
  throw new Error('toggling shareAudioEnabled in a transcoded meeting is not supported as of now');
@@ -7250,18 +7490,18 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7250
7490
  this.mediaProperties.mediaDirection.receiveShare = !!(shareAudioEnabled || shareVideoEnabled);
7251
7491
  }
7252
7492
  if (this.isMultistream) {
7253
- _context33.next = 18;
7493
+ _context34.next = 18;
7254
7494
  break;
7255
7495
  }
7256
- _context33.next = 18;
7496
+ _context34.next = 18;
7257
7497
  return this.updateTranscodedMediaConnection();
7258
7498
  case 18:
7259
- return _context33.abrupt("return", undefined);
7499
+ return _context34.abrupt("return", undefined);
7260
7500
  case 19:
7261
7501
  case "end":
7262
- return _context33.stop();
7502
+ return _context34.stop();
7263
7503
  }
7264
- }, _callee33, this);
7504
+ }, _callee34, this);
7265
7505
  }));
7266
7506
  function updateMedia(_x35) {
7267
7507
  return _updateMedia.apply(this, arguments);
@@ -7279,7 +7519,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7279
7519
  }, {
7280
7520
  key: "acknowledge",
7281
7521
  value: function acknowledge(type) {
7282
- var _this42 = this;
7522
+ var _this44 = this;
7283
7523
  if (!type) {
7284
7524
  return _promise.default.reject(new _parameter.default('Type must be set to acknowledge the meeting.'));
7285
7525
  }
@@ -7291,12 +7531,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7291
7531
  }).then(function (response) {
7292
7532
  return _promise.default.resolve(response);
7293
7533
  }).then(function (response) {
7294
- _this42.meetingFiniteStateMachine.ring(type);
7534
+ _this44.meetingFiniteStateMachine.ring(type);
7295
7535
  // @ts-ignore
7296
- _this42.webex.internal.newMetrics.submitClientEvent({
7536
+ _this44.webex.internal.newMetrics.submitClientEvent({
7297
7537
  name: 'client.alert.displayed',
7298
7538
  options: {
7299
- meetingId: _this42.id
7539
+ meetingId: _this44.id
7300
7540
  }
7301
7541
  });
7302
7542
  return _promise.default.resolve({
@@ -7321,12 +7561,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7321
7561
  }, {
7322
7562
  key: "decline",
7323
7563
  value: function decline(reason) {
7324
- var _this43 = this;
7564
+ var _this45 = this;
7325
7565
  return _util2.default.declineMeeting(this, reason).then(function (decline) {
7326
- _this43.meetingFiniteStateMachine.decline();
7566
+ _this45.meetingFiniteStateMachine.decline();
7327
7567
  return _promise.default.resolve(decline);
7328
7568
  }).catch(function (error) {
7329
- _this43.meetingFiniteStateMachine.fail(error);
7569
+ _this45.meetingFiniteStateMachine.fail(error);
7330
7570
  return _promise.default.reject(error);
7331
7571
  });
7332
7572
  }
@@ -7377,7 +7617,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7377
7617
  }, {
7378
7618
  key: "leave",
7379
7619
  value: function leave() {
7380
- var _this44 = this;
7620
+ var _this46 = this;
7381
7621
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7382
7622
  var leaveReason = options.reason || _constants.MEETING_REMOVED_REASON.CLIENT_LEAVE_REQUEST;
7383
7623
 
@@ -7389,7 +7629,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7389
7629
  var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7390
7630
  return (
7391
7631
  // @ts-ignore
7392
- _this44.webex.internal.newMetrics.submitClientEvent({
7632
+ _this46.webex.internal.newMetrics.submitClientEvent({
7393
7633
  name: 'client.call.leave',
7394
7634
  payload: _objectSpread({
7395
7635
  trigger: 'user-interaction',
@@ -7397,7 +7637,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7397
7637
  leaveReason: options.clientEventLeaveReason
7398
7638
  }, payload),
7399
7639
  options: {
7400
- meetingId: _this44.id
7640
+ meetingId: _this46.id
7401
7641
  }
7402
7642
  })
7403
7643
  );
@@ -7406,24 +7646,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7406
7646
  return _util2.default.leaveMeeting(this, options).then(function (leave) {
7407
7647
  // CA team recommends submitting this *after* locus /leave
7408
7648
  submitLeaveMetric();
7409
- _this44.meetingFiniteStateMachine.leave();
7410
- _this44.clearMeetingData();
7649
+ _this46.meetingFiniteStateMachine.leave();
7650
+ _this46.clearMeetingData();
7411
7651
 
7412
7652
  // upload logs on leave irrespective of meeting delete
7413
- _triggerProxy.default.trigger(_this44, {
7653
+ _triggerProxy.default.trigger(_this46, {
7414
7654
  file: 'meeting/index',
7415
7655
  function: 'leave'
7416
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this44);
7656
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this46);
7417
7657
 
7418
7658
  // TODO: more testing before we remove this code, we are not sure the scenarios for destroy here
7419
- if (_this44.wirelessShare || _this44.guest) {
7659
+ if (_this46.wirelessShare || _this46.guest) {
7420
7660
  // If screen sharing clean the meeting object
7421
- _triggerProxy.default.trigger(_this44, {
7661
+ _triggerProxy.default.trigger(_this46, {
7422
7662
  file: 'meeting/index',
7423
7663
  function: 'leave'
7424
7664
  }, _constants.EVENTS.DESTROY_MEETING, {
7425
7665
  reason: options.reason,
7426
- meetingId: _this44.id
7666
+ meetingId: _this46.id
7427
7667
  });
7428
7668
  }
7429
7669
  _loggerProxy.default.logger.log('Meeting:index#leave --> LEAVE REASON ', leaveReason);
@@ -7440,16 +7680,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7440
7680
  shownToUser: false
7441
7681
  }]
7442
7682
  });
7443
- _this44.meetingFiniteStateMachine.fail(error);
7683
+ _this46.meetingFiniteStateMachine.fail(error);
7444
7684
  _loggerProxy.default.logger.error('Meeting:index#leave --> Failed to leave ', error);
7445
7685
  // upload logs on leave irrespective of meeting delete
7446
- _triggerProxy.default.trigger(_this44, {
7686
+ _triggerProxy.default.trigger(_this46, {
7447
7687
  file: 'meeting/index',
7448
7688
  function: 'leave'
7449
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this44);
7689
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this46);
7450
7690
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_LEAVE_FAILURE, {
7451
- correlation_id: _this44.correlationId,
7452
- locus_id: _this44.locusUrl.split('/').pop(),
7691
+ correlation_id: _this46.correlationId,
7692
+ locus_id: _this46.locusUrl.split('/').pop(),
7453
7693
  reason: error.message,
7454
7694
  stack: error.stack,
7455
7695
  code: error.code
@@ -7469,7 +7709,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7469
7709
  }, {
7470
7710
  key: "startWhiteboardShare",
7471
7711
  value: function startWhiteboardShare(channelUrl, resourceToken) {
7472
- var _this45 = this;
7712
+ var _this47 = this;
7473
7713
  var whiteboard = this.locusInfo.mediaShares.find(function (element) {
7474
7714
  return element.name === 'whiteboard';
7475
7715
  });
@@ -7498,13 +7738,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7498
7738
  body.resourceToken = resourceToken;
7499
7739
  }
7500
7740
  return this.meetingRequest.changeMeetingFloor(body).then(function () {
7501
- _this45.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
7741
+ _this47.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
7502
7742
  return _promise.default.resolve();
7503
7743
  }).catch(function (error) {
7504
7744
  _loggerProxy.default.logger.error('Meeting:index#startWhiteboardShare --> Error ', error);
7505
7745
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_START_WHITEBOARD_SHARE_FAILURE, {
7506
- correlation_id: _this45.correlationId,
7507
- locus_id: _this45.locusUrl.split('/').pop(),
7746
+ correlation_id: _this47.correlationId,
7747
+ locus_id: _this47.locusUrl.split('/').pop(),
7508
7748
  reason: error.message,
7509
7749
  stack: error.stack,
7510
7750
  board: {
@@ -7527,7 +7767,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7527
7767
  }, {
7528
7768
  key: "stopWhiteboardShare",
7529
7769
  value: function stopWhiteboardShare(channelUrl) {
7530
- var _this46 = this;
7770
+ var _this48 = this;
7531
7771
  var whiteboard = this.locusInfo.mediaShares.find(function (element) {
7532
7772
  return element.name === 'whiteboard';
7533
7773
  });
@@ -7550,8 +7790,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7550
7790
  }).catch(function (error) {
7551
7791
  _loggerProxy.default.logger.error('Meeting:index#stopWhiteboardShare --> Error ', error);
7552
7792
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_STOP_WHITEBOARD_SHARE_FAILURE, {
7553
- correlation_id: _this46.correlationId,
7554
- locus_id: _this46.locusUrl.split('/').pop(),
7793
+ correlation_id: _this48.correlationId,
7794
+ locus_id: _this48.locusUrl.split('/').pop(),
7555
7795
  reason: error.message,
7556
7796
  stack: error.stack,
7557
7797
  board: {
@@ -7573,7 +7813,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7573
7813
  }, {
7574
7814
  key: "requestScreenShareFloor",
7575
7815
  value: function requestScreenShareFloor() {
7576
- var _this47 = this;
7816
+ var _this49 = this;
7577
7817
  if (!this.mediaProperties.hasLocalShareStream() || !this.mediaProperties.mediaDirection.sendShare) {
7578
7818
  _loggerProxy.default.logger.log("Meeting:index#requestScreenShareFloor --> NOT requesting floor, because we don't have the share stream anymore (shareStream=".concat(this.mediaProperties.shareVideoStream ? 'yes' : 'no', ", sendShare=").concat(this.mediaProperties.mediaDirection.sendShare, ")"));
7579
7819
  this.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
@@ -7604,34 +7844,34 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7604
7844
  resourceUrl: this.resourceUrl,
7605
7845
  shareInstanceId: this.localShareInstanceId
7606
7846
  }).then(function () {
7607
- _this47.screenShareFloorState = ScreenShareFloorStatus.GRANTED;
7847
+ _this49.screenShareFloorState = ScreenShareFloorStatus.GRANTED;
7608
7848
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_SUCCESS, {
7609
- correlation_id: _this47.correlationId,
7610
- locus_id: _this47.locusUrl.split('/').pop()
7849
+ correlation_id: _this49.correlationId,
7850
+ locus_id: _this49.locusUrl.split('/').pop()
7611
7851
  });
7612
7852
  return _promise.default.resolve();
7613
7853
  }).catch(function (error) {
7614
7854
  _loggerProxy.default.logger.error('Meeting:index#share --> Error ', error);
7615
7855
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_FAILURE, {
7616
- correlation_id: _this47.correlationId,
7617
- locus_id: _this47.locusUrl.split('/').pop(),
7856
+ correlation_id: _this49.correlationId,
7857
+ locus_id: _this49.locusUrl.split('/').pop(),
7618
7858
  reason: error.message,
7619
7859
  stack: error.stack
7620
7860
  });
7621
7861
 
7622
7862
  // @ts-ignore
7623
- _this47.webex.internal.newMetrics.submitClientEvent({
7863
+ _this49.webex.internal.newMetrics.submitClientEvent({
7624
7864
  name: 'client.share.floor-granted.local',
7625
7865
  payload: {
7626
7866
  mediaType: 'share',
7627
7867
  errors: _util2.default.getChangeMeetingFloorErrorPayload(error.message),
7628
- shareInstanceId: _this47.localShareInstanceId
7868
+ shareInstanceId: _this49.localShareInstanceId
7629
7869
  },
7630
7870
  options: {
7631
- meetingId: _this47.id
7871
+ meetingId: _this49.id
7632
7872
  }
7633
7873
  });
7634
- _this47.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
7874
+ _this49.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
7635
7875
  return _promise.default.reject(error);
7636
7876
  });
7637
7877
  }
@@ -7654,10 +7894,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7654
7894
  }, {
7655
7895
  key: "requestScreenShareFloorIfPending",
7656
7896
  value: function requestScreenShareFloorIfPending() {
7657
- var _this48 = this;
7897
+ var _this50 = this;
7658
7898
  if (this.floorGrantPending && this.state === _constants.MEETING_STATE.STATES.JOINED) {
7659
7899
  this.requestScreenShareFloor().then(function () {
7660
- _this48.floorGrantPending = false;
7900
+ _this50.floorGrantPending = false;
7661
7901
  });
7662
7902
  }
7663
7903
  }
@@ -7671,7 +7911,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7671
7911
  }, {
7672
7912
  key: "releaseScreenShareFloor",
7673
7913
  value: function releaseScreenShareFloor() {
7674
- var _this49 = this;
7914
+ var _this51 = this;
7675
7915
  var content = this.locusInfo.mediaShares.find(function (element) {
7676
7916
  return element.name === _constants.CONTENT;
7677
7917
  });
@@ -7706,8 +7946,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7706
7946
  }).catch(function (error) {
7707
7947
  _loggerProxy.default.logger.error('Meeting:index#releaseScreenShareFloor --> Error ', error);
7708
7948
  _metrics.default.sendBehavioralMetric(_constants2.default.STOP_FLOOR_REQUEST_FAILURE, {
7709
- correlation_id: _this49.correlationId,
7710
- locus_id: _this49.locusUrl.split('/').pop(),
7949
+ correlation_id: _this51.correlationId,
7950
+ locus_id: _this51.locusUrl.split('/').pop(),
7711
7951
  reason: error.message,
7712
7952
  stack: error.stack
7713
7953
  });
@@ -7763,13 +8003,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7763
8003
  * @param {boolean} mutedEnabled
7764
8004
  * @param {boolean} disallowUnmuteEnabled
7765
8005
  * @param {boolean} muteOnEntryEnabled
8006
+ * @param {array} roles
7766
8007
  * @public
7767
8008
  * @memberof Meeting
7768
8009
  */
7769
8010
  }, {
7770
8011
  key: "setMuteAll",
7771
- value: function setMuteAll(mutedEnabled, disallowUnmuteEnabled, muteOnEntryEnabled) {
7772
- return this.controlsOptionsManager.setMuteAll(mutedEnabled, disallowUnmuteEnabled, muteOnEntryEnabled);
8012
+ value: function setMuteAll(mutedEnabled, disallowUnmuteEnabled, muteOnEntryEnabled, roles) {
8013
+ return this.controlsOptionsManager.setMuteAll(mutedEnabled, disallowUnmuteEnabled, muteOnEntryEnabled, roles);
7773
8014
  }
7774
8015
 
7775
8016
  /**
@@ -7886,7 +8127,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7886
8127
  }, {
7887
8128
  key: "changeVideoLayout",
7888
8129
  value: function changeVideoLayout(layoutType) {
7889
- var _this50 = this;
8130
+ var _this52 = this;
7890
8131
  var renderInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
7891
8132
  var main = renderInfo.main,
7892
8133
  content = renderInfo.content;
@@ -7940,7 +8181,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7940
8181
  }
7941
8182
  this.lastVideoLayoutInfo = (0, _lodash.cloneDeep)(layoutInfo);
7942
8183
  this.locusInfo.once(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED, function (envelope) {
7943
- _triggerProxy.default.trigger(_this50, {
8184
+ _triggerProxy.default.trigger(_this52, {
7944
8185
  file: 'meeting/index',
7945
8186
  function: 'changeVideoLayout'
7946
8187
  }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_LAYOUT_UPDATE, {
@@ -8056,7 +8297,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8056
8297
  }, {
8057
8298
  key: "endMeetingForAll",
8058
8299
  value: function endMeetingForAll() {
8059
- var _this51 = this;
8300
+ var _this53 = this;
8060
8301
  // @ts-ignore
8061
8302
  this.webex.internal.newMetrics.submitClientEvent({
8062
8303
  name: 'client.call.leave',
@@ -8074,25 +8315,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8074
8315
  locus_id: this.locusId
8075
8316
  });
8076
8317
  return _util2.default.endMeetingForAll(this).then(function (end) {
8077
- _this51.meetingFiniteStateMachine.end();
8078
- _this51.clearMeetingData();
8318
+ _this53.meetingFiniteStateMachine.end();
8319
+ _this53.clearMeetingData();
8079
8320
  // upload logs on leave irrespective of meeting delete
8080
- _triggerProxy.default.trigger(_this51, {
8321
+ _triggerProxy.default.trigger(_this53, {
8081
8322
  file: 'meeting/index',
8082
8323
  function: 'endMeetingForAll'
8083
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this51);
8324
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this53);
8084
8325
  return end;
8085
8326
  }).catch(function (error) {
8086
- _this51.meetingFiniteStateMachine.fail(error);
8327
+ _this53.meetingFiniteStateMachine.fail(error);
8087
8328
  _loggerProxy.default.logger.error('Meeting:index#endMeetingForAll --> Failed to end meeting ', error);
8088
8329
  // upload logs on leave irrespective of meeting delete
8089
- _triggerProxy.default.trigger(_this51, {
8330
+ _triggerProxy.default.trigger(_this53, {
8090
8331
  file: 'meeting/index',
8091
8332
  function: 'endMeetingForAll'
8092
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this51);
8333
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this53);
8093
8334
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_END_ALL_FAILURE, {
8094
- correlation_id: _this51.correlationId,
8095
- locus_id: _this51.locusUrl.split('/').pop(),
8335
+ correlation_id: _this53.correlationId,
8336
+ locus_id: _this53.locusUrl.split('/').pop(),
8096
8337
  reason: error.message,
8097
8338
  stack: error.stack,
8098
8339
  code: error.code
@@ -8181,37 +8422,37 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8181
8422
  }, {
8182
8423
  key: "enableMusicMode",
8183
8424
  value: (function () {
8184
- var _enableMusicMode = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee34(shouldEnableMusicMode) {
8185
- return _regenerator.default.wrap(function _callee34$(_context34) {
8186
- while (1) switch (_context34.prev = _context34.next) {
8425
+ var _enableMusicMode = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee35(shouldEnableMusicMode) {
8426
+ return _regenerator.default.wrap(function _callee35$(_context35) {
8427
+ while (1) switch (_context35.prev = _context35.next) {
8187
8428
  case 0:
8188
8429
  this.checkMediaConnection();
8189
8430
  if (this.isMultistream) {
8190
- _context34.next = 3;
8431
+ _context35.next = 3;
8191
8432
  break;
8192
8433
  }
8193
8434
  throw new Error('enableMusicMode() only supported with multistream');
8194
8435
  case 3:
8195
8436
  if (!shouldEnableMusicMode) {
8196
- _context34.next = 8;
8437
+ _context35.next = 8;
8197
8438
  break;
8198
8439
  }
8199
- _context34.next = 6;
8440
+ _context35.next = 6;
8200
8441
  return this.sendSlotManager.setCodecParameters(_internalMediaCore.MediaType.AudioMain, {
8201
8442
  maxaveragebitrate: '64000',
8202
8443
  maxplaybackrate: '48000'
8203
8444
  });
8204
8445
  case 6:
8205
- _context34.next = 10;
8446
+ _context35.next = 10;
8206
8447
  break;
8207
8448
  case 8:
8208
- _context34.next = 10;
8449
+ _context35.next = 10;
8209
8450
  return this.sendSlotManager.deleteCodecParameters(_internalMediaCore.MediaType.AudioMain, ['maxaveragebitrate', 'maxplaybackrate']);
8210
8451
  case 10:
8211
8452
  case "end":
8212
- return _context34.stop();
8453
+ return _context35.stop();
8213
8454
  }
8214
- }, _callee34, this);
8455
+ }, _callee35, this);
8215
8456
  }));
8216
8457
  function enableMusicMode(_x36) {
8217
8458
  return _enableMusicMode.apply(this, arguments);
@@ -8234,7 +8475,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8234
8475
  _this$mediaProperties41,
8235
8476
  _this$mediaProperties42,
8236
8477
  _this$mediaProperties43,
8237
- _this52 = this;
8478
+ _this54 = this;
8238
8479
  var LOG_HEADER = 'Meeting:index#updateTranscodedMediaConnection -->';
8239
8480
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " starting"));
8240
8481
  if (!this.canUpdateMedia()) {
@@ -8259,8 +8500,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8259
8500
  }).catch(function (error) {
8260
8501
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " Error: "), error);
8261
8502
  _metrics.default.sendBehavioralMetric(_constants2.default.UPDATE_MEDIA_FAILURE, {
8262
- correlation_id: _this52.correlationId,
8263
- locus_id: _this52.locusUrl.split('/').pop(),
8503
+ correlation_id: _this54.correlationId,
8504
+ locus_id: _this54.locusUrl.split('/').pop(),
8264
8505
  reason: error.message,
8265
8506
  stack: error.stack
8266
8507
  });
@@ -8304,25 +8545,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8304
8545
  }, {
8305
8546
  key: "publishStream",
8306
8547
  value: (function () {
8307
- var _publishStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee35(mediaType, stream) {
8308
- return _regenerator.default.wrap(function _callee35$(_context35) {
8309
- while (1) switch (_context35.prev = _context35.next) {
8548
+ var _publishStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee36(mediaType, stream) {
8549
+ return _regenerator.default.wrap(function _callee36$(_context36) {
8550
+ while (1) switch (_context36.prev = _context36.next) {
8310
8551
  case 0:
8311
8552
  if (stream) {
8312
- _context35.next = 2;
8553
+ _context36.next = 2;
8313
8554
  break;
8314
8555
  }
8315
- return _context35.abrupt("return");
8556
+ return _context36.abrupt("return");
8316
8557
  case 2:
8317
8558
  if (!this.mediaProperties.webrtcMediaConnection) {
8318
- _context35.next = 7;
8559
+ _context36.next = 7;
8319
8560
  break;
8320
8561
  }
8321
8562
  if (!(this.isMultistream && this.mediaProperties.webrtcMediaConnection)) {
8322
- _context35.next = 6;
8563
+ _context36.next = 6;
8323
8564
  break;
8324
8565
  }
8325
- _context35.next = 6;
8566
+ _context36.next = 6;
8326
8567
  return this.sendSlotManager.publishStream(mediaType, stream);
8327
8568
  case 6:
8328
8569
  this.emitPublishStateChangeEvent({
@@ -8333,9 +8574,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8333
8574
  });
8334
8575
  case 7:
8335
8576
  case "end":
8336
- return _context35.stop();
8577
+ return _context36.stop();
8337
8578
  }
8338
- }, _callee35, this);
8579
+ }, _callee36, this);
8339
8580
  }));
8340
8581
  function publishStream(_x37, _x38) {
8341
8582
  return _publishStream.apply(this, arguments);
@@ -8353,21 +8594,21 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8353
8594
  }, {
8354
8595
  key: "unpublishStream",
8355
8596
  value: (function () {
8356
- var _unpublishStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee36(mediaType, stream) {
8357
- return _regenerator.default.wrap(function _callee36$(_context36) {
8358
- while (1) switch (_context36.prev = _context36.next) {
8597
+ var _unpublishStream = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee37(mediaType, stream) {
8598
+ return _regenerator.default.wrap(function _callee37$(_context37) {
8599
+ while (1) switch (_context37.prev = _context37.next) {
8359
8600
  case 0:
8360
8601
  if (stream) {
8361
- _context36.next = 2;
8602
+ _context37.next = 2;
8362
8603
  break;
8363
8604
  }
8364
- return _context36.abrupt("return");
8605
+ return _context37.abrupt("return");
8365
8606
  case 2:
8366
8607
  if (!(this.isMultistream && this.mediaProperties.webrtcMediaConnection)) {
8367
- _context36.next = 5;
8608
+ _context37.next = 5;
8368
8609
  break;
8369
8610
  }
8370
- _context36.next = 5;
8611
+ _context37.next = 5;
8371
8612
  return this.sendSlotManager.unpublishStream(mediaType);
8372
8613
  case 5:
8373
8614
  this.emitPublishStateChangeEvent({
@@ -8378,9 +8619,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8378
8619
  });
8379
8620
  case 6:
8380
8621
  case "end":
8381
- return _context36.stop();
8622
+ return _context37.stop();
8382
8623
  }
8383
- }, _callee36, this);
8624
+ }, _callee37, this);
8384
8625
  }));
8385
8626
  function unpublishStream(_x39, _x40) {
8386
8627
  return _unpublishStream.apply(this, arguments);
@@ -8397,67 +8638,92 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8397
8638
  }, {
8398
8639
  key: "publishStreams",
8399
8640
  value: (function () {
8400
- var _publishStreams = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee37(streams) {
8401
- var _streams$screenShare, _streams$screenShare2, _streams$microphone, _streams$camera, _streams$screenShare3, _streams$screenShare4, _streams$screenShare5, _streams$screenShare6, _streams$screenShare7, _streams$screenShare8;
8402
- var floorRequestNeeded, _streams$screenShare9;
8403
- return _regenerator.default.wrap(function _callee37$(_context37) {
8404
- while (1) switch (_context37.prev = _context37.next) {
8641
+ var _publishStreams = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee38(streams) {
8642
+ var _streams$screenShare, _streams$screenShare2, _streams$screenShare3, _streams$screenShare4, _streams$screenShare5, _streams$screenShare6;
8643
+ var streamChecks, _i, _streamChecks, _streamChecks$_i, stream, name, floorRequestNeeded, _streams$screenShare7;
8644
+ return _regenerator.default.wrap(function _callee38$(_context38) {
8645
+ while (1) switch (_context38.prev = _context38.next) {
8405
8646
  case 0:
8647
+ _loggerProxy.default.logger.info("Meeting:index#publishStreams --> called with: ".concat((0, _stringify.default)(streams)));
8406
8648
  this.checkMediaConnection();
8407
8649
  if (!(!streams.microphone && !streams.camera && !((_streams$screenShare = streams.screenShare) !== null && _streams$screenShare !== void 0 && _streams$screenShare.audio) && !((_streams$screenShare2 = streams.screenShare) !== null && _streams$screenShare2 !== void 0 && _streams$screenShare2.video))) {
8408
- _context37.next = 3;
8650
+ _context38.next = 4;
8409
8651
  break;
8410
8652
  }
8411
- return _context37.abrupt("return");
8412
- case 3:
8413
- if (!((streams === null || streams === void 0 ? void 0 : (_streams$microphone = streams.microphone) === null || _streams$microphone === void 0 ? void 0 : _streams$microphone.readyState) === 'ended' || (streams === null || streams === void 0 ? void 0 : (_streams$camera = streams.camera) === null || _streams$camera === void 0 ? void 0 : _streams$camera.readyState) === 'ended' || (streams === null || streams === void 0 ? void 0 : (_streams$screenShare3 = streams.screenShare) === null || _streams$screenShare3 === void 0 ? void 0 : (_streams$screenShare4 = _streams$screenShare3.audio) === null || _streams$screenShare4 === void 0 ? void 0 : _streams$screenShare4.readyState) === 'ended' || (streams === null || streams === void 0 ? void 0 : (_streams$screenShare5 = streams.screenShare) === null || _streams$screenShare5 === void 0 ? void 0 : (_streams$screenShare6 = _streams$screenShare5.video) === null || _streams$screenShare6 === void 0 ? void 0 : _streams$screenShare6.readyState) === 'ended')) {
8414
- _context37.next = 5;
8653
+ return _context38.abrupt("return");
8654
+ case 4:
8655
+ streamChecks = [{
8656
+ stream: streams === null || streams === void 0 ? void 0 : streams.microphone,
8657
+ name: 'microphone'
8658
+ }, {
8659
+ stream: streams === null || streams === void 0 ? void 0 : streams.camera,
8660
+ name: 'camera'
8661
+ }, {
8662
+ stream: streams === null || streams === void 0 ? void 0 : (_streams$screenShare3 = streams.screenShare) === null || _streams$screenShare3 === void 0 ? void 0 : _streams$screenShare3.audio,
8663
+ name: 'screenShare audio'
8664
+ }, {
8665
+ stream: streams === null || streams === void 0 ? void 0 : (_streams$screenShare4 = streams.screenShare) === null || _streams$screenShare4 === void 0 ? void 0 : _streams$screenShare4.video,
8666
+ name: 'screenShare video'
8667
+ }];
8668
+ _i = 0, _streamChecks = streamChecks;
8669
+ case 6:
8670
+ if (!(_i < _streamChecks.length)) {
8671
+ _context38.next = 13;
8415
8672
  break;
8416
8673
  }
8417
- throw new Error("Attempted to publish stream with ended readyState, correlationId=".concat(this.correlationId));
8418
- case 5:
8674
+ _streamChecks$_i = _streamChecks[_i], stream = _streamChecks$_i.stream, name = _streamChecks$_i.name;
8675
+ if (!((stream === null || stream === void 0 ? void 0 : stream.readyState) === 'ended')) {
8676
+ _context38.next = 10;
8677
+ break;
8678
+ }
8679
+ throw new Error("Attempted to publish ".concat(name, " stream with ended readyState, correlationId=").concat(this.correlationId));
8680
+ case 10:
8681
+ _i++;
8682
+ _context38.next = 6;
8683
+ break;
8684
+ case 13:
8419
8685
  floorRequestNeeded = false; // Screenshare Audio is supported only in multi stream. So we check for screenshare audio presence only if it's a multi stream meeting
8420
- if (!(this.isMultistream && (_streams$screenShare7 = streams.screenShare) !== null && _streams$screenShare7 !== void 0 && _streams$screenShare7.audio)) {
8421
- _context37.next = 10;
8686
+ if (!(this.isMultistream && (_streams$screenShare5 = streams.screenShare) !== null && _streams$screenShare5 !== void 0 && _streams$screenShare5.audio)) {
8687
+ _context38.next = 18;
8422
8688
  break;
8423
8689
  }
8424
- _context37.next = 9;
8690
+ _context38.next = 17;
8425
8691
  return this.setLocalShareAudioStream(streams.screenShare.audio);
8426
- case 9:
8692
+ case 17:
8427
8693
  floorRequestNeeded = this.screenShareFloorState === ScreenShareFloorStatus.RELEASED;
8428
- case 10:
8429
- if (!((_streams$screenShare8 = streams.screenShare) !== null && _streams$screenShare8 !== void 0 && _streams$screenShare8.video)) {
8430
- _context37.next = 14;
8694
+ case 18:
8695
+ if (!((_streams$screenShare6 = streams.screenShare) !== null && _streams$screenShare6 !== void 0 && _streams$screenShare6.video)) {
8696
+ _context38.next = 22;
8431
8697
  break;
8432
8698
  }
8433
- _context37.next = 13;
8434
- return this.setLocalShareVideoStream((_streams$screenShare9 = streams.screenShare) === null || _streams$screenShare9 === void 0 ? void 0 : _streams$screenShare9.video);
8435
- case 13:
8699
+ _context38.next = 21;
8700
+ return this.setLocalShareVideoStream((_streams$screenShare7 = streams.screenShare) === null || _streams$screenShare7 === void 0 ? void 0 : _streams$screenShare7.video);
8701
+ case 21:
8436
8702
  floorRequestNeeded = this.screenShareFloorState === ScreenShareFloorStatus.RELEASED;
8437
- case 14:
8703
+ case 22:
8438
8704
  if (!streams.microphone) {
8439
- _context37.next = 17;
8705
+ _context38.next = 25;
8440
8706
  break;
8441
8707
  }
8442
- _context37.next = 17;
8708
+ _context38.next = 25;
8443
8709
  return this.setLocalAudioStream(streams.microphone);
8444
- case 17:
8710
+ case 25:
8445
8711
  if (!streams.camera) {
8446
- _context37.next = 20;
8712
+ _context38.next = 28;
8447
8713
  break;
8448
8714
  }
8449
- _context37.next = 20;
8715
+ _context38.next = 28;
8450
8716
  return this.setLocalVideoStream(streams.camera);
8451
- case 20:
8717
+ case 28:
8452
8718
  if (this.isMultistream) {
8453
- _context37.next = 23;
8719
+ _context38.next = 31;
8454
8720
  break;
8455
8721
  }
8456
- _context37.next = 23;
8722
+ _context38.next = 31;
8457
8723
  return this.updateTranscodedMediaConnection();
8458
- case 23:
8724
+ case 31:
8459
8725
  if (!floorRequestNeeded) {
8460
- _context37.next = 29;
8726
+ _context38.next = 37;
8461
8727
  break;
8462
8728
  }
8463
8729
  this.localShareInstanceId = _uuid.default.v4();
@@ -8481,13 +8747,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8481
8747
  // we're sending the http request to Locus to request the screen share floor
8482
8748
  // only after the SDP update, because that's how it's always been done for transcoded meetings
8483
8749
  // and also if sharing from the start, we need confluence to have been created
8484
- _context37.next = 29;
8750
+ _context38.next = 37;
8485
8751
  return this.enqueueScreenShareFloorRequest();
8486
- case 29:
8752
+ case 37:
8487
8753
  case "end":
8488
- return _context37.stop();
8754
+ return _context38.stop();
8489
8755
  }
8490
- }, _callee37, this);
8756
+ }, _callee38, this);
8491
8757
  }));
8492
8758
  function publishStreams(_x41) {
8493
8759
  return _publishStreams.apply(this, arguments);
@@ -8504,11 +8770,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8504
8770
  }, {
8505
8771
  key: "unpublishStreams",
8506
8772
  value: (function () {
8507
- var _unpublishStreams = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee38(streams) {
8773
+ var _unpublishStreams = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee39(streams) {
8508
8774
  var promises, _iterator, _step, stream;
8509
- return _regenerator.default.wrap(function _callee38$(_context38) {
8510
- while (1) switch (_context38.prev = _context38.next) {
8775
+ return _regenerator.default.wrap(function _callee39$(_context39) {
8776
+ while (1) switch (_context39.prev = _context39.next) {
8511
8777
  case 0:
8778
+ _loggerProxy.default.logger.info("Meeting:index#unpublishStreams --> called with: ".concat((0, _stringify.default)(streams)));
8512
8779
  this.checkMediaConnection();
8513
8780
  promises = [];
8514
8781
  _iterator = _createForOfIteratorHelper(streams.filter(function (t) {
@@ -8538,9 +8805,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8538
8805
  if (!this.isMultistream) {
8539
8806
  promises.push(this.updateTranscodedMediaConnection());
8540
8807
  }
8541
- _context38.next = 7;
8808
+ _context39.next = 8;
8542
8809
  return _promise.default.all(promises);
8543
- case 7:
8810
+ case 8:
8544
8811
  // we're allowing for the SDK to support just audio share as well
8545
8812
  // so a share could be active with only video, only audio, or both
8546
8813
  // we're only releasing the floor if both streams have ended
@@ -8557,11 +8824,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8557
8824
  // nothing to do here, error is logged already inside releaseScreenShareFloor()
8558
8825
  }
8559
8826
  }
8560
- case 8:
8827
+ case 9:
8561
8828
  case "end":
8562
- return _context38.stop();
8829
+ return _context39.stop();
8563
8830
  }
8564
- }, _callee38, this);
8831
+ }, _callee39, this);
8565
8832
  }));
8566
8833
  function unpublishStreams(_x42) {
8567
8834
  return _unpublishStreams.apply(this, arguments);
@@ -8623,55 +8890,55 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8623
8890
  }], [{
8624
8891
  key: "handleDeviceLogging",
8625
8892
  value: (function () {
8626
- var _handleDeviceLogging = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee39(isAudioEnabled, isVideoEnabled) {
8893
+ var _handleDeviceLogging = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee40(isAudioEnabled, isVideoEnabled) {
8627
8894
  var devices;
8628
- return _regenerator.default.wrap(function _callee39$(_context39) {
8629
- while (1) switch (_context39.prev = _context39.next) {
8895
+ return _regenerator.default.wrap(function _callee40$(_context40) {
8896
+ while (1) switch (_context40.prev = _context40.next) {
8630
8897
  case 0:
8631
- _context39.prev = 0;
8898
+ _context40.prev = 0;
8632
8899
  devices = [];
8633
8900
  if (!(isVideoEnabled && isAudioEnabled)) {
8634
- _context39.next = 8;
8901
+ _context40.next = 8;
8635
8902
  break;
8636
8903
  }
8637
- _context39.next = 5;
8904
+ _context40.next = 5;
8638
8905
  return (0, _mediaHelpers.getDevices)();
8639
8906
  case 5:
8640
- devices = _context39.sent;
8641
- _context39.next = 18;
8907
+ devices = _context40.sent;
8908
+ _context40.next = 18;
8642
8909
  break;
8643
8910
  case 8:
8644
8911
  if (!isVideoEnabled) {
8645
- _context39.next = 14;
8912
+ _context40.next = 14;
8646
8913
  break;
8647
8914
  }
8648
- _context39.next = 11;
8915
+ _context40.next = 11;
8649
8916
  return (0, _mediaHelpers.getDevices)(_media.default.DeviceKind.VIDEO_INPUT);
8650
8917
  case 11:
8651
- devices = _context39.sent;
8652
- _context39.next = 18;
8918
+ devices = _context40.sent;
8919
+ _context40.next = 18;
8653
8920
  break;
8654
8921
  case 14:
8655
8922
  if (!isAudioEnabled) {
8656
- _context39.next = 18;
8923
+ _context40.next = 18;
8657
8924
  break;
8658
8925
  }
8659
- _context39.next = 17;
8926
+ _context40.next = 17;
8660
8927
  return (0, _mediaHelpers.getDevices)(_media.default.DeviceKind.AUDIO_INPUT);
8661
8928
  case 17:
8662
- devices = _context39.sent;
8929
+ devices = _context40.sent;
8663
8930
  case 18:
8664
8931
  _util2.default.handleDeviceLogging(devices);
8665
- _context39.next = 23;
8932
+ _context40.next = 23;
8666
8933
  break;
8667
8934
  case 21:
8668
- _context39.prev = 21;
8669
- _context39.t0 = _context39["catch"](0);
8935
+ _context40.prev = 21;
8936
+ _context40.t0 = _context40["catch"](0);
8670
8937
  case 23:
8671
8938
  case "end":
8672
- return _context39.stop();
8939
+ return _context40.stop();
8673
8940
  }
8674
- }, _callee39, null, [[0, 21]]);
8941
+ }, _callee40, null, [[0, 21]]);
8675
8942
  }));
8676
8943
  function handleDeviceLogging(_x43, _x44) {
8677
8944
  return _handleDeviceLogging.apply(this, arguments);