@webex/plugin-meetings 3.0.0-beta.18 → 3.0.0-beta.180

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 (410) hide show
  1. package/README.md +45 -7
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +49 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +342 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +114 -14
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/edit-lock-error.js +52 -0
  11. package/dist/breakouts/edit-lock-error.js.map +1 -0
  12. package/dist/breakouts/events.js +45 -0
  13. package/dist/breakouts/events.js.map +1 -0
  14. package/dist/breakouts/index.js +841 -19
  15. package/dist/breakouts/index.js.map +1 -1
  16. package/dist/breakouts/request.js +78 -0
  17. package/dist/breakouts/request.js.map +1 -0
  18. package/dist/breakouts/utils.js +67 -0
  19. package/dist/breakouts/utils.js.map +1 -0
  20. package/dist/common/errors/webex-errors.js +3 -2
  21. package/dist/common/errors/webex-errors.js.map +1 -1
  22. package/dist/common/logs/logger-proxy.js +1 -1
  23. package/dist/common/logs/logger-proxy.js.map +1 -1
  24. package/dist/config.js +3 -8
  25. package/dist/config.js.map +1 -1
  26. package/dist/constants.js +172 -30
  27. package/dist/constants.js.map +1 -1
  28. package/dist/controls-options-manager/constants.js +14 -0
  29. package/dist/controls-options-manager/constants.js.map +1 -0
  30. package/dist/controls-options-manager/enums.js +27 -0
  31. package/dist/controls-options-manager/enums.js.map +1 -0
  32. package/dist/controls-options-manager/index.js +297 -0
  33. package/dist/controls-options-manager/index.js.map +1 -0
  34. package/dist/controls-options-manager/types.js +7 -0
  35. package/dist/controls-options-manager/types.js.map +1 -0
  36. package/dist/controls-options-manager/util.js +300 -0
  37. package/dist/controls-options-manager/util.js.map +1 -0
  38. package/dist/index.js +107 -0
  39. package/dist/index.js.map +1 -1
  40. package/dist/interpretation/collection.js +23 -0
  41. package/dist/interpretation/collection.js.map +1 -0
  42. package/dist/interpretation/index.js +352 -0
  43. package/dist/interpretation/index.js.map +1 -0
  44. package/dist/interpretation/siLanguage.js +25 -0
  45. package/dist/interpretation/siLanguage.js.map +1 -0
  46. package/dist/locus-info/controlsUtils.js +91 -2
  47. package/dist/locus-info/controlsUtils.js.map +1 -1
  48. package/dist/locus-info/index.js +302 -41
  49. package/dist/locus-info/index.js.map +1 -1
  50. package/dist/locus-info/mediaSharesUtils.js +43 -1
  51. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  52. package/dist/locus-info/parser.js +1 -1
  53. package/dist/locus-info/parser.js.map +1 -1
  54. package/dist/locus-info/selfUtils.js +89 -14
  55. package/dist/locus-info/selfUtils.js.map +1 -1
  56. package/dist/media/index.js +39 -134
  57. package/dist/media/index.js.map +1 -1
  58. package/dist/media/properties.js +29 -90
  59. package/dist/media/properties.js.map +1 -1
  60. package/dist/mediaQualityMetrics/config.js +505 -493
  61. package/dist/mediaQualityMetrics/config.js.map +1 -1
  62. package/dist/meeting/in-meeting-actions.js +76 -2
  63. package/dist/meeting/in-meeting-actions.js.map +1 -1
  64. package/dist/meeting/index.js +2610 -2465
  65. package/dist/meeting/index.js.map +1 -1
  66. package/dist/meeting/locusMediaRequest.js +291 -0
  67. package/dist/meeting/locusMediaRequest.js.map +1 -0
  68. package/dist/meeting/muteState.js +229 -124
  69. package/dist/meeting/muteState.js.map +1 -1
  70. package/dist/meeting/request.js +189 -146
  71. package/dist/meeting/request.js.map +1 -1
  72. package/dist/meeting/util.js +478 -414
  73. package/dist/meeting/util.js.map +1 -1
  74. package/dist/meeting-info/index.js +48 -7
  75. package/dist/meeting-info/index.js.map +1 -1
  76. package/dist/meeting-info/meeting-info-v2.js +171 -51
  77. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  78. package/dist/meeting-info/utilv2.js +20 -5
  79. package/dist/meeting-info/utilv2.js.map +1 -1
  80. package/dist/meetings/collection.js +22 -0
  81. package/dist/meetings/collection.js.map +1 -1
  82. package/dist/meetings/index.js +350 -65
  83. package/dist/meetings/index.js.map +1 -1
  84. package/dist/meetings/meetings.types.js +7 -0
  85. package/dist/meetings/meetings.types.js.map +1 -0
  86. package/dist/meetings/request.js +2 -0
  87. package/dist/meetings/request.js.map +1 -1
  88. package/dist/meetings/util.js +88 -1
  89. package/dist/meetings/util.js.map +1 -1
  90. package/dist/member/index.js +49 -0
  91. package/dist/member/index.js.map +1 -1
  92. package/dist/member/types.js +25 -0
  93. package/dist/member/types.js.map +1 -0
  94. package/dist/member/util.js +98 -2
  95. package/dist/member/util.js.map +1 -1
  96. package/dist/members/collection.js +10 -0
  97. package/dist/members/collection.js.map +1 -1
  98. package/dist/members/index.js +86 -5
  99. package/dist/members/index.js.map +1 -1
  100. package/dist/members/request.js +106 -38
  101. package/dist/members/request.js.map +1 -1
  102. package/dist/members/types.js +15 -0
  103. package/dist/members/types.js.map +1 -0
  104. package/dist/members/util.js +316 -233
  105. package/dist/members/util.js.map +1 -1
  106. package/dist/metrics/constants.js +3 -5
  107. package/dist/metrics/constants.js.map +1 -1
  108. package/dist/metrics/index.js +1 -468
  109. package/dist/metrics/index.js.map +1 -1
  110. package/dist/multistream/mediaRequestManager.js +238 -49
  111. package/dist/multistream/mediaRequestManager.js.map +1 -1
  112. package/dist/multistream/receiveSlot.js +49 -16
  113. package/dist/multistream/receiveSlot.js.map +1 -1
  114. package/dist/multistream/receiveSlotManager.js +48 -30
  115. package/dist/multistream/receiveSlotManager.js.map +1 -1
  116. package/dist/multistream/remoteMedia.js +44 -18
  117. package/dist/multistream/remoteMedia.js.map +1 -1
  118. package/dist/multistream/remoteMediaGroup.js +60 -3
  119. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  120. package/dist/multistream/remoteMediaManager.js +173 -59
  121. package/dist/multistream/remoteMediaManager.js.map +1 -1
  122. package/dist/networkQualityMonitor/index.js +4 -2
  123. package/dist/networkQualityMonitor/index.js.map +1 -1
  124. package/dist/reachability/index.js +72 -27
  125. package/dist/reachability/index.js.map +1 -1
  126. package/dist/reachability/request.js +12 -5
  127. package/dist/reachability/request.js.map +1 -1
  128. package/dist/reactions/reactions.js +2 -2
  129. package/dist/reactions/reactions.js.map +1 -1
  130. package/dist/reactions/reactions.type.js +18 -18
  131. package/dist/reactions/reactions.type.js.map +1 -1
  132. package/dist/reconnection-manager/index.js +196 -155
  133. package/dist/reconnection-manager/index.js.map +1 -1
  134. package/dist/recording-controller/index.js +21 -1
  135. package/dist/recording-controller/index.js.map +1 -1
  136. package/dist/recording-controller/util.js +9 -8
  137. package/dist/recording-controller/util.js.map +1 -1
  138. package/dist/roap/index.js +21 -29
  139. package/dist/roap/index.js.map +1 -1
  140. package/dist/roap/request.js +110 -89
  141. package/dist/roap/request.js.map +1 -1
  142. package/dist/roap/turnDiscovery.js +93 -36
  143. package/dist/roap/turnDiscovery.js.map +1 -1
  144. package/dist/statsAnalyzer/global.js +1 -93
  145. package/dist/statsAnalyzer/global.js.map +1 -1
  146. package/dist/statsAnalyzer/index.js +326 -311
  147. package/dist/statsAnalyzer/index.js.map +1 -1
  148. package/dist/statsAnalyzer/mqaUtil.js +90 -53
  149. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  150. package/dist/types/annotation/annotation.types.d.ts +42 -0
  151. package/dist/types/annotation/constants.d.ts +31 -0
  152. package/dist/types/annotation/index.d.ts +117 -0
  153. package/dist/types/breakouts/breakout.d.ts +8 -0
  154. package/dist/types/breakouts/collection.d.ts +5 -0
  155. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  156. package/dist/types/breakouts/events.d.ts +8 -0
  157. package/dist/types/breakouts/index.d.ts +5 -0
  158. package/dist/types/breakouts/request.d.ts +22 -0
  159. package/dist/types/breakouts/utils.d.ts +15 -0
  160. package/dist/types/common/browser-detection.d.ts +9 -0
  161. package/dist/types/common/collection.d.ts +48 -0
  162. package/dist/types/common/config.d.ts +2 -0
  163. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  164. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  165. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  166. package/dist/types/common/errors/media.d.ts +15 -0
  167. package/dist/types/common/errors/parameter.d.ts +15 -0
  168. package/dist/types/common/errors/password-error.d.ts +15 -0
  169. package/dist/types/common/errors/permission.d.ts +14 -0
  170. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  171. package/dist/types/common/errors/reconnection.d.ts +15 -0
  172. package/dist/types/common/errors/stats.d.ts +15 -0
  173. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  174. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  175. package/dist/types/common/events/events-scope.d.ts +17 -0
  176. package/dist/types/common/events/events.d.ts +12 -0
  177. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  178. package/dist/types/common/events/util.d.ts +2 -0
  179. package/dist/types/common/logs/logger-config.d.ts +2 -0
  180. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  181. package/dist/types/common/logs/request.d.ts +34 -0
  182. package/dist/types/common/queue.d.ts +32 -0
  183. package/dist/types/config.d.ts +72 -0
  184. package/dist/types/constants.d.ts +1016 -0
  185. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  186. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  187. package/dist/types/controls-options-manager/index.d.ts +136 -0
  188. package/dist/types/controls-options-manager/types.d.ts +43 -0
  189. package/dist/types/controls-options-manager/util.d.ts +1 -0
  190. package/dist/types/index.d.ts +7 -0
  191. package/dist/types/interpretation/collection.d.ts +5 -0
  192. package/dist/types/interpretation/index.d.ts +5 -0
  193. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  194. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  195. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  196. package/dist/types/locus-info/fullState.d.ts +2 -0
  197. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  198. package/dist/types/locus-info/index.d.ts +315 -0
  199. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  200. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  201. package/dist/types/locus-info/parser.d.ts +212 -0
  202. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  203. package/dist/types/media/index.d.ts +34 -0
  204. package/dist/types/media/properties.d.ts +93 -0
  205. package/dist/types/media/util.d.ts +2 -0
  206. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  207. package/dist/types/meeting/in-meeting-actions.d.ts +149 -0
  208. package/dist/types/meeting/index.d.ts +1467 -0
  209. package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
  210. package/dist/types/meeting/muteState.d.ts +184 -0
  211. package/dist/types/meeting/request.d.ts +270 -0
  212. package/dist/types/meeting/request.type.d.ts +11 -0
  213. package/dist/types/meeting/state.d.ts +9 -0
  214. package/dist/types/meeting/util.d.ts +77 -0
  215. package/dist/types/meeting-info/collection.d.ts +20 -0
  216. package/dist/types/meeting-info/index.d.ts +62 -0
  217. package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
  218. package/dist/types/meeting-info/request.d.ts +22 -0
  219. package/dist/types/meeting-info/util.d.ts +2 -0
  220. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  221. package/dist/types/meetings/collection.d.ts +31 -0
  222. package/dist/types/meetings/index.d.ts +365 -0
  223. package/dist/types/meetings/meetings.types.d.ts +4 -0
  224. package/dist/types/meetings/request.d.ts +27 -0
  225. package/dist/types/meetings/util.d.ts +18 -0
  226. package/dist/types/member/index.d.ts +159 -0
  227. package/dist/types/member/types.d.ts +32 -0
  228. package/dist/types/member/util.d.ts +2 -0
  229. package/dist/types/members/collection.d.ts +29 -0
  230. package/dist/types/members/index.d.ts +353 -0
  231. package/dist/types/members/request.d.ts +114 -0
  232. package/dist/types/members/types.d.ts +24 -0
  233. package/dist/types/members/util.d.ts +210 -0
  234. package/dist/types/metrics/constants.d.ts +55 -0
  235. package/dist/types/metrics/index.d.ts +45 -0
  236. package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
  237. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  238. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  239. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  240. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  241. package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
  242. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  243. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  244. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  245. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  246. package/dist/types/reachability/index.d.ts +152 -0
  247. package/dist/types/reachability/request.d.ts +37 -0
  248. package/dist/types/reactions/constants.d.ts +3 -0
  249. package/dist/types/reactions/reactions.d.ts +4 -0
  250. package/dist/types/reactions/reactions.type.d.ts +52 -0
  251. package/dist/types/reconnection-manager/index.d.ts +126 -0
  252. package/dist/types/recording-controller/enums.d.ts +7 -0
  253. package/dist/types/recording-controller/index.d.ts +208 -0
  254. package/dist/types/recording-controller/util.d.ts +14 -0
  255. package/dist/types/roap/index.d.ts +77 -0
  256. package/dist/types/roap/request.d.ts +36 -0
  257. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  258. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  259. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  260. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  261. package/dist/types/transcription/index.d.ts +64 -0
  262. package/package.json +26 -23
  263. package/src/annotation/annotation.types.ts +50 -0
  264. package/src/annotation/constants.ts +36 -0
  265. package/src/annotation/index.ts +328 -0
  266. package/src/breakouts/README.md +44 -14
  267. package/src/breakouts/breakout.ts +87 -9
  268. package/src/breakouts/edit-lock-error.ts +25 -0
  269. package/src/breakouts/events.ts +56 -0
  270. package/src/breakouts/index.ts +710 -10
  271. package/src/breakouts/request.ts +55 -0
  272. package/src/breakouts/utils.ts +57 -0
  273. package/src/common/errors/webex-errors.ts +6 -2
  274. package/src/common/logs/logger-proxy.ts +1 -1
  275. package/src/config.ts +2 -7
  276. package/src/constants.ts +157 -21
  277. package/src/controls-options-manager/constants.ts +5 -0
  278. package/src/controls-options-manager/enums.ts +18 -0
  279. package/src/controls-options-manager/index.ts +278 -0
  280. package/src/controls-options-manager/types.ts +59 -0
  281. package/src/controls-options-manager/util.ts +286 -0
  282. package/src/index.ts +39 -0
  283. package/src/interpretation/README.md +60 -0
  284. package/src/interpretation/collection.ts +19 -0
  285. package/src/interpretation/index.ts +318 -0
  286. package/src/interpretation/siLanguage.ts +18 -0
  287. package/src/locus-info/controlsUtils.ts +108 -0
  288. package/src/locus-info/index.ts +316 -38
  289. package/src/locus-info/mediaSharesUtils.ts +48 -0
  290. package/src/locus-info/parser.ts +1 -1
  291. package/src/locus-info/selfUtils.ts +81 -5
  292. package/src/media/index.ts +77 -142
  293. package/src/media/properties.ts +49 -90
  294. package/src/mediaQualityMetrics/config.ts +379 -377
  295. package/src/meeting/in-meeting-actions.ts +151 -3
  296. package/src/meeting/index.ts +1919 -2002
  297. package/src/meeting/locusMediaRequest.ts +309 -0
  298. package/src/meeting/muteState.ts +228 -132
  299. package/src/meeting/request.ts +96 -65
  300. package/src/meeting/util.ts +464 -396
  301. package/src/meeting-info/index.ts +54 -8
  302. package/src/meeting-info/meeting-info-v2.ts +148 -14
  303. package/src/meeting-info/utilv2.ts +13 -3
  304. package/src/meetings/collection.ts +20 -0
  305. package/src/meetings/index.ts +386 -84
  306. package/src/meetings/meetings.types.ts +12 -0
  307. package/src/meetings/request.ts +2 -0
  308. package/src/meetings/util.ts +103 -4
  309. package/src/member/index.ts +49 -0
  310. package/src/member/types.ts +38 -0
  311. package/src/member/util.ts +103 -0
  312. package/src/members/collection.ts +8 -0
  313. package/src/members/index.ts +107 -6
  314. package/src/members/request.ts +97 -17
  315. package/src/members/types.ts +28 -0
  316. package/src/members/util.ts +319 -240
  317. package/src/metrics/constants.ts +2 -4
  318. package/src/metrics/index.ts +1 -490
  319. package/src/multistream/mediaRequestManager.ts +289 -79
  320. package/src/multistream/receiveSlot.ts +55 -18
  321. package/src/multistream/receiveSlotManager.ts +42 -20
  322. package/src/multistream/remoteMedia.ts +28 -2
  323. package/src/multistream/remoteMediaGroup.ts +59 -0
  324. package/src/multistream/remoteMediaManager.ts +113 -32
  325. package/src/networkQualityMonitor/index.ts +6 -6
  326. package/src/reachability/index.ts +62 -15
  327. package/src/reachability/request.ts +10 -5
  328. package/src/reactions/reactions.ts +4 -4
  329. package/src/reactions/reactions.type.ts +3 -3
  330. package/src/reconnection-manager/index.ts +68 -43
  331. package/src/recording-controller/index.ts +20 -2
  332. package/src/recording-controller/util.ts +26 -9
  333. package/src/roap/index.ts +21 -30
  334. package/src/roap/request.ts +101 -95
  335. package/src/roap/turnDiscovery.ts +47 -25
  336. package/src/statsAnalyzer/global.ts +1 -94
  337. package/src/statsAnalyzer/index.ts +376 -386
  338. package/src/statsAnalyzer/mqaUtil.ts +100 -99
  339. package/test/integration/spec/converged-space-meetings.js +233 -0
  340. package/test/integration/spec/journey.js +336 -259
  341. package/test/integration/spec/space-meeting.js +77 -4
  342. package/test/unit/spec/annotation/index.ts +418 -0
  343. package/test/unit/spec/breakouts/breakout.ts +142 -24
  344. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  345. package/test/unit/spec/breakouts/events.ts +89 -0
  346. package/test/unit/spec/breakouts/index.ts +1545 -48
  347. package/test/unit/spec/breakouts/request.ts +104 -0
  348. package/test/unit/spec/breakouts/utils.js +72 -0
  349. package/test/unit/spec/controls-options-manager/index.js +287 -0
  350. package/test/unit/spec/controls-options-manager/util.js +518 -0
  351. package/test/unit/spec/fixture/locus.js +1 -0
  352. package/test/unit/spec/interpretation/collection.ts +15 -0
  353. package/test/unit/spec/interpretation/index.ts +570 -0
  354. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  355. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  356. package/test/unit/spec/locus-info/index.js +707 -22
  357. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  358. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  359. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  360. package/test/unit/spec/media/index.ts +129 -23
  361. package/test/unit/spec/meeting/in-meeting-actions.ts +75 -3
  362. package/test/unit/spec/meeting/index.js +2728 -1397
  363. package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
  364. package/test/unit/spec/meeting/muteState.js +370 -208
  365. package/test/unit/spec/meeting/request.js +338 -43
  366. package/test/unit/spec/meeting/utils.js +378 -55
  367. package/test/unit/spec/meeting-info/index.js +181 -0
  368. package/test/unit/spec/meeting-info/meetinginfov2.js +383 -5
  369. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  370. package/test/unit/spec/meetings/collection.js +14 -0
  371. package/test/unit/spec/meetings/index.js +846 -121
  372. package/test/unit/spec/meetings/utils.js +206 -2
  373. package/test/unit/spec/member/index.js +58 -4
  374. package/test/unit/spec/member/util.js +415 -33
  375. package/test/unit/spec/members/index.js +320 -1
  376. package/test/unit/spec/members/request.js +206 -27
  377. package/test/unit/spec/members/utils.js +184 -0
  378. package/test/unit/spec/metrics/index.js +1 -50
  379. package/test/unit/spec/multistream/mediaRequestManager.ts +803 -162
  380. package/test/unit/spec/multistream/receiveSlot.ts +72 -13
  381. package/test/unit/spec/multistream/receiveSlotManager.ts +58 -28
  382. package/test/unit/spec/multistream/remoteMedia.ts +30 -0
  383. package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
  384. package/test/unit/spec/multistream/remoteMediaManager.ts +318 -0
  385. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  386. package/test/unit/spec/reachability/index.ts +125 -8
  387. package/test/unit/spec/reachability/request.js +66 -0
  388. package/test/unit/spec/reconnection-manager/index.js +59 -6
  389. package/test/unit/spec/recording-controller/index.js +294 -218
  390. package/test/unit/spec/recording-controller/util.js +223 -96
  391. package/test/unit/spec/roap/index.ts +26 -51
  392. package/test/unit/spec/roap/request.ts +196 -85
  393. package/test/unit/spec/roap/turnDiscovery.ts +30 -7
  394. package/test/unit/spec/stats-analyzer/index.js +92 -41
  395. package/test/utils/constants.js +9 -0
  396. package/test/utils/integrationTestUtils.js +46 -0
  397. package/test/utils/testUtils.js +0 -45
  398. package/test/utils/webex-config.js +4 -0
  399. package/test/utils/webex-test-users.js +6 -3
  400. package/dist/meeting/effectsState.js +0 -262
  401. package/dist/meeting/effectsState.js.map +0 -1
  402. package/dist/metrics/config.js +0 -299
  403. package/dist/metrics/config.js.map +0 -1
  404. package/dist/multistream/multistreamMedia.js +0 -110
  405. package/dist/multistream/multistreamMedia.js.map +0 -1
  406. package/src/index.js +0 -15
  407. package/src/meeting/effectsState.ts +0 -211
  408. package/src/metrics/config.ts +0 -495
  409. package/src/multistream/multistreamMedia.ts +0 -97
  410. package/test/unit/spec/meeting/effectsState.js +0 -285
@@ -1,17 +1,25 @@
1
1
  "use strict";
2
2
 
3
+ var _typeof = require("@babel/runtime-corejs2/helpers/typeof");
3
4
  var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
5
+ var _Object$keys2 = require("@babel/runtime-corejs2/core-js/object/keys");
6
+ var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
7
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
8
+ var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
9
+ var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
4
10
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
11
+ var _WeakMap = require("@babel/runtime-corejs2/core-js/weak-map");
5
12
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
13
  _Object$defineProperty(exports, "__esModule", {
7
14
  value: true
8
15
  });
9
16
  exports.default = void 0;
10
- var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
11
17
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
12
18
  var _now = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/date/now"));
13
19
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
14
20
  var _values = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/values"));
21
+ var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
22
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/toConsumableArray"));
15
23
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
16
24
  var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
17
25
  var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
@@ -22,13 +30,14 @@ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/he
22
30
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
23
31
  require("@webex/internal-plugin-mercury");
24
32
  require("@webex/internal-plugin-conversation");
33
+ require("@webex/internal-plugin-metrics");
25
34
  var _webexCore = require("@webex/webex-core");
26
35
  var _internalMediaCore = require("@webex/internal-media-core");
36
+ var mediaHelpersModule = _interopRequireWildcard(require("@webex/media-helpers"));
27
37
  require("webrtc-adapter");
28
38
  var _metrics = _interopRequireDefault(require("../metrics"));
29
- var _config = require("../metrics/config");
30
39
  var _loggerConfig = _interopRequireDefault(require("../common/logs/logger-config"));
31
- var _config2 = _interopRequireDefault(require("../common/config"));
40
+ var _config = _interopRequireDefault(require("../common/config"));
32
41
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
33
42
  var _request = _interopRequireDefault(require("../common/logs/request"));
34
43
  var _triggerProxy = _interopRequireDefault(require("../common/events/trigger-proxy"));
@@ -46,6 +55,11 @@ var _passwordError = _interopRequireDefault(require("../common/errors/password-e
46
55
  var _captchaError = _interopRequireDefault(require("../common/errors/captcha-error"));
47
56
  var _collection = _interopRequireDefault(require("./collection"));
48
57
  var _util2 = _interopRequireDefault(require("./util"));
58
+ var _permission = _interopRequireDefault(require("../common/errors/permission"));
59
+ function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
60
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
61
+ function ownKeys(object, enumerableOnly) { var keys = _Object$keys2(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
62
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
49
63
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
50
64
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
51
65
  var mediaLogger;
@@ -157,13 +171,14 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
157
171
  _this = _super.call.apply(_super, [this].concat(args));
158
172
 
159
173
  /**
160
- * The Meetings request to interact with server
174
+ * The webrtc-core media helpers. This is a temporary solution required for the SDK sample app
175
+ * to be able to call media helper functions.
176
+ *
161
177
  * @instance
162
178
  * @type {Object}
163
179
  * @private
164
180
  * @memberof Meetings
165
181
  */
166
- // @ts-ignore
167
182
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "loggerRequest", void 0);
168
183
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "media", void 0);
169
184
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "meetingCollection", void 0);
@@ -174,7 +189,61 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
174
189
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "request", void 0);
175
190
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "geoHintInfo", void 0);
176
191
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "meetingInfo", void 0);
192
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mediaHelpers", void 0);
193
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "breakoutLocusForHandleLater", void 0);
177
194
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "namespace", _constants.MEETINGS);
195
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "createNoiseReductionEffect", /*#__PURE__*/function () {
196
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(options) {
197
+ var authToken;
198
+ return _regenerator.default.wrap(function _callee$(_context) {
199
+ while (1) switch (_context.prev = _context.next) {
200
+ case 0:
201
+ // @ts-ignore
202
+ authToken = _this.webex.credentials.supertoken.access_token;
203
+ return _context.abrupt("return", new mediaHelpersModule.NoiseReductionEffect(_objectSpread({
204
+ authToken: authToken
205
+ }, options)));
206
+ case 2:
207
+ case "end":
208
+ return _context.stop();
209
+ }
210
+ }, _callee);
211
+ }));
212
+ return function (_x) {
213
+ return _ref.apply(this, arguments);
214
+ };
215
+ }());
216
+ (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "createVirtualBackgroundEffect", /*#__PURE__*/function () {
217
+ var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(options) {
218
+ var authToken;
219
+ return _regenerator.default.wrap(function _callee2$(_context2) {
220
+ while (1) switch (_context2.prev = _context2.next) {
221
+ case 0:
222
+ // @ts-ignore
223
+ authToken = _this.webex.credentials.supertoken.access_token;
224
+ return _context2.abrupt("return", new mediaHelpersModule.VirtualBackgroundEffect(_objectSpread({
225
+ authToken: authToken
226
+ }, options)));
227
+ case 2:
228
+ case "end":
229
+ return _context2.stop();
230
+ }
231
+ }, _callee2);
232
+ }));
233
+ return function (_x2) {
234
+ return _ref2.apply(this, arguments);
235
+ };
236
+ }());
237
+ _this.mediaHelpers = mediaHelpersModule;
238
+
239
+ /**
240
+ * The Meetings request to interact with server
241
+ * @instance
242
+ * @type {Object}
243
+ * @private
244
+ * @memberof Meetings
245
+ */
246
+ // @ts-ignore
178
247
  _this.request = new _request2.default({}, {
179
248
  parent: _this.webex
180
249
  });
@@ -235,50 +304,152 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
235
304
  * @memberof Meetings
236
305
  */
237
306
  _this.media = {
238
- getUserMedia: _media.default.getUserMedia,
239
- getSupportedDevice: _media.default.getSupportedDevice
307
+ getUserMedia: _media.default.getUserMedia
240
308
  };
241
309
  _this.onReady();
242
310
  return _this;
243
311
  }
244
312
 
245
313
  /**
246
- * handle locus events and takes meeting actions with them as they come in
247
- * @param {Object} data a locus event
248
- * @param {String} data.locusUrl
249
- * @param {Object} data.locus
250
- * @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info
251
- * @param {String} data.eventType
252
- * @returns {undefined}
314
+ * check whether you need to handle this main session's locus data or not
315
+ * @param {Object} meeting current meeting data
316
+ * @param {Object} newLocus new locus data
317
+ * @returns {boolean}
253
318
  * @private
254
319
  * @memberof Meetings
255
320
  */
256
321
  (0, _createClass2.default)(Meetings, [{
257
- key: "handleLocusEvent",
258
- value: function handleLocusEvent(data) {
259
- var _data$locus$info,
260
- _data$locus,
261
- _data$locus$replaces,
262
- _this2 = this;
263
- var useRandomDelayForInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
264
- var meeting = null;
322
+ key: "isNeedHandleMainLocus",
323
+ value: function isNeedHandleMainLocus(meeting, newLocus) {
324
+ var _newLocus$controls, _newLocus$controls$br, _newLocus$self, _newLocus$self2, _newLocus$self3, _breakoutLocus$joined, _newLocus$self4;
325
+ var breakoutUrl = (_newLocus$controls = newLocus.controls) === null || _newLocus$controls === void 0 ? void 0 : (_newLocus$controls$br = _newLocus$controls.breakout) === null || _newLocus$controls$br === void 0 ? void 0 : _newLocus$controls$br.url;
326
+ var breakoutLocus = this.meetingCollection.getActiveBreakoutLocus(breakoutUrl);
327
+ var isSelfJoined = (newLocus === null || newLocus === void 0 ? void 0 : (_newLocus$self = newLocus.self) === null || _newLocus$self === void 0 ? void 0 : _newLocus$self.state) === _constants._JOINED_;
328
+ var isSelfMoved = (newLocus === null || newLocus === void 0 ? void 0 : (_newLocus$self2 = newLocus.self) === null || _newLocus$self2 === void 0 ? void 0 : _newLocus$self2.state) === _constants._LEFT_ && (newLocus === null || newLocus === void 0 ? void 0 : (_newLocus$self3 = newLocus.self) === null || _newLocus$self3 === void 0 ? void 0 : _newLocus$self3.reason) === _constants._MOVED_;
329
+ // @ts-ignore
330
+ var deviceFromNewLocus = _util2.default.getThisDevice(newLocus, this.webex.internal.device.url);
331
+ var isResourceMovedOnThisDevice = (deviceFromNewLocus === null || deviceFromNewLocus === void 0 ? void 0 : deviceFromNewLocus.state) === _constants._LEFT_ && (deviceFromNewLocus === null || deviceFromNewLocus === void 0 ? void 0 : deviceFromNewLocus.reason) === _constants._MOVED_;
332
+ var isNewLocusJoinThisDevice = _util2.default.joinedOnThisDevice(meeting, newLocus,
333
+ // @ts-ignore
334
+ this.webex.internal.device.url);
335
+ var isBreakoutLocusJoinThisDevice = (breakoutLocus === null || breakoutLocus === void 0 ? void 0 : (_breakoutLocus$joined = breakoutLocus.joinedWith) === null || _breakoutLocus$joined === void 0 ? void 0 : _breakoutLocus$joined.correlationId) && breakoutLocus.joinedWith.correlationId === (meeting === null || meeting === void 0 ? void 0 : meeting.correlationId);
336
+ if (isSelfJoined && isNewLocusJoinThisDevice) {
337
+ _loggerProxy.default.logger.log('Meetings:index#isNeedHandleMainLocus --> self this device shown as JOINED in the main session');
338
+ if (breakoutLocus !== null && breakoutLocus !== void 0 && breakoutLocus.joinedWith && deviceFromNewLocus) {
339
+ var _breakoutLocus$joined2, _deviceFromNewLocus$r;
340
+ var breakoutReplaceAt = ((_breakoutLocus$joined2 = breakoutLocus.joinedWith.replaces) === null || _breakoutLocus$joined2 === void 0 ? void 0 : _breakoutLocus$joined2.length) > 0 ? breakoutLocus.joinedWith.replaces[0].replaceAt : '';
341
+ var newLocusReplaceAt = ((_deviceFromNewLocus$r = deviceFromNewLocus.replaces) === null || _deviceFromNewLocus$r === void 0 ? void 0 : _deviceFromNewLocus$r.length) > 0 ? deviceFromNewLocus.replaces[0].replaceAt : '';
342
+ if (breakoutReplaceAt && newLocusReplaceAt && breakoutReplaceAt > newLocusReplaceAt) {
343
+ _loggerProxy.default.logger.log("Meetings:index#isNeedHandleMainLocus --> this is expired main joined status locus_dto replacedAt ".concat(newLocusReplaceAt, " bo replacedAt ").concat(breakoutReplaceAt));
344
+ return false;
345
+ }
346
+ }
347
+ return true;
348
+ }
349
+ if (isBreakoutLocusJoinThisDevice) {
350
+ _loggerProxy.default.logger.log("Meetings:index#isNeedHandleMainLocus --> there is active breakout session and joined on this device, and don't need to handle main session: ".concat(breakoutUrl));
351
+ return false;
352
+ }
353
+ if (isSelfMoved && (newLocus !== null && newLocus !== void 0 && (_newLocus$self4 = newLocus.self) !== null && _newLocus$self4 !== void 0 && _newLocus$self4.removed || isResourceMovedOnThisDevice)) {
354
+ _loggerProxy.default.logger.log('Meetings:index#isNeedHandleMainLocus --> self moved main locus with self removed status or with device resource moved, not need to handle');
355
+ return false;
356
+ }
357
+ if (isSelfJoined && isResourceMovedOnThisDevice) {
358
+ _loggerProxy.default.logger.log('Meetings:index#isNeedHandleMainLocus --> self device left&moved in main locus with self joined status, not need to handle');
359
+ return false;
360
+ }
361
+ _loggerProxy.default.logger.log('Meetings:index#isNeedHandleMainLocus --> this is a normal main session locusDTO update case');
362
+ return true;
363
+ }
265
364
 
365
+ /**
366
+ * check whether you need to handle this locus data or not
367
+ * @param {Object} meeting old locus data
368
+ * @param {Object} newLocus new locus data
369
+ * @returns {boolean}
370
+ * @private
371
+ * @memberof Meetings
372
+ */
373
+ }, {
374
+ key: "isNeedHandleLocusDTO",
375
+ value: function isNeedHandleLocusDTO(meeting, newLocus) {
376
+ if (newLocus) {
377
+ var _newLocus$self5, _newLocus$self6;
378
+ var isNewLocusAsBreakout = _util2.default.isBreakoutLocusDTO(newLocus);
379
+ var isSelfMoved = (newLocus === null || newLocus === void 0 ? void 0 : (_newLocus$self5 = newLocus.self) === null || _newLocus$self5 === void 0 ? void 0 : _newLocus$self5.state) === _constants._LEFT_ && (newLocus === null || newLocus === void 0 ? void 0 : (_newLocus$self6 = newLocus.self) === null || _newLocus$self6 === void 0 ? void 0 : _newLocus$self6.reason) === _constants._MOVED_;
380
+ if (!meeting) {
381
+ if (isNewLocusAsBreakout) {
382
+ var _newLocus$fullState, _newLocus$self7;
383
+ _loggerProxy.default.logger.log("Meetings:index#isNeedHandleLocusDTO --> the first breakout session locusDTO active status: ".concat((_newLocus$fullState = newLocus.fullState) === null || _newLocus$fullState === void 0 ? void 0 : _newLocus$fullState.active));
384
+ return ((_newLocus$self7 = newLocus.self) === null || _newLocus$self7 === void 0 ? void 0 : _newLocus$self7.state) === _constants._JOINED_;
385
+ }
386
+ return this.isNeedHandleMainLocus(meeting, newLocus);
387
+ }
388
+ if (!isNewLocusAsBreakout) {
389
+ return this.isNeedHandleMainLocus(meeting, newLocus);
390
+ }
391
+ return !isSelfMoved;
392
+ }
393
+ return true;
394
+ }
395
+
396
+ /**
397
+ * get corresponding meeting object by locus data
398
+ * @param {Object} data a locus event
399
+ * @param {String} data.locusUrl
400
+ * @param {Object} data.locus
401
+ * @returns {Object}
402
+ * @private
403
+ * @memberof Meetings
404
+ */
405
+ }, {
406
+ key: "getCorrespondingMeetingByLocus",
407
+ value: function getCorrespondingMeetingByLocus(data) {
408
+ var _data$locus$info, _data$locus, _data$locus$info2;
266
409
  // getting meeting by correlationId. This will happen for the new event
267
410
  // Either the locus
268
411
  // TODO : Add check for the callBack Address
269
- meeting = this.meetingCollection.getByKey(_constants.LOCUS_URL, data.locusUrl) ||
412
+ return this.meetingCollection.getByKey(_constants.LOCUS_URL, data.locusUrl) ||
270
413
  // @ts-ignore
271
414
  this.meetingCollection.getByKey(_constants.CORRELATION_ID,
272
415
  // @ts-ignore
273
- _util2.default.checkForCorrelationId(this.webex.internal.device.url, data.locus)) || this.meetingCollection.getByKey(_constants.SIP_URI, data.locus.self && data.locus.self.callbackInfo && data.locus.self.callbackInfo.callbackAddress) || ((_data$locus$info = data.locus.info) !== null && _data$locus$info !== void 0 && _data$locus$info.isUnifiedSpaceMeeting ? undefined : this.meetingCollection.getByKey(_constants.CONVERSATION_URL, data.locus.conversationUrl));
416
+ _util2.default.checkForCorrelationId(this.webex.internal.device.url, data.locus)) || this.meetingCollection.getByKey(_constants.SIP_URI, data.locus.self && data.locus.self.callbackInfo && data.locus.self.callbackInfo.callbackAddress) || ((_data$locus$info = data.locus.info) !== null && _data$locus$info !== void 0 && _data$locus$info.isUnifiedSpaceMeeting ? undefined : this.meetingCollection.getByKey(_constants.CONVERSATION_URL, data.locus.conversationUrl)) || this.meetingCollection.getByKey(_constants.MEETINGNUMBER, (_data$locus = data.locus) === null || _data$locus === void 0 ? void 0 : (_data$locus$info2 = _data$locus.info) === null || _data$locus$info2 === void 0 ? void 0 : _data$locus$info2.webExMeetingId);
417
+ }
418
+
419
+ /**
420
+ * handle locus events and takes meeting actions with them as they come in
421
+ * @param {Object} data a locus event
422
+ * @param {String} data.locusUrl
423
+ * @param {Object} data.locus
424
+ * @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info
425
+ * @param {String} data.eventType
426
+ * @returns {undefined}
427
+ * @private
428
+ * @memberof Meetings
429
+ */
430
+ }, {
431
+ key: "handleLocusEvent",
432
+ value: function handleLocusEvent(data) {
433
+ var _data$locus2,
434
+ _data$locus2$replaces,
435
+ _this2 = this;
436
+ var useRandomDelayForInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
437
+ var meeting = this.getCorrespondingMeetingByLocus(data);
274
438
 
275
439
  // Special case when locus has got replaced, This only happend once if a replace locus exists
276
440
  // https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-changing-mid-call
277
441
 
278
- if (!meeting && ((_data$locus = data.locus) === null || _data$locus === void 0 ? void 0 : (_data$locus$replaces = _data$locus.replaces) === null || _data$locus$replaces === void 0 ? void 0 : _data$locus$replaces.length) > 0) {
442
+ if (!meeting && ((_data$locus2 = data.locus) === null || _data$locus2 === void 0 ? void 0 : (_data$locus2$replaces = _data$locus2.replaces) === null || _data$locus2$replaces === void 0 ? void 0 : _data$locus2$replaces.length) > 0) {
279
443
  // Always the last element in the replace is the active one
280
444
  meeting = this.meetingCollection.getByKey(_constants.LOCUS_URL, data.locus.replaces[data.locus.replaces.length - 1].locusUrl);
281
445
  }
446
+ if (meeting && !_util2.default.isBreakoutLocusDTO(data.locus)) {
447
+ meeting.locusInfo.updateMainSessionLocusCache(data.locus);
448
+ }
449
+ if (!this.isNeedHandleLocusDTO(meeting, data.locus)) {
450
+ _loggerProxy.default.logger.log("Meetings:index#handleLocusEvent --> doesn't need to process locus event");
451
+ return;
452
+ }
282
453
  if (!meeting) {
283
454
  // TODO: create meeting when we get a meeting object
284
455
  // const checkForEnded = (locus) => {
@@ -318,6 +489,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
318
489
 
319
490
  // It's a new meeting so initialize the locus data
320
491
  meeting.locusInfo.initialSetup(data.locus);
492
+ _this2.checkHandleBreakoutLocus(data.locus);
321
493
  }).catch(function (e) {
322
494
  _loggerProxy.default.logger.error(e);
323
495
  }).finally(function () {
@@ -325,11 +497,14 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
325
497
  // because the other user left so before sending 'added' event make sure it exists in the collection
326
498
 
327
499
  if (_this2.getMeetingByType(_constants._ID_, meeting.id)) {
328
- _metrics.default.postEvent({
329
- event: _config.eventType.REMOTE_STARTED,
330
- meeting: meeting,
331
- data: {
332
- trigger: _config.trigger.MERCURY_EVENT
500
+ // @ts-ignore
501
+ _this2.webex.internal.newMetrics.submitClientEvent({
502
+ name: 'client.call.remote-started',
503
+ payload: {
504
+ trigger: 'mercury-event'
505
+ },
506
+ options: {
507
+ meetingId: meeting.id
333
508
  }
334
509
  });
335
510
  _triggerProxy.default.trigger(_this2, {
@@ -443,7 +618,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
443
618
  // @ts-ignore
444
619
  this.webex.once(_constants.READY, function () {
445
620
  // @ts-ignore
446
- _config2.default.set(_this4.config);
621
+ _config.default.set(_this4.config);
447
622
  // @ts-ignore
448
623
  _loggerConfig.default.set(_this4.config.logging);
449
624
  // @ts-ignore
@@ -480,7 +655,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
480
655
  disableNotifications: true
481
656
  });
482
657
  // @ts-ignore
483
- _metrics.default.initialSetup(_this4.meetingCollection, _this4.webex);
658
+ _metrics.default.initialSetup(_this4.webex);
484
659
  });
485
660
  }
486
661
 
@@ -630,6 +805,17 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
630
805
  );
631
806
  }
632
807
 
808
+ /**
809
+ * Creates a noise reduction effect
810
+ *
811
+ * @param {INoiseReductionEffect} options optional custom effect options
812
+ * @returns {Promise<effect>} noise reduction effect.
813
+ * @public
814
+ * @memberof Meetings
815
+ */
816
+ }, {
817
+ key: "uploadLogs",
818
+ value:
633
819
  /**
634
820
  * Uploads logs to the webex services for tracking
635
821
  * @param {Object} [options={}]
@@ -642,9 +828,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
642
828
  * @param {String} [options.orgId] org id
643
829
  * @returns {String} feedback ID logs were submitted under
644
830
  */
645
- }, {
646
- key: "uploadLogs",
647
- value: function uploadLogs() {
831
+ function uploadLogs() {
648
832
  var _this7 = this;
649
833
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
650
834
  _loggerProxy.default.logger.info('Meetings:index#uploadLogs --> uploading logs');
@@ -747,6 +931,23 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
747
931
  if (res) {
748
932
  _this9.preferredWebexSite = _util2.default.parseDefaultSiteFromMeetingPreferences(res);
749
933
  }
934
+
935
+ // fall back to getting the preferred site from the user information
936
+ if (!_this9.preferredWebexSite) {
937
+ // @ts-ignore
938
+ return _this9.webex.internal.user.get().then(function (user) {
939
+ var _user$userPreferences, _user$userPreferences2;
940
+ var preferredWebexSite = user === null || user === void 0 ? void 0 : (_user$userPreferences = user.userPreferences) === null || _user$userPreferences === void 0 ? void 0 : (_user$userPreferences2 = _user$userPreferences.userPreferencesItems) === null || _user$userPreferences2 === void 0 ? void 0 : _user$userPreferences2.preferredWebExSite;
941
+ if (preferredWebexSite) {
942
+ _this9.preferredWebexSite = preferredWebexSite;
943
+ } else {
944
+ throw new Error('site not found');
945
+ }
946
+ }).catch(function () {
947
+ _loggerProxy.default.logger.error('Failed to fetch preferred site from user - no site will be set');
948
+ });
949
+ }
950
+ return _promise.default.resolve();
750
951
  });
751
952
  }
752
953
 
@@ -789,6 +990,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
789
990
  * @param {string} destination - sipURL, spaceId, phonenumber, or locus object}
790
991
  * @param {string} [type] - the optional specified type, such as locusId
791
992
  * @param {Boolean} useRandomDelayForInfo - whether a random delay should be added to fetching meeting info
993
+ * @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info
792
994
  * @returns {Promise<Meeting>} A new Meeting.
793
995
  * @public
794
996
  * @memberof Meetings
@@ -799,6 +1001,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
799
1001
  var _this10 = this;
800
1002
  var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
801
1003
  var useRandomDelayForInfo = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
1004
+ var infoExtraParams = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
802
1005
  // TODO: type should be from a dictionary
803
1006
 
804
1007
  // Validate meeting information based on the provided destination and
@@ -837,7 +1040,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
837
1040
  // Validate if a meeting was found.
838
1041
  if (!meeting) {
839
1042
  // Create a meeting based on the normalized destination and type.
840
- return _this10.createMeeting(targetDest, type, useRandomDelayForInfo).then(function (createdMeeting) {
1043
+ return _this10.createMeeting(targetDest, type, useRandomDelayForInfo, infoExtraParams).then(function (createdMeeting) {
841
1044
  // If the meeting was successfully created.
842
1045
  if (createdMeeting && createdMeeting.on) {
843
1046
  // Create a destruction event for the meeting.
@@ -889,6 +1092,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
889
1092
  * @param {String} destination see create()
890
1093
  * @param {String} type see create()
891
1094
  * @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info
1095
+ * @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info
892
1096
  * @returns {Promise} a new meeting instance complete with meeting info and destination
893
1097
  * @private
894
1098
  * @memberof Meetings
@@ -896,9 +1100,10 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
896
1100
  }, {
897
1101
  key: "createMeeting",
898
1102
  value: function () {
899
- var _createMeeting = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(destination) {
1103
+ var _createMeeting = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(destination) {
900
1104
  var type,
901
1105
  useRandomDelayForInfo,
1106
+ infoExtraParams,
902
1107
  meeting,
903
1108
  _destination$fullStat,
904
1109
  waitingTime,
@@ -910,12 +1115,13 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
910
1115
  isMeetingActive,
911
1116
  enableUnifiedMeetings,
912
1117
  meetingAddedType,
913
- _args = arguments;
914
- return _regenerator.default.wrap(function _callee$(_context) {
915
- while (1) switch (_context.prev = _context.next) {
1118
+ _args3 = arguments;
1119
+ return _regenerator.default.wrap(function _callee3$(_context3) {
1120
+ while (1) switch (_context3.prev = _context3.next) {
916
1121
  case 0:
917
- type = _args.length > 1 && _args[1] !== undefined ? _args[1] : null;
918
- useRandomDelayForInfo = _args.length > 2 && _args[2] !== undefined ? _args[2] : false;
1122
+ type = _args3.length > 1 && _args3[1] !== undefined ? _args3[1] : null;
1123
+ useRandomDelayForInfo = _args3.length > 2 && _args3[2] !== undefined ? _args3[2] : false;
1124
+ infoExtraParams = _args3.length > 3 && _args3[3] !== undefined ? _args3[3] : {};
919
1125
  meeting = new _meeting.default({
920
1126
  // @ts-ignore
921
1127
  userId: this.webex.internal.device.userId,
@@ -933,7 +1139,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
933
1139
  parent: this.webex
934
1140
  });
935
1141
  this.meetingCollection.set(meeting);
936
- _context.prev = 4;
1142
+ _context3.prev = 5;
937
1143
  // if no participant has joined the scheduled meeting (meaning meeting is not active) and we get a locusEvent,
938
1144
  // it means the meeting will start in 5-6 min. In that case, we want to fetchMeetingInfo
939
1145
  // between 5 and 2 min (random between 3 minutes) before the meeting starts
@@ -950,32 +1156,36 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
950
1156
  isMeetingActive = !!((_destination$fullStat = destination.fullState) !== null && _destination$fullStat !== void 0 && _destination$fullStat.active); // @ts-ignore
951
1157
  enableUnifiedMeetings = this.config.experimental.enableUnifiedMeetings;
952
1158
  if (!(enableUnifiedMeetings && !isMeetingActive && useRandomDelayForInfo && waitingTime > 0)) {
953
- _context.next = 14;
1159
+ _context3.next = 15;
954
1160
  break;
955
1161
  }
956
1162
  meeting.fetchMeetingInfoTimeoutId = setTimeout(function () {
957
- return meeting.fetchMeetingInfo({});
1163
+ return meeting.fetchMeetingInfo({
1164
+ extraParams: infoExtraParams
1165
+ });
958
1166
  }, waitingTime);
959
1167
  meeting.parseMeetingInfo(undefined, destination);
960
- _context.next = 16;
1168
+ _context3.next = 17;
961
1169
  break;
962
- case 14:
963
- _context.next = 16;
964
- return meeting.fetchMeetingInfo({});
965
- case 16:
966
- _context.next = 22;
1170
+ case 15:
1171
+ _context3.next = 17;
1172
+ return meeting.fetchMeetingInfo({
1173
+ extraParams: infoExtraParams
1174
+ });
1175
+ case 17:
1176
+ _context3.next = 23;
967
1177
  break;
968
- case 18:
969
- _context.prev = 18;
970
- _context.t0 = _context["catch"](4);
971
- if (!(_context.t0 instanceof _captchaError.default) && !(_context.t0 instanceof _passwordError.default)) {
1178
+ case 19:
1179
+ _context3.prev = 19;
1180
+ _context3.t0 = _context3["catch"](5);
1181
+ if (!(_context3.t0 instanceof _captchaError.default) && !(_context3.t0 instanceof _passwordError.default) && !(_context3.t0 instanceof _permission.default)) {
972
1182
  // if there is no meeting info we assume its a 1:1 call or wireless share
973
1183
  _loggerProxy.default.logger.info("Meetings:index#createMeeting --> Info Unable to fetch meeting info for ".concat(destination, "."));
974
1184
  _loggerProxy.default.logger.info('Meetings:index#createMeeting --> Info assuming this destination is a 1:1 or wireless share');
975
1185
  }
976
- _loggerProxy.default.logger.debug("Meetings:index#createMeeting --> Debug ".concat(_context.t0, " fetching /meetingInfo for creation."));
977
- case 22:
978
- _context.prev = 22;
1186
+ _loggerProxy.default.logger.debug("Meetings:index#createMeeting --> Debug ".concat(_context3.t0, " fetching /meetingInfo for creation."));
1187
+ case 23:
1188
+ _context3.prev = 23;
979
1189
  // For type LOCUS_ID we need to parse the locus object to get the information
980
1190
  // about the caller and callee
981
1191
  // Meeting Added event will be created in `handleLocusEvent`
@@ -995,16 +1205,16 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
995
1205
  type: meetingAddedType
996
1206
  });
997
1207
  }
998
- return _context.finish(22);
999
- case 25:
1000
- return _context.abrupt("return", meeting);
1208
+ return _context3.finish(23);
1001
1209
  case 26:
1210
+ return _context3.abrupt("return", meeting);
1211
+ case 27:
1002
1212
  case "end":
1003
- return _context.stop();
1213
+ return _context3.stop();
1004
1214
  }
1005
- }, _callee, this, [[4, 18, 22, 25]]);
1215
+ }, _callee3, this, [[5, 19, 23, 26]]);
1006
1216
  }));
1007
- function createMeeting(_x) {
1217
+ function createMeeting(_x3) {
1008
1218
  return _createMeeting.apply(this, arguments);
1009
1219
  }
1010
1220
  return createMeeting;
@@ -1054,7 +1264,8 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1054
1264
  return this.request.getActiveMeetings().then(function (locusArray) {
1055
1265
  var activeLocusUrl = [];
1056
1266
  if (locusArray !== null && locusArray !== void 0 && locusArray.loci && locusArray.loci.length > 0) {
1057
- locusArray.loci.forEach(function (locus) {
1267
+ var lociToUpdate = _this11.sortLocusArrayToUpdate(locusArray.loci);
1268
+ lociToUpdate.forEach(function (locus) {
1058
1269
  activeLocusUrl.push(locus.url);
1059
1270
  _this11.handleLocusEvent({
1060
1271
  locus: locus,
@@ -1076,7 +1287,81 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1076
1287
  }
1077
1288
  }
1078
1289
  }
1290
+ }).catch(function (error) {
1291
+ _loggerProxy.default.logger.error("Meetings:index#syncMeetings --> failed to sync meetings, ".concat(error));
1292
+ throw new Error(error);
1293
+ });
1294
+ }
1295
+
1296
+ /**
1297
+ * sort out locus array for initial creating
1298
+ * @param {Array} loci original locus array
1299
+ * @returns {undefined}
1300
+ * @public
1301
+ * @memberof Meetings
1302
+ */
1303
+ }, {
1304
+ key: "sortLocusArrayToUpdate",
1305
+ value: function sortLocusArrayToUpdate(loci) {
1306
+ var _this12 = this;
1307
+ var mainLoci = loci.filter(function (locus) {
1308
+ return !_util2.default.isBreakoutLocusDTO(locus);
1309
+ });
1310
+ var breakoutLoci = loci.filter(function (locus) {
1311
+ return _util2.default.isValidBreakoutLocus(locus);
1312
+ });
1313
+ this.breakoutLocusForHandleLater = [];
1314
+ var lociToUpdate = (0, _toConsumableArray2.default)(mainLoci);
1315
+ breakoutLoci.forEach(function (breakoutLocus) {
1316
+ var associateMainLocus = mainLoci.find(function (mainLocus) {
1317
+ var _mainLocus$controls, _mainLocus$controls$b, _breakoutLocus$contro, _breakoutLocus$contro2;
1318
+ return ((_mainLocus$controls = mainLocus.controls) === null || _mainLocus$controls === void 0 ? void 0 : (_mainLocus$controls$b = _mainLocus$controls.breakout) === null || _mainLocus$controls$b === void 0 ? void 0 : _mainLocus$controls$b.url) === ((_breakoutLocus$contro = breakoutLocus.controls) === null || _breakoutLocus$contro === void 0 ? void 0 : (_breakoutLocus$contro2 = _breakoutLocus$contro.breakout) === null || _breakoutLocus$contro2 === void 0 ? void 0 : _breakoutLocus$contro2.url);
1319
+ });
1320
+ var existCorrespondingMeeting = _this12.getCorrespondingMeetingByLocus({
1321
+ locus: breakoutLocus,
1322
+ locusUrl: breakoutLocus.url
1323
+ });
1324
+ if (associateMainLocus && !existCorrespondingMeeting) {
1325
+ // if exists both main session and breakout session locus of the same non-exist meeting, handle main locus first,
1326
+ // after meeting create with main locus, then handle the associate breakout locus.
1327
+ // if only handle breakout locus, will miss some date
1328
+ _this12.breakoutLocusForHandleLater.push(breakoutLocus);
1329
+ } else {
1330
+ lociToUpdate.push(breakoutLocus);
1331
+ }
1332
+ });
1333
+ return lociToUpdate;
1334
+ }
1335
+
1336
+ /**
1337
+ * check breakout locus which waiting for main locus's meeting to be created, then handle the breakout locus
1338
+ * @param {Object} newCreatedLocus the locus which just create meeting object of it
1339
+ * @returns {undefined}
1340
+ * @public
1341
+ * @memberof Meetings
1342
+ */
1343
+ }, {
1344
+ key: "checkHandleBreakoutLocus",
1345
+ value: function checkHandleBreakoutLocus(newCreatedLocus) {
1346
+ if (!newCreatedLocus || !this.breakoutLocusForHandleLater || !this.breakoutLocusForHandleLater.length) {
1347
+ return;
1348
+ }
1349
+ if (_util2.default.isBreakoutLocusDTO(newCreatedLocus)) {
1350
+ return;
1351
+ }
1352
+ var existIndex = this.breakoutLocusForHandleLater.findIndex(function (breakoutLocus) {
1353
+ var _breakoutLocus$contro3, _breakoutLocus$contro4, _newCreatedLocus$cont, _newCreatedLocus$cont2;
1354
+ return ((_breakoutLocus$contro3 = breakoutLocus.controls) === null || _breakoutLocus$contro3 === void 0 ? void 0 : (_breakoutLocus$contro4 = _breakoutLocus$contro3.breakout) === null || _breakoutLocus$contro4 === void 0 ? void 0 : _breakoutLocus$contro4.url) === ((_newCreatedLocus$cont = newCreatedLocus.controls) === null || _newCreatedLocus$cont === void 0 ? void 0 : (_newCreatedLocus$cont2 = _newCreatedLocus$cont.breakout) === null || _newCreatedLocus$cont2 === void 0 ? void 0 : _newCreatedLocus$cont2.url);
1355
+ });
1356
+ if (existIndex < 0) {
1357
+ return;
1358
+ }
1359
+ var associateBreakoutLocus = this.breakoutLocusForHandleLater[existIndex];
1360
+ this.handleLocusEvent({
1361
+ locus: associateBreakoutLocus,
1362
+ locusUrl: associateBreakoutLocus.url
1079
1363
  });
1364
+ this.breakoutLocusForHandleLater.splice(existIndex, 1);
1080
1365
  }
1081
1366
 
1082
1367
  /**