@webex/plugin-meetings 3.0.0-beta.23 → 3.0.0-beta.231

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