@webex/plugin-meetings 3.0.0-beta.17 → 3.0.0-beta.170

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 (427) 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 +216 -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 +45 -0
  15. package/dist/breakouts/events.js.map +1 -0
  16. package/dist/breakouts/index.js +1048 -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 +194 -28
  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 +95 -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 +350 -41
  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 +76 -2
  65. package/dist/meeting/in-meeting-actions.js.map +1 -1
  66. package/dist/meeting/index.js +2640 -2436
  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 +477 -466
  76. package/dist/meeting/util.js.map +1 -1
  77. package/dist/meeting-info/index.js +48 -7
  78. package/dist/meeting-info/index.js.map +1 -1
  79. package/dist/meeting-info/meeting-info-v2.js +172 -50
  80. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  81. package/dist/meeting-info/utilv2.js +20 -5
  82. package/dist/meeting-info/utilv2.js.map +1 -1
  83. package/dist/meetings/collection.js +22 -0
  84. package/dist/meetings/collection.js.map +1 -1
  85. package/dist/meetings/index.js +377 -82
  86. package/dist/meetings/index.js.map +1 -1
  87. package/dist/meetings/meetings.types.js +7 -0
  88. package/dist/meetings/meetings.types.js.map +1 -0
  89. package/dist/meetings/request.js +16 -12
  90. package/dist/meetings/request.js.map +1 -1
  91. package/dist/meetings/util.js +88 -1
  92. package/dist/meetings/util.js.map +1 -1
  93. package/dist/member/index.js +43 -0
  94. package/dist/member/index.js.map +1 -1
  95. package/dist/member/types.js +15 -0
  96. package/dist/member/types.js.map +1 -0
  97. package/dist/member/util.js +97 -3
  98. package/dist/member/util.js.map +1 -1
  99. package/dist/members/collection.js +10 -0
  100. package/dist/members/collection.js.map +1 -1
  101. package/dist/members/index.js +94 -11
  102. package/dist/members/index.js.map +1 -1
  103. package/dist/members/request.js +109 -39
  104. package/dist/members/request.js.map +1 -1
  105. package/dist/members/types.js +15 -0
  106. package/dist/members/types.js.map +1 -0
  107. package/dist/members/util.js +316 -233
  108. package/dist/members/util.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 +1 -468
  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 +217 -162
  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 +363 -0
  142. package/dist/recording-controller/index.js.map +1 -0
  143. package/dist/recording-controller/util.js +64 -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 +135 -94
  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 +8 -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 +1007 -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 +1430 -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 +77 -0
  222. package/dist/types/meeting-info/collection.d.ts +20 -0
  223. package/dist/types/meeting-info/index.d.ts +62 -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 +365 -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/constants.d.ts +55 -0
  242. package/dist/types/metrics/index.d.ts +45 -0
  243. package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
  244. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  245. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  246. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  247. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  248. package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
  249. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  250. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  251. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  252. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  253. package/dist/types/reachability/index.d.ts +152 -0
  254. package/dist/types/reachability/request.d.ts +37 -0
  255. package/dist/types/reactions/constants.d.ts +3 -0
  256. package/dist/types/reactions/reactions.d.ts +4 -0
  257. package/dist/types/reactions/reactions.type.d.ts +52 -0
  258. package/dist/types/reconnection-manager/index.d.ts +126 -0
  259. package/dist/types/recording-controller/enums.d.ts +7 -0
  260. package/dist/types/recording-controller/index.d.ts +208 -0
  261. package/dist/types/recording-controller/util.d.ts +14 -0
  262. package/dist/types/roap/index.d.ts +77 -0
  263. package/dist/types/roap/request.d.ts +36 -0
  264. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  265. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  266. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  267. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  268. package/dist/types/transcription/index.d.ts +64 -0
  269. package/package.json +29 -21
  270. package/src/annotation/annotation.types.ts +52 -0
  271. package/src/annotation/constants.ts +36 -0
  272. package/src/annotation/index.ts +343 -0
  273. package/src/breakouts/README.md +220 -0
  274. package/src/breakouts/breakout.ts +188 -0
  275. package/src/breakouts/collection.ts +19 -0
  276. package/src/breakouts/edit-lock-error.ts +25 -0
  277. package/src/breakouts/events.ts +56 -0
  278. package/src/breakouts/index.ts +925 -0
  279. package/src/breakouts/request.ts +55 -0
  280. package/src/breakouts/utils.ts +57 -0
  281. package/src/common/errors/webex-errors.ts +6 -2
  282. package/src/common/logs/logger-proxy.ts +1 -1
  283. package/src/config.ts +5 -7
  284. package/src/constants.ts +183 -22
  285. package/src/controls-options-manager/constants.ts +5 -0
  286. package/src/controls-options-manager/enums.ts +18 -0
  287. package/src/controls-options-manager/index.ts +278 -0
  288. package/src/controls-options-manager/types.ts +59 -0
  289. package/src/controls-options-manager/util.ts +286 -0
  290. package/src/index.ts +37 -0
  291. package/src/interpretation/README.md +51 -0
  292. package/src/interpretation/collection.ts +19 -0
  293. package/src/interpretation/index.ts +182 -0
  294. package/src/interpretation/siLanguage.ts +18 -0
  295. package/src/locus-info/controlsUtils.ts +110 -0
  296. package/src/locus-info/index.ts +374 -38
  297. package/src/locus-info/mediaSharesUtils.ts +48 -0
  298. package/src/locus-info/parser.ts +2 -1
  299. package/src/locus-info/selfUtils.ts +86 -2
  300. package/src/media/index.ts +70 -142
  301. package/src/media/properties.ts +41 -104
  302. package/src/mediaQualityMetrics/config.ts +379 -377
  303. package/src/meeting/in-meeting-actions.ts +151 -3
  304. package/src/meeting/index.ts +2029 -2033
  305. package/src/meeting/locusMediaRequest.ts +309 -0
  306. package/src/meeting/muteState.ts +228 -132
  307. package/src/meeting/request.ts +100 -91
  308. package/src/meeting/request.type.ts +2 -0
  309. package/src/meeting/util.ts +450 -439
  310. package/src/meeting-info/index.ts +54 -8
  311. package/src/meeting-info/meeting-info-v2.ts +150 -14
  312. package/src/meeting-info/utilv2.ts +13 -3
  313. package/src/meetings/collection.ts +20 -0
  314. package/src/meetings/index.ts +396 -89
  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/constants.ts +2 -4
  327. package/src/metrics/index.ts +1 -490
  328. package/src/multistream/mediaRequestManager.ts +337 -63
  329. package/src/multistream/receiveSlot.ts +68 -26
  330. package/src/multistream/receiveSlotManager.ts +61 -38
  331. package/src/multistream/remoteMedia.ts +29 -3
  332. package/src/multistream/remoteMediaGroup.ts +61 -2
  333. package/src/multistream/remoteMediaManager.ts +260 -66
  334. package/src/networkQualityMonitor/index.ts +6 -6
  335. package/src/reachability/index.ts +75 -25
  336. package/src/reachability/request.ts +10 -5
  337. package/src/reactions/constants.ts +4 -0
  338. package/src/reactions/reactions.ts +4 -4
  339. package/src/reactions/reactions.type.ts +28 -3
  340. package/src/reconnection-manager/index.ts +80 -49
  341. package/src/recording-controller/enums.ts +8 -0
  342. package/src/recording-controller/index.ts +333 -0
  343. package/src/recording-controller/util.ts +75 -0
  344. package/src/roap/index.ts +21 -30
  345. package/src/roap/request.ts +72 -61
  346. package/src/roap/turnDiscovery.ts +51 -27
  347. package/src/statsAnalyzer/global.ts +1 -94
  348. package/src/statsAnalyzer/index.ts +380 -390
  349. package/src/statsAnalyzer/mqaUtil.ts +106 -99
  350. package/test/integration/spec/converged-space-meetings.js +233 -0
  351. package/test/integration/spec/journey.js +331 -254
  352. package/test/integration/spec/space-meeting.js +77 -4
  353. package/test/unit/spec/annotation/index.ts +436 -0
  354. package/test/unit/spec/breakouts/breakout.ts +237 -0
  355. package/test/unit/spec/breakouts/collection.ts +15 -0
  356. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  357. package/test/unit/spec/breakouts/events.ts +89 -0
  358. package/test/unit/spec/breakouts/index.ts +1790 -0
  359. package/test/unit/spec/breakouts/request.ts +104 -0
  360. package/test/unit/spec/breakouts/utils.js +72 -0
  361. package/test/unit/spec/controls-options-manager/index.js +287 -0
  362. package/test/unit/spec/controls-options-manager/util.js +518 -0
  363. package/test/unit/spec/fixture/locus.js +1 -0
  364. package/test/unit/spec/interpretation/collection.ts +15 -0
  365. package/test/unit/spec/interpretation/index.ts +329 -0
  366. package/test/unit/spec/interpretation/siLanguage.ts +26 -0
  367. package/test/unit/spec/locus-info/controlsUtils.js +323 -30
  368. package/test/unit/spec/locus-info/index.js +792 -4
  369. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  370. package/test/unit/spec/locus-info/selfConstant.js +48 -0
  371. package/test/unit/spec/locus-info/selfUtils.js +275 -0
  372. package/test/unit/spec/media/index.ts +118 -22
  373. package/test/unit/spec/media/properties.ts +9 -9
  374. package/test/unit/spec/meeting/in-meeting-actions.ts +75 -3
  375. package/test/unit/spec/meeting/index.js +2742 -1441
  376. package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
  377. package/test/unit/spec/meeting/muteState.js +370 -208
  378. package/test/unit/spec/meeting/request.js +354 -42
  379. package/test/unit/spec/meeting/utils.js +384 -170
  380. package/test/unit/spec/meeting-info/index.js +181 -0
  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 +847 -121
  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 +1 -50
  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 +95 -13
  402. package/test/unit/spec/recording-controller/index.js +307 -0
  403. package/test/unit/spec/recording-controller/util.js +229 -0
  404. package/test/unit/spec/roap/index.ts +28 -52
  405. package/test/unit/spec/roap/request.ts +225 -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/metrics/config.js +0 -299
  419. package/dist/metrics/config.js.map +0 -1
  420. package/dist/multistream/multistreamMedia.js +0 -106
  421. package/dist/multistream/multistreamMedia.js.map +0 -1
  422. package/src/index.js +0 -15
  423. package/src/media/internal-media-core-wrapper.ts +0 -9
  424. package/src/meeting/effectsState.ts +0 -211
  425. package/src/metrics/config.ts +0 -495
  426. package/src/multistream/multistreamMedia.ts +0 -93
  427. package/test/unit/spec/meeting/effectsState.js +0 -281
@@ -70,10 +70,22 @@ export default class MeetingInfo {
70
70
  * @private
71
71
  * @memberof MeetingInfo
72
72
  */
73
- private requestFetchInfo(options: object) {
73
+ private requestFetchInfo(options: any) {
74
+ const {meetingId} = options;
75
+ if (meetingId) {
76
+ this.webex.internal.newMetrics.submitInternalEvent({
77
+ name: 'internal.client.meetinginfo.request',
78
+ });
79
+ }
80
+
74
81
  return this.meetingInfoRequest
75
82
  .fetchMeetingInfo(options)
76
83
  .then((info) => {
84
+ if (meetingId) {
85
+ this.webex.internal.newMetrics.submitInternalEvent({
86
+ name: 'internal.client.meetinginfo.response',
87
+ });
88
+ }
77
89
  if (info && info.body) {
78
90
  this.setMeetingInfo(info.body.sipMeetingUri || info.body.meetingLink, info.body);
79
91
  }
@@ -84,6 +96,21 @@ export default class MeetingInfo {
84
96
  LoggerProxy.logger.error(
85
97
  `Meeting-info:index#requestFetchInfo --> ${error} fetch meetingInfo`
86
98
  );
99
+ this.webex.internal.newMetrics.submitInternalEvent({
100
+ name: 'internal.client.meetinginfo.response',
101
+ });
102
+ this.webex.internal.newMetrics.submitClientEvent({
103
+ name: 'client.meetinginfo.response',
104
+ payload: {
105
+ identifiers: {
106
+ meetingLookupUrl: error?.url,
107
+ },
108
+ },
109
+ options: {
110
+ meetingId,
111
+ rawError: error,
112
+ },
113
+ });
87
114
 
88
115
  return Promise.reject(error);
89
116
  });
@@ -105,6 +132,7 @@ export default class MeetingInfo {
105
132
  });
106
133
  }
107
134
 
135
+ // eslint-disable-next-line valid-jsdoc
108
136
  /**
109
137
  * Fetches meeting info from the server
110
138
  * @param {String} destination one of many different types of destinations to look up info for
@@ -113,21 +141,39 @@ export default class MeetingInfo {
113
141
  * @public
114
142
  * @memberof MeetingInfo
115
143
  */
116
- public fetchMeetingInfo(destination: string, type: string = null) {
144
+ public fetchMeetingInfo(
145
+ destination: string,
146
+ type: string = null,
147
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
148
+ password: string = null,
149
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
150
+ captchaInfo: {
151
+ code: string;
152
+ id: string;
153
+ } = null,
154
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
155
+ installedOrgID = null,
156
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
157
+ locusId = null,
158
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
159
+ extraParams: object = {},
160
+ options: {meetingId?: string} = {}
161
+ ) {
117
162
  if (type === _PERSONAL_ROOM_ && !destination) {
118
163
  destination = this.webex.internal.device.userId;
119
164
  }
120
165
 
121
166
  return this.fetchInfoOptions(MeetingInfoUtil.extractDestination(destination, type), type).then(
122
- (options) =>
167
+ (infoOptions) =>
123
168
  // fetch meeting info
124
- this.requestFetchInfo(options).catch((error) => {
169
+ this.requestFetchInfo({...infoOptions, meetingId: options.meetingId}).catch((error) => {
125
170
  // if it failed the first time as meeting link
126
- if (options.type === _MEETING_LINK_) {
171
+ if (infoOptions.type === _MEETING_LINK_) {
127
172
  // convert the meeting link to sip URI and retry
128
- return this.requestFetchInfo(
129
- this.fetchInfoOptions(MeetingInfoUtil.convertLinkToSip(destination), _SIP_URI_)
130
- );
173
+ return this.requestFetchInfo({
174
+ ...this.fetchInfoOptions(MeetingInfoUtil.convertLinkToSip(destination), _SIP_URI_),
175
+ meetingId: options.meetingId,
176
+ });
131
177
  }
132
178
 
133
179
  return Promise.reject(error);
@@ -1,4 +1,10 @@
1
- import {HTTP_VERBS, _CONVERSATION_URL_, WBXAPPAPI_SERVICE} from '../constants';
1
+ import lodash from 'lodash';
2
+ import {
3
+ HTTP_VERBS,
4
+ _CONVERSATION_URL_,
5
+ WBXAPPAPI_SERVICE,
6
+ DEFAULT_MEETING_INFO_REQUEST_BODY,
7
+ } from '../constants';
2
8
  import Metrics from '../metrics';
3
9
  import BEHAVIORAL_METRICS from '../metrics/constants';
4
10
 
@@ -11,7 +17,7 @@ const CAPTCHA_ERROR_DEFAULT_MESSAGE =
11
17
  const ADHOC_MEETING_DEFAULT_ERROR =
12
18
  'Failed starting the adhoc meeting, Please contact support team ';
13
19
  const CAPTCHA_ERROR_REQUIRES_PASSWORD_CODES = [423005, 423006];
14
-
20
+ const POLICY_ERROR_CODES = [403049, 403104, 403103, 403048, 403102, 403101];
15
21
  /**
16
22
  * Error to indicate that wbxappapi requires a password
17
23
  */
@@ -19,6 +25,7 @@ export class MeetingInfoV2PasswordError extends Error {
19
25
  meetingInfo: any;
20
26
  sdkMessage: any;
21
27
  wbxAppApiCode: any;
28
+ body: any;
22
29
 
23
30
  /**
24
31
  *
@@ -62,6 +69,30 @@ export class MeetingInfoV2AdhocMeetingError extends Error {
62
69
  }
63
70
  }
64
71
 
72
+ /**
73
+ * Error preventing join because of a meeting policy
74
+ */
75
+ export class MeetingInfoV2PolicyError extends Error {
76
+ meetingInfo: object;
77
+ sdkMessage: string;
78
+ wbxAppApiCode: number;
79
+ /**
80
+ *
81
+ * @constructor
82
+ * @param {Number} [wbxAppApiErrorCode]
83
+ * @param {Object} [meetingInfo]
84
+ * @param {String} [message]
85
+ */
86
+ constructor(wbxAppApiErrorCode?: number, meetingInfo?: object, message?: string) {
87
+ super(`${message}, code=${wbxAppApiErrorCode}`);
88
+ this.name = 'MeetingInfoV2AdhocMeetingError';
89
+ this.sdkMessage = message;
90
+ this.stack = new Error().stack;
91
+ this.wbxAppApiCode = wbxAppApiErrorCode;
92
+ this.meetingInfo = meetingInfo;
93
+ }
94
+ }
95
+
65
96
  /**
66
97
  * Error to indicate that preferred webex site not present to start adhoc meeting
67
98
  */
@@ -70,6 +101,7 @@ export class MeetingInfoV2CaptchaError extends Error {
70
101
  isPasswordRequired: any;
71
102
  sdkMessage: any;
72
103
  wbxAppApiCode: any;
104
+ body: any;
73
105
  /**
74
106
  *
75
107
  * @constructor
@@ -122,14 +154,38 @@ export default class MeetingInfoV2 {
122
154
  });
123
155
  }
124
156
 
157
+ /**
158
+ * Raises a MeetingInfoV2PolicyError for policy error codes
159
+ * @param {any} err the error from the request
160
+ * @returns {void}
161
+ */
162
+ handlePolicyError = (err) => {
163
+ if (!err.body) {
164
+ return;
165
+ }
166
+
167
+ if (POLICY_ERROR_CODES.includes(err.body?.code)) {
168
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.MEETING_INFO_POLICY_ERROR, {
169
+ code: err.body?.code,
170
+ });
171
+
172
+ throw new MeetingInfoV2PolicyError(
173
+ err.body?.code,
174
+ err.body?.data?.meetingInfo,
175
+ err.body?.message
176
+ );
177
+ }
178
+ };
179
+
125
180
  /**
126
181
  * Creates adhoc space meetings for a space by fetching the conversation infomation
127
182
  * @param {String} conversationUrl conversationUrl to start adhoc meeting on
183
+ * @param {String} installedOrgID org ID of user's machine
128
184
  * @returns {Promise} returns a meeting info object
129
185
  * @public
130
186
  * @memberof MeetingInfo
131
187
  */
132
- async createAdhocSpaceMeeting(conversationUrl: string) {
188
+ async createAdhocSpaceMeeting(conversationUrl: string, installedOrgID?: string) {
133
189
  if (!this.webex.meetings.preferredWebexSite) {
134
190
  throw Error('No preferred webex site found');
135
191
  }
@@ -151,7 +207,14 @@ export default class MeetingInfoV2 {
151
207
  return this.webex.internal.conversation
152
208
  .get({url: conversationUrl}, {includeParticipants: true, disableTransform: true})
153
209
  .then((conversation) => {
154
- const body = {
210
+ const body: {
211
+ title: string;
212
+ spaceUrl: string;
213
+ keyUrl: string;
214
+ kroUrl: string;
215
+ invitees: any[];
216
+ installedOrgID?: string;
217
+ } = {
155
218
  title: conversation.displayName,
156
219
  spaceUrl: conversation.url,
157
220
  keyUrl: conversation.encryptionKeyUrl,
@@ -159,19 +222,28 @@ export default class MeetingInfoV2 {
159
222
  invitees: getInvitees(conversation.participants?.items),
160
223
  };
161
224
 
225
+ if (installedOrgID) {
226
+ body.installedOrgID = installedOrgID;
227
+ }
228
+
162
229
  const uri = this.webex.meetings.preferredWebexSite
163
230
  ? `https://${this.webex.meetings.preferredWebexSite}/wbxappapi/v2/meetings/spaceInstant`
164
231
  : '';
165
232
 
166
- Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ADHOC_MEETING_SUCCESS);
167
-
168
233
  return this.webex.request({
169
234
  method: HTTP_VERBS.POST,
170
235
  uri,
171
236
  body,
172
237
  });
173
238
  })
239
+ .then((requestResult) => {
240
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ADHOC_MEETING_SUCCESS);
241
+
242
+ return requestResult;
243
+ })
174
244
  .catch((err) => {
245
+ this.handlePolicyError(err);
246
+
175
247
  Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ADHOC_MEETING_FAILURE, {
176
248
  reason: err.message,
177
249
  stack: err.stack,
@@ -188,6 +260,10 @@ export default class MeetingInfoV2 {
188
260
  * @param {Object} captchaInfo
189
261
  * @param {String} captchaInfo.code
190
262
  * @param {String} captchaInfo.id
263
+ * @param {String} installedOrgID org ID of user's machine
264
+ * @param {String} locusId
265
+ * @param {Object} extraParams
266
+ * @param {Object} options
191
267
  * @returns {Promise} returns a meeting info object
192
268
  * @public
193
269
  * @memberof MeetingInfo
@@ -199,8 +275,14 @@ export default class MeetingInfoV2 {
199
275
  captchaInfo: {
200
276
  code: string;
201
277
  id: string;
202
- } = null
278
+ } = null,
279
+ installedOrgID = null,
280
+ locusId = null,
281
+ extraParams: object = {},
282
+ options: {meetingId?: string} = {}
203
283
  ) {
284
+ const {meetingId} = options;
285
+
204
286
  const destinationType = await MeetingInfoUtil.getDestinationType({
205
287
  destination,
206
288
  type,
@@ -212,12 +294,35 @@ export default class MeetingInfoV2 {
212
294
  this.webex.config.meetings.experimental.enableAdhocMeetings &&
213
295
  this.webex.meetings.preferredWebexSite
214
296
  ) {
215
- return this.createAdhocSpaceMeeting(destinationType.destination);
297
+ return this.createAdhocSpaceMeeting(destinationType.destination, installedOrgID);
216
298
  }
217
299
 
218
- const body = await MeetingInfoUtil.getRequestBody({...destinationType, password, captchaInfo});
300
+ const body = await MeetingInfoUtil.getRequestBody({
301
+ ...destinationType,
302
+ password,
303
+ captchaInfo,
304
+ installedOrgID,
305
+ locusId,
306
+ extraParams,
307
+ });
308
+
309
+ // If the body only contains the default properties, we don't have enough to
310
+ // fetch the meeting info so don't bother trying.
311
+ if (
312
+ !lodash.difference(Object.keys(body), Object.keys(DEFAULT_MEETING_INFO_REQUEST_BODY)).length
313
+ ) {
314
+ const err = new Error('Not enough information to fetch meeting info');
315
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_FAILURE, {
316
+ reason: err.message,
317
+ destinationType: destinationType?.type,
318
+ webExMeetingId: destinationType?.info?.webExMeetingId,
319
+ sipUri: destinationType?.info?.sipUri,
320
+ });
321
+
322
+ throw err;
323
+ }
219
324
 
220
- const options: any = {
325
+ const requestOptions: any = {
221
326
  method: HTTP_VERBS.POST,
222
327
  body,
223
328
  };
@@ -225,21 +330,52 @@ export default class MeetingInfoV2 {
225
330
  const directURI = await MeetingInfoUtil.getDirectMeetingInfoURI(destinationType);
226
331
 
227
332
  if (directURI) {
228
- options.uri = directURI;
333
+ requestOptions.uri = directURI;
229
334
  } else {
230
- options.service = WBXAPPAPI_SERVICE;
231
- options.resource = 'meetingInfo';
335
+ requestOptions.service = WBXAPPAPI_SERVICE;
336
+ requestOptions.resource = 'meetingInfo';
337
+ }
338
+
339
+ if (meetingId) {
340
+ this.webex.internal.newMetrics.submitInternalEvent({
341
+ name: 'internal.client.meetinginfo.request',
342
+ });
232
343
  }
233
344
 
234
345
  return this.webex
235
- .request(options)
346
+ .request(requestOptions)
236
347
  .then((response) => {
348
+ if (meetingId) {
349
+ this.webex.internal.newMetrics.submitInternalEvent({
350
+ name: 'internal.client.meetinginfo.response',
351
+ });
352
+ }
237
353
  Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_SUCCESS);
238
354
 
239
355
  return response;
240
356
  })
241
357
  .catch((err) => {
358
+ if (meetingId) {
359
+ this.webex.internal.newMetrics.submitInternalEvent({
360
+ name: 'internal.client.meetinginfo.response',
361
+ });
362
+ this.webex.internal.newMetrics.submitClientEvent({
363
+ name: 'client.meetinginfo.response',
364
+ payload: {
365
+ identifiers: {
366
+ meetingLookupUrl: err?.url,
367
+ },
368
+ },
369
+ options: {
370
+ meetingId,
371
+ rawError: err,
372
+ },
373
+ });
374
+ }
375
+
242
376
  if (err?.statusCode === 403) {
377
+ this.handlePolicyError(err);
378
+
243
379
  Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.VERIFY_PASSWORD_ERROR, {
244
380
  reason: err.message,
245
381
  stack: err.stack,
@@ -24,6 +24,7 @@ import {
24
24
  HTTPS_PROTOCOL,
25
25
  UUID_REG,
26
26
  VALID_EMAIL_ADDRESS,
27
+ DEFAULT_MEETING_INFO_REQUEST_BODY,
27
28
  } from '../constants';
28
29
  import ParameterError from '../common/errors/parameter';
29
30
  import LoggerProxy from '../common/logs/logger-proxy';
@@ -220,14 +221,15 @@ MeetingInfoUtil.getDestinationType = async (from) => {
220
221
  * Helper function to build up a correct locus url depending on the value passed
221
222
  * @param {Object} options type and value to fetch meeting info
222
223
  * @param {String} options.type One of [SIP_URI, PERSONAL_ROOM, MEETING_ID, CONVERSATION_URL, LOCUS_ID, MEETING_LINK]
224
+ * @param {String} options.installedOrgID org ID of user's machine
223
225
  * @param {Object} options.destination ?? value.value
224
226
  * @returns {Object} returns an object with {resource, method}
225
227
  */
226
228
  MeetingInfoUtil.getRequestBody = (options: {type: string; destination: object} | any) => {
227
- const {type, destination, password, captchaInfo} = options;
229
+ const {type, destination, password, captchaInfo, installedOrgID, locusId, extraParams} = options;
228
230
  const body: any = {
229
- supportHostKey: true,
230
- supportCountryList: true,
231
+ ...DEFAULT_MEETING_INFO_REQUEST_BODY,
232
+ ...extraParams,
231
233
  };
232
234
 
233
235
  switch (type) {
@@ -271,6 +273,14 @@ MeetingInfoUtil.getRequestBody = (options: {type: string; destination: object} |
271
273
  body.captchaVerifyCode = captchaInfo.code;
272
274
  }
273
275
 
276
+ if (installedOrgID) {
277
+ body.installedOrgID = installedOrgID;
278
+ }
279
+
280
+ if (locusId) {
281
+ body.locusId = locusId;
282
+ }
283
+
274
284
  return body;
275
285
  };
276
286
 
@@ -40,4 +40,24 @@ export default class MeetingCollection extends Collection {
40
40
 
41
41
  return null;
42
42
  }
43
+
44
+ /**
45
+ * get a specific meeting searching for key
46
+ * @param {String} breakoutUrl
47
+ * @returns {Meeting} if found, else returns null
48
+ * @public
49
+ * @memberof MeetingCollection
50
+ */
51
+ public getActiveBreakoutLocus(breakoutUrl: string) {
52
+ if (breakoutUrl) {
53
+ // @ts-ignore
54
+ return find(
55
+ // @ts-ignore
56
+ this.meetings,
57
+ (meeting) => meeting.breakouts?.url === breakoutUrl && meeting.breakouts?.isActiveBreakout
58
+ );
59
+ }
60
+
61
+ return null;
62
+ }
43
63
  }