@webex/plugin-meetings 3.0.0-beta.22 → 3.0.0-beta.221

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 (419) hide show
  1. package/README.md +46 -8
  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/common/queue.js +24 -9
  25. package/dist/common/queue.js.map +1 -1
  26. package/dist/config.js +3 -8
  27. package/dist/config.js.map +1 -1
  28. package/dist/constants.js +188 -30
  29. package/dist/constants.js.map +1 -1
  30. package/dist/controls-options-manager/constants.js +14 -0
  31. package/dist/controls-options-manager/constants.js.map +1 -0
  32. package/dist/controls-options-manager/enums.js +27 -0
  33. package/dist/controls-options-manager/enums.js.map +1 -0
  34. package/dist/controls-options-manager/index.js +297 -0
  35. package/dist/controls-options-manager/index.js.map +1 -0
  36. package/dist/controls-options-manager/types.js +7 -0
  37. package/dist/controls-options-manager/types.js.map +1 -0
  38. package/dist/controls-options-manager/util.js +319 -0
  39. package/dist/controls-options-manager/util.js.map +1 -0
  40. package/dist/index.js +106 -1
  41. package/dist/index.js.map +1 -1
  42. package/dist/interpretation/collection.js +23 -0
  43. package/dist/interpretation/collection.js.map +1 -0
  44. package/dist/interpretation/index.js +366 -0
  45. package/dist/interpretation/index.js.map +1 -0
  46. package/dist/interpretation/siLanguage.js +25 -0
  47. package/dist/interpretation/siLanguage.js.map +1 -0
  48. package/dist/locus-info/controlsUtils.js +91 -2
  49. package/dist/locus-info/controlsUtils.js.map +1 -1
  50. package/dist/locus-info/index.js +357 -62
  51. package/dist/locus-info/index.js.map +1 -1
  52. package/dist/locus-info/infoUtils.js +7 -1
  53. package/dist/locus-info/infoUtils.js.map +1 -1
  54. package/dist/locus-info/mediaSharesUtils.js +43 -1
  55. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  56. package/dist/locus-info/parser.js +219 -63
  57. package/dist/locus-info/parser.js.map +1 -1
  58. package/dist/locus-info/selfUtils.js +89 -14
  59. package/dist/locus-info/selfUtils.js.map +1 -1
  60. package/dist/media/index.js +49 -106
  61. package/dist/media/index.js.map +1 -1
  62. package/dist/media/properties.js +29 -90
  63. package/dist/media/properties.js.map +1 -1
  64. package/dist/mediaQualityMetrics/config.js +505 -493
  65. package/dist/mediaQualityMetrics/config.js.map +1 -1
  66. package/dist/meeting/in-meeting-actions.js +90 -2
  67. package/dist/meeting/in-meeting-actions.js.map +1 -1
  68. package/dist/meeting/index.js +2587 -2560
  69. package/dist/meeting/index.js.map +1 -1
  70. package/dist/meeting/locusMediaRequest.js +292 -0
  71. package/dist/meeting/locusMediaRequest.js.map +1 -0
  72. package/dist/meeting/muteState.js +228 -123
  73. package/dist/meeting/muteState.js.map +1 -1
  74. package/dist/meeting/request.js +244 -194
  75. package/dist/meeting/request.js.map +1 -1
  76. package/dist/meeting/util.js +568 -414
  77. package/dist/meeting/util.js.map +1 -1
  78. package/dist/meeting-info/index.js +48 -7
  79. package/dist/meeting-info/index.js.map +1 -1
  80. package/dist/meeting-info/meeting-info-v2.js +171 -51
  81. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  82. package/dist/meeting-info/utilv2.js +20 -5
  83. package/dist/meeting-info/utilv2.js.map +1 -1
  84. package/dist/meetings/collection.js +22 -0
  85. package/dist/meetings/collection.js.map +1 -1
  86. package/dist/meetings/index.js +361 -84
  87. package/dist/meetings/index.js.map +1 -1
  88. package/dist/meetings/meetings.types.js +7 -0
  89. package/dist/meetings/meetings.types.js.map +1 -0
  90. package/dist/meetings/request.js +2 -0
  91. package/dist/meetings/request.js.map +1 -1
  92. package/dist/meetings/util.js +88 -1
  93. package/dist/meetings/util.js.map +1 -1
  94. package/dist/member/index.js +49 -0
  95. package/dist/member/index.js.map +1 -1
  96. package/dist/member/types.js +25 -0
  97. package/dist/member/types.js.map +1 -0
  98. package/dist/member/util.js +121 -25
  99. package/dist/member/util.js.map +1 -1
  100. package/dist/members/collection.js +10 -0
  101. package/dist/members/collection.js.map +1 -1
  102. package/dist/members/index.js +86 -5
  103. package/dist/members/index.js.map +1 -1
  104. package/dist/members/request.js +106 -38
  105. package/dist/members/request.js.map +1 -1
  106. package/dist/members/types.js +15 -0
  107. package/dist/members/types.js.map +1 -0
  108. package/dist/members/util.js +316 -233
  109. package/dist/members/util.js.map +1 -1
  110. package/dist/metrics/constants.js +3 -5
  111. package/dist/metrics/constants.js.map +1 -1
  112. package/dist/metrics/index.js +1 -468
  113. package/dist/metrics/index.js.map +1 -1
  114. package/dist/multistream/mediaRequestManager.js +238 -49
  115. package/dist/multistream/mediaRequestManager.js.map +1 -1
  116. package/dist/multistream/receiveSlot.js +49 -16
  117. package/dist/multistream/receiveSlot.js.map +1 -1
  118. package/dist/multistream/receiveSlotManager.js +52 -34
  119. package/dist/multistream/receiveSlotManager.js.map +1 -1
  120. package/dist/multistream/remoteMedia.js +44 -18
  121. package/dist/multistream/remoteMedia.js.map +1 -1
  122. package/dist/multistream/remoteMediaGroup.js +60 -3
  123. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  124. package/dist/multistream/remoteMediaManager.js +173 -59
  125. package/dist/multistream/remoteMediaManager.js.map +1 -1
  126. package/dist/networkQualityMonitor/index.js +4 -2
  127. package/dist/networkQualityMonitor/index.js.map +1 -1
  128. package/dist/reachability/index.js +90 -30
  129. package/dist/reachability/index.js.map +1 -1
  130. package/dist/reachability/request.js +16 -7
  131. package/dist/reachability/request.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 -2
  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 +25 -29
  139. package/dist/roap/index.js.map +1 -1
  140. package/dist/roap/request.js +111 -89
  141. package/dist/roap/request.js.map +1 -1
  142. package/dist/roap/turnDiscovery.js +97 -36
  143. package/dist/roap/turnDiscovery.js.map +1 -1
  144. package/dist/rtcMetrics/constants.js +12 -0
  145. package/dist/rtcMetrics/constants.js.map +1 -0
  146. package/dist/rtcMetrics/index.js +117 -0
  147. package/dist/rtcMetrics/index.js.map +1 -0
  148. package/dist/statsAnalyzer/global.js +1 -93
  149. package/dist/statsAnalyzer/global.js.map +1 -1
  150. package/dist/statsAnalyzer/index.js +326 -311
  151. package/dist/statsAnalyzer/index.js.map +1 -1
  152. package/dist/statsAnalyzer/mqaUtil.js +90 -53
  153. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  154. package/dist/types/annotation/annotation.types.d.ts +42 -0
  155. package/dist/types/annotation/constants.d.ts +31 -0
  156. package/dist/types/annotation/index.d.ts +117 -0
  157. package/dist/types/breakouts/breakout.d.ts +8 -0
  158. package/dist/types/breakouts/collection.d.ts +5 -0
  159. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  160. package/dist/types/breakouts/events.d.ts +8 -0
  161. package/dist/types/breakouts/index.d.ts +5 -0
  162. package/dist/types/breakouts/request.d.ts +22 -0
  163. package/dist/types/breakouts/utils.d.ts +15 -0
  164. package/dist/types/common/browser-detection.d.ts +9 -0
  165. package/dist/types/common/collection.d.ts +48 -0
  166. package/dist/types/common/config.d.ts +2 -0
  167. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  168. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  169. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  170. package/dist/types/common/errors/media.d.ts +15 -0
  171. package/dist/types/common/errors/parameter.d.ts +15 -0
  172. package/dist/types/common/errors/password-error.d.ts +15 -0
  173. package/dist/types/common/errors/permission.d.ts +14 -0
  174. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  175. package/dist/types/common/errors/reconnection.d.ts +15 -0
  176. package/dist/types/common/errors/stats.d.ts +15 -0
  177. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  178. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  179. package/dist/types/common/events/events-scope.d.ts +17 -0
  180. package/dist/types/common/events/events.d.ts +12 -0
  181. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  182. package/dist/types/common/events/util.d.ts +2 -0
  183. package/dist/types/common/logs/logger-config.d.ts +2 -0
  184. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  185. package/dist/types/common/logs/request.d.ts +34 -0
  186. package/dist/types/common/queue.d.ts +34 -0
  187. package/dist/types/config.d.ts +72 -0
  188. package/dist/types/constants.d.ts +1028 -0
  189. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  190. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  191. package/dist/types/controls-options-manager/index.d.ts +136 -0
  192. package/dist/types/controls-options-manager/types.d.ts +43 -0
  193. package/dist/types/controls-options-manager/util.d.ts +1 -0
  194. package/dist/types/index.d.ts +7 -0
  195. package/dist/types/interpretation/collection.d.ts +5 -0
  196. package/dist/types/interpretation/index.d.ts +5 -0
  197. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  198. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  199. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  200. package/dist/types/locus-info/fullState.d.ts +2 -0
  201. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  202. package/dist/types/locus-info/index.d.ts +322 -0
  203. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  204. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  205. package/dist/types/locus-info/parser.d.ts +271 -0
  206. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  207. package/dist/types/media/index.d.ts +34 -0
  208. package/dist/types/media/properties.d.ts +93 -0
  209. package/dist/types/media/util.d.ts +2 -0
  210. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  211. package/dist/types/meeting/in-meeting-actions.d.ts +163 -0
  212. package/dist/types/meeting/index.d.ts +1512 -0
  213. package/dist/types/meeting/locusMediaRequest.d.ts +75 -0
  214. package/dist/types/meeting/muteState.d.ts +184 -0
  215. package/dist/types/meeting/request.d.ts +289 -0
  216. package/dist/types/meeting/request.type.d.ts +11 -0
  217. package/dist/types/meeting/state.d.ts +9 -0
  218. package/dist/types/meeting/util.d.ts +94 -0
  219. package/dist/types/meeting-info/collection.d.ts +20 -0
  220. package/dist/types/meeting-info/index.d.ts +62 -0
  221. package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
  222. package/dist/types/meeting-info/request.d.ts +22 -0
  223. package/dist/types/meeting-info/util.d.ts +2 -0
  224. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  225. package/dist/types/meetings/collection.d.ts +31 -0
  226. package/dist/types/meetings/index.d.ts +361 -0
  227. package/dist/types/meetings/meetings.types.d.ts +4 -0
  228. package/dist/types/meetings/request.d.ts +27 -0
  229. package/dist/types/meetings/util.d.ts +18 -0
  230. package/dist/types/member/index.d.ts +159 -0
  231. package/dist/types/member/types.d.ts +32 -0
  232. package/dist/types/member/util.d.ts +2 -0
  233. package/dist/types/members/collection.d.ts +29 -0
  234. package/dist/types/members/index.d.ts +353 -0
  235. package/dist/types/members/request.d.ts +114 -0
  236. package/dist/types/members/types.d.ts +24 -0
  237. package/dist/types/members/util.d.ts +210 -0
  238. package/dist/types/metrics/constants.d.ts +55 -0
  239. package/dist/types/metrics/index.d.ts +45 -0
  240. package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
  241. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  242. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  243. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  244. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  245. package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
  246. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  247. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  248. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  249. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  250. package/dist/types/reachability/index.d.ts +158 -0
  251. package/dist/types/reachability/request.d.ts +39 -0
  252. package/dist/types/reactions/constants.d.ts +3 -0
  253. package/dist/types/reactions/reactions.d.ts +4 -0
  254. package/dist/types/reactions/reactions.type.d.ts +52 -0
  255. package/dist/types/reconnection-manager/index.d.ts +126 -0
  256. package/dist/types/recording-controller/enums.d.ts +7 -0
  257. package/dist/types/recording-controller/index.d.ts +207 -0
  258. package/dist/types/recording-controller/util.d.ts +14 -0
  259. package/dist/types/roap/index.d.ts +77 -0
  260. package/dist/types/roap/request.d.ts +38 -0
  261. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  262. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  263. package/dist/types/rtcMetrics/index.d.ts +47 -0
  264. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  265. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  266. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  267. package/dist/types/transcription/index.d.ts +64 -0
  268. package/package.json +23 -20
  269. package/src/annotation/annotation.types.ts +50 -0
  270. package/src/annotation/constants.ts +36 -0
  271. package/src/annotation/index.ts +328 -0
  272. package/src/breakouts/README.md +44 -14
  273. package/src/breakouts/breakout.ts +87 -9
  274. package/src/breakouts/edit-lock-error.ts +25 -0
  275. package/src/breakouts/events.ts +56 -0
  276. package/src/breakouts/index.ts +710 -10
  277. package/src/breakouts/request.ts +55 -0
  278. package/src/breakouts/utils.ts +57 -0
  279. package/src/common/errors/webex-errors.ts +6 -2
  280. package/src/common/logs/logger-proxy.ts +1 -1
  281. package/src/common/queue.ts +22 -8
  282. package/src/config.ts +2 -7
  283. package/src/constants.ts +175 -21
  284. package/src/controls-options-manager/constants.ts +5 -0
  285. package/src/controls-options-manager/enums.ts +18 -0
  286. package/src/controls-options-manager/index.ts +278 -0
  287. package/src/controls-options-manager/types.ts +59 -0
  288. package/src/controls-options-manager/util.ts +300 -0
  289. package/src/index.ts +39 -0
  290. package/src/interpretation/README.md +60 -0
  291. package/src/interpretation/collection.ts +19 -0
  292. package/src/interpretation/index.ts +332 -0
  293. package/src/interpretation/siLanguage.ts +18 -0
  294. package/src/locus-info/controlsUtils.ts +108 -0
  295. package/src/locus-info/index.ts +381 -59
  296. package/src/locus-info/infoUtils.ts +10 -2
  297. package/src/locus-info/mediaSharesUtils.ts +48 -0
  298. package/src/locus-info/parser.ts +224 -39
  299. package/src/locus-info/selfUtils.ts +81 -5
  300. package/src/media/index.ts +89 -109
  301. package/src/media/properties.ts +49 -90
  302. package/src/mediaQualityMetrics/config.ts +379 -377
  303. package/src/meeting/in-meeting-actions.ts +179 -3
  304. package/src/meeting/index.ts +2062 -2137
  305. package/src/meeting/locusMediaRequest.ts +314 -0
  306. package/src/meeting/muteState.ts +227 -130
  307. package/src/meeting/request.ts +157 -116
  308. package/src/meeting/util.ts +555 -396
  309. package/src/meeting-info/index.ts +54 -8
  310. package/src/meeting-info/meeting-info-v2.ts +148 -14
  311. package/src/meeting-info/utilv2.ts +13 -3
  312. package/src/meetings/collection.ts +20 -0
  313. package/src/meetings/index.ts +397 -102
  314. package/src/meetings/meetings.types.ts +12 -0
  315. package/src/meetings/request.ts +2 -0
  316. package/src/meetings/util.ts +103 -4
  317. package/src/member/index.ts +49 -0
  318. package/src/member/types.ts +38 -0
  319. package/src/member/util.ts +127 -25
  320. package/src/members/collection.ts +8 -0
  321. package/src/members/index.ts +107 -6
  322. package/src/members/request.ts +97 -17
  323. package/src/members/types.ts +28 -0
  324. package/src/members/util.ts +319 -240
  325. package/src/metrics/constants.ts +2 -4
  326. package/src/metrics/index.ts +1 -490
  327. package/src/multistream/mediaRequestManager.ts +289 -79
  328. package/src/multistream/receiveSlot.ts +55 -18
  329. package/src/multistream/receiveSlotManager.ts +46 -24
  330. package/src/multistream/remoteMedia.ts +27 -2
  331. package/src/multistream/remoteMediaGroup.ts +59 -0
  332. package/src/multistream/remoteMediaManager.ts +113 -32
  333. package/src/networkQualityMonitor/index.ts +6 -6
  334. package/src/reachability/index.ts +76 -18
  335. package/src/reachability/request.ts +16 -7
  336. package/src/reconnection-manager/index.ts +68 -43
  337. package/src/recording-controller/index.ts +20 -3
  338. package/src/recording-controller/util.ts +26 -9
  339. package/src/roap/index.ts +25 -30
  340. package/src/roap/request.ts +103 -95
  341. package/src/roap/turnDiscovery.ts +51 -25
  342. package/src/rtcMetrics/constants.ts +3 -0
  343. package/src/rtcMetrics/index.ts +100 -0
  344. package/src/statsAnalyzer/global.ts +1 -94
  345. package/src/statsAnalyzer/index.ts +376 -386
  346. package/src/statsAnalyzer/mqaUtil.ts +100 -99
  347. package/test/integration/spec/converged-space-meetings.js +233 -0
  348. package/test/integration/spec/journey.js +336 -259
  349. package/test/integration/spec/space-meeting.js +77 -4
  350. package/test/unit/spec/annotation/index.ts +418 -0
  351. package/test/unit/spec/breakouts/breakout.ts +142 -24
  352. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  353. package/test/unit/spec/breakouts/events.ts +89 -0
  354. package/test/unit/spec/breakouts/index.ts +1545 -48
  355. package/test/unit/spec/breakouts/request.ts +104 -0
  356. package/test/unit/spec/breakouts/utils.js +72 -0
  357. package/test/unit/spec/common/queue.js +31 -2
  358. package/test/unit/spec/controls-options-manager/index.js +287 -0
  359. package/test/unit/spec/controls-options-manager/util.js +582 -0
  360. package/test/unit/spec/fixture/locus.js +1 -0
  361. package/test/unit/spec/interpretation/collection.ts +15 -0
  362. package/test/unit/spec/interpretation/index.ts +589 -0
  363. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  364. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  365. package/test/unit/spec/locus-info/index.js +1169 -36
  366. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  367. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  368. package/test/unit/spec/locus-info/parser.js +62 -22
  369. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  370. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  371. package/test/unit/spec/media/index.ts +138 -28
  372. package/test/unit/spec/meeting/in-meeting-actions.ts +89 -3
  373. package/test/unit/spec/meeting/index.js +3510 -1747
  374. package/test/unit/spec/meeting/locusMediaRequest.ts +443 -0
  375. package/test/unit/spec/meeting/muteState.js +370 -208
  376. package/test/unit/spec/meeting/request.js +417 -45
  377. package/test/unit/spec/meeting/utils.js +601 -53
  378. package/test/unit/spec/meeting-info/index.js +181 -0
  379. package/test/unit/spec/meeting-info/meetinginfov2.js +383 -5
  380. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  381. package/test/unit/spec/meetings/collection.js +14 -0
  382. package/test/unit/spec/meetings/index.js +874 -150
  383. package/test/unit/spec/meetings/utils.js +206 -2
  384. package/test/unit/spec/member/index.js +58 -4
  385. package/test/unit/spec/member/util.js +479 -35
  386. package/test/unit/spec/members/index.js +319 -1
  387. package/test/unit/spec/members/request.js +206 -27
  388. package/test/unit/spec/members/utils.js +184 -0
  389. package/test/unit/spec/metrics/index.js +1 -50
  390. package/test/unit/spec/multistream/mediaRequestManager.ts +803 -162
  391. package/test/unit/spec/multistream/receiveSlot.ts +72 -13
  392. package/test/unit/spec/multistream/receiveSlotManager.ts +58 -28
  393. package/test/unit/spec/multistream/remoteMedia.ts +30 -0
  394. package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
  395. package/test/unit/spec/multistream/remoteMediaManager.ts +318 -0
  396. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  397. package/test/unit/spec/reachability/index.ts +185 -7
  398. package/test/unit/spec/reachability/request.js +68 -0
  399. package/test/unit/spec/reconnection-manager/index.js +59 -6
  400. package/test/unit/spec/recording-controller/index.js +294 -218
  401. package/test/unit/spec/recording-controller/util.js +223 -96
  402. package/test/unit/spec/roap/index.ts +27 -51
  403. package/test/unit/spec/roap/request.ts +202 -85
  404. package/test/unit/spec/roap/turnDiscovery.ts +36 -8
  405. package/test/unit/spec/rtcMetrics/index.ts +68 -0
  406. package/test/unit/spec/stats-analyzer/index.js +92 -41
  407. package/test/utils/constants.js +9 -0
  408. package/test/utils/integrationTestUtils.js +46 -0
  409. package/test/utils/testUtils.js +0 -45
  410. package/test/utils/webex-config.js +4 -0
  411. package/test/utils/webex-test-users.js +6 -3
  412. package/dist/meeting/effectsState.js +0 -262
  413. package/dist/meeting/effectsState.js.map +0 -1
  414. package/dist/metrics/config.js +0 -299
  415. package/dist/metrics/config.js.map +0 -1
  416. package/src/index.js +0 -16
  417. package/src/meeting/effectsState.ts +0 -211
  418. package/src/metrics/config.ts +0 -495
  419. 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
  });
@@ -198,15 +267,17 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
198
267
  * @memberof Meetings
199
268
  */
200
269
  _this.personalMeetingRoom = null;
270
+
201
271
  /**
202
- * The Reachability object to interact with server, starts as null until {@link Meeting#setReachability} is called
272
+ * The Reachability object to interact with server
203
273
  * starts as null
204
274
  * @instance
205
275
  * @type {Object}
206
276
  * @private
207
277
  * @memberof Meetings
208
278
  */
209
- _this.reachability = null;
279
+ // @ts-ignore
280
+ _this.reachability = new _reachability.default(_this.webex);
210
281
 
211
282
  /**
212
283
  * If the meetings plugin has been registered and listening via {@link Meetings#register}
@@ -235,50 +306,152 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
235
306
  * @memberof Meetings
236
307
  */
237
308
  _this.media = {
238
- getUserMedia: _media.default.getUserMedia,
239
- getSupportedDevice: _media.default.getSupportedDevice
309
+ getUserMedia: _media.default.getUserMedia
240
310
  };
241
311
  _this.onReady();
242
312
  return _this;
243
313
  }
244
314
 
245
315
  /**
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}
316
+ * check whether you need to handle this main session's locus data or not
317
+ * @param {Object} meeting current meeting data
318
+ * @param {Object} newLocus new locus data
319
+ * @returns {boolean}
253
320
  * @private
254
321
  * @memberof Meetings
255
322
  */
256
323
  (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;
324
+ key: "isNeedHandleMainLocus",
325
+ value: function isNeedHandleMainLocus(meeting, newLocus) {
326
+ var _newLocus$controls, _newLocus$controls$br, _newLocus$self, _newLocus$self2, _newLocus$self3, _breakoutLocus$joined, _newLocus$self4;
327
+ 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;
328
+ var breakoutLocus = this.meetingCollection.getActiveBreakoutLocus(breakoutUrl);
329
+ 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_;
330
+ 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_;
331
+ // @ts-ignore
332
+ var deviceFromNewLocus = _util2.default.getThisDevice(newLocus, this.webex.internal.device.url);
333
+ var isResourceMovedOnThisDevice = (deviceFromNewLocus === null || deviceFromNewLocus === void 0 ? void 0 : deviceFromNewLocus.state) === _constants._LEFT_ && (deviceFromNewLocus === null || deviceFromNewLocus === void 0 ? void 0 : deviceFromNewLocus.reason) === _constants._MOVED_;
334
+ var isNewLocusJoinThisDevice = _util2.default.joinedOnThisDevice(meeting, newLocus,
335
+ // @ts-ignore
336
+ this.webex.internal.device.url);
337
+ 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);
338
+ if (isSelfJoined && isNewLocusJoinThisDevice) {
339
+ _loggerProxy.default.logger.log('Meetings:index#isNeedHandleMainLocus --> self this device shown as JOINED in the main session');
340
+ if (breakoutLocus !== null && breakoutLocus !== void 0 && breakoutLocus.joinedWith && deviceFromNewLocus) {
341
+ var _breakoutLocus$joined2, _deviceFromNewLocus$r;
342
+ var breakoutReplaceAt = ((_breakoutLocus$joined2 = breakoutLocus.joinedWith.replaces) === null || _breakoutLocus$joined2 === void 0 ? void 0 : _breakoutLocus$joined2.length) > 0 ? breakoutLocus.joinedWith.replaces[0].replaceAt : '';
343
+ var newLocusReplaceAt = ((_deviceFromNewLocus$r = deviceFromNewLocus.replaces) === null || _deviceFromNewLocus$r === void 0 ? void 0 : _deviceFromNewLocus$r.length) > 0 ? deviceFromNewLocus.replaces[0].replaceAt : '';
344
+ if (breakoutReplaceAt && newLocusReplaceAt && breakoutReplaceAt > newLocusReplaceAt) {
345
+ _loggerProxy.default.logger.log("Meetings:index#isNeedHandleMainLocus --> this is expired main joined status locus_dto replacedAt ".concat(newLocusReplaceAt, " bo replacedAt ").concat(breakoutReplaceAt));
346
+ return false;
347
+ }
348
+ }
349
+ return true;
350
+ }
351
+ if (isBreakoutLocusJoinThisDevice) {
352
+ _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));
353
+ return false;
354
+ }
355
+ if (isSelfMoved && (newLocus !== null && newLocus !== void 0 && (_newLocus$self4 = newLocus.self) !== null && _newLocus$self4 !== void 0 && _newLocus$self4.removed || isResourceMovedOnThisDevice)) {
356
+ _loggerProxy.default.logger.log('Meetings:index#isNeedHandleMainLocus --> self moved main locus with self removed status or with device resource moved, not need to handle');
357
+ return false;
358
+ }
359
+ if (isSelfJoined && isResourceMovedOnThisDevice) {
360
+ _loggerProxy.default.logger.log('Meetings:index#isNeedHandleMainLocus --> self device left&moved in main locus with self joined status, not need to handle');
361
+ return false;
362
+ }
363
+ _loggerProxy.default.logger.log('Meetings:index#isNeedHandleMainLocus --> this is a normal main session locusDTO update case');
364
+ return true;
365
+ }
265
366
 
367
+ /**
368
+ * check whether you need to handle this locus data or not
369
+ * @param {Object} meeting old locus data
370
+ * @param {Object} newLocus new locus data
371
+ * @returns {boolean}
372
+ * @private
373
+ * @memberof Meetings
374
+ */
375
+ }, {
376
+ key: "isNeedHandleLocusDTO",
377
+ value: function isNeedHandleLocusDTO(meeting, newLocus) {
378
+ if (newLocus) {
379
+ var _newLocus$self5, _newLocus$self6;
380
+ var isNewLocusAsBreakout = _util2.default.isBreakoutLocusDTO(newLocus);
381
+ 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_;
382
+ if (!meeting) {
383
+ if (isNewLocusAsBreakout) {
384
+ var _newLocus$fullState, _newLocus$self7;
385
+ _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));
386
+ return ((_newLocus$self7 = newLocus.self) === null || _newLocus$self7 === void 0 ? void 0 : _newLocus$self7.state) === _constants._JOINED_;
387
+ }
388
+ return this.isNeedHandleMainLocus(meeting, newLocus);
389
+ }
390
+ if (!isNewLocusAsBreakout) {
391
+ return this.isNeedHandleMainLocus(meeting, newLocus);
392
+ }
393
+ return !isSelfMoved;
394
+ }
395
+ return true;
396
+ }
397
+
398
+ /**
399
+ * get corresponding meeting object by locus data
400
+ * @param {Object} data a locus event
401
+ * @param {String} data.locusUrl
402
+ * @param {Object} data.locus
403
+ * @returns {Object}
404
+ * @private
405
+ * @memberof Meetings
406
+ */
407
+ }, {
408
+ key: "getCorrespondingMeetingByLocus",
409
+ value: function getCorrespondingMeetingByLocus(data) {
410
+ var _data$locus$info, _data$locus, _data$locus$info2;
266
411
  // getting meeting by correlationId. This will happen for the new event
267
412
  // Either the locus
268
413
  // TODO : Add check for the callBack Address
269
- meeting = this.meetingCollection.getByKey(_constants.LOCUS_URL, data.locusUrl) ||
414
+ return this.meetingCollection.getByKey(_constants.LOCUS_URL, data.locusUrl) ||
270
415
  // @ts-ignore
271
416
  this.meetingCollection.getByKey(_constants.CORRELATION_ID,
272
417
  // @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));
418
+ _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);
419
+ }
420
+
421
+ /**
422
+ * handle locus events and takes meeting actions with them as they come in
423
+ * @param {Object} data a locus event
424
+ * @param {String} data.locusUrl
425
+ * @param {Object} data.locus
426
+ * @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info
427
+ * @param {String} data.eventType
428
+ * @returns {undefined}
429
+ * @private
430
+ * @memberof Meetings
431
+ */
432
+ }, {
433
+ key: "handleLocusEvent",
434
+ value: function handleLocusEvent(data) {
435
+ var _data$locus2,
436
+ _data$locus2$replaces,
437
+ _this2 = this;
438
+ var useRandomDelayForInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
439
+ var meeting = this.getCorrespondingMeetingByLocus(data);
274
440
 
275
441
  // Special case when locus has got replaced, This only happend once if a replace locus exists
276
442
  // https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-changing-mid-call
277
443
 
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) {
444
+ 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
445
  // Always the last element in the replace is the active one
280
446
  meeting = this.meetingCollection.getByKey(_constants.LOCUS_URL, data.locus.replaces[data.locus.replaces.length - 1].locusUrl);
281
447
  }
448
+ if (meeting && !_util2.default.isBreakoutLocusDTO(data.locus)) {
449
+ meeting.locusInfo.updateMainSessionLocusCache(data.locus);
450
+ }
451
+ if (!this.isNeedHandleLocusDTO(meeting, data.locus)) {
452
+ _loggerProxy.default.logger.log("Meetings:index#handleLocusEvent --> doesn't need to process locus event");
453
+ return;
454
+ }
282
455
  if (!meeting) {
283
456
  // TODO: create meeting when we get a meeting object
284
457
  // const checkForEnded = (locus) => {
@@ -318,6 +491,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
318
491
 
319
492
  // It's a new meeting so initialize the locus data
320
493
  meeting.locusInfo.initialSetup(data.locus);
494
+ _this2.checkHandleBreakoutLocus(data.locus);
321
495
  }).catch(function (e) {
322
496
  _loggerProxy.default.logger.error(e);
323
497
  }).finally(function () {
@@ -325,11 +499,14 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
325
499
  // because the other user left so before sending 'added' event make sure it exists in the collection
326
500
 
327
501
  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
502
+ // @ts-ignore
503
+ _this2.webex.internal.newMetrics.submitClientEvent({
504
+ name: 'client.call.remote-started',
505
+ payload: {
506
+ trigger: 'mercury-event'
507
+ },
508
+ options: {
509
+ meetingId: meeting.id
333
510
  }
334
511
  });
335
512
  _triggerProxy.default.trigger(_this2, {
@@ -443,7 +620,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
443
620
  // @ts-ignore
444
621
  this.webex.once(_constants.READY, function () {
445
622
  // @ts-ignore
446
- _config2.default.set(_this4.config);
623
+ _config.default.set(_this4.config);
447
624
  // @ts-ignore
448
625
  _loggerConfig.default.set(_this4.config.logging);
449
626
  // @ts-ignore
@@ -480,7 +657,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
480
657
  disableNotifications: true
481
658
  });
482
659
  // @ts-ignore
483
- _metrics.default.initialSetup(_this4.meetingCollection, _this4.webex);
660
+ _metrics.default.initialSetup(_this4.webex);
484
661
  });
485
662
  }
486
663
 
@@ -630,6 +807,17 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
630
807
  );
631
808
  }
632
809
 
810
+ /**
811
+ * Creates a noise reduction effect
812
+ *
813
+ * @param {INoiseReductionEffect} options optional custom effect options
814
+ * @returns {Promise<effect>} noise reduction effect.
815
+ * @public
816
+ * @memberof Meetings
817
+ */
818
+ }, {
819
+ key: "uploadLogs",
820
+ value:
633
821
  /**
634
822
  * Uploads logs to the webex services for tracking
635
823
  * @param {Object} [options={}]
@@ -642,9 +830,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
642
830
  * @param {String} [options.orgId] org id
643
831
  * @returns {String} feedback ID logs were submitted under
644
832
  */
645
- }, {
646
- key: "uploadLogs",
647
- value: function uploadLogs() {
833
+ function uploadLogs() {
648
834
  var _this7 = this;
649
835
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
650
836
  _loggerProxy.default.logger.info('Meetings:index#uploadLogs --> uploading logs');
@@ -677,19 +863,6 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
677
863
  });
678
864
  }
679
865
 
680
- /**
681
- * initializes the reachability instance for Meetings
682
- * @returns {undefined}
683
- * @public
684
- * @memberof Meetings
685
- */
686
- }, {
687
- key: "setReachability",
688
- value: function setReachability() {
689
- // @ts-ignore
690
- this.reachability = new _reachability.default(this.webex);
691
- }
692
-
693
866
  /**
694
867
  * gets the reachability instance for Meetings
695
868
  * @returns {Reachability}
@@ -711,9 +884,6 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
711
884
  }, {
712
885
  key: "startReachability",
713
886
  value: function startReachability() {
714
- if (!this.reachability) {
715
- this.setReachability();
716
- }
717
887
  return this.getReachability().gatherReachability();
718
888
  }
719
889
 
@@ -747,6 +917,23 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
747
917
  if (res) {
748
918
  _this9.preferredWebexSite = _util2.default.parseDefaultSiteFromMeetingPreferences(res);
749
919
  }
920
+
921
+ // fall back to getting the preferred site from the user information
922
+ if (!_this9.preferredWebexSite) {
923
+ // @ts-ignore
924
+ return _this9.webex.internal.user.get().then(function (user) {
925
+ var _user$userPreferences, _user$userPreferences2;
926
+ 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;
927
+ if (preferredWebexSite) {
928
+ _this9.preferredWebexSite = preferredWebexSite;
929
+ } else {
930
+ throw new Error('site not found');
931
+ }
932
+ }).catch(function () {
933
+ _loggerProxy.default.logger.error('Failed to fetch preferred site from user - no site will be set');
934
+ });
935
+ }
936
+ return _promise.default.resolve();
750
937
  });
751
938
  }
752
939
 
@@ -789,6 +976,8 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
789
976
  * @param {string} destination - sipURL, spaceId, phonenumber, or locus object}
790
977
  * @param {string} [type] - the optional specified type, such as locusId
791
978
  * @param {Boolean} useRandomDelayForInfo - whether a random delay should be added to fetching meeting info
979
+ * @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info
980
+ * @param {string} correlationId - the optional specified correlationId
792
981
  * @returns {Promise<Meeting>} A new Meeting.
793
982
  * @public
794
983
  * @memberof Meetings
@@ -799,6 +988,8 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
799
988
  var _this10 = this;
800
989
  var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
801
990
  var useRandomDelayForInfo = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
991
+ var infoExtraParams = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
992
+ var correlationId = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : undefined;
802
993
  // TODO: type should be from a dictionary
803
994
 
804
995
  // Validate meeting information based on the provided destination and
@@ -837,7 +1028,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
837
1028
  // Validate if a meeting was found.
838
1029
  if (!meeting) {
839
1030
  // Create a meeting based on the normalized destination and type.
840
- return _this10.createMeeting(targetDest, type, useRandomDelayForInfo).then(function (createdMeeting) {
1031
+ return _this10.createMeeting(targetDest, type, useRandomDelayForInfo, infoExtraParams, correlationId).then(function (createdMeeting) {
841
1032
  // If the meeting was successfully created.
842
1033
  if (createdMeeting && createdMeeting.on) {
843
1034
  // Create a destruction event for the meeting.
@@ -889,6 +1080,8 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
889
1080
  * @param {String} destination see create()
890
1081
  * @param {String} type see create()
891
1082
  * @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info
1083
+ * @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info
1084
+ * @param {String} correlationId the optional specified correlationId
892
1085
  * @returns {Promise} a new meeting instance complete with meeting info and destination
893
1086
  * @private
894
1087
  * @memberof Meetings
@@ -896,9 +1089,11 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
896
1089
  }, {
897
1090
  key: "createMeeting",
898
1091
  value: function () {
899
- var _createMeeting = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(destination) {
1092
+ var _createMeeting = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(destination) {
900
1093
  var type,
901
1094
  useRandomDelayForInfo,
1095
+ infoExtraParams,
1096
+ correlationId,
902
1097
  meeting,
903
1098
  _destination$fullStat,
904
1099
  waitingTime,
@@ -910,12 +1105,14 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
910
1105
  isMeetingActive,
911
1106
  enableUnifiedMeetings,
912
1107
  meetingAddedType,
913
- _args = arguments;
914
- return _regenerator.default.wrap(function _callee$(_context) {
915
- while (1) switch (_context.prev = _context.next) {
1108
+ _args3 = arguments;
1109
+ return _regenerator.default.wrap(function _callee3$(_context3) {
1110
+ while (1) switch (_context3.prev = _context3.next) {
916
1111
  case 0:
917
- type = _args.length > 1 && _args[1] !== undefined ? _args[1] : null;
918
- useRandomDelayForInfo = _args.length > 2 && _args[2] !== undefined ? _args[2] : false;
1112
+ type = _args3.length > 1 && _args3[1] !== undefined ? _args3[1] : null;
1113
+ useRandomDelayForInfo = _args3.length > 2 && _args3[2] !== undefined ? _args3[2] : false;
1114
+ infoExtraParams = _args3.length > 3 && _args3[3] !== undefined ? _args3[3] : {};
1115
+ correlationId = _args3.length > 4 && _args3[4] !== undefined ? _args3[4] : undefined;
919
1116
  meeting = new _meeting.default({
920
1117
  // @ts-ignore
921
1118
  userId: this.webex.internal.device.userId,
@@ -927,13 +1124,14 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
927
1124
  // pass the locus object if present
928
1125
  meetingInfoProvider: this.meetingInfo,
929
1126
  destination: destination,
930
- destinationType: type
1127
+ destinationType: type,
1128
+ correlationId: correlationId
931
1129
  }, {
932
1130
  // @ts-ignore
933
1131
  parent: this.webex
934
1132
  });
935
1133
  this.meetingCollection.set(meeting);
936
- _context.prev = 4;
1134
+ _context3.prev = 6;
937
1135
  // if no participant has joined the scheduled meeting (meaning meeting is not active) and we get a locusEvent,
938
1136
  // it means the meeting will start in 5-6 min. In that case, we want to fetchMeetingInfo
939
1137
  // between 5 and 2 min (random between 3 minutes) before the meeting starts
@@ -950,32 +1148,36 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
950
1148
  isMeetingActive = !!((_destination$fullStat = destination.fullState) !== null && _destination$fullStat !== void 0 && _destination$fullStat.active); // @ts-ignore
951
1149
  enableUnifiedMeetings = this.config.experimental.enableUnifiedMeetings;
952
1150
  if (!(enableUnifiedMeetings && !isMeetingActive && useRandomDelayForInfo && waitingTime > 0)) {
953
- _context.next = 14;
1151
+ _context3.next = 16;
954
1152
  break;
955
1153
  }
956
1154
  meeting.fetchMeetingInfoTimeoutId = setTimeout(function () {
957
- return meeting.fetchMeetingInfo({});
1155
+ return meeting.fetchMeetingInfo({
1156
+ extraParams: infoExtraParams
1157
+ });
958
1158
  }, waitingTime);
959
1159
  meeting.parseMeetingInfo(undefined, destination);
960
- _context.next = 16;
1160
+ _context3.next = 18;
961
1161
  break;
962
- case 14:
963
- _context.next = 16;
964
- return meeting.fetchMeetingInfo({});
965
1162
  case 16:
966
- _context.next = 22;
967
- break;
1163
+ _context3.next = 18;
1164
+ return meeting.fetchMeetingInfo({
1165
+ extraParams: infoExtraParams
1166
+ });
968
1167
  case 18:
969
- _context.prev = 18;
970
- _context.t0 = _context["catch"](4);
971
- if (!(_context.t0 instanceof _captchaError.default) && !(_context.t0 instanceof _passwordError.default)) {
1168
+ _context3.next = 24;
1169
+ break;
1170
+ case 20:
1171
+ _context3.prev = 20;
1172
+ _context3.t0 = _context3["catch"](6);
1173
+ if (!(_context3.t0 instanceof _captchaError.default) && !(_context3.t0 instanceof _passwordError.default) && !(_context3.t0 instanceof _permission.default)) {
972
1174
  // if there is no meeting info we assume its a 1:1 call or wireless share
973
1175
  _loggerProxy.default.logger.info("Meetings:index#createMeeting --> Info Unable to fetch meeting info for ".concat(destination, "."));
974
1176
  _loggerProxy.default.logger.info('Meetings:index#createMeeting --> Info assuming this destination is a 1:1 or wireless share');
975
1177
  }
976
- _loggerProxy.default.logger.debug("Meetings:index#createMeeting --> Debug ".concat(_context.t0, " fetching /meetingInfo for creation."));
977
- case 22:
978
- _context.prev = 22;
1178
+ _loggerProxy.default.logger.debug("Meetings:index#createMeeting --> Debug ".concat(_context3.t0, " fetching /meetingInfo for creation."));
1179
+ case 24:
1180
+ _context3.prev = 24;
979
1181
  // For type LOCUS_ID we need to parse the locus object to get the information
980
1182
  // about the caller and callee
981
1183
  // Meeting Added event will be created in `handleLocusEvent`
@@ -995,16 +1197,16 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
995
1197
  type: meetingAddedType
996
1198
  });
997
1199
  }
998
- return _context.finish(22);
999
- case 25:
1000
- return _context.abrupt("return", meeting);
1001
- case 26:
1200
+ return _context3.finish(24);
1201
+ case 27:
1202
+ return _context3.abrupt("return", meeting);
1203
+ case 28:
1002
1204
  case "end":
1003
- return _context.stop();
1205
+ return _context3.stop();
1004
1206
  }
1005
- }, _callee, this, [[4, 18, 22, 25]]);
1207
+ }, _callee3, this, [[6, 20, 24, 27]]);
1006
1208
  }));
1007
- function createMeeting(_x) {
1209
+ function createMeeting(_x3) {
1008
1210
  return _createMeeting.apply(this, arguments);
1009
1211
  }
1010
1212
  return createMeeting;
@@ -1054,7 +1256,8 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1054
1256
  return this.request.getActiveMeetings().then(function (locusArray) {
1055
1257
  var activeLocusUrl = [];
1056
1258
  if (locusArray !== null && locusArray !== void 0 && locusArray.loci && locusArray.loci.length > 0) {
1057
- locusArray.loci.forEach(function (locus) {
1259
+ var lociToUpdate = _this11.sortLocusArrayToUpdate(locusArray.loci);
1260
+ lociToUpdate.forEach(function (locus) {
1058
1261
  activeLocusUrl.push(locus.url);
1059
1262
  _this11.handleLocusEvent({
1060
1263
  locus: locus,
@@ -1076,7 +1279,81 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1076
1279
  }
1077
1280
  }
1078
1281
  }
1282
+ }).catch(function (error) {
1283
+ _loggerProxy.default.logger.error("Meetings:index#syncMeetings --> failed to sync meetings, ".concat(error));
1284
+ throw new Error(error);
1285
+ });
1286
+ }
1287
+
1288
+ /**
1289
+ * sort out locus array for initial creating
1290
+ * @param {Array} loci original locus array
1291
+ * @returns {undefined}
1292
+ * @public
1293
+ * @memberof Meetings
1294
+ */
1295
+ }, {
1296
+ key: "sortLocusArrayToUpdate",
1297
+ value: function sortLocusArrayToUpdate(loci) {
1298
+ var _this12 = this;
1299
+ var mainLoci = loci.filter(function (locus) {
1300
+ return !_util2.default.isBreakoutLocusDTO(locus);
1301
+ });
1302
+ var breakoutLoci = loci.filter(function (locus) {
1303
+ return _util2.default.isValidBreakoutLocus(locus);
1304
+ });
1305
+ this.breakoutLocusForHandleLater = [];
1306
+ var lociToUpdate = (0, _toConsumableArray2.default)(mainLoci);
1307
+ breakoutLoci.forEach(function (breakoutLocus) {
1308
+ var associateMainLocus = mainLoci.find(function (mainLocus) {
1309
+ var _mainLocus$controls, _mainLocus$controls$b, _breakoutLocus$contro, _breakoutLocus$contro2;
1310
+ 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);
1311
+ });
1312
+ var existCorrespondingMeeting = _this12.getCorrespondingMeetingByLocus({
1313
+ locus: breakoutLocus,
1314
+ locusUrl: breakoutLocus.url
1315
+ });
1316
+ if (associateMainLocus && !existCorrespondingMeeting) {
1317
+ // if exists both main session and breakout session locus of the same non-exist meeting, handle main locus first,
1318
+ // after meeting create with main locus, then handle the associate breakout locus.
1319
+ // if only handle breakout locus, will miss some date
1320
+ _this12.breakoutLocusForHandleLater.push(breakoutLocus);
1321
+ } else {
1322
+ lociToUpdate.push(breakoutLocus);
1323
+ }
1324
+ });
1325
+ return lociToUpdate;
1326
+ }
1327
+
1328
+ /**
1329
+ * check breakout locus which waiting for main locus's meeting to be created, then handle the breakout locus
1330
+ * @param {Object} newCreatedLocus the locus which just create meeting object of it
1331
+ * @returns {undefined}
1332
+ * @public
1333
+ * @memberof Meetings
1334
+ */
1335
+ }, {
1336
+ key: "checkHandleBreakoutLocus",
1337
+ value: function checkHandleBreakoutLocus(newCreatedLocus) {
1338
+ if (!newCreatedLocus || !this.breakoutLocusForHandleLater || !this.breakoutLocusForHandleLater.length) {
1339
+ return;
1340
+ }
1341
+ if (_util2.default.isBreakoutLocusDTO(newCreatedLocus)) {
1342
+ return;
1343
+ }
1344
+ var existIndex = this.breakoutLocusForHandleLater.findIndex(function (breakoutLocus) {
1345
+ var _breakoutLocus$contro3, _breakoutLocus$contro4, _newCreatedLocus$cont, _newCreatedLocus$cont2;
1346
+ 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);
1347
+ });
1348
+ if (existIndex < 0) {
1349
+ return;
1350
+ }
1351
+ var associateBreakoutLocus = this.breakoutLocusForHandleLater[existIndex];
1352
+ this.handleLocusEvent({
1353
+ locus: associateBreakoutLocus,
1354
+ locusUrl: associateBreakoutLocus.url
1079
1355
  });
1356
+ this.breakoutLocusForHandleLater.splice(existIndex, 1);
1080
1357
  }
1081
1358
 
1082
1359
  /**