@webex/plugin-meetings 3.0.0-beta.10 → 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 (512) 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 +5 -26
  30. package/dist/common/errors/captcha-error.js.map +1 -1
  31. package/dist/common/errors/intent-to-join.js +5 -26
  32. package/dist/common/errors/intent-to-join.js.map +1 -1
  33. package/dist/common/errors/join-meeting.js +6 -27
  34. package/dist/common/errors/join-meeting.js.map +1 -1
  35. package/dist/common/errors/media.js +5 -26
  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 +5 -26
  40. package/dist/common/errors/password-error.js.map +1 -1
  41. package/dist/common/errors/permission.js +4 -25
  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 +5 -26
  46. package/dist/common/errors/reconnection.js.map +1 -1
  47. package/dist/common/errors/stats.js +5 -26
  48. package/dist/common/errors/stats.js.map +1 -1
  49. package/dist/common/errors/webex-errors.js +6 -41
  50. package/dist/common/errors/webex-errors.js.map +1 -1
  51. package/dist/common/errors/webex-meetings-error.js +1 -24
  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 +35 -61
  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 +6 -6
  70. package/dist/config.js.map +1 -1
  71. package/dist/constants.js +173 -52
  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 +327 -211
  94. package/dist/locus-info/index.js.map +1 -1
  95. package/dist/locus-info/infoUtils.js +0 -38
  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 +88 -123
  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 +62 -147
  104. package/dist/media/index.js.map +1 -1
  105. package/dist/media/properties.js +71 -117
  106. package/dist/media/properties.js.map +1 -1
  107. package/dist/media/util.js +2 -9
  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 +2396 -2388
  114. package/dist/meeting/index.js.map +1 -1
  115. package/dist/meeting/muteState.js +252 -113
  116. package/dist/meeting/muteState.js.map +1 -1
  117. package/dist/meeting/request.js +318 -283
  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 +58 -217
  124. package/dist/meeting/util.js.map +1 -1
  125. package/dist/meeting-info/collection.js +3 -25
  126. package/dist/meeting-info/collection.js.map +1 -1
  127. package/dist/meeting-info/index.js +10 -33
  128. package/dist/meeting-info/index.js.map +1 -1
  129. package/dist/meeting-info/meeting-info-v2.js +263 -282
  130. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  131. package/dist/meeting-info/request.js +1 -16
  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 +24 -20
  138. package/dist/meetings/collection.js.map +1 -1
  139. package/dist/meetings/index.js +675 -593
  140. package/dist/meetings/index.js.map +1 -1
  141. package/dist/meetings/request.js +23 -42
  142. package/dist/meetings/request.js.map +1 -1
  143. package/dist/meetings/util.js +177 -155
  144. package/dist/meetings/util.js.map +1 -1
  145. package/dist/member/index.js +80 -88
  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 -69
  150. package/dist/member/util.js.map +1 -1
  151. package/dist/members/collection.js +12 -12
  152. package/dist/members/collection.js.map +1 -1
  153. package/dist/members/index.js +162 -204
  154. package/dist/members/index.js.map +1 -1
  155. package/dist/members/request.js +58 -53
  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 +61 -161
  166. package/dist/metrics/index.js.map +1 -1
  167. package/dist/multistream/mediaRequestManager.js +167 -50
  168. package/dist/multistream/mediaRequestManager.js.map +1 -1
  169. package/dist/multistream/receiveSlot.js +58 -65
  170. package/dist/multistream/receiveSlot.js.map +1 -1
  171. package/dist/multistream/receiveSlotManager.js +74 -93
  172. package/dist/multistream/receiveSlotManager.js.map +1 -1
  173. package/dist/multistream/remoteMedia.js +55 -74
  174. package/dist/multistream/remoteMedia.js.map +1 -1
  175. package/dist/multistream/remoteMediaGroup.js +6 -40
  176. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  177. package/dist/multistream/remoteMediaManager.js +466 -442
  178. package/dist/multistream/remoteMediaManager.js.map +1 -1
  179. package/dist/networkQualityMonitor/index.js +32 -59
  180. package/dist/networkQualityMonitor/index.js.map +1 -1
  181. package/dist/personal-meeting-room/index.js +10 -45
  182. package/dist/personal-meeting-room/index.js.map +1 -1
  183. package/dist/personal-meeting-room/request.js +2 -33
  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 +190 -199
  188. package/dist/reachability/index.js.map +1 -1
  189. package/dist/reachability/request.js +14 -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 +326 -465
  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 +38 -67
  206. package/dist/roap/index.js.map +1 -1
  207. package/dist/roap/request.js +143 -134
  208. package/dist/roap/request.js.map +1 -1
  209. package/dist/roap/turnDiscovery.js +149 -101
  210. package/dist/roap/turnDiscovery.js.map +1 -1
  211. package/dist/statsAnalyzer/global.js +1 -95
  212. package/dist/statsAnalyzer/global.js.map +1 -1
  213. package/dist/statsAnalyzer/index.js +369 -461
  214. package/dist/statsAnalyzer/index.js.map +1 -1
  215. package/dist/statsAnalyzer/mqaUtil.js +144 -94
  216. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  217. package/dist/transcription/index.js +13 -45
  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 +28 -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.ts +9 -6
  341. package/src/common/collection.ts +3 -1
  342. package/src/common/errors/captcha-error.ts +6 -6
  343. package/src/common/errors/intent-to-join.ts +6 -6
  344. package/src/common/errors/join-meeting.ts +12 -8
  345. package/src/common/errors/media.ts +6 -6
  346. package/src/common/errors/parameter.ts +9 -6
  347. package/src/common/errors/password-error.ts +6 -6
  348. package/src/common/errors/permission.ts +5 -5
  349. package/src/common/errors/reconnection.ts +6 -6
  350. package/src/common/errors/stats.ts +6 -6
  351. package/src/common/errors/webex-errors.ts +7 -5
  352. package/src/common/errors/webex-meetings-error.ts +1 -1
  353. package/src/common/events/events-scope.ts +5 -1
  354. package/src/common/events/events.ts +5 -1
  355. package/src/common/events/trigger-proxy.ts +8 -3
  356. package/src/common/events/util.ts +1 -2
  357. package/src/common/logs/logger-proxy.ts +21 -10
  358. package/src/common/logs/request.ts +11 -8
  359. package/src/config.ts +16 -12
  360. package/src/constants.ts +119 -6
  361. package/src/controls-options-manager/constants.ts +5 -0
  362. package/src/controls-options-manager/enums.ts +16 -0
  363. package/src/controls-options-manager/index.ts +278 -0
  364. package/src/controls-options-manager/types.ts +49 -0
  365. package/src/controls-options-manager/util.ts +229 -0
  366. package/src/index.ts +33 -0
  367. package/src/locus-info/controlsUtils.ts +91 -24
  368. package/src/locus-info/fullState.ts +15 -11
  369. package/src/locus-info/hostUtils.ts +4 -3
  370. package/src/locus-info/index.ts +270 -54
  371. package/src/locus-info/infoUtils.ts +12 -4
  372. package/src/locus-info/mediaSharesUtils.ts +4 -4
  373. package/src/locus-info/parser.ts +46 -68
  374. package/src/locus-info/selfUtils.ts +187 -56
  375. package/src/media/index.ts +142 -172
  376. package/src/media/properties.ts +43 -36
  377. package/src/media/util.ts +1 -1
  378. package/src/mediaQualityMetrics/config.ts +380 -378
  379. package/src/meeting/in-meeting-actions.ts +123 -3
  380. package/src/meeting/index.ts +2617 -1545
  381. package/src/meeting/muteState.ts +271 -68
  382. package/src/meeting/request.ts +251 -132
  383. package/src/meeting/request.type.ts +13 -0
  384. package/src/meeting/state.ts +45 -30
  385. package/src/meeting/util.ts +119 -110
  386. package/src/meeting-info/collection.ts +2 -1
  387. package/src/meeting-info/index.ts +32 -30
  388. package/src/meeting-info/meeting-info-v2.ts +181 -109
  389. package/src/meeting-info/request.ts +9 -3
  390. package/src/meeting-info/util.ts +54 -46
  391. package/src/meeting-info/utilv2.ts +70 -55
  392. package/src/meetings/collection.ts +21 -1
  393. package/src/meetings/index.ts +749 -437
  394. package/src/meetings/request.ts +29 -25
  395. package/src/meetings/util.ts +122 -33
  396. package/src/member/index.ts +86 -49
  397. package/src/member/types.ts +24 -0
  398. package/src/member/util.ts +92 -13
  399. package/src/members/collection.ts +8 -1
  400. package/src/members/index.ts +281 -129
  401. package/src/members/request.ts +87 -14
  402. package/src/members/types.ts +28 -0
  403. package/src/members/util.ts +140 -49
  404. package/src/metrics/config.ts +256 -90
  405. package/src/metrics/constants.ts +1 -6
  406. package/src/metrics/index.ts +96 -96
  407. package/src/multistream/mediaRequestManager.ts +203 -45
  408. package/src/multistream/receiveSlot.ts +69 -26
  409. package/src/multistream/receiveSlotManager.ts +62 -38
  410. package/src/multistream/remoteMedia.ts +30 -4
  411. package/src/multistream/remoteMediaGroup.ts +4 -3
  412. package/src/multistream/remoteMediaManager.ts +230 -66
  413. package/src/networkQualityMonitor/index.ts +24 -27
  414. package/src/personal-meeting-room/index.ts +12 -16
  415. package/src/personal-meeting-room/request.ts +10 -3
  416. package/src/personal-meeting-room/util.ts +3 -3
  417. package/src/reachability/index.ts +131 -79
  418. package/src/reachability/request.ts +43 -34
  419. package/src/reactions/constants.ts +4 -0
  420. package/src/reactions/reactions.ts +104 -0
  421. package/src/reactions/reactions.type.ts +62 -0
  422. package/src/reconnection-manager/index.ts +193 -111
  423. package/src/recording-controller/enums.ts +8 -0
  424. package/src/recording-controller/index.ts +315 -0
  425. package/src/recording-controller/util.ts +58 -0
  426. package/src/roap/index.ts +63 -51
  427. package/src/roap/request.ts +86 -53
  428. package/src/roap/turnDiscovery.ts +105 -46
  429. package/src/statsAnalyzer/global.ts +8 -104
  430. package/src/statsAnalyzer/index.ts +624 -376
  431. package/src/statsAnalyzer/mqaUtil.ts +203 -90
  432. package/src/transcription/index.ts +34 -32
  433. package/test/integration/spec/converged-space-meetings.js +177 -0
  434. package/test/integration/spec/journey.js +666 -464
  435. package/test/integration/spec/space-meeting.js +320 -204
  436. package/test/integration/spec/transcription.js +7 -8
  437. package/test/unit/spec/annotation/index.ts +435 -0
  438. package/test/unit/spec/breakouts/breakout.ts +184 -0
  439. package/test/unit/spec/breakouts/collection.ts +15 -0
  440. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  441. package/test/unit/spec/breakouts/events.ts +77 -0
  442. package/test/unit/spec/breakouts/index.ts +1504 -0
  443. package/test/unit/spec/breakouts/request.ts +104 -0
  444. package/test/unit/spec/breakouts/utils.js +72 -0
  445. package/test/unit/spec/common/browser-detection.js +9 -28
  446. package/test/unit/spec/controls-options-manager/index.js +287 -0
  447. package/test/unit/spec/controls-options-manager/util.js +403 -0
  448. package/test/unit/spec/fixture/locus.js +92 -90
  449. package/test/unit/spec/locus-info/controlsUtils.js +177 -32
  450. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  451. package/test/unit/spec/locus-info/index.js +493 -3
  452. package/test/unit/spec/locus-info/infoUtils.js +26 -33
  453. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  454. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  455. package/test/unit/spec/locus-info/parser.js +3 -9
  456. package/test/unit/spec/locus-info/selfConstant.js +110 -103
  457. package/test/unit/spec/locus-info/selfUtils.js +236 -12
  458. package/test/unit/spec/media/index.ts +104 -8
  459. package/test/unit/spec/media/properties.ts +9 -9
  460. package/test/unit/spec/meeting/in-meeting-actions.ts +58 -3
  461. package/test/unit/spec/meeting/index.js +2649 -837
  462. package/test/unit/spec/meeting/muteState.js +368 -70
  463. package/test/unit/spec/meeting/request.js +217 -43
  464. package/test/unit/spec/meeting/utils.js +146 -165
  465. package/test/unit/spec/meeting-info/meetinginfov2.js +268 -74
  466. package/test/unit/spec/meeting-info/request.js +7 -9
  467. package/test/unit/spec/meeting-info/util.js +11 -12
  468. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  469. package/test/unit/spec/meetings/collection.js +15 -1
  470. package/test/unit/spec/meetings/index.js +1052 -329
  471. package/test/unit/spec/meetings/utils.js +163 -14
  472. package/test/unit/spec/member/index.js +24 -1
  473. package/test/unit/spec/member/util.js +359 -32
  474. package/test/unit/spec/members/index.js +402 -54
  475. package/test/unit/spec/members/request.js +76 -20
  476. package/test/unit/spec/members/utils.js +191 -4
  477. package/test/unit/spec/metrics/index.js +46 -20
  478. package/test/unit/spec/multistream/mediaRequestManager.ts +650 -105
  479. package/test/unit/spec/multistream/receiveSlot.ts +76 -17
  480. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  481. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  482. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  483. package/test/unit/spec/multistream/remoteMediaManager.ts +549 -65
  484. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  485. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  486. package/test/unit/spec/reachability/index.ts +176 -27
  487. package/test/unit/spec/reachability/request.js +66 -0
  488. package/test/unit/spec/reconnection-manager/index.js +62 -31
  489. package/test/unit/spec/recording-controller/index.js +231 -0
  490. package/test/unit/spec/recording-controller/util.js +102 -0
  491. package/test/unit/spec/roap/index.ts +21 -16
  492. package/test/unit/spec/roap/request.ts +217 -0
  493. package/test/unit/spec/roap/turnDiscovery.ts +93 -49
  494. package/test/unit/spec/stats-analyzer/index.js +116 -60
  495. package/test/utils/cmr.js +44 -42
  496. package/test/utils/constants.js +9 -0
  497. package/test/utils/integrationTestUtils.js +64 -0
  498. package/test/utils/testUtils.js +63 -99
  499. package/test/utils/webex-config.js +22 -18
  500. package/test/utils/webex-test-users.js +57 -50
  501. package/tsconfig.json +6 -0
  502. package/dist/media/internal-media-core-wrapper.js +0 -22
  503. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  504. package/dist/meeting/effectsState.js +0 -334
  505. package/dist/meeting/effectsState.js.map +0 -1
  506. package/dist/multistream/multistreamMedia.js +0 -116
  507. package/dist/multistream/multistreamMedia.js.map +0 -1
  508. package/src/index.js +0 -15
  509. package/src/media/internal-media-core-wrapper.ts +0 -9
  510. package/src/meeting/effectsState.ts +0 -211
  511. package/src/multistream/multistreamMedia.ts +0 -92
  512. package/test/unit/spec/meeting/effectsState.js +0 -291
@@ -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
  });