@webex/plugin-meetings 3.0.0-beta.1 → 3.0.0-beta.104

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 (548) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/annotation/annotation.types.js +7 -0
  4. package/dist/annotation/annotation.types.js.map +1 -0
  5. package/dist/annotation/constants.js +48 -0
  6. package/dist/annotation/constants.js.map +1 -0
  7. package/dist/annotation/index.js +357 -0
  8. package/dist/annotation/index.js.map +1 -0
  9. package/dist/breakouts/breakout.js +176 -0
  10. package/dist/breakouts/breakout.js.map +1 -0
  11. package/dist/breakouts/collection.js +23 -0
  12. package/dist/breakouts/collection.js.map +1 -0
  13. package/dist/breakouts/edit-lock-error.js +52 -0
  14. package/dist/breakouts/edit-lock-error.js.map +1 -0
  15. package/dist/breakouts/events.js +43 -0
  16. package/dist/breakouts/events.js.map +1 -0
  17. package/dist/breakouts/index.js +919 -0
  18. package/dist/breakouts/index.js.map +1 -0
  19. package/dist/breakouts/request.js +78 -0
  20. package/dist/breakouts/request.js.map +1 -0
  21. package/dist/breakouts/utils.js +67 -0
  22. package/dist/breakouts/utils.js.map +1 -0
  23. package/dist/common/browser-detection.js +1 -20
  24. package/dist/common/browser-detection.js.map +1 -1
  25. package/dist/common/collection.js +5 -20
  26. package/dist/common/collection.js.map +1 -1
  27. package/dist/common/config.js +0 -7
  28. package/dist/common/config.js.map +1 -1
  29. package/dist/common/errors/captcha-error.js +10 -24
  30. package/dist/common/errors/captcha-error.js.map +1 -1
  31. package/dist/common/errors/intent-to-join.js +11 -24
  32. package/dist/common/errors/intent-to-join.js.map +1 -1
  33. package/dist/common/errors/join-meeting.js +12 -25
  34. package/dist/common/errors/join-meeting.js.map +1 -1
  35. package/dist/common/errors/media.js +10 -24
  36. package/dist/common/errors/media.js.map +1 -1
  37. package/dist/common/errors/parameter.js +5 -33
  38. package/dist/common/errors/parameter.js.map +1 -1
  39. package/dist/common/errors/password-error.js +10 -24
  40. package/dist/common/errors/password-error.js.map +1 -1
  41. package/dist/common/errors/permission.js +9 -23
  42. package/dist/common/errors/permission.js.map +1 -1
  43. package/dist/common/errors/reconnection-in-progress.js +0 -17
  44. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  45. package/dist/common/errors/reconnection.js +10 -24
  46. package/dist/common/errors/reconnection.js.map +1 -1
  47. package/dist/common/errors/stats.js +10 -24
  48. package/dist/common/errors/stats.js.map +1 -1
  49. package/dist/common/errors/webex-errors.js +10 -69
  50. package/dist/common/errors/webex-errors.js.map +1 -1
  51. package/dist/common/errors/webex-meetings-error.js +5 -25
  52. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  53. package/dist/common/events/events-scope.js +0 -22
  54. package/dist/common/events/events-scope.js.map +1 -1
  55. package/dist/common/events/events.js +0 -23
  56. package/dist/common/events/events.js.map +1 -1
  57. package/dist/common/events/trigger-proxy.js +0 -12
  58. package/dist/common/events/trigger-proxy.js.map +1 -1
  59. package/dist/common/events/util.js +0 -15
  60. package/dist/common/events/util.js.map +1 -1
  61. package/dist/common/logs/logger-config.js +0 -4
  62. package/dist/common/logs/logger-config.js.map +1 -1
  63. package/dist/common/logs/logger-proxy.js +1 -8
  64. package/dist/common/logs/logger-proxy.js.map +1 -1
  65. package/dist/common/logs/request.js +37 -60
  66. package/dist/common/logs/request.js.map +1 -1
  67. package/dist/common/queue.js +4 -14
  68. package/dist/common/queue.js.map +1 -1
  69. package/dist/config.js +7 -6
  70. package/dist/config.js.map +1 -1
  71. package/dist/constants.js +184 -122
  72. package/dist/constants.js.map +1 -1
  73. package/dist/controls-options-manager/constants.js +14 -0
  74. package/dist/controls-options-manager/constants.js.map +1 -0
  75. package/dist/controls-options-manager/enums.js +25 -0
  76. package/dist/controls-options-manager/enums.js.map +1 -0
  77. package/dist/controls-options-manager/index.js +297 -0
  78. package/dist/controls-options-manager/index.js.map +1 -0
  79. package/dist/controls-options-manager/types.js +7 -0
  80. package/dist/controls-options-manager/types.js.map +1 -0
  81. package/dist/controls-options-manager/util.js +250 -0
  82. package/dist/controls-options-manager/util.js.map +1 -0
  83. package/dist/index.js +72 -17
  84. package/dist/index.js.map +1 -1
  85. package/dist/locus-info/controlsUtils.js +56 -29
  86. package/dist/locus-info/controlsUtils.js.map +1 -1
  87. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  88. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  89. package/dist/locus-info/fullState.js +0 -15
  90. package/dist/locus-info/fullState.js.map +1 -1
  91. package/dist/locus-info/hostUtils.js +4 -12
  92. package/dist/locus-info/hostUtils.js.map +1 -1
  93. package/dist/locus-info/index.js +362 -208
  94. package/dist/locus-info/index.js.map +1 -1
  95. package/dist/locus-info/infoUtils.js +3 -37
  96. package/dist/locus-info/infoUtils.js.map +1 -1
  97. package/dist/locus-info/mediaSharesUtils.js +12 -38
  98. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  99. package/dist/locus-info/parser.js +92 -118
  100. package/dist/locus-info/parser.js.map +1 -1
  101. package/dist/locus-info/selfUtils.js +99 -91
  102. package/dist/locus-info/selfUtils.js.map +1 -1
  103. package/dist/media/index.js +113 -337
  104. package/dist/media/index.js.map +1 -1
  105. package/dist/media/properties.js +96 -135
  106. package/dist/media/properties.js.map +1 -1
  107. package/dist/media/util.js +1 -35
  108. package/dist/media/util.js.map +1 -1
  109. package/dist/mediaQualityMetrics/config.js +505 -495
  110. package/dist/mediaQualityMetrics/config.js.map +1 -1
  111. package/dist/meeting/in-meeting-actions.js +59 -14
  112. package/dist/meeting/in-meeting-actions.js.map +1 -1
  113. package/dist/meeting/index.js +2909 -2398
  114. package/dist/meeting/index.js.map +1 -1
  115. package/dist/meeting/muteState.js +257 -112
  116. package/dist/meeting/muteState.js.map +1 -1
  117. package/dist/meeting/request.js +330 -264
  118. package/dist/meeting/request.js.map +1 -1
  119. package/dist/meeting/request.type.js +7 -0
  120. package/dist/meeting/request.type.js.map +1 -0
  121. package/dist/meeting/state.js +21 -31
  122. package/dist/meeting/state.js.map +1 -1
  123. package/dist/meeting/util.js +63 -261
  124. package/dist/meeting/util.js.map +1 -1
  125. package/dist/meeting-info/collection.js +6 -25
  126. package/dist/meeting-info/collection.js.map +1 -1
  127. package/dist/meeting-info/index.js +14 -32
  128. package/dist/meeting-info/index.js.map +1 -1
  129. package/dist/meeting-info/meeting-info-v2.js +273 -280
  130. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  131. package/dist/meeting-info/request.js +3 -15
  132. package/dist/meeting-info/request.js.map +1 -1
  133. package/dist/meeting-info/util.js +98 -183
  134. package/dist/meeting-info/util.js.map +1 -1
  135. package/dist/meeting-info/utilv2.js +155 -232
  136. package/dist/meeting-info/utilv2.js.map +1 -1
  137. package/dist/meetings/collection.js +26 -19
  138. package/dist/meetings/collection.js.map +1 -1
  139. package/dist/meetings/index.js +741 -548
  140. package/dist/meetings/index.js.map +1 -1
  141. package/dist/meetings/request.js +26 -41
  142. package/dist/meetings/request.js.map +1 -1
  143. package/dist/meetings/util.js +194 -149
  144. package/dist/meetings/util.js.map +1 -1
  145. package/dist/member/index.js +100 -85
  146. package/dist/member/index.js.map +1 -1
  147. package/dist/member/types.js +15 -0
  148. package/dist/member/types.js.map +1 -0
  149. package/dist/member/util.js +90 -68
  150. package/dist/member/util.js.map +1 -1
  151. package/dist/members/collection.js +13 -12
  152. package/dist/members/collection.js.map +1 -1
  153. package/dist/members/index.js +227 -188
  154. package/dist/members/index.js.map +1 -1
  155. package/dist/members/request.js +54 -39
  156. package/dist/members/request.js.map +1 -1
  157. package/dist/members/types.js +15 -0
  158. package/dist/members/types.js.map +1 -0
  159. package/dist/members/util.js +107 -44
  160. package/dist/members/util.js.map +1 -1
  161. package/dist/metrics/config.js +5 -14
  162. package/dist/metrics/config.js.map +1 -1
  163. package/dist/metrics/constants.js +3 -7
  164. package/dist/metrics/constants.js.map +1 -1
  165. package/dist/metrics/index.js +67 -159
  166. package/dist/metrics/index.js.map +1 -1
  167. package/dist/multistream/mediaRequestManager.js +250 -0
  168. package/dist/multistream/mediaRequestManager.js.map +1 -0
  169. package/dist/multistream/receiveSlot.js +202 -0
  170. package/dist/multistream/receiveSlot.js.map +1 -0
  171. package/dist/multistream/receiveSlotManager.js +176 -0
  172. package/dist/multistream/receiveSlotManager.js.map +1 -0
  173. package/dist/multistream/remoteMedia.js +270 -0
  174. package/dist/multistream/remoteMedia.js.map +1 -0
  175. package/dist/multistream/remoteMediaGroup.js +209 -0
  176. package/dist/multistream/remoteMediaGroup.js.map +1 -0
  177. package/dist/multistream/remoteMediaManager.js +1137 -0
  178. package/dist/multistream/remoteMediaManager.js.map +1 -0
  179. package/dist/networkQualityMonitor/index.js +40 -59
  180. package/dist/networkQualityMonitor/index.js.map +1 -1
  181. package/dist/personal-meeting-room/index.js +21 -45
  182. package/dist/personal-meeting-room/index.js.map +1 -1
  183. package/dist/personal-meeting-room/request.js +1 -31
  184. package/dist/personal-meeting-room/request.js.map +1 -1
  185. package/dist/personal-meeting-room/util.js +0 -13
  186. package/dist/personal-meeting-room/util.js.map +1 -1
  187. package/dist/reachability/index.js +192 -191
  188. package/dist/reachability/index.js.map +1 -1
  189. package/dist/reachability/request.js +15 -23
  190. package/dist/reachability/request.js.map +1 -1
  191. package/dist/reactions/constants.js +13 -0
  192. package/dist/reactions/constants.js.map +1 -0
  193. package/dist/reactions/reactions.js +109 -0
  194. package/dist/reactions/reactions.js.map +1 -0
  195. package/dist/reactions/reactions.type.js +36 -0
  196. package/dist/reactions/reactions.type.js.map +1 -0
  197. package/dist/reconnection-manager/index.js +386 -527
  198. package/dist/reconnection-manager/index.js.map +1 -1
  199. package/dist/recording-controller/enums.js +17 -0
  200. package/dist/recording-controller/enums.js.map +1 -0
  201. package/dist/recording-controller/index.js +343 -0
  202. package/dist/recording-controller/index.js.map +1 -0
  203. package/dist/recording-controller/util.js +63 -0
  204. package/dist/recording-controller/util.js.map +1 -0
  205. package/dist/roap/index.js +84 -286
  206. package/dist/roap/index.js.map +1 -1
  207. package/dist/roap/request.js +138 -238
  208. package/dist/roap/request.js.map +1 -1
  209. package/dist/roap/turnDiscovery.js +164 -102
  210. package/dist/roap/turnDiscovery.js.map +1 -1
  211. package/dist/statsAnalyzer/global.js +1 -93
  212. package/dist/statsAnalyzer/global.js.map +1 -1
  213. package/dist/statsAnalyzer/index.js +399 -470
  214. package/dist/statsAnalyzer/index.js.map +1 -1
  215. package/dist/statsAnalyzer/mqaUtil.js +143 -87
  216. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  217. package/dist/transcription/index.js +22 -47
  218. package/dist/transcription/index.js.map +1 -1
  219. package/dist/types/annotation/annotation.types.d.ts +34 -0
  220. package/dist/types/annotation/constants.d.ts +31 -0
  221. package/dist/types/annotation/index.d.ts +124 -0
  222. package/dist/types/breakouts/breakout.d.ts +8 -0
  223. package/dist/types/breakouts/collection.d.ts +5 -0
  224. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  225. package/dist/types/breakouts/events.d.ts +2 -0
  226. package/dist/types/breakouts/index.d.ts +5 -0
  227. package/dist/types/breakouts/request.d.ts +22 -0
  228. package/dist/types/breakouts/utils.d.ts +15 -0
  229. package/dist/types/common/browser-detection.d.ts +9 -0
  230. package/dist/types/common/collection.d.ts +48 -0
  231. package/dist/types/common/config.d.ts +2 -0
  232. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  233. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  234. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  235. package/dist/types/common/errors/media.d.ts +15 -0
  236. package/dist/types/common/errors/parameter.d.ts +15 -0
  237. package/dist/types/common/errors/password-error.d.ts +15 -0
  238. package/dist/types/common/errors/permission.d.ts +14 -0
  239. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  240. package/dist/types/common/errors/reconnection.d.ts +15 -0
  241. package/dist/types/common/errors/stats.d.ts +15 -0
  242. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  243. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  244. package/dist/types/common/events/events-scope.d.ts +17 -0
  245. package/dist/types/common/events/events.d.ts +12 -0
  246. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  247. package/dist/types/common/events/util.d.ts +2 -0
  248. package/dist/types/common/logs/logger-config.d.ts +2 -0
  249. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  250. package/dist/types/common/logs/request.d.ts +34 -0
  251. package/dist/types/common/queue.d.ts +32 -0
  252. package/dist/types/config.d.ts +78 -0
  253. package/dist/types/constants.d.ts +968 -0
  254. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  255. package/dist/types/controls-options-manager/enums.d.ts +13 -0
  256. package/dist/types/controls-options-manager/index.d.ts +136 -0
  257. package/dist/types/controls-options-manager/types.d.ts +37 -0
  258. package/dist/types/controls-options-manager/util.d.ts +1 -0
  259. package/dist/types/index.d.ts +7 -0
  260. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  261. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  262. package/dist/types/locus-info/fullState.d.ts +2 -0
  263. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  264. package/dist/types/locus-info/index.d.ts +315 -0
  265. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  266. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  267. package/dist/types/locus-info/parser.d.ts +212 -0
  268. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  269. package/dist/types/media/index.d.ts +34 -0
  270. package/dist/types/media/properties.d.ts +108 -0
  271. package/dist/types/media/util.d.ts +2 -0
  272. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  273. package/dist/types/meeting/in-meeting-actions.d.ts +129 -0
  274. package/dist/types/meeting/index.d.ts +1748 -0
  275. package/dist/types/meeting/muteState.d.ts +185 -0
  276. package/dist/types/meeting/request.d.ts +275 -0
  277. package/dist/types/meeting/request.type.d.ts +11 -0
  278. package/dist/types/meeting/state.d.ts +9 -0
  279. package/dist/types/meeting/util.d.ts +2 -0
  280. package/dist/types/meeting-info/collection.d.ts +20 -0
  281. package/dist/types/meeting-info/index.d.ts +57 -0
  282. package/dist/types/meeting-info/meeting-info-v2.d.ts +112 -0
  283. package/dist/types/meeting-info/request.d.ts +22 -0
  284. package/dist/types/meeting-info/util.d.ts +2 -0
  285. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  286. package/dist/types/meetings/collection.d.ts +31 -0
  287. package/dist/types/meetings/index.d.ts +345 -0
  288. package/dist/types/meetings/request.d.ts +27 -0
  289. package/dist/types/meetings/util.d.ts +18 -0
  290. package/dist/types/member/index.d.ts +156 -0
  291. package/dist/types/member/types.d.ts +21 -0
  292. package/dist/types/member/util.d.ts +2 -0
  293. package/dist/types/members/collection.d.ts +29 -0
  294. package/dist/types/members/index.d.ts +353 -0
  295. package/dist/types/members/request.d.ts +69 -0
  296. package/dist/types/members/types.d.ts +24 -0
  297. package/dist/types/members/util.d.ts +2 -0
  298. package/dist/types/metrics/config.d.ts +172 -0
  299. package/dist/types/metrics/constants.d.ts +54 -0
  300. package/dist/types/metrics/index.d.ts +152 -0
  301. package/dist/types/multistream/mediaRequestManager.d.ts +101 -0
  302. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  303. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  304. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  305. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  306. package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
  307. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  308. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  309. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  310. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  311. package/dist/types/reachability/index.d.ts +152 -0
  312. package/dist/types/reachability/request.d.ts +37 -0
  313. package/dist/types/reactions/constants.d.ts +3 -0
  314. package/dist/types/reactions/reactions.d.ts +4 -0
  315. package/dist/types/reactions/reactions.type.d.ts +52 -0
  316. package/dist/types/reconnection-manager/index.d.ts +126 -0
  317. package/dist/types/recording-controller/enums.d.ts +7 -0
  318. package/dist/types/recording-controller/index.d.ts +193 -0
  319. package/dist/types/recording-controller/util.d.ts +13 -0
  320. package/dist/types/roap/index.d.ts +77 -0
  321. package/dist/types/roap/request.d.ts +38 -0
  322. package/dist/types/roap/turnDiscovery.d.ts +88 -0
  323. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  324. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  325. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  326. package/dist/types/transcription/index.d.ts +64 -0
  327. package/internal-README.md +7 -6
  328. package/package.json +29 -21
  329. package/src/annotation/annotation.types.ts +41 -0
  330. package/src/annotation/constants.ts +36 -0
  331. package/src/annotation/index.ts +339 -0
  332. package/src/breakouts/README.md +219 -0
  333. package/src/breakouts/breakout.ts +141 -0
  334. package/src/breakouts/collection.ts +19 -0
  335. package/src/breakouts/edit-lock-error.ts +25 -0
  336. package/src/breakouts/events.ts +37 -0
  337. package/src/breakouts/index.ts +823 -0
  338. package/src/breakouts/request.ts +55 -0
  339. package/src/breakouts/utils.ts +57 -0
  340. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  341. package/src/common/collection.ts +9 -7
  342. package/src/common/{config.js → config.ts} +1 -1
  343. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  344. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  345. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  346. package/src/common/errors/{media.js → media.ts} +11 -7
  347. package/src/common/errors/parameter.ts +11 -7
  348. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  349. package/src/common/errors/{permission.js → permission.ts} +10 -6
  350. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  351. package/src/common/errors/{stats.js → stats.ts} +11 -7
  352. package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -25
  353. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  354. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  355. package/src/common/events/{events.js → events.ts} +5 -1
  356. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  357. package/src/common/events/{util.js → util.ts} +2 -3
  358. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  359. package/src/common/logs/logger-proxy.ts +44 -0
  360. package/src/common/logs/{request.js → request.ts} +22 -9
  361. package/src/common/queue.ts +1 -2
  362. package/src/{config.js → config.ts} +18 -12
  363. package/src/constants.ts +256 -183
  364. package/src/controls-options-manager/constants.ts +5 -0
  365. package/src/controls-options-manager/enums.ts +16 -0
  366. package/src/controls-options-manager/index.ts +278 -0
  367. package/src/controls-options-manager/types.ts +49 -0
  368. package/src/controls-options-manager/util.ts +229 -0
  369. package/src/index.ts +33 -0
  370. package/src/locus-info/controlsUtils.ts +169 -0
  371. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  372. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  373. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  374. package/src/locus-info/{index.js → index.ts} +331 -80
  375. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  376. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
  377. package/src/locus-info/{parser.js → parser.ts} +67 -79
  378. package/src/locus-info/{selfUtils.js → selfUtils.ts} +196 -67
  379. package/src/media/index.ts +488 -0
  380. package/src/media/{properties.js → properties.ts} +67 -54
  381. package/src/media/util.ts +16 -0
  382. package/src/mediaQualityMetrics/config.ts +384 -0
  383. package/src/meeting/in-meeting-actions.ts +123 -3
  384. package/src/meeting/{index.js → index.ts} +3334 -1775
  385. package/src/meeting/muteState.ts +526 -0
  386. package/src/meeting/{request.js → request.ts} +350 -142
  387. package/src/meeting/request.type.ts +13 -0
  388. package/src/meeting/{state.js → state.ts} +50 -35
  389. package/src/meeting/{util.js → util.ts} +126 -159
  390. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  391. package/src/meeting-info/{index.js → index.ts} +42 -36
  392. package/src/meeting-info/meeting-info-v2.ts +345 -0
  393. package/src/meeting-info/{request.js → request.ts} +14 -4
  394. package/src/meeting-info/{util.js → util.ts} +60 -51
  395. package/src/meeting-info/{utilv2.js → utilv2.ts} +76 -60
  396. package/src/meetings/{collection.js → collection.ts} +26 -3
  397. package/src/meetings/index.ts +1394 -0
  398. package/src/meetings/{request.js → request.ts} +34 -25
  399. package/src/meetings/util.ts +288 -0
  400. package/src/member/{index.js → index.ts} +124 -56
  401. package/src/member/types.ts +24 -0
  402. package/src/member/{util.js → util.ts} +105 -25
  403. package/src/members/{collection.js → collection.ts} +10 -2
  404. package/src/members/{index.js → index.ts} +359 -139
  405. package/src/members/request.ts +215 -0
  406. package/src/members/types.ts +28 -0
  407. package/src/members/{util.js → util.ts} +145 -54
  408. package/src/metrics/{config.js → config.ts} +256 -92
  409. package/src/metrics/{constants.js → constants.ts} +1 -6
  410. package/src/metrics/{index.js → index.ts} +116 -97
  411. package/src/multistream/mediaRequestManager.ts +324 -0
  412. package/src/multistream/receiveSlot.ts +184 -0
  413. package/src/multistream/receiveSlotManager.ts +166 -0
  414. package/src/multistream/remoteMedia.ts +254 -0
  415. package/src/multistream/remoteMediaGroup.ts +225 -0
  416. package/src/multistream/remoteMediaManager.ts +1075 -0
  417. package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
  418. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  419. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  420. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  421. package/src/reachability/{index.js → index.ts} +157 -94
  422. package/src/reachability/request.ts +46 -35
  423. package/src/reactions/constants.ts +4 -0
  424. package/src/reactions/reactions.ts +104 -0
  425. package/src/reactions/reactions.type.ts +62 -0
  426. package/src/reconnection-manager/{index.js → index.ts} +261 -163
  427. package/src/recording-controller/enums.ts +8 -0
  428. package/src/recording-controller/index.ts +315 -0
  429. package/src/recording-controller/util.ts +58 -0
  430. package/src/roap/index.ts +241 -0
  431. package/src/roap/request.ts +172 -0
  432. package/src/roap/turnDiscovery.ts +127 -53
  433. package/src/statsAnalyzer/global.ts +37 -0
  434. package/src/statsAnalyzer/index.ts +1273 -0
  435. package/src/statsAnalyzer/mqaUtil.ts +291 -0
  436. package/src/transcription/{index.js → index.ts} +46 -39
  437. package/test/integration/spec/converged-space-meetings.js +177 -0
  438. package/test/integration/spec/journey.js +666 -464
  439. package/test/integration/spec/space-meeting.js +321 -206
  440. package/test/integration/spec/transcription.js +7 -8
  441. package/test/unit/spec/annotation/index.ts +435 -0
  442. package/test/unit/spec/breakouts/breakout.ts +184 -0
  443. package/test/unit/spec/breakouts/collection.ts +15 -0
  444. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  445. package/test/unit/spec/breakouts/events.ts +77 -0
  446. package/test/unit/spec/breakouts/index.ts +1504 -0
  447. package/test/unit/spec/breakouts/request.ts +104 -0
  448. package/test/unit/spec/breakouts/utils.js +72 -0
  449. package/test/unit/spec/common/browser-detection.js +9 -28
  450. package/test/unit/spec/controls-options-manager/index.js +287 -0
  451. package/test/unit/spec/controls-options-manager/util.js +403 -0
  452. package/test/unit/spec/fixture/locus.js +92 -90
  453. package/test/unit/spec/locus-info/controlsUtils.js +177 -32
  454. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  455. package/test/unit/spec/locus-info/index.js +493 -3
  456. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  457. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  458. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  459. package/test/unit/spec/locus-info/parser.js +3 -9
  460. package/test/unit/spec/locus-info/selfConstant.js +110 -103
  461. package/test/unit/spec/locus-info/selfUtils.js +236 -12
  462. package/test/unit/spec/media/index.ts +303 -0
  463. package/test/unit/spec/media/properties.ts +73 -82
  464. package/test/unit/spec/meeting/in-meeting-actions.ts +58 -3
  465. package/test/unit/spec/meeting/index.js +3127 -975
  466. package/test/unit/spec/meeting/muteState.js +375 -70
  467. package/test/unit/spec/meeting/request.js +217 -43
  468. package/test/unit/spec/meeting/utils.js +205 -163
  469. package/test/unit/spec/meeting-info/meetinginfov2.js +268 -74
  470. package/test/unit/spec/meeting-info/request.js +7 -9
  471. package/test/unit/spec/meeting-info/util.js +11 -12
  472. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  473. package/test/unit/spec/meetings/collection.js +15 -1
  474. package/test/unit/spec/meetings/index.js +1052 -333
  475. package/test/unit/spec/meetings/utils.js +163 -14
  476. package/test/unit/spec/member/index.js +24 -1
  477. package/test/unit/spec/member/util.js +359 -32
  478. package/test/unit/spec/members/index.js +547 -37
  479. package/test/unit/spec/members/request.js +76 -20
  480. package/test/unit/spec/members/utils.js +191 -4
  481. package/test/unit/spec/metrics/index.js +46 -20
  482. package/test/unit/spec/multistream/mediaRequestManager.ts +1060 -0
  483. package/test/unit/spec/multistream/receiveSlot.ts +163 -0
  484. package/test/unit/spec/multistream/receiveSlotManager.ts +203 -0
  485. package/test/unit/spec/multistream/remoteMedia.ts +255 -0
  486. package/test/unit/spec/multistream/remoteMediaGroup.ts +396 -0
  487. package/test/unit/spec/multistream/remoteMediaManager.ts +1793 -0
  488. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  489. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  490. package/test/unit/spec/reachability/index.ts +176 -27
  491. package/test/unit/spec/reachability/request.js +66 -0
  492. package/test/unit/spec/reconnection-manager/index.js +106 -9
  493. package/test/unit/spec/recording-controller/index.js +231 -0
  494. package/test/unit/spec/recording-controller/util.js +102 -0
  495. package/test/unit/spec/roap/index.ts +78 -45
  496. package/test/unit/spec/roap/request.ts +217 -0
  497. package/test/unit/spec/roap/turnDiscovery.ts +93 -49
  498. package/test/unit/spec/stats-analyzer/index.js +118 -65
  499. package/test/utils/cmr.js +44 -42
  500. package/test/utils/constants.js +9 -0
  501. package/test/utils/integrationTestUtils.js +64 -0
  502. package/test/utils/testUtils.js +63 -99
  503. package/test/utils/webex-config.js +22 -18
  504. package/test/utils/webex-test-users.js +57 -50
  505. package/tsconfig.json +6 -0
  506. package/dist/meeting/effectsState.js +0 -327
  507. package/dist/meeting/effectsState.js.map +0 -1
  508. package/dist/peer-connection-manager/index.js +0 -794
  509. package/dist/peer-connection-manager/index.js.map +0 -1
  510. package/dist/peer-connection-manager/util.js +0 -124
  511. package/dist/peer-connection-manager/util.js.map +0 -1
  512. package/dist/roap/collection.js +0 -73
  513. package/dist/roap/collection.js.map +0 -1
  514. package/dist/roap/handler.js +0 -337
  515. package/dist/roap/handler.js.map +0 -1
  516. package/dist/roap/state.js +0 -164
  517. package/dist/roap/state.js.map +0 -1
  518. package/dist/roap/util.js +0 -102
  519. package/dist/roap/util.js.map +0 -1
  520. package/src/common/logs/logger-proxy.js +0 -33
  521. package/src/index.js +0 -15
  522. package/src/locus-info/controlsUtils.js +0 -102
  523. package/src/media/index.js +0 -593
  524. package/src/media/util.js +0 -38
  525. package/src/mediaQualityMetrics/config.js +0 -382
  526. package/src/meeting/effectsState.js +0 -205
  527. package/src/meeting/muteState.js +0 -318
  528. package/src/meeting-info/meeting-info-v2.js +0 -255
  529. package/src/meetings/index.js +0 -986
  530. package/src/meetings/util.js +0 -176
  531. package/src/members/request.js +0 -131
  532. package/src/peer-connection-manager/index.js +0 -723
  533. package/src/peer-connection-manager/util.ts +0 -117
  534. package/src/roap/collection.js +0 -63
  535. package/src/roap/handler.js +0 -252
  536. package/src/roap/index.js +0 -380
  537. package/src/roap/request.js +0 -198
  538. package/src/roap/state.js +0 -149
  539. package/src/roap/util.js +0 -93
  540. package/src/statsAnalyzer/global.js +0 -131
  541. package/src/statsAnalyzer/index.js +0 -1020
  542. package/src/statsAnalyzer/mqaUtil.js +0 -173
  543. package/test/unit/spec/meeting/effectsState.js +0 -293
  544. package/test/unit/spec/peerconnection-manager/index.js +0 -188
  545. package/test/unit/spec/peerconnection-manager/utils.js +0 -48
  546. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
  547. package/test/unit/spec/roap/util.js +0 -30
  548. /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
@@ -12,14 +12,21 @@ import {
12
12
  _PERSONAL_ROOM_,
13
13
  _CONVERSATION_URL_,
14
14
  _SIP_URI_,
15
- WBXAPPAPI_SERVICE
15
+ WBXAPPAPI_SERVICE,
16
+ _LOCUS_ID_,
16
17
  } from '@webex/plugin-meetings/src/constants';
17
18
 
18
19
  import Meetings from '@webex/plugin-meetings/src/meetings';
19
- import MeetingInfo, {MeetingInfoV2PasswordError, MeetingInfoV2CaptchaError, MeetingInfoV2AdhocMeetingError} from '@webex/plugin-meetings/src/meeting-info/meeting-info-v2';
20
+ import MeetingInfo, {
21
+ MeetingInfoV2PasswordError,
22
+ MeetingInfoV2CaptchaError,
23
+ MeetingInfoV2AdhocMeetingError,
24
+ MeetingInfoV2PolicyError,
25
+ } from '@webex/plugin-meetings/src/meeting-info/meeting-info-v2';
20
26
  import MeetingInfoUtil from '@webex/plugin-meetings/src/meeting-info/utilv2';
21
27
  import Metrics from '@webex/plugin-meetings/src/metrics';
22
28
  import BEHAVIORAL_METRICS from '@webex/plugin-meetings/src/metrics/constants';
29
+ import { forEach } from 'lodash';
23
30
 
24
31
  describe('plugin-meetings', () => {
25
32
  const conversation = {
@@ -32,16 +39,15 @@ describe('plugin-meetings', () => {
32
39
  {
33
40
  id: '344ea183-9d5d-4e77-aed',
34
41
  emailAddress: 'testUser1@cisco.com',
35
- entryUUID: '344ea183-9d5d-4e77-'
36
-
42
+ entryUUID: '344ea183-9d5d-4e77-',
37
43
  },
38
44
  {
39
45
  id: '40b446fe-175c-4628-8a9d',
40
46
  emailAddress: 'testUser2@cisco.com',
41
- entryUUID: '40b446fe-175c-4628'
42
- }
43
- ]
44
- }
47
+ entryUUID: '40b446fe-175c-4628',
48
+ },
49
+ ],
50
+ },
45
51
  };
46
52
  let webex;
47
53
  let meetingInfo = null;
@@ -59,32 +65,33 @@ describe('plugin-meetings', () => {
59
65
  children: {
60
66
  device: Device,
61
67
  mercury: Mercury,
62
- meetings: Meetings
63
- }
68
+ meetings: Meetings,
69
+ },
64
70
  });
65
71
 
66
72
  webex.meetings.preferredWebexSite = 'go.webex.com';
67
- webex.config.meetings = {experimental: {enableUnifiedMeetings: true, enableAdhocMeetings: true}};
73
+ webex.config.meetings = {
74
+ experimental: {enableUnifiedMeetings: true, enableAdhocMeetings: true},
75
+ };
68
76
 
69
77
  Object.assign(webex.internal, {
70
78
  device: {
71
79
  deviceType: 'FAKE_DEVICE',
72
80
  register: sinon.stub().returns(Promise.resolve()),
73
81
  unregister: sinon.stub().returns(Promise.resolve()),
74
- userId: '01824b9b-adef-4b10-b5c1-8a2fe2fb7c0e'
82
+ userId: '01824b9b-adef-4b10-b5c1-8a2fe2fb7c0e',
75
83
  },
76
84
  mercury: {
77
85
  connect: sinon.stub().returns(Promise.resolve()),
78
86
  disconnect: sinon.stub().returns(Promise.resolve()),
79
87
  on: () => {},
80
- off: () => {}
88
+ off: () => {},
81
89
  },
82
90
  conversation: {
83
- get: sinon.stub().returns(Promise.resolve(conversation))
84
- }
91
+ get: sinon.stub().returns(Promise.resolve(conversation)),
92
+ },
85
93
  });
86
94
 
87
-
88
95
  meetingInfo = new MeetingInfo(webex);
89
96
  });
90
97
 
@@ -93,17 +100,22 @@ describe('plugin-meetings', () => {
93
100
  const body = {meetingKey: '1234323'};
94
101
  const requestResponse = {statusCode: 200, body};
95
102
 
96
- sinon.stub(MeetingInfoUtil, 'getDestinationType').returns(Promise.resolve({type: 'MEETING_ID', destination: '123456'}));
103
+ sinon
104
+ .stub(MeetingInfoUtil, 'getDestinationType')
105
+ .returns(Promise.resolve({type: 'MEETING_ID', destination: '123456'}));
97
106
  sinon.stub(MeetingInfoUtil, 'getRequestBody').returns(Promise.resolve(body));
98
107
  webex.request.resolves(requestResponse);
99
108
 
100
109
  const result = await meetingInfo.fetchMeetingInfo({
101
110
  type: _MEETING_ID_,
102
- destination: '1234323'
111
+ destination: '1234323',
103
112
  });
104
113
 
105
114
  assert.calledWith(webex.request, {
106
- method: 'POST', service: WBXAPPAPI_SERVICE, resource: 'meetingInfo', body: {meetingKey: '1234323'}
115
+ method: 'POST',
116
+ service: WBXAPPAPI_SERVICE,
117
+ resource: 'meetingInfo',
118
+ body: {meetingKey: '1234323'},
107
119
  });
108
120
  assert.deepEqual(result, requestResponse);
109
121
 
@@ -111,20 +123,25 @@ describe('plugin-meetings', () => {
111
123
  MeetingInfoUtil.getRequestBody.restore();
112
124
  });
113
125
 
114
- it('should fetch meeting info for the personal meeting room type', async () => {
126
+ it('should fetch meeting info for the personal meeting room type', async () => {
115
127
  const body = {meetingKey: '1234323'};
116
128
  const requestResponse = {statusCode: 200, body};
117
129
 
118
- sinon.stub(MeetingInfoUtil, 'getDestinationType').returns(Promise.resolve({type: 'MEETING_ID', destination: '123456'}));
130
+ sinon
131
+ .stub(MeetingInfoUtil, 'getDestinationType')
132
+ .returns(Promise.resolve({type: 'MEETING_ID', destination: '123456'}));
119
133
  sinon.stub(MeetingInfoUtil, 'getRequestBody').returns(Promise.resolve(body));
120
134
  webex.request.resolves(requestResponse);
121
135
 
122
136
  const result = await meetingInfo.fetchMeetingInfo({
123
- type: _PERSONAL_ROOM_
137
+ type: _PERSONAL_ROOM_,
124
138
  });
125
139
 
126
140
  assert.calledWith(webex.request, {
127
- method: 'POST', service: WBXAPPAPI_SERVICE, resource: 'meetingInfo', body: {meetingKey: '1234323'}
141
+ method: 'POST',
142
+ service: WBXAPPAPI_SERVICE,
143
+ resource: 'meetingInfo',
144
+ body: {meetingKey: '1234323'},
128
145
  });
129
146
  assert.deepEqual(result, requestResponse);
130
147
 
@@ -136,20 +153,28 @@ describe('plugin-meetings', () => {
136
153
  const body = {meetingKey: '1234323'};
137
154
  const requestResponse = {statusCode: 200, body};
138
155
 
139
- sinon.stub(MeetingInfoUtil, 'getDestinationType').returns(Promise.resolve({type: _SIP_URI_, destination: 'example@something.webex.com'}));
156
+ sinon
157
+ .stub(MeetingInfoUtil, 'getDestinationType')
158
+ .returns(Promise.resolve({type: _SIP_URI_, destination: 'example@something.webex.com'}));
140
159
  sinon.stub(MeetingInfoUtil, 'getRequestBody').returns(Promise.resolve(body));
141
160
  sinon.stub(MeetingInfoUtil, 'getDirectMeetingInfoURI').returns('https://example.com');
142
161
  webex.request.resolves(requestResponse);
143
162
 
144
- const result = await meetingInfo.fetchMeetingInfo(
145
- 'example@something.webex.com',
146
- _SIP_URI_,
147
- );
163
+ const result = await meetingInfo.fetchMeetingInfo('example@something.webex.com', _SIP_URI_);
148
164
 
149
- assert.calledWith(MeetingInfoUtil.getDestinationType, {destination: 'example@something.webex.com', type: _SIP_URI_, webex});
150
- assert.calledWith(MeetingInfoUtil.getDirectMeetingInfoURI, {destination: 'example@something.webex.com', type: _SIP_URI_});
165
+ assert.calledWith(MeetingInfoUtil.getDestinationType, {
166
+ destination: 'example@something.webex.com',
167
+ type: _SIP_URI_,
168
+ webex,
169
+ });
170
+ assert.calledWith(MeetingInfoUtil.getDirectMeetingInfoURI, {
171
+ destination: 'example@something.webex.com',
172
+ type: _SIP_URI_,
173
+ });
151
174
  assert.calledWith(webex.request, {
152
- method: 'POST', uri: 'https://example.com', body: {meetingKey: '1234323'}
175
+ method: 'POST',
176
+ uri: 'https://example.com',
177
+ body: {meetingKey: '1234323'},
153
178
  });
154
179
  assert.deepEqual(result, requestResponse);
155
180
 
@@ -163,7 +188,10 @@ describe('plugin-meetings', () => {
163
188
 
164
189
  webex.request.resolves(requestResponse);
165
190
 
166
- const result = await meetingInfo.fetchMeetingInfo('1234323', _MEETING_ID_, 'abc', {id: '999', code: 'aabbcc11'});
191
+ const result = await meetingInfo.fetchMeetingInfo('1234323', _MEETING_ID_, 'abc', {
192
+ id: '999',
193
+ code: 'aabbcc11',
194
+ });
167
195
 
168
196
  assert.calledWith(webex.request, {
169
197
  method: 'POST',
@@ -175,14 +203,95 @@ describe('plugin-meetings', () => {
175
203
  meetingKey: '1234323',
176
204
  password: 'abc',
177
205
  captchaID: '999',
178
- captchaVerifyCode: 'aabbcc11'
179
- }
206
+ captchaVerifyCode: 'aabbcc11',
207
+ },
208
+ });
209
+ assert.deepEqual(result, requestResponse);
210
+ assert(Metrics.sendBehavioralMetric.calledOnce);
211
+ assert.calledWith(
212
+ Metrics.sendBehavioralMetric,
213
+ BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_SUCCESS
214
+ );
215
+ });
216
+
217
+ it('should fetch meeting info with provided installedOrgID', async () => {
218
+ const requestResponse = {statusCode: 200, body: {meetingKey: '1234323'}};
219
+ const installedOrgID = '123456';
220
+
221
+ webex.request.resolves(requestResponse);
222
+
223
+ const result = await meetingInfo.fetchMeetingInfo('1234323', _MEETING_ID_, null, null, installedOrgID);
224
+
225
+ assert.calledWith(webex.request, {
226
+ method: 'POST',
227
+ service: WBXAPPAPI_SERVICE,
228
+ resource: 'meetingInfo',
229
+ body: {
230
+ supportHostKey: true,
231
+ supportCountryList: true,
232
+ meetingKey: '1234323',
233
+ installedOrgID,
234
+ },
235
+ });
236
+ assert.deepEqual(result, requestResponse);
237
+ assert(Metrics.sendBehavioralMetric.calledOnce);
238
+ assert.calledWith(
239
+ Metrics.sendBehavioralMetric,
240
+ BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_SUCCESS
241
+ );
242
+ });
243
+
244
+ it('should fetch meeting info with provided locusId', async () => {
245
+ const requestResponse = {statusCode: 200, body: {meetingKey: '1234323'}};
246
+ const locusId = 'eccd5c1b-d42d-35e3-a1b9-3021030a6d84';
247
+
248
+ webex.request.resolves(requestResponse);
249
+
250
+ const result = await meetingInfo.fetchMeetingInfo('1234323', _MEETING_ID_, null, null, null, locusId);
251
+
252
+ assert.calledWith(webex.request, {
253
+ method: 'POST',
254
+ service: WBXAPPAPI_SERVICE,
255
+ resource: 'meetingInfo',
256
+ body: {
257
+ supportHostKey: true,
258
+ supportCountryList: true,
259
+ meetingKey: '1234323',
260
+ locusId,
261
+ },
262
+ });
263
+ assert.deepEqual(result, requestResponse);
264
+ assert(Metrics.sendBehavioralMetric.calledOnce);
265
+ assert.calledWith(
266
+ Metrics.sendBehavioralMetric,
267
+ BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_SUCCESS
268
+ );
269
+ });
270
+
271
+ it('should fetch meeting info with provided extraParams', async () => {
272
+ const requestResponse = {statusCode: 200, body: {meetingKey: '1234323'}};
273
+ const extraParams = {mtid: 'm9fe0afd8c435e892afcce9ea25b97046', joinTXId: 'TSmrX61wNF'}
274
+
275
+ webex.request.resolves(requestResponse);
276
+
277
+ const result = await meetingInfo.fetchMeetingInfo('1234323', _MEETING_ID_, null, null, null, null, extraParams);
278
+
279
+ assert.calledWith(webex.request, {
280
+ method: 'POST',
281
+ service: WBXAPPAPI_SERVICE,
282
+ resource: 'meetingInfo',
283
+ body: {
284
+ supportHostKey: true,
285
+ supportCountryList: true,
286
+ meetingKey: '1234323',
287
+ ...extraParams,
288
+ },
180
289
  });
181
290
  assert.deepEqual(result, requestResponse);
182
291
  assert(Metrics.sendBehavioralMetric.calledOnce);
183
292
  assert.calledWith(
184
293
  Metrics.sendBehavioralMetric,
185
- BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_SUCCESS,
294
+ BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_SUCCESS
186
295
  );
187
296
  });
188
297
 
@@ -223,29 +332,77 @@ describe('plugin-meetings', () => {
223
332
  webex.request = sinon.stub().rejects({statusCode: 403, body: {code: 400000}});
224
333
  try {
225
334
  await meetingInfo.createAdhocSpaceMeeting('conversationUrl');
226
- }
227
- catch (err) {
335
+ } catch (err) {
228
336
  assert.instanceOf(err, MeetingInfoV2AdhocMeetingError);
229
- assert.deepEqual(err.message, 'Failed starting the adhoc meeting, Please contact support team , code=400000');
337
+ assert.deepEqual(
338
+ err.message,
339
+ 'Failed starting the adhoc meeting, Please contact support team , code=400000'
340
+ );
230
341
  assert.equal(err.wbxAppApiCode, 400000);
231
342
  }
232
343
  });
233
344
 
345
+ forEach(
346
+ [
347
+ {errorCode: 403049},
348
+ {errorCode: 403104},
349
+ {errorCode: 403103},
350
+ {errorCode: 403048},
351
+ {errorCode: 403102},
352
+ {errorCode: 403101},
353
+ ],
354
+ ({errorCode}) => {
355
+ it(`should throw a MeetingInfoV2PolicyError for error code ${errorCode}`, async () => {
356
+ const message = 'a message';
357
+ const meetingInfoData = 'meeting info';
358
+
359
+ webex.request = sinon
360
+ .stub()
361
+ .rejects({
362
+ statusCode: 403,
363
+ body: {message, code: errorCode, data: {meetingInfo: meetingInfoData}},
364
+ });
365
+ try {
366
+ await meetingInfo.fetchMeetingInfo('1234323', _MEETING_ID_, 'abc', {
367
+ id: '999',
368
+ code: 'aabbcc11',
369
+ });
370
+ assert.fail('fetchMeetingInfo should have thrown, but has not done that');
371
+ } catch (err) {
372
+ assert.instanceOf(err, MeetingInfoV2PolicyError);
373
+ assert.deepEqual(
374
+ err.message,
375
+ `${message}, code=${errorCode}`
376
+ );
377
+ assert.equal(err.wbxAppApiCode, errorCode);
378
+ assert.deepEqual(err.meetingInfo, meetingInfoData);
379
+ assert(Metrics.sendBehavioralMetric.calledOnce);
380
+ assert.calledWith(
381
+ Metrics.sendBehavioralMetric,
382
+ BEHAVIORAL_METRICS.MEETING_INFO_POLICY_ERROR,
383
+ {code: errorCode}
384
+ );
385
+ }
386
+ });
387
+ }
388
+ );
389
+
234
390
  it('should throw MeetingInfoV2PasswordError for 403 response', async () => {
235
391
  const FAKE_MEETING_INFO = {blablabla: 'some_fake_meeting_info'};
236
392
 
237
- webex.request = sinon.stub().rejects({statusCode: 403, body: {code: 403000, data: {meetingInfo: FAKE_MEETING_INFO}}});
393
+ webex.request = sinon
394
+ .stub()
395
+ .rejects({statusCode: 403, body: {code: 403000, data: {meetingInfo: FAKE_MEETING_INFO}}});
238
396
 
239
397
  try {
240
- await meetingInfo.fetchMeetingInfo('1234323', _MEETING_ID_, 'abc', {id: '999', code: 'aabbcc11'});
398
+ await meetingInfo.fetchMeetingInfo('1234323', _MEETING_ID_, 'abc', {
399
+ id: '999',
400
+ code: 'aabbcc11',
401
+ });
241
402
  assert.fail('fetchMeetingInfo should have thrown, but has not done that');
242
- }
243
- catch (err) {
403
+ } catch (err) {
244
404
  assert(Metrics.sendBehavioralMetric.calledOnce);
245
- assert.calledWith(
246
- Metrics.sendBehavioralMetric,
247
- BEHAVIORAL_METRICS.VERIFY_PASSWORD_ERROR,
248
- );
405
+ assert.calledWith(Metrics.sendBehavioralMetric, BEHAVIORAL_METRICS.VERIFY_PASSWORD_ERROR);
249
406
  assert.instanceOf(err, MeetingInfoV2PasswordError);
250
407
  assert.deepEqual(err.meetingInfo, FAKE_MEETING_INFO);
251
408
  assert.equal(err.wbxAppApiCode, 403000);
@@ -254,34 +411,34 @@ describe('plugin-meetings', () => {
254
411
 
255
412
  describe('should throw MeetingInfoV2CaptchaError for 423 response', () => {
256
413
  const runTest = async (wbxAppApiCode, expectedIsPasswordRequired) => {
257
- webex.request = sinon.stub().rejects(
258
- {
259
- statusCode: 423,
260
- body: {
261
- code: wbxAppApiCode,
262
- captchaID: 'fake_captcha_id',
263
- verificationImageURL: 'fake_image_url',
264
- verificationAudioURL: 'fake_audio_url',
265
- refreshURL: 'fake_refresh_url'
266
- }
267
- }
268
- );
414
+ webex.request = sinon.stub().rejects({
415
+ statusCode: 423,
416
+ body: {
417
+ code: wbxAppApiCode,
418
+ captchaID: 'fake_captcha_id',
419
+ verificationImageURL: 'fake_image_url',
420
+ verificationAudioURL: 'fake_audio_url',
421
+ refreshURL: 'fake_refresh_url',
422
+ },
423
+ });
269
424
  try {
270
- await meetingInfo.fetchMeetingInfo('1234323', _MEETING_ID_, 'abc', {id: '999', code: 'aabbcc11'});
425
+ await meetingInfo.fetchMeetingInfo('1234323', _MEETING_ID_, 'abc', {
426
+ id: '999',
427
+ code: 'aabbcc11',
428
+ });
271
429
  assert.fail('fetchMeetingInfo should have thrown, but has not done that');
272
- }
273
- catch (err) {
430
+ } catch (err) {
274
431
  assert(Metrics.sendBehavioralMetric.calledOnce);
275
432
  assert.calledWith(
276
433
  Metrics.sendBehavioralMetric,
277
- BEHAVIORAL_METRICS.VERIFY_CAPTCHA_ERROR,
434
+ BEHAVIORAL_METRICS.VERIFY_CAPTCHA_ERROR
278
435
  );
279
436
  assert.instanceOf(err, MeetingInfoV2CaptchaError);
280
437
  assert.deepEqual(err.captchaInfo, {
281
438
  captchaId: 'fake_captcha_id',
282
439
  verificationImageURL: 'fake_image_url',
283
440
  verificationAudioURL: 'fake_audio_url',
284
- refreshURL: 'fake_refresh_url'
441
+ refreshURL: 'fake_refresh_url',
285
442
  });
286
443
  assert.equal(err.wbxAppApiCode, wbxAppApiCode);
287
444
  assert.equal(err.isPasswordRequired, expectedIsPasswordRequired);
@@ -300,8 +457,45 @@ describe('plugin-meetings', () => {
300
457
  await runTest(423001, false);
301
458
  });
302
459
  });
303
- });
304
460
 
461
+ it('should throw an error and not fetch with an "empty" body', async () => {
462
+ const body = {supportHostKey: 'foo', supportCountryList: 'bar'};
463
+ const requestResponse = {statusCode: 200, body};
464
+
465
+ sinon
466
+ .stub(MeetingInfoUtil, 'getDestinationType')
467
+ .returns(Promise.resolve({type: _LOCUS_ID_, destination: '123456'}));
468
+ sinon.stub(MeetingInfoUtil, 'getRequestBody').returns(Promise.resolve(body));
469
+ webex.request.resolves(requestResponse);
470
+
471
+ try {
472
+ await meetingInfo.fetchMeetingInfo({
473
+ type: _LOCUS_ID_,
474
+ });
475
+ assert.fail('fetchMeetingInfo should have thrown, but has not done that');
476
+ } catch (err) {
477
+ assert.calledWith(
478
+ Metrics.sendBehavioralMetric,
479
+ BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_FAILURE,
480
+ {
481
+ reason: 'Not enough information to fetch meeting info',
482
+ destinationType: _LOCUS_ID_,
483
+ webExMeetingId: undefined,
484
+ sipUri: undefined,
485
+ }
486
+ );
487
+ assert(Metrics.sendBehavioralMetric.calledOnce);
488
+ assert.calledWith(
489
+ Metrics.sendBehavioralMetric,
490
+ BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_FAILURE
491
+ );
492
+ assert.deepEqual(err.message, 'Not enough information to fetch meeting info');
493
+ }
494
+
495
+ MeetingInfoUtil.getDestinationType.restore();
496
+ MeetingInfoUtil.getRequestBody.restore();
497
+ });
498
+ });
305
499
 
306
500
  describe('createAdhocSpaceMeeting', () => {
307
501
  it('Make a request to /instantSpace when conversationUrl', async () => {
@@ -310,18 +504,21 @@ describe('plugin-meetings', () => {
310
504
 
311
505
  invitee.push({
312
506
  email: conversation.participants.items[0].emailAddress,
313
- ciUserUuid: conversation.participants.items[0].entryUUID
507
+ ciUserUuid: conversation.participants.items[0].entryUUID,
314
508
  });
315
509
 
316
510
  invitee.push({
317
511
  email: conversation.participants.items[1].emailAddress,
318
- ciUserUuid: conversation.participants.items[1].entryUUID
512
+ ciUserUuid: conversation.participants.items[1].entryUUID,
319
513
  });
320
514
 
321
515
  await meetingInfo.createAdhocSpaceMeeting(conversationUrl);
322
516
 
323
- assert.calledWith(webex.internal.conversation.get, {url: conversationUrl},
324
- {includeParticipants: true, disableTransform: true});
517
+ assert.calledWith(
518
+ webex.internal.conversation.get,
519
+ {url: conversationUrl},
520
+ {includeParticipants: true, disableTransform: true}
521
+ );
325
522
 
326
523
  assert.calledWith(webex.request, {
327
524
  method: 'POST',
@@ -331,14 +528,11 @@ describe('plugin-meetings', () => {
331
528
  spaceUrl: conversation.url,
332
529
  keyUrl: conversation.encryptionKeyUrl,
333
530
  kroUrl: conversation.kmsResourceObjectUrl,
334
- invitees: invitee
335
- }
531
+ invitees: invitee,
532
+ },
336
533
  });
337
534
  assert(Metrics.sendBehavioralMetric.calledOnce);
338
- assert.calledWith(
339
- Metrics.sendBehavioralMetric,
340
- BEHAVIORAL_METRICS.ADHOC_MEETING_SUCCESS,
341
- );
535
+ assert.calledWith(Metrics.sendBehavioralMetric, BEHAVIORAL_METRICS.ADHOC_MEETING_SUCCESS);
342
536
  });
343
537
  });
344
538
  });
@@ -8,9 +8,7 @@ import MockWebex from '@webex/test-helper-mock-webex';
8
8
  import Device from '@webex/internal-plugin-device';
9
9
  import Mercury from '@webex/internal-plugin-mercury';
10
10
  import Meetings from '@webex/plugin-meetings/src/meetings';
11
- import {
12
- _LOCUS_ID_
13
- } from '@webex/plugin-meetings/src/constants';
11
+ import {_LOCUS_ID_} from '@webex/plugin-meetings/src/constants';
14
12
 
15
13
  import MeetingInfoRequest from '../../../../src/meeting-info/request';
16
14
 
@@ -24,22 +22,22 @@ describe('plugin-meetings', () => {
24
22
  children: {
25
23
  device: Device,
26
24
  mercury: Mercury,
27
- meetings: Meetings
28
- }
25
+ meetings: Meetings,
26
+ },
29
27
  });
30
28
 
31
29
  Object.assign(webex.internal, {
32
30
  device: {
33
31
  deviceType: 'FAKE_DEVICE',
34
32
  register: sinon.stub().returns(Promise.resolve()),
35
- unregister: sinon.stub().returns(Promise.resolve())
33
+ unregister: sinon.stub().returns(Promise.resolve()),
36
34
  },
37
35
  mercury: {
38
36
  connect: sinon.stub().returns(Promise.resolve()),
39
37
  disconnect: sinon.stub().returns(Promise.resolve()),
40
38
  on: () => {},
41
- off: () => {}
42
- }
39
+ off: () => {},
40
+ },
43
41
  });
44
42
 
45
43
  meetingInfoRequest = new MeetingInfoRequest(webex);
@@ -56,7 +54,7 @@ describe('plugin-meetings', () => {
56
54
  it('Should call request with valid parameter', () => {
57
55
  meetingInfoRequest.fetchMeetingInfo({
58
56
  type: _LOCUS_ID_,
59
- destination: 'locus_url'
57
+ destination: 'locus_url',
60
58
  });
61
59
 
62
60
  assert.calledWith(webex.request, {method: 'PUT', uri: 'locus_url/meetingInfo'});
@@ -5,31 +5,30 @@ import MeetingInfoUtil from '@webex/plugin-meetings/src/meeting-info/util';
5
5
  describe('plugin-meetings', () => {
6
6
  describe('meeting-info#util', () => {
7
7
  describe('#generateOptions()', () => {
8
- it('should resolve with a \'wasHydraPerson\' key:value when provided a hydra person Id', () => {
8
+ it("should resolve with a 'wasHydraPerson' key:value when provided a hydra person Id", () => {
9
9
  const getSipUriFromHydraPersonId = sinon
10
10
  .stub(MeetingInfoUtil, 'getSipUriFromHydraPersonId')
11
11
  .resolves('example-destination');
12
12
 
13
- const isConversationUrl = sinon
14
- .stub(MeetingInfoUtil, 'isConversationUrl')
15
- .returns(false);
13
+ const isConversationUrl = sinon.stub(MeetingInfoUtil, 'isConversationUrl').returns(false);
16
14
 
17
15
  return MeetingInfoUtil.generateOptions({
18
- destination: 'Y2lzY29zcGFyazovL3VzL1BFT1BMRS81NTU1NTU1NS01NTU1LTU1NTUtODU1NS01NTU1NTU1NTU1NTU='
19
- })
20
- .then(({wasHydraPerson}) => {
21
- assert.isTrue(wasHydraPerson);
16
+ destination:
17
+ 'Y2lzY29zcGFyazovL3VzL1BFT1BMRS81NTU1NTU1NS01NTU1LTU1NTUtODU1NS01NTU1NTU1NTU1NTU=',
18
+ }).then(({wasHydraPerson}) => {
19
+ assert.isTrue(wasHydraPerson);
22
20
 
23
- getSipUriFromHydraPersonId.restore();
24
- isConversationUrl.restore();
25
- });
21
+ getSipUriFromHydraPersonId.restore();
22
+ isConversationUrl.restore();
23
+ });
26
24
  });
27
25
  });
28
26
 
29
27
  describe('#getHydraId()', () => {
30
28
  it('should provide the clusterId of a given roomId', () => {
31
29
  // US Cluster fake roomId.
32
- const roomId = 'Y2lzY29zcGFyazovL3VzL1JPT00vYzEwODQ5YzAtNTZlMy0yMmViLWE4Y2ItZTllNzcwN2JjY2I4';
30
+ const roomId =
31
+ 'Y2lzY29zcGFyazovL3VzL1JPT00vYzEwODQ5YzAtNTZlMy0yMmViLWE4Y2ItZTllNzcwN2JjY2I4';
33
32
 
34
33
  assert.equal(MeetingInfoUtil.getHydraId(roomId).cluster, 'us');
35
34
  });