@webex/plugin-meetings 3.8.0 → 3.8.1-next.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. package/README.md +26 -13
  2. package/dist/breakouts/breakout.js +1 -1
  3. package/dist/breakouts/index.js +70 -6
  4. package/dist/breakouts/index.js.map +1 -1
  5. package/dist/common/errors/webex-errors.js +12 -2
  6. package/dist/common/errors/webex-errors.js.map +1 -1
  7. package/dist/config.js +5 -1
  8. package/dist/config.js.map +1 -1
  9. package/dist/constants.js +28 -123
  10. package/dist/constants.js.map +1 -1
  11. package/dist/controls-options-manager/enums.js +3 -0
  12. package/dist/controls-options-manager/enums.js.map +1 -1
  13. package/dist/controls-options-manager/types.js.map +1 -1
  14. package/dist/controls-options-manager/util.js +78 -0
  15. package/dist/controls-options-manager/util.js.map +1 -1
  16. package/dist/interpretation/index.js +4 -4
  17. package/dist/interpretation/index.js.map +1 -1
  18. package/dist/interpretation/siLanguage.js +1 -1
  19. package/dist/locus-info/controlsUtils.js +37 -11
  20. package/dist/locus-info/controlsUtils.js.map +1 -1
  21. package/dist/locus-info/index.js +92 -12
  22. package/dist/locus-info/index.js.map +1 -1
  23. package/dist/locus-info/selfUtils.js +432 -418
  24. package/dist/locus-info/selfUtils.js.map +1 -1
  25. package/dist/media/index.js +17 -17
  26. package/dist/media/index.js.map +1 -1
  27. package/dist/media/properties.js +94 -6
  28. package/dist/media/properties.js.map +1 -1
  29. package/dist/meeting/brbState.js +9 -2
  30. package/dist/meeting/brbState.js.map +1 -1
  31. package/dist/meeting/in-meeting-actions.js +21 -1
  32. package/dist/meeting/in-meeting-actions.js.map +1 -1
  33. package/dist/meeting/index.js +678 -344
  34. package/dist/meeting/index.js.map +1 -1
  35. package/dist/meeting/locusMediaRequest.js +21 -22
  36. package/dist/meeting/locusMediaRequest.js.map +1 -1
  37. package/dist/meeting/muteState.js +4 -4
  38. package/dist/meeting/muteState.js.map +1 -1
  39. package/dist/meeting/request.js +30 -0
  40. package/dist/meeting/request.js.map +1 -1
  41. package/dist/meeting/request.type.js.map +1 -1
  42. package/dist/meeting/util.js +13 -2
  43. package/dist/meeting/util.js.map +1 -1
  44. package/dist/meeting-info/meeting-info-v2.js +373 -68
  45. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  46. package/dist/meeting-info/utilv2.js +5 -1
  47. package/dist/meeting-info/utilv2.js.map +1 -1
  48. package/dist/meetings/index.js +136 -1
  49. package/dist/meetings/index.js.map +1 -1
  50. package/dist/meetings/util.js +14 -0
  51. package/dist/meetings/util.js.map +1 -1
  52. package/dist/member/index.js +55 -9
  53. package/dist/member/index.js.map +1 -1
  54. package/dist/member/types.js +3 -0
  55. package/dist/member/types.js.map +1 -1
  56. package/dist/member/util.js +335 -353
  57. package/dist/member/util.js.map +1 -1
  58. package/dist/members/collection.js.map +1 -1
  59. package/dist/members/index.js +137 -29
  60. package/dist/members/index.js.map +1 -1
  61. package/dist/members/request.js +38 -0
  62. package/dist/members/request.js.map +1 -1
  63. package/dist/members/util.js +36 -1
  64. package/dist/members/util.js.map +1 -1
  65. package/dist/metrics/constants.js +10 -0
  66. package/dist/metrics/constants.js.map +1 -1
  67. package/dist/multistream/remoteMediaManager.js +40 -8
  68. package/dist/multistream/remoteMediaManager.js.map +1 -1
  69. package/dist/reachability/clusterReachability.js +63 -27
  70. package/dist/reachability/clusterReachability.js.map +1 -1
  71. package/dist/reachability/index.js +107 -47
  72. package/dist/reachability/index.js.map +1 -1
  73. package/dist/reachability/reachability.types.js +14 -0
  74. package/dist/reachability/reachability.types.js.map +1 -1
  75. package/dist/reachability/request.js +19 -3
  76. package/dist/reachability/request.js.map +1 -1
  77. package/dist/reconnection-manager/index.js +2 -2
  78. package/dist/reconnection-manager/index.js.map +1 -1
  79. package/dist/recording-controller/util.js +5 -5
  80. package/dist/recording-controller/util.js.map +1 -1
  81. package/dist/roap/index.js.map +1 -1
  82. package/dist/roap/turnDiscovery.js +45 -27
  83. package/dist/roap/turnDiscovery.js.map +1 -1
  84. package/dist/roap/types.js +17 -0
  85. package/dist/roap/types.js.map +1 -0
  86. package/dist/types/common/errors/webex-errors.d.ts +7 -1
  87. package/dist/types/config.d.ts +3 -0
  88. package/dist/types/constants.d.ts +20 -85
  89. package/dist/types/controls-options-manager/enums.d.ts +4 -1
  90. package/dist/types/controls-options-manager/types.d.ts +10 -1
  91. package/dist/types/locus-info/index.d.ts +3 -3
  92. package/dist/types/locus-info/selfUtils.d.ts +216 -1
  93. package/dist/types/media/properties.d.ts +15 -0
  94. package/dist/types/meeting/in-meeting-actions.d.ts +20 -0
  95. package/dist/types/meeting/index.d.ts +65 -1
  96. package/dist/types/meeting/muteState.d.ts +0 -1
  97. package/dist/types/meeting/request.d.ts +12 -1
  98. package/dist/types/meeting/request.type.d.ts +6 -0
  99. package/dist/types/meeting/util.d.ts +3 -1
  100. package/dist/types/meeting-info/meeting-info-v2.d.ts +82 -1
  101. package/dist/types/meetings/index.d.ts +57 -0
  102. package/dist/types/member/index.d.ts +21 -6
  103. package/dist/types/member/types.d.ts +73 -14
  104. package/dist/types/member/util.d.ts +156 -1
  105. package/dist/types/members/collection.d.ts +6 -5
  106. package/dist/types/members/index.d.ts +32 -43
  107. package/dist/types/members/request.d.ts +26 -0
  108. package/dist/types/members/util.d.ts +27 -0
  109. package/dist/types/metrics/constants.d.ts +10 -0
  110. package/dist/types/multistream/remoteMediaManager.d.ts +10 -1
  111. package/dist/types/reachability/clusterReachability.d.ts +15 -7
  112. package/dist/types/reachability/index.d.ts +10 -1
  113. package/dist/types/reachability/reachability.types.d.ts +5 -0
  114. package/dist/types/roap/index.d.ts +3 -2
  115. package/dist/types/roap/turnDiscovery.d.ts +5 -17
  116. package/dist/types/roap/types.d.ts +16 -0
  117. package/dist/webinar/index.js +2 -2
  118. package/dist/webinar/index.js.map +1 -1
  119. package/package.json +24 -23
  120. package/src/breakouts/index.ts +69 -0
  121. package/src/common/errors/webex-errors.ts +8 -1
  122. package/src/config.ts +3 -0
  123. package/src/constants.ts +30 -90
  124. package/src/controls-options-manager/enums.ts +3 -0
  125. package/src/controls-options-manager/types.ts +16 -1
  126. package/src/controls-options-manager/util.ts +93 -0
  127. package/src/interpretation/index.ts +3 -3
  128. package/src/locus-info/controlsUtils.ts +59 -14
  129. package/src/locus-info/index.ts +97 -13
  130. package/src/locus-info/selfUtils.ts +496 -442
  131. package/src/media/index.ts +23 -21
  132. package/src/media/properties.ts +96 -0
  133. package/src/meeting/brbState.ts +11 -2
  134. package/src/meeting/in-meeting-actions.ts +40 -0
  135. package/src/meeting/index.ts +470 -105
  136. package/src/meeting/locusMediaRequest.ts +27 -22
  137. package/src/meeting/muteState.ts +4 -4
  138. package/src/meeting/request.ts +36 -1
  139. package/src/meeting/request.type.ts +7 -0
  140. package/src/meeting/util.ts +11 -2
  141. package/src/meeting-info/meeting-info-v2.ts +254 -8
  142. package/src/meeting-info/utilv2.ts +5 -0
  143. package/src/meetings/index.ts +148 -1
  144. package/src/meetings/util.ts +18 -0
  145. package/src/member/index.ts +68 -22
  146. package/src/member/types.ts +82 -16
  147. package/src/member/util.ts +357 -350
  148. package/src/members/collection.ts +4 -3
  149. package/src/members/index.ts +137 -18
  150. package/src/members/request.ts +44 -0
  151. package/src/members/util.ts +43 -1
  152. package/src/metrics/constants.ts +10 -0
  153. package/src/multistream/remoteMediaManager.ts +32 -10
  154. package/src/reachability/clusterReachability.ts +73 -26
  155. package/src/reachability/index.ts +62 -1
  156. package/src/reachability/reachability.types.ts +6 -0
  157. package/src/reachability/request.ts +7 -0
  158. package/src/reconnection-manager/index.ts +2 -2
  159. package/src/recording-controller/util.ts +17 -13
  160. package/src/roap/index.ts +3 -7
  161. package/src/roap/turnDiscovery.ts +34 -39
  162. package/src/roap/types.ts +23 -0
  163. package/src/webinar/index.ts +1 -1
  164. package/test/unit/spec/breakouts/index.ts +167 -95
  165. package/test/unit/spec/controls-options-manager/util.js +178 -0
  166. package/test/unit/spec/interpretation/index.ts +39 -1
  167. package/test/unit/spec/locus-info/controlsUtils.js +155 -9
  168. package/test/unit/spec/locus-info/index.js +209 -73
  169. package/test/unit/spec/locus-info/selfUtils.js +98 -24
  170. package/test/unit/spec/media/index.ts +150 -18
  171. package/test/unit/spec/media/properties.ts +130 -0
  172. package/test/unit/spec/meeting/brbState.ts +40 -2
  173. package/test/unit/spec/meeting/in-meeting-actions.ts +23 -4
  174. package/test/unit/spec/meeting/index.js +804 -139
  175. package/test/unit/spec/meeting/locusMediaRequest.ts +95 -87
  176. package/test/unit/spec/meeting/muteState.js +73 -2
  177. package/test/unit/spec/meeting/request.js +32 -1
  178. package/test/unit/spec/meeting/utils.js +119 -18
  179. package/test/unit/spec/meeting-info/meetinginfov2.js +484 -114
  180. package/test/unit/spec/meeting-info/utilv2.js +19 -0
  181. package/test/unit/spec/meetings/index.js +146 -2
  182. package/test/unit/spec/member/index.js +7 -0
  183. package/test/unit/spec/member/util.js +24 -0
  184. package/test/unit/spec/members/index.js +304 -78
  185. package/test/unit/spec/members/request.js +68 -22
  186. package/test/unit/spec/members/utils.js +75 -0
  187. package/test/unit/spec/multistream/remoteMediaManager.ts +397 -118
  188. package/test/unit/spec/reachability/clusterReachability.ts +88 -56
  189. package/test/unit/spec/reachability/index.ts +97 -0
  190. package/test/unit/spec/reachability/request.js +47 -2
  191. package/test/unit/spec/reconnection-manager/index.js +4 -4
  192. package/test/unit/spec/roap/turnDiscovery.ts +110 -28
  193. package/test/unit/spec/webinar/index.ts +5 -0
  194. package/dist/annotation/annotation.types.d.ts +0 -42
  195. package/dist/annotation/constants.d.ts +0 -31
  196. package/dist/annotation/index.d.ts +0 -117
  197. package/dist/breakouts/breakout.d.ts +0 -8
  198. package/dist/breakouts/collection.d.ts +0 -5
  199. package/dist/breakouts/edit-lock-error.d.ts +0 -15
  200. package/dist/breakouts/events.d.ts +0 -8
  201. package/dist/breakouts/index.d.ts +0 -5
  202. package/dist/breakouts/request.d.ts +0 -22
  203. package/dist/breakouts/utils.d.ts +0 -15
  204. package/dist/common/browser-detection.d.ts +0 -9
  205. package/dist/common/collection.d.ts +0 -48
  206. package/dist/common/config.d.ts +0 -2
  207. package/dist/common/errors/captcha-error.d.ts +0 -15
  208. package/dist/common/errors/intent-to-join.d.ts +0 -16
  209. package/dist/common/errors/join-meeting.d.ts +0 -17
  210. package/dist/common/errors/media.d.ts +0 -15
  211. package/dist/common/errors/no-meeting-info.d.ts +0 -14
  212. package/dist/common/errors/parameter.d.ts +0 -15
  213. package/dist/common/errors/password-error.d.ts +0 -15
  214. package/dist/common/errors/permission.d.ts +0 -14
  215. package/dist/common/errors/reclaim-host-role-error.js +0 -149
  216. package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
  217. package/dist/common/errors/reclaim-host-role-errors.d.ts +0 -60
  218. package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
  219. package/dist/common/errors/reconnection-in-progress.js +0 -33
  220. package/dist/common/errors/reconnection-in-progress.js.map +0 -1
  221. package/dist/common/errors/reconnection.d.ts +0 -15
  222. package/dist/common/errors/stats.d.ts +0 -15
  223. package/dist/common/errors/webex-errors.d.ts +0 -93
  224. package/dist/common/errors/webex-meetings-error.d.ts +0 -20
  225. package/dist/common/events/events-scope.d.ts +0 -17
  226. package/dist/common/events/events.d.ts +0 -12
  227. package/dist/common/events/trigger-proxy.d.ts +0 -2
  228. package/dist/common/events/util.d.ts +0 -2
  229. package/dist/common/logs/logger-config.d.ts +0 -2
  230. package/dist/common/logs/logger-proxy.d.ts +0 -2
  231. package/dist/common/logs/request.d.ts +0 -36
  232. package/dist/common/queue.d.ts +0 -34
  233. package/dist/config.d.ts +0 -72
  234. package/dist/constants.d.ts +0 -1088
  235. package/dist/controls-options-manager/constants.d.ts +0 -4
  236. package/dist/controls-options-manager/enums.d.ts +0 -15
  237. package/dist/controls-options-manager/index.d.ts +0 -136
  238. package/dist/controls-options-manager/types.d.ts +0 -43
  239. package/dist/controls-options-manager/util.d.ts +0 -1
  240. package/dist/index.d.ts +0 -7
  241. package/dist/interceptors/index.d.ts +0 -2
  242. package/dist/interceptors/locusRetry.d.ts +0 -27
  243. package/dist/interpretation/collection.d.ts +0 -5
  244. package/dist/interpretation/index.d.ts +0 -5
  245. package/dist/interpretation/siLanguage.d.ts +0 -5
  246. package/dist/locus-info/controlsUtils.d.ts +0 -2
  247. package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
  248. package/dist/locus-info/fullState.d.ts +0 -2
  249. package/dist/locus-info/hostUtils.d.ts +0 -2
  250. package/dist/locus-info/index.d.ts +0 -322
  251. package/dist/locus-info/infoUtils.d.ts +0 -2
  252. package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
  253. package/dist/locus-info/parser.d.ts +0 -272
  254. package/dist/locus-info/selfUtils.d.ts +0 -2
  255. package/dist/media/index.d.ts +0 -34
  256. package/dist/media/properties.d.ts +0 -93
  257. package/dist/media/util.d.ts +0 -2
  258. package/dist/mediaQualityMetrics/config.d.ts +0 -241
  259. package/dist/mediaQualityMetrics/config.js +0 -502
  260. package/dist/mediaQualityMetrics/config.js.map +0 -1
  261. package/dist/meeting/effectsState.js +0 -260
  262. package/dist/meeting/effectsState.js.map +0 -1
  263. package/dist/meeting/in-meeting-actions.d.ts +0 -167
  264. package/dist/meeting/index.d.ts +0 -1825
  265. package/dist/meeting/locusMediaRequest.d.ts +0 -74
  266. package/dist/meeting/muteState.d.ts +0 -178
  267. package/dist/meeting/request.d.ts +0 -295
  268. package/dist/meeting/request.type.d.ts +0 -11
  269. package/dist/meeting/state.d.ts +0 -9
  270. package/dist/meeting/util.d.ts +0 -119
  271. package/dist/meeting/voicea-meeting.d.ts +0 -16
  272. package/dist/meeting-info/collection.d.ts +0 -20
  273. package/dist/meeting-info/index.d.ts +0 -69
  274. package/dist/meeting-info/meeting-info-v2.d.ts +0 -123
  275. package/dist/meeting-info/request.d.ts +0 -22
  276. package/dist/meeting-info/util.d.ts +0 -2
  277. package/dist/meeting-info/utilv2.d.ts +0 -2
  278. package/dist/meetings/collection.d.ts +0 -40
  279. package/dist/meetings/index.d.ts +0 -390
  280. package/dist/meetings/meetings.types.d.ts +0 -4
  281. package/dist/meetings/request.d.ts +0 -27
  282. package/dist/meetings/util.d.ts +0 -18
  283. package/dist/member/index.d.ts +0 -160
  284. package/dist/member/member.types.js +0 -17
  285. package/dist/member/member.types.js.map +0 -1
  286. package/dist/member/types.d.ts +0 -32
  287. package/dist/member/util.d.ts +0 -2
  288. package/dist/members/collection.d.ts +0 -29
  289. package/dist/members/index.d.ts +0 -353
  290. package/dist/members/request.d.ts +0 -114
  291. package/dist/members/types.d.ts +0 -25
  292. package/dist/members/util.d.ts +0 -215
  293. package/dist/metrics/config.js +0 -276
  294. package/dist/metrics/config.js.map +0 -1
  295. package/dist/metrics/constants.d.ts +0 -70
  296. package/dist/metrics/index.d.ts +0 -45
  297. package/dist/multistream/mediaRequestManager.d.ts +0 -119
  298. package/dist/multistream/receiveSlot.d.ts +0 -68
  299. package/dist/multistream/receiveSlotManager.d.ts +0 -56
  300. package/dist/multistream/remoteMedia.d.ts +0 -72
  301. package/dist/multistream/remoteMediaGroup.d.ts +0 -49
  302. package/dist/multistream/remoteMediaManager.d.ts +0 -300
  303. package/dist/multistream/sendSlotManager.d.ts +0 -69
  304. package/dist/networkQualityMonitor/index.d.ts +0 -70
  305. package/dist/networkQualityMonitor/index.js +0 -221
  306. package/dist/networkQualityMonitor/index.js.map +0 -1
  307. package/dist/peer-connection-manager/index.js +0 -671
  308. package/dist/peer-connection-manager/index.js.map +0 -1
  309. package/dist/peer-connection-manager/util.js +0 -109
  310. package/dist/peer-connection-manager/util.js.map +0 -1
  311. package/dist/personal-meeting-room/index.d.ts +0 -47
  312. package/dist/personal-meeting-room/request.d.ts +0 -14
  313. package/dist/personal-meeting-room/util.d.ts +0 -2
  314. package/dist/reachability/clusterReachability.d.ts +0 -109
  315. package/dist/reachability/index.d.ts +0 -105
  316. package/dist/reachability/request.d.ts +0 -39
  317. package/dist/reachability/util.d.ts +0 -8
  318. package/dist/reactions/constants.d.ts +0 -3
  319. package/dist/reactions/reactions.d.ts +0 -4
  320. package/dist/reactions/reactions.type.d.ts +0 -52
  321. package/dist/reconnection-manager/index.d.ts +0 -136
  322. package/dist/recording-controller/enums.d.ts +0 -7
  323. package/dist/recording-controller/index.d.ts +0 -207
  324. package/dist/recording-controller/util.d.ts +0 -14
  325. package/dist/roap/collection.js +0 -62
  326. package/dist/roap/collection.js.map +0 -1
  327. package/dist/roap/handler.js +0 -275
  328. package/dist/roap/handler.js.map +0 -1
  329. package/dist/roap/index.d.ts +0 -86
  330. package/dist/roap/request.d.ts +0 -39
  331. package/dist/roap/state.js +0 -126
  332. package/dist/roap/state.js.map +0 -1
  333. package/dist/roap/turnDiscovery.d.ts +0 -155
  334. package/dist/roap/util.js +0 -75
  335. package/dist/roap/util.js.map +0 -1
  336. package/dist/rtcMetrics/constants.d.ts +0 -4
  337. package/dist/rtcMetrics/constants.js +0 -11
  338. package/dist/rtcMetrics/constants.js.map +0 -1
  339. package/dist/rtcMetrics/index.d.ts +0 -61
  340. package/dist/rtcMetrics/index.js +0 -197
  341. package/dist/rtcMetrics/index.js.map +0 -1
  342. package/dist/statsAnalyzer/global.d.ts +0 -36
  343. package/dist/statsAnalyzer/global.js +0 -126
  344. package/dist/statsAnalyzer/global.js.map +0 -1
  345. package/dist/statsAnalyzer/index.d.ts +0 -217
  346. package/dist/statsAnalyzer/index.js +0 -1013
  347. package/dist/statsAnalyzer/index.js.map +0 -1
  348. package/dist/statsAnalyzer/mqaUtil.d.ts +0 -48
  349. package/dist/statsAnalyzer/mqaUtil.js +0 -179
  350. package/dist/statsAnalyzer/mqaUtil.js.map +0 -1
  351. package/dist/transcription/index.d.ts +0 -64
  352. package/dist/types/common/errors/reconnection-in-progress.d.ts +0 -9
  353. package/dist/types/mediaQualityMetrics/config.d.ts +0 -241
  354. package/dist/types/networkQualityMonitor/index.d.ts +0 -70
  355. package/dist/types/rtcMetrics/constants.d.ts +0 -4
  356. package/dist/types/rtcMetrics/index.d.ts +0 -71
  357. package/dist/types/statsAnalyzer/global.d.ts +0 -36
  358. package/dist/types/statsAnalyzer/index.d.ts +0 -217
  359. package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -48
  360. package/dist/webinar/collection.d.ts +0 -16
  361. package/dist/webinar/index.d.ts +0 -5
@@ -21,6 +21,7 @@ var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/
21
21
  var _values = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/values"));
22
22
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
23
23
  var _map = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/map"));
24
+ var _isNan = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/number/is-nan"));
24
25
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
25
26
  var _weakMap = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/weak-map"));
26
27
  var _typeof2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/typeof"));
@@ -506,6 +507,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
506
507
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "allowMediaInLobby", void 0);
507
508
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "localShareInstanceId", void 0);
508
509
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "remoteShareInstanceId", void 0);
510
+ (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "shareCAEventSentStatus", void 0);
509
511
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "turnDiscoverySkippedReason", void 0);
510
512
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "turnServerUsed", void 0);
511
513
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "areVoiceaEventsSetup", false);
@@ -560,6 +562,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
560
562
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "rtcMetrics", void 0);
561
563
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "uploadLogsTimer", void 0);
562
564
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "logUploadIntervalIndex", void 0);
565
+ (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "mediaServerIp", void 0);
563
566
  /**
564
567
  * Callback called when a relay event is received from meeting LLM Connection
565
568
  * @param {RelayEvent} e Event object coming from LLM Connection
@@ -646,7 +649,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
646
649
  rawError: error
647
650
  }
648
651
  });
649
- } else if (error instanceof _internalMediaCore.Errors.SdpOfferHandlingError || error instanceof _internalMediaCore.Errors.SdpAnswerHandlingError) {
652
+ } else if (error instanceof _internalMediaCore.Errors.SdpOfferHandlingError) {
650
653
  sendBehavioralMetric(_constants2.default.PEERCONNECTION_FAILURE, error, _this.correlationId);
651
654
 
652
655
  // @ts-ignore
@@ -660,6 +663,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
660
663
  rawError: error
661
664
  }
662
665
  });
666
+ } else if (error instanceof _internalMediaCore.Errors.SdpAnswerHandlingError) {
667
+ sendBehavioralMetric(_constants2.default.PEERCONNECTION_FAILURE, error, _this.correlationId);
668
+
669
+ // @ts-ignore
670
+ _this.webex.internal.newMetrics.submitClientEvent({
671
+ name: 'client.media-engine.remote-sdp-received',
672
+ payload: {
673
+ canProceed: false
674
+ },
675
+ options: {
676
+ meetingId: _this.id,
677
+ rawError: error
678
+ }
679
+ });
680
+ if (_this.deferSDPAnswer) {
681
+ clearTimeout(_this.sdpResponseTimer);
682
+ _this.sdpResponseTimer = undefined;
683
+ _this.deferSDPAnswer.reject();
684
+ }
663
685
  } else if (error instanceof _internalMediaCore.Errors.SdpError) {
664
686
  // this covers also the case of Errors.IceGatheringError which extends Errors.SdpError
665
687
  sendBehavioralMetric(_constants2.default.INVALID_ICE_CANDIDATE, error, _this.correlationId);
@@ -685,6 +707,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
685
707
  */
686
708
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "roapMessageReceived", function (roapMessage) {
687
709
  var mediaServer = roapMessage.messageType === 'ANSWER' ? _util3.default.getMediaServer(roapMessage.sdp) : undefined;
710
+ var mediaServerIp = roapMessage.messageType === 'ANSWER' ? _util3.default.getMediaServerIp(roapMessage.sdp) : undefined;
688
711
  if (_this.isMultistream && mediaServer && mediaServer !== 'homer') {
689
712
  throw new _multistreamNotSupportedError.default("Client asked for multistream backend (Homer), but got ".concat(mediaServer, " instead"));
690
713
  }
@@ -692,6 +715,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
692
715
  if (mediaServer) {
693
716
  _this.mediaProperties.webrtcMediaConnection.mediaServer = mediaServer;
694
717
  }
718
+ if (_this.isMultistream && mediaServerIp) {
719
+ _this.mediaServerIp = mediaServerIp;
720
+ }
695
721
  });
696
722
  /**
697
723
  * This function makes sure we send the right metrics when local and remote SDPs are processed/generated
@@ -1034,18 +1060,20 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1034
1060
  * @memberof Meetings
1035
1061
  */
1036
1062
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "setupStatsAnalyzerEventHandlers", function () {
1037
- _this.statsAnalyzer.on(_internalMediaCore.StatsAnalyzerEventNames.MEDIA_QUALITY, function (options) {
1038
- var _this$webex$meetings$;
1039
- // TODO: might have to send the same event to the developer
1040
- // Add ip address info if geo hint is present
1041
- // @ts-ignore fix type
1042
- options.data.intervalMetadata.peerReflexiveIP =
1043
- // @ts-ignore
1044
- ((_this$webex$meetings$ = _this.webex.meetings.geoHintInfo) === null || _this$webex$meetings$ === void 0 ? void 0 : _this$webex$meetings$.clientAddress) || options.data.intervalMetadata.peerReflexiveIP || _constants.MQA_STATS.DEFAULT_IP;
1045
- var members = _this.getMembers().membersCollection.members;
1063
+ _this.statsAnalyzer.on(_internalMediaCore.StatsAnalyzerEventNames.MEDIA_QUALITY, function (event) {
1064
+ // Add IP address from geoHintInfo if missing.
1065
+ if (event.data.intervalMetadata.maskedPeerReflexiveIP === '0.0.0.0') {
1066
+ var _this$webex$meetings$;
1067
+ // @ts-ignore fix type
1068
+ var clientAddressFromGeoHint = (_this$webex$meetings$ = _this.webex.meetings.geoHintInfo) === null || _this$webex$meetings$ === void 0 ? void 0 : _this$webex$meetings$.clientAddress;
1069
+ if (clientAddressFromGeoHint) {
1070
+ event.data.intervalMetadata.maskedPeerReflexiveIP = _internalPluginMetrics.CallDiagnosticUtils.anonymizeIPAddress(clientAddressFromGeoHint);
1071
+ }
1072
+ }
1046
1073
 
1047
- // Count members that are in the meeting
1048
- options.data.intervalMetadata.meetingUserCount = (0, _values.default)(members).filter(function (member) {
1074
+ // Count members that are in the meeting.
1075
+ var members = _this.getMembers().membersCollection.members;
1076
+ event.data.intervalMetadata.meetingUserCount = (0, _values.default)(members).filter(function (member) {
1049
1077
  return member.isInMeeting;
1050
1078
  }).length;
1051
1079
 
@@ -1054,10 +1082,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1054
1082
  name: 'client.mediaquality.event',
1055
1083
  options: {
1056
1084
  meetingId: _this.id,
1057
- networkType: options.data.networkType
1085
+ networkType: _this.statsAnalyzer.getNetworkType()
1058
1086
  },
1059
1087
  payload: {
1060
- intervals: [options.data]
1088
+ intervals: [event.data]
1061
1089
  }
1062
1090
  });
1063
1091
  });
@@ -1066,85 +1094,101 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1066
1094
  file: 'meeting/index',
1067
1095
  function: 'addMedia'
1068
1096
  }, _constants.EVENT_TRIGGERS.MEETING_MEDIA_LOCAL_STARTED, data);
1069
- // @ts-ignore
1070
- _this.webex.internal.newMetrics.submitClientEvent({
1071
- name: 'client.media.tx.start',
1072
- payload: {
1073
- mediaType: data.mediaType,
1074
- shareInstanceId: data.mediaType === 'share' ? _this.localShareInstanceId : undefined
1075
- },
1076
- options: {
1077
- meetingId: _this.id
1097
+ if (data.mediaType !== 'share' || !_this.shareCAEventSentStatus.transmitStart) {
1098
+ // @ts-ignore
1099
+ _this.webex.internal.newMetrics.submitClientEvent({
1100
+ name: 'client.media.tx.start',
1101
+ payload: {
1102
+ mediaType: data.mediaType,
1103
+ shareInstanceId: data.mediaType === 'share' ? _this.localShareInstanceId : undefined
1104
+ },
1105
+ options: {
1106
+ meetingId: _this.id
1107
+ }
1108
+ });
1109
+ if (data.mediaType === 'share') {
1110
+ _this.shareCAEventSentStatus.transmitStart = true;
1078
1111
  }
1079
- });
1112
+ }
1080
1113
  });
1081
1114
  _this.statsAnalyzer.on(_internalMediaCore.StatsAnalyzerEventNames.LOCAL_MEDIA_STOPPED, function (data) {
1082
- // @ts-ignore
1083
- _this.webex.internal.newMetrics.submitClientEvent({
1084
- name: 'client.media.tx.stop',
1085
- payload: {
1086
- mediaType: data.mediaType,
1087
- shareInstanceId: data.mediaType === 'share' ? _this.localShareInstanceId : undefined
1088
- },
1089
- options: {
1090
- meetingId: _this.id
1115
+ if (data.mediaType !== 'share' || !_this.shareCAEventSentStatus.transmitStop) {
1116
+ // @ts-ignore
1117
+ _this.webex.internal.newMetrics.submitClientEvent({
1118
+ name: 'client.media.tx.stop',
1119
+ payload: {
1120
+ mediaType: data.mediaType,
1121
+ shareInstanceId: data.mediaType === 'share' ? _this.localShareInstanceId : undefined
1122
+ },
1123
+ options: {
1124
+ meetingId: _this.id
1125
+ }
1126
+ });
1127
+ if (data.mediaType === 'share') {
1128
+ _this.shareCAEventSentStatus.transmitStop = true;
1091
1129
  }
1092
- });
1130
+ }
1093
1131
  });
1094
1132
  _this.statsAnalyzer.on(_internalMediaCore.StatsAnalyzerEventNames.REMOTE_MEDIA_STARTED, function (data) {
1095
1133
  _triggerProxy.default.trigger((0, _assertThisInitialized2.default)(_this), {
1096
1134
  file: 'meeting/index',
1097
1135
  function: 'addMedia'
1098
1136
  }, _constants.EVENT_TRIGGERS.MEETING_MEDIA_REMOTE_STARTED, data);
1099
- // @ts-ignore
1100
- _this.webex.internal.newMetrics.submitClientEvent({
1101
- name: 'client.media.rx.start',
1102
- payload: {
1103
- mediaType: data.mediaType,
1104
- shareInstanceId: data.mediaType === 'share' ? _this.remoteShareInstanceId : undefined
1105
- },
1106
- options: {
1107
- meetingId: _this.id
1108
- }
1109
- });
1110
- if (data.mediaType === 'share') {
1137
+ if (data.mediaType !== 'share' || !_this.shareCAEventSentStatus.receiveStart) {
1111
1138
  // @ts-ignore
1112
1139
  _this.webex.internal.newMetrics.submitClientEvent({
1113
- name: 'client.media.render.start',
1140
+ name: 'client.media.rx.start',
1114
1141
  payload: {
1115
- mediaType: 'share',
1116
- shareInstanceId: _this.remoteShareInstanceId
1142
+ mediaType: data.mediaType,
1143
+ shareInstanceId: data.mediaType === 'share' ? _this.remoteShareInstanceId : undefined
1117
1144
  },
1118
1145
  options: {
1119
1146
  meetingId: _this.id
1120
1147
  }
1121
1148
  });
1149
+ if (data.mediaType === 'share') {
1150
+ // @ts-ignore
1151
+ _this.webex.internal.newMetrics.submitClientEvent({
1152
+ name: 'client.media.render.start',
1153
+ payload: {
1154
+ mediaType: 'share',
1155
+ shareInstanceId: _this.remoteShareInstanceId
1156
+ },
1157
+ options: {
1158
+ meetingId: _this.id
1159
+ }
1160
+ });
1161
+ _this.shareCAEventSentStatus.receiveStart = true;
1162
+ }
1122
1163
  }
1123
1164
  });
1124
1165
  _this.statsAnalyzer.on(_internalMediaCore.StatsAnalyzerEventNames.REMOTE_MEDIA_STOPPED, function (data) {
1125
- // @ts-ignore
1126
- _this.webex.internal.newMetrics.submitClientEvent({
1127
- name: 'client.media.rx.stop',
1128
- payload: {
1129
- mediaType: data.mediaType,
1130
- shareInstanceId: data.mediaType === 'share' ? _this.remoteShareInstanceId : undefined
1131
- },
1132
- options: {
1133
- meetingId: _this.id
1134
- }
1135
- });
1136
- if (data.mediaType === 'share') {
1166
+ if (data.mediaType !== 'share' || !_this.shareCAEventSentStatus.receiveStop) {
1137
1167
  // @ts-ignore
1138
1168
  _this.webex.internal.newMetrics.submitClientEvent({
1139
- name: 'client.media.render.stop',
1169
+ name: 'client.media.rx.stop',
1140
1170
  payload: {
1141
- mediaType: 'share',
1142
- shareInstanceId: _this.remoteShareInstanceId
1171
+ mediaType: data.mediaType,
1172
+ shareInstanceId: data.mediaType === 'share' ? _this.remoteShareInstanceId : undefined
1143
1173
  },
1144
1174
  options: {
1145
1175
  meetingId: _this.id
1146
1176
  }
1147
1177
  });
1178
+ if (data.mediaType === 'share') {
1179
+ // @ts-ignore
1180
+ _this.webex.internal.newMetrics.submitClientEvent({
1181
+ name: 'client.media.render.stop',
1182
+ payload: {
1183
+ mediaType: 'share',
1184
+ shareInstanceId: _this.remoteShareInstanceId
1185
+ },
1186
+ options: {
1187
+ meetingId: _this.id
1188
+ }
1189
+ });
1190
+ _this.shareCAEventSentStatus.receiveStop = true;
1191
+ }
1148
1192
  }
1149
1193
  });
1150
1194
  });
@@ -1282,8 +1326,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1282
1326
  * @returns {undefined}
1283
1327
  */
1284
1328
  (0, _defineProperty3.default)((0, _assertThisInitialized2.default)(_this), "handleShareVideoStreamMuteStateChange", function (muted) {
1285
- var _this$statsAnalyzer, _this$mediaProperties3, _this$mediaProperties4;
1329
+ var _this$mediaProperties3, _this$mediaProperties4, _this$statsAnalyzer;
1286
1330
  _loggerProxy.default.logger.log("Meeting:index#handleShareVideoStreamMuteStateChange --> Share video stream mute state changed to muted ".concat(muted));
1331
+ var shareVideoStreamSettings = (_this$mediaProperties3 = _this.mediaProperties) === null || _this$mediaProperties3 === void 0 ? void 0 : (_this$mediaProperties4 = _this$mediaProperties3.shareVideoStream) === null || _this$mediaProperties4 === void 0 ? void 0 : _this$mediaProperties4.getSettings();
1287
1332
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_VIDEO_MUTE_STATE_CHANGE, {
1288
1333
  correlationId: _this.correlationId,
1289
1334
  muted: muted,
@@ -1292,8 +1337,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1292
1337
  // SDK to TypeScript 5, which may affect other packages, use bracket notation for now, since
1293
1338
  // all we're doing here is adding metrics.
1294
1339
  // eslint-disable-next-line dot-notation
1295
- displaySurface: (_this$mediaProperties3 = _this.mediaProperties) === null || _this$mediaProperties3 === void 0 ? void 0 : (_this$mediaProperties4 = _this$mediaProperties3.shareVideoStream) === null || _this$mediaProperties4 === void 0 ? void 0 : _this$mediaProperties4.getSettings()['displaySurface'],
1296
- isMultistream: _this.isMultistream
1340
+ displaySurface: shareVideoStreamSettings === null || shareVideoStreamSettings === void 0 ? void 0 : shareVideoStreamSettings['displaySurface'],
1341
+ isMultistream: _this.isMultistream,
1342
+ frameRate: shareVideoStreamSettings === null || shareVideoStreamSettings === void 0 ? void 0 : shareVideoStreamSettings.frameRate
1297
1343
  });
1298
1344
  });
1299
1345
  /**
@@ -1996,7 +2042,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
1996
2042
  captions: [],
1997
2043
  isListening: false,
1998
2044
  commandText: '',
1999
- languageOptions: {},
2045
+ languageOptions: {
2046
+ currentSpokenLanguage: 'en'
2047
+ },
2000
2048
  showCaptionBox: false,
2001
2049
  transcribingRequestStatus: 'INACTIVE',
2002
2050
  isCaptioning: false,
@@ -2084,6 +2132,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2084
2132
  */
2085
2133
  _this.remoteShareInstanceId = null;
2086
2134
 
2135
+ /**
2136
+ * Status used for ensuring we do not oversend metrics
2137
+ * @instance
2138
+ * @private
2139
+ * @memberof Meeting
2140
+ */
2141
+ _this.shareCAEventSentStatus = {
2142
+ transmitStart: false,
2143
+ transmitStop: false,
2144
+ receiveStart: false,
2145
+ receiveStop: false
2146
+ };
2147
+
2087
2148
  /**
2088
2149
  * The class that helps to control recording functions: start, stop, pause, resume, etc
2089
2150
  * @instance
@@ -2245,6 +2306,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2245
2306
  * @memberof Meeting
2246
2307
  */
2247
2308
  (0, _classPrivateFieldSet2.default)((0, _assertThisInitialized2.default)(_this), _isoLocalClientMeetingJoinTime, undefined);
2309
+
2310
+ // We clear the error cache of CA events on every new meeting instance
2311
+ // @ts-ignore - Fix type
2312
+ _this.webex.internal.newMetrics.callDiagnosticMetrics.clearErrorCache();
2313
+
2314
+ /**
2315
+ * IP Address of the remote media server
2316
+ * @instance
2317
+ * @type {string}
2318
+ * @private
2319
+ * @memberof Meeting
2320
+ */
2321
+ _this.mediaServerIp = undefined;
2248
2322
  return _this;
2249
2323
  }
2250
2324
 
@@ -2303,6 +2377,44 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2303
2377
  this.callStateForMetrics.correlationId = correlationId;
2304
2378
  }
2305
2379
 
2380
+ /**
2381
+ * Getter - Returns callStateForMetrics.userNameInput
2382
+ * @returns {string}
2383
+ */
2384
+ }, {
2385
+ key: "userNameInput",
2386
+ get: function get() {
2387
+ var _this$callStateForMet;
2388
+ return (_this$callStateForMet = this.callStateForMetrics) === null || _this$callStateForMet === void 0 ? void 0 : _this$callStateForMet.userNameInput;
2389
+ }
2390
+
2391
+ /**
2392
+ * Setter - sets callStateForMetrics.userNameInput
2393
+ * @param {string} userNameInput
2394
+ */,
2395
+ set: function set(userNameInput) {
2396
+ this.callStateForMetrics.userNameInput = userNameInput;
2397
+ }
2398
+
2399
+ /**
2400
+ * Getter - Returns callStateForMetrics.emailInput
2401
+ * @returns {string}
2402
+ */
2403
+ }, {
2404
+ key: "emailInput",
2405
+ get: function get() {
2406
+ var _this$callStateForMet2;
2407
+ return (_this$callStateForMet2 = this.callStateForMetrics) === null || _this$callStateForMet2 === void 0 ? void 0 : _this$callStateForMet2.emailInput;
2408
+ }
2409
+
2410
+ /**
2411
+ * Setter - sets callStateForMetrics.emailInput
2412
+ * @param {string} emailInput
2413
+ */,
2414
+ set: function set(emailInput) {
2415
+ this.callStateForMetrics.emailInput = emailInput;
2416
+ }
2417
+
2306
2418
  /**
2307
2419
  * Getter - Returns callStateForMetrics.sessionCorrelationId
2308
2420
  * @returns {string}
@@ -2332,6 +2444,31 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
2332
2444
  return (0, _classPrivateFieldGet2.default)(this, _isoLocalClientMeetingJoinTime);
2333
2445
  }
2334
2446
 
2447
+ /**
2448
+ * Setter - sets isoLocalClientMeetingJoinTime
2449
+ * This will be set once on meeting join, and not updated again
2450
+ * this will always produce an ISO string
2451
+ * If the iso string is invalid, it will fallback to the current system time
2452
+ * @param {string | undefined} time
2453
+ */,
2454
+ set: function set(time) {
2455
+ var fallback = new Date().toISOString();
2456
+ if (!time) {
2457
+ (0, _classPrivateFieldSet2.default)(this, _isoLocalClientMeetingJoinTime, fallback);
2458
+ } else {
2459
+ var date = new Date(time);
2460
+
2461
+ // Check if the date is valid
2462
+ if ((0, _isNan.default)(date.getTime())) {
2463
+ _loggerProxy.default.logger.info( // @ts-ignore
2464
+ "Meeting:index#isoLocalClientMeetingJoinTime --> Invalid date provided: ".concat(time, ". Falling back to system clock."));
2465
+ (0, _classPrivateFieldSet2.default)(this, _isoLocalClientMeetingJoinTime, fallback);
2466
+ } else {
2467
+ (0, _classPrivateFieldSet2.default)(this, _isoLocalClientMeetingJoinTime, date.toISOString());
2468
+ }
2469
+ }
2470
+ }
2471
+
2335
2472
  /**
2336
2473
  * Set meeting info and trigger `MEETING_INFO_AVAILABLE` event
2337
2474
  * @param {any} info
@@ -3171,6 +3308,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3171
3308
  this.locusInfo.on(_constants.EVENTS.LOCUS_INFO_UPDATE_PARTICIPANTS, function (payload) {
3172
3309
  _this13.members.locusParticipantsUpdate(payload);
3173
3310
  });
3311
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.PARTICIPANT_REASON_CHANGED, function (payload) {
3312
+ _triggerProxy.default.trigger(_this13, {
3313
+ file: 'meeting/index',
3314
+ function: 'setUpLocusParticipantsListener'
3315
+ }, _constants.EVENT_TRIGGERS.MEETING_PARTICIPANT_REASON_CHANGED, {
3316
+ payload: payload
3317
+ });
3318
+ });
3174
3319
  }
3175
3320
 
3176
3321
  /**
@@ -3257,8 +3402,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3257
3402
  }
3258
3403
  }
3259
3404
  });
3260
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_MANUAL_CAPTION_UPDATED, function (_ref12) {
3261
- var enable = _ref12.enable;
3405
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED, function (_ref12) {
3406
+ var spokenLanguage = _ref12.spokenLanguage;
3407
+ if (spokenLanguage) {
3408
+ var _this14$transcription;
3409
+ if ((_this14$transcription = _this14.transcription) !== null && _this14$transcription !== void 0 && _this14$transcription.languageOptions) {
3410
+ _this14.transcription.languageOptions.currentSpokenLanguage = spokenLanguage;
3411
+ }
3412
+ // @ts-ignore
3413
+ _this14.webex.internal.voicea.onSpokenLanguageUpdate(spokenLanguage);
3414
+ _triggerProxy.default.trigger(_this14, {
3415
+ file: 'meeting/index',
3416
+ function: 'setupLocusControlsListener'
3417
+ }, _constants.EVENT_TRIGGERS.MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED, {
3418
+ spokenLanguage: spokenLanguage
3419
+ });
3420
+ }
3421
+ });
3422
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_MANUAL_CAPTION_UPDATED, function (_ref13) {
3423
+ var enable = _ref13.enable;
3262
3424
  _triggerProxy.default.trigger(_this14, {
3263
3425
  file: 'meeting/index',
3264
3426
  function: 'setupLocusControlsListener'
@@ -3266,24 +3428,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3266
3428
  enable: enable
3267
3429
  });
3268
3430
  });
3269
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED, function (_ref13) {
3270
- var breakout = _ref13.breakout;
3431
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED, function (_ref14) {
3432
+ var breakout = _ref14.breakout;
3271
3433
  _this14.breakouts.updateBreakout(breakout);
3272
3434
  _triggerProxy.default.trigger(_this14, {
3273
3435
  file: 'meeting/index',
3274
3436
  function: 'setupLocusControlsListener'
3275
3437
  }, _constants.EVENT_TRIGGERS.MEETING_BREAKOUTS_UPDATE);
3276
3438
  });
3277
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_INTERPRETATION_UPDATED, function (_ref14) {
3278
- var interpretation = _ref14.interpretation;
3439
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_INTERPRETATION_UPDATED, function (_ref15) {
3440
+ var interpretation = _ref15.interpretation;
3279
3441
  _this14.simultaneousInterpretation.updateInterpretation(interpretation);
3280
3442
  _triggerProxy.default.trigger(_this14, {
3281
3443
  file: 'meeting/index',
3282
3444
  function: 'setupLocusControlsListener'
3283
3445
  }, _constants.EVENT_TRIGGERS.MEETING_INTERPRETATION_UPDATE);
3284
3446
  });
3285
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED, function (_ref15) {
3286
- var entryExitTone = _ref15.entryExitTone;
3447
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED, function (_ref16) {
3448
+ var entryExitTone = _ref16.entryExitTone;
3287
3449
  _triggerProxy.default.trigger(_this14, {
3288
3450
  file: 'meeting/index',
3289
3451
  function: 'setupLocusControlsListener'
@@ -3291,8 +3453,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3291
3453
  entryExitTone: entryExitTone
3292
3454
  });
3293
3455
  });
3294
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED, function (_ref16) {
3295
- var state = _ref16.state;
3456
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED, function (_ref17) {
3457
+ var state = _ref17.state;
3296
3458
  _triggerProxy.default.trigger(_this14, {
3297
3459
  file: 'meeting/index',
3298
3460
  function: 'setupLocusControlsListener'
@@ -3300,8 +3462,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3300
3462
  state: state
3301
3463
  });
3302
3464
  });
3303
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED, function (_ref17) {
3304
- var state = _ref17.state;
3465
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED, function (_ref18) {
3466
+ var state = _ref18.state;
3305
3467
  _triggerProxy.default.trigger(_this14, {
3306
3468
  file: 'meeting/index',
3307
3469
  function: 'setupLocusControlsListener'
@@ -3309,8 +3471,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3309
3471
  state: state
3310
3472
  });
3311
3473
  });
3312
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED, function (_ref18) {
3313
- var state = _ref18.state;
3474
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED, function (_ref19) {
3475
+ var state = _ref19.state;
3314
3476
  _triggerProxy.default.trigger(_this14, {
3315
3477
  file: 'meeting/index',
3316
3478
  function: 'setupLocusControlsListener'
@@ -3318,8 +3480,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3318
3480
  state: state
3319
3481
  });
3320
3482
  });
3321
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED, function (_ref19) {
3322
- var state = _ref19.state;
3483
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED, function (_ref20) {
3484
+ var state = _ref20.state;
3323
3485
  _triggerProxy.default.trigger(_this14, {
3324
3486
  file: 'meeting/index',
3325
3487
  function: 'setupLocusControlsListener'
@@ -3327,8 +3489,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3327
3489
  state: state
3328
3490
  });
3329
3491
  });
3330
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED, function (_ref20) {
3331
- var state = _ref20.state;
3492
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED, function (_ref21) {
3493
+ var state = _ref21.state;
3332
3494
  _triggerProxy.default.trigger(_this14, {
3333
3495
  file: 'meeting/index',
3334
3496
  function: 'setupLocusControlsListener'
@@ -3336,8 +3498,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3336
3498
  state: state
3337
3499
  });
3338
3500
  });
3339
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED, function (_ref21) {
3340
- var state = _ref21.state;
3501
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED, function (_ref22) {
3502
+ var state = _ref22.state;
3341
3503
  _triggerProxy.default.trigger(_this14, {
3342
3504
  file: 'meeting/index',
3343
3505
  function: 'setupLocusControlsListener'
@@ -3345,8 +3507,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3345
3507
  state: state
3346
3508
  });
3347
3509
  });
3348
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_WEBCAST_CHANGED, function (_ref22) {
3349
- var state = _ref22.state;
3510
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_WEBCAST_CHANGED, function (_ref23) {
3511
+ var state = _ref23.state;
3350
3512
  _triggerProxy.default.trigger(_this14, {
3351
3513
  file: 'meeting/index',
3352
3514
  function: 'setupLocusControlsListener'
@@ -3354,8 +3516,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3354
3516
  state: state
3355
3517
  });
3356
3518
  });
3357
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_FULL_CHANGED, function (_ref23) {
3358
- var state = _ref23.state;
3519
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_FULL_CHANGED, function (_ref24) {
3520
+ var state = _ref24.state;
3359
3521
  _triggerProxy.default.trigger(_this14, {
3360
3522
  file: 'meeting/index',
3361
3523
  function: 'setupLocusControlsListener'
@@ -3363,8 +3525,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3363
3525
  state: state
3364
3526
  });
3365
3527
  });
3366
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_PRACTICE_SESSION_STATUS_UPDATED, function (_ref24) {
3367
- var state = _ref24.state;
3528
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_PRACTICE_SESSION_STATUS_UPDATED, function (_ref25) {
3529
+ var state = _ref25.state;
3368
3530
  _this14.webinar.updatePracticeSessionStatus(state);
3369
3531
  _triggerProxy.default.trigger(_this14, {
3370
3532
  file: 'meeting/index',
@@ -3373,8 +3535,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3373
3535
  state: state
3374
3536
  });
3375
3537
  });
3376
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_STAGE_VIEW_UPDATED, function (_ref25) {
3377
- var state = _ref25.state;
3538
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_STAGE_VIEW_UPDATED, function (_ref26) {
3539
+ var state = _ref26.state;
3378
3540
  _triggerProxy.default.trigger(_this14, {
3379
3541
  file: 'meeting/index',
3380
3542
  function: 'setupLocusControlsListener'
@@ -3382,8 +3544,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3382
3544
  state: state
3383
3545
  });
3384
3546
  });
3385
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED, function (_ref26) {
3386
- var state = _ref26.state;
3547
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED, function (_ref27) {
3548
+ var state = _ref27.state;
3387
3549
  _triggerProxy.default.trigger(_this14, {
3388
3550
  file: 'meeting/index',
3389
3551
  function: 'setupLocusControlsListener'
@@ -3391,6 +3553,33 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3391
3553
  state: state
3392
3554
  });
3393
3555
  });
3556
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_ANNOTATION_CHANGED, function (_ref28) {
3557
+ var state = _ref28.state;
3558
+ _triggerProxy.default.trigger(_this14, {
3559
+ file: 'meeting/index',
3560
+ function: 'setupLocusControlsListener'
3561
+ }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_ANNOTATION_UPDATED, {
3562
+ state: state
3563
+ });
3564
+ });
3565
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED, function (_ref29) {
3566
+ var state = _ref29.state;
3567
+ _triggerProxy.default.trigger(_this14, {
3568
+ file: 'meeting/index',
3569
+ function: 'setupLocusControlsListener'
3570
+ }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_REMOTE_DESKTOP_CONTROL_UPDATED, {
3571
+ state: state
3572
+ });
3573
+ });
3574
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_POLLING_QA_CHANGED, function (_ref30) {
3575
+ var state = _ref30.state;
3576
+ _triggerProxy.default.trigger(_this14, {
3577
+ file: 'meeting/index',
3578
+ function: 'setupLocusControlsListener'
3579
+ }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_POLLING_QA_UPDATED, {
3580
+ state: state
3581
+ });
3582
+ });
3394
3583
  }
3395
3584
 
3396
3585
  /**
@@ -3430,7 +3619,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3430
3619
  var _this15 = this;
3431
3620
  // Will get triggered on local and remote share
3432
3621
  this.locusInfo.on(_constants.EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES, /*#__PURE__*/function () {
3433
- var _ref27 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(payload) {
3622
+ var _ref31 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(payload) {
3434
3623
  var _payload$previous, _payload$previous2;
3435
3624
  var _payload$current, contentShare, whiteboardShare, previousContentShare, previousWhiteboardShare, newShareStatus, _this15$locusInfo, _this15$locusInfo$inf, _this15$webinar, oldShareStatus, sendStartedSharingRemote, _this15$mediaProperti;
3436
3625
  return _regenerator.default.wrap(function _callee8$(_context8) {
@@ -3516,6 +3705,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3516
3705
  case 26:
3517
3706
  sendStartedSharingRemote = function sendStartedSharingRemote() {
3518
3707
  _this15.remoteShareInstanceId = contentShare.shareInstanceId;
3708
+ _this15.shareCAEventSentStatus.receiveStart = false;
3709
+ _this15.shareCAEventSentStatus.receiveStop = false;
3519
3710
  _triggerProxy.default.trigger(_this15, {
3520
3711
  file: 'meetings/index',
3521
3712
  function: 'remoteShare'
@@ -3589,6 +3780,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3589
3780
  // if we got here, then some remote participant has stolen
3590
3781
  // the presentation from another remote participant
3591
3782
  _this15.remoteShareInstanceId = contentShare.shareInstanceId;
3783
+ _this15.shareCAEventSentStatus.receiveStart = false;
3784
+ _this15.shareCAEventSentStatus.receiveStop = false;
3592
3785
  _triggerProxy.default.trigger(_this15, {
3593
3786
  file: 'meetings/index',
3594
3787
  function: 'remoteShare'
@@ -3629,7 +3822,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3629
3822
  }, _callee8, null, [[27,, 31, 34]]);
3630
3823
  }));
3631
3824
  return function (_x8) {
3632
- return _ref27.apply(this, arguments);
3825
+ return _ref31.apply(this, arguments);
3633
3826
  };
3634
3827
  }());
3635
3828
  }
@@ -3743,8 +3936,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3743
3936
  });
3744
3937
  }
3745
3938
  });
3746
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEETING_INFO_UPDATED, function (_ref28) {
3747
- var isInitializing = _ref28.isInitializing;
3939
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEETING_INFO_UPDATED, function (_ref32) {
3940
+ var isInitializing = _ref32.isInitializing;
3748
3941
  _this19.updateMeetingActions();
3749
3942
  _this19.recordingController.setDisplayHints(_this19.userDisplayHints);
3750
3943
  _this19.recordingController.setUserPolicy(_this19.selfUserPolicies);
@@ -3882,7 +4075,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3882
4075
  _this21.updateLLMConnection();
3883
4076
  });
3884
4077
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST, /*#__PURE__*/function () {
3885
- var _ref29 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(payload) {
4078
+ var _ref33 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(payload) {
3886
4079
  var _this21$rtcMetrics;
3887
4080
  return _regenerator.default.wrap(function _callee9$(_context9) {
3888
4081
  while (1) switch (_context9.prev = _context9.next) {
@@ -3916,7 +4109,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3916
4109
  }, _callee9);
3917
4110
  }));
3918
4111
  return function (_x9) {
3919
- return _ref29.apply(this, arguments);
4112
+ return _ref33.apply(this, arguments);
3920
4113
  };
3921
4114
  }());
3922
4115
 
@@ -4035,7 +4228,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4035
4228
  }
4036
4229
  });
4037
4230
  this.locusInfo.on(_constants.EVENTS.DESTROY_MEETING, /*#__PURE__*/function () {
4038
- var _ref30 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(payload) {
4231
+ var _ref34 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(payload) {
4039
4232
  return _regenerator.default.wrap(function _callee10$(_context10) {
4040
4233
  while (1) switch (_context10.prev = _context10.next) {
4041
4234
  case 0:
@@ -4095,7 +4288,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4095
4288
  }, _callee10, null, [[8, 14]]);
4096
4289
  }));
4097
4290
  return function (_x10) {
4098
- return _ref30.apply(this, arguments);
4291
+ return _ref34.apply(this, arguments);
4099
4292
  };
4100
4293
  }());
4101
4294
  }
@@ -4154,6 +4347,20 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4154
4347
  return this.members.cancelPhoneInvite(invitee);
4155
4348
  }
4156
4349
 
4350
+ /**
4351
+ * Cancel an SIP call invitation made during a meeting
4352
+ * @param {Object} invitee
4353
+ * @param {String} invitee.memberId
4354
+ * @returns {Promise} see #members.cancelSIPInvite
4355
+ * @public
4356
+ * @memberof Meeting
4357
+ */
4358
+ }, {
4359
+ key: "cancelSIPInvite",
4360
+ value: function cancelSIPInvite(invitee) {
4361
+ return this.members.cancelSIPInvite(invitee);
4362
+ }
4363
+
4157
4364
  /**
4158
4365
  * Admit the guest(s) to the call once they are waiting.
4159
4366
  * If the host/cohost is in a breakout session, the locus url
@@ -4197,6 +4404,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4197
4404
  key: "beRightBack",
4198
4405
  value: (function () {
4199
4406
  var _beRightBack = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11(enabled) {
4407
+ var _this24 = this;
4200
4408
  var errorMessage, error, _errorMessage, _error;
4201
4409
  return _regenerator.default.wrap(function _callee11$(_context11) {
4202
4410
  while (1) switch (_context11.prev = _context11.next) {
@@ -4219,7 +4427,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4219
4427
  _loggerProxy.default.logger.error(_error);
4220
4428
  return _context11.abrupt("return", _promise.default.reject(_error));
4221
4429
  case 10:
4222
- return _context11.abrupt("return", this.brbState.enable(enabled, this.sendSlotManager));
4430
+ return _context11.abrupt("return", this.brbState.enable(enabled, this.sendSlotManager).then(function () {
4431
+ if (_this24.audio && enabled) {
4432
+ // locus mutes the participant with brb enabled request,
4433
+ // so we need to explicitly update remote mute for correct logic flow
4434
+ _this24.audio.handleServerRemoteMuteUpdate(_this24, enabled);
4435
+ }
4436
+ }).catch(function (error) {
4437
+ return _promise.default.reject(error);
4438
+ }));
4223
4439
  case 11:
4224
4440
  case "end":
4225
4441
  return _context11.stop();
@@ -4405,7 +4621,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4405
4621
  canAdmitParticipant: _util2.default.canAdmitParticipant(this.userDisplayHints),
4406
4622
  canLock: _util2.default.canUserLock(this.userDisplayHints),
4407
4623
  canUnlock: _util2.default.canUserUnlock(this.userDisplayHints),
4408
- canShareWhiteBoard: _util2.default.canShareWhiteBoard(this.userDisplayHints),
4624
+ canShareWhiteBoard: _util2.default.canShareWhiteBoard(this.userDisplayHints, this.selfUserPolicies),
4409
4625
  canSetDisallowUnmute: _util5.default.canSetDisallowUnmute(this.userDisplayHints),
4410
4626
  canUnsetDisallowUnmute: _util5.default.canUnsetDisallowUnmute(this.userDisplayHints),
4411
4627
  canSetMuteOnEntry: _util5.default.canSetMuteOnEntry(this.userDisplayHints),
@@ -4435,6 +4651,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4435
4651
  canSelectSpokenLanguages: _util2.default.canSelectSpokenLanguages(this.userDisplayHints),
4436
4652
  waitingForOthersToJoin: _util2.default.waitingForOthersToJoin(this.userDisplayHints),
4437
4653
  canSendReactions: _util2.default.canSendReactions(this.inMeetingActions.canSendReactions, this.userDisplayHints),
4654
+ requiresPostMeetingDataConsentPrompt: _util2.default.requiresPostMeetingDataConsentPrompt(this.userDisplayHints),
4438
4655
  canManageBreakout: _util2.default.canManageBreakout(this.userDisplayHints),
4439
4656
  canStartBreakout: _util2.default.canStartBreakout(this.userDisplayHints),
4440
4657
  canBroadcastMessageToBreakout: _util2.default.canBroadcastMessageToBreakout(this.userDisplayHints, this.selfUserPolicies),
@@ -4443,6 +4660,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4443
4660
  canUserAskForHelp: _util2.default.canUserAskForHelp(this.userDisplayHints),
4444
4661
  canUserRenameSelfAndObserved: _util2.default.canUserRenameSelfAndObserved(this.userDisplayHints),
4445
4662
  canUserRenameOthers: _util2.default.canUserRenameOthers(this.userDisplayHints),
4663
+ canMoveToLobby: _util2.default.canMoveToLobby(this.userDisplayHints),
4446
4664
  canMuteAll: _util5.default.hasHints({
4447
4665
  requiredHints: [_constants.DISPLAY_HINTS.MUTE_ALL],
4448
4666
  displayHints: this.userDisplayHints
@@ -4574,6 +4792,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4574
4792
  requiredPolicies: [_constants.SELF_POLICY.SUPPORT_FILE_TRANSFER],
4575
4793
  policies: this.selfUserPolicies
4576
4794
  }),
4795
+ canRealtimeCloseCaption: _util5.default.hasPolicies({
4796
+ requiredPolicies: [_constants.SELF_POLICY.SUPPORT_REALTIME_CLOSE_CAPTION],
4797
+ policies: this.selfUserPolicies
4798
+ }),
4799
+ canRealtimeCloseCaptionManual: _util5.default.hasPolicies({
4800
+ requiredPolicies: [_constants.SELF_POLICY.SUPPORT_REALTIME_CLOSE_CAPTION_MANUAL],
4801
+ policies: this.selfUserPolicies
4802
+ }),
4577
4803
  canChat: _util5.default.hasPolicies({
4578
4804
  requiredPolicies: [_constants.SELF_POLICY.SUPPORT_CHAT],
4579
4805
  policies: this.selfUserPolicies
@@ -4610,6 +4836,30 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4610
4836
  canAnnotate: _util5.default.hasPolicies({
4611
4837
  requiredPolicies: [_constants.SELF_POLICY.SUPPORT_ANNOTATION],
4612
4838
  policies: this.selfUserPolicies
4839
+ }),
4840
+ canEnableAnnotation: _util5.default.hasHints({
4841
+ requiredHints: [_constants.DISPLAY_HINTS.ENABLE_ANNOTATION_MEETING_OPTION],
4842
+ displayHints: this.userDisplayHints
4843
+ }),
4844
+ canDisableAnnotation: _util5.default.hasHints({
4845
+ requiredHints: [_constants.DISPLAY_HINTS.DISABLE_ANNOTATION_MEETING_OPTION],
4846
+ displayHints: this.userDisplayHints
4847
+ }),
4848
+ canEnableRemoteDesktopControl: _util5.default.hasHints({
4849
+ requiredHints: [_constants.DISPLAY_HINTS.ENABLE_RDC_MEETING_OPTION],
4850
+ displayHints: this.userDisplayHints
4851
+ }),
4852
+ canDisableRemoteDesktopControl: _util5.default.hasHints({
4853
+ requiredHints: [_constants.DISPLAY_HINTS.DISABLE_RDC_MEETING_OPTION],
4854
+ displayHints: this.userDisplayHints
4855
+ }),
4856
+ canEnablePollingQA: _util5.default.hasHints({
4857
+ requiredHints: [_constants.DISPLAY_HINTS.ENABLE_ATTENDEE_START_POLLING_QA],
4858
+ displayHints: this.userDisplayHints
4859
+ }),
4860
+ canDisablePollingQA: _util5.default.hasHints({
4861
+ requiredHints: [_constants.DISPLAY_HINTS.DISABLE_ATTENDEE_START_POLLING_QA],
4862
+ displayHints: this.userDisplayHints
4613
4863
  })
4614
4864
  }) || changed;
4615
4865
  }
@@ -4714,7 +4964,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4714
4964
  }, {
4715
4965
  key: "setLogUploadTimer",
4716
4966
  value: function setLogUploadTimer() {
4717
- var _this24 = this;
4967
+ var _this25 = this;
4718
4968
  // 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
4719
4969
  var LOG_UPLOAD_INTERVALS = [0.1, 15, 30, 60]; // in minutes
4720
4970
 
@@ -4725,15 +4975,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4725
4975
  this.logUploadIntervalIndex += 1;
4726
4976
  }
4727
4977
  this.uploadLogsTimer = (0, _commonTimers.safeSetTimeout)(function () {
4728
- _this24.uploadLogsTimer = undefined;
4729
- _this24.uploadLogs();
4978
+ _this25.uploadLogsTimer = undefined;
4979
+ _this25.uploadLogs();
4730
4980
 
4731
4981
  // just as an extra precaution, to avoid uploading logs forever in case something goes wrong
4732
4982
  // and the page remains opened, we stop it if there is no media connection
4733
- if (!_this24.mediaProperties.webrtcMediaConnection) {
4983
+ if (!_this25.mediaProperties.webrtcMediaConnection) {
4734
4984
  return;
4735
4985
  }
4736
- _this24.setLogUploadTimer();
4986
+ _this25.setLogUploadTimer();
4737
4987
  }, delay);
4738
4988
  }
4739
4989
 
@@ -4800,7 +5050,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4800
5050
  }, {
4801
5051
  key: "closeRemoteStreams",
4802
5052
  value: function closeRemoteStreams() {
4803
- var _this25 = this;
5053
+ var _this26 = this;
4804
5054
  var _this$mediaProperties6 = this.mediaProperties,
4805
5055
  remoteAudioStream = _this$mediaProperties6.remoteAudioStream,
4806
5056
  remoteVideoStream = _this$mediaProperties6.remoteVideoStream,
@@ -4814,7 +5064,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4814
5064
  */
4815
5065
  // eslint-disable-next-line @typescript-eslint/no-shadow
4816
5066
  var triggerMediaStoppedEvent = function triggerMediaStoppedEvent(mediaType) {
4817
- _triggerProxy.default.trigger(_this25, {
5067
+ _triggerProxy.default.trigger(_this26, {
4818
5068
  file: 'meeting/index',
4819
5069
  function: 'closeRemoteStreams'
4820
5070
  }, _constants.EVENT_TRIGGERS.MEDIA_STOPPED, {
@@ -5122,7 +5372,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5122
5372
  }, {
5123
5373
  key: "setMercuryListener",
5124
5374
  value: function setMercuryListener() {
5125
- var _this26 = this;
5375
+ var _this27 = this;
5126
5376
  // Client will have a socket manager and handle reconnecting to mercury, when we reconnect to mercury
5127
5377
  // if the meeting has active peer connections, it should try to reconnect.
5128
5378
  // @ts-ignore
@@ -5130,33 +5380,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5130
5380
  _loggerProxy.default.logger.info('Meeting:index#setMercuryListener --> Web socket online');
5131
5381
 
5132
5382
  // Only send restore event when it was disconnected before and for connected later
5133
- if (!_this26.hasWebsocketConnected) {
5134
- // @ts-ignore
5135
- _this26.webex.internal.newMetrics.submitClientEvent({
5136
- name: 'client.mercury.connection.restored',
5137
- options: {
5138
- meetingId: _this26.id
5139
- }
5140
- });
5383
+ if (!_this27.hasWebsocketConnected) {
5141
5384
  _metrics.default.sendBehavioralMetric(_constants2.default.MERCURY_CONNECTION_RESTORED, {
5142
- correlation_id: _this26.correlationId
5385
+ correlation_id: _this27.correlationId
5143
5386
  });
5144
5387
  }
5145
- _this26.hasWebsocketConnected = true;
5388
+ _this27.hasWebsocketConnected = true;
5146
5389
  });
5147
5390
 
5148
5391
  // @ts-ignore
5149
5392
  this.webex.internal.mercury.on(_constants.OFFLINE, function () {
5150
5393
  _loggerProxy.default.logger.error('Meeting:index#setMercuryListener --> Web socket offline');
5151
- // @ts-ignore
5152
- _this26.webex.internal.newMetrics.submitClientEvent({
5153
- name: 'client.mercury.connection.lost',
5154
- options: {
5155
- meetingId: _this26.id
5156
- }
5157
- });
5158
5394
  _metrics.default.sendBehavioralMetric(_constants2.default.MERCURY_CONNECTION_FAILURE, {
5159
- correlation_id: _this26.correlationId
5395
+ correlation_id: _this27.correlationId
5160
5396
  });
5161
5397
  });
5162
5398
  }
@@ -5263,7 +5499,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5263
5499
  }, {
5264
5500
  key: "muteAudio",
5265
5501
  value: function muteAudio() {
5266
- var _this27 = this;
5502
+ var _this28 = this;
5267
5503
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5268
5504
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5269
5505
  }
@@ -5279,22 +5515,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5279
5515
 
5280
5516
  // First, stop sending the local audio media
5281
5517
  return logRequest(this.audio.handleClientRequest(this, true).then(function () {
5282
- _util2.default.handleAudioLogging(_this27.mediaProperties.audioStream);
5518
+ _util2.default.handleAudioLogging(_this28.mediaProperties.audioStream);
5283
5519
  // @ts-ignore
5284
- _this27.webex.internal.newMetrics.submitClientEvent({
5520
+ _this28.webex.internal.newMetrics.submitClientEvent({
5285
5521
  name: 'client.muted',
5286
5522
  payload: {
5287
5523
  trigger: 'user-interaction',
5288
5524
  mediaType: 'audio'
5289
5525
  },
5290
5526
  options: {
5291
- meetingId: _this27.id
5527
+ meetingId: _this28.id
5292
5528
  }
5293
5529
  });
5294
5530
  }).catch(function (error) {
5295
5531
  _metrics.default.sendBehavioralMetric(_constants2.default.MUTE_AUDIO_FAILURE, {
5296
- correlation_id: _this27.correlationId,
5297
- locus_id: _this27.locusUrl.split('/').pop(),
5532
+ correlation_id: _this28.correlationId,
5533
+ locus_id: _this28.locusUrl.split('/').pop(),
5298
5534
  reason: error.message,
5299
5535
  stack: error.stack
5300
5536
  });
@@ -5313,7 +5549,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5313
5549
  }, {
5314
5550
  key: "unmuteAudio",
5315
5551
  value: function unmuteAudio() {
5316
- var _this28 = this;
5552
+ var _this29 = this;
5317
5553
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5318
5554
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5319
5555
  }
@@ -5329,22 +5565,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5329
5565
 
5330
5566
  // First, send the control to unmute the participant on the server
5331
5567
  return logRequest(this.audio.handleClientRequest(this, false).then(function () {
5332
- _util2.default.handleAudioLogging(_this28.mediaProperties.audioStream);
5568
+ _util2.default.handleAudioLogging(_this29.mediaProperties.audioStream);
5333
5569
  // @ts-ignore
5334
- _this28.webex.internal.newMetrics.submitClientEvent({
5570
+ _this29.webex.internal.newMetrics.submitClientEvent({
5335
5571
  name: 'client.unmuted',
5336
5572
  payload: {
5337
5573
  trigger: 'user-interaction',
5338
5574
  mediaType: 'audio'
5339
5575
  },
5340
5576
  options: {
5341
- meetingId: _this28.id
5577
+ meetingId: _this29.id
5342
5578
  }
5343
5579
  });
5344
5580
  }).catch(function (error) {
5345
5581
  _metrics.default.sendBehavioralMetric(_constants2.default.UNMUTE_AUDIO_FAILURE, {
5346
- correlation_id: _this28.correlationId,
5347
- locus_id: _this28.locusUrl.split('/').pop(),
5582
+ correlation_id: _this29.correlationId,
5583
+ locus_id: _this29.locusUrl.split('/').pop(),
5348
5584
  reason: error.message,
5349
5585
  stack: error.stack
5350
5586
  });
@@ -5363,7 +5599,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5363
5599
  }, {
5364
5600
  key: "muteVideo",
5365
5601
  value: function muteVideo() {
5366
- var _this29 = this;
5602
+ var _this30 = this;
5367
5603
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5368
5604
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5369
5605
  }
@@ -5377,22 +5613,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5377
5613
  return _promise.default.reject(new _parameter.default('no video control associated to the meeting'));
5378
5614
  }
5379
5615
  return logRequest(this.video.handleClientRequest(this, true).then(function () {
5380
- _util2.default.handleVideoLogging(_this29.mediaProperties.videoStream);
5616
+ _util2.default.handleVideoLogging(_this30.mediaProperties.videoStream);
5381
5617
  // @ts-ignore
5382
- _this29.webex.internal.newMetrics.submitClientEvent({
5618
+ _this30.webex.internal.newMetrics.submitClientEvent({
5383
5619
  name: 'client.muted',
5384
5620
  payload: {
5385
5621
  trigger: 'user-interaction',
5386
5622
  mediaType: 'video'
5387
5623
  },
5388
5624
  options: {
5389
- meetingId: _this29.id
5625
+ meetingId: _this30.id
5390
5626
  }
5391
5627
  });
5392
5628
  }).catch(function (error) {
5393
5629
  _metrics.default.sendBehavioralMetric(_constants2.default.MUTE_VIDEO_FAILURE, {
5394
- correlation_id: _this29.correlationId,
5395
- locus_id: _this29.locusUrl.split('/').pop(),
5630
+ correlation_id: _this30.correlationId,
5631
+ locus_id: _this30.locusUrl.split('/').pop(),
5396
5632
  reason: error.message,
5397
5633
  stack: error.stack
5398
5634
  });
@@ -5411,7 +5647,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5411
5647
  }, {
5412
5648
  key: "unmuteVideo",
5413
5649
  value: function unmuteVideo() {
5414
- var _this30 = this;
5650
+ var _this31 = this;
5415
5651
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5416
5652
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5417
5653
  }
@@ -5425,22 +5661,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5425
5661
  return _promise.default.reject(new _parameter.default('no audio control associated to the meeting'));
5426
5662
  }
5427
5663
  return logRequest(this.video.handleClientRequest(this, false).then(function () {
5428
- _util2.default.handleVideoLogging(_this30.mediaProperties.videoStream);
5664
+ _util2.default.handleVideoLogging(_this31.mediaProperties.videoStream);
5429
5665
  // @ts-ignore
5430
- _this30.webex.internal.newMetrics.submitClientEvent({
5666
+ _this31.webex.internal.newMetrics.submitClientEvent({
5431
5667
  name: 'client.unmuted',
5432
5668
  payload: {
5433
5669
  trigger: 'user-interaction',
5434
5670
  mediaType: 'video'
5435
5671
  },
5436
5672
  options: {
5437
- meetingId: _this30.id
5673
+ meetingId: _this31.id
5438
5674
  }
5439
5675
  });
5440
5676
  }).catch(function (error) {
5441
5677
  _metrics.default.sendBehavioralMetric(_constants2.default.UNMUTE_VIDEO_FAILURE, {
5442
- correlation_id: _this30.correlationId,
5443
- locus_id: _this30.locusUrl.split('/').pop(),
5678
+ correlation_id: _this31.correlationId,
5679
+ locus_id: _this31.locusUrl.split('/').pop(),
5444
5680
  reason: error.message,
5445
5681
  stack: error.stack
5446
5682
  });
@@ -5470,7 +5706,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5470
5706
  key: "joinWithMedia",
5471
5707
  value: (function () {
5472
5708
  var _joinWithMedia = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee16() {
5473
- var _this31 = this;
5709
+ var _this32 = this;
5474
5710
  var options,
5475
5711
  mediaOptions,
5476
5712
  _options$joinOptions,
@@ -5553,7 +5789,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5553
5789
  case 35:
5554
5790
  _context16.next = 37;
5555
5791
  return this.addMediaInternal(function () {
5556
- return _this31.joinWithMediaRetryInfo.isRetry ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
5792
+ return _this32.joinWithMediaRetryInfo.isRetry ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
5557
5793
  }, turnServerInfo, forceTurnDiscovery, mediaOptions);
5558
5794
  case 37:
5559
5795
  mediaResponse = _context16.sent;
@@ -5648,7 +5884,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5648
5884
  }, {
5649
5885
  key: "reconnect",
5650
5886
  value: function reconnect(options) {
5651
- var _this32 = this;
5887
+ var _this33 = this;
5652
5888
  _loggerProxy.default.logger.log("Meeting:index#reconnect --> attempting to reconnect meeting ".concat(this.id));
5653
5889
  if (!this.reconnectionManager || !this.reconnectionManager.reconnect) {
5654
5890
  return _promise.default.reject(new _parameter.default('Cannot reconnect, ReconnectionManager must first be defined.'));
@@ -5664,10 +5900,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5664
5900
  while (1) switch (_context17.prev = _context17.next) {
5665
5901
  case 0:
5666
5902
  _context17.next = 2;
5667
- return _this32.waitForRemoteSDPAnswer();
5903
+ return _this33.waitForRemoteSDPAnswer();
5668
5904
  case 2:
5669
5905
  _context17.next = 4;
5670
- return _this32.waitForMediaConnectionConnected();
5906
+ return _this33.waitForMediaConnectionConnected();
5671
5907
  case 4:
5672
5908
  case "end":
5673
5909
  return _context17.stop();
@@ -5681,7 +5917,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5681
5917
  return _promise.default.resolve();
5682
5918
  }
5683
5919
  _loggerProxy.default.logger.error('Meeting:index#reconnect --> Meeting reconnect failed', error);
5684
- _this32.uploadLogs({
5920
+ _this33.uploadLogs({
5685
5921
  file: 'meeting/index',
5686
5922
  function: 'reconnect'
5687
5923
  });
@@ -5728,19 +5964,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5728
5964
  }, {
5729
5965
  key: "setCaptionLanguage",
5730
5966
  value: function setCaptionLanguage(language) {
5731
- var _this33 = this;
5967
+ var _this34 = this;
5732
5968
  return new _promise.default(function (resolve, reject) {
5733
- if (!_this33.isTranscriptionSupported()) {
5969
+ if (!_this34.isTranscriptionSupported()) {
5734
5970
  _loggerProxy.default.logger.error('Meeting:index#setCaptionLanguage --> Webex Assistant is not enabled/supported');
5735
5971
  reject(new Error('Webex Assistant is not enabled/supported'));
5736
5972
  }
5737
5973
  try {
5738
5974
  var voiceaListenerCaptionUpdate = function voiceaListenerCaptionUpdate(payload) {
5739
5975
  // @ts-ignore
5740
- _this33.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5976
+ _this34.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5741
5977
  var statusCode = payload.statusCode;
5742
5978
  if (statusCode === 200) {
5743
- _this33.transcription.languageOptions = _objectSpread(_objectSpread({}, _this33.transcription.languageOptions), {}, {
5979
+ _this34.transcription.languageOptions = _objectSpread(_objectSpread({}, _this34.transcription.languageOptions), {}, {
5744
5980
  currentCaptionLanguage: language
5745
5981
  });
5746
5982
  resolve(language);
@@ -5749,9 +5985,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5749
5985
  }
5750
5986
  };
5751
5987
  // @ts-ignore
5752
- _this33.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5988
+ _this34.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5753
5989
  // @ts-ignore
5754
- _this33.webex.internal.voicea.requestLanguage(language);
5990
+ _this34.webex.internal.voicea.requestLanguage(language);
5755
5991
  } catch (error) {
5756
5992
  _loggerProxy.default.logger.error("Meeting:index#setCaptionLanguage --> ".concat(error));
5757
5993
  reject(error);
@@ -5767,23 +6003,23 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5767
6003
  }, {
5768
6004
  key: "setSpokenLanguage",
5769
6005
  value: function setSpokenLanguage(language) {
5770
- var _this34 = this;
6006
+ var _this35 = this;
5771
6007
  return new _promise.default(function (resolve, reject) {
5772
- if (!_this34.isTranscriptionSupported()) {
6008
+ if (!_this35.isTranscriptionSupported()) {
5773
6009
  _loggerProxy.default.logger.error('Meeting:index#setCaptionLanguage --> Webex Assistant is not enabled/supported');
5774
6010
  reject(new Error('Webex Assistant is not enabled/supported'));
5775
6011
  }
5776
- if (_this34.getCurUserType() !== 'host') {
6012
+ if (_this35.getCurUserType() !== 'host') {
5777
6013
  _loggerProxy.default.logger.error('Meeting:index#setSpokenLanguage --> Only host can set spoken language');
5778
6014
  reject(new Error('Only host can set spoken language'));
5779
6015
  }
5780
6016
  try {
5781
6017
  var voiceaListenerLanguageUpdate = function voiceaListenerLanguageUpdate(payload) {
5782
6018
  // @ts-ignore
5783
- _this34.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
6019
+ _this35.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5784
6020
  var languageCode = payload.languageCode;
5785
6021
  if (languageCode) {
5786
- _this34.transcription.languageOptions = _objectSpread(_objectSpread({}, _this34.transcription.languageOptions), {}, {
6022
+ _this35.transcription.languageOptions = _objectSpread(_objectSpread({}, _this35.transcription.languageOptions), {}, {
5787
6023
  currentSpokenLanguage: languageCode
5788
6024
  });
5789
6025
  resolve(languageCode);
@@ -5793,10 +6029,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5793
6029
  };
5794
6030
 
5795
6031
  // @ts-ignore
5796
- _this34.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
6032
+ _this35.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5797
6033
 
5798
6034
  // @ts-ignore
5799
- _this34.webex.internal.voicea.setSpokenLanguage(language);
6035
+ _this35.webex.internal.voicea.setSpokenLanguage(language);
5800
6036
  } catch (error) {
5801
6037
  _loggerProxy.default.logger.error("Meeting:index#setSpokenLanguage --> ".concat(error));
5802
6038
  reject(error);
@@ -5919,7 +6155,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5919
6155
  */
5920
6156
  function () {
5921
6157
  var _join = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee19() {
5922
- var _this35 = this;
6158
+ var _this36 = this;
5923
6159
  var options,
5924
6160
  errorMessage,
5925
6161
  error,
@@ -6068,62 +6304,61 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6068
6304
  return _context19.abrupt("return", _promise.default.reject(_context19.t0));
6069
6305
  case 51:
6070
6306
  return _context19.abrupt("return", _util2.default.joinMeetingOptions(this, options).then(function (join) {
6071
- _this35.meetingFiniteStateMachine.join();
6072
- _this35.setupLocusMediaRequest();
6307
+ _this36.meetingFiniteStateMachine.join();
6308
+ _this36.setupLocusMediaRequest();
6073
6309
 
6074
6310
  // @ts-ignore
6075
- _this35.webex.internal.device.meetingStarted();
6076
- (0, _classPrivateFieldSet2.default)(_this35, _isoLocalClientMeetingJoinTime, new Date().toISOString());
6311
+ _this36.webex.internal.device.meetingStarted();
6077
6312
  _loggerProxy.default.logger.log('Meeting:index#join --> Success');
6078
6313
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_SUCCESS, {
6079
- correlation_id: _this35.correlationId
6314
+ correlation_id: _this36.correlationId
6080
6315
  });
6081
6316
  joinSuccess(join);
6082
- _this35.deferJoin = undefined;
6317
+ _this36.deferJoin = undefined;
6083
6318
  return join;
6084
6319
  }).catch(function (error) {
6085
- var _this35$meetingInfo, _error$error;
6086
- _this35.meetingFiniteStateMachine.fail(error);
6320
+ var _this36$meetingInfo, _error$error;
6321
+ _this36.meetingFiniteStateMachine.fail(error);
6087
6322
  _loggerProxy.default.logger.error('Meeting:index#join --> Failed', error);
6088
6323
 
6089
6324
  // @ts-ignore
6090
- _this35.webex.internal.newMetrics.submitClientEvent({
6325
+ _this36.webex.internal.newMetrics.submitClientEvent({
6091
6326
  name: 'client.locus.join.response',
6092
6327
  payload: {
6093
6328
  identifiers: {
6094
- meetingLookupUrl: (_this35$meetingInfo = _this35.meetingInfo) === null || _this35$meetingInfo === void 0 ? void 0 : _this35$meetingInfo.meetingLookupUrl
6329
+ meetingLookupUrl: (_this36$meetingInfo = _this36.meetingInfo) === null || _this36$meetingInfo === void 0 ? void 0 : _this36$meetingInfo.meetingLookupUrl
6095
6330
  }
6096
6331
  },
6097
6332
  options: {
6098
- meetingId: _this35.id,
6333
+ meetingId: _this36.id,
6099
6334
  rawError: error
6100
6335
  }
6101
6336
  });
6102
6337
 
6103
6338
  // TODO: change this to error codes and pre defined dictionary
6104
6339
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_FAILURE, {
6105
- correlation_id: _this35.correlationId,
6340
+ correlation_id: _this36.correlationId,
6106
6341
  reason: (_error$error = error.error) === null || _error$error === void 0 ? void 0 : _error$error.message,
6107
6342
  stack: error.stack
6108
6343
  });
6109
6344
 
6110
6345
  // Upload logs on join Failure
6111
- _triggerProxy.default.trigger(_this35, {
6346
+ _triggerProxy.default.trigger(_this36, {
6112
6347
  file: 'meeting/index',
6113
6348
  function: 'join'
6114
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this35);
6349
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this36);
6115
6350
  joinFailed(error);
6116
- _this35.deferJoin = undefined;
6351
+ _this36.deferJoin = undefined;
6117
6352
  return _promise.default.reject(error);
6118
6353
  }).then(function (join) {
6119
6354
  // @ts-ignore - config coming from registerPlugin
6120
- if (_this35.config.enableAutomaticLLM) {
6355
+ if (_this36.config.enableAutomaticLLM) {
6121
6356
  // @ts-ignore
6122
- _this35.webex.internal.llm.on('online', _this35.handleLLMOnline);
6123
- _this35.updateLLMConnection().catch(function (error) {
6357
+ _this36.webex.internal.llm.on('online', _this36.handleLLMOnline);
6358
+ _this36.updateLLMConnection().catch(function (error) {
6124
6359
  _loggerProxy.default.logger.error('Meeting:index#join --> Transcription Socket Connection Failed', error);
6125
6360
  _metrics.default.sendBehavioralMetric(_constants2.default.LLM_CONNECTION_AFTER_JOIN_FAILURE, {
6126
- correlation_id: _this35.correlationId,
6361
+ correlation_id: _this36.correlationId,
6127
6362
  reason: error === null || error === void 0 ? void 0 : error.message,
6128
6363
  stack: error.stack
6129
6364
  });
@@ -6155,7 +6390,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6155
6390
  key: "updateLLMConnection",
6156
6391
  value: (function () {
6157
6392
  var _updateLLMConnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee20() {
6158
- var _this36 = this;
6393
+ var _this37 = this;
6159
6394
  var _this$locusInfo6, url, _this$locusInfo6$info, _this$locusInfo6$info2, datachannelUrl, practiceSessionDatachannelUrl, isJoined, dataChannelUrl;
6160
6395
  return _regenerator.default.wrap(function _callee20$(_context20) {
6161
6396
  while (1) switch (_context20.prev = _context20.next) {
@@ -6179,7 +6414,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6179
6414
  return _context20.abrupt("return", undefined);
6180
6415
  case 6:
6181
6416
  _context20.next = 8;
6182
- return this.webex.internal.llm.disconnectLLM();
6417
+ return this.webex.internal.llm.disconnectLLM(isJoined ? {
6418
+ code: 3050,
6419
+ reason: 'done (permanent)'
6420
+ } : undefined);
6183
6421
  case 8:
6184
6422
  // @ts-ignore - Fix type
6185
6423
  this.webex.internal.llm.off('event:relay.event', this.processRelayEvent);
@@ -6192,9 +6430,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6192
6430
  case 11:
6193
6431
  return _context20.abrupt("return", this.webex.internal.llm.registerAndConnect(url, dataChannelUrl).then(function (registerAndConnectResult) {
6194
6432
  // @ts-ignore - Fix type
6195
- _this36.webex.internal.llm.off('event:relay.event', _this36.processRelayEvent);
6433
+ _this37.webex.internal.llm.off('event:relay.event', _this37.processRelayEvent);
6196
6434
  // @ts-ignore - Fix type
6197
- _this36.webex.internal.llm.on('event:relay.event', _this36.processRelayEvent);
6435
+ _this37.webex.internal.llm.on('event:relay.event', _this37.processRelayEvent);
6198
6436
  _loggerProxy.default.logger.info('Meeting:index#updateLLMConnection --> enabled to receive relay events!');
6199
6437
  return _promise.default.resolve(registerAndConnectResult);
6200
6438
  }));
@@ -6248,7 +6486,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6248
6486
  }, {
6249
6487
  key: "dialInPstn",
6250
6488
  value: function dialInPstn() {
6251
- var _this37 = this;
6489
+ var _this38 = this;
6252
6490
  if (this.isPhoneProvisioned(this.dialInDeviceStatus)) return _promise.default.resolve(); // prevent multiple dial in devices from being provisioned
6253
6491
 
6254
6492
  var correlationId = this.correlationId,
@@ -6264,10 +6502,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6264
6502
  }).catch(function (error) {
6265
6503
  var _error$error2;
6266
6504
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_DIAL_IN_FAILURE, {
6267
- correlation_id: _this37.correlationId,
6268
- dial_in_url: _this37.dialInUrl,
6505
+ correlation_id: _this38.correlationId,
6506
+ dial_in_url: _this38.dialInUrl,
6269
6507
  locus_id: locusUrl.split('/').pop(),
6270
- client_url: _this37.deviceUrl,
6508
+ client_url: _this38.deviceUrl,
6271
6509
  reason: (_error$error2 = error.error) === null || _error$error2 === void 0 ? void 0 : _error$error2.message,
6272
6510
  stack: error.stack
6273
6511
  });
@@ -6285,7 +6523,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6285
6523
  }, {
6286
6524
  key: "dialOutPstn",
6287
6525
  value: function dialOutPstn(phoneNumber) {
6288
- var _this38 = this;
6526
+ var _this39 = this;
6289
6527
  if (this.isPhoneProvisioned(this.dialOutDeviceStatus)) return _promise.default.resolve(); // prevent multiple dial out devices from being provisioned
6290
6528
 
6291
6529
  var correlationId = this.correlationId,
@@ -6302,10 +6540,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6302
6540
  }).catch(function (error) {
6303
6541
  var _error$error3;
6304
6542
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_DIAL_OUT_FAILURE, {
6305
- correlation_id: _this38.correlationId,
6306
- dial_out_url: _this38.dialOutUrl,
6543
+ correlation_id: _this39.correlationId,
6544
+ dial_out_url: _this39.dialOutUrl,
6307
6545
  locus_id: locusUrl.split('/').pop(),
6308
- client_url: _this38.deviceUrl,
6546
+ client_url: _this39.deviceUrl,
6309
6547
  reason: (_error$error3 = error.error) === null || _error$error3 === void 0 ? void 0 : _error$error3.message,
6310
6548
  stack: error.stack
6311
6549
  });
@@ -6336,7 +6574,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6336
6574
  }, {
6337
6575
  key: "moveTo",
6338
6576
  value: function moveTo(resourceId) {
6339
- var _this39 = this;
6577
+ var _this40 = this;
6340
6578
  if (!resourceId) {
6341
6579
  throw new _parameter.default('Cannot move call without a resourceId.');
6342
6580
  }
@@ -6380,12 +6618,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6380
6618
  while (1) switch (_context21.prev = _context21.next) {
6381
6619
  case 0:
6382
6620
  _context21.prev = 0;
6383
- if (!(_this39.screenShareFloorState === ScreenShareFloorStatus.GRANTED)) {
6621
+ if (!(_this40.screenShareFloorState === ScreenShareFloorStatus.GRANTED)) {
6384
6622
  _context21.next = 4;
6385
6623
  break;
6386
6624
  }
6387
6625
  _context21.next = 4;
6388
- return _this39.releaseScreenShareFloor();
6626
+ return _this40.releaseScreenShareFloor();
6389
6627
  case 4:
6390
6628
  mediaSettings = {
6391
6629
  mediaDirection: {
@@ -6397,37 +6635,37 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6397
6635
  receiveShare: true
6398
6636
  }
6399
6637
  };
6400
- _this39.mediaProperties.setMediaDirection(mediaSettings.mediaDirection);
6401
- _this39.mediaProperties.unsetRemoteMedia();
6638
+ _this40.mediaProperties.setMediaDirection(mediaSettings.mediaDirection);
6639
+ _this40.mediaProperties.unsetRemoteMedia();
6402
6640
 
6403
6641
  // 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
6404
6642
  // once the device answers we close the old connection and create new media server connection with only share enabled
6405
- if (!_this39.statsAnalyzer) {
6643
+ if (!_this40.statsAnalyzer) {
6406
6644
  _context21.next = 10;
6407
6645
  break;
6408
6646
  }
6409
6647
  _context21.next = 10;
6410
- return _this39.statsAnalyzer.stopAnalyzer();
6648
+ return _this40.statsAnalyzer.stopAnalyzer();
6411
6649
  case 10:
6412
6650
  _context21.next = 12;
6413
- return _this39.closeRemoteStreams();
6651
+ return _this40.closeRemoteStreams();
6414
6652
  case 12:
6415
6653
  _context21.next = 14;
6416
- return _this39.closePeerConnections();
6654
+ return _this40.closePeerConnections();
6417
6655
  case 14:
6418
- _this39.cleanupLocalStreams();
6419
- _this39.unsetRemoteStreams();
6420
- _this39.unsetPeerConnections();
6421
- _this39.reconnectionManager.cleanUp();
6656
+ _this40.cleanupLocalStreams();
6657
+ _this40.unsetRemoteStreams();
6658
+ _this40.unsetPeerConnections();
6659
+ _this40.reconnectionManager.cleanUp();
6422
6660
  _context21.next = 20;
6423
- return _this39.addMedia({
6661
+ return _this40.addMedia({
6424
6662
  audioEnabled: false,
6425
6663
  videoEnabled: false,
6426
6664
  shareVideoEnabled: true
6427
6665
  });
6428
6666
  case 20:
6429
6667
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_SUCCESS);
6430
- _this39.isMoveToInProgress = false;
6668
+ _this40.isMoveToInProgress = false;
6431
6669
  _context21.next = 29;
6432
6670
  break;
6433
6671
  case 24:
@@ -6435,12 +6673,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6435
6673
  _context21.t0 = _context21["catch"](0);
6436
6674
  _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', _context21.t0);
6437
6675
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
6438
- correlation_id: _this39.correlationId,
6439
- locus_id: _this39.locusUrl.split('/').pop(),
6676
+ correlation_id: _this40.correlationId,
6677
+ locus_id: _this40.locusUrl.split('/').pop(),
6440
6678
  reason: _context21.t0.message,
6441
6679
  stack: _context21.t0.stack
6442
6680
  });
6443
- _this39.isMoveToInProgress = false;
6681
+ _this40.isMoveToInProgress = false;
6444
6682
  case 29:
6445
6683
  case "end":
6446
6684
  return _context21.stop();
@@ -6456,17 +6694,17 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6456
6694
  resourceId: resourceId,
6457
6695
  moveToResource: true
6458
6696
  }).then(function () {
6459
- _this39.meetingFiniteStateMachine.join();
6697
+ _this40.meetingFiniteStateMachine.join();
6460
6698
  }).catch(function (error) {
6461
- _this39.meetingFiniteStateMachine.fail(error);
6699
+ _this40.meetingFiniteStateMachine.fail(error);
6462
6700
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
6463
- correlation_id: _this39.correlationId,
6464
- locus_id: _this39.locusUrl.split('/').pop(),
6701
+ correlation_id: _this40.correlationId,
6702
+ locus_id: _this40.locusUrl.split('/').pop(),
6465
6703
  reason: error.message,
6466
6704
  stack: error.stack
6467
6705
  });
6468
6706
  _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', error);
6469
- _this39.isMoveToInProgress = false;
6707
+ _this40.isMoveToInProgress = false;
6470
6708
  return _promise.default.reject(error);
6471
6709
  });
6472
6710
  }
@@ -6481,7 +6719,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6481
6719
  }, {
6482
6720
  key: "moveFrom",
6483
6721
  value: function moveFrom(resourceId) {
6484
- var _this40 = this;
6722
+ var _this41 = this;
6485
6723
  // On moveFrom ask the developer to re capture it moveFrom then updateMedia
6486
6724
  if (!resourceId) {
6487
6725
  throw new _parameter.default('Cannot move call without a resourceId.');
@@ -6496,19 +6734,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6496
6734
  }
6497
6735
  });
6498
6736
  return _util2.default.joinMeetingOptions(this).then(function () {
6499
- return _util2.default.leaveMeeting(_this40, {
6737
+ return _util2.default.leaveMeeting(_this41, {
6500
6738
  resourceId: resourceId,
6501
6739
  correlationId: oldCorrelationId,
6502
6740
  moveMeeting: true
6503
6741
  }).then(function () {
6504
- _this40.resourceId = '';
6742
+ _this41.resourceId = '';
6505
6743
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_FROM_SUCCESS);
6506
6744
  });
6507
6745
  }).catch(function (error) {
6508
- _this40.meetingFiniteStateMachine.fail(error);
6746
+ _this41.meetingFiniteStateMachine.fail(error);
6509
6747
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_FROM_FAILURE, {
6510
- correlation_id: _this40.correlationId,
6511
- locus_id: _this40.locusUrl.split('/').pop(),
6748
+ correlation_id: _this41.correlationId,
6749
+ locus_id: _this41.locusUrl.split('/').pop(),
6512
6750
  reason: error.message,
6513
6751
  stack: error.stack
6514
6752
  });
@@ -6557,7 +6795,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6557
6795
  turnServerInfo: turnServerInfo,
6558
6796
  bundlePolicy: bundlePolicy,
6559
6797
  // @ts-ignore - config coming from registerPlugin
6560
- iceCandidatesTimeout: this.config.iceCandidatesGatheringTimeout
6798
+ iceCandidatesTimeout: this.config.iceCandidatesGatheringTimeout,
6799
+ // @ts-ignore - config coming from registerPlugin
6800
+ disableAudioMainDtx: this.config.experimental.disableAudioMainDtx,
6801
+ // @ts-ignore - config coming from registerPlugin
6802
+ enableAudioTwcc: this.config.enableAudioTwccForMultistream,
6803
+ stopIceGatheringAfterFirstRelayCandidate:
6804
+ // @ts-ignore - config coming from registerPlugin
6805
+ this.config.stopIceGatheringAfterFirstRelayCandidate
6561
6806
  });
6562
6807
  this.mediaProperties.setMediaPeerConnection(mc);
6563
6808
  this.setupMediaConnectionListeners();
@@ -6624,9 +6869,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6624
6869
  }, {
6625
6870
  key: "forwardEvent",
6626
6871
  value: function forwardEvent(eventEmitter, eventTypeToForward, meetingEventType) {
6627
- var _this41 = this;
6872
+ var _this42 = this;
6628
6873
  eventEmitter.on(eventTypeToForward, function (data) {
6629
- return _triggerProxy.default.trigger(_this41, {
6874
+ return _triggerProxy.default.trigger(_this42, {
6630
6875
  file: 'meetings',
6631
6876
  function: 'addMedia'
6632
6877
  }, meetingEventType, data);
@@ -6696,7 +6941,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6696
6941
  key: "waitForMediaConnectionConnected",
6697
6942
  value: (function () {
6698
6943
  var _waitForMediaConnectionConnected = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee24() {
6699
- var iceConnected, _this$mediaProperties8, _this$mediaProperties9, _this$mediaProperties10, _this$mediaProperties11, _this$mediaProperties12, _this$mediaProperties13, _this$mediaProperties14;
6944
+ var iceConnected, _this$mediaProperties8, _this$mediaProperties9, _this$mediaProperties10, _this$mediaProperties11, _this$mediaProperties12, _this$mediaProperties13, _this$mediaProperties14, timedOutError;
6700
6945
  return _regenerator.default.wrap(function _callee24$(_context24) {
6701
6946
  while (1) switch (_context24.prev = _context24.next) {
6702
6947
  case 0:
@@ -6704,7 +6949,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6704
6949
  _context24.next = 3;
6705
6950
  return this.mediaProperties.waitForMediaConnectionConnected();
6706
6951
  case 3:
6707
- _context24.next = 30;
6952
+ _context24.next = 32;
6708
6953
  break;
6709
6954
  case 5:
6710
6955
  _context24.prev = 5;
@@ -6746,7 +6991,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6746
6991
  errors: _context24.t14
6747
6992
  };
6748
6993
  _context24.t16 = {
6749
- meetingId: this.id
6994
+ meetingId: this.id,
6995
+ rawError: _context24.t0
6750
6996
  };
6751
6997
  _context24.t17 = {
6752
6998
  name: 'client.ice.end',
@@ -6755,8 +7001,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6755
7001
  };
6756
7002
  _context24.t1.submitClientEvent.call(_context24.t1, _context24.t17);
6757
7003
  case 29:
6758
- throw new Error("Timed out waiting for media connection to be connected, correlationId=".concat(this.correlationId));
6759
- case 30:
7004
+ timedOutError = new Error("Timed out waiting for media connection to be connected, correlationId=".concat(this.correlationId));
7005
+ timedOutError.cause = _context24.t0;
7006
+ throw timedOutError;
7007
+ case 32:
6760
7008
  case "end":
6761
7009
  return _context24.stop();
6762
7010
  }
@@ -6787,6 +7035,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6787
7035
  networkQualityMonitor: this.networkQualityMonitor,
6788
7036
  isMultistream: this.isMultistream
6789
7037
  });
7038
+ this.shareCAEventSentStatus = {
7039
+ transmitStart: false,
7040
+ transmitStop: false,
7041
+ receiveStart: false,
7042
+ receiveStop: false
7043
+ };
6790
7044
  this.setupStatsAnalyzerEventHandlers();
6791
7045
  this.networkQualityMonitor.on(_internalMediaCore.NetworkQualityEventNames.NETWORK_QUALITY, this.sendNetworkQualityEvent.bind(this));
6792
7046
  }
@@ -6803,7 +7057,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6803
7057
  key: "waitForRemoteSDPAnswer",
6804
7058
  value: (function () {
6805
7059
  var _waitForRemoteSDPAnswer = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee25() {
6806
- var _this42 = this;
7060
+ var _this43 = this;
6807
7061
  var LOG_HEADER, deferSDPAnswer;
6808
7062
  return _regenerator.default.wrap(function _callee25$(_context25) {
6809
7063
  while (1) switch (_context25.prev = _context25.next) {
@@ -6819,23 +7073,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6819
7073
  deferSDPAnswer = this.deferSDPAnswer;
6820
7074
  this.sdpResponseTimer = setTimeout(function () {
6821
7075
  _loggerProxy.default.logger.warn("".concat(LOG_HEADER, " timeout! no REMOTE SDP ANSWER received within ").concat(_constants.ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT / 1000, " seconds"));
7076
+ var error = new Error('Timed out waiting for REMOTE SDP ANSWER');
7077
+
6822
7078
  // @ts-ignore
6823
- _this42.webex.internal.newMetrics.submitClientEvent({
7079
+ _this43.webex.internal.newMetrics.submitClientEvent({
6824
7080
  name: 'client.media-engine.remote-sdp-received',
6825
7081
  payload: {
6826
7082
  canProceed: false,
6827
7083
  errors: [
6828
7084
  // @ts-ignore
6829
- _this42.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({
7085
+ _this43.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({
6830
7086
  clientErrorCode: _internalPluginMetrics.CALL_DIAGNOSTIC_CONFIG.MISSING_ROAP_ANSWER_CLIENT_CODE
6831
7087
  })]
6832
7088
  },
6833
7089
  options: {
6834
- meetingId: _this42.id,
6835
- rawError: new Error('Timeout waiting for SDP answer')
7090
+ meetingId: _this43.id,
7091
+ rawError: error
6836
7092
  }
6837
7093
  });
6838
- deferSDPAnswer.reject(new Error('Timed out waiting for REMOTE SDP ANSWER'));
7094
+ deferSDPAnswer.reject(error);
6839
7095
  }, _constants.ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT);
6840
7096
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " waiting for REMOTE SDP ANSWER..."));
6841
7097
  return _context25.abrupt("return", deferSDPAnswer.promise);
@@ -6975,7 +7231,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6975
7231
  break;
6976
7232
  case 7:
6977
7233
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " error waiting for media to connect using UDP, TCP and TURN-TLS"), error);
6978
- throw new _webexErrors.AddMediaFailed();
7234
+ throw new _webexErrors.AddMediaFailed(error);
6979
7235
  case 9:
6980
7236
  case "end":
6981
7237
  return _context28.stop();
@@ -7338,10 +7594,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7338
7594
  }, {
7339
7595
  key: "addMedia",
7340
7596
  value: function addMedia() {
7341
- var _this43 = this;
7597
+ var _this44 = this;
7342
7598
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7343
7599
  return this.addMediaInternal(function () {
7344
- return _this43.turnServerUsed ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
7600
+ return _this44.turnServerUsed ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
7345
7601
  }, undefined, false, options);
7346
7602
  }
7347
7603
 
@@ -7377,10 +7633,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7377
7633
  _this$remoteMediaMana,
7378
7634
  _yield$this$mediaProp,
7379
7635
  connectionType,
7636
+ ipVersion,
7380
7637
  selectedCandidatePairChanges,
7381
7638
  numTransports,
7382
- reachabilityStats,
7383
7639
  iceCandidateErrors,
7640
+ reachabilityMetrics,
7384
7641
  _this$mediaProperties15,
7385
7642
  _this$mediaProperties16,
7386
7643
  _this$mediaProperties17,
@@ -7402,7 +7659,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7402
7659
  _this$mediaProperties33,
7403
7660
  _this$mediaProperties34,
7404
7661
  _this$mediaProperties35,
7405
- reachabilityMetrics,
7662
+ _reachabilityMetrics,
7406
7663
  _yield$this$mediaProp2,
7407
7664
  _selectedCandidatePairChanges,
7408
7665
  _numTransports,
@@ -7523,28 +7780,33 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7523
7780
  case 46:
7524
7781
  _yield$this$mediaProp = _context35.sent;
7525
7782
  connectionType = _yield$this$mediaProp.connectionType;
7783
+ ipVersion = _yield$this$mediaProp.ipVersion;
7526
7784
  selectedCandidatePairChanges = _yield$this$mediaProp.selectedCandidatePairChanges;
7527
7785
  numTransports = _yield$this$mediaProp.numTransports;
7528
- _context35.next = 52;
7529
- return this.webex.meetings.reachability.getReachabilityMetrics();
7530
- case 52:
7531
- reachabilityStats = _context35.sent;
7532
7786
  iceCandidateErrors = Object.fromEntries(this.iceCandidateErrors);
7787
+ _context35.next = 54;
7788
+ return this.getMediaReachabilityMetricFields();
7789
+ case 54:
7790
+ reachabilityMetrics = _context35.sent;
7533
7791
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_SUCCESS, _objectSpread(_objectSpread(_objectSpread({
7534
7792
  correlation_id: this.correlationId,
7535
7793
  locus_id: this.locusUrl.split('/').pop(),
7536
7794
  connectionType: connectionType,
7795
+ ipVersion: ipVersion,
7537
7796
  selectedCandidatePairChanges: selectedCandidatePairChanges,
7538
7797
  numTransports: numTransports,
7539
7798
  isMultistream: this.isMultistream,
7540
7799
  retriedWithTurnServer: this.addMediaData.retriedWithTurnServer,
7541
7800
  isJoinWithMediaRetry: this.joinWithMediaRetryInfo.isRetry
7542
- }, reachabilityStats), iceCandidateErrors), {}, {
7801
+ }, reachabilityMetrics), iceCandidateErrors), {}, {
7543
7802
  iceCandidatesCount: this.iceCandidatesCount
7544
7803
  }));
7545
7804
  // @ts-ignore
7546
7805
  this.webex.internal.newMetrics.submitClientEvent({
7547
7806
  name: 'client.media-engine.ready',
7807
+ payload: {
7808
+ ipVersion: ipVersion
7809
+ },
7548
7810
  options: {
7549
7811
  meetingId: this.id
7550
7812
  }
@@ -7554,21 +7816,21 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7554
7816
  // We can log ReceiveSlot SSRCs only after the SDP exchange, so doing it here:
7555
7817
  (_this$remoteMediaMana = this.remoteMediaManager) === null || _this$remoteMediaMana === void 0 ? void 0 : _this$remoteMediaMana.logAllReceiveSlots();
7556
7818
  this.startPeriodicLogUpload();
7557
- _context35.next = 79;
7819
+ _context35.next = 80;
7558
7820
  break;
7559
- case 61:
7560
- _context35.prev = 61;
7821
+ case 62:
7822
+ _context35.prev = 62;
7561
7823
  _context35.t1 = _context35["catch"](19);
7562
7824
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " failed to establish media connection: "), _context35.t1);
7563
7825
 
7564
7826
  // @ts-ignore
7565
- _context35.next = 66;
7566
- return this.webex.meetings.reachability.getReachabilityMetrics();
7567
- case 66:
7568
- reachabilityMetrics = _context35.sent;
7569
- _context35.next = 69;
7827
+ _context35.next = 67;
7828
+ return this.getMediaReachabilityMetricFields();
7829
+ case 67:
7830
+ _reachabilityMetrics = _context35.sent;
7831
+ _context35.next = 70;
7570
7832
  return this.mediaProperties.getCurrentConnectionInfo();
7571
- case 69:
7833
+ case 70:
7572
7834
  _yield$this$mediaProp2 = _context35.sent;
7573
7835
  _selectedCandidatePairChanges = _yield$this$mediaProp2.selectedCandidatePairChanges;
7574
7836
  _numTransports = _yield$this$mediaProp2.numTransports;
@@ -7589,12 +7851,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7589
7851
  signalingState: ((_this$mediaProperties15 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties15 === void 0 ? void 0 : (_this$mediaProperties16 = _this$mediaProperties15.multistreamConnection) === null || _this$mediaProperties16 === void 0 ? void 0 : (_this$mediaProperties17 = _this$mediaProperties16.pc) === null || _this$mediaProperties17 === void 0 ? void 0 : (_this$mediaProperties18 = _this$mediaProperties17.pc) === null || _this$mediaProperties18 === void 0 ? void 0 : _this$mediaProperties18.signalingState) || ((_this$mediaProperties19 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties19 === void 0 ? void 0 : (_this$mediaProperties20 = _this$mediaProperties19.mediaConnection) === null || _this$mediaProperties20 === void 0 ? void 0 : (_this$mediaProperties21 = _this$mediaProperties20.pc) === null || _this$mediaProperties21 === void 0 ? void 0 : _this$mediaProperties21.signalingState) || 'unknown',
7590
7852
  connectionState: ((_this$mediaProperties22 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties22 === void 0 ? void 0 : (_this$mediaProperties23 = _this$mediaProperties22.multistreamConnection) === null || _this$mediaProperties23 === void 0 ? void 0 : (_this$mediaProperties24 = _this$mediaProperties23.pc) === null || _this$mediaProperties24 === void 0 ? void 0 : (_this$mediaProperties25 = _this$mediaProperties24.pc) === null || _this$mediaProperties25 === void 0 ? void 0 : _this$mediaProperties25.connectionState) || ((_this$mediaProperties26 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties26 === void 0 ? void 0 : (_this$mediaProperties27 = _this$mediaProperties26.mediaConnection) === null || _this$mediaProperties27 === void 0 ? void 0 : (_this$mediaProperties28 = _this$mediaProperties27.pc) === null || _this$mediaProperties28 === void 0 ? void 0 : _this$mediaProperties28.connectionState) || 'unknown',
7591
7853
  iceConnectionState: ((_this$mediaProperties29 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties29 === void 0 ? void 0 : (_this$mediaProperties30 = _this$mediaProperties29.multistreamConnection) === null || _this$mediaProperties30 === void 0 ? void 0 : (_this$mediaProperties31 = _this$mediaProperties30.pc) === null || _this$mediaProperties31 === void 0 ? void 0 : (_this$mediaProperties32 = _this$mediaProperties31.pc) === null || _this$mediaProperties32 === void 0 ? void 0 : _this$mediaProperties32.iceConnectionState) || ((_this$mediaProperties33 = this.mediaProperties.webrtcMediaConnection) === null || _this$mediaProperties33 === void 0 ? void 0 : (_this$mediaProperties34 = _this$mediaProperties33.mediaConnection) === null || _this$mediaProperties34 === void 0 ? void 0 : (_this$mediaProperties35 = _this$mediaProperties34.pc) === null || _this$mediaProperties35 === void 0 ? void 0 : _this$mediaProperties35.iceConnectionState) || 'unknown'
7592
- }, reachabilityMetrics), _iceCandidateErrors), {}, {
7854
+ }, _reachabilityMetrics), _iceCandidateErrors), {}, {
7593
7855
  iceCandidatesCount: this.iceCandidatesCount
7594
7856
  }));
7595
- _context35.next = 76;
7857
+ _context35.next = 77;
7596
7858
  return this.cleanUpOnAddMediaFailure();
7597
- case 76:
7859
+ case 77:
7598
7860
  // Upload logs on error while adding media
7599
7861
  _triggerProxy.default.trigger(this, {
7600
7862
  file: 'meeting/index',
@@ -7606,15 +7868,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7606
7868
  });
7607
7869
  }
7608
7870
  throw _context35.t1;
7609
- case 79:
7610
- _context35.prev = 79;
7871
+ case 80:
7872
+ _context35.prev = 80;
7611
7873
  this.addMediaData.icePhaseCallback = DEFAULT_ICE_PHASE_CALLBACK;
7612
- return _context35.finish(79);
7613
- case 82:
7874
+ return _context35.finish(80);
7875
+ case 83:
7614
7876
  case "end":
7615
7877
  return _context35.stop();
7616
7878
  }
7617
- }, _callee35, this, [[19, 61, 79, 82], [24, 29]]);
7879
+ }, _callee35, this, [[19, 62, 80, 83], [24, 29]]);
7618
7880
  }));
7619
7881
  function addMediaInternal(_x33, _x34, _x35) {
7620
7882
  return _addMediaInternal.apply(this, arguments);
@@ -7646,7 +7908,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7646
7908
  * @memberof Meeting
7647
7909
  */
7648
7910
  function enqueueMediaUpdate(mediaUpdateType) {
7649
- var _this44 = this;
7911
+ var _this45 = this;
7650
7912
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
7651
7913
  var canUpdateMediaNow = this.canUpdateMedia();
7652
7914
  return new _promise.default(function (resolve, reject) {
@@ -7657,9 +7919,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7657
7919
  options: options
7658
7920
  };
7659
7921
  _loggerProxy.default.logger.log("Meeting:index#enqueueMediaUpdate --> enqueuing media update type=".concat(mediaUpdateType));
7660
- _this44.queuedMediaUpdates.push(queueItem);
7922
+ _this45.queuedMediaUpdates.push(queueItem);
7661
7923
  if (canUpdateMediaNow) {
7662
- _this44.processNextQueuedMediaUpdate();
7924
+ _this45.processNextQueuedMediaUpdate();
7663
7925
  }
7664
7926
  });
7665
7927
  }
@@ -7764,7 +8026,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7764
8026
  }, {
7765
8027
  key: "acknowledge",
7766
8028
  value: function acknowledge(type) {
7767
- var _this45 = this;
8029
+ var _this46 = this;
7768
8030
  if (!type) {
7769
8031
  return _promise.default.reject(new _parameter.default('Type must be set to acknowledge the meeting.'));
7770
8032
  }
@@ -7776,12 +8038,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7776
8038
  }).then(function (response) {
7777
8039
  return _promise.default.resolve(response);
7778
8040
  }).then(function (response) {
7779
- _this45.meetingFiniteStateMachine.ring(type);
8041
+ _this46.meetingFiniteStateMachine.ring(type);
7780
8042
  // @ts-ignore
7781
- _this45.webex.internal.newMetrics.submitClientEvent({
8043
+ _this46.webex.internal.newMetrics.submitClientEvent({
7782
8044
  name: 'client.alert.displayed',
7783
8045
  options: {
7784
- meetingId: _this45.id
8046
+ meetingId: _this46.id
7785
8047
  }
7786
8048
  });
7787
8049
  return _promise.default.resolve({
@@ -7806,12 +8068,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7806
8068
  }, {
7807
8069
  key: "decline",
7808
8070
  value: function decline(reason) {
7809
- var _this46 = this;
8071
+ var _this47 = this;
7810
8072
  return _util2.default.declineMeeting(this, reason).then(function (decline) {
7811
- _this46.meetingFiniteStateMachine.decline();
8073
+ _this47.meetingFiniteStateMachine.decline();
7812
8074
  return _promise.default.resolve(decline);
7813
8075
  }).catch(function (error) {
7814
- _this46.meetingFiniteStateMachine.fail(error);
8076
+ _this47.meetingFiniteStateMachine.fail(error);
7815
8077
  return _promise.default.reject(error);
7816
8078
  });
7817
8079
  }
@@ -7862,7 +8124,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7862
8124
  }, {
7863
8125
  key: "leave",
7864
8126
  value: function leave() {
7865
- var _this47 = this;
8127
+ var _this48 = this;
7866
8128
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7867
8129
  var leaveReason = options.reason || _constants.MEETING_REMOVED_REASON.CLIENT_LEAVE_REQUEST;
7868
8130
 
@@ -7874,7 +8136,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7874
8136
  var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7875
8137
  return (
7876
8138
  // @ts-ignore
7877
- _this47.webex.internal.newMetrics.submitClientEvent({
8139
+ _this48.webex.internal.newMetrics.submitClientEvent({
7878
8140
  name: 'client.call.leave',
7879
8141
  payload: _objectSpread({
7880
8142
  trigger: 'user-interaction',
@@ -7882,7 +8144,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7882
8144
  leaveReason: options.clientEventLeaveReason
7883
8145
  }, payload),
7884
8146
  options: {
7885
- meetingId: _this47.id
8147
+ meetingId: _this48.id
7886
8148
  }
7887
8149
  })
7888
8150
  );
@@ -7891,24 +8153,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7891
8153
  return _util2.default.leaveMeeting(this, options).then(function (leave) {
7892
8154
  // CA team recommends submitting this *after* locus /leave
7893
8155
  submitLeaveMetric();
7894
- _this47.meetingFiniteStateMachine.leave();
7895
- _this47.clearMeetingData();
8156
+ _this48.meetingFiniteStateMachine.leave();
8157
+ _this48.clearMeetingData();
7896
8158
 
7897
8159
  // upload logs on leave irrespective of meeting delete
7898
- _triggerProxy.default.trigger(_this47, {
8160
+ _triggerProxy.default.trigger(_this48, {
7899
8161
  file: 'meeting/index',
7900
8162
  function: 'leave'
7901
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this47);
8163
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this48);
7902
8164
 
7903
8165
  // TODO: more testing before we remove this code, we are not sure the scenarios for destroy here
7904
- if (_this47.wirelessShare || _this47.guest) {
8166
+ if (_this48.wirelessShare || _this48.guest) {
7905
8167
  // If screen sharing clean the meeting object
7906
- _triggerProxy.default.trigger(_this47, {
8168
+ _triggerProxy.default.trigger(_this48, {
7907
8169
  file: 'meeting/index',
7908
8170
  function: 'leave'
7909
8171
  }, _constants.EVENTS.DESTROY_MEETING, {
7910
8172
  reason: options.reason,
7911
- meetingId: _this47.id
8173
+ meetingId: _this48.id
7912
8174
  });
7913
8175
  }
7914
8176
  _loggerProxy.default.logger.log('Meeting:index#leave --> LEAVE REASON ', leaveReason);
@@ -7925,16 +8187,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7925
8187
  shownToUser: false
7926
8188
  }]
7927
8189
  });
7928
- _this47.meetingFiniteStateMachine.fail(error);
8190
+ _this48.meetingFiniteStateMachine.fail(error);
7929
8191
  _loggerProxy.default.logger.error('Meeting:index#leave --> Failed to leave ', error);
7930
8192
  // upload logs on leave irrespective of meeting delete
7931
- _triggerProxy.default.trigger(_this47, {
8193
+ _triggerProxy.default.trigger(_this48, {
7932
8194
  file: 'meeting/index',
7933
8195
  function: 'leave'
7934
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this47);
8196
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this48);
7935
8197
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_LEAVE_FAILURE, {
7936
- correlation_id: _this47.correlationId,
7937
- locus_id: _this47.locusUrl.split('/').pop(),
8198
+ correlation_id: _this48.correlationId,
8199
+ locus_id: _this48.locusUrl.split('/').pop(),
7938
8200
  reason: error.message,
7939
8201
  stack: error.stack,
7940
8202
  code: error.code
@@ -7954,7 +8216,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7954
8216
  }, {
7955
8217
  key: "startWhiteboardShare",
7956
8218
  value: function startWhiteboardShare(channelUrl, resourceToken) {
7957
- var _this48 = this;
8219
+ var _this49 = this;
7958
8220
  var whiteboard = this.locusInfo.mediaShares.find(function (element) {
7959
8221
  return element.name === 'whiteboard';
7960
8222
  });
@@ -7983,13 +8245,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7983
8245
  body.resourceToken = resourceToken;
7984
8246
  }
7985
8247
  return this.meetingRequest.changeMeetingFloor(body).then(function () {
7986
- _this48.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
8248
+ _this49.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
7987
8249
  return _promise.default.resolve();
7988
8250
  }).catch(function (error) {
7989
8251
  _loggerProxy.default.logger.error('Meeting:index#startWhiteboardShare --> Error ', error);
7990
8252
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_START_WHITEBOARD_SHARE_FAILURE, {
7991
- correlation_id: _this48.correlationId,
7992
- locus_id: _this48.locusUrl.split('/').pop(),
8253
+ correlation_id: _this49.correlationId,
8254
+ locus_id: _this49.locusUrl.split('/').pop(),
7993
8255
  reason: error.message,
7994
8256
  stack: error.stack,
7995
8257
  board: {
@@ -8012,7 +8274,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8012
8274
  }, {
8013
8275
  key: "stopWhiteboardShare",
8014
8276
  value: function stopWhiteboardShare(channelUrl) {
8015
- var _this49 = this;
8277
+ var _this50 = this;
8016
8278
  var whiteboard = this.locusInfo.mediaShares.find(function (element) {
8017
8279
  return element.name === 'whiteboard';
8018
8280
  });
@@ -8035,8 +8297,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8035
8297
  }).catch(function (error) {
8036
8298
  _loggerProxy.default.logger.error('Meeting:index#stopWhiteboardShare --> Error ', error);
8037
8299
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_STOP_WHITEBOARD_SHARE_FAILURE, {
8038
- correlation_id: _this49.correlationId,
8039
- locus_id: _this49.locusUrl.split('/').pop(),
8300
+ correlation_id: _this50.correlationId,
8301
+ locus_id: _this50.locusUrl.split('/').pop(),
8040
8302
  reason: error.message,
8041
8303
  stack: error.stack,
8042
8304
  board: {
@@ -8058,7 +8320,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8058
8320
  }, {
8059
8321
  key: "requestScreenShareFloor",
8060
8322
  value: function requestScreenShareFloor() {
8061
- var _this50 = this;
8323
+ var _this51 = this;
8062
8324
  if (!this.mediaProperties.hasLocalShareStream() || !this.mediaProperties.mediaDirection.sendShare) {
8063
8325
  _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, ")"));
8064
8326
  this.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
@@ -8089,34 +8351,34 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8089
8351
  resourceUrl: this.resourceUrl,
8090
8352
  shareInstanceId: this.localShareInstanceId
8091
8353
  }).then(function () {
8092
- _this50.screenShareFloorState = ScreenShareFloorStatus.GRANTED;
8354
+ _this51.screenShareFloorState = ScreenShareFloorStatus.GRANTED;
8093
8355
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_SUCCESS, {
8094
- correlation_id: _this50.correlationId,
8095
- locus_id: _this50.locusUrl.split('/').pop()
8356
+ correlation_id: _this51.correlationId,
8357
+ locus_id: _this51.locusUrl.split('/').pop()
8096
8358
  });
8097
8359
  return _promise.default.resolve();
8098
8360
  }).catch(function (error) {
8099
8361
  _loggerProxy.default.logger.error('Meeting:index#share --> Error ', error);
8100
8362
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_FAILURE, {
8101
- correlation_id: _this50.correlationId,
8102
- locus_id: _this50.locusUrl.split('/').pop(),
8363
+ correlation_id: _this51.correlationId,
8364
+ locus_id: _this51.locusUrl.split('/').pop(),
8103
8365
  reason: error.message,
8104
8366
  stack: error.stack
8105
8367
  });
8106
8368
 
8107
8369
  // @ts-ignore
8108
- _this50.webex.internal.newMetrics.submitClientEvent({
8370
+ _this51.webex.internal.newMetrics.submitClientEvent({
8109
8371
  name: 'client.share.floor-granted.local',
8110
8372
  payload: {
8111
8373
  mediaType: 'share',
8112
8374
  errors: _util2.default.getChangeMeetingFloorErrorPayload(error.message),
8113
- shareInstanceId: _this50.localShareInstanceId
8375
+ shareInstanceId: _this51.localShareInstanceId
8114
8376
  },
8115
8377
  options: {
8116
- meetingId: _this50.id
8378
+ meetingId: _this51.id
8117
8379
  }
8118
8380
  });
8119
- _this50.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
8381
+ _this51.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
8120
8382
  return _promise.default.reject(error);
8121
8383
  });
8122
8384
  }
@@ -8139,10 +8401,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8139
8401
  }, {
8140
8402
  key: "requestScreenShareFloorIfPending",
8141
8403
  value: function requestScreenShareFloorIfPending() {
8142
- var _this51 = this;
8404
+ var _this52 = this;
8143
8405
  if (this.floorGrantPending && this.state === _constants.MEETING_STATE.STATES.JOINED) {
8144
8406
  this.requestScreenShareFloor().then(function () {
8145
- _this51.floorGrantPending = false;
8407
+ _this52.floorGrantPending = false;
8146
8408
  });
8147
8409
  }
8148
8410
  }
@@ -8156,7 +8418,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8156
8418
  }, {
8157
8419
  key: "releaseScreenShareFloor",
8158
8420
  value: function releaseScreenShareFloor() {
8159
- var _this52 = this;
8421
+ var _this53 = this;
8160
8422
  var content = this.locusInfo.mediaShares.find(function (element) {
8161
8423
  return element.name === _constants.CONTENT;
8162
8424
  });
@@ -8191,8 +8453,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8191
8453
  }).catch(function (error) {
8192
8454
  _loggerProxy.default.logger.error('Meeting:index#releaseScreenShareFloor --> Error ', error);
8193
8455
  _metrics.default.sendBehavioralMetric(_constants2.default.STOP_FLOOR_REQUEST_FAILURE, {
8194
- correlation_id: _this52.correlationId,
8195
- locus_id: _this52.locusUrl.split('/').pop(),
8456
+ correlation_id: _this53.correlationId,
8457
+ locus_id: _this53.locusUrl.split('/').pop(),
8196
8458
  reason: error.message,
8197
8459
  stack: error.stack
8198
8460
  });
@@ -8372,7 +8634,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8372
8634
  }, {
8373
8635
  key: "changeVideoLayout",
8374
8636
  value: function changeVideoLayout(layoutType) {
8375
- var _this53 = this;
8637
+ var _this54 = this;
8376
8638
  var renderInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
8377
8639
  var main = renderInfo.main,
8378
8640
  content = renderInfo.content;
@@ -8426,7 +8688,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8426
8688
  }
8427
8689
  this.lastVideoLayoutInfo = (0, _lodash.cloneDeep)(layoutInfo);
8428
8690
  this.locusInfo.once(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED, function (envelope) {
8429
- _triggerProxy.default.trigger(_this53, {
8691
+ _triggerProxy.default.trigger(_this54, {
8430
8692
  file: 'meeting/index',
8431
8693
  function: 'changeVideoLayout'
8432
8694
  }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_LAYOUT_UPDATE, {
@@ -8542,7 +8804,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8542
8804
  }, {
8543
8805
  key: "endMeetingForAll",
8544
8806
  value: function endMeetingForAll() {
8545
- var _this54 = this;
8807
+ var _this55 = this;
8546
8808
  // @ts-ignore
8547
8809
  this.webex.internal.newMetrics.submitClientEvent({
8548
8810
  name: 'client.call.leave',
@@ -8560,25 +8822,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8560
8822
  locus_id: this.locusId
8561
8823
  });
8562
8824
  return _util2.default.endMeetingForAll(this).then(function (end) {
8563
- _this54.meetingFiniteStateMachine.end();
8564
- _this54.clearMeetingData();
8825
+ _this55.meetingFiniteStateMachine.end();
8826
+ _this55.clearMeetingData();
8565
8827
  // upload logs on leave irrespective of meeting delete
8566
- _triggerProxy.default.trigger(_this54, {
8828
+ _triggerProxy.default.trigger(_this55, {
8567
8829
  file: 'meeting/index',
8568
8830
  function: 'endMeetingForAll'
8569
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this54);
8831
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this55);
8570
8832
  return end;
8571
8833
  }).catch(function (error) {
8572
- _this54.meetingFiniteStateMachine.fail(error);
8834
+ _this55.meetingFiniteStateMachine.fail(error);
8573
8835
  _loggerProxy.default.logger.error('Meeting:index#endMeetingForAll --> Failed to end meeting ', error);
8574
8836
  // upload logs on leave irrespective of meeting delete
8575
- _triggerProxy.default.trigger(_this54, {
8837
+ _triggerProxy.default.trigger(_this55, {
8576
8838
  file: 'meeting/index',
8577
8839
  function: 'endMeetingForAll'
8578
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this54);
8840
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this55);
8579
8841
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_END_ALL_FAILURE, {
8580
- correlation_id: _this54.correlationId,
8581
- locus_id: _this54.locusUrl.split('/').pop(),
8842
+ correlation_id: _this55.correlationId,
8843
+ locus_id: _this55.locusUrl.split('/').pop(),
8582
8844
  reason: error.message,
8583
8845
  stack: error.stack,
8584
8846
  code: error.code
@@ -8643,6 +8905,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8643
8905
  });
8644
8906
  }
8645
8907
 
8908
+ /**
8909
+ * Method to set post meeting data consent.
8910
+ *
8911
+ * @param {boolean} accept - whether consent accepted or declined
8912
+ * @returns {Promise}
8913
+ * @public
8914
+ * @memberof Meeting
8915
+ */
8916
+ }, {
8917
+ key: "setPostMeetingDataConsent",
8918
+ value: function setPostMeetingDataConsent(accept) {
8919
+ return this.meetingRequest.setPostMeetingDataConsent({
8920
+ postMeetingDataConsent: accept,
8921
+ locusUrl: this.locusUrl,
8922
+ deviceUrl: this.deviceUrl,
8923
+ selfId: this.members.selfId
8924
+ });
8925
+ }
8926
+
8646
8927
  /**
8647
8928
  * Throws if we don't have a media connection created
8648
8929
  *
@@ -8720,7 +9001,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8720
9001
  _this$mediaProperties43,
8721
9002
  _this$mediaProperties44,
8722
9003
  _this$mediaProperties45,
8723
- _this55 = this;
9004
+ _this56 = this;
8724
9005
  var LOG_HEADER = 'Meeting:index#updateTranscodedMediaConnection -->';
8725
9006
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " starting"));
8726
9007
  if (!this.canUpdateMedia()) {
@@ -8745,8 +9026,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8745
9026
  }).catch(function (error) {
8746
9027
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " Error: "), error);
8747
9028
  _metrics.default.sendBehavioralMetric(_constants2.default.UPDATE_MEDIA_FAILURE, {
8748
- correlation_id: _this55.correlationId,
8749
- locus_id: _this55.locusUrl.split('/').pop(),
9029
+ correlation_id: _this56.correlationId,
9030
+ locus_id: _this56.locusUrl.split('/').pop(),
8750
9031
  reason: error.message,
8751
9032
  stack: error.stack
8752
9033
  });
@@ -8968,10 +9249,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8968
9249
  return this.updateTranscodedMediaConnection();
8969
9250
  case 31:
8970
9251
  if (!floorRequestNeeded) {
8971
- _context40.next = 37;
9252
+ _context40.next = 39;
8972
9253
  break;
8973
9254
  }
8974
9255
  this.localShareInstanceId = _uuid.default.v4();
9256
+ this.shareCAEventSentStatus.transmitStart = false;
9257
+ this.shareCAEventSentStatus.transmitStop = false;
8975
9258
 
8976
9259
  // @ts-ignore
8977
9260
  this.webex.internal.newMetrics.submitClientEvent({
@@ -8992,9 +9275,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8992
9275
  // we're sending the http request to Locus to request the screen share floor
8993
9276
  // only after the SDP update, because that's how it's always been done for transcoded meetings
8994
9277
  // and also if sharing from the start, we need confluence to have been created
8995
- _context40.next = 37;
9278
+ _context40.next = 39;
8996
9279
  return this.enqueueScreenShareFloorRequest();
8997
- case 37:
9280
+ case 39:
8998
9281
  case "end":
8999
9282
  return _context40.stop();
9000
9283
  }
@@ -9132,6 +9415,57 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9132
9415
  }
9133
9416
  return _promise.default.resolve();
9134
9417
  }
9418
+
9419
+ /**
9420
+ * Gets the media reachability metrics
9421
+ *
9422
+ * @returns {Promise<MediaReachabilityMetrics>}
9423
+ */
9424
+ }, {
9425
+ key: "getMediaReachabilityMetricFields",
9426
+ value: (function () {
9427
+ var _getMediaReachabilityMetricFields = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee42() {
9428
+ var _this$mediaServerIp, _this$mediaConnection, _this$mediaConnection2, _this$mediaConnection3;
9429
+ var reachabilityMetrics, successKeys, totalSuccessCases, selectedSubnetFirstOctet, isSubnetReachable, selectedCluster;
9430
+ return _regenerator.default.wrap(function _callee42$(_context42) {
9431
+ while (1) switch (_context42.prev = _context42.next) {
9432
+ case 0:
9433
+ _context42.next = 2;
9434
+ return this.webex.meetings.reachability.getReachabilityMetrics();
9435
+ case 2:
9436
+ reachabilityMetrics = _context42.sent;
9437
+ successKeys = ['reachability_public_udp_success', 'reachability_public_tcp_success', 'reachability_public_xtls_success', 'reachability_vmn_udp_success', 'reachability_vmn_tcp_success', 'reachability_vmn_xtls_success'];
9438
+ totalSuccessCases = successKeys.reduce(function (total, key) {
9439
+ var value = reachabilityMetrics[key];
9440
+ if (typeof value === 'number') {
9441
+ return total + value;
9442
+ }
9443
+ return total;
9444
+ }, 0);
9445
+ selectedSubnetFirstOctet = (_this$mediaServerIp = this.mediaServerIp) === null || _this$mediaServerIp === void 0 ? void 0 : _this$mediaServerIp.split('.')[0];
9446
+ isSubnetReachable = null;
9447
+ if (totalSuccessCases > 0 && selectedSubnetFirstOctet) {
9448
+ isSubnetReachable =
9449
+ // @ts-ignore
9450
+ this.webex.meetings.reachability.isSubnetReachable(selectedSubnetFirstOctet);
9451
+ }
9452
+ selectedCluster = (_this$mediaConnection = (_this$mediaConnection2 = this.mediaConnections) === null || _this$mediaConnection2 === void 0 ? void 0 : (_this$mediaConnection3 = _this$mediaConnection2[0]) === null || _this$mediaConnection3 === void 0 ? void 0 : _this$mediaConnection3.mediaAgentCluster) !== null && _this$mediaConnection !== void 0 ? _this$mediaConnection : null;
9453
+ return _context42.abrupt("return", _objectSpread(_objectSpread({}, reachabilityMetrics), {}, {
9454
+ subnet_reachable: isSubnetReachable,
9455
+ selected_cluster: selectedCluster,
9456
+ selected_subnet: selectedSubnetFirstOctet ? "".concat(selectedSubnetFirstOctet, ".X.X.X") : null
9457
+ }));
9458
+ case 10:
9459
+ case "end":
9460
+ return _context42.stop();
9461
+ }
9462
+ }, _callee42, this);
9463
+ }));
9464
+ function getMediaReachabilityMetricFields() {
9465
+ return _getMediaReachabilityMetricFields.apply(this, arguments);
9466
+ }
9467
+ return getMediaReachabilityMetricFields;
9468
+ }())
9135
9469
  }]);
9136
9470
  return Meeting;
9137
9471
  }(_webexCore.StatelessWebexPlugin);