@webex/plugin-meetings 3.0.0-beta.9 → 3.0.0-beta.90

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 (507) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/annotation/annotation.types.js +7 -0
  4. package/dist/annotation/annotation.types.js.map +1 -0
  5. package/dist/annotation/constants.js +48 -0
  6. package/dist/annotation/constants.js.map +1 -0
  7. package/dist/annotation/index.js +325 -0
  8. package/dist/annotation/index.js.map +1 -0
  9. package/dist/breakouts/breakout.js +180 -0
  10. package/dist/breakouts/breakout.js.map +1 -0
  11. package/dist/breakouts/collection.js +23 -0
  12. package/dist/breakouts/collection.js.map +1 -0
  13. package/dist/breakouts/edit-lock-error.js +52 -0
  14. package/dist/breakouts/edit-lock-error.js.map +1 -0
  15. package/dist/breakouts/index.js +868 -0
  16. package/dist/breakouts/index.js.map +1 -0
  17. package/dist/breakouts/request.js +78 -0
  18. package/dist/breakouts/request.js.map +1 -0
  19. package/dist/breakouts/utils.js +67 -0
  20. package/dist/breakouts/utils.js.map +1 -0
  21. package/dist/common/browser-detection.js +1 -20
  22. package/dist/common/browser-detection.js.map +1 -1
  23. package/dist/common/collection.js +5 -20
  24. package/dist/common/collection.js.map +1 -1
  25. package/dist/common/config.js +0 -7
  26. package/dist/common/config.js.map +1 -1
  27. package/dist/common/errors/captcha-error.js +5 -26
  28. package/dist/common/errors/captcha-error.js.map +1 -1
  29. package/dist/common/errors/intent-to-join.js +5 -26
  30. package/dist/common/errors/intent-to-join.js.map +1 -1
  31. package/dist/common/errors/join-meeting.js +6 -27
  32. package/dist/common/errors/join-meeting.js.map +1 -1
  33. package/dist/common/errors/media.js +5 -26
  34. package/dist/common/errors/media.js.map +1 -1
  35. package/dist/common/errors/parameter.js +5 -33
  36. package/dist/common/errors/parameter.js.map +1 -1
  37. package/dist/common/errors/password-error.js +5 -26
  38. package/dist/common/errors/password-error.js.map +1 -1
  39. package/dist/common/errors/permission.js +4 -25
  40. package/dist/common/errors/permission.js.map +1 -1
  41. package/dist/common/errors/reconnection-in-progress.js +0 -17
  42. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  43. package/dist/common/errors/reconnection.js +5 -26
  44. package/dist/common/errors/reconnection.js.map +1 -1
  45. package/dist/common/errors/stats.js +5 -26
  46. package/dist/common/errors/stats.js.map +1 -1
  47. package/dist/common/errors/webex-errors.js +6 -41
  48. package/dist/common/errors/webex-errors.js.map +1 -1
  49. package/dist/common/errors/webex-meetings-error.js +1 -24
  50. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  51. package/dist/common/events/events-scope.js +0 -22
  52. package/dist/common/events/events-scope.js.map +1 -1
  53. package/dist/common/events/events.js +0 -23
  54. package/dist/common/events/events.js.map +1 -1
  55. package/dist/common/events/trigger-proxy.js +0 -12
  56. package/dist/common/events/trigger-proxy.js.map +1 -1
  57. package/dist/common/events/util.js +0 -15
  58. package/dist/common/events/util.js.map +1 -1
  59. package/dist/common/logs/logger-config.js +0 -4
  60. package/dist/common/logs/logger-config.js.map +1 -1
  61. package/dist/common/logs/logger-proxy.js +1 -8
  62. package/dist/common/logs/logger-proxy.js.map +1 -1
  63. package/dist/common/logs/request.js +35 -61
  64. package/dist/common/logs/request.js.map +1 -1
  65. package/dist/common/queue.js +4 -14
  66. package/dist/common/queue.js.map +1 -1
  67. package/dist/config.js +7 -6
  68. package/dist/config.js.map +1 -1
  69. package/dist/constants.js +167 -52
  70. package/dist/constants.js.map +1 -1
  71. package/dist/controls-options-manager/constants.js +14 -0
  72. package/dist/controls-options-manager/constants.js.map +1 -0
  73. package/dist/controls-options-manager/enums.js +25 -0
  74. package/dist/controls-options-manager/enums.js.map +1 -0
  75. package/dist/controls-options-manager/index.js +292 -0
  76. package/dist/controls-options-manager/index.js.map +1 -0
  77. package/dist/controls-options-manager/types.js +7 -0
  78. package/dist/controls-options-manager/types.js.map +1 -0
  79. package/dist/controls-options-manager/util.js +250 -0
  80. package/dist/controls-options-manager/util.js.map +1 -0
  81. package/dist/index.js +72 -17
  82. package/dist/index.js.map +1 -1
  83. package/dist/locus-info/controlsUtils.js +56 -29
  84. package/dist/locus-info/controlsUtils.js.map +1 -1
  85. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  86. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  87. package/dist/locus-info/fullState.js +0 -15
  88. package/dist/locus-info/fullState.js.map +1 -1
  89. package/dist/locus-info/hostUtils.js +4 -12
  90. package/dist/locus-info/hostUtils.js.map +1 -1
  91. package/dist/locus-info/index.js +325 -208
  92. package/dist/locus-info/index.js.map +1 -1
  93. package/dist/locus-info/infoUtils.js +3 -37
  94. package/dist/locus-info/infoUtils.js.map +1 -1
  95. package/dist/locus-info/mediaSharesUtils.js +12 -38
  96. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  97. package/dist/locus-info/parser.js +88 -123
  98. package/dist/locus-info/parser.js.map +1 -1
  99. package/dist/locus-info/selfUtils.js +87 -91
  100. package/dist/locus-info/selfUtils.js.map +1 -1
  101. package/dist/media/index.js +62 -147
  102. package/dist/media/index.js.map +1 -1
  103. package/dist/media/properties.js +71 -117
  104. package/dist/media/properties.js.map +1 -1
  105. package/dist/media/util.js +2 -9
  106. package/dist/media/util.js.map +1 -1
  107. package/dist/mediaQualityMetrics/config.js +505 -495
  108. package/dist/mediaQualityMetrics/config.js.map +1 -1
  109. package/dist/meeting/in-meeting-actions.js +35 -14
  110. package/dist/meeting/in-meeting-actions.js.map +1 -1
  111. package/dist/meeting/index.js +2249 -2269
  112. package/dist/meeting/index.js.map +1 -1
  113. package/dist/meeting/muteState.js +252 -113
  114. package/dist/meeting/muteState.js.map +1 -1
  115. package/dist/meeting/request.js +318 -283
  116. package/dist/meeting/request.js.map +1 -1
  117. package/dist/meeting/request.type.js +7 -0
  118. package/dist/meeting/request.type.js.map +1 -0
  119. package/dist/meeting/state.js +21 -31
  120. package/dist/meeting/state.js.map +1 -1
  121. package/dist/meeting/util.js +69 -217
  122. package/dist/meeting/util.js.map +1 -1
  123. package/dist/meeting-info/collection.js +3 -25
  124. package/dist/meeting-info/collection.js.map +1 -1
  125. package/dist/meeting-info/index.js +10 -33
  126. package/dist/meeting-info/index.js.map +1 -1
  127. package/dist/meeting-info/meeting-info-v2.js +258 -281
  128. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  129. package/dist/meeting-info/request.js +1 -16
  130. package/dist/meeting-info/request.js.map +1 -1
  131. package/dist/meeting-info/util.js +98 -183
  132. package/dist/meeting-info/util.js.map +1 -1
  133. package/dist/meeting-info/utilv2.js +154 -232
  134. package/dist/meeting-info/utilv2.js.map +1 -1
  135. package/dist/meetings/collection.js +24 -20
  136. package/dist/meetings/collection.js.map +1 -1
  137. package/dist/meetings/index.js +573 -587
  138. package/dist/meetings/index.js.map +1 -1
  139. package/dist/meetings/request.js +23 -42
  140. package/dist/meetings/request.js.map +1 -1
  141. package/dist/meetings/util.js +164 -155
  142. package/dist/meetings/util.js.map +1 -1
  143. package/dist/member/index.js +80 -88
  144. package/dist/member/index.js.map +1 -1
  145. package/dist/member/types.js +15 -0
  146. package/dist/member/types.js.map +1 -0
  147. package/dist/member/util.js +90 -69
  148. package/dist/member/util.js.map +1 -1
  149. package/dist/members/collection.js +12 -12
  150. package/dist/members/collection.js.map +1 -1
  151. package/dist/members/index.js +162 -204
  152. package/dist/members/index.js.map +1 -1
  153. package/dist/members/request.js +58 -53
  154. package/dist/members/request.js.map +1 -1
  155. package/dist/members/types.js +15 -0
  156. package/dist/members/types.js.map +1 -0
  157. package/dist/members/util.js +107 -44
  158. package/dist/members/util.js.map +1 -1
  159. package/dist/metrics/config.js +4 -14
  160. package/dist/metrics/config.js.map +1 -1
  161. package/dist/metrics/constants.js +3 -7
  162. package/dist/metrics/constants.js.map +1 -1
  163. package/dist/metrics/index.js +56 -159
  164. package/dist/metrics/index.js.map +1 -1
  165. package/dist/multistream/mediaRequestManager.js +167 -50
  166. package/dist/multistream/mediaRequestManager.js.map +1 -1
  167. package/dist/multistream/receiveSlot.js +58 -65
  168. package/dist/multistream/receiveSlot.js.map +1 -1
  169. package/dist/multistream/receiveSlotManager.js +74 -93
  170. package/dist/multistream/receiveSlotManager.js.map +1 -1
  171. package/dist/multistream/remoteMedia.js +55 -74
  172. package/dist/multistream/remoteMedia.js.map +1 -1
  173. package/dist/multistream/remoteMediaGroup.js +6 -40
  174. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  175. package/dist/multistream/remoteMediaManager.js +466 -442
  176. package/dist/multistream/remoteMediaManager.js.map +1 -1
  177. package/dist/networkQualityMonitor/index.js +32 -59
  178. package/dist/networkQualityMonitor/index.js.map +1 -1
  179. package/dist/personal-meeting-room/index.js +10 -45
  180. package/dist/personal-meeting-room/index.js.map +1 -1
  181. package/dist/personal-meeting-room/request.js +2 -33
  182. package/dist/personal-meeting-room/request.js.map +1 -1
  183. package/dist/personal-meeting-room/util.js +0 -13
  184. package/dist/personal-meeting-room/util.js.map +1 -1
  185. package/dist/reachability/index.js +190 -199
  186. package/dist/reachability/index.js.map +1 -1
  187. package/dist/reachability/request.js +14 -23
  188. package/dist/reachability/request.js.map +1 -1
  189. package/dist/reactions/constants.js +13 -0
  190. package/dist/reactions/constants.js.map +1 -0
  191. package/dist/reactions/reactions.js +109 -0
  192. package/dist/reactions/reactions.js.map +1 -0
  193. package/dist/reactions/reactions.type.js +36 -0
  194. package/dist/reactions/reactions.type.js.map +1 -0
  195. package/dist/reconnection-manager/index.js +326 -465
  196. package/dist/reconnection-manager/index.js.map +1 -1
  197. package/dist/recording-controller/enums.js +17 -0
  198. package/dist/recording-controller/enums.js.map +1 -0
  199. package/dist/recording-controller/index.js +343 -0
  200. package/dist/recording-controller/index.js.map +1 -0
  201. package/dist/recording-controller/util.js +63 -0
  202. package/dist/recording-controller/util.js.map +1 -0
  203. package/dist/roap/index.js +38 -67
  204. package/dist/roap/index.js.map +1 -1
  205. package/dist/roap/request.js +143 -134
  206. package/dist/roap/request.js.map +1 -1
  207. package/dist/roap/turnDiscovery.js +149 -101
  208. package/dist/roap/turnDiscovery.js.map +1 -1
  209. package/dist/statsAnalyzer/global.js +1 -95
  210. package/dist/statsAnalyzer/global.js.map +1 -1
  211. package/dist/statsAnalyzer/index.js +369 -461
  212. package/dist/statsAnalyzer/index.js.map +1 -1
  213. package/dist/statsAnalyzer/mqaUtil.js +144 -94
  214. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  215. package/dist/transcription/index.js +13 -45
  216. package/dist/transcription/index.js.map +1 -1
  217. package/dist/types/annotation/annotation.types.d.ts +33 -0
  218. package/dist/types/annotation/constants.d.ts +31 -0
  219. package/dist/types/annotation/index.d.ts +117 -0
  220. package/dist/types/breakouts/breakout.d.ts +8 -0
  221. package/dist/types/breakouts/collection.d.ts +5 -0
  222. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  223. package/dist/types/breakouts/index.d.ts +5 -0
  224. package/dist/types/breakouts/request.d.ts +22 -0
  225. package/dist/types/breakouts/utils.d.ts +15 -0
  226. package/dist/types/common/browser-detection.d.ts +9 -0
  227. package/dist/types/common/collection.d.ts +48 -0
  228. package/dist/types/common/config.d.ts +2 -0
  229. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  230. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  231. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  232. package/dist/types/common/errors/media.d.ts +15 -0
  233. package/dist/types/common/errors/parameter.d.ts +15 -0
  234. package/dist/types/common/errors/password-error.d.ts +15 -0
  235. package/dist/types/common/errors/permission.d.ts +14 -0
  236. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  237. package/dist/types/common/errors/reconnection.d.ts +15 -0
  238. package/dist/types/common/errors/stats.d.ts +15 -0
  239. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  240. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  241. package/dist/types/common/events/events-scope.d.ts +17 -0
  242. package/dist/types/common/events/events.d.ts +12 -0
  243. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  244. package/dist/types/common/events/util.d.ts +2 -0
  245. package/dist/types/common/logs/logger-config.d.ts +2 -0
  246. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  247. package/dist/types/common/logs/request.d.ts +34 -0
  248. package/dist/types/common/queue.d.ts +32 -0
  249. package/dist/types/config.d.ts +78 -0
  250. package/dist/types/constants.d.ts +963 -0
  251. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  252. package/dist/types/controls-options-manager/enums.d.ts +13 -0
  253. package/dist/types/controls-options-manager/index.d.ts +136 -0
  254. package/dist/types/controls-options-manager/types.d.ts +37 -0
  255. package/dist/types/controls-options-manager/util.d.ts +1 -0
  256. package/dist/types/index.d.ts +7 -0
  257. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  258. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  259. package/dist/types/locus-info/fullState.d.ts +2 -0
  260. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  261. package/dist/types/locus-info/index.d.ts +314 -0
  262. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  263. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  264. package/dist/types/locus-info/parser.d.ts +212 -0
  265. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  266. package/dist/types/media/index.d.ts +34 -0
  267. package/dist/types/media/properties.d.ts +108 -0
  268. package/dist/types/media/util.d.ts +2 -0
  269. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  270. package/dist/types/meeting/in-meeting-actions.d.ts +105 -0
  271. package/dist/types/meeting/index.d.ts +1727 -0
  272. package/dist/types/meeting/muteState.d.ts +185 -0
  273. package/dist/types/meeting/request.d.ts +275 -0
  274. package/dist/types/meeting/request.type.d.ts +11 -0
  275. package/dist/types/meeting/state.d.ts +9 -0
  276. package/dist/types/meeting/util.d.ts +2 -0
  277. package/dist/types/meeting-info/collection.d.ts +20 -0
  278. package/dist/types/meeting-info/index.d.ts +57 -0
  279. package/dist/types/meeting-info/meeting-info-v2.d.ts +111 -0
  280. package/dist/types/meeting-info/request.d.ts +22 -0
  281. package/dist/types/meeting-info/util.d.ts +2 -0
  282. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  283. package/dist/types/meetings/collection.d.ts +31 -0
  284. package/dist/types/meetings/index.d.ts +316 -0
  285. package/dist/types/meetings/request.d.ts +27 -0
  286. package/dist/types/meetings/util.d.ts +18 -0
  287. package/dist/types/member/index.d.ts +156 -0
  288. package/dist/types/member/types.d.ts +21 -0
  289. package/dist/types/member/util.d.ts +2 -0
  290. package/dist/types/members/collection.d.ts +29 -0
  291. package/dist/types/members/index.d.ts +353 -0
  292. package/dist/types/members/request.d.ts +69 -0
  293. package/dist/types/members/types.d.ts +24 -0
  294. package/dist/types/members/util.d.ts +2 -0
  295. package/dist/types/metrics/config.d.ts +171 -0
  296. package/dist/types/metrics/constants.d.ts +54 -0
  297. package/dist/types/metrics/index.d.ts +152 -0
  298. package/dist/types/multistream/mediaRequestManager.d.ts +101 -0
  299. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  300. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  301. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  302. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  303. package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
  304. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  305. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  306. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  307. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  308. package/dist/types/reachability/index.d.ts +152 -0
  309. package/dist/types/reachability/request.d.ts +37 -0
  310. package/dist/types/reactions/constants.d.ts +3 -0
  311. package/dist/types/reactions/reactions.d.ts +4 -0
  312. package/dist/types/reactions/reactions.type.d.ts +52 -0
  313. package/dist/types/reconnection-manager/index.d.ts +126 -0
  314. package/dist/types/recording-controller/enums.d.ts +7 -0
  315. package/dist/types/recording-controller/index.d.ts +193 -0
  316. package/dist/types/recording-controller/util.d.ts +13 -0
  317. package/dist/types/roap/index.d.ts +77 -0
  318. package/dist/types/roap/request.d.ts +38 -0
  319. package/dist/types/roap/turnDiscovery.d.ts +88 -0
  320. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  321. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  322. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  323. package/dist/types/transcription/index.d.ts +64 -0
  324. package/internal-README.md +7 -6
  325. package/package.json +28 -20
  326. package/src/annotation/annotation.types.ts +37 -0
  327. package/src/annotation/constants.ts +36 -0
  328. package/src/annotation/index.ts +314 -0
  329. package/src/breakouts/README.md +219 -0
  330. package/src/breakouts/breakout.ts +154 -0
  331. package/src/breakouts/collection.ts +19 -0
  332. package/src/breakouts/edit-lock-error.ts +25 -0
  333. package/src/breakouts/index.ts +776 -0
  334. package/src/breakouts/request.ts +55 -0
  335. package/src/breakouts/utils.ts +57 -0
  336. package/src/common/browser-detection.ts +9 -6
  337. package/src/common/collection.ts +3 -1
  338. package/src/common/errors/captcha-error.ts +6 -6
  339. package/src/common/errors/intent-to-join.ts +6 -6
  340. package/src/common/errors/join-meeting.ts +12 -8
  341. package/src/common/errors/media.ts +6 -6
  342. package/src/common/errors/parameter.ts +9 -6
  343. package/src/common/errors/password-error.ts +6 -6
  344. package/src/common/errors/permission.ts +5 -5
  345. package/src/common/errors/reconnection.ts +6 -6
  346. package/src/common/errors/stats.ts +6 -6
  347. package/src/common/errors/webex-errors.ts +7 -5
  348. package/src/common/errors/webex-meetings-error.ts +1 -1
  349. package/src/common/events/events-scope.ts +5 -1
  350. package/src/common/events/events.ts +5 -1
  351. package/src/common/events/trigger-proxy.ts +8 -3
  352. package/src/common/events/util.ts +1 -2
  353. package/src/common/logs/logger-proxy.ts +21 -10
  354. package/src/common/logs/request.ts +11 -8
  355. package/src/config.ts +17 -12
  356. package/src/constants.ts +114 -6
  357. package/src/controls-options-manager/constants.ts +5 -0
  358. package/src/controls-options-manager/enums.ts +16 -0
  359. package/src/controls-options-manager/index.ts +275 -0
  360. package/src/controls-options-manager/types.ts +49 -0
  361. package/src/controls-options-manager/util.ts +229 -0
  362. package/src/index.ts +33 -0
  363. package/src/locus-info/controlsUtils.ts +91 -24
  364. package/src/locus-info/fullState.ts +15 -11
  365. package/src/locus-info/hostUtils.ts +4 -3
  366. package/src/locus-info/index.ts +265 -51
  367. package/src/locus-info/infoUtils.ts +16 -4
  368. package/src/locus-info/mediaSharesUtils.ts +4 -4
  369. package/src/locus-info/parser.ts +46 -68
  370. package/src/locus-info/selfUtils.ts +178 -57
  371. package/src/media/index.ts +142 -172
  372. package/src/media/properties.ts +43 -36
  373. package/src/media/util.ts +1 -1
  374. package/src/mediaQualityMetrics/config.ts +380 -378
  375. package/src/meeting/in-meeting-actions.ts +75 -3
  376. package/src/meeting/index.ts +2484 -1524
  377. package/src/meeting/muteState.ts +271 -68
  378. package/src/meeting/request.ts +251 -132
  379. package/src/meeting/request.type.ts +13 -0
  380. package/src/meeting/state.ts +45 -30
  381. package/src/meeting/util.ts +132 -111
  382. package/src/meeting-info/collection.ts +2 -1
  383. package/src/meeting-info/index.ts +32 -30
  384. package/src/meeting-info/meeting-info-v2.ts +178 -109
  385. package/src/meeting-info/request.ts +9 -3
  386. package/src/meeting-info/util.ts +54 -46
  387. package/src/meeting-info/utilv2.ts +69 -57
  388. package/src/meetings/collection.ts +21 -1
  389. package/src/meetings/index.ts +687 -467
  390. package/src/meetings/request.ts +29 -25
  391. package/src/meetings/util.ts +108 -33
  392. package/src/member/index.ts +86 -49
  393. package/src/member/types.ts +24 -0
  394. package/src/member/util.ts +92 -13
  395. package/src/members/collection.ts +8 -1
  396. package/src/members/index.ts +281 -129
  397. package/src/members/request.ts +87 -14
  398. package/src/members/types.ts +28 -0
  399. package/src/members/util.ts +140 -49
  400. package/src/metrics/config.ts +255 -90
  401. package/src/metrics/constants.ts +1 -6
  402. package/src/metrics/index.ts +91 -94
  403. package/src/multistream/mediaRequestManager.ts +201 -43
  404. package/src/multistream/receiveSlot.ts +69 -26
  405. package/src/multistream/receiveSlotManager.ts +62 -38
  406. package/src/multistream/remoteMedia.ts +30 -4
  407. package/src/multistream/remoteMediaGroup.ts +4 -3
  408. package/src/multistream/remoteMediaManager.ts +230 -66
  409. package/src/networkQualityMonitor/index.ts +24 -27
  410. package/src/personal-meeting-room/index.ts +12 -16
  411. package/src/personal-meeting-room/request.ts +10 -3
  412. package/src/personal-meeting-room/util.ts +3 -3
  413. package/src/reachability/index.ts +131 -79
  414. package/src/reachability/request.ts +43 -34
  415. package/src/reactions/constants.ts +4 -0
  416. package/src/reactions/reactions.ts +104 -0
  417. package/src/reactions/reactions.type.ts +62 -0
  418. package/src/reconnection-manager/index.ts +193 -111
  419. package/src/recording-controller/enums.ts +8 -0
  420. package/src/recording-controller/index.ts +315 -0
  421. package/src/recording-controller/util.ts +58 -0
  422. package/src/roap/index.ts +63 -51
  423. package/src/roap/request.ts +86 -53
  424. package/src/roap/turnDiscovery.ts +105 -46
  425. package/src/statsAnalyzer/global.ts +8 -104
  426. package/src/statsAnalyzer/index.ts +624 -376
  427. package/src/statsAnalyzer/mqaUtil.ts +203 -90
  428. package/src/transcription/index.ts +34 -32
  429. package/test/integration/spec/converged-space-meetings.js +177 -0
  430. package/test/integration/spec/journey.js +666 -464
  431. package/test/integration/spec/space-meeting.js +320 -204
  432. package/test/integration/spec/transcription.js +7 -8
  433. package/test/unit/spec/annotation/index.ts +420 -0
  434. package/test/unit/spec/breakouts/breakout.ts +178 -0
  435. package/test/unit/spec/breakouts/collection.ts +15 -0
  436. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  437. package/test/unit/spec/breakouts/index.ts +1416 -0
  438. package/test/unit/spec/breakouts/request.ts +104 -0
  439. package/test/unit/spec/breakouts/utils.js +72 -0
  440. package/test/unit/spec/common/browser-detection.js +9 -28
  441. package/test/unit/spec/controls-options-manager/index.js +280 -0
  442. package/test/unit/spec/controls-options-manager/util.js +403 -0
  443. package/test/unit/spec/fixture/locus.js +92 -90
  444. package/test/unit/spec/locus-info/controlsUtils.js +177 -32
  445. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  446. package/test/unit/spec/locus-info/index.js +484 -3
  447. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  448. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  449. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  450. package/test/unit/spec/locus-info/parser.js +3 -9
  451. package/test/unit/spec/locus-info/selfConstant.js +101 -103
  452. package/test/unit/spec/locus-info/selfUtils.js +191 -12
  453. package/test/unit/spec/media/index.ts +104 -8
  454. package/test/unit/spec/media/properties.ts +9 -9
  455. package/test/unit/spec/meeting/in-meeting-actions.ts +34 -3
  456. package/test/unit/spec/meeting/index.js +2651 -829
  457. package/test/unit/spec/meeting/muteState.js +368 -70
  458. package/test/unit/spec/meeting/request.js +217 -43
  459. package/test/unit/spec/meeting/utils.js +167 -163
  460. package/test/unit/spec/meeting-info/meetinginfov2.js +241 -74
  461. package/test/unit/spec/meeting-info/request.js +7 -9
  462. package/test/unit/spec/meeting-info/util.js +11 -12
  463. package/test/unit/spec/meeting-info/utilv2.js +110 -74
  464. package/test/unit/spec/meetings/collection.js +15 -1
  465. package/test/unit/spec/meetings/index.js +701 -273
  466. package/test/unit/spec/meetings/utils.js +105 -14
  467. package/test/unit/spec/member/index.js +24 -1
  468. package/test/unit/spec/member/util.js +359 -32
  469. package/test/unit/spec/members/index.js +402 -54
  470. package/test/unit/spec/members/request.js +76 -20
  471. package/test/unit/spec/members/utils.js +191 -4
  472. package/test/unit/spec/metrics/index.js +46 -20
  473. package/test/unit/spec/multistream/mediaRequestManager.ts +650 -105
  474. package/test/unit/spec/multistream/receiveSlot.ts +76 -17
  475. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  476. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  477. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  478. package/test/unit/spec/multistream/remoteMediaManager.ts +549 -65
  479. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  480. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  481. package/test/unit/spec/reachability/index.ts +176 -27
  482. package/test/unit/spec/reachability/request.js +66 -0
  483. package/test/unit/spec/reconnection-manager/index.js +62 -31
  484. package/test/unit/spec/recording-controller/index.js +231 -0
  485. package/test/unit/spec/recording-controller/util.js +102 -0
  486. package/test/unit/spec/roap/index.ts +21 -16
  487. package/test/unit/spec/roap/request.ts +217 -0
  488. package/test/unit/spec/roap/turnDiscovery.ts +93 -49
  489. package/test/unit/spec/stats-analyzer/index.js +116 -60
  490. package/test/utils/cmr.js +44 -42
  491. package/test/utils/constants.js +9 -0
  492. package/test/utils/integrationTestUtils.js +64 -0
  493. package/test/utils/testUtils.js +63 -99
  494. package/test/utils/webex-config.js +22 -18
  495. package/test/utils/webex-test-users.js +57 -50
  496. package/tsconfig.json +6 -0
  497. package/dist/media/internal-media-core-wrapper.js +0 -22
  498. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  499. package/dist/meeting/effectsState.js +0 -334
  500. package/dist/meeting/effectsState.js.map +0 -1
  501. package/dist/multistream/multistreamMedia.js +0 -116
  502. package/dist/multistream/multistreamMedia.js.map +0 -1
  503. package/src/index.js +0 -15
  504. package/src/media/internal-media-core-wrapper.ts +0 -9
  505. package/src/meeting/effectsState.ts +0 -211
  506. package/src/multistream/multistreamMedia.ts +0 -92
  507. package/test/unit/spec/meeting/effectsState.js +0 -291
@@ -0,0 +1,314 @@
1
+ import uuid from 'uuid';
2
+ // eslint-disable-next-line import/no-extraneous-dependencies
3
+ import {WebexPlugin, config} from '@webex/webex-core';
4
+ import TriggerProxy from '../common/events/trigger-proxy';
5
+
6
+ import {
7
+ EVENT_TRIGGERS,
8
+ ANNOTATION_RELAY_TYPES,
9
+ ANNOTATION,
10
+ ANNOTATION_REQUEST_TYPE,
11
+ ANNOTATION_ACTION_TYPE,
12
+ ANNOTATION_RESOURCE_TYPE,
13
+ } from './constants';
14
+
15
+ import {StrokeData, RequestData, IAnnotationChannel, CommandRequestBody} from './annotation.types';
16
+ import {HTTP_VERBS} from '../constants';
17
+
18
+ /**
19
+ * @description Annotation to handle LLM and Mercury message and locus API
20
+ * @class
21
+ */
22
+ class AnnotationChannel extends WebexPlugin implements IAnnotationChannel {
23
+ namespace = ANNOTATION;
24
+
25
+ private seqNum: number;
26
+
27
+ hasSubscribedToEvents: boolean;
28
+
29
+ approvalUrl: string;
30
+ locusUrl: string;
31
+ annotationStatus: string;
32
+ deviceUrl: string;
33
+
34
+ /**
35
+ * Initializes annotation module
36
+ */
37
+ constructor(...args) {
38
+ super(...args);
39
+ this.seqNum = 1;
40
+ }
41
+
42
+ /**
43
+ * Process Stroke Data
44
+ * @param {request} request stroke data
45
+ * @returns {void}
46
+ */
47
+ private processStrokeMessage(request) {
48
+ this.decryptContent(request.encryptionKeyUrl, request.content).then((decryptedContent) => {
49
+ request.content = decryptedContent;
50
+ TriggerProxy.trigger(
51
+ this,
52
+ {
53
+ file: 'annotation',
54
+ function: 'processStrokeMessage',
55
+ },
56
+ EVENT_TRIGGERS.ANNOTATION_STROKE_DATA,
57
+ {
58
+ data: request,
59
+ }
60
+ );
61
+ });
62
+ }
63
+
64
+ /** bind all events from mercury
65
+ * @param {Object} e
66
+ * @returns {undefined}
67
+ */
68
+ private eventCommandProcessor = (e) => {
69
+ if (
70
+ e?.data?.eventType === 'locus.approval_request' &&
71
+ e?.data?.approval?.resourceType === ANNOTATION_RESOURCE_TYPE &&
72
+ e?.data?.approval?.actionType
73
+ ) {
74
+ TriggerProxy.trigger(
75
+ this,
76
+ {
77
+ file: 'annotation',
78
+ function: 'approval_request',
79
+ },
80
+ EVENT_TRIGGERS.ANNOTATION_COMMAND,
81
+ {
82
+ type: e.data.approval.actionType,
83
+ payload: e.data.approval,
84
+ }
85
+ );
86
+ this.seqNum = (e?.sequenceNumber || 0) + 1;
87
+ }
88
+ };
89
+
90
+ /** bind all events from llm
91
+ * @param {Object} e
92
+ * @returns {undefined}
93
+ */
94
+ private eventDataProcessor = (e) => {
95
+ switch (e?.data?.relayType) {
96
+ case ANNOTATION_RELAY_TYPES.ANNOTATION_CLIENT:
97
+ this.seqNum = (e?.sequenceNumber || 0) + 1;
98
+ this.processStrokeMessage(e.data.request);
99
+ break;
100
+ default:
101
+ break;
102
+ }
103
+ };
104
+
105
+ /**
106
+ * Listen to websocket messages
107
+ * @returns {undefined}
108
+ */
109
+ private listenToEvents() {
110
+ if (!this.hasSubscribedToEvents) {
111
+ // @ts-ignore
112
+ this.webex.internal.mercury.on('event:locus', this.eventCommandProcessor);
113
+ // @ts-ignore
114
+ this.webex.internal.llm.on('event:relay.event', this.eventDataProcessor);
115
+ this.hasSubscribedToEvents = true;
116
+ }
117
+ }
118
+
119
+ /**
120
+ * set locusUrl
121
+ * @param {string} locusUrl
122
+ * @returns {void}
123
+ */
124
+ public locusUrlUpdate(locusUrl: string) {
125
+ this.locusUrl = locusUrl;
126
+ this.listenToEvents();
127
+ }
128
+
129
+ /**
130
+ * set approved url
131
+ * @param {string} approvalUrl
132
+ * @returns {void}
133
+ */
134
+ public approvalUrlUpdate(approvalUrl: string) {
135
+ this.approvalUrl = approvalUrl;
136
+ }
137
+
138
+ /**
139
+ * accept request
140
+ * @param {object} approval
141
+ * @returns {Promise}
142
+ */
143
+ public acceptRequest(approval) {
144
+ // @ts-ignore
145
+ return this.request({
146
+ method: HTTP_VERBS.PUT,
147
+ url: approval.url,
148
+ body: {
149
+ resourceType: ANNOTATION_RESOURCE_TYPE,
150
+ actionType: ANNOTATION_ACTION_TYPE.ACCEPTED,
151
+ },
152
+ });
153
+ }
154
+
155
+ /**
156
+ * presenter declined request annotation
157
+ * @param {approval} approval
158
+ * @returns {Promise}
159
+ */
160
+ public declineRequest(approval) {
161
+ // @ts-ignore
162
+ return this.request({
163
+ method: HTTP_VERBS.PUT,
164
+ url: approval.url,
165
+ body: {
166
+ resourceType: ANNOTATION_RESOURCE_TYPE,
167
+ actionType: ANNOTATION_ACTION_TYPE.DECLINED,
168
+ },
169
+ });
170
+ }
171
+
172
+ /**
173
+ * request approved annotation
174
+ * @param {RequestData} requestData
175
+ * @returns {Promise}
176
+ */
177
+ public approveAnnotation(requestData: RequestData) {
178
+ return this.sendAnnotationAction(ANNOTATION_ACTION_TYPE.REQUESTED, requestData);
179
+ }
180
+
181
+ /**
182
+ * cancel approved annotation
183
+ * @param {object} requestData
184
+ * @returns {Promise}
185
+ */
186
+ public cancelApproveAnnotation(requestData: RequestData) {
187
+ return this.sendAnnotationAction(ANNOTATION_ACTION_TYPE.CANCELED, requestData);
188
+ }
189
+
190
+ /**
191
+ * close annotation
192
+ * @param {object} requestData
193
+ * @returns {Promise}
194
+ */
195
+ public closeAnnotation(requestData: RequestData) {
196
+ return this.sendAnnotationAction(ANNOTATION_ACTION_TYPE.CLOSED, requestData);
197
+ }
198
+
199
+ /**
200
+ * send annotation command
201
+ * @param {ANNOTATION_ACTION_TYPE} actionType
202
+ * @param {RequestData} requestData
203
+ * @returns {Promise}
204
+ */
205
+ private sendAnnotationAction = async (
206
+ actionType: ANNOTATION_ACTION_TYPE,
207
+ requestData: RequestData
208
+ ): Promise<void> => {
209
+ const body: CommandRequestBody = {
210
+ actionType,
211
+ resourceType: 'AnnotationOnShare',
212
+ shareInstanceId: requestData.shareInstanceId,
213
+ };
214
+ if (requestData?.toUserId) {
215
+ body.receivers = [{participantId: requestData.toUserId, deviceUrl: requestData.toDeviceUrl}];
216
+ }
217
+
218
+ // @ts-ignore
219
+ return this.request({
220
+ method: HTTP_VERBS.POST,
221
+ url: `${this.approvalUrl}`,
222
+ body,
223
+ });
224
+ };
225
+
226
+ /**
227
+ * decrypt data
228
+ * @param {string} encryptionKeyUrl
229
+ * @param {string} content encrypted content
230
+ * @returns {string} decrypted content
231
+ */
232
+ private decryptContent = (encryptionKeyUrl: string, content: string): Promise<any> => {
233
+ // @ts-ignore
234
+ return this.webex.internal.encryption.decryptText(encryptionKeyUrl, content).then((res) => {
235
+ return res;
236
+ });
237
+ };
238
+
239
+ /**
240
+ * encrypt data
241
+ * @param {string} encryptionKeyUrl
242
+ * @param {string} content original content
243
+ * @returns {string} encrypted content
244
+ */
245
+ private encryptContent = (encryptionKeyUrl: string, content: string): Promise<any> => {
246
+ // @ts-ignore
247
+ return this.webex.internal.encryption.encryptText(encryptionKeyUrl, content).then((res) => {
248
+ return res;
249
+ });
250
+ };
251
+
252
+ /**
253
+ * Sends stroke data to presenter
254
+ * @param {StrokeData} strokeData
255
+ * @returns {void}
256
+ */
257
+ public sendStrokeData = (strokeData: StrokeData): void => {
258
+ // @ts-ignore
259
+ if (!this.webex.internal.llm.isConnected()) return;
260
+ this.encryptContent(strokeData.encryptionKeyUrl, strokeData.content).then(
261
+ (encryptedContent) => {
262
+ this.publishEncrypted(encryptedContent, strokeData);
263
+ }
264
+ );
265
+ };
266
+
267
+ /**
268
+ * private encrypted the strokes data
269
+ * @param {string} encryptedContent
270
+ * @param {StrokeData} strokeData
271
+ * @returns {void}
272
+ */
273
+ private publishEncrypted(encryptedContent: string, strokeData: StrokeData) {
274
+ const data = {
275
+ id: `${this.seqNum}`,
276
+ type: 'publishRequest',
277
+ recipients: {
278
+ // @ts-ignore
279
+ route: this.webex.internal.llm.getBinding(),
280
+ },
281
+ headers: {
282
+ to: strokeData.toUserId,
283
+ },
284
+ data: {
285
+ eventType: 'relay.event',
286
+ relayType: ANNOTATION_RELAY_TYPES.ANNOTATION_CLIENT,
287
+ request: {
288
+ value: {
289
+ sessionId: uuid.v4(),
290
+ type: ANNOTATION_REQUEST_TYPE.ANNOTATION_MESSAGE,
291
+ locusUrl: this.locusUrl,
292
+ content: encryptedContent,
293
+ version: 'mVersion',
294
+ fromUserId: strokeData.fromUserId,
295
+ fromDeviceUrl: strokeData.fromDeviceUrl,
296
+ shareInstanceId: strokeData.shareInstanceId,
297
+ locusId: this.locusUrl && this.locusUrl.split('/').pop(),
298
+ encryptionKeyUrl: strokeData.encryptionKeyUrl,
299
+ },
300
+ },
301
+ },
302
+ trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,
303
+ timestamp: new Date().getTime(),
304
+ sequenceNumber: this.seqNum,
305
+ filterMessage: false,
306
+ };
307
+
308
+ // @ts-ignore
309
+ this.webex.internal.llm.socket.send(data);
310
+ this.seqNum += 1;
311
+ }
312
+ }
313
+
314
+ export default AnnotationChannel;
@@ -0,0 +1,219 @@
1
+ # Breakout Sessions
2
+
3
+ Breakout sessions are like meetings within meetings. They have separate roster lists and titles. Participants can move between breakouts and the main session.
4
+
5
+ ### Enabling
6
+
7
+ To enable breakouts the `breakoutsSupported` parameter must be passed to the meeting join method.
8
+
9
+ ### Structure
10
+
11
+ The current breakout session is accessible as follows:
12
+
13
+ ```javascript
14
+ breakouts.currentBreakoutSession;
15
+ ```
16
+
17
+ Other breakout sessions are available in the breakouts collection. These are breakouts that you known about. If you are an attendee, you may not know about all the breakout sessions in the meeting.
18
+
19
+ ```javascript
20
+ breakouts.breakouts;
21
+ ```
22
+
23
+ note: The `currentBreakoutSession` is NOT a member of the `breakouts.breakouts` collection.
24
+
25
+ Some information about the state of breakouts is available on the `meeting.breakouts` object itself
26
+
27
+ ```javascript
28
+ // The number of seconds after ending breakouts before the participants are returned to the main session
29
+ breakouts.delayCloseTime;
30
+
31
+ // Whether the participant is allowed back to the main session
32
+ breakouts.allowBackToMain;
33
+ ```
34
+
35
+ ### Attendee functionality
36
+
37
+ The normal meeting members are updated when you move in and out of a breakout session.
38
+
39
+ The following are methods available to attendees of a meeting:
40
+
41
+ ```javascript
42
+ // Join a breakout
43
+ // This can be used when the participant is in the main session or in a different breakout session
44
+ // when call join function, should send message to metrics
45
+ /* Breakout Sessions created during meetings allow participants to move into smaller breakout sessions and then
46
+ return to the main meeting at a later time. These moves can be initiated by the user or by the meeting
47
+ host/co-host. The goal of this metric is to track these moves in production by instrumenting them for
48
+ analysis from the end user's experience perspective.
49
+ */
50
+ breakout.join();
51
+
52
+ // Leave a breakout
53
+ // This will cause the participant to return to the main session
54
+ breakouts.currentBreakoutSession.leave();
55
+
56
+ // Ask for help when in a breakout session. 10 second cooldown.
57
+ breakout.currentBreakoutSession.askForHelp();
58
+ ```
59
+
60
+ #### Members
61
+
62
+ Each breakout session has members. Members represent other entities within the meeting.
63
+ The current breakout session members are accessed via the meeting object i.e. they will automatically
64
+ be updated when the user moves between sessions.
65
+
66
+ To see which members are in other sessions, you can access them via the breakout model. The Members
67
+ class is the same as that of the main meeting.
68
+
69
+ ```javascript
70
+ breakout = breakouts.breakouts.models[0];
71
+ breakout.members;
72
+ ```
73
+
74
+ #### breakouts events
75
+
76
+ ```javascript
77
+ // When the breakouts in the breakouts collection changes. This includes updates to session members
78
+ on('meeting:breakouts:update', (breakouts) => {});
79
+
80
+ // When the breakout sessions end this event will be fired
81
+ on('meeting:breakouts:closing', () => {});
82
+
83
+ // When the host sends a message to the breakout this event will fire
84
+ on('meeting:breakouts:message', {senderUserId, sentTime, message, sessionId});
85
+ ```
86
+
87
+ When breakouts are started there are several possibilities:
88
+
89
+ 1. The attendee is forced to join a session
90
+ 2. The attendee is assigned to a session, but can join when they feel like it
91
+ 3. The attendee is not assigned to a session, and can choose which session they want to join
92
+
93
+ ```javascript
94
+ breakout.assigned; // Assigned to a session, but not in it yet
95
+ breakout.assignedCurrent; // Forced to join a session
96
+ breakout.active; // The session exists
97
+ breakout.allowed; // The user is allowed to join the session
98
+ breakout.requested; // The user has been requested to join the session
99
+ ```
100
+
101
+ The above attributes of the breakout sessions, combined with the `meeting:breakouts:update` event allow you to determine which situation you are in.
102
+
103
+ A host can signal attendees to move to a particular session. In this case the following is available. Using the same event, and the `requested` attribute of the breakout you can determine which session is to be moved to. Requesting return to the main session is the current use case of this.
104
+
105
+ ### Host functionality
106
+
107
+ The following are methods available to a hosts of a meeting.
108
+
109
+ note: None of these are currently implemented
110
+
111
+ ```javascript
112
+
113
+ // Move a participant to breakout
114
+ breakout.move(participant)
115
+
116
+ // Remove someone from a breakout session
117
+ // This returns them to the main session
118
+ breakout.remove(participant)
119
+
120
+ // Deletes a breakout session
121
+ // This can only be done when breakouts are inactive
122
+ breakout.delete()
123
+
124
+ /*
125
+ Create breakout sessions, Type is array
126
+ Format: [{'name':'session1', "anyoneCanJoin" : true}]
127
+ */
128
+ breakouts.create(sessions)
129
+
130
+ // Delete all breakout sessions
131
+ breakouts.clearSessions()
132
+
133
+ // Rename an existing breakout session
134
+ breakout.rename(newSessionName)
135
+
136
+ // Start breakout sessions with necessary params
137
+ breakouts.start(params)
138
+
139
+ // Assign a particpant/participants to breakouts/a breakout
140
+ // sessions should be like: [{id:'xx',memberIds:['111'],emails:['111@ss.com',anyone: true]},...]
141
+ breakouts.assign(sessions)
142
+
143
+ // Dynammic assign a particpant/participants to breakouts/main (not used by now)
144
+ // Admit lobby waiting participants to a breakout directly
145
+ // sessions should be like: [{id:'xx',participants:['111'],targetState:'JOINED'},...]
146
+ breakouts.dynamicAssign(sessions)
147
+
148
+ // End breakout sessions with necessary params
149
+ breakouts.end(params)
150
+
151
+ // get breakout sessions with/without param editlock
152
+ breakouts.getBreakout(editlock?)
153
+
154
+ // Enable breakout sessions
155
+ breakouts.enable()
156
+
157
+ // Enable and lock breakout
158
+ breakouts.enableAndLockBreakout()
159
+
160
+ // Lock breakout
161
+ breakouts.lockBreakout()
162
+
163
+ // Unlock breakout
164
+ breakouts.unLockEditBreakout()
165
+
166
+ // Disable breakout sessions
167
+ breakouts.disable()
168
+
169
+ // Send message asking all participants to return to the main session
170
+ breakouts.askAllToReturn()
171
+
172
+ // Send a message to a breakout session
173
+ // You can determine which participant types receive the message, if no type set, default is to all participants
174
+ breakout.broadcast(message, {participants: boolean, cohosts: boolean, presenters: boolean})
175
+
176
+ // Send a message to All breakout sessions
177
+ // You can determine which participant types receive the message, if no type set, default is to all participants
178
+ breakouts.broadcast(message, {participants: boolean, cohosts: boolean, presenters: boolean})
179
+
180
+ // When breakouts are active you can cancel the automatic end of all sessions by calling this
181
+ // method. It cannot be restarted, only manually ending breakouts is possible after calling this
182
+ breakouts.cancelAutomaticEnd()
183
+
184
+ IBreakoutConfig {
185
+ /*
186
+ Number of sessions to count down before returning users to main session. Seconds. Default 60. 0 means off
187
+ */
188
+ countdownTimer: Number,
189
+ /*
190
+ Whether attendees are allowed to return to the main meeting
191
+ */
192
+ allowReturntoMainMeeting: Boolean,
193
+ /*
194
+ Whether attendees are allowed to join later
195
+ */
196
+ allowJoinLater: Boolean,
197
+ /*
198
+ The timeout after which breakouts are automatically ended. Seconds. Default 1800 (30 minutes) Miniumum 5 minutes.
199
+ */
200
+ automaticallyEndBreakoutsAfter: Number,
201
+ /*
202
+ How participants are assigned to breakouts.
203
+ auto -> participants are automatically placed in sessions
204
+ */
205
+ assignmentMethod: 'auto' | 'manual' | 'choose'
206
+ }
207
+
208
+ // Configure settings on breakouts
209
+ breakouts.configure(config)
210
+
211
+ // set whether anyone can join the breakout or whether it is just assigned participants that can join
212
+ breakout.setOpen(isOpen)
213
+
214
+ // When the members change for a given breakout
215
+ on('meeting:breakout:members:update', ({sessionId, members}) => {
216
+
217
+ })
218
+
219
+ ```
@@ -0,0 +1,154 @@
1
+ /*!
2
+ * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+
5
+ import {WebexPlugin} from '@webex/webex-core';
6
+
7
+ import uuid from 'uuid';
8
+ import {HTTP_VERBS, MEETINGS} from '../constants';
9
+ import LocusInfo from '../locus-info';
10
+ import Members from '../members';
11
+ import BreakoutRequest from './request';
12
+ import Metrics from '../metrics';
13
+ import {eventType} from '../metrics/config';
14
+ /**
15
+ * @class
16
+ */
17
+ const Breakout = WebexPlugin.extend({
18
+ idAttribute: 'sessionId',
19
+
20
+ namespace: MEETINGS,
21
+
22
+ breakoutRequest: BreakoutRequest,
23
+ props: {
24
+ active: ['boolean', false, false], // this session is active
25
+ allowed: ['boolean', false, false], // allowed to join this session
26
+ assigned: ['boolean', false, false], // assigned to this session, but not necessarily joined yet
27
+ assignedCurrent: ['boolean', false, false], // assigned AND current session
28
+ requested: ['boolean', false, false], // requested by the host to join this session
29
+ current: ['boolean', false, false], // the current joined session
30
+ name: 'string',
31
+ sessionId: 'string',
32
+ sessionType: 'string',
33
+ groupId: 'string',
34
+ url: 'string', // where to send requests to
35
+ },
36
+
37
+ derived: {
38
+ isMain: {
39
+ cache: false, // fix issue: sometimes the derived will not change even if the deps changed
40
+ deps: ['sessionType'],
41
+ /**
42
+ * If the breakout has no name, assume it is the main session
43
+ * @returns {boolean}
44
+ */
45
+ fn() {
46
+ return this.sessionType === 'MAIN';
47
+ },
48
+ },
49
+ },
50
+
51
+ initialize() {
52
+ this.members = new Members({}, {parent: this.webex});
53
+ // @ts-ignore
54
+ this.breakoutRequest = new BreakoutRequest({webex: this.webex});
55
+ },
56
+
57
+ /**
58
+ * Joins the breakout session
59
+ * @returns {Promise}
60
+ */
61
+ async join() {
62
+ const breakoutMoveId = uuid.v4();
63
+ const {meetingId} = this.collection.parent;
64
+ Metrics.postEvent({
65
+ event: eventType.MOVE_TO_BREAKOUT,
66
+ meetingId,
67
+ data: {
68
+ breakoutMoveId,
69
+ breakoutSessionId: this.sessionId,
70
+ breakoutGroupId: this.groupId,
71
+ },
72
+ });
73
+ const result = await this.request({
74
+ method: HTTP_VERBS.POST,
75
+ uri: `${this.url}/move`,
76
+ body: {
77
+ groupId: this.groupId,
78
+ sessionId: this.sessionId,
79
+ },
80
+ });
81
+ Metrics.postEvent({
82
+ event: eventType.JOIN_BREAKOUT_RESPONSE,
83
+ meetingId,
84
+ data: {
85
+ breakoutMoveId,
86
+ breakoutSessionId: this.sessionId,
87
+ breakoutGroupId: this.groupId,
88
+ },
89
+ });
90
+
91
+ return result;
92
+ },
93
+
94
+ /**
95
+ * Leaves the breakout session to return to the main session
96
+ * @returns {Promise}
97
+ * @throws {Error} if an attempt is made to leave the main session or if the main session cannot be found
98
+ */
99
+ leave() {
100
+ if (this.isMain) {
101
+ throw new Error('Cannot leave the main session');
102
+ }
103
+
104
+ const mainSession = this.parent.breakouts.filter((breakout) => breakout.isMain)[0];
105
+
106
+ if (!mainSession) {
107
+ throw new Error('Cannot leave, no main session found');
108
+ }
109
+
110
+ return mainSession.join();
111
+ },
112
+
113
+ /**
114
+ * Sends a help request for the current breakout
115
+ * @returns {Promise}
116
+ */
117
+ askForHelp() {
118
+ return this.request({
119
+ method: HTTP_VERBS.POST,
120
+ uri: `${this.url}/help`,
121
+ body: {
122
+ groupId: this.groupId,
123
+ sessionId: this.sessionId,
124
+ },
125
+ });
126
+ },
127
+
128
+ /**
129
+ * Parses the participants from the locus object
130
+ * @param locus Locus object
131
+ * @returns {void}
132
+ */
133
+
134
+ parseRoster(locus) {
135
+ this.members.locusParticipantsUpdate(locus);
136
+ },
137
+ /*
138
+ * Broadcast message to this breakout session's participants
139
+ * @param {String} message
140
+ * @param {Object} options
141
+ * @returns {Promise}
142
+ */
143
+ broadcast(message, options) {
144
+ return this.breakoutRequest.broadcast({
145
+ url: this.url,
146
+ message,
147
+ options,
148
+ groupId: this.groupId,
149
+ sessionId: this.sessionId,
150
+ });
151
+ },
152
+ });
153
+
154
+ 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;