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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (360) hide show
  1. package/dist/breakouts/breakout.js +1 -1
  2. package/dist/breakouts/index.js +70 -6
  3. package/dist/breakouts/index.js.map +1 -1
  4. package/dist/common/errors/webex-errors.js +12 -2
  5. package/dist/common/errors/webex-errors.js.map +1 -1
  6. package/dist/config.js +5 -1
  7. package/dist/config.js.map +1 -1
  8. package/dist/constants.js +23 -123
  9. package/dist/constants.js.map +1 -1
  10. package/dist/controls-options-manager/enums.js +2 -0
  11. package/dist/controls-options-manager/enums.js.map +1 -1
  12. package/dist/controls-options-manager/types.js.map +1 -1
  13. package/dist/controls-options-manager/util.js +52 -0
  14. package/dist/controls-options-manager/util.js.map +1 -1
  15. package/dist/interpretation/index.js +4 -4
  16. package/dist/interpretation/index.js.map +1 -1
  17. package/dist/interpretation/siLanguage.js +1 -1
  18. package/dist/locus-info/controlsUtils.js +31 -11
  19. package/dist/locus-info/controlsUtils.js.map +1 -1
  20. package/dist/locus-info/index.js +83 -12
  21. package/dist/locus-info/index.js.map +1 -1
  22. package/dist/locus-info/selfUtils.js +432 -418
  23. package/dist/locus-info/selfUtils.js.map +1 -1
  24. package/dist/media/index.js +17 -17
  25. package/dist/media/index.js.map +1 -1
  26. package/dist/media/properties.js +94 -6
  27. package/dist/media/properties.js.map +1 -1
  28. package/dist/meeting/brbState.js +9 -2
  29. package/dist/meeting/brbState.js.map +1 -1
  30. package/dist/meeting/in-meeting-actions.js +17 -1
  31. package/dist/meeting/in-meeting-actions.js.map +1 -1
  32. package/dist/meeting/index.js +661 -334
  33. package/dist/meeting/index.js.map +1 -1
  34. package/dist/meeting/locusMediaRequest.js +21 -22
  35. package/dist/meeting/locusMediaRequest.js.map +1 -1
  36. package/dist/meeting/muteState.js +4 -4
  37. package/dist/meeting/muteState.js.map +1 -1
  38. package/dist/meeting/request.js +30 -0
  39. package/dist/meeting/request.js.map +1 -1
  40. package/dist/meeting/request.type.js.map +1 -1
  41. package/dist/meeting/util.js +13 -2
  42. package/dist/meeting/util.js.map +1 -1
  43. package/dist/meeting-info/meeting-info-v2.js +373 -68
  44. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  45. package/dist/meeting-info/utilv2.js +5 -1
  46. package/dist/meeting-info/utilv2.js.map +1 -1
  47. package/dist/meetings/index.js +136 -1
  48. package/dist/meetings/index.js.map +1 -1
  49. package/dist/meetings/util.js +14 -0
  50. package/dist/meetings/util.js.map +1 -1
  51. package/dist/member/index.js +55 -9
  52. package/dist/member/index.js.map +1 -1
  53. package/dist/member/types.js +3 -0
  54. package/dist/member/types.js.map +1 -1
  55. package/dist/member/util.js +335 -353
  56. package/dist/member/util.js.map +1 -1
  57. package/dist/members/collection.js.map +1 -1
  58. package/dist/members/index.js +137 -29
  59. package/dist/members/index.js.map +1 -1
  60. package/dist/members/request.js +38 -0
  61. package/dist/members/request.js.map +1 -1
  62. package/dist/members/util.js +36 -1
  63. package/dist/members/util.js.map +1 -1
  64. package/dist/metrics/constants.js +10 -0
  65. package/dist/metrics/constants.js.map +1 -1
  66. package/dist/multistream/remoteMediaManager.js +40 -8
  67. package/dist/multistream/remoteMediaManager.js.map +1 -1
  68. package/dist/reachability/clusterReachability.js +63 -27
  69. package/dist/reachability/clusterReachability.js.map +1 -1
  70. package/dist/reachability/index.js +112 -47
  71. package/dist/reachability/index.js.map +1 -1
  72. package/dist/reachability/reachability.types.js +14 -0
  73. package/dist/reachability/reachability.types.js.map +1 -1
  74. package/dist/reachability/request.js +19 -3
  75. package/dist/reachability/request.js.map +1 -1
  76. package/dist/reconnection-manager/index.js +2 -2
  77. package/dist/reconnection-manager/index.js.map +1 -1
  78. package/dist/recording-controller/util.js +5 -5
  79. package/dist/recording-controller/util.js.map +1 -1
  80. package/dist/roap/index.js.map +1 -1
  81. package/dist/roap/turnDiscovery.js +45 -27
  82. package/dist/roap/turnDiscovery.js.map +1 -1
  83. package/dist/roap/types.js +17 -0
  84. package/dist/roap/types.js.map +1 -0
  85. package/dist/types/common/errors/webex-errors.d.ts +7 -1
  86. package/dist/types/config.d.ts +3 -0
  87. package/dist/types/constants.d.ts +16 -85
  88. package/dist/types/controls-options-manager/enums.d.ts +3 -1
  89. package/dist/types/controls-options-manager/types.d.ts +7 -1
  90. package/dist/types/locus-info/index.d.ts +3 -3
  91. package/dist/types/locus-info/selfUtils.d.ts +216 -1
  92. package/dist/types/media/properties.d.ts +15 -0
  93. package/dist/types/meeting/in-meeting-actions.d.ts +16 -0
  94. package/dist/types/meeting/index.d.ts +65 -1
  95. package/dist/types/meeting/muteState.d.ts +0 -1
  96. package/dist/types/meeting/request.d.ts +12 -1
  97. package/dist/types/meeting/request.type.d.ts +6 -0
  98. package/dist/types/meeting/util.d.ts +3 -1
  99. package/dist/types/meeting-info/meeting-info-v2.d.ts +82 -1
  100. package/dist/types/meetings/index.d.ts +57 -0
  101. package/dist/types/member/index.d.ts +21 -6
  102. package/dist/types/member/types.d.ts +73 -14
  103. package/dist/types/member/util.d.ts +156 -1
  104. package/dist/types/members/collection.d.ts +6 -5
  105. package/dist/types/members/index.d.ts +32 -43
  106. package/dist/types/members/request.d.ts +26 -0
  107. package/dist/types/members/util.d.ts +27 -0
  108. package/dist/types/metrics/constants.d.ts +10 -0
  109. package/dist/types/multistream/remoteMediaManager.d.ts +10 -1
  110. package/dist/types/reachability/clusterReachability.d.ts +15 -7
  111. package/dist/types/reachability/index.d.ts +10 -1
  112. package/dist/types/reachability/reachability.types.d.ts +5 -0
  113. package/dist/types/roap/index.d.ts +3 -2
  114. package/dist/types/roap/turnDiscovery.d.ts +5 -17
  115. package/dist/types/roap/types.d.ts +16 -0
  116. package/dist/webinar/index.js +2 -2
  117. package/dist/webinar/index.js.map +1 -1
  118. package/package.json +24 -23
  119. package/src/breakouts/index.ts +69 -0
  120. package/src/common/errors/webex-errors.ts +8 -1
  121. package/src/config.ts +3 -0
  122. package/src/constants.ts +24 -90
  123. package/src/controls-options-manager/enums.ts +2 -0
  124. package/src/controls-options-manager/types.ts +11 -1
  125. package/src/controls-options-manager/util.ts +62 -0
  126. package/src/interpretation/index.ts +3 -3
  127. package/src/locus-info/controlsUtils.ts +50 -14
  128. package/src/locus-info/index.ts +88 -13
  129. package/src/locus-info/selfUtils.ts +496 -442
  130. package/src/media/index.ts +23 -21
  131. package/src/media/properties.ts +96 -0
  132. package/src/meeting/brbState.ts +11 -2
  133. package/src/meeting/in-meeting-actions.ts +32 -0
  134. package/src/meeting/index.ts +449 -95
  135. package/src/meeting/locusMediaRequest.ts +27 -22
  136. package/src/meeting/muteState.ts +4 -4
  137. package/src/meeting/request.ts +36 -1
  138. package/src/meeting/request.type.ts +7 -0
  139. package/src/meeting/util.ts +11 -2
  140. package/src/meeting-info/meeting-info-v2.ts +254 -8
  141. package/src/meeting-info/utilv2.ts +5 -0
  142. package/src/meetings/index.ts +148 -1
  143. package/src/meetings/util.ts +18 -0
  144. package/src/member/index.ts +68 -22
  145. package/src/member/types.ts +82 -16
  146. package/src/member/util.ts +357 -350
  147. package/src/members/collection.ts +4 -3
  148. package/src/members/index.ts +137 -18
  149. package/src/members/request.ts +44 -0
  150. package/src/members/util.ts +43 -1
  151. package/src/metrics/constants.ts +10 -0
  152. package/src/multistream/remoteMediaManager.ts +32 -10
  153. package/src/reachability/clusterReachability.ts +73 -26
  154. package/src/reachability/index.ts +70 -1
  155. package/src/reachability/reachability.types.ts +6 -0
  156. package/src/reachability/request.ts +7 -0
  157. package/src/reconnection-manager/index.ts +2 -2
  158. package/src/recording-controller/util.ts +17 -13
  159. package/src/roap/index.ts +3 -7
  160. package/src/roap/turnDiscovery.ts +34 -39
  161. package/src/roap/types.ts +23 -0
  162. package/src/webinar/index.ts +1 -1
  163. package/test/unit/spec/breakouts/index.ts +167 -95
  164. package/test/unit/spec/controls-options-manager/util.js +120 -0
  165. package/test/unit/spec/interpretation/index.ts +39 -1
  166. package/test/unit/spec/locus-info/controlsUtils.js +139 -9
  167. package/test/unit/spec/locus-info/index.js +195 -73
  168. package/test/unit/spec/locus-info/selfUtils.js +98 -24
  169. package/test/unit/spec/media/index.ts +150 -18
  170. package/test/unit/spec/media/properties.ts +130 -0
  171. package/test/unit/spec/meeting/brbState.ts +40 -2
  172. package/test/unit/spec/meeting/in-meeting-actions.ts +19 -4
  173. package/test/unit/spec/meeting/index.js +754 -139
  174. package/test/unit/spec/meeting/locusMediaRequest.ts +95 -87
  175. package/test/unit/spec/meeting/muteState.js +73 -2
  176. package/test/unit/spec/meeting/request.js +32 -1
  177. package/test/unit/spec/meeting/utils.js +119 -18
  178. package/test/unit/spec/meeting-info/meetinginfov2.js +484 -114
  179. package/test/unit/spec/meeting-info/utilv2.js +19 -0
  180. package/test/unit/spec/meetings/index.js +146 -2
  181. package/test/unit/spec/member/index.js +7 -0
  182. package/test/unit/spec/member/util.js +24 -0
  183. package/test/unit/spec/members/index.js +304 -78
  184. package/test/unit/spec/members/request.js +68 -22
  185. package/test/unit/spec/members/utils.js +75 -0
  186. package/test/unit/spec/multistream/remoteMediaManager.ts +397 -118
  187. package/test/unit/spec/reachability/clusterReachability.ts +88 -56
  188. package/test/unit/spec/reachability/index.ts +101 -0
  189. package/test/unit/spec/reachability/request.js +47 -2
  190. package/test/unit/spec/reconnection-manager/index.js +4 -4
  191. package/test/unit/spec/roap/turnDiscovery.ts +110 -28
  192. package/test/unit/spec/webinar/index.ts +5 -0
  193. package/dist/annotation/annotation.types.d.ts +0 -42
  194. package/dist/annotation/constants.d.ts +0 -31
  195. package/dist/annotation/index.d.ts +0 -117
  196. package/dist/breakouts/breakout.d.ts +0 -8
  197. package/dist/breakouts/collection.d.ts +0 -5
  198. package/dist/breakouts/edit-lock-error.d.ts +0 -15
  199. package/dist/breakouts/events.d.ts +0 -8
  200. package/dist/breakouts/index.d.ts +0 -5
  201. package/dist/breakouts/request.d.ts +0 -22
  202. package/dist/breakouts/utils.d.ts +0 -15
  203. package/dist/common/browser-detection.d.ts +0 -9
  204. package/dist/common/collection.d.ts +0 -48
  205. package/dist/common/config.d.ts +0 -2
  206. package/dist/common/errors/captcha-error.d.ts +0 -15
  207. package/dist/common/errors/intent-to-join.d.ts +0 -16
  208. package/dist/common/errors/join-meeting.d.ts +0 -17
  209. package/dist/common/errors/media.d.ts +0 -15
  210. package/dist/common/errors/no-meeting-info.d.ts +0 -14
  211. package/dist/common/errors/parameter.d.ts +0 -15
  212. package/dist/common/errors/password-error.d.ts +0 -15
  213. package/dist/common/errors/permission.d.ts +0 -14
  214. package/dist/common/errors/reclaim-host-role-error.js +0 -149
  215. package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
  216. package/dist/common/errors/reclaim-host-role-errors.d.ts +0 -60
  217. package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
  218. package/dist/common/errors/reconnection-in-progress.js +0 -33
  219. package/dist/common/errors/reconnection-in-progress.js.map +0 -1
  220. package/dist/common/errors/reconnection.d.ts +0 -15
  221. package/dist/common/errors/stats.d.ts +0 -15
  222. package/dist/common/errors/webex-errors.d.ts +0 -93
  223. package/dist/common/errors/webex-meetings-error.d.ts +0 -20
  224. package/dist/common/events/events-scope.d.ts +0 -17
  225. package/dist/common/events/events.d.ts +0 -12
  226. package/dist/common/events/trigger-proxy.d.ts +0 -2
  227. package/dist/common/events/util.d.ts +0 -2
  228. package/dist/common/logs/logger-config.d.ts +0 -2
  229. package/dist/common/logs/logger-proxy.d.ts +0 -2
  230. package/dist/common/logs/request.d.ts +0 -36
  231. package/dist/common/queue.d.ts +0 -34
  232. package/dist/config.d.ts +0 -72
  233. package/dist/constants.d.ts +0 -1088
  234. package/dist/controls-options-manager/constants.d.ts +0 -4
  235. package/dist/controls-options-manager/enums.d.ts +0 -15
  236. package/dist/controls-options-manager/index.d.ts +0 -136
  237. package/dist/controls-options-manager/types.d.ts +0 -43
  238. package/dist/controls-options-manager/util.d.ts +0 -1
  239. package/dist/index.d.ts +0 -7
  240. package/dist/interceptors/index.d.ts +0 -2
  241. package/dist/interceptors/locusRetry.d.ts +0 -27
  242. package/dist/interpretation/collection.d.ts +0 -5
  243. package/dist/interpretation/index.d.ts +0 -5
  244. package/dist/interpretation/siLanguage.d.ts +0 -5
  245. package/dist/locus-info/controlsUtils.d.ts +0 -2
  246. package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
  247. package/dist/locus-info/fullState.d.ts +0 -2
  248. package/dist/locus-info/hostUtils.d.ts +0 -2
  249. package/dist/locus-info/index.d.ts +0 -322
  250. package/dist/locus-info/infoUtils.d.ts +0 -2
  251. package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
  252. package/dist/locus-info/parser.d.ts +0 -272
  253. package/dist/locus-info/selfUtils.d.ts +0 -2
  254. package/dist/media/index.d.ts +0 -34
  255. package/dist/media/properties.d.ts +0 -93
  256. package/dist/media/util.d.ts +0 -2
  257. package/dist/mediaQualityMetrics/config.d.ts +0 -241
  258. package/dist/mediaQualityMetrics/config.js +0 -502
  259. package/dist/mediaQualityMetrics/config.js.map +0 -1
  260. package/dist/meeting/effectsState.js +0 -260
  261. package/dist/meeting/effectsState.js.map +0 -1
  262. package/dist/meeting/in-meeting-actions.d.ts +0 -167
  263. package/dist/meeting/index.d.ts +0 -1825
  264. package/dist/meeting/locusMediaRequest.d.ts +0 -74
  265. package/dist/meeting/muteState.d.ts +0 -178
  266. package/dist/meeting/request.d.ts +0 -295
  267. package/dist/meeting/request.type.d.ts +0 -11
  268. package/dist/meeting/state.d.ts +0 -9
  269. package/dist/meeting/util.d.ts +0 -119
  270. package/dist/meeting/voicea-meeting.d.ts +0 -16
  271. package/dist/meeting-info/collection.d.ts +0 -20
  272. package/dist/meeting-info/index.d.ts +0 -69
  273. package/dist/meeting-info/meeting-info-v2.d.ts +0 -123
  274. package/dist/meeting-info/request.d.ts +0 -22
  275. package/dist/meeting-info/util.d.ts +0 -2
  276. package/dist/meeting-info/utilv2.d.ts +0 -2
  277. package/dist/meetings/collection.d.ts +0 -40
  278. package/dist/meetings/index.d.ts +0 -390
  279. package/dist/meetings/meetings.types.d.ts +0 -4
  280. package/dist/meetings/request.d.ts +0 -27
  281. package/dist/meetings/util.d.ts +0 -18
  282. package/dist/member/index.d.ts +0 -160
  283. package/dist/member/member.types.js +0 -17
  284. package/dist/member/member.types.js.map +0 -1
  285. package/dist/member/types.d.ts +0 -32
  286. package/dist/member/util.d.ts +0 -2
  287. package/dist/members/collection.d.ts +0 -29
  288. package/dist/members/index.d.ts +0 -353
  289. package/dist/members/request.d.ts +0 -114
  290. package/dist/members/types.d.ts +0 -25
  291. package/dist/members/util.d.ts +0 -215
  292. package/dist/metrics/config.js +0 -276
  293. package/dist/metrics/config.js.map +0 -1
  294. package/dist/metrics/constants.d.ts +0 -70
  295. package/dist/metrics/index.d.ts +0 -45
  296. package/dist/multistream/mediaRequestManager.d.ts +0 -119
  297. package/dist/multistream/receiveSlot.d.ts +0 -68
  298. package/dist/multistream/receiveSlotManager.d.ts +0 -56
  299. package/dist/multistream/remoteMedia.d.ts +0 -72
  300. package/dist/multistream/remoteMediaGroup.d.ts +0 -49
  301. package/dist/multistream/remoteMediaManager.d.ts +0 -300
  302. package/dist/multistream/sendSlotManager.d.ts +0 -69
  303. package/dist/networkQualityMonitor/index.d.ts +0 -70
  304. package/dist/networkQualityMonitor/index.js +0 -221
  305. package/dist/networkQualityMonitor/index.js.map +0 -1
  306. package/dist/peer-connection-manager/index.js +0 -671
  307. package/dist/peer-connection-manager/index.js.map +0 -1
  308. package/dist/peer-connection-manager/util.js +0 -109
  309. package/dist/peer-connection-manager/util.js.map +0 -1
  310. package/dist/personal-meeting-room/index.d.ts +0 -47
  311. package/dist/personal-meeting-room/request.d.ts +0 -14
  312. package/dist/personal-meeting-room/util.d.ts +0 -2
  313. package/dist/reachability/clusterReachability.d.ts +0 -109
  314. package/dist/reachability/index.d.ts +0 -105
  315. package/dist/reachability/request.d.ts +0 -39
  316. package/dist/reachability/util.d.ts +0 -8
  317. package/dist/reactions/constants.d.ts +0 -3
  318. package/dist/reactions/reactions.d.ts +0 -4
  319. package/dist/reactions/reactions.type.d.ts +0 -52
  320. package/dist/reconnection-manager/index.d.ts +0 -136
  321. package/dist/recording-controller/enums.d.ts +0 -7
  322. package/dist/recording-controller/index.d.ts +0 -207
  323. package/dist/recording-controller/util.d.ts +0 -14
  324. package/dist/roap/collection.js +0 -62
  325. package/dist/roap/collection.js.map +0 -1
  326. package/dist/roap/handler.js +0 -275
  327. package/dist/roap/handler.js.map +0 -1
  328. package/dist/roap/index.d.ts +0 -86
  329. package/dist/roap/request.d.ts +0 -39
  330. package/dist/roap/state.js +0 -126
  331. package/dist/roap/state.js.map +0 -1
  332. package/dist/roap/turnDiscovery.d.ts +0 -155
  333. package/dist/roap/util.js +0 -75
  334. package/dist/roap/util.js.map +0 -1
  335. package/dist/rtcMetrics/constants.d.ts +0 -4
  336. package/dist/rtcMetrics/constants.js +0 -11
  337. package/dist/rtcMetrics/constants.js.map +0 -1
  338. package/dist/rtcMetrics/index.d.ts +0 -61
  339. package/dist/rtcMetrics/index.js +0 -197
  340. package/dist/rtcMetrics/index.js.map +0 -1
  341. package/dist/statsAnalyzer/global.d.ts +0 -36
  342. package/dist/statsAnalyzer/global.js +0 -126
  343. package/dist/statsAnalyzer/global.js.map +0 -1
  344. package/dist/statsAnalyzer/index.d.ts +0 -217
  345. package/dist/statsAnalyzer/index.js +0 -1013
  346. package/dist/statsAnalyzer/index.js.map +0 -1
  347. package/dist/statsAnalyzer/mqaUtil.d.ts +0 -48
  348. package/dist/statsAnalyzer/mqaUtil.js +0 -179
  349. package/dist/statsAnalyzer/mqaUtil.js.map +0 -1
  350. package/dist/transcription/index.d.ts +0 -64
  351. package/dist/types/common/errors/reconnection-in-progress.d.ts +0 -9
  352. package/dist/types/mediaQualityMetrics/config.d.ts +0 -241
  353. package/dist/types/networkQualityMonitor/index.d.ts +0 -70
  354. package/dist/types/rtcMetrics/constants.d.ts +0 -4
  355. package/dist/types/rtcMetrics/index.d.ts +0 -71
  356. package/dist/types/statsAnalyzer/global.d.ts +0 -36
  357. package/dist/types/statsAnalyzer/index.d.ts +0 -217
  358. package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -48
  359. package/dist/webinar/collection.d.ts +0 -16
  360. 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,22 @@ 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
+ _this14.transcription.languageOptions.currentSpokenLanguage = spokenLanguage;
3409
+ // @ts-ignore
3410
+ _this14.webex.internal.voicea.onSpokenLanguageUpdate(spokenLanguage);
3411
+ _triggerProxy.default.trigger(_this14, {
3412
+ file: 'meeting/index',
3413
+ function: 'setupLocusControlsListener'
3414
+ }, _constants.EVENT_TRIGGERS.MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED, {
3415
+ spokenLanguage: spokenLanguage
3416
+ });
3417
+ }
3418
+ });
3419
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_MANUAL_CAPTION_UPDATED, function (_ref13) {
3420
+ var enable = _ref13.enable;
3262
3421
  _triggerProxy.default.trigger(_this14, {
3263
3422
  file: 'meeting/index',
3264
3423
  function: 'setupLocusControlsListener'
@@ -3266,24 +3425,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3266
3425
  enable: enable
3267
3426
  });
3268
3427
  });
3269
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED, function (_ref13) {
3270
- var breakout = _ref13.breakout;
3428
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED, function (_ref14) {
3429
+ var breakout = _ref14.breakout;
3271
3430
  _this14.breakouts.updateBreakout(breakout);
3272
3431
  _triggerProxy.default.trigger(_this14, {
3273
3432
  file: 'meeting/index',
3274
3433
  function: 'setupLocusControlsListener'
3275
3434
  }, _constants.EVENT_TRIGGERS.MEETING_BREAKOUTS_UPDATE);
3276
3435
  });
3277
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_INTERPRETATION_UPDATED, function (_ref14) {
3278
- var interpretation = _ref14.interpretation;
3436
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_INTERPRETATION_UPDATED, function (_ref15) {
3437
+ var interpretation = _ref15.interpretation;
3279
3438
  _this14.simultaneousInterpretation.updateInterpretation(interpretation);
3280
3439
  _triggerProxy.default.trigger(_this14, {
3281
3440
  file: 'meeting/index',
3282
3441
  function: 'setupLocusControlsListener'
3283
3442
  }, _constants.EVENT_TRIGGERS.MEETING_INTERPRETATION_UPDATE);
3284
3443
  });
3285
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED, function (_ref15) {
3286
- var entryExitTone = _ref15.entryExitTone;
3444
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED, function (_ref16) {
3445
+ var entryExitTone = _ref16.entryExitTone;
3287
3446
  _triggerProxy.default.trigger(_this14, {
3288
3447
  file: 'meeting/index',
3289
3448
  function: 'setupLocusControlsListener'
@@ -3291,8 +3450,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3291
3450
  entryExitTone: entryExitTone
3292
3451
  });
3293
3452
  });
3294
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED, function (_ref16) {
3295
- var state = _ref16.state;
3453
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED, function (_ref17) {
3454
+ var state = _ref17.state;
3296
3455
  _triggerProxy.default.trigger(_this14, {
3297
3456
  file: 'meeting/index',
3298
3457
  function: 'setupLocusControlsListener'
@@ -3300,8 +3459,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3300
3459
  state: state
3301
3460
  });
3302
3461
  });
3303
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED, function (_ref17) {
3304
- var state = _ref17.state;
3462
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED, function (_ref18) {
3463
+ var state = _ref18.state;
3305
3464
  _triggerProxy.default.trigger(_this14, {
3306
3465
  file: 'meeting/index',
3307
3466
  function: 'setupLocusControlsListener'
@@ -3309,8 +3468,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3309
3468
  state: state
3310
3469
  });
3311
3470
  });
3312
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED, function (_ref18) {
3313
- var state = _ref18.state;
3471
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED, function (_ref19) {
3472
+ var state = _ref19.state;
3314
3473
  _triggerProxy.default.trigger(_this14, {
3315
3474
  file: 'meeting/index',
3316
3475
  function: 'setupLocusControlsListener'
@@ -3318,8 +3477,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3318
3477
  state: state
3319
3478
  });
3320
3479
  });
3321
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED, function (_ref19) {
3322
- var state = _ref19.state;
3480
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED, function (_ref20) {
3481
+ var state = _ref20.state;
3323
3482
  _triggerProxy.default.trigger(_this14, {
3324
3483
  file: 'meeting/index',
3325
3484
  function: 'setupLocusControlsListener'
@@ -3327,8 +3486,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3327
3486
  state: state
3328
3487
  });
3329
3488
  });
3330
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED, function (_ref20) {
3331
- var state = _ref20.state;
3489
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED, function (_ref21) {
3490
+ var state = _ref21.state;
3332
3491
  _triggerProxy.default.trigger(_this14, {
3333
3492
  file: 'meeting/index',
3334
3493
  function: 'setupLocusControlsListener'
@@ -3336,8 +3495,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3336
3495
  state: state
3337
3496
  });
3338
3497
  });
3339
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED, function (_ref21) {
3340
- var state = _ref21.state;
3498
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED, function (_ref22) {
3499
+ var state = _ref22.state;
3341
3500
  _triggerProxy.default.trigger(_this14, {
3342
3501
  file: 'meeting/index',
3343
3502
  function: 'setupLocusControlsListener'
@@ -3345,8 +3504,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3345
3504
  state: state
3346
3505
  });
3347
3506
  });
3348
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_WEBCAST_CHANGED, function (_ref22) {
3349
- var state = _ref22.state;
3507
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_WEBCAST_CHANGED, function (_ref23) {
3508
+ var state = _ref23.state;
3350
3509
  _triggerProxy.default.trigger(_this14, {
3351
3510
  file: 'meeting/index',
3352
3511
  function: 'setupLocusControlsListener'
@@ -3354,8 +3513,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3354
3513
  state: state
3355
3514
  });
3356
3515
  });
3357
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_FULL_CHANGED, function (_ref23) {
3358
- var state = _ref23.state;
3516
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_FULL_CHANGED, function (_ref24) {
3517
+ var state = _ref24.state;
3359
3518
  _triggerProxy.default.trigger(_this14, {
3360
3519
  file: 'meeting/index',
3361
3520
  function: 'setupLocusControlsListener'
@@ -3363,8 +3522,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3363
3522
  state: state
3364
3523
  });
3365
3524
  });
3366
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_PRACTICE_SESSION_STATUS_UPDATED, function (_ref24) {
3367
- var state = _ref24.state;
3525
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_PRACTICE_SESSION_STATUS_UPDATED, function (_ref25) {
3526
+ var state = _ref25.state;
3368
3527
  _this14.webinar.updatePracticeSessionStatus(state);
3369
3528
  _triggerProxy.default.trigger(_this14, {
3370
3529
  file: 'meeting/index',
@@ -3373,8 +3532,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3373
3532
  state: state
3374
3533
  });
3375
3534
  });
3376
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_STAGE_VIEW_UPDATED, function (_ref25) {
3377
- var state = _ref25.state;
3535
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_STAGE_VIEW_UPDATED, function (_ref26) {
3536
+ var state = _ref26.state;
3378
3537
  _triggerProxy.default.trigger(_this14, {
3379
3538
  file: 'meeting/index',
3380
3539
  function: 'setupLocusControlsListener'
@@ -3382,8 +3541,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3382
3541
  state: state
3383
3542
  });
3384
3543
  });
3385
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED, function (_ref26) {
3386
- var state = _ref26.state;
3544
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED, function (_ref27) {
3545
+ var state = _ref27.state;
3387
3546
  _triggerProxy.default.trigger(_this14, {
3388
3547
  file: 'meeting/index',
3389
3548
  function: 'setupLocusControlsListener'
@@ -3391,6 +3550,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3391
3550
  state: state
3392
3551
  });
3393
3552
  });
3553
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_ANNOTATION_CHANGED, function (_ref28) {
3554
+ var state = _ref28.state;
3555
+ _triggerProxy.default.trigger(_this14, {
3556
+ file: 'meeting/index',
3557
+ function: 'setupLocusControlsListener'
3558
+ }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_ANNOTATION_UPDATED, {
3559
+ state: state
3560
+ });
3561
+ });
3562
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED, function (_ref29) {
3563
+ var state = _ref29.state;
3564
+ _triggerProxy.default.trigger(_this14, {
3565
+ file: 'meeting/index',
3566
+ function: 'setupLocusControlsListener'
3567
+ }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_REMOTE_DESKTOP_CONTROL_UPDATED, {
3568
+ state: state
3569
+ });
3570
+ });
3394
3571
  }
3395
3572
 
3396
3573
  /**
@@ -3430,7 +3607,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3430
3607
  var _this15 = this;
3431
3608
  // Will get triggered on local and remote share
3432
3609
  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) {
3610
+ var _ref30 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8(payload) {
3434
3611
  var _payload$previous, _payload$previous2;
3435
3612
  var _payload$current, contentShare, whiteboardShare, previousContentShare, previousWhiteboardShare, newShareStatus, _this15$locusInfo, _this15$locusInfo$inf, _this15$webinar, oldShareStatus, sendStartedSharingRemote, _this15$mediaProperti;
3436
3613
  return _regenerator.default.wrap(function _callee8$(_context8) {
@@ -3516,6 +3693,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3516
3693
  case 26:
3517
3694
  sendStartedSharingRemote = function sendStartedSharingRemote() {
3518
3695
  _this15.remoteShareInstanceId = contentShare.shareInstanceId;
3696
+ _this15.shareCAEventSentStatus.receiveStart = false;
3697
+ _this15.shareCAEventSentStatus.receiveStop = false;
3519
3698
  _triggerProxy.default.trigger(_this15, {
3520
3699
  file: 'meetings/index',
3521
3700
  function: 'remoteShare'
@@ -3589,6 +3768,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3589
3768
  // if we got here, then some remote participant has stolen
3590
3769
  // the presentation from another remote participant
3591
3770
  _this15.remoteShareInstanceId = contentShare.shareInstanceId;
3771
+ _this15.shareCAEventSentStatus.receiveStart = false;
3772
+ _this15.shareCAEventSentStatus.receiveStop = false;
3592
3773
  _triggerProxy.default.trigger(_this15, {
3593
3774
  file: 'meetings/index',
3594
3775
  function: 'remoteShare'
@@ -3629,7 +3810,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3629
3810
  }, _callee8, null, [[27,, 31, 34]]);
3630
3811
  }));
3631
3812
  return function (_x8) {
3632
- return _ref27.apply(this, arguments);
3813
+ return _ref30.apply(this, arguments);
3633
3814
  };
3634
3815
  }());
3635
3816
  }
@@ -3743,8 +3924,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3743
3924
  });
3744
3925
  }
3745
3926
  });
3746
- this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEETING_INFO_UPDATED, function (_ref28) {
3747
- var isInitializing = _ref28.isInitializing;
3927
+ this.locusInfo.on(_constants.LOCUSINFO.EVENTS.MEETING_INFO_UPDATED, function (_ref31) {
3928
+ var isInitializing = _ref31.isInitializing;
3748
3929
  _this19.updateMeetingActions();
3749
3930
  _this19.recordingController.setDisplayHints(_this19.userDisplayHints);
3750
3931
  _this19.recordingController.setUserPolicy(_this19.selfUserPolicies);
@@ -3882,7 +4063,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3882
4063
  _this21.updateLLMConnection();
3883
4064
  });
3884
4065
  this.locusInfo.on(_constants.LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST, /*#__PURE__*/function () {
3885
- var _ref29 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(payload) {
4066
+ var _ref32 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(payload) {
3886
4067
  var _this21$rtcMetrics;
3887
4068
  return _regenerator.default.wrap(function _callee9$(_context9) {
3888
4069
  while (1) switch (_context9.prev = _context9.next) {
@@ -3916,7 +4097,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
3916
4097
  }, _callee9);
3917
4098
  }));
3918
4099
  return function (_x9) {
3919
- return _ref29.apply(this, arguments);
4100
+ return _ref32.apply(this, arguments);
3920
4101
  };
3921
4102
  }());
3922
4103
 
@@ -4035,7 +4216,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4035
4216
  }
4036
4217
  });
4037
4218
  this.locusInfo.on(_constants.EVENTS.DESTROY_MEETING, /*#__PURE__*/function () {
4038
- var _ref30 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(payload) {
4219
+ var _ref33 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee10(payload) {
4039
4220
  return _regenerator.default.wrap(function _callee10$(_context10) {
4040
4221
  while (1) switch (_context10.prev = _context10.next) {
4041
4222
  case 0:
@@ -4095,7 +4276,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4095
4276
  }, _callee10, null, [[8, 14]]);
4096
4277
  }));
4097
4278
  return function (_x10) {
4098
- return _ref30.apply(this, arguments);
4279
+ return _ref33.apply(this, arguments);
4099
4280
  };
4100
4281
  }());
4101
4282
  }
@@ -4154,6 +4335,20 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4154
4335
  return this.members.cancelPhoneInvite(invitee);
4155
4336
  }
4156
4337
 
4338
+ /**
4339
+ * Cancel an SIP call invitation made during a meeting
4340
+ * @param {Object} invitee
4341
+ * @param {String} invitee.memberId
4342
+ * @returns {Promise} see #members.cancelSIPInvite
4343
+ * @public
4344
+ * @memberof Meeting
4345
+ */
4346
+ }, {
4347
+ key: "cancelSIPInvite",
4348
+ value: function cancelSIPInvite(invitee) {
4349
+ return this.members.cancelSIPInvite(invitee);
4350
+ }
4351
+
4157
4352
  /**
4158
4353
  * Admit the guest(s) to the call once they are waiting.
4159
4354
  * If the host/cohost is in a breakout session, the locus url
@@ -4197,6 +4392,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4197
4392
  key: "beRightBack",
4198
4393
  value: (function () {
4199
4394
  var _beRightBack = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee11(enabled) {
4395
+ var _this24 = this;
4200
4396
  var errorMessage, error, _errorMessage, _error;
4201
4397
  return _regenerator.default.wrap(function _callee11$(_context11) {
4202
4398
  while (1) switch (_context11.prev = _context11.next) {
@@ -4219,7 +4415,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4219
4415
  _loggerProxy.default.logger.error(_error);
4220
4416
  return _context11.abrupt("return", _promise.default.reject(_error));
4221
4417
  case 10:
4222
- return _context11.abrupt("return", this.brbState.enable(enabled, this.sendSlotManager));
4418
+ return _context11.abrupt("return", this.brbState.enable(enabled, this.sendSlotManager).then(function () {
4419
+ if (_this24.audio && enabled) {
4420
+ // locus mutes the participant with brb enabled request,
4421
+ // so we need to explicitly update remote mute for correct logic flow
4422
+ _this24.audio.handleServerRemoteMuteUpdate(_this24, enabled);
4423
+ }
4424
+ }).catch(function (error) {
4425
+ return _promise.default.reject(error);
4426
+ }));
4223
4427
  case 11:
4224
4428
  case "end":
4225
4429
  return _context11.stop();
@@ -4405,7 +4609,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4405
4609
  canAdmitParticipant: _util2.default.canAdmitParticipant(this.userDisplayHints),
4406
4610
  canLock: _util2.default.canUserLock(this.userDisplayHints),
4407
4611
  canUnlock: _util2.default.canUserUnlock(this.userDisplayHints),
4408
- canShareWhiteBoard: _util2.default.canShareWhiteBoard(this.userDisplayHints),
4612
+ canShareWhiteBoard: _util2.default.canShareWhiteBoard(this.userDisplayHints, this.selfUserPolicies),
4409
4613
  canSetDisallowUnmute: _util5.default.canSetDisallowUnmute(this.userDisplayHints),
4410
4614
  canUnsetDisallowUnmute: _util5.default.canUnsetDisallowUnmute(this.userDisplayHints),
4411
4615
  canSetMuteOnEntry: _util5.default.canSetMuteOnEntry(this.userDisplayHints),
@@ -4435,6 +4639,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4435
4639
  canSelectSpokenLanguages: _util2.default.canSelectSpokenLanguages(this.userDisplayHints),
4436
4640
  waitingForOthersToJoin: _util2.default.waitingForOthersToJoin(this.userDisplayHints),
4437
4641
  canSendReactions: _util2.default.canSendReactions(this.inMeetingActions.canSendReactions, this.userDisplayHints),
4642
+ requiresPostMeetingDataConsentPrompt: _util2.default.requiresPostMeetingDataConsentPrompt(this.userDisplayHints),
4438
4643
  canManageBreakout: _util2.default.canManageBreakout(this.userDisplayHints),
4439
4644
  canStartBreakout: _util2.default.canStartBreakout(this.userDisplayHints),
4440
4645
  canBroadcastMessageToBreakout: _util2.default.canBroadcastMessageToBreakout(this.userDisplayHints, this.selfUserPolicies),
@@ -4443,6 +4648,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4443
4648
  canUserAskForHelp: _util2.default.canUserAskForHelp(this.userDisplayHints),
4444
4649
  canUserRenameSelfAndObserved: _util2.default.canUserRenameSelfAndObserved(this.userDisplayHints),
4445
4650
  canUserRenameOthers: _util2.default.canUserRenameOthers(this.userDisplayHints),
4651
+ canMoveToLobby: _util2.default.canMoveToLobby(this.userDisplayHints),
4446
4652
  canMuteAll: _util5.default.hasHints({
4447
4653
  requiredHints: [_constants.DISPLAY_HINTS.MUTE_ALL],
4448
4654
  displayHints: this.userDisplayHints
@@ -4574,6 +4780,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4574
4780
  requiredPolicies: [_constants.SELF_POLICY.SUPPORT_FILE_TRANSFER],
4575
4781
  policies: this.selfUserPolicies
4576
4782
  }),
4783
+ canRealtimeCloseCaption: _util5.default.hasPolicies({
4784
+ requiredPolicies: [_constants.SELF_POLICY.SUPPORT_REALTIME_CLOSE_CAPTION],
4785
+ policies: this.selfUserPolicies
4786
+ }),
4787
+ canRealtimeCloseCaptionManual: _util5.default.hasPolicies({
4788
+ requiredPolicies: [_constants.SELF_POLICY.SUPPORT_REALTIME_CLOSE_CAPTION_MANUAL],
4789
+ policies: this.selfUserPolicies
4790
+ }),
4577
4791
  canChat: _util5.default.hasPolicies({
4578
4792
  requiredPolicies: [_constants.SELF_POLICY.SUPPORT_CHAT],
4579
4793
  policies: this.selfUserPolicies
@@ -4610,6 +4824,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4610
4824
  canAnnotate: _util5.default.hasPolicies({
4611
4825
  requiredPolicies: [_constants.SELF_POLICY.SUPPORT_ANNOTATION],
4612
4826
  policies: this.selfUserPolicies
4827
+ }),
4828
+ canEnableAnnotation: _util5.default.hasHints({
4829
+ requiredHints: [_constants.DISPLAY_HINTS.ENABLE_ANNOTATION_MEETING_OPTION],
4830
+ displayHints: this.userDisplayHints
4831
+ }),
4832
+ canDisableAnnotation: _util5.default.hasHints({
4833
+ requiredHints: [_constants.DISPLAY_HINTS.DISABLE_ANNOTATION_MEETING_OPTION],
4834
+ displayHints: this.userDisplayHints
4835
+ }),
4836
+ canEnableRemoteDesktopControl: _util5.default.hasHints({
4837
+ requiredHints: [_constants.DISPLAY_HINTS.ENABLE_RDC_MEETING_OPTION],
4838
+ displayHints: this.userDisplayHints
4839
+ }),
4840
+ canDisableRemoteDesktopControl: _util5.default.hasHints({
4841
+ requiredHints: [_constants.DISPLAY_HINTS.DISABLE_RDC_MEETING_OPTION],
4842
+ displayHints: this.userDisplayHints
4613
4843
  })
4614
4844
  }) || changed;
4615
4845
  }
@@ -4714,7 +4944,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4714
4944
  }, {
4715
4945
  key: "setLogUploadTimer",
4716
4946
  value: function setLogUploadTimer() {
4717
- var _this24 = this;
4947
+ var _this25 = this;
4718
4948
  // 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
4949
  var LOG_UPLOAD_INTERVALS = [0.1, 15, 30, 60]; // in minutes
4720
4950
 
@@ -4725,15 +4955,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4725
4955
  this.logUploadIntervalIndex += 1;
4726
4956
  }
4727
4957
  this.uploadLogsTimer = (0, _commonTimers.safeSetTimeout)(function () {
4728
- _this24.uploadLogsTimer = undefined;
4729
- _this24.uploadLogs();
4958
+ _this25.uploadLogsTimer = undefined;
4959
+ _this25.uploadLogs();
4730
4960
 
4731
4961
  // just as an extra precaution, to avoid uploading logs forever in case something goes wrong
4732
4962
  // and the page remains opened, we stop it if there is no media connection
4733
- if (!_this24.mediaProperties.webrtcMediaConnection) {
4963
+ if (!_this25.mediaProperties.webrtcMediaConnection) {
4734
4964
  return;
4735
4965
  }
4736
- _this24.setLogUploadTimer();
4966
+ _this25.setLogUploadTimer();
4737
4967
  }, delay);
4738
4968
  }
4739
4969
 
@@ -4800,7 +5030,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4800
5030
  }, {
4801
5031
  key: "closeRemoteStreams",
4802
5032
  value: function closeRemoteStreams() {
4803
- var _this25 = this;
5033
+ var _this26 = this;
4804
5034
  var _this$mediaProperties6 = this.mediaProperties,
4805
5035
  remoteAudioStream = _this$mediaProperties6.remoteAudioStream,
4806
5036
  remoteVideoStream = _this$mediaProperties6.remoteVideoStream,
@@ -4814,7 +5044,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
4814
5044
  */
4815
5045
  // eslint-disable-next-line @typescript-eslint/no-shadow
4816
5046
  var triggerMediaStoppedEvent = function triggerMediaStoppedEvent(mediaType) {
4817
- _triggerProxy.default.trigger(_this25, {
5047
+ _triggerProxy.default.trigger(_this26, {
4818
5048
  file: 'meeting/index',
4819
5049
  function: 'closeRemoteStreams'
4820
5050
  }, _constants.EVENT_TRIGGERS.MEDIA_STOPPED, {
@@ -5122,7 +5352,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5122
5352
  }, {
5123
5353
  key: "setMercuryListener",
5124
5354
  value: function setMercuryListener() {
5125
- var _this26 = this;
5355
+ var _this27 = this;
5126
5356
  // Client will have a socket manager and handle reconnecting to mercury, when we reconnect to mercury
5127
5357
  // if the meeting has active peer connections, it should try to reconnect.
5128
5358
  // @ts-ignore
@@ -5130,33 +5360,33 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5130
5360
  _loggerProxy.default.logger.info('Meeting:index#setMercuryListener --> Web socket online');
5131
5361
 
5132
5362
  // Only send restore event when it was disconnected before and for connected later
5133
- if (!_this26.hasWebsocketConnected) {
5363
+ if (!_this27.hasWebsocketConnected) {
5134
5364
  // @ts-ignore
5135
- _this26.webex.internal.newMetrics.submitClientEvent({
5365
+ _this27.webex.internal.newMetrics.submitClientEvent({
5136
5366
  name: 'client.mercury.connection.restored',
5137
5367
  options: {
5138
- meetingId: _this26.id
5368
+ meetingId: _this27.id
5139
5369
  }
5140
5370
  });
5141
5371
  _metrics.default.sendBehavioralMetric(_constants2.default.MERCURY_CONNECTION_RESTORED, {
5142
- correlation_id: _this26.correlationId
5372
+ correlation_id: _this27.correlationId
5143
5373
  });
5144
5374
  }
5145
- _this26.hasWebsocketConnected = true;
5375
+ _this27.hasWebsocketConnected = true;
5146
5376
  });
5147
5377
 
5148
5378
  // @ts-ignore
5149
5379
  this.webex.internal.mercury.on(_constants.OFFLINE, function () {
5150
5380
  _loggerProxy.default.logger.error('Meeting:index#setMercuryListener --> Web socket offline');
5151
5381
  // @ts-ignore
5152
- _this26.webex.internal.newMetrics.submitClientEvent({
5382
+ _this27.webex.internal.newMetrics.submitClientEvent({
5153
5383
  name: 'client.mercury.connection.lost',
5154
5384
  options: {
5155
- meetingId: _this26.id
5385
+ meetingId: _this27.id
5156
5386
  }
5157
5387
  });
5158
5388
  _metrics.default.sendBehavioralMetric(_constants2.default.MERCURY_CONNECTION_FAILURE, {
5159
- correlation_id: _this26.correlationId
5389
+ correlation_id: _this27.correlationId
5160
5390
  });
5161
5391
  });
5162
5392
  }
@@ -5263,7 +5493,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5263
5493
  }, {
5264
5494
  key: "muteAudio",
5265
5495
  value: function muteAudio() {
5266
- var _this27 = this;
5496
+ var _this28 = this;
5267
5497
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5268
5498
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5269
5499
  }
@@ -5279,22 +5509,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5279
5509
 
5280
5510
  // First, stop sending the local audio media
5281
5511
  return logRequest(this.audio.handleClientRequest(this, true).then(function () {
5282
- _util2.default.handleAudioLogging(_this27.mediaProperties.audioStream);
5512
+ _util2.default.handleAudioLogging(_this28.mediaProperties.audioStream);
5283
5513
  // @ts-ignore
5284
- _this27.webex.internal.newMetrics.submitClientEvent({
5514
+ _this28.webex.internal.newMetrics.submitClientEvent({
5285
5515
  name: 'client.muted',
5286
5516
  payload: {
5287
5517
  trigger: 'user-interaction',
5288
5518
  mediaType: 'audio'
5289
5519
  },
5290
5520
  options: {
5291
- meetingId: _this27.id
5521
+ meetingId: _this28.id
5292
5522
  }
5293
5523
  });
5294
5524
  }).catch(function (error) {
5295
5525
  _metrics.default.sendBehavioralMetric(_constants2.default.MUTE_AUDIO_FAILURE, {
5296
- correlation_id: _this27.correlationId,
5297
- locus_id: _this27.locusUrl.split('/').pop(),
5526
+ correlation_id: _this28.correlationId,
5527
+ locus_id: _this28.locusUrl.split('/').pop(),
5298
5528
  reason: error.message,
5299
5529
  stack: error.stack
5300
5530
  });
@@ -5313,7 +5543,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5313
5543
  }, {
5314
5544
  key: "unmuteAudio",
5315
5545
  value: function unmuteAudio() {
5316
- var _this28 = this;
5546
+ var _this29 = this;
5317
5547
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5318
5548
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5319
5549
  }
@@ -5329,22 +5559,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5329
5559
 
5330
5560
  // First, send the control to unmute the participant on the server
5331
5561
  return logRequest(this.audio.handleClientRequest(this, false).then(function () {
5332
- _util2.default.handleAudioLogging(_this28.mediaProperties.audioStream);
5562
+ _util2.default.handleAudioLogging(_this29.mediaProperties.audioStream);
5333
5563
  // @ts-ignore
5334
- _this28.webex.internal.newMetrics.submitClientEvent({
5564
+ _this29.webex.internal.newMetrics.submitClientEvent({
5335
5565
  name: 'client.unmuted',
5336
5566
  payload: {
5337
5567
  trigger: 'user-interaction',
5338
5568
  mediaType: 'audio'
5339
5569
  },
5340
5570
  options: {
5341
- meetingId: _this28.id
5571
+ meetingId: _this29.id
5342
5572
  }
5343
5573
  });
5344
5574
  }).catch(function (error) {
5345
5575
  _metrics.default.sendBehavioralMetric(_constants2.default.UNMUTE_AUDIO_FAILURE, {
5346
- correlation_id: _this28.correlationId,
5347
- locus_id: _this28.locusUrl.split('/').pop(),
5576
+ correlation_id: _this29.correlationId,
5577
+ locus_id: _this29.locusUrl.split('/').pop(),
5348
5578
  reason: error.message,
5349
5579
  stack: error.stack
5350
5580
  });
@@ -5363,7 +5593,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5363
5593
  }, {
5364
5594
  key: "muteVideo",
5365
5595
  value: function muteVideo() {
5366
- var _this29 = this;
5596
+ var _this30 = this;
5367
5597
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5368
5598
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5369
5599
  }
@@ -5377,22 +5607,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5377
5607
  return _promise.default.reject(new _parameter.default('no video control associated to the meeting'));
5378
5608
  }
5379
5609
  return logRequest(this.video.handleClientRequest(this, true).then(function () {
5380
- _util2.default.handleVideoLogging(_this29.mediaProperties.videoStream);
5610
+ _util2.default.handleVideoLogging(_this30.mediaProperties.videoStream);
5381
5611
  // @ts-ignore
5382
- _this29.webex.internal.newMetrics.submitClientEvent({
5612
+ _this30.webex.internal.newMetrics.submitClientEvent({
5383
5613
  name: 'client.muted',
5384
5614
  payload: {
5385
5615
  trigger: 'user-interaction',
5386
5616
  mediaType: 'video'
5387
5617
  },
5388
5618
  options: {
5389
- meetingId: _this29.id
5619
+ meetingId: _this30.id
5390
5620
  }
5391
5621
  });
5392
5622
  }).catch(function (error) {
5393
5623
  _metrics.default.sendBehavioralMetric(_constants2.default.MUTE_VIDEO_FAILURE, {
5394
- correlation_id: _this29.correlationId,
5395
- locus_id: _this29.locusUrl.split('/').pop(),
5624
+ correlation_id: _this30.correlationId,
5625
+ locus_id: _this30.locusUrl.split('/').pop(),
5396
5626
  reason: error.message,
5397
5627
  stack: error.stack
5398
5628
  });
@@ -5411,7 +5641,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5411
5641
  }, {
5412
5642
  key: "unmuteVideo",
5413
5643
  value: function unmuteVideo() {
5414
- var _this30 = this;
5644
+ var _this31 = this;
5415
5645
  if (!_util2.default.isUserInJoinedState(this.locusInfo)) {
5416
5646
  return _promise.default.reject(new _webexErrors.UserNotJoinedError());
5417
5647
  }
@@ -5425,22 +5655,22 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5425
5655
  return _promise.default.reject(new _parameter.default('no audio control associated to the meeting'));
5426
5656
  }
5427
5657
  return logRequest(this.video.handleClientRequest(this, false).then(function () {
5428
- _util2.default.handleVideoLogging(_this30.mediaProperties.videoStream);
5658
+ _util2.default.handleVideoLogging(_this31.mediaProperties.videoStream);
5429
5659
  // @ts-ignore
5430
- _this30.webex.internal.newMetrics.submitClientEvent({
5660
+ _this31.webex.internal.newMetrics.submitClientEvent({
5431
5661
  name: 'client.unmuted',
5432
5662
  payload: {
5433
5663
  trigger: 'user-interaction',
5434
5664
  mediaType: 'video'
5435
5665
  },
5436
5666
  options: {
5437
- meetingId: _this30.id
5667
+ meetingId: _this31.id
5438
5668
  }
5439
5669
  });
5440
5670
  }).catch(function (error) {
5441
5671
  _metrics.default.sendBehavioralMetric(_constants2.default.UNMUTE_VIDEO_FAILURE, {
5442
- correlation_id: _this30.correlationId,
5443
- locus_id: _this30.locusUrl.split('/').pop(),
5672
+ correlation_id: _this31.correlationId,
5673
+ locus_id: _this31.locusUrl.split('/').pop(),
5444
5674
  reason: error.message,
5445
5675
  stack: error.stack
5446
5676
  });
@@ -5470,7 +5700,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5470
5700
  key: "joinWithMedia",
5471
5701
  value: (function () {
5472
5702
  var _joinWithMedia = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee16() {
5473
- var _this31 = this;
5703
+ var _this32 = this;
5474
5704
  var options,
5475
5705
  mediaOptions,
5476
5706
  _options$joinOptions,
@@ -5553,7 +5783,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5553
5783
  case 35:
5554
5784
  _context16.next = 37;
5555
5785
  return this.addMediaInternal(function () {
5556
- return _this31.joinWithMediaRetryInfo.isRetry ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
5786
+ return _this32.joinWithMediaRetryInfo.isRetry ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
5557
5787
  }, turnServerInfo, forceTurnDiscovery, mediaOptions);
5558
5788
  case 37:
5559
5789
  mediaResponse = _context16.sent;
@@ -5648,7 +5878,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5648
5878
  }, {
5649
5879
  key: "reconnect",
5650
5880
  value: function reconnect(options) {
5651
- var _this32 = this;
5881
+ var _this33 = this;
5652
5882
  _loggerProxy.default.logger.log("Meeting:index#reconnect --> attempting to reconnect meeting ".concat(this.id));
5653
5883
  if (!this.reconnectionManager || !this.reconnectionManager.reconnect) {
5654
5884
  return _promise.default.reject(new _parameter.default('Cannot reconnect, ReconnectionManager must first be defined.'));
@@ -5664,10 +5894,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5664
5894
  while (1) switch (_context17.prev = _context17.next) {
5665
5895
  case 0:
5666
5896
  _context17.next = 2;
5667
- return _this32.waitForRemoteSDPAnswer();
5897
+ return _this33.waitForRemoteSDPAnswer();
5668
5898
  case 2:
5669
5899
  _context17.next = 4;
5670
- return _this32.waitForMediaConnectionConnected();
5900
+ return _this33.waitForMediaConnectionConnected();
5671
5901
  case 4:
5672
5902
  case "end":
5673
5903
  return _context17.stop();
@@ -5681,7 +5911,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5681
5911
  return _promise.default.resolve();
5682
5912
  }
5683
5913
  _loggerProxy.default.logger.error('Meeting:index#reconnect --> Meeting reconnect failed', error);
5684
- _this32.uploadLogs({
5914
+ _this33.uploadLogs({
5685
5915
  file: 'meeting/index',
5686
5916
  function: 'reconnect'
5687
5917
  });
@@ -5728,19 +5958,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5728
5958
  }, {
5729
5959
  key: "setCaptionLanguage",
5730
5960
  value: function setCaptionLanguage(language) {
5731
- var _this33 = this;
5961
+ var _this34 = this;
5732
5962
  return new _promise.default(function (resolve, reject) {
5733
- if (!_this33.isTranscriptionSupported()) {
5963
+ if (!_this34.isTranscriptionSupported()) {
5734
5964
  _loggerProxy.default.logger.error('Meeting:index#setCaptionLanguage --> Webex Assistant is not enabled/supported');
5735
5965
  reject(new Error('Webex Assistant is not enabled/supported'));
5736
5966
  }
5737
5967
  try {
5738
5968
  var voiceaListenerCaptionUpdate = function voiceaListenerCaptionUpdate(payload) {
5739
5969
  // @ts-ignore
5740
- _this33.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5970
+ _this34.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5741
5971
  var statusCode = payload.statusCode;
5742
5972
  if (statusCode === 200) {
5743
- _this33.transcription.languageOptions = _objectSpread(_objectSpread({}, _this33.transcription.languageOptions), {}, {
5973
+ _this34.transcription.languageOptions = _objectSpread(_objectSpread({}, _this34.transcription.languageOptions), {}, {
5744
5974
  currentCaptionLanguage: language
5745
5975
  });
5746
5976
  resolve(language);
@@ -5749,9 +5979,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5749
5979
  }
5750
5980
  };
5751
5981
  // @ts-ignore
5752
- _this33.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5982
+ _this34.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.CAPTION_LANGUAGE_UPDATE, voiceaListenerCaptionUpdate);
5753
5983
  // @ts-ignore
5754
- _this33.webex.internal.voicea.requestLanguage(language);
5984
+ _this34.webex.internal.voicea.requestLanguage(language);
5755
5985
  } catch (error) {
5756
5986
  _loggerProxy.default.logger.error("Meeting:index#setCaptionLanguage --> ".concat(error));
5757
5987
  reject(error);
@@ -5767,23 +5997,23 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5767
5997
  }, {
5768
5998
  key: "setSpokenLanguage",
5769
5999
  value: function setSpokenLanguage(language) {
5770
- var _this34 = this;
6000
+ var _this35 = this;
5771
6001
  return new _promise.default(function (resolve, reject) {
5772
- if (!_this34.isTranscriptionSupported()) {
6002
+ if (!_this35.isTranscriptionSupported()) {
5773
6003
  _loggerProxy.default.logger.error('Meeting:index#setCaptionLanguage --> Webex Assistant is not enabled/supported');
5774
6004
  reject(new Error('Webex Assistant is not enabled/supported'));
5775
6005
  }
5776
- if (_this34.getCurUserType() !== 'host') {
6006
+ if (_this35.getCurUserType() !== 'host') {
5777
6007
  _loggerProxy.default.logger.error('Meeting:index#setSpokenLanguage --> Only host can set spoken language');
5778
6008
  reject(new Error('Only host can set spoken language'));
5779
6009
  }
5780
6010
  try {
5781
6011
  var voiceaListenerLanguageUpdate = function voiceaListenerLanguageUpdate(payload) {
5782
6012
  // @ts-ignore
5783
- _this34.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
6013
+ _this35.webex.internal.voicea.off(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5784
6014
  var languageCode = payload.languageCode;
5785
6015
  if (languageCode) {
5786
- _this34.transcription.languageOptions = _objectSpread(_objectSpread({}, _this34.transcription.languageOptions), {}, {
6016
+ _this35.transcription.languageOptions = _objectSpread(_objectSpread({}, _this35.transcription.languageOptions), {}, {
5787
6017
  currentSpokenLanguage: languageCode
5788
6018
  });
5789
6019
  resolve(languageCode);
@@ -5793,10 +6023,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5793
6023
  };
5794
6024
 
5795
6025
  // @ts-ignore
5796
- _this34.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
6026
+ _this35.webex.internal.voicea.on(_internalPluginVoicea.EVENT_TRIGGERS.SPOKEN_LANGUAGE_UPDATE, voiceaListenerLanguageUpdate);
5797
6027
 
5798
6028
  // @ts-ignore
5799
- _this34.webex.internal.voicea.setSpokenLanguage(language);
6029
+ _this35.webex.internal.voicea.setSpokenLanguage(language);
5800
6030
  } catch (error) {
5801
6031
  _loggerProxy.default.logger.error("Meeting:index#setSpokenLanguage --> ".concat(error));
5802
6032
  reject(error);
@@ -5919,7 +6149,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
5919
6149
  */
5920
6150
  function () {
5921
6151
  var _join = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee19() {
5922
- var _this35 = this;
6152
+ var _this36 = this;
5923
6153
  var options,
5924
6154
  errorMessage,
5925
6155
  error,
@@ -6068,62 +6298,61 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6068
6298
  return _context19.abrupt("return", _promise.default.reject(_context19.t0));
6069
6299
  case 51:
6070
6300
  return _context19.abrupt("return", _util2.default.joinMeetingOptions(this, options).then(function (join) {
6071
- _this35.meetingFiniteStateMachine.join();
6072
- _this35.setupLocusMediaRequest();
6301
+ _this36.meetingFiniteStateMachine.join();
6302
+ _this36.setupLocusMediaRequest();
6073
6303
 
6074
6304
  // @ts-ignore
6075
- _this35.webex.internal.device.meetingStarted();
6076
- (0, _classPrivateFieldSet2.default)(_this35, _isoLocalClientMeetingJoinTime, new Date().toISOString());
6305
+ _this36.webex.internal.device.meetingStarted();
6077
6306
  _loggerProxy.default.logger.log('Meeting:index#join --> Success');
6078
6307
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_SUCCESS, {
6079
- correlation_id: _this35.correlationId
6308
+ correlation_id: _this36.correlationId
6080
6309
  });
6081
6310
  joinSuccess(join);
6082
- _this35.deferJoin = undefined;
6311
+ _this36.deferJoin = undefined;
6083
6312
  return join;
6084
6313
  }).catch(function (error) {
6085
- var _this35$meetingInfo, _error$error;
6086
- _this35.meetingFiniteStateMachine.fail(error);
6314
+ var _this36$meetingInfo, _error$error;
6315
+ _this36.meetingFiniteStateMachine.fail(error);
6087
6316
  _loggerProxy.default.logger.error('Meeting:index#join --> Failed', error);
6088
6317
 
6089
6318
  // @ts-ignore
6090
- _this35.webex.internal.newMetrics.submitClientEvent({
6319
+ _this36.webex.internal.newMetrics.submitClientEvent({
6091
6320
  name: 'client.locus.join.response',
6092
6321
  payload: {
6093
6322
  identifiers: {
6094
- meetingLookupUrl: (_this35$meetingInfo = _this35.meetingInfo) === null || _this35$meetingInfo === void 0 ? void 0 : _this35$meetingInfo.meetingLookupUrl
6323
+ meetingLookupUrl: (_this36$meetingInfo = _this36.meetingInfo) === null || _this36$meetingInfo === void 0 ? void 0 : _this36$meetingInfo.meetingLookupUrl
6095
6324
  }
6096
6325
  },
6097
6326
  options: {
6098
- meetingId: _this35.id,
6327
+ meetingId: _this36.id,
6099
6328
  rawError: error
6100
6329
  }
6101
6330
  });
6102
6331
 
6103
6332
  // TODO: change this to error codes and pre defined dictionary
6104
6333
  _metrics.default.sendBehavioralMetric(_constants2.default.JOIN_FAILURE, {
6105
- correlation_id: _this35.correlationId,
6334
+ correlation_id: _this36.correlationId,
6106
6335
  reason: (_error$error = error.error) === null || _error$error === void 0 ? void 0 : _error$error.message,
6107
6336
  stack: error.stack
6108
6337
  });
6109
6338
 
6110
6339
  // Upload logs on join Failure
6111
- _triggerProxy.default.trigger(_this35, {
6340
+ _triggerProxy.default.trigger(_this36, {
6112
6341
  file: 'meeting/index',
6113
6342
  function: 'join'
6114
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this35);
6343
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this36);
6115
6344
  joinFailed(error);
6116
- _this35.deferJoin = undefined;
6345
+ _this36.deferJoin = undefined;
6117
6346
  return _promise.default.reject(error);
6118
6347
  }).then(function (join) {
6119
6348
  // @ts-ignore - config coming from registerPlugin
6120
- if (_this35.config.enableAutomaticLLM) {
6349
+ if (_this36.config.enableAutomaticLLM) {
6121
6350
  // @ts-ignore
6122
- _this35.webex.internal.llm.on('online', _this35.handleLLMOnline);
6123
- _this35.updateLLMConnection().catch(function (error) {
6351
+ _this36.webex.internal.llm.on('online', _this36.handleLLMOnline);
6352
+ _this36.updateLLMConnection().catch(function (error) {
6124
6353
  _loggerProxy.default.logger.error('Meeting:index#join --> Transcription Socket Connection Failed', error);
6125
6354
  _metrics.default.sendBehavioralMetric(_constants2.default.LLM_CONNECTION_AFTER_JOIN_FAILURE, {
6126
- correlation_id: _this35.correlationId,
6355
+ correlation_id: _this36.correlationId,
6127
6356
  reason: error === null || error === void 0 ? void 0 : error.message,
6128
6357
  stack: error.stack
6129
6358
  });
@@ -6155,7 +6384,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6155
6384
  key: "updateLLMConnection",
6156
6385
  value: (function () {
6157
6386
  var _updateLLMConnection = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee20() {
6158
- var _this36 = this;
6387
+ var _this37 = this;
6159
6388
  var _this$locusInfo6, url, _this$locusInfo6$info, _this$locusInfo6$info2, datachannelUrl, practiceSessionDatachannelUrl, isJoined, dataChannelUrl;
6160
6389
  return _regenerator.default.wrap(function _callee20$(_context20) {
6161
6390
  while (1) switch (_context20.prev = _context20.next) {
@@ -6179,7 +6408,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6179
6408
  return _context20.abrupt("return", undefined);
6180
6409
  case 6:
6181
6410
  _context20.next = 8;
6182
- return this.webex.internal.llm.disconnectLLM();
6411
+ return this.webex.internal.llm.disconnectLLM(isJoined ? {
6412
+ code: 3050,
6413
+ reason: 'done (permanent)'
6414
+ } : undefined);
6183
6415
  case 8:
6184
6416
  // @ts-ignore - Fix type
6185
6417
  this.webex.internal.llm.off('event:relay.event', this.processRelayEvent);
@@ -6192,9 +6424,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6192
6424
  case 11:
6193
6425
  return _context20.abrupt("return", this.webex.internal.llm.registerAndConnect(url, dataChannelUrl).then(function (registerAndConnectResult) {
6194
6426
  // @ts-ignore - Fix type
6195
- _this36.webex.internal.llm.off('event:relay.event', _this36.processRelayEvent);
6427
+ _this37.webex.internal.llm.off('event:relay.event', _this37.processRelayEvent);
6196
6428
  // @ts-ignore - Fix type
6197
- _this36.webex.internal.llm.on('event:relay.event', _this36.processRelayEvent);
6429
+ _this37.webex.internal.llm.on('event:relay.event', _this37.processRelayEvent);
6198
6430
  _loggerProxy.default.logger.info('Meeting:index#updateLLMConnection --> enabled to receive relay events!');
6199
6431
  return _promise.default.resolve(registerAndConnectResult);
6200
6432
  }));
@@ -6248,7 +6480,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6248
6480
  }, {
6249
6481
  key: "dialInPstn",
6250
6482
  value: function dialInPstn() {
6251
- var _this37 = this;
6483
+ var _this38 = this;
6252
6484
  if (this.isPhoneProvisioned(this.dialInDeviceStatus)) return _promise.default.resolve(); // prevent multiple dial in devices from being provisioned
6253
6485
 
6254
6486
  var correlationId = this.correlationId,
@@ -6264,10 +6496,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6264
6496
  }).catch(function (error) {
6265
6497
  var _error$error2;
6266
6498
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_DIAL_IN_FAILURE, {
6267
- correlation_id: _this37.correlationId,
6268
- dial_in_url: _this37.dialInUrl,
6499
+ correlation_id: _this38.correlationId,
6500
+ dial_in_url: _this38.dialInUrl,
6269
6501
  locus_id: locusUrl.split('/').pop(),
6270
- client_url: _this37.deviceUrl,
6502
+ client_url: _this38.deviceUrl,
6271
6503
  reason: (_error$error2 = error.error) === null || _error$error2 === void 0 ? void 0 : _error$error2.message,
6272
6504
  stack: error.stack
6273
6505
  });
@@ -6285,7 +6517,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6285
6517
  }, {
6286
6518
  key: "dialOutPstn",
6287
6519
  value: function dialOutPstn(phoneNumber) {
6288
- var _this38 = this;
6520
+ var _this39 = this;
6289
6521
  if (this.isPhoneProvisioned(this.dialOutDeviceStatus)) return _promise.default.resolve(); // prevent multiple dial out devices from being provisioned
6290
6522
 
6291
6523
  var correlationId = this.correlationId,
@@ -6302,10 +6534,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6302
6534
  }).catch(function (error) {
6303
6535
  var _error$error3;
6304
6536
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_DIAL_OUT_FAILURE, {
6305
- correlation_id: _this38.correlationId,
6306
- dial_out_url: _this38.dialOutUrl,
6537
+ correlation_id: _this39.correlationId,
6538
+ dial_out_url: _this39.dialOutUrl,
6307
6539
  locus_id: locusUrl.split('/').pop(),
6308
- client_url: _this38.deviceUrl,
6540
+ client_url: _this39.deviceUrl,
6309
6541
  reason: (_error$error3 = error.error) === null || _error$error3 === void 0 ? void 0 : _error$error3.message,
6310
6542
  stack: error.stack
6311
6543
  });
@@ -6336,7 +6568,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6336
6568
  }, {
6337
6569
  key: "moveTo",
6338
6570
  value: function moveTo(resourceId) {
6339
- var _this39 = this;
6571
+ var _this40 = this;
6340
6572
  if (!resourceId) {
6341
6573
  throw new _parameter.default('Cannot move call without a resourceId.');
6342
6574
  }
@@ -6380,12 +6612,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6380
6612
  while (1) switch (_context21.prev = _context21.next) {
6381
6613
  case 0:
6382
6614
  _context21.prev = 0;
6383
- if (!(_this39.screenShareFloorState === ScreenShareFloorStatus.GRANTED)) {
6615
+ if (!(_this40.screenShareFloorState === ScreenShareFloorStatus.GRANTED)) {
6384
6616
  _context21.next = 4;
6385
6617
  break;
6386
6618
  }
6387
6619
  _context21.next = 4;
6388
- return _this39.releaseScreenShareFloor();
6620
+ return _this40.releaseScreenShareFloor();
6389
6621
  case 4:
6390
6622
  mediaSettings = {
6391
6623
  mediaDirection: {
@@ -6397,37 +6629,37 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6397
6629
  receiveShare: true
6398
6630
  }
6399
6631
  };
6400
- _this39.mediaProperties.setMediaDirection(mediaSettings.mediaDirection);
6401
- _this39.mediaProperties.unsetRemoteMedia();
6632
+ _this40.mediaProperties.setMediaDirection(mediaSettings.mediaDirection);
6633
+ _this40.mediaProperties.unsetRemoteMedia();
6402
6634
 
6403
6635
  // 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
6636
  // once the device answers we close the old connection and create new media server connection with only share enabled
6405
- if (!_this39.statsAnalyzer) {
6637
+ if (!_this40.statsAnalyzer) {
6406
6638
  _context21.next = 10;
6407
6639
  break;
6408
6640
  }
6409
6641
  _context21.next = 10;
6410
- return _this39.statsAnalyzer.stopAnalyzer();
6642
+ return _this40.statsAnalyzer.stopAnalyzer();
6411
6643
  case 10:
6412
6644
  _context21.next = 12;
6413
- return _this39.closeRemoteStreams();
6645
+ return _this40.closeRemoteStreams();
6414
6646
  case 12:
6415
6647
  _context21.next = 14;
6416
- return _this39.closePeerConnections();
6648
+ return _this40.closePeerConnections();
6417
6649
  case 14:
6418
- _this39.cleanupLocalStreams();
6419
- _this39.unsetRemoteStreams();
6420
- _this39.unsetPeerConnections();
6421
- _this39.reconnectionManager.cleanUp();
6650
+ _this40.cleanupLocalStreams();
6651
+ _this40.unsetRemoteStreams();
6652
+ _this40.unsetPeerConnections();
6653
+ _this40.reconnectionManager.cleanUp();
6422
6654
  _context21.next = 20;
6423
- return _this39.addMedia({
6655
+ return _this40.addMedia({
6424
6656
  audioEnabled: false,
6425
6657
  videoEnabled: false,
6426
6658
  shareVideoEnabled: true
6427
6659
  });
6428
6660
  case 20:
6429
6661
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_SUCCESS);
6430
- _this39.isMoveToInProgress = false;
6662
+ _this40.isMoveToInProgress = false;
6431
6663
  _context21.next = 29;
6432
6664
  break;
6433
6665
  case 24:
@@ -6435,12 +6667,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6435
6667
  _context21.t0 = _context21["catch"](0);
6436
6668
  _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', _context21.t0);
6437
6669
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
6438
- correlation_id: _this39.correlationId,
6439
- locus_id: _this39.locusUrl.split('/').pop(),
6670
+ correlation_id: _this40.correlationId,
6671
+ locus_id: _this40.locusUrl.split('/').pop(),
6440
6672
  reason: _context21.t0.message,
6441
6673
  stack: _context21.t0.stack
6442
6674
  });
6443
- _this39.isMoveToInProgress = false;
6675
+ _this40.isMoveToInProgress = false;
6444
6676
  case 29:
6445
6677
  case "end":
6446
6678
  return _context21.stop();
@@ -6456,17 +6688,17 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6456
6688
  resourceId: resourceId,
6457
6689
  moveToResource: true
6458
6690
  }).then(function () {
6459
- _this39.meetingFiniteStateMachine.join();
6691
+ _this40.meetingFiniteStateMachine.join();
6460
6692
  }).catch(function (error) {
6461
- _this39.meetingFiniteStateMachine.fail(error);
6693
+ _this40.meetingFiniteStateMachine.fail(error);
6462
6694
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_TO_FAILURE, {
6463
- correlation_id: _this39.correlationId,
6464
- locus_id: _this39.locusUrl.split('/').pop(),
6695
+ correlation_id: _this40.correlationId,
6696
+ locus_id: _this40.locusUrl.split('/').pop(),
6465
6697
  reason: error.message,
6466
6698
  stack: error.stack
6467
6699
  });
6468
6700
  _loggerProxy.default.logger.error('Meeting:index#moveTo --> Failed to moveTo resourceId', error);
6469
- _this39.isMoveToInProgress = false;
6701
+ _this40.isMoveToInProgress = false;
6470
6702
  return _promise.default.reject(error);
6471
6703
  });
6472
6704
  }
@@ -6481,7 +6713,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6481
6713
  }, {
6482
6714
  key: "moveFrom",
6483
6715
  value: function moveFrom(resourceId) {
6484
- var _this40 = this;
6716
+ var _this41 = this;
6485
6717
  // On moveFrom ask the developer to re capture it moveFrom then updateMedia
6486
6718
  if (!resourceId) {
6487
6719
  throw new _parameter.default('Cannot move call without a resourceId.');
@@ -6496,19 +6728,19 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6496
6728
  }
6497
6729
  });
6498
6730
  return _util2.default.joinMeetingOptions(this).then(function () {
6499
- return _util2.default.leaveMeeting(_this40, {
6731
+ return _util2.default.leaveMeeting(_this41, {
6500
6732
  resourceId: resourceId,
6501
6733
  correlationId: oldCorrelationId,
6502
6734
  moveMeeting: true
6503
6735
  }).then(function () {
6504
- _this40.resourceId = '';
6736
+ _this41.resourceId = '';
6505
6737
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_FROM_SUCCESS);
6506
6738
  });
6507
6739
  }).catch(function (error) {
6508
- _this40.meetingFiniteStateMachine.fail(error);
6740
+ _this41.meetingFiniteStateMachine.fail(error);
6509
6741
  _metrics.default.sendBehavioralMetric(_constants2.default.MOVE_FROM_FAILURE, {
6510
- correlation_id: _this40.correlationId,
6511
- locus_id: _this40.locusUrl.split('/').pop(),
6742
+ correlation_id: _this41.correlationId,
6743
+ locus_id: _this41.locusUrl.split('/').pop(),
6512
6744
  reason: error.message,
6513
6745
  stack: error.stack
6514
6746
  });
@@ -6557,7 +6789,14 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6557
6789
  turnServerInfo: turnServerInfo,
6558
6790
  bundlePolicy: bundlePolicy,
6559
6791
  // @ts-ignore - config coming from registerPlugin
6560
- iceCandidatesTimeout: this.config.iceCandidatesGatheringTimeout
6792
+ iceCandidatesTimeout: this.config.iceCandidatesGatheringTimeout,
6793
+ // @ts-ignore - config coming from registerPlugin
6794
+ disableAudioMainDtx: this.config.experimental.disableAudioMainDtx,
6795
+ // @ts-ignore - config coming from registerPlugin
6796
+ enableAudioTwcc: this.config.enableAudioTwccForMultistream,
6797
+ stopIceGatheringAfterFirstRelayCandidate:
6798
+ // @ts-ignore - config coming from registerPlugin
6799
+ this.config.stopIceGatheringAfterFirstRelayCandidate
6561
6800
  });
6562
6801
  this.mediaProperties.setMediaPeerConnection(mc);
6563
6802
  this.setupMediaConnectionListeners();
@@ -6624,9 +6863,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6624
6863
  }, {
6625
6864
  key: "forwardEvent",
6626
6865
  value: function forwardEvent(eventEmitter, eventTypeToForward, meetingEventType) {
6627
- var _this41 = this;
6866
+ var _this42 = this;
6628
6867
  eventEmitter.on(eventTypeToForward, function (data) {
6629
- return _triggerProxy.default.trigger(_this41, {
6868
+ return _triggerProxy.default.trigger(_this42, {
6630
6869
  file: 'meetings',
6631
6870
  function: 'addMedia'
6632
6871
  }, meetingEventType, data);
@@ -6696,7 +6935,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6696
6935
  key: "waitForMediaConnectionConnected",
6697
6936
  value: (function () {
6698
6937
  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;
6938
+ var iceConnected, _this$mediaProperties8, _this$mediaProperties9, _this$mediaProperties10, _this$mediaProperties11, _this$mediaProperties12, _this$mediaProperties13, _this$mediaProperties14, timedOutError;
6700
6939
  return _regenerator.default.wrap(function _callee24$(_context24) {
6701
6940
  while (1) switch (_context24.prev = _context24.next) {
6702
6941
  case 0:
@@ -6704,7 +6943,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6704
6943
  _context24.next = 3;
6705
6944
  return this.mediaProperties.waitForMediaConnectionConnected();
6706
6945
  case 3:
6707
- _context24.next = 30;
6946
+ _context24.next = 32;
6708
6947
  break;
6709
6948
  case 5:
6710
6949
  _context24.prev = 5;
@@ -6746,7 +6985,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6746
6985
  errors: _context24.t14
6747
6986
  };
6748
6987
  _context24.t16 = {
6749
- meetingId: this.id
6988
+ meetingId: this.id,
6989
+ rawError: _context24.t0
6750
6990
  };
6751
6991
  _context24.t17 = {
6752
6992
  name: 'client.ice.end',
@@ -6755,8 +6995,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6755
6995
  };
6756
6996
  _context24.t1.submitClientEvent.call(_context24.t1, _context24.t17);
6757
6997
  case 29:
6758
- throw new Error("Timed out waiting for media connection to be connected, correlationId=".concat(this.correlationId));
6759
- case 30:
6998
+ timedOutError = new Error("Timed out waiting for media connection to be connected, correlationId=".concat(this.correlationId));
6999
+ timedOutError.cause = _context24.t0;
7000
+ throw timedOutError;
7001
+ case 32:
6760
7002
  case "end":
6761
7003
  return _context24.stop();
6762
7004
  }
@@ -6787,6 +7029,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6787
7029
  networkQualityMonitor: this.networkQualityMonitor,
6788
7030
  isMultistream: this.isMultistream
6789
7031
  });
7032
+ this.shareCAEventSentStatus = {
7033
+ transmitStart: false,
7034
+ transmitStop: false,
7035
+ receiveStart: false,
7036
+ receiveStop: false
7037
+ };
6790
7038
  this.setupStatsAnalyzerEventHandlers();
6791
7039
  this.networkQualityMonitor.on(_internalMediaCore.NetworkQualityEventNames.NETWORK_QUALITY, this.sendNetworkQualityEvent.bind(this));
6792
7040
  }
@@ -6803,7 +7051,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6803
7051
  key: "waitForRemoteSDPAnswer",
6804
7052
  value: (function () {
6805
7053
  var _waitForRemoteSDPAnswer = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee25() {
6806
- var _this42 = this;
7054
+ var _this43 = this;
6807
7055
  var LOG_HEADER, deferSDPAnswer;
6808
7056
  return _regenerator.default.wrap(function _callee25$(_context25) {
6809
7057
  while (1) switch (_context25.prev = _context25.next) {
@@ -6819,23 +7067,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6819
7067
  deferSDPAnswer = this.deferSDPAnswer;
6820
7068
  this.sdpResponseTimer = setTimeout(function () {
6821
7069
  _loggerProxy.default.logger.warn("".concat(LOG_HEADER, " timeout! no REMOTE SDP ANSWER received within ").concat(_constants.ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT / 1000, " seconds"));
7070
+ var error = new Error('Timed out waiting for REMOTE SDP ANSWER');
7071
+
6822
7072
  // @ts-ignore
6823
- _this42.webex.internal.newMetrics.submitClientEvent({
7073
+ _this43.webex.internal.newMetrics.submitClientEvent({
6824
7074
  name: 'client.media-engine.remote-sdp-received',
6825
7075
  payload: {
6826
7076
  canProceed: false,
6827
7077
  errors: [
6828
7078
  // @ts-ignore
6829
- _this42.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({
7079
+ _this43.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode({
6830
7080
  clientErrorCode: _internalPluginMetrics.CALL_DIAGNOSTIC_CONFIG.MISSING_ROAP_ANSWER_CLIENT_CODE
6831
7081
  })]
6832
7082
  },
6833
7083
  options: {
6834
- meetingId: _this42.id,
6835
- rawError: new Error('Timeout waiting for SDP answer')
7084
+ meetingId: _this43.id,
7085
+ rawError: error
6836
7086
  }
6837
7087
  });
6838
- deferSDPAnswer.reject(new Error('Timed out waiting for REMOTE SDP ANSWER'));
7088
+ deferSDPAnswer.reject(error);
6839
7089
  }, _constants.ROAP_OFFER_ANSWER_EXCHANGE_TIMEOUT);
6840
7090
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " waiting for REMOTE SDP ANSWER..."));
6841
7091
  return _context25.abrupt("return", deferSDPAnswer.promise);
@@ -6975,7 +7225,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
6975
7225
  break;
6976
7226
  case 7:
6977
7227
  _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();
7228
+ throw new _webexErrors.AddMediaFailed(error);
6979
7229
  case 9:
6980
7230
  case "end":
6981
7231
  return _context28.stop();
@@ -7338,10 +7588,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7338
7588
  }, {
7339
7589
  key: "addMedia",
7340
7590
  value: function addMedia() {
7341
- var _this43 = this;
7591
+ var _this44 = this;
7342
7592
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7343
7593
  return this.addMediaInternal(function () {
7344
- return _this43.turnServerUsed ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
7594
+ return _this44.turnServerUsed ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
7345
7595
  }, undefined, false, options);
7346
7596
  }
7347
7597
 
@@ -7377,10 +7627,11 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7377
7627
  _this$remoteMediaMana,
7378
7628
  _yield$this$mediaProp,
7379
7629
  connectionType,
7630
+ ipVersion,
7380
7631
  selectedCandidatePairChanges,
7381
7632
  numTransports,
7382
- reachabilityStats,
7383
7633
  iceCandidateErrors,
7634
+ reachabilityMetrics,
7384
7635
  _this$mediaProperties15,
7385
7636
  _this$mediaProperties16,
7386
7637
  _this$mediaProperties17,
@@ -7402,7 +7653,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7402
7653
  _this$mediaProperties33,
7403
7654
  _this$mediaProperties34,
7404
7655
  _this$mediaProperties35,
7405
- reachabilityMetrics,
7656
+ _reachabilityMetrics,
7406
7657
  _yield$this$mediaProp2,
7407
7658
  _selectedCandidatePairChanges,
7408
7659
  _numTransports,
@@ -7523,28 +7774,33 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7523
7774
  case 46:
7524
7775
  _yield$this$mediaProp = _context35.sent;
7525
7776
  connectionType = _yield$this$mediaProp.connectionType;
7777
+ ipVersion = _yield$this$mediaProp.ipVersion;
7526
7778
  selectedCandidatePairChanges = _yield$this$mediaProp.selectedCandidatePairChanges;
7527
7779
  numTransports = _yield$this$mediaProp.numTransports;
7528
- _context35.next = 52;
7529
- return this.webex.meetings.reachability.getReachabilityMetrics();
7530
- case 52:
7531
- reachabilityStats = _context35.sent;
7532
7780
  iceCandidateErrors = Object.fromEntries(this.iceCandidateErrors);
7781
+ _context35.next = 54;
7782
+ return this.getMediaReachabilityMetricFields();
7783
+ case 54:
7784
+ reachabilityMetrics = _context35.sent;
7533
7785
  _metrics.default.sendBehavioralMetric(_constants2.default.ADD_MEDIA_SUCCESS, _objectSpread(_objectSpread(_objectSpread({
7534
7786
  correlation_id: this.correlationId,
7535
7787
  locus_id: this.locusUrl.split('/').pop(),
7536
7788
  connectionType: connectionType,
7789
+ ipVersion: ipVersion,
7537
7790
  selectedCandidatePairChanges: selectedCandidatePairChanges,
7538
7791
  numTransports: numTransports,
7539
7792
  isMultistream: this.isMultistream,
7540
7793
  retriedWithTurnServer: this.addMediaData.retriedWithTurnServer,
7541
7794
  isJoinWithMediaRetry: this.joinWithMediaRetryInfo.isRetry
7542
- }, reachabilityStats), iceCandidateErrors), {}, {
7795
+ }, reachabilityMetrics), iceCandidateErrors), {}, {
7543
7796
  iceCandidatesCount: this.iceCandidatesCount
7544
7797
  }));
7545
7798
  // @ts-ignore
7546
7799
  this.webex.internal.newMetrics.submitClientEvent({
7547
7800
  name: 'client.media-engine.ready',
7801
+ payload: {
7802
+ ipVersion: ipVersion
7803
+ },
7548
7804
  options: {
7549
7805
  meetingId: this.id
7550
7806
  }
@@ -7554,21 +7810,21 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7554
7810
  // We can log ReceiveSlot SSRCs only after the SDP exchange, so doing it here:
7555
7811
  (_this$remoteMediaMana = this.remoteMediaManager) === null || _this$remoteMediaMana === void 0 ? void 0 : _this$remoteMediaMana.logAllReceiveSlots();
7556
7812
  this.startPeriodicLogUpload();
7557
- _context35.next = 79;
7813
+ _context35.next = 80;
7558
7814
  break;
7559
- case 61:
7560
- _context35.prev = 61;
7815
+ case 62:
7816
+ _context35.prev = 62;
7561
7817
  _context35.t1 = _context35["catch"](19);
7562
7818
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " failed to establish media connection: "), _context35.t1);
7563
7819
 
7564
7820
  // @ts-ignore
7565
- _context35.next = 66;
7566
- return this.webex.meetings.reachability.getReachabilityMetrics();
7567
- case 66:
7568
- reachabilityMetrics = _context35.sent;
7569
- _context35.next = 69;
7821
+ _context35.next = 67;
7822
+ return this.getMediaReachabilityMetricFields();
7823
+ case 67:
7824
+ _reachabilityMetrics = _context35.sent;
7825
+ _context35.next = 70;
7570
7826
  return this.mediaProperties.getCurrentConnectionInfo();
7571
- case 69:
7827
+ case 70:
7572
7828
  _yield$this$mediaProp2 = _context35.sent;
7573
7829
  _selectedCandidatePairChanges = _yield$this$mediaProp2.selectedCandidatePairChanges;
7574
7830
  _numTransports = _yield$this$mediaProp2.numTransports;
@@ -7589,12 +7845,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7589
7845
  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
7846
  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
7847
  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), {}, {
7848
+ }, _reachabilityMetrics), _iceCandidateErrors), {}, {
7593
7849
  iceCandidatesCount: this.iceCandidatesCount
7594
7850
  }));
7595
- _context35.next = 76;
7851
+ _context35.next = 77;
7596
7852
  return this.cleanUpOnAddMediaFailure();
7597
- case 76:
7853
+ case 77:
7598
7854
  // Upload logs on error while adding media
7599
7855
  _triggerProxy.default.trigger(this, {
7600
7856
  file: 'meeting/index',
@@ -7606,15 +7862,15 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7606
7862
  });
7607
7863
  }
7608
7864
  throw _context35.t1;
7609
- case 79:
7610
- _context35.prev = 79;
7865
+ case 80:
7866
+ _context35.prev = 80;
7611
7867
  this.addMediaData.icePhaseCallback = DEFAULT_ICE_PHASE_CALLBACK;
7612
- return _context35.finish(79);
7613
- case 82:
7868
+ return _context35.finish(80);
7869
+ case 83:
7614
7870
  case "end":
7615
7871
  return _context35.stop();
7616
7872
  }
7617
- }, _callee35, this, [[19, 61, 79, 82], [24, 29]]);
7873
+ }, _callee35, this, [[19, 62, 80, 83], [24, 29]]);
7618
7874
  }));
7619
7875
  function addMediaInternal(_x33, _x34, _x35) {
7620
7876
  return _addMediaInternal.apply(this, arguments);
@@ -7646,7 +7902,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7646
7902
  * @memberof Meeting
7647
7903
  */
7648
7904
  function enqueueMediaUpdate(mediaUpdateType) {
7649
- var _this44 = this;
7905
+ var _this45 = this;
7650
7906
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
7651
7907
  var canUpdateMediaNow = this.canUpdateMedia();
7652
7908
  return new _promise.default(function (resolve, reject) {
@@ -7657,9 +7913,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7657
7913
  options: options
7658
7914
  };
7659
7915
  _loggerProxy.default.logger.log("Meeting:index#enqueueMediaUpdate --> enqueuing media update type=".concat(mediaUpdateType));
7660
- _this44.queuedMediaUpdates.push(queueItem);
7916
+ _this45.queuedMediaUpdates.push(queueItem);
7661
7917
  if (canUpdateMediaNow) {
7662
- _this44.processNextQueuedMediaUpdate();
7918
+ _this45.processNextQueuedMediaUpdate();
7663
7919
  }
7664
7920
  });
7665
7921
  }
@@ -7764,7 +8020,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7764
8020
  }, {
7765
8021
  key: "acknowledge",
7766
8022
  value: function acknowledge(type) {
7767
- var _this45 = this;
8023
+ var _this46 = this;
7768
8024
  if (!type) {
7769
8025
  return _promise.default.reject(new _parameter.default('Type must be set to acknowledge the meeting.'));
7770
8026
  }
@@ -7776,12 +8032,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7776
8032
  }).then(function (response) {
7777
8033
  return _promise.default.resolve(response);
7778
8034
  }).then(function (response) {
7779
- _this45.meetingFiniteStateMachine.ring(type);
8035
+ _this46.meetingFiniteStateMachine.ring(type);
7780
8036
  // @ts-ignore
7781
- _this45.webex.internal.newMetrics.submitClientEvent({
8037
+ _this46.webex.internal.newMetrics.submitClientEvent({
7782
8038
  name: 'client.alert.displayed',
7783
8039
  options: {
7784
- meetingId: _this45.id
8040
+ meetingId: _this46.id
7785
8041
  }
7786
8042
  });
7787
8043
  return _promise.default.resolve({
@@ -7806,12 +8062,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7806
8062
  }, {
7807
8063
  key: "decline",
7808
8064
  value: function decline(reason) {
7809
- var _this46 = this;
8065
+ var _this47 = this;
7810
8066
  return _util2.default.declineMeeting(this, reason).then(function (decline) {
7811
- _this46.meetingFiniteStateMachine.decline();
8067
+ _this47.meetingFiniteStateMachine.decline();
7812
8068
  return _promise.default.resolve(decline);
7813
8069
  }).catch(function (error) {
7814
- _this46.meetingFiniteStateMachine.fail(error);
8070
+ _this47.meetingFiniteStateMachine.fail(error);
7815
8071
  return _promise.default.reject(error);
7816
8072
  });
7817
8073
  }
@@ -7862,7 +8118,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7862
8118
  }, {
7863
8119
  key: "leave",
7864
8120
  value: function leave() {
7865
- var _this47 = this;
8121
+ var _this48 = this;
7866
8122
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7867
8123
  var leaveReason = options.reason || _constants.MEETING_REMOVED_REASON.CLIENT_LEAVE_REQUEST;
7868
8124
 
@@ -7874,7 +8130,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7874
8130
  var payload = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
7875
8131
  return (
7876
8132
  // @ts-ignore
7877
- _this47.webex.internal.newMetrics.submitClientEvent({
8133
+ _this48.webex.internal.newMetrics.submitClientEvent({
7878
8134
  name: 'client.call.leave',
7879
8135
  payload: _objectSpread({
7880
8136
  trigger: 'user-interaction',
@@ -7882,7 +8138,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7882
8138
  leaveReason: options.clientEventLeaveReason
7883
8139
  }, payload),
7884
8140
  options: {
7885
- meetingId: _this47.id
8141
+ meetingId: _this48.id
7886
8142
  }
7887
8143
  })
7888
8144
  );
@@ -7891,24 +8147,24 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7891
8147
  return _util2.default.leaveMeeting(this, options).then(function (leave) {
7892
8148
  // CA team recommends submitting this *after* locus /leave
7893
8149
  submitLeaveMetric();
7894
- _this47.meetingFiniteStateMachine.leave();
7895
- _this47.clearMeetingData();
8150
+ _this48.meetingFiniteStateMachine.leave();
8151
+ _this48.clearMeetingData();
7896
8152
 
7897
8153
  // upload logs on leave irrespective of meeting delete
7898
- _triggerProxy.default.trigger(_this47, {
8154
+ _triggerProxy.default.trigger(_this48, {
7899
8155
  file: 'meeting/index',
7900
8156
  function: 'leave'
7901
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this47);
8157
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this48);
7902
8158
 
7903
8159
  // TODO: more testing before we remove this code, we are not sure the scenarios for destroy here
7904
- if (_this47.wirelessShare || _this47.guest) {
8160
+ if (_this48.wirelessShare || _this48.guest) {
7905
8161
  // If screen sharing clean the meeting object
7906
- _triggerProxy.default.trigger(_this47, {
8162
+ _triggerProxy.default.trigger(_this48, {
7907
8163
  file: 'meeting/index',
7908
8164
  function: 'leave'
7909
8165
  }, _constants.EVENTS.DESTROY_MEETING, {
7910
8166
  reason: options.reason,
7911
- meetingId: _this47.id
8167
+ meetingId: _this48.id
7912
8168
  });
7913
8169
  }
7914
8170
  _loggerProxy.default.logger.log('Meeting:index#leave --> LEAVE REASON ', leaveReason);
@@ -7925,16 +8181,16 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7925
8181
  shownToUser: false
7926
8182
  }]
7927
8183
  });
7928
- _this47.meetingFiniteStateMachine.fail(error);
8184
+ _this48.meetingFiniteStateMachine.fail(error);
7929
8185
  _loggerProxy.default.logger.error('Meeting:index#leave --> Failed to leave ', error);
7930
8186
  // upload logs on leave irrespective of meeting delete
7931
- _triggerProxy.default.trigger(_this47, {
8187
+ _triggerProxy.default.trigger(_this48, {
7932
8188
  file: 'meeting/index',
7933
8189
  function: 'leave'
7934
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this47);
8190
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this48);
7935
8191
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_LEAVE_FAILURE, {
7936
- correlation_id: _this47.correlationId,
7937
- locus_id: _this47.locusUrl.split('/').pop(),
8192
+ correlation_id: _this48.correlationId,
8193
+ locus_id: _this48.locusUrl.split('/').pop(),
7938
8194
  reason: error.message,
7939
8195
  stack: error.stack,
7940
8196
  code: error.code
@@ -7954,7 +8210,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7954
8210
  }, {
7955
8211
  key: "startWhiteboardShare",
7956
8212
  value: function startWhiteboardShare(channelUrl, resourceToken) {
7957
- var _this48 = this;
8213
+ var _this49 = this;
7958
8214
  var whiteboard = this.locusInfo.mediaShares.find(function (element) {
7959
8215
  return element.name === 'whiteboard';
7960
8216
  });
@@ -7983,13 +8239,13 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
7983
8239
  body.resourceToken = resourceToken;
7984
8240
  }
7985
8241
  return this.meetingRequest.changeMeetingFloor(body).then(function () {
7986
- _this48.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
8242
+ _this49.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
7987
8243
  return _promise.default.resolve();
7988
8244
  }).catch(function (error) {
7989
8245
  _loggerProxy.default.logger.error('Meeting:index#startWhiteboardShare --> Error ', error);
7990
8246
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_START_WHITEBOARD_SHARE_FAILURE, {
7991
- correlation_id: _this48.correlationId,
7992
- locus_id: _this48.locusUrl.split('/').pop(),
8247
+ correlation_id: _this49.correlationId,
8248
+ locus_id: _this49.locusUrl.split('/').pop(),
7993
8249
  reason: error.message,
7994
8250
  stack: error.stack,
7995
8251
  board: {
@@ -8012,7 +8268,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8012
8268
  }, {
8013
8269
  key: "stopWhiteboardShare",
8014
8270
  value: function stopWhiteboardShare(channelUrl) {
8015
- var _this49 = this;
8271
+ var _this50 = this;
8016
8272
  var whiteboard = this.locusInfo.mediaShares.find(function (element) {
8017
8273
  return element.name === 'whiteboard';
8018
8274
  });
@@ -8035,8 +8291,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8035
8291
  }).catch(function (error) {
8036
8292
  _loggerProxy.default.logger.error('Meeting:index#stopWhiteboardShare --> Error ', error);
8037
8293
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_STOP_WHITEBOARD_SHARE_FAILURE, {
8038
- correlation_id: _this49.correlationId,
8039
- locus_id: _this49.locusUrl.split('/').pop(),
8294
+ correlation_id: _this50.correlationId,
8295
+ locus_id: _this50.locusUrl.split('/').pop(),
8040
8296
  reason: error.message,
8041
8297
  stack: error.stack,
8042
8298
  board: {
@@ -8058,7 +8314,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8058
8314
  }, {
8059
8315
  key: "requestScreenShareFloor",
8060
8316
  value: function requestScreenShareFloor() {
8061
- var _this50 = this;
8317
+ var _this51 = this;
8062
8318
  if (!this.mediaProperties.hasLocalShareStream() || !this.mediaProperties.mediaDirection.sendShare) {
8063
8319
  _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
8320
  this.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
@@ -8089,34 +8345,34 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8089
8345
  resourceUrl: this.resourceUrl,
8090
8346
  shareInstanceId: this.localShareInstanceId
8091
8347
  }).then(function () {
8092
- _this50.screenShareFloorState = ScreenShareFloorStatus.GRANTED;
8348
+ _this51.screenShareFloorState = ScreenShareFloorStatus.GRANTED;
8093
8349
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_SUCCESS, {
8094
- correlation_id: _this50.correlationId,
8095
- locus_id: _this50.locusUrl.split('/').pop()
8350
+ correlation_id: _this51.correlationId,
8351
+ locus_id: _this51.locusUrl.split('/').pop()
8096
8352
  });
8097
8353
  return _promise.default.resolve();
8098
8354
  }).catch(function (error) {
8099
8355
  _loggerProxy.default.logger.error('Meeting:index#share --> Error ', error);
8100
8356
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_SHARE_FAILURE, {
8101
- correlation_id: _this50.correlationId,
8102
- locus_id: _this50.locusUrl.split('/').pop(),
8357
+ correlation_id: _this51.correlationId,
8358
+ locus_id: _this51.locusUrl.split('/').pop(),
8103
8359
  reason: error.message,
8104
8360
  stack: error.stack
8105
8361
  });
8106
8362
 
8107
8363
  // @ts-ignore
8108
- _this50.webex.internal.newMetrics.submitClientEvent({
8364
+ _this51.webex.internal.newMetrics.submitClientEvent({
8109
8365
  name: 'client.share.floor-granted.local',
8110
8366
  payload: {
8111
8367
  mediaType: 'share',
8112
8368
  errors: _util2.default.getChangeMeetingFloorErrorPayload(error.message),
8113
- shareInstanceId: _this50.localShareInstanceId
8369
+ shareInstanceId: _this51.localShareInstanceId
8114
8370
  },
8115
8371
  options: {
8116
- meetingId: _this50.id
8372
+ meetingId: _this51.id
8117
8373
  }
8118
8374
  });
8119
- _this50.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
8375
+ _this51.screenShareFloorState = ScreenShareFloorStatus.RELEASED;
8120
8376
  return _promise.default.reject(error);
8121
8377
  });
8122
8378
  }
@@ -8139,10 +8395,10 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8139
8395
  }, {
8140
8396
  key: "requestScreenShareFloorIfPending",
8141
8397
  value: function requestScreenShareFloorIfPending() {
8142
- var _this51 = this;
8398
+ var _this52 = this;
8143
8399
  if (this.floorGrantPending && this.state === _constants.MEETING_STATE.STATES.JOINED) {
8144
8400
  this.requestScreenShareFloor().then(function () {
8145
- _this51.floorGrantPending = false;
8401
+ _this52.floorGrantPending = false;
8146
8402
  });
8147
8403
  }
8148
8404
  }
@@ -8156,7 +8412,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8156
8412
  }, {
8157
8413
  key: "releaseScreenShareFloor",
8158
8414
  value: function releaseScreenShareFloor() {
8159
- var _this52 = this;
8415
+ var _this53 = this;
8160
8416
  var content = this.locusInfo.mediaShares.find(function (element) {
8161
8417
  return element.name === _constants.CONTENT;
8162
8418
  });
@@ -8191,8 +8447,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8191
8447
  }).catch(function (error) {
8192
8448
  _loggerProxy.default.logger.error('Meeting:index#releaseScreenShareFloor --> Error ', error);
8193
8449
  _metrics.default.sendBehavioralMetric(_constants2.default.STOP_FLOOR_REQUEST_FAILURE, {
8194
- correlation_id: _this52.correlationId,
8195
- locus_id: _this52.locusUrl.split('/').pop(),
8450
+ correlation_id: _this53.correlationId,
8451
+ locus_id: _this53.locusUrl.split('/').pop(),
8196
8452
  reason: error.message,
8197
8453
  stack: error.stack
8198
8454
  });
@@ -8372,7 +8628,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8372
8628
  }, {
8373
8629
  key: "changeVideoLayout",
8374
8630
  value: function changeVideoLayout(layoutType) {
8375
- var _this53 = this;
8631
+ var _this54 = this;
8376
8632
  var renderInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
8377
8633
  var main = renderInfo.main,
8378
8634
  content = renderInfo.content;
@@ -8426,7 +8682,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8426
8682
  }
8427
8683
  this.lastVideoLayoutInfo = (0, _lodash.cloneDeep)(layoutInfo);
8428
8684
  this.locusInfo.once(_constants.LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED, function (envelope) {
8429
- _triggerProxy.default.trigger(_this53, {
8685
+ _triggerProxy.default.trigger(_this54, {
8430
8686
  file: 'meeting/index',
8431
8687
  function: 'changeVideoLayout'
8432
8688
  }, _constants.EVENT_TRIGGERS.MEETING_CONTROLS_LAYOUT_UPDATE, {
@@ -8542,7 +8798,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8542
8798
  }, {
8543
8799
  key: "endMeetingForAll",
8544
8800
  value: function endMeetingForAll() {
8545
- var _this54 = this;
8801
+ var _this55 = this;
8546
8802
  // @ts-ignore
8547
8803
  this.webex.internal.newMetrics.submitClientEvent({
8548
8804
  name: 'client.call.leave',
@@ -8560,25 +8816,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8560
8816
  locus_id: this.locusId
8561
8817
  });
8562
8818
  return _util2.default.endMeetingForAll(this).then(function (end) {
8563
- _this54.meetingFiniteStateMachine.end();
8564
- _this54.clearMeetingData();
8819
+ _this55.meetingFiniteStateMachine.end();
8820
+ _this55.clearMeetingData();
8565
8821
  // upload logs on leave irrespective of meeting delete
8566
- _triggerProxy.default.trigger(_this54, {
8822
+ _triggerProxy.default.trigger(_this55, {
8567
8823
  file: 'meeting/index',
8568
8824
  function: 'endMeetingForAll'
8569
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this54);
8825
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this55);
8570
8826
  return end;
8571
8827
  }).catch(function (error) {
8572
- _this54.meetingFiniteStateMachine.fail(error);
8828
+ _this55.meetingFiniteStateMachine.fail(error);
8573
8829
  _loggerProxy.default.logger.error('Meeting:index#endMeetingForAll --> Failed to end meeting ', error);
8574
8830
  // upload logs on leave irrespective of meeting delete
8575
- _triggerProxy.default.trigger(_this54, {
8831
+ _triggerProxy.default.trigger(_this55, {
8576
8832
  file: 'meeting/index',
8577
8833
  function: 'endMeetingForAll'
8578
- }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this54);
8834
+ }, _constants.EVENTS.REQUEST_UPLOAD_LOGS, _this55);
8579
8835
  _metrics.default.sendBehavioralMetric(_constants2.default.MEETING_END_ALL_FAILURE, {
8580
- correlation_id: _this54.correlationId,
8581
- locus_id: _this54.locusUrl.split('/').pop(),
8836
+ correlation_id: _this55.correlationId,
8837
+ locus_id: _this55.locusUrl.split('/').pop(),
8582
8838
  reason: error.message,
8583
8839
  stack: error.stack,
8584
8840
  code: error.code
@@ -8643,6 +8899,25 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8643
8899
  });
8644
8900
  }
8645
8901
 
8902
+ /**
8903
+ * Method to set post meeting data consent.
8904
+ *
8905
+ * @param {boolean} accept - whether consent accepted or declined
8906
+ * @returns {Promise}
8907
+ * @public
8908
+ * @memberof Meeting
8909
+ */
8910
+ }, {
8911
+ key: "setPostMeetingDataConsent",
8912
+ value: function setPostMeetingDataConsent(accept) {
8913
+ return this.meetingRequest.setPostMeetingDataConsent({
8914
+ postMeetingDataConsent: accept,
8915
+ locusUrl: this.locusUrl,
8916
+ deviceUrl: this.deviceUrl,
8917
+ selfId: this.members.selfId
8918
+ });
8919
+ }
8920
+
8646
8921
  /**
8647
8922
  * Throws if we don't have a media connection created
8648
8923
  *
@@ -8720,7 +8995,7 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8720
8995
  _this$mediaProperties43,
8721
8996
  _this$mediaProperties44,
8722
8997
  _this$mediaProperties45,
8723
- _this55 = this;
8998
+ _this56 = this;
8724
8999
  var LOG_HEADER = 'Meeting:index#updateTranscodedMediaConnection -->';
8725
9000
  _loggerProxy.default.logger.info("".concat(LOG_HEADER, " starting"));
8726
9001
  if (!this.canUpdateMedia()) {
@@ -8745,8 +9020,8 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8745
9020
  }).catch(function (error) {
8746
9021
  _loggerProxy.default.logger.error("".concat(LOG_HEADER, " Error: "), error);
8747
9022
  _metrics.default.sendBehavioralMetric(_constants2.default.UPDATE_MEDIA_FAILURE, {
8748
- correlation_id: _this55.correlationId,
8749
- locus_id: _this55.locusUrl.split('/').pop(),
9023
+ correlation_id: _this56.correlationId,
9024
+ locus_id: _this56.locusUrl.split('/').pop(),
8750
9025
  reason: error.message,
8751
9026
  stack: error.stack
8752
9027
  });
@@ -8968,10 +9243,12 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8968
9243
  return this.updateTranscodedMediaConnection();
8969
9244
  case 31:
8970
9245
  if (!floorRequestNeeded) {
8971
- _context40.next = 37;
9246
+ _context40.next = 39;
8972
9247
  break;
8973
9248
  }
8974
9249
  this.localShareInstanceId = _uuid.default.v4();
9250
+ this.shareCAEventSentStatus.transmitStart = false;
9251
+ this.shareCAEventSentStatus.transmitStop = false;
8975
9252
 
8976
9253
  // @ts-ignore
8977
9254
  this.webex.internal.newMetrics.submitClientEvent({
@@ -8992,9 +9269,9 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
8992
9269
  // we're sending the http request to Locus to request the screen share floor
8993
9270
  // only after the SDP update, because that's how it's always been done for transcoded meetings
8994
9271
  // and also if sharing from the start, we need confluence to have been created
8995
- _context40.next = 37;
9272
+ _context40.next = 39;
8996
9273
  return this.enqueueScreenShareFloorRequest();
8997
- case 37:
9274
+ case 39:
8998
9275
  case "end":
8999
9276
  return _context40.stop();
9000
9277
  }
@@ -9132,6 +9409,56 @@ var Meeting = exports.default = /*#__PURE__*/function (_StatelessWebexPlugin) {
9132
9409
  }
9133
9410
  return _promise.default.resolve();
9134
9411
  }
9412
+
9413
+ /**
9414
+ * Gets the media reachability metrics
9415
+ *
9416
+ * @returns {Promise<MediaReachabilityMetrics>}
9417
+ */
9418
+ }, {
9419
+ key: "getMediaReachabilityMetricFields",
9420
+ value: (function () {
9421
+ var _getMediaReachabilityMetricFields = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee42() {
9422
+ var reachabilityMetrics, successKeys, totalSuccessCases, isSubnetReachable, selectedCluster;
9423
+ return _regenerator.default.wrap(function _callee42$(_context42) {
9424
+ while (1) switch (_context42.prev = _context42.next) {
9425
+ case 0:
9426
+ _context42.next = 2;
9427
+ return this.webex.meetings.reachability.getReachabilityMetrics();
9428
+ case 2:
9429
+ reachabilityMetrics = _context42.sent;
9430
+ 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'];
9431
+ totalSuccessCases = successKeys.reduce(function (total, key) {
9432
+ var value = reachabilityMetrics[key];
9433
+ if (typeof value === 'number') {
9434
+ return total + value;
9435
+ }
9436
+ return total;
9437
+ }, 0);
9438
+ isSubnetReachable = null;
9439
+ if (totalSuccessCases > 0) {
9440
+ // @ts-ignore
9441
+ isSubnetReachable = this.webex.meetings.reachability.isSubnetReachable(this.mediaServerIp);
9442
+ }
9443
+ selectedCluster = null;
9444
+ if (this.mediaConnections && this.mediaConnections.length > 0) {
9445
+ selectedCluster = this.mediaConnections[0].mediaAgentCluster;
9446
+ }
9447
+ return _context42.abrupt("return", _objectSpread(_objectSpread({}, reachabilityMetrics), {}, {
9448
+ isSubnetReachable: isSubnetReachable,
9449
+ selectedCluster: selectedCluster
9450
+ }));
9451
+ case 10:
9452
+ case "end":
9453
+ return _context42.stop();
9454
+ }
9455
+ }, _callee42, this);
9456
+ }));
9457
+ function getMediaReachabilityMetricFields() {
9458
+ return _getMediaReachabilityMetricFields.apply(this, arguments);
9459
+ }
9460
+ return getMediaReachabilityMetricFields;
9461
+ }())
9135
9462
  }]);
9136
9463
  return Meeting;
9137
9464
  }(_webexCore.StatelessWebexPlugin);