@webex/plugin-meetings 3.0.0-beta.5 → 3.0.0-beta.50

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 (498) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/breakouts/breakout.js +137 -0
  4. package/dist/breakouts/breakout.js.map +1 -0
  5. package/dist/breakouts/collection.js +23 -0
  6. package/dist/breakouts/collection.js.map +1 -0
  7. package/dist/breakouts/edit-lock-error.js +52 -0
  8. package/dist/breakouts/edit-lock-error.js.map +1 -0
  9. package/dist/breakouts/index.js +555 -0
  10. package/dist/breakouts/index.js.map +1 -0
  11. package/dist/breakouts/request.js +78 -0
  12. package/dist/breakouts/request.js.map +1 -0
  13. package/dist/breakouts/utils.js +48 -0
  14. package/dist/breakouts/utils.js.map +1 -0
  15. package/dist/common/browser-detection.js +1 -20
  16. package/dist/common/browser-detection.js.map +1 -1
  17. package/dist/common/collection.js +5 -20
  18. package/dist/common/collection.js.map +1 -1
  19. package/dist/common/config.js +0 -7
  20. package/dist/common/config.js.map +1 -1
  21. package/dist/common/errors/captcha-error.js +10 -24
  22. package/dist/common/errors/captcha-error.js.map +1 -1
  23. package/dist/common/errors/intent-to-join.js +11 -24
  24. package/dist/common/errors/intent-to-join.js.map +1 -1
  25. package/dist/common/errors/join-meeting.js +12 -25
  26. package/dist/common/errors/join-meeting.js.map +1 -1
  27. package/dist/common/errors/media.js +10 -24
  28. package/dist/common/errors/media.js.map +1 -1
  29. package/dist/common/errors/parameter.js +5 -33
  30. package/dist/common/errors/parameter.js.map +1 -1
  31. package/dist/common/errors/password-error.js +10 -24
  32. package/dist/common/errors/password-error.js.map +1 -1
  33. package/dist/common/errors/permission.js +9 -23
  34. package/dist/common/errors/permission.js.map +1 -1
  35. package/dist/common/errors/reconnection-in-progress.js +0 -17
  36. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  37. package/dist/common/errors/reconnection.js +10 -24
  38. package/dist/common/errors/reconnection.js.map +1 -1
  39. package/dist/common/errors/stats.js +10 -24
  40. package/dist/common/errors/stats.js.map +1 -1
  41. package/dist/common/errors/webex-errors.js +6 -41
  42. package/dist/common/errors/webex-errors.js.map +1 -1
  43. package/dist/common/errors/webex-meetings-error.js +5 -25
  44. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  45. package/dist/common/events/events-scope.js +0 -22
  46. package/dist/common/events/events-scope.js.map +1 -1
  47. package/dist/common/events/events.js +0 -23
  48. package/dist/common/events/events.js.map +1 -1
  49. package/dist/common/events/trigger-proxy.js +0 -12
  50. package/dist/common/events/trigger-proxy.js.map +1 -1
  51. package/dist/common/events/util.js +0 -15
  52. package/dist/common/events/util.js.map +1 -1
  53. package/dist/common/logs/logger-config.js +0 -4
  54. package/dist/common/logs/logger-config.js.map +1 -1
  55. package/dist/common/logs/logger-proxy.js +1 -8
  56. package/dist/common/logs/logger-proxy.js.map +1 -1
  57. package/dist/common/logs/request.js +37 -60
  58. package/dist/common/logs/request.js.map +1 -1
  59. package/dist/common/queue.js +4 -14
  60. package/dist/common/queue.js.map +1 -1
  61. package/dist/config.js +6 -6
  62. package/dist/config.js.map +1 -1
  63. package/dist/constants.js +122 -49
  64. package/dist/constants.js.map +1 -1
  65. package/dist/controls-options-manager/constants.js +14 -0
  66. package/dist/controls-options-manager/constants.js.map +1 -0
  67. package/dist/controls-options-manager/enums.js +16 -0
  68. package/dist/controls-options-manager/enums.js.map +1 -0
  69. package/dist/controls-options-manager/index.js +240 -0
  70. package/dist/controls-options-manager/index.js.map +1 -0
  71. package/dist/controls-options-manager/util.js +39 -0
  72. package/dist/controls-options-manager/util.js.map +1 -0
  73. package/dist/index.js +11 -18
  74. package/dist/index.js.map +1 -1
  75. package/dist/locus-info/controlsUtils.js +17 -30
  76. package/dist/locus-info/controlsUtils.js.map +1 -1
  77. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  78. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  79. package/dist/locus-info/fullState.js +0 -15
  80. package/dist/locus-info/fullState.js.map +1 -1
  81. package/dist/locus-info/hostUtils.js +4 -12
  82. package/dist/locus-info/hostUtils.js.map +1 -1
  83. package/dist/locus-info/index.js +220 -192
  84. package/dist/locus-info/index.js.map +1 -1
  85. package/dist/locus-info/infoUtils.js +3 -37
  86. package/dist/locus-info/infoUtils.js.map +1 -1
  87. package/dist/locus-info/mediaSharesUtils.js +12 -38
  88. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  89. package/dist/locus-info/parser.js +92 -118
  90. package/dist/locus-info/parser.js.map +1 -1
  91. package/dist/locus-info/selfUtils.js +61 -90
  92. package/dist/locus-info/selfUtils.js.map +1 -1
  93. package/dist/media/index.js +56 -146
  94. package/dist/media/index.js.map +1 -1
  95. package/dist/media/properties.js +83 -117
  96. package/dist/media/properties.js.map +1 -1
  97. package/dist/media/util.js +2 -9
  98. package/dist/media/util.js.map +1 -1
  99. package/dist/mediaQualityMetrics/config.js +505 -495
  100. package/dist/mediaQualityMetrics/config.js.map +1 -1
  101. package/dist/meeting/in-meeting-actions.js +25 -14
  102. package/dist/meeting/in-meeting-actions.js.map +1 -1
  103. package/dist/meeting/index.js +2205 -2211
  104. package/dist/meeting/index.js.map +1 -1
  105. package/dist/meeting/muteState.js +102 -100
  106. package/dist/meeting/muteState.js.map +1 -1
  107. package/dist/meeting/request.js +308 -264
  108. package/dist/meeting/request.js.map +1 -1
  109. package/dist/meeting/request.type.js +7 -0
  110. package/dist/meeting/request.type.js.map +1 -0
  111. package/dist/meeting/state.js +21 -31
  112. package/dist/meeting/state.js.map +1 -1
  113. package/dist/meeting/util.js +60 -217
  114. package/dist/meeting/util.js.map +1 -1
  115. package/dist/meeting-info/collection.js +6 -25
  116. package/dist/meeting-info/collection.js.map +1 -1
  117. package/dist/meeting-info/index.js +14 -32
  118. package/dist/meeting-info/index.js.map +1 -1
  119. package/dist/meeting-info/meeting-info-v2.js +193 -268
  120. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  121. package/dist/meeting-info/request.js +3 -15
  122. package/dist/meeting-info/request.js.map +1 -1
  123. package/dist/meeting-info/util.js +98 -183
  124. package/dist/meeting-info/util.js.map +1 -1
  125. package/dist/meeting-info/utilv2.js +137 -228
  126. package/dist/meeting-info/utilv2.js.map +1 -1
  127. package/dist/meetings/collection.js +5 -20
  128. package/dist/meetings/collection.js.map +1 -1
  129. package/dist/meetings/index.js +490 -560
  130. package/dist/meetings/index.js.map +1 -1
  131. package/dist/meetings/request.js +24 -41
  132. package/dist/meetings/request.js.map +1 -1
  133. package/dist/meetings/util.js +116 -155
  134. package/dist/meetings/util.js.map +1 -1
  135. package/dist/member/index.js +78 -86
  136. package/dist/member/index.js.map +1 -1
  137. package/dist/member/util.js +31 -68
  138. package/dist/member/util.js.map +1 -1
  139. package/dist/members/collection.js +3 -12
  140. package/dist/members/collection.js.map +1 -1
  141. package/dist/members/index.js +110 -203
  142. package/dist/members/index.js.map +1 -1
  143. package/dist/members/request.js +16 -39
  144. package/dist/members/request.js.map +1 -1
  145. package/dist/members/util.js +42 -50
  146. package/dist/members/util.js.map +1 -1
  147. package/dist/metrics/config.js +1 -13
  148. package/dist/metrics/config.js.map +1 -1
  149. package/dist/metrics/constants.js +1 -6
  150. package/dist/metrics/constants.js.map +1 -1
  151. package/dist/metrics/index.js +54 -156
  152. package/dist/metrics/index.js.map +1 -1
  153. package/dist/multistream/mediaRequestManager.js +74 -52
  154. package/dist/multistream/mediaRequestManager.js.map +1 -1
  155. package/dist/multistream/receiveSlot.js +48 -65
  156. package/dist/multistream/receiveSlot.js.map +1 -1
  157. package/dist/multistream/receiveSlotManager.js +58 -93
  158. package/dist/multistream/receiveSlotManager.js.map +1 -1
  159. package/dist/multistream/remoteMedia.js +60 -76
  160. package/dist/multistream/remoteMedia.js.map +1 -1
  161. package/dist/multistream/remoteMediaGroup.js +6 -40
  162. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  163. package/dist/multistream/remoteMediaManager.js +446 -442
  164. package/dist/multistream/remoteMediaManager.js.map +1 -1
  165. package/dist/networkQualityMonitor/index.js +40 -59
  166. package/dist/networkQualityMonitor/index.js.map +1 -1
  167. package/dist/personal-meeting-room/index.js +21 -45
  168. package/dist/personal-meeting-room/index.js.map +1 -1
  169. package/dist/personal-meeting-room/request.js +1 -31
  170. package/dist/personal-meeting-room/request.js.map +1 -1
  171. package/dist/personal-meeting-room/util.js +0 -13
  172. package/dist/personal-meeting-room/util.js.map +1 -1
  173. package/dist/reachability/index.js +192 -191
  174. package/dist/reachability/index.js.map +1 -1
  175. package/dist/reachability/request.js +15 -23
  176. package/dist/reachability/request.js.map +1 -1
  177. package/dist/reactions/constants.js +13 -0
  178. package/dist/reactions/constants.js.map +1 -0
  179. package/dist/reactions/reactions.js +109 -0
  180. package/dist/reactions/reactions.js.map +1 -0
  181. package/dist/reactions/reactions.type.js +36 -0
  182. package/dist/reactions/reactions.type.js.map +1 -0
  183. package/dist/reconnection-manager/index.js +322 -456
  184. package/dist/reconnection-manager/index.js.map +1 -1
  185. package/dist/recording-controller/enums.js +17 -0
  186. package/dist/recording-controller/enums.js.map +1 -0
  187. package/dist/recording-controller/index.js +343 -0
  188. package/dist/recording-controller/index.js.map +1 -0
  189. package/dist/recording-controller/util.js +63 -0
  190. package/dist/recording-controller/util.js.map +1 -0
  191. package/dist/roap/index.js +48 -70
  192. package/dist/roap/index.js.map +1 -1
  193. package/dist/roap/request.js +143 -131
  194. package/dist/roap/request.js.map +1 -1
  195. package/dist/roap/turnDiscovery.js +91 -98
  196. package/dist/roap/turnDiscovery.js.map +1 -1
  197. package/dist/statsAnalyzer/global.js +1 -95
  198. package/dist/statsAnalyzer/global.js.map +1 -1
  199. package/dist/statsAnalyzer/index.js +372 -455
  200. package/dist/statsAnalyzer/index.js.map +1 -1
  201. package/dist/statsAnalyzer/mqaUtil.js +143 -87
  202. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  203. package/dist/transcription/index.js +22 -47
  204. package/dist/transcription/index.js.map +1 -1
  205. package/dist/types/breakouts/breakout.d.ts +8 -0
  206. package/dist/types/breakouts/collection.d.ts +5 -0
  207. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  208. package/dist/types/breakouts/index.d.ts +5 -0
  209. package/dist/types/breakouts/request.d.ts +22 -0
  210. package/dist/types/breakouts/utils.d.ts +8 -0
  211. package/dist/types/common/browser-detection.d.ts +9 -0
  212. package/dist/types/common/collection.d.ts +48 -0
  213. package/dist/types/common/config.d.ts +2 -0
  214. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  215. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  216. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  217. package/dist/types/common/errors/media.d.ts +15 -0
  218. package/dist/types/common/errors/parameter.d.ts +15 -0
  219. package/dist/types/common/errors/password-error.d.ts +15 -0
  220. package/dist/types/common/errors/permission.d.ts +14 -0
  221. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  222. package/dist/types/common/errors/reconnection.d.ts +15 -0
  223. package/dist/types/common/errors/stats.d.ts +15 -0
  224. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  225. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  226. package/dist/types/common/events/events-scope.d.ts +17 -0
  227. package/dist/types/common/events/events.d.ts +12 -0
  228. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  229. package/dist/types/common/events/util.d.ts +2 -0
  230. package/dist/types/common/logs/logger-config.d.ts +2 -0
  231. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  232. package/dist/types/common/logs/request.d.ts +34 -0
  233. package/dist/types/common/queue.d.ts +32 -0
  234. package/dist/types/config.d.ts +77 -0
  235. package/dist/types/constants.d.ts +928 -0
  236. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  237. package/dist/types/controls-options-manager/enums.d.ts +6 -0
  238. package/dist/types/controls-options-manager/index.d.ts +128 -0
  239. package/dist/types/controls-options-manager/util.d.ts +9 -0
  240. package/dist/types/index.d.ts +6 -0
  241. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  242. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  243. package/dist/types/locus-info/fullState.d.ts +2 -0
  244. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  245. package/dist/types/locus-info/index.d.ts +276 -0
  246. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  247. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  248. package/dist/types/locus-info/parser.d.ts +212 -0
  249. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  250. package/dist/types/media/index.d.ts +32 -0
  251. package/dist/types/media/properties.d.ts +108 -0
  252. package/dist/types/media/util.d.ts +2 -0
  253. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  254. package/dist/types/meeting/in-meeting-actions.d.ts +95 -0
  255. package/dist/types/meeting/index.d.ts +1719 -0
  256. package/dist/types/meeting/muteState.d.ts +132 -0
  257. package/dist/types/meeting/request.d.ts +271 -0
  258. package/dist/types/meeting/request.type.d.ts +11 -0
  259. package/dist/types/meeting/state.d.ts +9 -0
  260. package/dist/types/meeting/util.d.ts +2 -0
  261. package/dist/types/meeting-info/collection.d.ts +20 -0
  262. package/dist/types/meeting-info/index.d.ts +57 -0
  263. package/dist/types/meeting-info/meeting-info-v2.d.ts +93 -0
  264. package/dist/types/meeting-info/request.d.ts +22 -0
  265. package/dist/types/meeting-info/util.d.ts +2 -0
  266. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  267. package/dist/types/meetings/collection.d.ts +23 -0
  268. package/dist/types/meetings/index.d.ts +297 -0
  269. package/dist/types/meetings/request.d.ts +27 -0
  270. package/dist/types/meetings/util.d.ts +18 -0
  271. package/dist/types/member/index.d.ts +146 -0
  272. package/dist/types/member/util.d.ts +2 -0
  273. package/dist/types/members/collection.d.ts +24 -0
  274. package/dist/types/members/index.d.ts +325 -0
  275. package/dist/types/members/request.d.ts +50 -0
  276. package/dist/types/members/util.d.ts +2 -0
  277. package/dist/types/metrics/config.d.ts +169 -0
  278. package/dist/types/metrics/constants.d.ts +53 -0
  279. package/dist/types/metrics/index.d.ts +152 -0
  280. package/dist/types/multistream/mediaRequestManager.d.ts +51 -0
  281. package/dist/types/multistream/receiveSlot.d.ts +64 -0
  282. package/dist/types/multistream/receiveSlotManager.d.ts +49 -0
  283. package/dist/types/multistream/remoteMedia.d.ts +100 -0
  284. package/dist/types/multistream/remoteMediaGroup.d.ts +56 -0
  285. package/dist/types/multistream/remoteMediaManager.d.ts +259 -0
  286. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  287. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  288. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  289. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  290. package/dist/types/reachability/index.d.ts +152 -0
  291. package/dist/types/reachability/request.d.ts +37 -0
  292. package/dist/types/reactions/constants.d.ts +3 -0
  293. package/dist/types/reactions/reactions.d.ts +4 -0
  294. package/dist/types/reactions/reactions.type.d.ts +52 -0
  295. package/dist/types/reconnection-manager/index.d.ts +117 -0
  296. package/dist/types/recording-controller/enums.d.ts +7 -0
  297. package/dist/types/recording-controller/index.d.ts +193 -0
  298. package/dist/types/recording-controller/util.d.ts +13 -0
  299. package/dist/types/roap/index.d.ts +77 -0
  300. package/dist/types/roap/request.d.ts +38 -0
  301. package/dist/types/roap/turnDiscovery.d.ts +74 -0
  302. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  303. package/dist/types/statsAnalyzer/index.d.ts +195 -0
  304. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  305. package/dist/types/transcription/index.d.ts +64 -0
  306. package/internal-README.md +7 -6
  307. package/package.json +27 -21
  308. package/src/breakouts/README.md +199 -0
  309. package/src/breakouts/breakout.ts +130 -0
  310. package/src/breakouts/collection.ts +19 -0
  311. package/src/breakouts/edit-lock-error.ts +25 -0
  312. package/src/breakouts/index.ts +511 -0
  313. package/src/breakouts/request.ts +55 -0
  314. package/src/breakouts/utils.ts +39 -0
  315. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  316. package/src/common/collection.ts +9 -7
  317. package/src/common/{config.js → config.ts} +1 -1
  318. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  319. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  320. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  321. package/src/common/errors/{media.js → media.ts} +11 -7
  322. package/src/common/errors/parameter.ts +11 -7
  323. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  324. package/src/common/errors/{permission.js → permission.ts} +10 -6
  325. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  326. package/src/common/errors/{stats.js → stats.ts} +11 -7
  327. package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -7
  328. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  329. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  330. package/src/common/events/{events.js → events.ts} +5 -1
  331. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  332. package/src/common/events/{util.js → util.ts} +2 -3
  333. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  334. package/src/common/logs/logger-proxy.ts +44 -0
  335. package/src/common/logs/{request.js → request.ts} +22 -9
  336. package/src/common/queue.ts +1 -2
  337. package/src/{config.js → config.ts} +17 -12
  338. package/src/constants.ts +76 -5
  339. package/src/controls-options-manager/constants.ts +5 -0
  340. package/src/controls-options-manager/enums.ts +7 -0
  341. package/src/controls-options-manager/index.ts +218 -0
  342. package/src/controls-options-manager/util.ts +30 -0
  343. package/src/index.js +4 -1
  344. package/src/locus-info/controlsUtils.ts +122 -0
  345. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  346. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  347. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  348. package/src/locus-info/{index.js → index.ts} +192 -67
  349. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  350. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
  351. package/src/locus-info/{parser.js → parser.ts} +67 -79
  352. package/src/locus-info/{selfUtils.js → selfUtils.ts} +157 -68
  353. package/src/media/{index.js → index.ts} +179 -176
  354. package/src/media/{properties.js → properties.ts} +60 -37
  355. package/src/media/{util.js → util.ts} +2 -2
  356. package/src/mediaQualityMetrics/config.ts +384 -0
  357. package/src/meeting/in-meeting-actions.ts +55 -3
  358. package/src/meeting/{index.js → index.ts} +2590 -1576
  359. package/src/meeting/{muteState.js → muteState.ts} +138 -73
  360. package/src/meeting/{request.js → request.ts} +326 -142
  361. package/src/meeting/request.type.ts +13 -0
  362. package/src/meeting/{state.js → state.ts} +50 -35
  363. package/src/meeting/{util.js → util.ts} +128 -115
  364. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  365. package/src/meeting-info/{index.js → index.ts} +42 -36
  366. package/src/meeting-info/meeting-info-v2.ts +273 -0
  367. package/src/meeting-info/{request.js → request.ts} +14 -4
  368. package/src/meeting-info/{util.js → util.ts} +60 -51
  369. package/src/meeting-info/{utilv2.js → utilv2.ts} +65 -58
  370. package/src/meetings/{collection.js → collection.ts} +6 -3
  371. package/src/meetings/index.ts +1159 -0
  372. package/src/meetings/{request.js → request.ts} +32 -25
  373. package/src/meetings/{util.js → util.ts} +58 -32
  374. package/src/member/{index.js → index.ts} +102 -56
  375. package/src/member/{util.js → util.ts} +52 -25
  376. package/src/members/{collection.js → collection.ts} +2 -2
  377. package/src/members/{index.js → index.ts} +231 -144
  378. package/src/members/{request.js → request.ts} +60 -16
  379. package/src/members/{util.js → util.ts} +69 -54
  380. package/src/metrics/{config.js → config.ts} +253 -92
  381. package/src/metrics/{constants.js → constants.ts} +0 -6
  382. package/src/metrics/{index.js → index.ts} +105 -94
  383. package/src/multistream/mediaRequestManager.ts +101 -39
  384. package/src/multistream/receiveSlot.ts +62 -26
  385. package/src/multistream/receiveSlotManager.ts +50 -38
  386. package/src/multistream/remoteMedia.ts +38 -5
  387. package/src/multistream/remoteMediaGroup.ts +4 -3
  388. package/src/multistream/remoteMediaManager.ts +209 -62
  389. package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
  390. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  391. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  392. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  393. package/src/reachability/{index.js → index.ts} +157 -94
  394. package/src/reachability/request.ts +46 -35
  395. package/src/reactions/constants.ts +4 -0
  396. package/src/reactions/reactions.ts +104 -0
  397. package/src/reactions/reactions.type.ts +62 -0
  398. package/src/reconnection-manager/{index.js → index.ts} +196 -103
  399. package/src/recording-controller/enums.ts +8 -0
  400. package/src/recording-controller/index.ts +315 -0
  401. package/src/recording-controller/util.ts +58 -0
  402. package/src/roap/{index.js → index.ts} +77 -60
  403. package/src/roap/request.ts +172 -0
  404. package/src/roap/turnDiscovery.ts +81 -41
  405. package/src/statsAnalyzer/global.ts +37 -0
  406. package/src/statsAnalyzer/index.ts +1242 -0
  407. package/src/statsAnalyzer/mqaUtil.ts +291 -0
  408. package/src/transcription/{index.js → index.ts} +46 -39
  409. package/test/integration/spec/converged-space-meetings.js +176 -0
  410. package/test/integration/spec/journey.js +665 -464
  411. package/test/integration/spec/space-meeting.js +320 -206
  412. package/test/integration/spec/transcription.js +7 -8
  413. package/test/unit/spec/breakouts/breakout.ts +147 -0
  414. package/test/unit/spec/breakouts/collection.ts +15 -0
  415. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  416. package/test/unit/spec/breakouts/index.ts +707 -0
  417. package/test/unit/spec/breakouts/request.ts +104 -0
  418. package/test/unit/spec/breakouts/utils.js +47 -0
  419. package/test/unit/spec/common/browser-detection.js +9 -28
  420. package/test/unit/spec/controls-options-manager/index.js +180 -0
  421. package/test/unit/spec/controls-options-manager/util.js +86 -0
  422. package/test/unit/spec/fixture/locus.js +92 -90
  423. package/test/unit/spec/locus-info/controlsUtils.js +112 -34
  424. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  425. package/test/unit/spec/locus-info/index.js +219 -2
  426. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  427. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  428. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  429. package/test/unit/spec/locus-info/parser.js +3 -9
  430. package/test/unit/spec/locus-info/selfConstant.js +101 -103
  431. package/test/unit/spec/locus-info/selfUtils.js +128 -12
  432. package/test/unit/spec/media/index.ts +72 -8
  433. package/test/unit/spec/media/properties.ts +9 -9
  434. package/test/unit/spec/meeting/in-meeting-actions.ts +23 -2
  435. package/test/unit/spec/meeting/index.js +2490 -802
  436. package/test/unit/spec/meeting/muteState.js +146 -61
  437. package/test/unit/spec/meeting/request.js +141 -43
  438. package/test/unit/spec/meeting/utils.js +134 -164
  439. package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
  440. package/test/unit/spec/meeting-info/request.js +7 -9
  441. package/test/unit/spec/meeting-info/util.js +11 -12
  442. package/test/unit/spec/meeting-info/utilv2.js +110 -74
  443. package/test/unit/spec/meetings/collection.js +1 -1
  444. package/test/unit/spec/meetings/index.js +439 -257
  445. package/test/unit/spec/meetings/utils.js +14 -12
  446. package/test/unit/spec/member/index.js +0 -1
  447. package/test/unit/spec/member/util.js +31 -7
  448. package/test/unit/spec/members/index.js +179 -54
  449. package/test/unit/spec/members/request.js +29 -20
  450. package/test/unit/spec/members/utils.js +119 -4
  451. package/test/unit/spec/metrics/index.js +16 -21
  452. package/test/unit/spec/multistream/mediaRequestManager.ts +318 -64
  453. package/test/unit/spec/multistream/receiveSlot.ts +68 -17
  454. package/test/unit/spec/multistream/receiveSlotManager.ts +60 -38
  455. package/test/unit/spec/multistream/remoteMedia.ts +38 -2
  456. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  457. package/test/unit/spec/multistream/remoteMediaManager.ts +539 -65
  458. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  459. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  460. package/test/unit/spec/reachability/index.ts +176 -27
  461. package/test/unit/spec/reachability/request.js +66 -0
  462. package/test/unit/spec/reconnection-manager/index.js +58 -30
  463. package/test/unit/spec/recording-controller/index.js +231 -0
  464. package/test/unit/spec/recording-controller/util.js +102 -0
  465. package/test/unit/spec/roap/index.ts +12 -8
  466. package/test/unit/spec/roap/request.ts +217 -0
  467. package/test/unit/spec/roap/turnDiscovery.ts +72 -49
  468. package/test/unit/spec/stats-analyzer/index.js +108 -57
  469. package/test/utils/cmr.js +44 -42
  470. package/test/utils/constants.js +9 -0
  471. package/test/utils/testUtils.js +98 -77
  472. package/test/utils/webex-config.js +22 -18
  473. package/test/utils/webex-test-users.js +57 -50
  474. package/tsconfig.json +6 -0
  475. package/dist/media/internal-media-core-wrapper.js +0 -22
  476. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  477. package/dist/meeting/effectsState.js +0 -327
  478. package/dist/meeting/effectsState.js.map +0 -1
  479. package/dist/multistream/multistreamMedia.js +0 -116
  480. package/dist/multistream/multistreamMedia.js.map +0 -1
  481. package/dist/peer-connection-manager/util.js +0 -124
  482. package/dist/peer-connection-manager/util.js.map +0 -1
  483. package/src/common/logs/logger-proxy.js +0 -33
  484. package/src/locus-info/controlsUtils.js +0 -102
  485. package/src/media/internal-media-core-wrapper.ts +0 -9
  486. package/src/mediaQualityMetrics/config.js +0 -382
  487. package/src/meeting/effectsState.js +0 -205
  488. package/src/meeting-info/meeting-info-v2.js +0 -255
  489. package/src/meetings/index.js +0 -1015
  490. package/src/multistream/multistreamMedia.ts +0 -92
  491. package/src/peer-connection-manager/util.ts +0 -117
  492. package/src/roap/request.js +0 -127
  493. package/src/statsAnalyzer/global.js +0 -133
  494. package/src/statsAnalyzer/index.js +0 -1006
  495. package/src/statsAnalyzer/mqaUtil.js +0 -173
  496. package/test/unit/spec/meeting/effectsState.js +0 -291
  497. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
  498. /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
@@ -0,0 +1,130 @@
1
+ /*!
2
+ * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+
5
+ import {WebexPlugin} from '@webex/webex-core';
6
+
7
+ import {HTTP_VERBS, MEETINGS} from '../constants';
8
+ import LocusInfo from '../locus-info';
9
+ import Members from '../members';
10
+ import BreakoutRequest from './request';
11
+
12
+ /**
13
+ * @class
14
+ */
15
+ const Breakout = WebexPlugin.extend({
16
+ idAttribute: 'sessionId',
17
+
18
+ namespace: MEETINGS,
19
+
20
+ breakoutRequest: BreakoutRequest,
21
+ props: {
22
+ active: ['boolean', false, false], // this session is active
23
+ allowed: ['boolean', false, false], // allowed to join this session
24
+ assigned: ['boolean', false, false], // assigned to this session, but not necessarily joined yet
25
+ assignedCurrent: ['boolean', false, false], // assigned AND current session
26
+ requested: ['boolean', false, false], // requested by the host to join this session
27
+ current: ['boolean', false, false], // the current joined session
28
+ name: 'string',
29
+ sessionId: 'string',
30
+ sessionType: 'string',
31
+ groupId: 'string',
32
+ url: 'string', // where to send requests to
33
+ },
34
+
35
+ derived: {
36
+ isMain: {
37
+ deps: ['sessionType'],
38
+ /**
39
+ * If the breakout has no name, assume it is the main session
40
+ * @returns {boolean}
41
+ */
42
+ fn() {
43
+ return this.sessionType === 'MAIN';
44
+ },
45
+ },
46
+ },
47
+
48
+ initialize() {
49
+ this.members = new Members({}, {parent: this.webex});
50
+ // @ts-ignore
51
+ this.breakoutRequest = new BreakoutRequest({webex: this.webex});
52
+ },
53
+
54
+ /**
55
+ * Joins the breakout session
56
+ * @returns {Promise}
57
+ */
58
+ join() {
59
+ return this.request({
60
+ method: HTTP_VERBS.POST,
61
+ uri: `${this.url}/move`,
62
+ body: {
63
+ groupId: this.groupId,
64
+ sessionId: this.sessionId,
65
+ },
66
+ });
67
+ },
68
+
69
+ /**
70
+ * Leaves the breakout session to return to the main session
71
+ * @returns {Promise}
72
+ * @throws {Error} if an attempt is made to leave the main session or if the main session cannot be found
73
+ */
74
+ leave() {
75
+ if (this.isMain) {
76
+ throw new Error('Cannot leave the main session');
77
+ }
78
+
79
+ const mainSession = this.parent.breakouts.filter((breakout) => breakout.isMain)[0];
80
+
81
+ if (!mainSession) {
82
+ throw new Error('Cannot leave, no main session found');
83
+ }
84
+
85
+ return mainSession.join();
86
+ },
87
+
88
+ /**
89
+ * Sends a help request for the current breakout
90
+ * @returns {Promise}
91
+ */
92
+ askForHelp() {
93
+ return this.request({
94
+ method: HTTP_VERBS.POST,
95
+ uri: `${this.url}/help`,
96
+ body: {
97
+ groupId: this.groupId,
98
+ sessionId: this.sessionId,
99
+ },
100
+ });
101
+ },
102
+
103
+ /**
104
+ * Parses the participants from the locus object
105
+ * @param locus Locus object
106
+ * @returns {void}
107
+ */
108
+
109
+ parseRoster(locus) {
110
+ this.members.locusParticipantsUpdate(locus);
111
+ },
112
+
113
+ /**
114
+ * Broadcast message to this breakout session's participants
115
+ * @param {String} message
116
+ * @param {Object} options
117
+ * @returns {Promise}
118
+ */
119
+ broadcast(message, options) {
120
+ return this.breakoutRequest.broadcast({
121
+ url: this.url,
122
+ message,
123
+ options,
124
+ groupId: this.groupId,
125
+ sessionId: this.sessionId,
126
+ });
127
+ },
128
+ });
129
+
130
+ export default Breakout;
@@ -0,0 +1,19 @@
1
+ /*!
2
+ * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+
5
+ import AmpCollection from 'ampersand-collection';
6
+
7
+ import {MEETINGS} from '../constants';
8
+
9
+ import Breakout from './breakout';
10
+
11
+ const BreakoutCollection = AmpCollection.extend({
12
+ model: Breakout,
13
+
14
+ namespace: MEETINGS,
15
+
16
+ mainIndex: 'sessionId',
17
+ });
18
+
19
+ export default BreakoutCollection;
@@ -0,0 +1,25 @@
1
+ import {ERROR_DICTIONARY} from '../constants';
2
+
3
+ /**
4
+ * Extended Error object to signify breakout related errors
5
+ */
6
+ export default class BreakoutEditLockedError extends Error {
7
+ code: any;
8
+ error: any;
9
+ sdkMessage: any;
10
+
11
+ /**
12
+ *
13
+ * @constructor
14
+ * @param {String} [message]
15
+ * @param {Object} [error]
16
+ */
17
+ constructor(message: string = ERROR_DICTIONARY.BREAKOUT_EDIT.MESSAGE, error: any = null) {
18
+ super(message);
19
+ this.name = ERROR_DICTIONARY.BREAKOUT_EDIT.NAME;
20
+ this.sdkMessage = ERROR_DICTIONARY.BREAKOUT_EDIT.MESSAGE;
21
+ this.error = error;
22
+ this.stack = error ? error.stack : new Error().stack;
23
+ this.code = ERROR_DICTIONARY.BREAKOUT_EDIT.CODE;
24
+ }
25
+ }
@@ -0,0 +1,511 @@
1
+ /*!
2
+ * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+ import {WebexPlugin} from '@webex/webex-core';
5
+ import {debounce, forEach} from 'lodash';
6
+ import LoggerProxy from '../common/logs/logger-proxy';
7
+
8
+ import {BREAKOUTS, MEETINGS, HTTP_VERBS} from '../constants';
9
+
10
+ import Breakout from './breakout';
11
+ import BreakoutCollection from './collection';
12
+ import BreakoutRequest from './request';
13
+ import {boServiceErrorHandler} from './utils';
14
+
15
+ /**
16
+ * @class Breakouts
17
+ */
18
+ const Breakouts = WebexPlugin.extend({
19
+ namespace: MEETINGS,
20
+ breakoutRequest: BreakoutRequest,
21
+ collections: {
22
+ breakouts: BreakoutCollection,
23
+ },
24
+
25
+ props: {
26
+ allowBackToMain: 'boolean', // only present when in a breakout session
27
+ delayCloseTime: 'number', // appears once breakouts start
28
+ enableBreakoutSession: 'boolean', // appears from the moment you enable breakouts
29
+ groupId: 'string', // appears from the moment you enable breakouts
30
+ name: 'string', // only present when in a breakout session
31
+ sessionId: 'string', // appears from the moment you enable breakouts
32
+ sessionType: 'string', // appears from the moment you enable breakouts
33
+ startTime: 'string', // appears once breakouts start
34
+ status: 'string', // only present when in a breakout session
35
+ url: 'string', // appears from the moment you enable breakouts
36
+ locusUrl: 'string', // the current locus url
37
+ breakoutServiceUrl: 'string', // the current breakout resouce url
38
+ mainLocusUrl: 'string', // the locus url of the main session
39
+ groups: 'array', // appears when create breakouts
40
+ },
41
+
42
+ children: {
43
+ currentBreakoutSession: Breakout,
44
+ },
45
+
46
+ derived: {
47
+ isInMainSession: {
48
+ deps: ['sessionType'],
49
+ /**
50
+ * Returns true if the user is in the main session
51
+ * @returns {boolean}
52
+ */
53
+ fn() {
54
+ return this.sessionType === BREAKOUTS.SESSION_TYPES.MAIN;
55
+ },
56
+ },
57
+ breakoutGroupId: {
58
+ deps: ['groups'],
59
+ /**
60
+ * Returns the actived group id
61
+ * @returns {boolean}
62
+ */
63
+ fn() {
64
+ if (this.groups?.length) {
65
+ return this.groups[0].id;
66
+ }
67
+
68
+ return '';
69
+ },
70
+ },
71
+ },
72
+
73
+ /**
74
+ * initialize for the breakouts
75
+ * @returns {void}
76
+ */
77
+ initialize() {
78
+ this.listenTo(this, 'change:status', () => {
79
+ if (this.status === BREAKOUTS.STATUS.CLOSING) {
80
+ this.trigger(BREAKOUTS.EVENTS.BREAKOUTS_CLOSING);
81
+ }
82
+ });
83
+ this.debouncedQueryRosters = debounce(this.queryRosters, 10, {
84
+ leading: true,
85
+ trailing: false,
86
+ });
87
+ this.listenTo(this.breakouts, 'add', () => {
88
+ this.debouncedQueryRosters();
89
+ });
90
+ this.listenToBroadcastMessages();
91
+ this.listenToBreakoutRosters();
92
+ // @ts-ignore
93
+ this.breakoutRequest = new BreakoutRequest({webex: this.webex});
94
+ },
95
+
96
+ /**
97
+ * Calls this to clean up listeners
98
+ * @returns {void}
99
+ */
100
+ cleanUp() {
101
+ this.stopListening();
102
+ },
103
+
104
+ /**
105
+ * Update the current locus url of the meeting
106
+ * @param {string} locusUrl // locus url
107
+ * @returns {void}
108
+ */
109
+ locusUrlUpdate(locusUrl) {
110
+ this.set('locusUrl', locusUrl);
111
+ const {isInMainSession, mainLocusUrl} = this;
112
+ if (isInMainSession || !mainLocusUrl) {
113
+ this.set('mainLocusUrl', locusUrl);
114
+ }
115
+ },
116
+
117
+ /**
118
+ * Update the current breakout resouce url
119
+ * @param {string} breakoutServiceUrl
120
+ * @returns {void}
121
+ */
122
+ breakoutServiceUrlUpdate(breakoutServiceUrl) {
123
+ this.set('breakoutServiceUrl', `${breakoutServiceUrl}/breakout/`);
124
+ },
125
+
126
+ /**
127
+ * The initial roster lists need to be queried because you don't
128
+ * get a breakout.roster event when you join the meeting
129
+ * @returns {void}
130
+ */
131
+ queryRosters() {
132
+ this.webex
133
+ .request({uri: `${this.url}/roster`, qs: {locusUrl: btoa(this.locusUrl)}})
134
+ .then((result) => {
135
+ const {
136
+ body: {rosters},
137
+ } = result;
138
+
139
+ rosters?.forEach(({locus}) => {
140
+ this.handleRosterUpdate(locus);
141
+ });
142
+
143
+ this.trigger(BREAKOUTS.EVENTS.MEMBERS_UPDATE);
144
+ })
145
+ .catch((error) => {
146
+ LoggerProxy.logger.error('Meeting:breakouts#queryRosters failed', error);
147
+ });
148
+ },
149
+
150
+ /**
151
+ *
152
+ * @param {Object} locus // locus object
153
+ * @returns {void}
154
+ */
155
+ handleRosterUpdate(locus) {
156
+ const sessionId = locus.controls?.breakout?.sessionId;
157
+
158
+ const session = this.breakouts.get(sessionId);
159
+
160
+ if (!session) {
161
+ return;
162
+ }
163
+
164
+ session.parseRoster(locus);
165
+ },
166
+
167
+ /**
168
+ * Sets up listener for broadcast messages sent to the breakout session
169
+ * @returns {void}
170
+ */
171
+ listenToBroadcastMessages() {
172
+ this.listenTo(this.webex.internal.llm, 'event:breakout.message', (event) => {
173
+ const {
174
+ data: {senderUserId, sentTime, message},
175
+ } = event;
176
+
177
+ this.trigger(BREAKOUTS.EVENTS.MESSAGE, {
178
+ senderUserId,
179
+ sentTime,
180
+ message,
181
+ // FIXME: This is only the current sessionId
182
+ // We'd need to check that the dataChannelUrl is still the same
183
+ // to guarantee that this message was sent to this session
184
+ sessionId: this.currentBreakoutSession.sessionId,
185
+ });
186
+ });
187
+ },
188
+
189
+ /**
190
+ * Sets up a listener for roster messags from mecury
191
+ * @returns {void}
192
+ */
193
+ listenToBreakoutRosters() {
194
+ this.listenTo(this.webex.internal.mercury, 'event:breakout.roster', (event) => {
195
+ this.handleRosterUpdate(event.data.locus);
196
+ this.trigger(BREAKOUTS.EVENTS.MEMBERS_UPDATE);
197
+ });
198
+ },
199
+
200
+ /**
201
+ * Updates the information about the current breakout
202
+ * @param {Object} params
203
+ * @returns {void}
204
+ */
205
+ updateBreakout(params) {
206
+ this.set(params);
207
+ this.set('groups', params.groups);
208
+
209
+ this.set('currentBreakoutSession', {
210
+ sessionId: params.sessionId,
211
+ groupId: params.groupId,
212
+ name: params.name,
213
+ current: true,
214
+ sessionType: params.sessionType,
215
+ url: params.url,
216
+ [BREAKOUTS.SESSION_STATES.ACTIVE]: false,
217
+ [BREAKOUTS.SESSION_STATES.ALLOWED]: false,
218
+ [BREAKOUTS.SESSION_STATES.ALLOWED]: false,
219
+ [BREAKOUTS.SESSION_STATES.ASSIGNED_CURRENT]: false,
220
+ [BREAKOUTS.SESSION_STATES.REQUESTED]: false,
221
+ });
222
+
223
+ this.set('enableBreakoutSession', params.enableBreakoutSession);
224
+ },
225
+
226
+ /**
227
+ * Updates the information about available breakouts
228
+ * @param {Object} payload
229
+ * @returns {void}
230
+ */
231
+ updateBreakoutSessions(payload) {
232
+ const breakouts = {};
233
+
234
+ if (payload.breakoutSessions) {
235
+ forEach(BREAKOUTS.SESSION_STATES, (state) => {
236
+ forEach(payload.breakoutSessions[state], (breakout) => {
237
+ const {sessionId} = breakout;
238
+
239
+ if (!breakouts[sessionId]) {
240
+ breakouts[sessionId] = breakout;
241
+ breakouts[sessionId][BREAKOUTS.SESSION_STATES.ACTIVE] = false;
242
+ breakouts[sessionId][BREAKOUTS.SESSION_STATES.ASSIGNED] = false;
243
+ breakouts[sessionId][BREAKOUTS.SESSION_STATES.ALLOWED] = false;
244
+ breakouts[sessionId][BREAKOUTS.SESSION_STATES.ASSIGNED_CURRENT] = false;
245
+ breakouts[sessionId][BREAKOUTS.SESSION_STATES.REQUESTED] = false;
246
+ }
247
+
248
+ breakouts[sessionId][state] = true;
249
+ });
250
+ });
251
+ }
252
+
253
+ forEach(breakouts, (breakout: typeof Breakout) => {
254
+ // eslint-disable-next-line no-param-reassign
255
+ breakout.url = this.url;
256
+ });
257
+
258
+ this.breakouts.set(Object.values(breakouts));
259
+ },
260
+ /**
261
+ * get main session
262
+ * @returns {Breakout}
263
+ */
264
+ getMainSession() {
265
+ if (this.isInMainSession) {
266
+ return this.currentBreakoutSession;
267
+ }
268
+
269
+ const mainSession = this.breakouts.filter((breakout) => breakout.isMain)[0];
270
+ if (!mainSession) {
271
+ throw new Error('no main session found');
272
+ }
273
+
274
+ return mainSession;
275
+ },
276
+ /**
277
+ * Host/CoHost ask all participants return to main session
278
+ * @returns {Promise}
279
+ */
280
+ askAllToReturn() {
281
+ const mainSession = this.getMainSession();
282
+
283
+ return this.webex.request({
284
+ method: HTTP_VERBS.POST,
285
+ uri: `${this.url}/requestMove`,
286
+ body: {
287
+ groupId: mainSession.groupId,
288
+ sessionId: mainSession.sessionId,
289
+ },
290
+ });
291
+ },
292
+
293
+ /**
294
+ * Broadcast message to all breakout session's participants
295
+ * @param {String} message
296
+ * @param {Object} options
297
+ * @returns {Promise}
298
+ */
299
+ broadcast(message, options) {
300
+ const {breakoutGroupId} = this;
301
+ if (!breakoutGroupId) {
302
+ throw new Error('Cannot broadcast, no breakout session found');
303
+ }
304
+
305
+ return this.breakoutRequest.broadcast({
306
+ url: this.url,
307
+ message,
308
+ options,
309
+ groupId: breakoutGroupId,
310
+ });
311
+ },
312
+ /**
313
+ * Make enable breakout resource
314
+ * @returns {Promise}
315
+ */
316
+ enableBreakouts() {
317
+ if (this.breakoutServiceUrl) {
318
+ // @ts-ignore
319
+ return this.webex
320
+ .request({
321
+ method: HTTP_VERBS.POST,
322
+ uri: this.breakoutServiceUrl,
323
+ body: {
324
+ locusUrl: this.locusUrl,
325
+ },
326
+ })
327
+ .catch((err) => {
328
+ LoggerProxy.logger.error(
329
+ `Meeting:request#touchBreakout --> Error provisioning error ${err}`
330
+ );
331
+ throw err;
332
+ });
333
+ }
334
+
335
+ return Promise.reject(new Error(`enableBreakouts: the breakoutServiceUrl is empty`));
336
+ },
337
+
338
+ /**
339
+ * Make the meeting enbale or disable breakout session
340
+ * @param {boolean} enable
341
+ * @returns {Promise}
342
+ */
343
+ async toggleBreakout(enable) {
344
+ if (this.enableBreakoutSession === undefined) {
345
+ const info = await this.enableBreakouts();
346
+ if (!enable) {
347
+ // if enable is false, updateBreakout set the param then set enableBreakoutSession as false
348
+ this.updateBreakout(info.body);
349
+ await this.doToggleBreakout(enable);
350
+ }
351
+ } else {
352
+ await this.doToggleBreakout(enable);
353
+ }
354
+ },
355
+
356
+ /**
357
+ * do toggle meeting breakout session enable or disable
358
+ * @param {boolean} enable
359
+ * @returns {Promise}
360
+ */
361
+ doToggleBreakout(enable) {
362
+ // @ts-ignore
363
+ return this.webex.request({
364
+ method: HTTP_VERBS.PUT,
365
+ uri: this.url,
366
+ body: {
367
+ enableBreakoutSession: enable,
368
+ },
369
+ });
370
+ },
371
+
372
+ /**
373
+ * Create new breakout sessions
374
+ * @param {object} sessions -- breakout session group
375
+ * @returns {Promise}
376
+ */
377
+ async create(sessions) {
378
+ // @ts-ignore
379
+ const breakInfo = await this.webex
380
+ .request({
381
+ method: HTTP_VERBS.PUT,
382
+ uri: this.url,
383
+ body: {
384
+ groups: [
385
+ {
386
+ sessions,
387
+ },
388
+ ],
389
+ },
390
+ })
391
+ .catch((error) => {
392
+ return Promise.reject(
393
+ boServiceErrorHandler(error, 'Breakouts#create --> Edit lock token mismatch')
394
+ );
395
+ });
396
+
397
+ if (breakInfo.body?.groups) {
398
+ this.set('groups', breakInfo.body.groups);
399
+ }
400
+
401
+ return Promise.resolve(breakInfo);
402
+ },
403
+
404
+ /**
405
+ * Delete all breakout sessions
406
+ * @returns {Promise}
407
+ */
408
+ async clearSessions() {
409
+ // @ts-ignore
410
+ const breakInfo = await this.webex
411
+ .request({
412
+ method: HTTP_VERBS.PUT,
413
+ uri: this.url,
414
+ body: {
415
+ groups: [
416
+ {
417
+ action: BREAKOUTS.ACTION.DELETE,
418
+ },
419
+ ],
420
+ },
421
+ })
422
+ .catch((error) => {
423
+ return Promise.reject(
424
+ boServiceErrorHandler(error, 'Breakouts#clearSessions --> Edit lock token mismatch')
425
+ );
426
+ });
427
+
428
+ if (breakInfo.body?.groups) {
429
+ this.set('groups', breakInfo.body.groups);
430
+ }
431
+
432
+ return Promise.resolve(breakInfo);
433
+ },
434
+
435
+ /**
436
+ * Host or cohost starts breakout sessions
437
+ * @param {object} params
438
+ * @returns {Promise}
439
+ */
440
+ start(params = {}) {
441
+ const action = BREAKOUTS.ACTION.START;
442
+ const payload = {
443
+ id: this.breakoutGroupId,
444
+ action,
445
+ allowBackToMain: false,
446
+ allowToJoinLater: false,
447
+ duration: BREAKOUTS.DEFAULT_DURATION,
448
+ ...params,
449
+ };
450
+
451
+ return this.request({
452
+ method: HTTP_VERBS.PUT,
453
+ uri: this.url,
454
+ body: {
455
+ groups: [payload],
456
+ },
457
+ }).catch((error) => {
458
+ return Promise.reject(
459
+ boServiceErrorHandler(error, 'Breakouts#start --> Edit lock token mismatch')
460
+ );
461
+ });
462
+ },
463
+
464
+ /**
465
+ * Host or cohost ends breakout sessions
466
+ * @param {object} params
467
+ * @returns {Promise}
468
+ */
469
+ end(params = {}) {
470
+ const {delayCloseTime, breakoutGroupId: id} = this;
471
+ const action = BREAKOUTS.ACTION.CLOSE;
472
+ const payload = {
473
+ id,
474
+ action,
475
+ delayCloseTime,
476
+ ...params,
477
+ };
478
+
479
+ return this.request({
480
+ method: HTTP_VERBS.PUT,
481
+ uri: this.url,
482
+ body: {
483
+ groups: [payload],
484
+ },
485
+ }).catch((error) => {
486
+ return Promise.reject(
487
+ boServiceErrorHandler(error, 'Breakouts#end --> Edit lock token mismatch')
488
+ );
489
+ });
490
+ },
491
+
492
+ /**
493
+ * get existed breakout sessions
494
+ * @param {boolean} editlock -- lock operations of the breakout sessions
495
+ * @returns {Promise}
496
+ */
497
+ async getBreakout(editlock) {
498
+ const breakout = await this.request({
499
+ method: HTTP_VERBS.GET,
500
+ uri: this.url + (editlock ? `?editlock=${editlock}` : ''),
501
+ });
502
+
503
+ if (breakout.body?.groups) {
504
+ this.set('groups', breakout.body.groups);
505
+ }
506
+
507
+ return breakout;
508
+ },
509
+ });
510
+
511
+ export default Breakouts;