@webex/plugin-meetings 3.0.0-beta.2 → 3.0.0-beta.200

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 (576) hide show
  1. package/README.md +45 -7
  2. package/UPGRADING.md +9 -9
  3. package/browsers.js +19 -24
  4. package/dist/annotation/annotation.types.js +7 -0
  5. package/dist/annotation/annotation.types.js.map +1 -0
  6. package/dist/annotation/constants.js +49 -0
  7. package/dist/annotation/constants.js.map +1 -0
  8. package/dist/annotation/index.js +342 -0
  9. package/dist/annotation/index.js.map +1 -0
  10. package/dist/breakouts/breakout.js +216 -0
  11. package/dist/breakouts/breakout.js.map +1 -0
  12. package/dist/breakouts/collection.js +23 -0
  13. package/dist/breakouts/collection.js.map +1 -0
  14. package/dist/breakouts/edit-lock-error.js +52 -0
  15. package/dist/breakouts/edit-lock-error.js.map +1 -0
  16. package/dist/breakouts/events.js +45 -0
  17. package/dist/breakouts/events.js.map +1 -0
  18. package/dist/breakouts/index.js +1048 -0
  19. package/dist/breakouts/index.js.map +1 -0
  20. package/dist/breakouts/request.js +78 -0
  21. package/dist/breakouts/request.js.map +1 -0
  22. package/dist/breakouts/utils.js +67 -0
  23. package/dist/breakouts/utils.js.map +1 -0
  24. package/dist/common/browser-detection.js +1 -20
  25. package/dist/common/browser-detection.js.map +1 -1
  26. package/dist/common/collection.js +5 -20
  27. package/dist/common/collection.js.map +1 -1
  28. package/dist/common/config.js +0 -7
  29. package/dist/common/config.js.map +1 -1
  30. package/dist/common/errors/captcha-error.js +10 -24
  31. package/dist/common/errors/captcha-error.js.map +1 -1
  32. package/dist/common/errors/intent-to-join.js +11 -24
  33. package/dist/common/errors/intent-to-join.js.map +1 -1
  34. package/dist/common/errors/join-meeting.js +12 -25
  35. package/dist/common/errors/join-meeting.js.map +1 -1
  36. package/dist/common/errors/media.js +10 -24
  37. package/dist/common/errors/media.js.map +1 -1
  38. package/dist/common/errors/parameter.js +5 -33
  39. package/dist/common/errors/parameter.js.map +1 -1
  40. package/dist/common/errors/password-error.js +10 -24
  41. package/dist/common/errors/password-error.js.map +1 -1
  42. package/dist/common/errors/permission.js +9 -23
  43. package/dist/common/errors/permission.js.map +1 -1
  44. package/dist/common/errors/reconnection-in-progress.js +0 -17
  45. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  46. package/dist/common/errors/reconnection.js +10 -24
  47. package/dist/common/errors/reconnection.js.map +1 -1
  48. package/dist/common/errors/stats.js +10 -24
  49. package/dist/common/errors/stats.js.map +1 -1
  50. package/dist/common/errors/webex-errors.js +9 -43
  51. package/dist/common/errors/webex-errors.js.map +1 -1
  52. package/dist/common/errors/webex-meetings-error.js +5 -25
  53. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  54. package/dist/common/events/events-scope.js +0 -22
  55. package/dist/common/events/events-scope.js.map +1 -1
  56. package/dist/common/events/events.js +0 -23
  57. package/dist/common/events/events.js.map +1 -1
  58. package/dist/common/events/trigger-proxy.js +0 -12
  59. package/dist/common/events/trigger-proxy.js.map +1 -1
  60. package/dist/common/events/util.js +0 -15
  61. package/dist/common/events/util.js.map +1 -1
  62. package/dist/common/logs/logger-config.js +0 -4
  63. package/dist/common/logs/logger-config.js.map +1 -1
  64. package/dist/common/logs/logger-proxy.js +1 -8
  65. package/dist/common/logs/logger-proxy.js.map +1 -1
  66. package/dist/common/logs/request.js +37 -60
  67. package/dist/common/logs/request.js.map +1 -1
  68. package/dist/common/queue.js +28 -23
  69. package/dist/common/queue.js.map +1 -1
  70. package/dist/config.js +8 -13
  71. package/dist/config.js.map +1 -1
  72. package/dist/constants.js +250 -66
  73. package/dist/constants.js.map +1 -1
  74. package/dist/controls-options-manager/constants.js +14 -0
  75. package/dist/controls-options-manager/constants.js.map +1 -0
  76. package/dist/controls-options-manager/enums.js +27 -0
  77. package/dist/controls-options-manager/enums.js.map +1 -0
  78. package/dist/controls-options-manager/index.js +297 -0
  79. package/dist/controls-options-manager/index.js.map +1 -0
  80. package/dist/controls-options-manager/types.js +7 -0
  81. package/dist/controls-options-manager/types.js.map +1 -0
  82. package/dist/controls-options-manager/util.js +319 -0
  83. package/dist/controls-options-manager/util.js.map +1 -0
  84. package/dist/index.js +108 -17
  85. package/dist/index.js.map +1 -1
  86. package/dist/interpretation/collection.js +23 -0
  87. package/dist/interpretation/collection.js.map +1 -0
  88. package/dist/interpretation/index.js +366 -0
  89. package/dist/interpretation/index.js.map +1 -0
  90. package/dist/interpretation/siLanguage.js +25 -0
  91. package/dist/interpretation/siLanguage.js.map +1 -0
  92. package/dist/locus-info/controlsUtils.js +101 -29
  93. package/dist/locus-info/controlsUtils.js.map +1 -1
  94. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  95. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  96. package/dist/locus-info/fullState.js +0 -15
  97. package/dist/locus-info/fullState.js.map +1 -1
  98. package/dist/locus-info/hostUtils.js +4 -12
  99. package/dist/locus-info/hostUtils.js.map +1 -1
  100. package/dist/locus-info/index.js +532 -240
  101. package/dist/locus-info/index.js.map +1 -1
  102. package/dist/locus-info/infoUtils.js +3 -37
  103. package/dist/locus-info/infoUtils.js.map +1 -1
  104. package/dist/locus-info/mediaSharesUtils.js +54 -38
  105. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  106. package/dist/locus-info/parser.js +284 -154
  107. package/dist/locus-info/parser.js.map +1 -1
  108. package/dist/locus-info/selfUtils.js +110 -92
  109. package/dist/locus-info/selfUtils.js.map +1 -1
  110. package/dist/media/index.js +95 -226
  111. package/dist/media/index.js.map +1 -1
  112. package/dist/media/properties.js +99 -194
  113. package/dist/media/properties.js.map +1 -1
  114. package/dist/media/util.js +2 -9
  115. package/dist/media/util.js.map +1 -1
  116. package/dist/mediaQualityMetrics/config.js +505 -495
  117. package/dist/mediaQualityMetrics/config.js.map +1 -1
  118. package/dist/meeting/in-meeting-actions.js +83 -14
  119. package/dist/meeting/in-meeting-actions.js.map +1 -1
  120. package/dist/meeting/index.js +3478 -3563
  121. package/dist/meeting/index.js.map +1 -1
  122. package/dist/meeting/locusMediaRequest.js +291 -0
  123. package/dist/meeting/locusMediaRequest.js.map +1 -0
  124. package/dist/meeting/muteState.js +247 -183
  125. package/dist/meeting/muteState.js.map +1 -1
  126. package/dist/meeting/request.js +344 -344
  127. package/dist/meeting/request.js.map +1 -1
  128. package/dist/meeting/request.type.js +7 -0
  129. package/dist/meeting/request.type.js.map +1 -0
  130. package/dist/meeting/state.js +21 -31
  131. package/dist/meeting/state.js.map +1 -1
  132. package/dist/meeting/util.js +529 -588
  133. package/dist/meeting/util.js.map +1 -1
  134. package/dist/meeting-info/collection.js +6 -25
  135. package/dist/meeting-info/collection.js.map +1 -1
  136. package/dist/meeting-info/index.js +62 -39
  137. package/dist/meeting-info/index.js.map +1 -1
  138. package/dist/meeting-info/meeting-info-v2.js +328 -283
  139. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  140. package/dist/meeting-info/request.js +3 -15
  141. package/dist/meeting-info/request.js.map +1 -1
  142. package/dist/meeting-info/util.js +98 -183
  143. package/dist/meeting-info/util.js.map +1 -1
  144. package/dist/meeting-info/utilv2.js +156 -232
  145. package/dist/meeting-info/utilv2.js.map +1 -1
  146. package/dist/meetings/collection.js +26 -19
  147. package/dist/meetings/collection.js.map +1 -1
  148. package/dist/meetings/index.js +795 -574
  149. package/dist/meetings/index.js.map +1 -1
  150. package/dist/meetings/meetings.types.js +7 -0
  151. package/dist/meetings/meetings.types.js.map +1 -0
  152. package/dist/meetings/request.js +26 -41
  153. package/dist/meetings/request.js.map +1 -1
  154. package/dist/meetings/util.js +186 -155
  155. package/dist/meetings/util.js.map +1 -1
  156. package/dist/member/index.js +126 -85
  157. package/dist/member/index.js.map +1 -1
  158. package/dist/member/types.js +25 -0
  159. package/dist/member/types.js.map +1 -0
  160. package/dist/member/util.js +147 -88
  161. package/dist/member/util.js.map +1 -1
  162. package/dist/members/collection.js +13 -12
  163. package/dist/members/collection.js.map +1 -1
  164. package/dist/members/index.js +178 -204
  165. package/dist/members/index.js.map +1 -1
  166. package/dist/members/request.js +113 -68
  167. package/dist/members/request.js.map +1 -1
  168. package/dist/members/types.js +15 -0
  169. package/dist/members/types.js.map +1 -0
  170. package/dist/members/util.js +314 -260
  171. package/dist/members/util.js.map +1 -1
  172. package/dist/metrics/constants.js +4 -7
  173. package/dist/metrics/constants.js.map +1 -1
  174. package/dist/metrics/index.js +11 -558
  175. package/dist/metrics/index.js.map +1 -1
  176. package/dist/multistream/mediaRequestManager.js +264 -50
  177. package/dist/multistream/mediaRequestManager.js.map +1 -1
  178. package/dist/multistream/receiveSlot.js +58 -65
  179. package/dist/multistream/receiveSlot.js.map +1 -1
  180. package/dist/multistream/receiveSlotManager.js +76 -95
  181. package/dist/multistream/receiveSlotManager.js.map +1 -1
  182. package/dist/multistream/remoteMedia.js +62 -76
  183. package/dist/multistream/remoteMedia.js.map +1 -1
  184. package/dist/multistream/remoteMediaGroup.js +66 -43
  185. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  186. package/dist/multistream/remoteMediaManager.js +502 -442
  187. package/dist/multistream/remoteMediaManager.js.map +1 -1
  188. package/dist/networkQualityMonitor/index.js +40 -59
  189. package/dist/networkQualityMonitor/index.js.map +1 -1
  190. package/dist/personal-meeting-room/index.js +21 -45
  191. package/dist/personal-meeting-room/index.js.map +1 -1
  192. package/dist/personal-meeting-room/request.js +1 -31
  193. package/dist/personal-meeting-room/request.js.map +1 -1
  194. package/dist/personal-meeting-room/util.js +0 -13
  195. package/dist/personal-meeting-room/util.js.map +1 -1
  196. package/dist/reachability/index.js +192 -191
  197. package/dist/reachability/index.js.map +1 -1
  198. package/dist/reachability/request.js +15 -23
  199. package/dist/reachability/request.js.map +1 -1
  200. package/dist/reactions/constants.js +13 -0
  201. package/dist/reactions/constants.js.map +1 -0
  202. package/dist/reactions/reactions.js +109 -0
  203. package/dist/reactions/reactions.js.map +1 -0
  204. package/dist/reactions/reactions.type.js +36 -0
  205. package/dist/reactions/reactions.type.js.map +1 -0
  206. package/dist/reconnection-manager/index.js +384 -476
  207. package/dist/reconnection-manager/index.js.map +1 -1
  208. package/dist/recording-controller/enums.js +17 -0
  209. package/dist/recording-controller/enums.js.map +1 -0
  210. package/dist/recording-controller/index.js +363 -0
  211. package/dist/recording-controller/index.js.map +1 -0
  212. package/dist/recording-controller/util.js +64 -0
  213. package/dist/recording-controller/util.js.map +1 -0
  214. package/dist/roap/index.js +58 -91
  215. package/dist/roap/index.js.map +1 -1
  216. package/dist/roap/request.js +137 -135
  217. package/dist/roap/request.js.map +1 -1
  218. package/dist/roap/turnDiscovery.js +148 -100
  219. package/dist/roap/turnDiscovery.js.map +1 -1
  220. package/dist/rtcMetrics/constants.js +12 -0
  221. package/dist/rtcMetrics/constants.js.map +1 -0
  222. package/dist/rtcMetrics/index.js +115 -0
  223. package/dist/rtcMetrics/index.js.map +1 -0
  224. package/dist/statsAnalyzer/global.js +1 -95
  225. package/dist/statsAnalyzer/global.js.map +1 -1
  226. package/dist/statsAnalyzer/index.js +385 -460
  227. package/dist/statsAnalyzer/index.js.map +1 -1
  228. package/dist/statsAnalyzer/mqaUtil.js +143 -87
  229. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  230. package/dist/transcription/index.js +22 -47
  231. package/dist/transcription/index.js.map +1 -1
  232. package/dist/types/annotation/annotation.types.d.ts +42 -0
  233. package/dist/types/annotation/constants.d.ts +31 -0
  234. package/dist/types/annotation/index.d.ts +117 -0
  235. package/dist/types/breakouts/breakout.d.ts +8 -0
  236. package/dist/types/breakouts/collection.d.ts +5 -0
  237. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  238. package/dist/types/breakouts/events.d.ts +8 -0
  239. package/dist/types/breakouts/index.d.ts +5 -0
  240. package/dist/types/breakouts/request.d.ts +22 -0
  241. package/dist/types/breakouts/utils.d.ts +15 -0
  242. package/dist/types/common/browser-detection.d.ts +9 -0
  243. package/dist/types/common/collection.d.ts +48 -0
  244. package/dist/types/common/config.d.ts +2 -0
  245. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  246. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  247. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  248. package/dist/types/common/errors/media.d.ts +15 -0
  249. package/dist/types/common/errors/parameter.d.ts +15 -0
  250. package/dist/types/common/errors/password-error.d.ts +15 -0
  251. package/dist/types/common/errors/permission.d.ts +14 -0
  252. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  253. package/dist/types/common/errors/reconnection.d.ts +15 -0
  254. package/dist/types/common/errors/stats.d.ts +15 -0
  255. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  256. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  257. package/dist/types/common/events/events-scope.d.ts +17 -0
  258. package/dist/types/common/events/events.d.ts +12 -0
  259. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  260. package/dist/types/common/events/util.d.ts +2 -0
  261. package/dist/types/common/logs/logger-config.d.ts +2 -0
  262. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  263. package/dist/types/common/logs/request.d.ts +34 -0
  264. package/dist/types/common/queue.d.ts +34 -0
  265. package/dist/types/config.d.ts +72 -0
  266. package/dist/types/constants.d.ts +1016 -0
  267. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  268. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  269. package/dist/types/controls-options-manager/index.d.ts +136 -0
  270. package/dist/types/controls-options-manager/types.d.ts +43 -0
  271. package/dist/types/controls-options-manager/util.d.ts +1 -0
  272. package/dist/types/index.d.ts +7 -0
  273. package/dist/types/interpretation/collection.d.ts +5 -0
  274. package/dist/types/interpretation/index.d.ts +5 -0
  275. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  276. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  277. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  278. package/dist/types/locus-info/fullState.d.ts +2 -0
  279. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  280. package/dist/types/locus-info/index.d.ts +322 -0
  281. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  282. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  283. package/dist/types/locus-info/parser.d.ts +271 -0
  284. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  285. package/dist/types/media/index.d.ts +34 -0
  286. package/dist/types/media/properties.d.ts +93 -0
  287. package/dist/types/media/util.d.ts +2 -0
  288. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  289. package/dist/types/meeting/in-meeting-actions.d.ts +153 -0
  290. package/dist/types/meeting/index.d.ts +1471 -0
  291. package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
  292. package/dist/types/meeting/muteState.d.ts +184 -0
  293. package/dist/types/meeting/request.d.ts +257 -0
  294. package/dist/types/meeting/request.type.d.ts +11 -0
  295. package/dist/types/meeting/state.d.ts +9 -0
  296. package/dist/types/meeting/util.d.ts +78 -0
  297. package/dist/types/meeting-info/collection.d.ts +20 -0
  298. package/dist/types/meeting-info/index.d.ts +62 -0
  299. package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
  300. package/dist/types/meeting-info/request.d.ts +22 -0
  301. package/dist/types/meeting-info/util.d.ts +2 -0
  302. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  303. package/dist/types/meetings/collection.d.ts +31 -0
  304. package/dist/types/meetings/index.d.ts +367 -0
  305. package/dist/types/meetings/meetings.types.d.ts +4 -0
  306. package/dist/types/meetings/request.d.ts +27 -0
  307. package/dist/types/meetings/util.d.ts +18 -0
  308. package/dist/types/member/index.d.ts +159 -0
  309. package/dist/types/member/types.d.ts +32 -0
  310. package/dist/types/member/util.d.ts +2 -0
  311. package/dist/types/members/collection.d.ts +29 -0
  312. package/dist/types/members/index.d.ts +353 -0
  313. package/dist/types/members/request.d.ts +114 -0
  314. package/dist/types/members/types.d.ts +24 -0
  315. package/dist/types/members/util.d.ts +210 -0
  316. package/dist/types/metrics/constants.d.ts +55 -0
  317. package/dist/types/metrics/index.d.ts +45 -0
  318. package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
  319. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  320. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  321. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  322. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  323. package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
  324. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  325. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  326. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  327. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  328. package/dist/types/reachability/index.d.ts +152 -0
  329. package/dist/types/reachability/request.d.ts +37 -0
  330. package/dist/types/reactions/constants.d.ts +3 -0
  331. package/dist/types/reactions/reactions.d.ts +4 -0
  332. package/dist/types/reactions/reactions.type.d.ts +52 -0
  333. package/dist/types/reconnection-manager/index.d.ts +126 -0
  334. package/dist/types/recording-controller/enums.d.ts +7 -0
  335. package/dist/types/recording-controller/index.d.ts +208 -0
  336. package/dist/types/recording-controller/util.d.ts +14 -0
  337. package/dist/types/roap/index.d.ts +77 -0
  338. package/dist/types/roap/request.d.ts +36 -0
  339. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  340. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  341. package/dist/types/rtcMetrics/index.d.ts +46 -0
  342. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  343. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  344. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  345. package/dist/types/transcription/index.d.ts +64 -0
  346. package/internal-README.md +7 -6
  347. package/package.json +29 -21
  348. package/src/annotation/annotation.types.ts +50 -0
  349. package/src/annotation/constants.ts +36 -0
  350. package/src/annotation/index.ts +328 -0
  351. package/src/breakouts/README.md +220 -0
  352. package/src/breakouts/breakout.ts +188 -0
  353. package/src/breakouts/collection.ts +19 -0
  354. package/src/breakouts/edit-lock-error.ts +25 -0
  355. package/src/breakouts/events.ts +56 -0
  356. package/src/breakouts/index.ts +925 -0
  357. package/src/breakouts/request.ts +55 -0
  358. package/src/breakouts/utils.ts +57 -0
  359. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  360. package/src/common/collection.ts +9 -7
  361. package/src/common/{config.js → config.ts} +1 -1
  362. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  363. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  364. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  365. package/src/common/errors/{media.js → media.ts} +11 -7
  366. package/src/common/errors/parameter.ts +11 -7
  367. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  368. package/src/common/errors/{permission.js → permission.ts} +10 -6
  369. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  370. package/src/common/errors/{stats.js → stats.ts} +11 -7
  371. package/src/common/errors/{webex-errors.js → webex-errors.ts} +14 -9
  372. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  373. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  374. package/src/common/events/{events.js → events.ts} +5 -1
  375. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  376. package/src/common/events/{util.js → util.ts} +2 -3
  377. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  378. package/src/common/logs/logger-proxy.ts +44 -0
  379. package/src/common/logs/{request.js → request.ts} +22 -9
  380. package/src/common/queue.ts +22 -9
  381. package/src/{config.js → config.ts} +17 -17
  382. package/src/constants.ts +197 -22
  383. package/src/controls-options-manager/constants.ts +5 -0
  384. package/src/controls-options-manager/enums.ts +18 -0
  385. package/src/controls-options-manager/index.ts +278 -0
  386. package/src/controls-options-manager/types.ts +59 -0
  387. package/src/controls-options-manager/util.ts +300 -0
  388. package/src/index.ts +39 -0
  389. package/src/interpretation/README.md +60 -0
  390. package/src/interpretation/collection.ts +19 -0
  391. package/src/interpretation/index.ts +332 -0
  392. package/src/interpretation/siLanguage.ts +18 -0
  393. package/src/locus-info/controlsUtils.ts +222 -0
  394. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  395. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  396. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  397. package/src/locus-info/{index.js → index.ts} +518 -111
  398. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  399. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +65 -17
  400. package/src/locus-info/{parser.js → parser.ts} +271 -98
  401. package/src/locus-info/{selfUtils.js → selfUtils.ts} +199 -68
  402. package/src/media/index.ts +456 -0
  403. package/src/media/{properties.js → properties.ts} +80 -102
  404. package/src/media/{util.js → util.ts} +2 -2
  405. package/src/mediaQualityMetrics/config.ts +384 -0
  406. package/src/meeting/in-meeting-actions.ts +171 -3
  407. package/src/meeting/index.ts +7070 -0
  408. package/src/meeting/locusMediaRequest.ts +309 -0
  409. package/src/meeting/muteState.ts +450 -0
  410. package/src/meeting/{request.js → request.ts} +354 -214
  411. package/src/meeting/request.type.ts +13 -0
  412. package/src/meeting/{state.js → state.ts} +50 -35
  413. package/src/meeting/util.ts +615 -0
  414. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  415. package/src/meeting-info/index.ts +183 -0
  416. package/src/meeting-info/meeting-info-v2.ts +407 -0
  417. package/src/meeting-info/{request.js → request.ts} +14 -4
  418. package/src/meeting-info/{util.js → util.ts} +60 -51
  419. package/src/meeting-info/{utilv2.js → utilv2.ts} +77 -60
  420. package/src/meetings/{collection.js → collection.ts} +26 -3
  421. package/src/meetings/index.ts +1467 -0
  422. package/src/meetings/meetings.types.ts +12 -0
  423. package/src/meetings/{request.js → request.ts} +34 -25
  424. package/src/meetings/{util.js → util.ts} +137 -36
  425. package/src/member/{index.js → index.ts} +151 -56
  426. package/src/member/types.ts +38 -0
  427. package/src/member/util.ts +383 -0
  428. package/src/members/{collection.js → collection.ts} +10 -2
  429. package/src/members/{index.js → index.ts} +323 -145
  430. package/src/members/request.ts +255 -0
  431. package/src/members/types.ts +28 -0
  432. package/src/members/util.ts +339 -0
  433. package/src/metrics/{constants.js → constants.ts} +2 -6
  434. package/src/metrics/index.ts +73 -0
  435. package/src/multistream/mediaRequestManager.ts +337 -61
  436. package/src/multistream/receiveSlot.ts +69 -26
  437. package/src/multistream/receiveSlotManager.ts +66 -42
  438. package/src/multistream/remoteMedia.ts +40 -5
  439. package/src/multistream/remoteMediaGroup.ts +63 -3
  440. package/src/multistream/remoteMediaManager.ts +263 -66
  441. package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
  442. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  443. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  444. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  445. package/src/reachability/{index.js → index.ts} +157 -94
  446. package/src/reachability/request.ts +46 -35
  447. package/src/reactions/constants.ts +4 -0
  448. package/src/reactions/reactions.ts +104 -0
  449. package/src/reactions/reactions.type.ts +62 -0
  450. package/src/reconnection-manager/{index.js → index.ts} +254 -136
  451. package/src/recording-controller/enums.ts +8 -0
  452. package/src/recording-controller/index.ts +333 -0
  453. package/src/recording-controller/util.ts +75 -0
  454. package/src/roap/{index.js → index.ts} +86 -78
  455. package/src/roap/request.ts +163 -0
  456. package/src/roap/turnDiscovery.ts +111 -49
  457. package/src/rtcMetrics/constants.ts +3 -0
  458. package/src/rtcMetrics/index.ts +96 -0
  459. package/src/statsAnalyzer/global.ts +37 -0
  460. package/src/statsAnalyzer/index.ts +1272 -0
  461. package/src/statsAnalyzer/mqaUtil.ts +291 -0
  462. package/src/transcription/{index.js → index.ts} +46 -39
  463. package/test/integration/spec/converged-space-meetings.js +233 -0
  464. package/test/integration/spec/journey.js +804 -526
  465. package/test/integration/spec/space-meeting.js +391 -204
  466. package/test/integration/spec/transcription.js +7 -8
  467. package/test/unit/spec/annotation/index.ts +418 -0
  468. package/test/unit/spec/breakouts/breakout.ts +237 -0
  469. package/test/unit/spec/breakouts/collection.ts +15 -0
  470. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  471. package/test/unit/spec/breakouts/events.ts +89 -0
  472. package/test/unit/spec/breakouts/index.ts +1790 -0
  473. package/test/unit/spec/breakouts/request.ts +104 -0
  474. package/test/unit/spec/breakouts/utils.js +72 -0
  475. package/test/unit/spec/common/browser-detection.js +9 -28
  476. package/test/unit/spec/common/queue.js +31 -2
  477. package/test/unit/spec/controls-options-manager/index.js +287 -0
  478. package/test/unit/spec/controls-options-manager/util.js +582 -0
  479. package/test/unit/spec/fixture/locus.js +93 -90
  480. package/test/unit/spec/interpretation/collection.ts +15 -0
  481. package/test/unit/spec/interpretation/index.ts +589 -0
  482. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  483. package/test/unit/spec/locus-info/controlsUtils.js +325 -32
  484. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  485. package/test/unit/spec/locus-info/index.js +1176 -18
  486. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  487. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  488. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  489. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  490. package/test/unit/spec/locus-info/parser.js +65 -31
  491. package/test/unit/spec/locus-info/selfConstant.js +120 -103
  492. package/test/unit/spec/locus-info/selfUtils.js +296 -12
  493. package/test/unit/spec/media/index.ts +162 -68
  494. package/test/unit/spec/media/properties.ts +9 -9
  495. package/test/unit/spec/meeting/in-meeting-actions.ts +82 -3
  496. package/test/unit/spec/meeting/index.js +4569 -1773
  497. package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
  498. package/test/unit/spec/meeting/muteState.js +382 -211
  499. package/test/unit/spec/meeting/request.js +444 -78
  500. package/test/unit/spec/meeting/utils.js +517 -192
  501. package/test/unit/spec/meeting-info/index.js +181 -0
  502. package/test/unit/spec/meeting-info/meetinginfov2.js +481 -76
  503. package/test/unit/spec/meeting-info/request.js +7 -9
  504. package/test/unit/spec/meeting-info/util.js +11 -12
  505. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  506. package/test/unit/spec/meetings/collection.js +15 -1
  507. package/test/unit/spec/meetings/index.js +1254 -330
  508. package/test/unit/spec/meetings/utils.js +220 -14
  509. package/test/unit/spec/member/index.js +58 -5
  510. package/test/unit/spec/member/util.js +494 -26
  511. package/test/unit/spec/members/index.js +423 -55
  512. package/test/unit/spec/members/request.js +228 -40
  513. package/test/unit/spec/members/utils.js +191 -4
  514. package/test/unit/spec/metrics/index.js +12 -66
  515. package/test/unit/spec/multistream/mediaRequestManager.ts +1013 -106
  516. package/test/unit/spec/multistream/receiveSlot.ts +77 -18
  517. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  518. package/test/unit/spec/multistream/remoteMedia.ts +40 -2
  519. package/test/unit/spec/multistream/remoteMediaGroup.ts +271 -5
  520. package/test/unit/spec/multistream/remoteMediaManager.ts +730 -65
  521. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  522. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  523. package/test/unit/spec/reachability/index.ts +176 -27
  524. package/test/unit/spec/reachability/request.js +66 -0
  525. package/test/unit/spec/reconnection-manager/index.js +155 -9
  526. package/test/unit/spec/recording-controller/index.js +307 -0
  527. package/test/unit/spec/recording-controller/util.js +229 -0
  528. package/test/unit/spec/roap/index.ts +28 -52
  529. package/test/unit/spec/roap/request.ts +225 -0
  530. package/test/unit/spec/roap/turnDiscovery.ts +92 -50
  531. package/test/unit/spec/rtcMetrics/index.ts +60 -0
  532. package/test/unit/spec/stats-analyzer/index.js +116 -60
  533. package/test/utils/cmr.js +44 -42
  534. package/test/utils/constants.js +9 -0
  535. package/test/utils/integrationTestUtils.js +46 -0
  536. package/test/utils/testUtils.js +63 -99
  537. package/test/utils/webex-config.js +22 -18
  538. package/test/utils/webex-test-users.js +57 -50
  539. package/tsconfig.json +6 -0
  540. package/dist/media/internal-media-core-wrapper.js +0 -22
  541. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  542. package/dist/meeting/effectsState.js +0 -327
  543. package/dist/meeting/effectsState.js.map +0 -1
  544. package/dist/metrics/config.js +0 -301
  545. package/dist/metrics/config.js.map +0 -1
  546. package/dist/multistream/multistreamMedia.js +0 -116
  547. package/dist/multistream/multistreamMedia.js.map +0 -1
  548. package/dist/peer-connection-manager/util.js +0 -124
  549. package/dist/peer-connection-manager/util.js.map +0 -1
  550. package/src/common/logs/logger-proxy.js +0 -33
  551. package/src/index.js +0 -15
  552. package/src/locus-info/controlsUtils.js +0 -102
  553. package/src/media/index.js +0 -459
  554. package/src/media/internal-media-core-wrapper.ts +0 -9
  555. package/src/mediaQualityMetrics/config.js +0 -382
  556. package/src/meeting/effectsState.js +0 -205
  557. package/src/meeting/index.js +0 -6284
  558. package/src/meeting/muteState.js +0 -318
  559. package/src/meeting/util.js +0 -506
  560. package/src/meeting-info/index.js +0 -131
  561. package/src/meeting-info/meeting-info-v2.js +0 -255
  562. package/src/meetings/index.js +0 -1015
  563. package/src/member/util.js +0 -254
  564. package/src/members/request.js +0 -131
  565. package/src/members/util.js +0 -258
  566. package/src/metrics/config.js +0 -324
  567. package/src/metrics/index.js +0 -530
  568. package/src/multistream/multistreamMedia.ts +0 -92
  569. package/src/peer-connection-manager/util.ts +0 -117
  570. package/src/roap/request.js +0 -127
  571. package/src/statsAnalyzer/global.js +0 -133
  572. package/src/statsAnalyzer/index.js +0 -1006
  573. package/src/statsAnalyzer/mqaUtil.js +0 -173
  574. package/test/unit/spec/meeting/effectsState.js +0 -291
  575. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
  576. /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
+ },
180
262
  });
181
263
  assert.deepEqual(result, requestResponse);
182
264
  assert(Metrics.sendBehavioralMetric.calledOnce);
183
265
  assert.calledWith(
184
266
  Metrics.sendBehavioralMetric,
185
- BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_SUCCESS,
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
+ },
289
+ });
290
+ assert.deepEqual(result, requestResponse);
291
+ assert(Metrics.sendBehavioralMetric.calledOnce);
292
+ assert.calledWith(
293
+ Metrics.sendBehavioralMetric,
294
+ BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_SUCCESS
186
295
  );
187
296
  });
188
297
 
@@ -195,6 +304,29 @@ describe('plugin-meetings', () => {
195
304
  meetingInfo.createAdhocSpaceMeeting.restore();
196
305
  });
197
306
 
307
+ it('create adhoc meeting when conversationUrl and installedOrgID passed with enableAdhocMeetings toggle', async () => {
308
+ sinon.stub(meetingInfo, 'createAdhocSpaceMeeting').returns(Promise.resolve());
309
+
310
+ const installedOrgID = '12345'
311
+
312
+ await meetingInfo.fetchMeetingInfo(
313
+ 'conversationUrl',
314
+ _CONVERSATION_URL_,
315
+ null,
316
+ null,
317
+ installedOrgID
318
+ );
319
+
320
+ assert.calledOnceWithExactly(
321
+ meetingInfo.createAdhocSpaceMeeting,
322
+ 'conversationUrl',
323
+ installedOrgID
324
+ );
325
+ assert.notCalled(webex.request);
326
+ meetingInfo.createAdhocSpaceMeeting.restore();
327
+ });
328
+
329
+
198
330
  it('should not call createAdhocSpaceMeeting if enableAdhocMeetings toggle is off', async () => {
199
331
  webex.config.meetings.experimental.enableAdhocMeetings = false;
200
332
  sinon.stub(meetingInfo, 'createAdhocSpaceMeeting').returns(Promise.resolve());
@@ -220,32 +352,189 @@ describe('plugin-meetings', () => {
220
352
  it('should throw an error MeetingInfoV2AdhocMeetingError if not able to start adhoc meeting for a conversation', async () => {
221
353
  webex.config.meetings.experimental.enableAdhocMeetings = true;
222
354
 
223
- webex.request = sinon.stub().rejects({statusCode: 403, body: {code: 400000}});
355
+ webex.request = sinon.stub().rejects({stack: 'a stack', message: 'a message', statusCode: 403, body: {code: 400000}});
224
356
  try {
225
357
  await meetingInfo.createAdhocSpaceMeeting('conversationUrl');
226
- }
227
- catch (err) {
358
+ } catch (err) {
228
359
  assert.instanceOf(err, MeetingInfoV2AdhocMeetingError);
229
- assert.deepEqual(err.message, 'Failed starting the adhoc meeting, Please contact support team , code=400000');
360
+ assert.deepEqual(
361
+ err.message,
362
+ 'Failed starting the adhoc meeting, Please contact support team , code=400000'
363
+ );
230
364
  assert.equal(err.wbxAppApiCode, 400000);
365
+ assert(Metrics.sendBehavioralMetric.calledOnce);
366
+ assert.calledWith(
367
+ Metrics.sendBehavioralMetric,
368
+ BEHAVIORAL_METRICS.ADHOC_MEETING_FAILURE,
369
+ {reason: 'a message', stack: 'a stack'}
370
+ );
371
+ }
372
+ });
373
+
374
+ forEach(
375
+ [
376
+ {errorCode: 403049},
377
+ {errorCode: 403104},
378
+ {errorCode: 403103},
379
+ {errorCode: 403048},
380
+ {errorCode: 403102},
381
+ {errorCode: 403101},
382
+ ],
383
+ ({errorCode}) => {
384
+ it(`should throw a MeetingInfoV2PolicyError for error code ${errorCode}`, async () => {
385
+ const message = 'a message';
386
+ const meetingInfoData = 'meeting info';
387
+
388
+ webex.request = sinon.stub().rejects({
389
+ statusCode: 403,
390
+ body: {message, code: errorCode, data: {meetingInfo: meetingInfoData}},
391
+ url: 'http://api-url.com',
392
+ });
393
+ try {
394
+ await meetingInfo.fetchMeetingInfo(
395
+ '1234323',
396
+ _MEETING_ID_,
397
+ 'abc',
398
+ {
399
+ id: '999',
400
+ code: 'aabbcc11',
401
+ },
402
+ null,
403
+ null,
404
+ {},
405
+ {meetingId: 'meeting-id'}
406
+ );
407
+ assert.fail('fetchMeetingInfo should have thrown, but has not done that');
408
+ } catch (err) {
409
+ assert(webex.internal.newMetrics.submitClientEvent.calledOnce);
410
+ const submitInternalEventCalls = webex.internal.newMetrics.submitInternalEvent.getCalls();
411
+ assert.deepEqual(submitInternalEventCalls[0].args[0], {
412
+ name: 'internal.client.meetinginfo.request',
413
+ });
414
+ assert.deepEqual(submitInternalEventCalls[1].args[0], {
415
+ name: 'internal.client.meetinginfo.response',
416
+ });
417
+ assert.calledWith(webex.internal.newMetrics.submitClientEvent, {
418
+ name: 'client.meetinginfo.response',
419
+ payload: {
420
+ identifiers: {
421
+ meetingLookupUrl: 'http://api-url.com',
422
+ },
423
+ },
424
+ options: {
425
+ meetingId: 'meeting-id',
426
+ rawError: {
427
+ statusCode: 403,
428
+ body: {message, code: errorCode, data: {meetingInfo: meetingInfoData}},
429
+ url: 'http://api-url.com',
430
+ },
431
+ },
432
+ });
433
+
434
+ assert.instanceOf(err, MeetingInfoV2PolicyError);
435
+ assert.deepEqual(err.message, `${message}, code=${errorCode}`);
436
+ assert.equal(err.wbxAppApiCode, errorCode);
437
+ assert.deepEqual(err.meetingInfo, meetingInfoData);
438
+ assert(Metrics.sendBehavioralMetric.calledOnce);
439
+ assert.calledWith(
440
+ Metrics.sendBehavioralMetric,
441
+ BEHAVIORAL_METRICS.MEETING_INFO_POLICY_ERROR,
442
+ {code: errorCode}
443
+ );
444
+ }
445
+ });
446
+ }
447
+ );
448
+
449
+ it('should send internal CA metric if meetingId is provided', async () => {
450
+ const requestResponse = {statusCode: 200, body: {meetingKey: '1234323'}};
451
+ const extraParams = {mtid: 'm9fe0afd8c435e892afcce9ea25b97046', joinTXId: 'TSmrX61wNF'}
452
+
453
+ webex.request.resolves(requestResponse);
454
+
455
+ const result = await meetingInfo.fetchMeetingInfo(
456
+ '1234323',
457
+ _MEETING_ID_,
458
+ null,
459
+ null,
460
+ null,
461
+ null,
462
+ extraParams,
463
+ {meetingId: 'meetingId'}
464
+ );
465
+
466
+ assert.calledWith(webex.request, {
467
+ method: 'POST',
468
+ service: WBXAPPAPI_SERVICE,
469
+ resource: 'meetingInfo',
470
+ body: {
471
+ supportHostKey: true,
472
+ supportCountryList: true,
473
+ meetingKey: '1234323',
474
+ ...extraParams,
475
+ },
476
+ });
477
+ assert.deepEqual(result, requestResponse);
478
+ assert(Metrics.sendBehavioralMetric.calledOnce);
479
+ assert.calledWith(
480
+ Metrics.sendBehavioralMetric,
481
+ BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_SUCCESS
482
+ );
483
+
484
+ const submitInternalEventCalls = webex.internal.newMetrics.submitInternalEvent.getCalls();
485
+ assert.deepEqual(submitInternalEventCalls[0].args[0], {
486
+ name: 'internal.client.meetinginfo.request',
487
+ });
488
+ assert.deepEqual(submitInternalEventCalls[1].args[0], {
489
+ name: 'internal.client.meetinginfo.response',
490
+ });
491
+ });
492
+
493
+ it('should not send CA metric if meetingId is not provided', async () => {
494
+ const message = 'a message';
495
+ const meetingInfoData = 'meeting info';
496
+
497
+ webex.request = sinon.stub().rejects({
498
+ statusCode: 403,
499
+ body: {message, code: 403102, data: {meetingInfo: meetingInfoData}},
500
+ url: 'http://api-url.com',
501
+ });
502
+ try {
503
+ await meetingInfo.fetchMeetingInfo(
504
+ '1234323',
505
+ _MEETING_ID_,
506
+ 'abc',
507
+ {
508
+ id: '999',
509
+ code: 'aabbcc11',
510
+ },
511
+ null,
512
+ null,
513
+ undefined
514
+ );
515
+ assert.fail('fetchMeetingInfo should have thrown, but has not done that');
516
+ } catch (err) {
517
+ assert.notCalled(webex.internal.newMetrics.submitClientEvent);
518
+ assert.notCalled(webex.internal.newMetrics.submitInternalEvent);
231
519
  }
232
520
  });
233
521
 
234
522
  it('should throw MeetingInfoV2PasswordError for 403 response', async () => {
235
523
  const FAKE_MEETING_INFO = {blablabla: 'some_fake_meeting_info'};
236
524
 
237
- webex.request = sinon.stub().rejects({statusCode: 403, body: {code: 403000, data: {meetingInfo: FAKE_MEETING_INFO}}});
525
+ webex.request = sinon
526
+ .stub()
527
+ .rejects({statusCode: 403, body: {code: 403000, data: {meetingInfo: FAKE_MEETING_INFO}}});
238
528
 
239
529
  try {
240
- await meetingInfo.fetchMeetingInfo('1234323', _MEETING_ID_, 'abc', {id: '999', code: 'aabbcc11'});
530
+ await meetingInfo.fetchMeetingInfo('1234323', _MEETING_ID_, 'abc', {
531
+ id: '999',
532
+ code: 'aabbcc11',
533
+ });
241
534
  assert.fail('fetchMeetingInfo should have thrown, but has not done that');
242
- }
243
- catch (err) {
535
+ } catch (err) {
244
536
  assert(Metrics.sendBehavioralMetric.calledOnce);
245
- assert.calledWith(
246
- Metrics.sendBehavioralMetric,
247
- BEHAVIORAL_METRICS.VERIFY_PASSWORD_ERROR,
248
- );
537
+ assert.calledWith(Metrics.sendBehavioralMetric, BEHAVIORAL_METRICS.VERIFY_PASSWORD_ERROR);
249
538
  assert.instanceOf(err, MeetingInfoV2PasswordError);
250
539
  assert.deepEqual(err.meetingInfo, FAKE_MEETING_INFO);
251
540
  assert.equal(err.wbxAppApiCode, 403000);
@@ -254,34 +543,34 @@ describe('plugin-meetings', () => {
254
543
 
255
544
  describe('should throw MeetingInfoV2CaptchaError for 423 response', () => {
256
545
  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
- );
546
+ webex.request = sinon.stub().rejects({
547
+ statusCode: 423,
548
+ body: {
549
+ code: wbxAppApiCode,
550
+ captchaID: 'fake_captcha_id',
551
+ verificationImageURL: 'fake_image_url',
552
+ verificationAudioURL: 'fake_audio_url',
553
+ refreshURL: 'fake_refresh_url',
554
+ },
555
+ });
269
556
  try {
270
- await meetingInfo.fetchMeetingInfo('1234323', _MEETING_ID_, 'abc', {id: '999', code: 'aabbcc11'});
557
+ await meetingInfo.fetchMeetingInfo('1234323', _MEETING_ID_, 'abc', {
558
+ id: '999',
559
+ code: 'aabbcc11',
560
+ });
271
561
  assert.fail('fetchMeetingInfo should have thrown, but has not done that');
272
- }
273
- catch (err) {
562
+ } catch (err) {
274
563
  assert(Metrics.sendBehavioralMetric.calledOnce);
275
564
  assert.calledWith(
276
565
  Metrics.sendBehavioralMetric,
277
- BEHAVIORAL_METRICS.VERIFY_CAPTCHA_ERROR,
566
+ BEHAVIORAL_METRICS.VERIFY_CAPTCHA_ERROR
278
567
  );
279
568
  assert.instanceOf(err, MeetingInfoV2CaptchaError);
280
569
  assert.deepEqual(err.captchaInfo, {
281
570
  captchaId: 'fake_captcha_id',
282
571
  verificationImageURL: 'fake_image_url',
283
572
  verificationAudioURL: 'fake_audio_url',
284
- refreshURL: 'fake_refresh_url'
573
+ refreshURL: 'fake_refresh_url',
285
574
  });
286
575
  assert.equal(err.wbxAppApiCode, wbxAppApiCode);
287
576
  assert.equal(err.isPasswordRequired, expectedIsPasswordRequired);
@@ -300,28 +589,76 @@ describe('plugin-meetings', () => {
300
589
  await runTest(423001, false);
301
590
  });
302
591
  });
303
- });
304
592
 
593
+ it('should throw an error and not fetch with an "empty" body', async () => {
594
+ const body = {supportHostKey: 'foo', supportCountryList: 'bar'};
595
+ const requestResponse = {statusCode: 200, body};
596
+
597
+ sinon
598
+ .stub(MeetingInfoUtil, 'getDestinationType')
599
+ .returns(Promise.resolve({type: _LOCUS_ID_, destination: '123456'}));
600
+ sinon.stub(MeetingInfoUtil, 'getRequestBody').returns(Promise.resolve(body));
601
+ webex.request.resolves(requestResponse);
602
+
603
+ try {
604
+ await meetingInfo.fetchMeetingInfo({
605
+ type: _LOCUS_ID_,
606
+ });
607
+ assert.fail('fetchMeetingInfo should have thrown, but has not done that');
608
+ } catch (err) {
609
+ assert.calledWith(
610
+ Metrics.sendBehavioralMetric,
611
+ BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_FAILURE,
612
+ {
613
+ reason: 'Not enough information to fetch meeting info',
614
+ destinationType: _LOCUS_ID_,
615
+ webExMeetingId: undefined,
616
+ sipUri: undefined,
617
+ }
618
+ );
619
+ assert(Metrics.sendBehavioralMetric.calledOnce);
620
+ assert.calledWith(
621
+ Metrics.sendBehavioralMetric,
622
+ BEHAVIORAL_METRICS.FETCH_MEETING_INFO_V1_FAILURE
623
+ );
624
+ assert.deepEqual(err.message, 'Not enough information to fetch meeting info');
625
+ }
626
+
627
+ MeetingInfoUtil.getDestinationType.restore();
628
+ MeetingInfoUtil.getRequestBody.restore();
629
+ });
630
+ });
305
631
 
306
632
  describe('createAdhocSpaceMeeting', () => {
307
- it('Make a request to /instantSpace when conversationUrl', async () => {
308
- const conversationUrl = 'https://conversationUrl/xxx';
633
+ const conversationUrl = 'https://conversationUrl/xxx';
634
+ const installedOrgID = '12345';
635
+
636
+ const setup = () => {
309
637
  const invitee = [];
310
638
 
311
639
  invitee.push({
312
640
  email: conversation.participants.items[0].emailAddress,
313
- ciUserUuid: conversation.participants.items[0].entryUUID
641
+ ciUserUuid: conversation.participants.items[0].entryUUID,
314
642
  });
315
643
 
316
644
  invitee.push({
317
645
  email: conversation.participants.items[1].emailAddress,
318
- ciUserUuid: conversation.participants.items[1].entryUUID
646
+ ciUserUuid: conversation.participants.items[1].entryUUID,
319
647
  });
320
648
 
321
- await meetingInfo.createAdhocSpaceMeeting(conversationUrl);
649
+ return {invitee}
650
+ }
322
651
 
323
- assert.calledWith(webex.internal.conversation.get, {url: conversationUrl},
324
- {includeParticipants: true, disableTransform: true});
652
+ it('Make a request to /spaceInstant when conversationUrl', async () => {
653
+ const {invitee} = setup();
654
+
655
+ const result = await meetingInfo.createAdhocSpaceMeeting(conversationUrl);
656
+
657
+ assert.calledWith(
658
+ webex.internal.conversation.get,
659
+ {url: conversationUrl},
660
+ {includeParticipants: true, disableTransform: true}
661
+ );
325
662
 
326
663
  assert.calledWith(webex.request, {
327
664
  method: 'POST',
@@ -331,15 +668,83 @@ describe('plugin-meetings', () => {
331
668
  spaceUrl: conversation.url,
332
669
  keyUrl: conversation.encryptionKeyUrl,
333
670
  kroUrl: conversation.kmsResourceObjectUrl,
334
- invitees: invitee
335
- }
671
+ invitees: invitee,
672
+ },
336
673
  });
337
674
  assert(Metrics.sendBehavioralMetric.calledOnce);
675
+ assert.calledWith(Metrics.sendBehavioralMetric, BEHAVIORAL_METRICS.ADHOC_MEETING_SUCCESS);
676
+ assert.deepEqual(result, {
677
+ body: {},
678
+ statusCode: 200
679
+ });
680
+ });
681
+
682
+ it('Make a request to /spaceInstant when conversationUrl with installed org ID', async () => {
683
+ const {invitee} = setup();
684
+
685
+ await meetingInfo.createAdhocSpaceMeeting(conversationUrl, installedOrgID);
686
+
338
687
  assert.calledWith(
339
- Metrics.sendBehavioralMetric,
340
- BEHAVIORAL_METRICS.ADHOC_MEETING_SUCCESS,
688
+ webex.internal.conversation.get,
689
+ {url: conversationUrl},
690
+ {includeParticipants: true, disableTransform: true}
341
691
  );
692
+
693
+ assert.calledWith(webex.request, {
694
+ method: 'POST',
695
+ uri: 'https://go.webex.com/wbxappapi/v2/meetings/spaceInstant',
696
+ body: {
697
+ title: conversation.displayName,
698
+ spaceUrl: conversation.url,
699
+ keyUrl: conversation.encryptionKeyUrl,
700
+ kroUrl: conversation.kmsResourceObjectUrl,
701
+ invitees: invitee,
702
+ installedOrgID,
703
+ },
704
+ });
705
+ assert(Metrics.sendBehavioralMetric.calledOnce);
706
+ assert.calledWith(Metrics.sendBehavioralMetric, BEHAVIORAL_METRICS.ADHOC_MEETING_SUCCESS);
342
707
  });
708
+
709
+
710
+ forEach(
711
+ [
712
+ {errorCode: 403049},
713
+ {errorCode: 403104},
714
+ {errorCode: 403103},
715
+ {errorCode: 403048},
716
+ {errorCode: 403102},
717
+ {errorCode: 403101},
718
+ ],
719
+ ({errorCode}) => {
720
+ it(`should throw a MeetingInfoV2PolicyError for error code ${errorCode}`, async () => {
721
+ const message = 'a message';
722
+ const meetingInfoData = 'meeting info';
723
+
724
+ webex.request = sinon.stub().rejects({
725
+ statusCode: 403,
726
+ body: {message, code: errorCode, data: {meetingInfo: meetingInfoData}},
727
+ });
728
+ try {
729
+ await meetingInfo.createAdhocSpaceMeeting(conversationUrl, installedOrgID);
730
+ assert.fail('createAdhocSpaceMeeting should have thrown, but has not done that');
731
+ } catch (err) {
732
+ assert.instanceOf(err, MeetingInfoV2PolicyError);
733
+ assert.deepEqual(err.message, `${message}, code=${errorCode}`);
734
+ assert.equal(err.wbxAppApiCode, errorCode);
735
+ assert.deepEqual(err.meetingInfo, meetingInfoData);
736
+
737
+ assert(Metrics.sendBehavioralMetric.calledOnce);
738
+ assert.calledWith(
739
+ Metrics.sendBehavioralMetric,
740
+ BEHAVIORAL_METRICS.MEETING_INFO_POLICY_ERROR,
741
+ {code: errorCode}
742
+ );
743
+
744
+ }
745
+ });
746
+ }
747
+ );
343
748
  });
344
749
  });
345
750
  });