@webex/plugin-meetings 3.0.0-beta.4 → 3.0.0-beta.40

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 +546 -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 +109 -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 +15 -0
  68. package/dist/controls-options-manager/enums.js.map +1 -0
  69. package/dist/controls-options-manager/index.js +203 -0
  70. package/dist/controls-options-manager/index.js.map +1 -0
  71. package/dist/controls-options-manager/util.js +28 -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 +12 -29
  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 +186 -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 +34 -91
  92. package/dist/locus-info/selfUtils.js.map +1 -1
  93. package/dist/media/index.js +66 -153
  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 +13 -14
  102. package/dist/meeting/in-meeting-actions.js.map +1 -1
  103. package/dist/meeting/index.js +2141 -2210
  104. package/dist/meeting/index.js.map +1 -1
  105. package/dist/meeting/muteState.js +59 -82
  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 +45 -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 +95 -200
  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 +9 -38
  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 +60 -82
  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 +360 -413
  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 +147 -183
  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 +361 -449
  200. package/dist/statsAnalyzer/index.js.map +1 -1
  201. package/dist/statsAnalyzer/mqaUtil.js +137 -81
  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 +916 -0
  236. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  237. package/dist/types/controls-options-manager/enums.d.ts +5 -0
  238. package/dist/types/controls-options-manager/index.d.ts +120 -0
  239. package/dist/types/controls-options-manager/util.d.ts +7 -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 +269 -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 +83 -0
  255. package/dist/types/meeting/index.d.ts +1699 -0
  256. package/dist/types/meeting/muteState.d.ts +116 -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 +320 -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 +46 -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 +241 -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 +140 -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 +504 -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 +62 -5
  339. package/src/controls-options-manager/constants.ts +5 -0
  340. package/src/controls-options-manager/enums.ts +6 -0
  341. package/src/controls-options-manager/index.ts +183 -0
  342. package/src/controls-options-manager/util.ts +20 -0
  343. package/src/index.js +4 -1
  344. package/src/locus-info/controlsUtils.ts +114 -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} +150 -66
  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} +123 -68
  353. package/src/media/{index.js → index.ts} +182 -173
  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 +31 -3
  358. package/src/meeting/{index.js → index.ts} +2512 -1579
  359. package/src/meeting/{muteState.js → muteState.ts} +95 -49
  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} +117 -119
  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} +221 -142
  378. package/src/members/{request.js → request.ts} +60 -16
  379. package/src/members/{util.js → util.ts} +50 -48
  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 +35 -21
  386. package/src/multistream/remoteMedia.ts +38 -5
  387. package/src/multistream/remoteMediaGroup.ts +4 -3
  388. package/src/multistream/remoteMediaManager.ts +152 -36
  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} +109 -85
  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 +1234 -0
  407. package/src/statsAnalyzer/mqaUtil.ts +293 -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 +124 -0
  421. package/test/unit/spec/controls-options-manager/util.js +66 -0
  422. package/test/unit/spec/fixture/locus.js +92 -90
  423. package/test/unit/spec/locus-info/controlsUtils.js +25 -5
  424. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  425. package/test/unit/spec/locus-info/index.js +104 -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 +97 -103
  431. package/test/unit/spec/locus-info/selfUtils.js +105 -12
  432. package/test/unit/spec/media/index.ts +39 -53
  433. package/test/unit/spec/media/properties.ts +9 -9
  434. package/test/unit/spec/meeting/in-meeting-actions.ts +13 -2
  435. package/test/unit/spec/meeting/index.js +2253 -811
  436. package/test/unit/spec/meeting/muteState.js +74 -55
  437. package/test/unit/spec/meeting/request.js +141 -43
  438. package/test/unit/spec/meeting/utils.js +106 -171
  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 +104 -54
  449. package/test/unit/spec/members/request.js +29 -20
  450. package/test/unit/spec/members/utils.js +8 -5
  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 +41 -13
  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 +412 -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 +70 -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 +86 -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,504 @@
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
+ groups: 'array', // appears when create breakouts
39
+ },
40
+
41
+ children: {
42
+ currentBreakoutSession: Breakout,
43
+ },
44
+
45
+ derived: {
46
+ isInMainSession: {
47
+ deps: ['sessionType'],
48
+ /**
49
+ * Returns true if the user is in the main session
50
+ * @returns {boolean}
51
+ */
52
+ fn() {
53
+ return this.sessionType === BREAKOUTS.SESSION_TYPES.MAIN;
54
+ },
55
+ },
56
+ breakoutGroupId: {
57
+ deps: ['groups'],
58
+ /**
59
+ * Returns the actived group id
60
+ * @returns {boolean}
61
+ */
62
+ fn() {
63
+ if (this.groups?.length) {
64
+ return this.groups[0].id;
65
+ }
66
+
67
+ return '';
68
+ },
69
+ },
70
+ },
71
+
72
+ /**
73
+ * initialize for the breakouts
74
+ * @returns {void}
75
+ */
76
+ initialize() {
77
+ this.listenTo(this, 'change:status', () => {
78
+ if (this.status === BREAKOUTS.STATUS.CLOSING) {
79
+ this.trigger(BREAKOUTS.EVENTS.BREAKOUTS_CLOSING);
80
+ }
81
+ });
82
+ this.debouncedQueryRosters = debounce(this.queryRosters, 10, {
83
+ leading: true,
84
+ trailing: false,
85
+ });
86
+ this.listenTo(this.breakouts, 'add', () => {
87
+ this.debouncedQueryRosters();
88
+ });
89
+ this.listenToBroadcastMessages();
90
+ this.listenToBreakoutRosters();
91
+ // @ts-ignore
92
+ this.breakoutRequest = new BreakoutRequest({webex: this.webex});
93
+ },
94
+
95
+ /**
96
+ * Calls this to clean up listeners
97
+ * @returns {void}
98
+ */
99
+ cleanUp() {
100
+ this.stopListening();
101
+ },
102
+
103
+ /**
104
+ * Update the current locus url of the meeting
105
+ * @param {string} locusUrl // locus url
106
+ * @returns {void}
107
+ */
108
+ locusUrlUpdate(locusUrl) {
109
+ this.set('locusUrl', locusUrl);
110
+ },
111
+
112
+ /**
113
+ * Update the current breakout resouce url
114
+ * @param {string} breakoutServiceUrl
115
+ * @returns {void}
116
+ */
117
+ breakoutServiceUrlUpdate(breakoutServiceUrl) {
118
+ this.set('breakoutServiceUrl', `${breakoutServiceUrl}/breakout/`);
119
+ },
120
+
121
+ /**
122
+ * The initial roster lists need to be queried because you don't
123
+ * get a breakout.roster event when you join the meeting
124
+ * @returns {void}
125
+ */
126
+ queryRosters() {
127
+ this.webex
128
+ .request({uri: `${this.url}/roster`, qs: {locusUrl: btoa(this.locusUrl)}})
129
+ .then((result) => {
130
+ const {
131
+ body: {rosters},
132
+ } = result;
133
+
134
+ rosters.forEach(({locus}) => {
135
+ this.handleRosterUpdate(locus);
136
+ });
137
+
138
+ this.trigger(BREAKOUTS.EVENTS.MEMBERS_UPDATE);
139
+ })
140
+ .catch((error) => {
141
+ LoggerProxy.logger.error('Meeting:breakouts#queryRosters failed', error);
142
+ });
143
+ },
144
+
145
+ /**
146
+ *
147
+ * @param {Object} locus // locus object
148
+ * @returns {void}
149
+ */
150
+ handleRosterUpdate(locus) {
151
+ const sessionId = locus.controls?.breakout?.sessionId;
152
+
153
+ const session = this.breakouts.get(sessionId);
154
+
155
+ if (!session) {
156
+ return;
157
+ }
158
+
159
+ session.parseRoster(locus);
160
+ },
161
+
162
+ /**
163
+ * Sets up listener for broadcast messages sent to the breakout session
164
+ * @returns {void}
165
+ */
166
+ listenToBroadcastMessages() {
167
+ this.listenTo(this.webex.internal.llm, 'event:breakout.message', (event) => {
168
+ const {
169
+ data: {senderUserId, sentTime, message},
170
+ } = event;
171
+
172
+ this.trigger(BREAKOUTS.EVENTS.MESSAGE, {
173
+ senderUserId,
174
+ sentTime,
175
+ message,
176
+ // FIXME: This is only the current sessionId
177
+ // We'd need to check that the dataChannelUrl is still the same
178
+ // to guarantee that this message was sent to this session
179
+ sessionId: this.currentBreakoutSession.sessionId,
180
+ });
181
+ });
182
+ },
183
+
184
+ /**
185
+ * Sets up a listener for roster messags from mecury
186
+ * @returns {void}
187
+ */
188
+ listenToBreakoutRosters() {
189
+ this.listenTo(this.webex.internal.mercury, 'event:breakout.roster', (event) => {
190
+ this.handleRosterUpdate(event.data.locus);
191
+ this.trigger(BREAKOUTS.EVENTS.MEMBERS_UPDATE);
192
+ });
193
+ },
194
+
195
+ /**
196
+ * Updates the information about the current breakout
197
+ * @param {Object} params
198
+ * @returns {void}
199
+ */
200
+ updateBreakout(params) {
201
+ this.set(params);
202
+
203
+ this.set('currentBreakoutSession', {
204
+ sessionId: params.sessionId,
205
+ groupId: params.groupId,
206
+ name: params.name,
207
+ current: true,
208
+ sessionType: params.sessionType,
209
+ url: params.url,
210
+ [BREAKOUTS.SESSION_STATES.ACTIVE]: false,
211
+ [BREAKOUTS.SESSION_STATES.ALLOWED]: false,
212
+ [BREAKOUTS.SESSION_STATES.ALLOWED]: false,
213
+ [BREAKOUTS.SESSION_STATES.ASSIGNED_CURRENT]: false,
214
+ [BREAKOUTS.SESSION_STATES.REQUESTED]: false,
215
+ });
216
+
217
+ this.set('enableBreakoutSession', params.enableBreakoutSession);
218
+ },
219
+
220
+ /**
221
+ * Updates the information about available breakouts
222
+ * @param {Object} payload
223
+ * @returns {void}
224
+ */
225
+ updateBreakoutSessions(payload) {
226
+ const breakouts = {};
227
+
228
+ if (payload.breakoutSessions) {
229
+ forEach(BREAKOUTS.SESSION_STATES, (state) => {
230
+ forEach(payload.breakoutSessions[state], (breakout) => {
231
+ const {sessionId} = breakout;
232
+
233
+ if (!breakouts[sessionId]) {
234
+ breakouts[sessionId] = breakout;
235
+ breakouts[sessionId][BREAKOUTS.SESSION_STATES.ACTIVE] = false;
236
+ breakouts[sessionId][BREAKOUTS.SESSION_STATES.ASSIGNED] = false;
237
+ breakouts[sessionId][BREAKOUTS.SESSION_STATES.ALLOWED] = false;
238
+ breakouts[sessionId][BREAKOUTS.SESSION_STATES.ASSIGNED_CURRENT] = false;
239
+ breakouts[sessionId][BREAKOUTS.SESSION_STATES.REQUESTED] = false;
240
+ }
241
+
242
+ breakouts[sessionId][state] = true;
243
+ });
244
+ });
245
+ }
246
+
247
+ forEach(breakouts, (breakout: typeof Breakout) => {
248
+ // eslint-disable-next-line no-param-reassign
249
+ breakout.url = this.url;
250
+ });
251
+
252
+ this.breakouts.set(Object.values(breakouts));
253
+ },
254
+ /**
255
+ * get main session
256
+ * @returns {Breakout}
257
+ */
258
+ getMainSession() {
259
+ if (this.isInMainSession) {
260
+ return this.currentBreakoutSession;
261
+ }
262
+
263
+ const mainSession = this.breakouts.filter((breakout) => breakout.isMain)[0];
264
+ if (!mainSession) {
265
+ throw new Error('no main session found');
266
+ }
267
+
268
+ return mainSession;
269
+ },
270
+ /**
271
+ * Host/CoHost ask all participants return to main session
272
+ * @returns {Promise}
273
+ */
274
+ askAllToReturn() {
275
+ const mainSession = this.getMainSession();
276
+
277
+ return this.webex.request({
278
+ method: HTTP_VERBS.POST,
279
+ uri: `${this.url}/requestMove`,
280
+ body: {
281
+ groupId: mainSession.groupId,
282
+ sessionId: mainSession.sessionId,
283
+ },
284
+ });
285
+ },
286
+
287
+ /**
288
+ * Broadcast message to all breakout session's participants
289
+ * @param {String} message
290
+ * @param {Object} options
291
+ * @returns {Promise}
292
+ */
293
+ broadcast(message, options) {
294
+ const {breakoutGroupId} = this;
295
+ if (!breakoutGroupId) {
296
+ throw new Error('Cannot broadcast, no breakout session found');
297
+ }
298
+
299
+ return this.breakoutRequest.broadcast({
300
+ url: this.url,
301
+ message,
302
+ options,
303
+ groupId: breakoutGroupId,
304
+ });
305
+ },
306
+ /**
307
+ * Make enable breakout resource
308
+ * @returns {Promise}
309
+ */
310
+ enableBreakouts() {
311
+ if (this.breakoutServiceUrl) {
312
+ // @ts-ignore
313
+ return this.webex
314
+ .request({
315
+ method: HTTP_VERBS.POST,
316
+ uri: this.breakoutServiceUrl,
317
+ body: {
318
+ locusUrl: this.locusUrl,
319
+ },
320
+ })
321
+ .catch((err) => {
322
+ LoggerProxy.logger.error(
323
+ `Meeting:request#touchBreakout --> Error provisioning error ${err}`
324
+ );
325
+ throw err;
326
+ });
327
+ }
328
+
329
+ return Promise.reject(new Error(`enableBreakouts: the breakoutServiceUrl is empty`));
330
+ },
331
+
332
+ /**
333
+ * Make the meeting enbale or disable breakout session
334
+ * @param {boolean} enable
335
+ * @returns {Promise}
336
+ */
337
+ async toggleBreakout(enable) {
338
+ if (this.enableBreakoutSession === undefined) {
339
+ const info = await this.enableBreakouts();
340
+ if (!enable) {
341
+ // if enable is false, updateBreakout set the param then set enableBreakoutSession as false
342
+ this.updateBreakout(info.body);
343
+ await this.doToggleBreakout(enable);
344
+ }
345
+ } else {
346
+ await this.doToggleBreakout(enable);
347
+ }
348
+ },
349
+
350
+ /**
351
+ * do toggle meeting breakout session enable or disable
352
+ * @param {boolean} enable
353
+ * @returns {Promise}
354
+ */
355
+ doToggleBreakout(enable) {
356
+ // @ts-ignore
357
+ return this.webex.request({
358
+ method: HTTP_VERBS.PUT,
359
+ uri: this.url,
360
+ body: {
361
+ enableBreakoutSession: enable,
362
+ },
363
+ });
364
+ },
365
+
366
+ /**
367
+ * Create new breakout sessions
368
+ * @param {object} sessions -- breakout session group
369
+ * @returns {Promise}
370
+ */
371
+ async create(sessions) {
372
+ // @ts-ignore
373
+ const breakInfo = await this.webex
374
+ .request({
375
+ method: HTTP_VERBS.PUT,
376
+ uri: this.url,
377
+ body: {
378
+ groups: [
379
+ {
380
+ sessions,
381
+ },
382
+ ],
383
+ },
384
+ })
385
+ .catch((error) => {
386
+ return Promise.reject(
387
+ boServiceErrorHandler(error, 'Breakouts#create --> Edit lock token mismatch')
388
+ );
389
+ });
390
+
391
+ if (breakInfo.body?.groups) {
392
+ this.set('groups', breakInfo.body.groups);
393
+ }
394
+
395
+ return Promise.resolve(breakInfo);
396
+ },
397
+
398
+ /**
399
+ * Delete all breakout sessions
400
+ * @returns {Promise}
401
+ */
402
+ async clearSessions() {
403
+ // @ts-ignore
404
+ const breakInfo = await this.webex
405
+ .request({
406
+ method: HTTP_VERBS.PUT,
407
+ uri: this.url,
408
+ body: {
409
+ groups: [
410
+ {
411
+ action: BREAKOUTS.ACTION.DELETE,
412
+ },
413
+ ],
414
+ },
415
+ })
416
+ .catch((error) => {
417
+ return Promise.reject(
418
+ boServiceErrorHandler(error, 'Breakouts#clearSessions --> Edit lock token mismatch')
419
+ );
420
+ });
421
+
422
+ if (breakInfo.body?.groups) {
423
+ this.set('groups', breakInfo.body.groups);
424
+ }
425
+
426
+ return Promise.resolve(breakInfo);
427
+ },
428
+
429
+ /**
430
+ * Host or cohost starts breakout sessions
431
+ * @param {object} params
432
+ * @returns {Promise}
433
+ */
434
+ start(params = {}) {
435
+ const action = BREAKOUTS.ACTION.START;
436
+ const payload = {
437
+ id: this.breakoutGroupId,
438
+ action,
439
+ allowBackToMain: false,
440
+ allowToJoinLater: false,
441
+ ...params,
442
+ };
443
+
444
+ return this.request({
445
+ method: HTTP_VERBS.PUT,
446
+ uri: this.url,
447
+ body: {
448
+ groups: [payload],
449
+ },
450
+ }).catch((error) => {
451
+ return Promise.reject(
452
+ boServiceErrorHandler(error, 'Breakouts#start --> Edit lock token mismatch')
453
+ );
454
+ });
455
+ },
456
+
457
+ /**
458
+ * Host or cohost ends breakout sessions
459
+ * @param {object} params
460
+ * @returns {Promise}
461
+ */
462
+ end(params = {}) {
463
+ const {delayCloseTime, breakoutGroupId: id} = this;
464
+ const action = BREAKOUTS.ACTION.CLOSE;
465
+ const payload = {
466
+ id,
467
+ action,
468
+ delayCloseTime,
469
+ ...params,
470
+ };
471
+
472
+ return this.request({
473
+ method: HTTP_VERBS.PUT,
474
+ uri: this.url,
475
+ body: {
476
+ groups: [payload],
477
+ },
478
+ }).catch((error) => {
479
+ return Promise.reject(
480
+ boServiceErrorHandler(error, 'Breakouts#end --> Edit lock token mismatch')
481
+ );
482
+ });
483
+ },
484
+
485
+ /**
486
+ * get existed breakout sessions
487
+ * @param {boolean} editlock -- lock operations of the breakout sessions
488
+ * @returns {Promise}
489
+ */
490
+ async getBreakout(editlock) {
491
+ const breakout = await this.request({
492
+ method: HTTP_VERBS.GET,
493
+ uri: this.url + (editlock ? `?editlock=${editlock}` : ''),
494
+ });
495
+
496
+ if (breakout.body?.groups) {
497
+ this.set('groups', breakout.body.groups);
498
+ }
499
+
500
+ return breakout;
501
+ },
502
+ });
503
+
504
+ export default Breakouts;