@webex/plugin-meetings 3.0.0-beta.16 → 3.0.0-beta.161

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 (424) hide show
  1. package/README.md +45 -1
  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 +359 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +212 -0
  9. package/dist/breakouts/breakout.js.map +1 -0
  10. package/dist/breakouts/collection.js +23 -0
  11. package/dist/breakouts/collection.js.map +1 -0
  12. package/dist/breakouts/edit-lock-error.js +52 -0
  13. package/dist/breakouts/edit-lock-error.js.map +1 -0
  14. package/dist/breakouts/events.js +43 -0
  15. package/dist/breakouts/events.js.map +1 -0
  16. package/dist/breakouts/index.js +1046 -0
  17. package/dist/breakouts/index.js.map +1 -0
  18. package/dist/breakouts/request.js +78 -0
  19. package/dist/breakouts/request.js.map +1 -0
  20. package/dist/breakouts/utils.js +67 -0
  21. package/dist/breakouts/utils.js.map +1 -0
  22. package/dist/common/errors/webex-errors.js +3 -2
  23. package/dist/common/errors/webex-errors.js.map +1 -1
  24. package/dist/common/logs/logger-proxy.js +1 -1
  25. package/dist/common/logs/logger-proxy.js.map +1 -1
  26. package/dist/config.js +6 -8
  27. package/dist/config.js.map +1 -1
  28. package/dist/constants.js +175 -26
  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 +300 -0
  39. package/dist/controls-options-manager/util.js.map +1 -0
  40. package/dist/index.js +77 -0
  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 +214 -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 +92 -2
  49. package/dist/locus-info/controlsUtils.js.map +1 -1
  50. package/dist/locus-info/index.js +317 -24
  51. package/dist/locus-info/index.js.map +1 -1
  52. package/dist/locus-info/mediaSharesUtils.js +43 -1
  53. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  54. package/dist/locus-info/parser.js +2 -1
  55. package/dist/locus-info/parser.js.map +1 -1
  56. package/dist/locus-info/selfUtils.js +97 -14
  57. package/dist/locus-info/selfUtils.js.map +1 -1
  58. package/dist/media/index.js +39 -134
  59. package/dist/media/index.js.map +1 -1
  60. package/dist/media/properties.js +19 -97
  61. package/dist/media/properties.js.map +1 -1
  62. package/dist/mediaQualityMetrics/config.js +505 -493
  63. package/dist/mediaQualityMetrics/config.js.map +1 -1
  64. package/dist/meeting/in-meeting-actions.js +79 -1
  65. package/dist/meeting/in-meeting-actions.js.map +1 -1
  66. package/dist/meeting/index.js +2349 -2178
  67. package/dist/meeting/index.js.map +1 -1
  68. package/dist/meeting/locusMediaRequest.js +291 -0
  69. package/dist/meeting/locusMediaRequest.js.map +1 -0
  70. package/dist/meeting/muteState.js +229 -124
  71. package/dist/meeting/muteState.js.map +1 -1
  72. package/dist/meeting/request.js +191 -167
  73. package/dist/meeting/request.js.map +1 -1
  74. package/dist/meeting/request.type.js.map +1 -1
  75. package/dist/meeting/util.js +444 -443
  76. package/dist/meeting/util.js.map +1 -1
  77. package/dist/meeting-info/meeting-info-v2.js +157 -49
  78. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  79. package/dist/meeting-info/utilv2.js +20 -5
  80. package/dist/meeting-info/utilv2.js.map +1 -1
  81. package/dist/meetings/collection.js +22 -0
  82. package/dist/meetings/collection.js.map +1 -1
  83. package/dist/meetings/index.js +365 -73
  84. package/dist/meetings/index.js.map +1 -1
  85. package/dist/meetings/meetings.types.js +7 -0
  86. package/dist/meetings/meetings.types.js.map +1 -0
  87. package/dist/meetings/request.js +16 -12
  88. package/dist/meetings/request.js.map +1 -1
  89. package/dist/meetings/util.js +88 -1
  90. package/dist/meetings/util.js.map +1 -1
  91. package/dist/member/index.js +43 -0
  92. package/dist/member/index.js.map +1 -1
  93. package/dist/member/types.js +15 -0
  94. package/dist/member/types.js.map +1 -0
  95. package/dist/member/util.js +97 -3
  96. package/dist/member/util.js.map +1 -1
  97. package/dist/members/collection.js +10 -0
  98. package/dist/members/collection.js.map +1 -1
  99. package/dist/members/index.js +94 -11
  100. package/dist/members/index.js.map +1 -1
  101. package/dist/members/request.js +109 -39
  102. package/dist/members/request.js.map +1 -1
  103. package/dist/members/types.js +15 -0
  104. package/dist/members/types.js.map +1 -0
  105. package/dist/members/util.js +316 -233
  106. package/dist/members/util.js.map +1 -1
  107. package/dist/metrics/config.js +50 -14
  108. package/dist/metrics/config.js.map +1 -1
  109. package/dist/metrics/constants.js +3 -5
  110. package/dist/metrics/constants.js.map +1 -1
  111. package/dist/metrics/index.js +48 -29
  112. package/dist/metrics/index.js.map +1 -1
  113. package/dist/multistream/mediaRequestManager.js +265 -36
  114. package/dist/multistream/mediaRequestManager.js.map +1 -1
  115. package/dist/multistream/receiveSlot.js +52 -19
  116. package/dist/multistream/receiveSlot.js.map +1 -1
  117. package/dist/multistream/receiveSlotManager.js +53 -33
  118. package/dist/multistream/receiveSlotManager.js.map +1 -1
  119. package/dist/multistream/remoteMedia.js +44 -18
  120. package/dist/multistream/remoteMedia.js.map +1 -1
  121. package/dist/multistream/remoteMediaGroup.js +60 -3
  122. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  123. package/dist/multistream/remoteMediaManager.js +322 -103
  124. package/dist/multistream/remoteMediaManager.js.map +1 -1
  125. package/dist/networkQualityMonitor/index.js +4 -2
  126. package/dist/networkQualityMonitor/index.js.map +1 -1
  127. package/dist/reachability/index.js +117 -60
  128. package/dist/reachability/index.js.map +1 -1
  129. package/dist/reachability/request.js +12 -5
  130. package/dist/reachability/request.js.map +1 -1
  131. package/dist/reactions/constants.js +13 -0
  132. package/dist/reactions/constants.js.map +1 -0
  133. package/dist/reactions/reactions.js +2 -2
  134. package/dist/reactions/reactions.js.map +1 -1
  135. package/dist/reactions/reactions.type.js +18 -18
  136. package/dist/reactions/reactions.type.js.map +1 -1
  137. package/dist/reconnection-manager/index.js +190 -145
  138. package/dist/reconnection-manager/index.js.map +1 -1
  139. package/dist/recording-controller/enums.js +17 -0
  140. package/dist/recording-controller/enums.js.map +1 -0
  141. package/dist/recording-controller/index.js +343 -0
  142. package/dist/recording-controller/index.js.map +1 -0
  143. package/dist/recording-controller/util.js +63 -0
  144. package/dist/recording-controller/util.js.map +1 -0
  145. package/dist/roap/index.js +21 -29
  146. package/dist/roap/index.js.map +1 -1
  147. package/dist/roap/request.js +127 -92
  148. package/dist/roap/request.js.map +1 -1
  149. package/dist/roap/turnDiscovery.js +135 -53
  150. package/dist/roap/turnDiscovery.js.map +1 -1
  151. package/dist/statsAnalyzer/global.js +1 -93
  152. package/dist/statsAnalyzer/global.js.map +1 -1
  153. package/dist/statsAnalyzer/index.js +329 -314
  154. package/dist/statsAnalyzer/index.js.map +1 -1
  155. package/dist/statsAnalyzer/mqaUtil.js +103 -54
  156. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  157. package/dist/types/annotation/annotation.types.d.ts +43 -0
  158. package/dist/types/annotation/constants.d.ts +31 -0
  159. package/dist/types/annotation/index.d.ts +124 -0
  160. package/dist/types/breakouts/breakout.d.ts +8 -0
  161. package/dist/types/breakouts/collection.d.ts +5 -0
  162. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  163. package/dist/types/breakouts/events.d.ts +2 -0
  164. package/dist/types/breakouts/index.d.ts +5 -0
  165. package/dist/types/breakouts/request.d.ts +22 -0
  166. package/dist/types/breakouts/utils.d.ts +15 -0
  167. package/dist/types/common/browser-detection.d.ts +9 -0
  168. package/dist/types/common/collection.d.ts +48 -0
  169. package/dist/types/common/config.d.ts +2 -0
  170. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  171. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  172. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  173. package/dist/types/common/errors/media.d.ts +15 -0
  174. package/dist/types/common/errors/parameter.d.ts +15 -0
  175. package/dist/types/common/errors/password-error.d.ts +15 -0
  176. package/dist/types/common/errors/permission.d.ts +14 -0
  177. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  178. package/dist/types/common/errors/reconnection.d.ts +15 -0
  179. package/dist/types/common/errors/stats.d.ts +15 -0
  180. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  181. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  182. package/dist/types/common/events/events-scope.d.ts +17 -0
  183. package/dist/types/common/events/events.d.ts +12 -0
  184. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  185. package/dist/types/common/events/util.d.ts +2 -0
  186. package/dist/types/common/logs/logger-config.d.ts +2 -0
  187. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  188. package/dist/types/common/logs/request.d.ts +34 -0
  189. package/dist/types/common/queue.d.ts +32 -0
  190. package/dist/types/config.d.ts +72 -0
  191. package/dist/types/constants.d.ts +987 -0
  192. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  193. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  194. package/dist/types/controls-options-manager/index.d.ts +136 -0
  195. package/dist/types/controls-options-manager/types.d.ts +43 -0
  196. package/dist/types/controls-options-manager/util.d.ts +1 -0
  197. package/dist/types/index.d.ts +7 -0
  198. package/dist/types/interpretation/collection.d.ts +5 -0
  199. package/dist/types/interpretation/index.d.ts +5 -0
  200. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  201. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  202. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  203. package/dist/types/locus-info/fullState.d.ts +2 -0
  204. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  205. package/dist/types/locus-info/index.d.ts +315 -0
  206. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  207. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  208. package/dist/types/locus-info/parser.d.ts +212 -0
  209. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  210. package/dist/types/media/index.d.ts +34 -0
  211. package/dist/types/media/properties.d.ts +86 -0
  212. package/dist/types/media/util.d.ts +2 -0
  213. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  214. package/dist/types/meeting/in-meeting-actions.d.ts +149 -0
  215. package/dist/types/meeting/index.d.ts +1524 -0
  216. package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
  217. package/dist/types/meeting/muteState.d.ts +184 -0
  218. package/dist/types/meeting/request.d.ts +270 -0
  219. package/dist/types/meeting/request.type.d.ts +11 -0
  220. package/dist/types/meeting/state.d.ts +9 -0
  221. package/dist/types/meeting/util.d.ts +75 -0
  222. package/dist/types/meeting-info/collection.d.ts +20 -0
  223. package/dist/types/meeting-info/index.d.ts +57 -0
  224. package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
  225. package/dist/types/meeting-info/request.d.ts +22 -0
  226. package/dist/types/meeting-info/util.d.ts +2 -0
  227. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  228. package/dist/types/meetings/collection.d.ts +31 -0
  229. package/dist/types/meetings/index.d.ts +364 -0
  230. package/dist/types/meetings/meetings.types.d.ts +4 -0
  231. package/dist/types/meetings/request.d.ts +27 -0
  232. package/dist/types/meetings/util.d.ts +18 -0
  233. package/dist/types/member/index.d.ts +158 -0
  234. package/dist/types/member/types.d.ts +21 -0
  235. package/dist/types/member/util.d.ts +2 -0
  236. package/dist/types/members/collection.d.ts +29 -0
  237. package/dist/types/members/index.d.ts +353 -0
  238. package/dist/types/members/request.d.ts +114 -0
  239. package/dist/types/members/types.d.ts +24 -0
  240. package/dist/types/members/util.d.ts +210 -0
  241. package/dist/types/metrics/config.d.ts +195 -0
  242. package/dist/types/metrics/constants.d.ts +55 -0
  243. package/dist/types/metrics/index.d.ts +169 -0
  244. package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
  245. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  246. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  247. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  248. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  249. package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
  250. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  251. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  252. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  253. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  254. package/dist/types/reachability/index.d.ts +152 -0
  255. package/dist/types/reachability/request.d.ts +37 -0
  256. package/dist/types/reactions/constants.d.ts +3 -0
  257. package/dist/types/reactions/reactions.d.ts +4 -0
  258. package/dist/types/reactions/reactions.type.d.ts +52 -0
  259. package/dist/types/reconnection-manager/index.d.ts +126 -0
  260. package/dist/types/recording-controller/enums.d.ts +7 -0
  261. package/dist/types/recording-controller/index.d.ts +193 -0
  262. package/dist/types/recording-controller/util.d.ts +13 -0
  263. package/dist/types/roap/index.d.ts +77 -0
  264. package/dist/types/roap/request.d.ts +36 -0
  265. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  266. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  267. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  268. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  269. package/dist/types/transcription/index.d.ts +64 -0
  270. package/package.json +28 -21
  271. package/src/annotation/annotation.types.ts +52 -0
  272. package/src/annotation/constants.ts +36 -0
  273. package/src/annotation/index.ts +343 -0
  274. package/src/breakouts/README.md +220 -0
  275. package/src/breakouts/breakout.ts +180 -0
  276. package/src/breakouts/collection.ts +19 -0
  277. package/src/breakouts/edit-lock-error.ts +25 -0
  278. package/src/breakouts/events.ts +37 -0
  279. package/src/breakouts/index.ts +921 -0
  280. package/src/breakouts/request.ts +55 -0
  281. package/src/breakouts/utils.ts +57 -0
  282. package/src/common/errors/webex-errors.ts +6 -2
  283. package/src/common/logs/logger-proxy.ts +1 -1
  284. package/src/config.ts +5 -7
  285. package/src/constants.ts +165 -20
  286. package/src/controls-options-manager/constants.ts +5 -0
  287. package/src/controls-options-manager/enums.ts +18 -0
  288. package/src/controls-options-manager/index.ts +278 -0
  289. package/src/controls-options-manager/types.ts +59 -0
  290. package/src/controls-options-manager/util.ts +286 -0
  291. package/src/index.ts +34 -0
  292. package/src/interpretation/README.md +51 -0
  293. package/src/interpretation/collection.ts +19 -0
  294. package/src/interpretation/index.ts +182 -0
  295. package/src/interpretation/siLanguage.ts +18 -0
  296. package/src/locus-info/controlsUtils.ts +110 -0
  297. package/src/locus-info/index.ts +339 -21
  298. package/src/locus-info/mediaSharesUtils.ts +48 -0
  299. package/src/locus-info/parser.ts +2 -1
  300. package/src/locus-info/selfUtils.ts +86 -2
  301. package/src/media/index.ts +70 -142
  302. package/src/media/properties.ts +41 -104
  303. package/src/mediaQualityMetrics/config.ts +379 -377
  304. package/src/meeting/in-meeting-actions.ts +156 -0
  305. package/src/meeting/index.ts +1779 -1741
  306. package/src/meeting/locusMediaRequest.ts +309 -0
  307. package/src/meeting/muteState.ts +228 -132
  308. package/src/meeting/request.ts +100 -91
  309. package/src/meeting/request.type.ts +2 -0
  310. package/src/meeting/util.ts +422 -421
  311. package/src/meeting-info/meeting-info-v2.ts +134 -13
  312. package/src/meeting-info/utilv2.ts +13 -3
  313. package/src/meetings/collection.ts +20 -0
  314. package/src/meetings/index.ts +385 -83
  315. package/src/meetings/meetings.types.ts +12 -0
  316. package/src/meetings/request.ts +3 -1
  317. package/src/meetings/util.ts +103 -4
  318. package/src/member/index.ts +42 -0
  319. package/src/member/types.ts +24 -0
  320. package/src/member/util.ts +95 -1
  321. package/src/members/collection.ts +8 -0
  322. package/src/members/index.ts +108 -6
  323. package/src/members/request.ts +98 -17
  324. package/src/members/types.ts +28 -0
  325. package/src/members/util.ts +319 -240
  326. package/src/metrics/config.ts +49 -10
  327. package/src/metrics/constants.ts +2 -4
  328. package/src/metrics/index.ts +43 -27
  329. package/src/multistream/mediaRequestManager.ts +337 -63
  330. package/src/multistream/receiveSlot.ts +68 -26
  331. package/src/multistream/receiveSlotManager.ts +61 -38
  332. package/src/multistream/remoteMedia.ts +29 -3
  333. package/src/multistream/remoteMediaGroup.ts +61 -2
  334. package/src/multistream/remoteMediaManager.ts +260 -66
  335. package/src/networkQualityMonitor/index.ts +6 -6
  336. package/src/reachability/index.ts +75 -25
  337. package/src/reachability/request.ts +10 -5
  338. package/src/reactions/constants.ts +4 -0
  339. package/src/reactions/reactions.ts +4 -4
  340. package/src/reactions/reactions.type.ts +28 -3
  341. package/src/reconnection-manager/index.ts +53 -32
  342. package/src/recording-controller/enums.ts +8 -0
  343. package/src/recording-controller/index.ts +315 -0
  344. package/src/recording-controller/util.ts +58 -0
  345. package/src/roap/index.ts +21 -30
  346. package/src/roap/request.ts +51 -52
  347. package/src/roap/turnDiscovery.ts +51 -27
  348. package/src/statsAnalyzer/global.ts +1 -94
  349. package/src/statsAnalyzer/index.ts +380 -390
  350. package/src/statsAnalyzer/mqaUtil.ts +106 -99
  351. package/test/integration/spec/converged-space-meetings.js +233 -0
  352. package/test/integration/spec/journey.js +331 -254
  353. package/test/integration/spec/space-meeting.js +77 -4
  354. package/test/unit/spec/annotation/index.ts +436 -0
  355. package/test/unit/spec/breakouts/breakout.ts +233 -0
  356. package/test/unit/spec/breakouts/collection.ts +15 -0
  357. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  358. package/test/unit/spec/breakouts/events.ts +77 -0
  359. package/test/unit/spec/breakouts/index.ts +1790 -0
  360. package/test/unit/spec/breakouts/request.ts +104 -0
  361. package/test/unit/spec/breakouts/utils.js +72 -0
  362. package/test/unit/spec/controls-options-manager/index.js +287 -0
  363. package/test/unit/spec/controls-options-manager/util.js +518 -0
  364. package/test/unit/spec/fixture/locus.js +1 -0
  365. package/test/unit/spec/interpretation/collection.ts +15 -0
  366. package/test/unit/spec/interpretation/index.ts +329 -0
  367. package/test/unit/spec/interpretation/siLanguage.ts +26 -0
  368. package/test/unit/spec/locus-info/controlsUtils.js +323 -30
  369. package/test/unit/spec/locus-info/index.js +680 -4
  370. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  371. package/test/unit/spec/locus-info/selfConstant.js +48 -0
  372. package/test/unit/spec/locus-info/selfUtils.js +275 -0
  373. package/test/unit/spec/media/index.ts +118 -22
  374. package/test/unit/spec/media/properties.ts +9 -9
  375. package/test/unit/spec/meeting/in-meeting-actions.ts +76 -0
  376. package/test/unit/spec/meeting/index.js +2695 -1513
  377. package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
  378. package/test/unit/spec/meeting/muteState.js +370 -208
  379. package/test/unit/spec/meeting/request.js +354 -42
  380. package/test/unit/spec/meeting/utils.js +270 -156
  381. package/test/unit/spec/meeting-info/meetinginfov2.js +383 -5
  382. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  383. package/test/unit/spec/meetings/collection.js +14 -0
  384. package/test/unit/spec/meetings/index.js +866 -120
  385. package/test/unit/spec/meetings/utils.js +206 -2
  386. package/test/unit/spec/member/index.js +31 -0
  387. package/test/unit/spec/member/util.js +408 -32
  388. package/test/unit/spec/members/index.js +320 -1
  389. package/test/unit/spec/members/request.js +206 -27
  390. package/test/unit/spec/members/utils.js +184 -0
  391. package/test/unit/spec/metrics/index.js +98 -0
  392. package/test/unit/spec/multistream/mediaRequestManager.ts +1012 -109
  393. package/test/unit/spec/multistream/receiveSlot.ts +77 -18
  394. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  395. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  396. package/test/unit/spec/multistream/remoteMediaGroup.ts +271 -5
  397. package/test/unit/spec/multistream/remoteMediaManager.ts +672 -65
  398. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  399. package/test/unit/spec/reachability/index.ts +176 -25
  400. package/test/unit/spec/reachability/request.js +66 -0
  401. package/test/unit/spec/reconnection-manager/index.js +46 -13
  402. package/test/unit/spec/recording-controller/index.js +231 -0
  403. package/test/unit/spec/recording-controller/util.js +102 -0
  404. package/test/unit/spec/roap/index.ts +21 -51
  405. package/test/unit/spec/roap/request.ts +187 -0
  406. package/test/unit/spec/roap/turnDiscovery.ts +73 -34
  407. package/test/unit/spec/stats-analyzer/index.js +94 -43
  408. package/test/utils/constants.js +9 -0
  409. package/test/utils/integrationTestUtils.js +46 -0
  410. package/test/utils/testUtils.js +0 -45
  411. package/test/utils/webex-config.js +4 -0
  412. package/test/utils/webex-test-users.js +7 -3
  413. package/tsconfig.json +6 -0
  414. package/dist/media/internal-media-core-wrapper.js +0 -18
  415. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  416. package/dist/meeting/effectsState.js +0 -262
  417. package/dist/meeting/effectsState.js.map +0 -1
  418. package/dist/multistream/multistreamMedia.js +0 -106
  419. package/dist/multistream/multistreamMedia.js.map +0 -1
  420. package/src/index.js +0 -15
  421. package/src/media/internal-media-core-wrapper.ts +0 -9
  422. package/src/meeting/effectsState.ts +0 -211
  423. package/src/multistream/multistreamMedia.ts +0 -93
  424. package/test/unit/spec/meeting/effectsState.js +0 -281
@@ -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"));
@@ -24,6 +32,7 @@ require("@webex/internal-plugin-mercury");
24
32
  require("@webex/internal-plugin-conversation");
25
33
  var _webexCore = require("@webex/webex-core");
26
34
  var _internalMediaCore = require("@webex/internal-media-core");
35
+ var mediaHelpersModule = _interopRequireWildcard(require("@webex/media-helpers"));
27
36
  require("webrtc-adapter");
28
37
  var _metrics = _interopRequireDefault(require("../metrics"));
29
38
  var _config = require("../metrics/config");
@@ -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,48 +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
+ }
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
+ }
265
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
- this.meetingCollection.getByKey(_constants.CORRELATION_ID, _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));
414
+ this.meetingCollection.getByKey(_constants.CORRELATION_ID,
415
+ // @ts-ignore
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);
272
438
 
273
439
  // Special case when locus has got replaced, This only happend once if a replace locus exists
274
440
  // https://sqbu-github.cisco.com/WebExSquared/locus/wiki/Locus-changing-mid-call
275
441
 
276
- 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) {
277
443
  // Always the last element in the replace is the active one
278
444
  meeting = this.meetingCollection.getByKey(_constants.LOCUS_URL, data.locus.replaces[data.locus.replaces.length - 1].locusUrl);
279
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
+ }
280
453
  if (!meeting) {
281
454
  // TODO: create meeting when we get a meeting object
282
455
  // const checkForEnded = (locus) => {
@@ -316,6 +489,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
316
489
 
317
490
  // It's a new meeting so initialize the locus data
318
491
  meeting.locusInfo.initialSetup(data.locus);
492
+ _this2.checkHandleBreakoutLocus(data.locus);
319
493
  }).catch(function (e) {
320
494
  _loggerProxy.default.logger.error(e);
321
495
  }).finally(function () {
@@ -447,7 +621,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
447
621
  // @ts-ignore
448
622
  _loggerProxy.default.set(_this4.webex.logger);
449
623
  mediaLogger = new MediaLogger();
450
- _internalMediaCore.MediaConnection.setLogger(mediaLogger);
624
+ (0, _internalMediaCore.setLogger)(mediaLogger);
451
625
 
452
626
  /**
453
627
  * The MeetingInfo object to interact with server
@@ -457,11 +631,17 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
457
631
  * @memberof Meetings
458
632
  */
459
633
  // @ts-ignore
460
- _this4.meetingInfo = _this4.config.experimental.enableUnifiedMeetings ? new _meetingInfoV.default(_this4.webex) : new _meetingInfo.default(_this4.webex);
634
+ _this4.meetingInfo = _this4.config.experimental.enableUnifiedMeetings ?
635
+ // @ts-ignore
636
+ new _meetingInfoV.default(_this4.webex) :
637
+ // @ts-ignore
638
+ new _meetingInfo.default(_this4.webex);
461
639
  // @ts-ignore
462
640
  _this4.personalMeetingRoom = new _personalMeetingRoom.default({
463
641
  meetingInfo: _this4.meetingInfo
464
- }, {
642
+ },
643
+ // @ts-ignore
644
+ {
465
645
  parent: _this4.webex
466
646
  });
467
647
  _triggerProxy.default.trigger(_this4, {
@@ -565,7 +745,8 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
565
745
  this.webex.internal.device.register()
566
746
  // @ts-ignore
567
747
  .then(function () {
568
- return _loggerProxy.default.logger.info("Meetings:index#register --> INFO, Device registered ".concat(_this5.webex.internal.device.url));
748
+ return _loggerProxy.default.logger.info( // @ts-ignore
749
+ "Meetings:index#register --> INFO, Device registered ".concat(_this5.webex.internal.device.url));
569
750
  })
570
751
  // @ts-ignore
571
752
  .then(function () {
@@ -605,21 +786,33 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
605
786
  return _promise.default.resolve();
606
787
  }
607
788
  this.stopListeningForEvents();
608
-
609
- // @ts-ignore
610
- return this.webex.internal.mercury.disconnect()
611
- // @ts-ignore
612
- .then(function () {
613
- return _this6.webex.internal.device.unregister();
614
- }).then(function () {
615
- _triggerProxy.default.trigger(_this6, {
616
- file: 'meetings',
617
- function: 'unregister'
618
- }, _constants.EVENT_TRIGGERS.MEETINGS_UNREGISTERED);
619
- _this6.registered = false;
620
- });
789
+ return (
790
+ // @ts-ignore
791
+ this.webex.internal.mercury.disconnect()
792
+ // @ts-ignore
793
+ .then(function () {
794
+ return _this6.webex.internal.device.unregister();
795
+ }).then(function () {
796
+ _triggerProxy.default.trigger(_this6, {
797
+ file: 'meetings',
798
+ function: 'unregister'
799
+ }, _constants.EVENT_TRIGGERS.MEETINGS_UNREGISTERED);
800
+ _this6.registered = false;
801
+ })
802
+ );
621
803
  }
622
804
 
805
+ /**
806
+ * Creates a noise reduction effect
807
+ *
808
+ * @param {INoiseReductionEffect} options optional custom effect options
809
+ * @returns {Promise<effect>} noise reduction effect.
810
+ * @public
811
+ * @memberof Meetings
812
+ */
813
+ }, {
814
+ key: "uploadLogs",
815
+ value:
623
816
  /**
624
817
  * Uploads logs to the webex services for tracking
625
818
  * @param {Object} [options={}]
@@ -632,9 +825,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
632
825
  * @param {String} [options.orgId] org id
633
826
  * @returns {String} feedback ID logs were submitted under
634
827
  */
635
- }, {
636
- key: "uploadLogs",
637
- value: function uploadLogs() {
828
+ function uploadLogs() {
638
829
  var _this7 = this;
639
830
  var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
640
831
  _loggerProxy.default.logger.info('Meetings:index#uploadLogs --> uploading logs');
@@ -737,6 +928,23 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
737
928
  if (res) {
738
929
  _this9.preferredWebexSite = _util2.default.parseDefaultSiteFromMeetingPreferences(res);
739
930
  }
931
+
932
+ // fall back to getting the preferred site from the user information
933
+ if (!_this9.preferredWebexSite) {
934
+ // @ts-ignore
935
+ return _this9.webex.internal.user.get().then(function (user) {
936
+ var _user$userPreferences, _user$userPreferences2;
937
+ 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;
938
+ if (preferredWebexSite) {
939
+ _this9.preferredWebexSite = preferredWebexSite;
940
+ } else {
941
+ throw new Error('site not found');
942
+ }
943
+ }).catch(function () {
944
+ _loggerProxy.default.logger.error('Failed to fetch preferred site from user - no site will be set');
945
+ });
946
+ }
947
+ return _promise.default.resolve();
740
948
  });
741
949
  }
742
950
 
@@ -779,6 +987,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
779
987
  * @param {string} destination - sipURL, spaceId, phonenumber, or locus object}
780
988
  * @param {string} [type] - the optional specified type, such as locusId
781
989
  * @param {Boolean} useRandomDelayForInfo - whether a random delay should be added to fetching meeting info
990
+ * @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info
782
991
  * @returns {Promise<Meeting>} A new Meeting.
783
992
  * @public
784
993
  * @memberof Meetings
@@ -789,6 +998,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
789
998
  var _this10 = this;
790
999
  var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
791
1000
  var useRandomDelayForInfo = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
1001
+ var infoExtraParams = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
792
1002
  // TODO: type should be from a dictionary
793
1003
 
794
1004
  // Validate meeting information based on the provided destination and
@@ -827,7 +1037,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
827
1037
  // Validate if a meeting was found.
828
1038
  if (!meeting) {
829
1039
  // Create a meeting based on the normalized destination and type.
830
- return _this10.createMeeting(targetDest, type, useRandomDelayForInfo).then(function (createdMeeting) {
1040
+ return _this10.createMeeting(targetDest, type, useRandomDelayForInfo, infoExtraParams).then(function (createdMeeting) {
831
1041
  // If the meeting was successfully created.
832
1042
  if (createdMeeting && createdMeeting.on) {
833
1043
  // Create a destruction event for the meeting.
@@ -879,6 +1089,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
879
1089
  * @param {String} destination see create()
880
1090
  * @param {String} type see create()
881
1091
  * @param {Boolean} useRandomDelayForInfo whether a random delay should be added to fetching meeting info
1092
+ * @param {Object} infoExtraParams extra parameters to be provided when fetching meeting info
882
1093
  * @returns {Promise} a new meeting instance complete with meeting info and destination
883
1094
  * @private
884
1095
  * @memberof Meetings
@@ -886,9 +1097,10 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
886
1097
  }, {
887
1098
  key: "createMeeting",
888
1099
  value: function () {
889
- var _createMeeting = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(destination) {
1100
+ var _createMeeting = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(destination) {
890
1101
  var type,
891
1102
  useRandomDelayForInfo,
1103
+ infoExtraParams,
892
1104
  meeting,
893
1105
  _destination$fullStat,
894
1106
  waitingTime,
@@ -900,12 +1112,13 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
900
1112
  isMeetingActive,
901
1113
  enableUnifiedMeetings,
902
1114
  meetingAddedType,
903
- _args = arguments;
904
- return _regenerator.default.wrap(function _callee$(_context) {
905
- while (1) switch (_context.prev = _context.next) {
1115
+ _args3 = arguments;
1116
+ return _regenerator.default.wrap(function _callee3$(_context3) {
1117
+ while (1) switch (_context3.prev = _context3.next) {
906
1118
  case 0:
907
- type = _args.length > 1 && _args[1] !== undefined ? _args[1] : null;
908
- useRandomDelayForInfo = _args.length > 2 && _args[2] !== undefined ? _args[2] : false;
1119
+ type = _args3.length > 1 && _args3[1] !== undefined ? _args3[1] : null;
1120
+ useRandomDelayForInfo = _args3.length > 2 && _args3[2] !== undefined ? _args3[2] : false;
1121
+ infoExtraParams = _args3.length > 3 && _args3[3] !== undefined ? _args3[3] : {};
909
1122
  meeting = new _meeting.default({
910
1123
  // @ts-ignore
911
1124
  userId: this.webex.internal.device.userId,
@@ -923,7 +1136,7 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
923
1136
  parent: this.webex
924
1137
  });
925
1138
  this.meetingCollection.set(meeting);
926
- _context.prev = 4;
1139
+ _context3.prev = 5;
927
1140
  // if no participant has joined the scheduled meeting (meaning meeting is not active) and we get a locusEvent,
928
1141
  // it means the meeting will start in 5-6 min. In that case, we want to fetchMeetingInfo
929
1142
  // between 5 and 2 min (random between 3 minutes) before the meeting starts
@@ -940,32 +1153,36 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
940
1153
  isMeetingActive = !!((_destination$fullStat = destination.fullState) !== null && _destination$fullStat !== void 0 && _destination$fullStat.active); // @ts-ignore
941
1154
  enableUnifiedMeetings = this.config.experimental.enableUnifiedMeetings;
942
1155
  if (!(enableUnifiedMeetings && !isMeetingActive && useRandomDelayForInfo && waitingTime > 0)) {
943
- _context.next = 14;
1156
+ _context3.next = 15;
944
1157
  break;
945
1158
  }
946
1159
  meeting.fetchMeetingInfoTimeoutId = setTimeout(function () {
947
- return meeting.fetchMeetingInfo({});
1160
+ return meeting.fetchMeetingInfo({
1161
+ extraParams: infoExtraParams
1162
+ });
948
1163
  }, waitingTime);
949
1164
  meeting.parseMeetingInfo(undefined, destination);
950
- _context.next = 16;
1165
+ _context3.next = 17;
951
1166
  break;
952
- case 14:
953
- _context.next = 16;
954
- return meeting.fetchMeetingInfo({});
955
- case 16:
956
- _context.next = 22;
1167
+ case 15:
1168
+ _context3.next = 17;
1169
+ return meeting.fetchMeetingInfo({
1170
+ extraParams: infoExtraParams
1171
+ });
1172
+ case 17:
1173
+ _context3.next = 23;
957
1174
  break;
958
- case 18:
959
- _context.prev = 18;
960
- _context.t0 = _context["catch"](4);
961
- if (!(_context.t0 instanceof _captchaError.default) && !(_context.t0 instanceof _passwordError.default)) {
1175
+ case 19:
1176
+ _context3.prev = 19;
1177
+ _context3.t0 = _context3["catch"](5);
1178
+ if (!(_context3.t0 instanceof _captchaError.default) && !(_context3.t0 instanceof _passwordError.default) && !(_context3.t0 instanceof _permission.default)) {
962
1179
  // if there is no meeting info we assume its a 1:1 call or wireless share
963
1180
  _loggerProxy.default.logger.info("Meetings:index#createMeeting --> Info Unable to fetch meeting info for ".concat(destination, "."));
964
1181
  _loggerProxy.default.logger.info('Meetings:index#createMeeting --> Info assuming this destination is a 1:1 or wireless share');
965
1182
  }
966
- _loggerProxy.default.logger.debug("Meetings:index#createMeeting --> Debug ".concat(_context.t0, " fetching /meetingInfo for creation."));
967
- case 22:
968
- _context.prev = 22;
1183
+ _loggerProxy.default.logger.debug("Meetings:index#createMeeting --> Debug ".concat(_context3.t0, " fetching /meetingInfo for creation."));
1184
+ case 23:
1185
+ _context3.prev = 23;
969
1186
  // For type LOCUS_ID we need to parse the locus object to get the information
970
1187
  // about the caller and callee
971
1188
  // Meeting Added event will be created in `handleLocusEvent`
@@ -985,16 +1202,16 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
985
1202
  type: meetingAddedType
986
1203
  });
987
1204
  }
988
- return _context.finish(22);
989
- case 25:
990
- return _context.abrupt("return", meeting);
1205
+ return _context3.finish(23);
991
1206
  case 26:
1207
+ return _context3.abrupt("return", meeting);
1208
+ case 27:
992
1209
  case "end":
993
- return _context.stop();
1210
+ return _context3.stop();
994
1211
  }
995
- }, _callee, this, [[4, 18, 22, 25]]);
1212
+ }, _callee3, this, [[5, 19, 23, 26]]);
996
1213
  }));
997
- function createMeeting(_x) {
1214
+ function createMeeting(_x3) {
998
1215
  return _createMeeting.apply(this, arguments);
999
1216
  }
1000
1217
  return createMeeting;
@@ -1044,7 +1261,8 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1044
1261
  return this.request.getActiveMeetings().then(function (locusArray) {
1045
1262
  var activeLocusUrl = [];
1046
1263
  if (locusArray !== null && locusArray !== void 0 && locusArray.loci && locusArray.loci.length > 0) {
1047
- locusArray.loci.forEach(function (locus) {
1264
+ var lociToUpdate = _this11.sortLocusArrayToUpdate(locusArray.loci);
1265
+ lociToUpdate.forEach(function (locus) {
1048
1266
  activeLocusUrl.push(locus.url);
1049
1267
  _this11.handleLocusEvent({
1050
1268
  locus: locus,
@@ -1066,7 +1284,81 @@ var Meetings = /*#__PURE__*/function (_WebexPlugin) {
1066
1284
  }
1067
1285
  }
1068
1286
  }
1287
+ }).catch(function (error) {
1288
+ _loggerProxy.default.logger.error("Meetings:index#syncMeetings --> failed to sync meetings, ".concat(error));
1289
+ throw new Error(error);
1290
+ });
1291
+ }
1292
+
1293
+ /**
1294
+ * sort out locus array for initial creating
1295
+ * @param {Array} loci original locus array
1296
+ * @returns {undefined}
1297
+ * @public
1298
+ * @memberof Meetings
1299
+ */
1300
+ }, {
1301
+ key: "sortLocusArrayToUpdate",
1302
+ value: function sortLocusArrayToUpdate(loci) {
1303
+ var _this12 = this;
1304
+ var mainLoci = loci.filter(function (locus) {
1305
+ return !_util2.default.isBreakoutLocusDTO(locus);
1306
+ });
1307
+ var breakoutLoci = loci.filter(function (locus) {
1308
+ return _util2.default.isValidBreakoutLocus(locus);
1309
+ });
1310
+ this.breakoutLocusForHandleLater = [];
1311
+ var lociToUpdate = (0, _toConsumableArray2.default)(mainLoci);
1312
+ breakoutLoci.forEach(function (breakoutLocus) {
1313
+ var associateMainLocus = mainLoci.find(function (mainLocus) {
1314
+ var _mainLocus$controls, _mainLocus$controls$b, _breakoutLocus$contro, _breakoutLocus$contro2;
1315
+ 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);
1316
+ });
1317
+ var existCorrespondingMeeting = _this12.getCorrespondingMeetingByLocus({
1318
+ locus: breakoutLocus,
1319
+ locusUrl: breakoutLocus.url
1320
+ });
1321
+ if (associateMainLocus && !existCorrespondingMeeting) {
1322
+ // if exists both main session and breakout session locus of the same non-exist meeting, handle main locus first,
1323
+ // after meeting create with main locus, then handle the associate breakout locus.
1324
+ // if only handle breakout locus, will miss some date
1325
+ _this12.breakoutLocusForHandleLater.push(breakoutLocus);
1326
+ } else {
1327
+ lociToUpdate.push(breakoutLocus);
1328
+ }
1329
+ });
1330
+ return lociToUpdate;
1331
+ }
1332
+
1333
+ /**
1334
+ * check breakout locus which waiting for main locus's meeting to be created, then handle the breakout locus
1335
+ * @param {Object} newCreatedLocus the locus which just create meeting object of it
1336
+ * @returns {undefined}
1337
+ * @public
1338
+ * @memberof Meetings
1339
+ */
1340
+ }, {
1341
+ key: "checkHandleBreakoutLocus",
1342
+ value: function checkHandleBreakoutLocus(newCreatedLocus) {
1343
+ if (!newCreatedLocus || !this.breakoutLocusForHandleLater || !this.breakoutLocusForHandleLater.length) {
1344
+ return;
1345
+ }
1346
+ if (_util2.default.isBreakoutLocusDTO(newCreatedLocus)) {
1347
+ return;
1348
+ }
1349
+ var existIndex = this.breakoutLocusForHandleLater.findIndex(function (breakoutLocus) {
1350
+ var _breakoutLocus$contro3, _breakoutLocus$contro4, _newCreatedLocus$cont, _newCreatedLocus$cont2;
1351
+ 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);
1352
+ });
1353
+ if (existIndex < 0) {
1354
+ return;
1355
+ }
1356
+ var associateBreakoutLocus = this.breakoutLocusForHandleLater[existIndex];
1357
+ this.handleLocusEvent({
1358
+ locus: associateBreakoutLocus,
1359
+ locusUrl: associateBreakoutLocus.url
1069
1360
  });
1361
+ this.breakoutLocusForHandleLater.splice(existIndex, 1);
1070
1362
  }
1071
1363
 
1072
1364
  /**