@webex/plugin-meetings 3.0.0-beta.1 → 3.0.0-beta.104

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (548) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/annotation/annotation.types.js +7 -0
  4. package/dist/annotation/annotation.types.js.map +1 -0
  5. package/dist/annotation/constants.js +48 -0
  6. package/dist/annotation/constants.js.map +1 -0
  7. package/dist/annotation/index.js +357 -0
  8. package/dist/annotation/index.js.map +1 -0
  9. package/dist/breakouts/breakout.js +176 -0
  10. package/dist/breakouts/breakout.js.map +1 -0
  11. package/dist/breakouts/collection.js +23 -0
  12. package/dist/breakouts/collection.js.map +1 -0
  13. package/dist/breakouts/edit-lock-error.js +52 -0
  14. package/dist/breakouts/edit-lock-error.js.map +1 -0
  15. package/dist/breakouts/events.js +43 -0
  16. package/dist/breakouts/events.js.map +1 -0
  17. package/dist/breakouts/index.js +919 -0
  18. package/dist/breakouts/index.js.map +1 -0
  19. package/dist/breakouts/request.js +78 -0
  20. package/dist/breakouts/request.js.map +1 -0
  21. package/dist/breakouts/utils.js +67 -0
  22. package/dist/breakouts/utils.js.map +1 -0
  23. package/dist/common/browser-detection.js +1 -20
  24. package/dist/common/browser-detection.js.map +1 -1
  25. package/dist/common/collection.js +5 -20
  26. package/dist/common/collection.js.map +1 -1
  27. package/dist/common/config.js +0 -7
  28. package/dist/common/config.js.map +1 -1
  29. package/dist/common/errors/captcha-error.js +10 -24
  30. package/dist/common/errors/captcha-error.js.map +1 -1
  31. package/dist/common/errors/intent-to-join.js +11 -24
  32. package/dist/common/errors/intent-to-join.js.map +1 -1
  33. package/dist/common/errors/join-meeting.js +12 -25
  34. package/dist/common/errors/join-meeting.js.map +1 -1
  35. package/dist/common/errors/media.js +10 -24
  36. package/dist/common/errors/media.js.map +1 -1
  37. package/dist/common/errors/parameter.js +5 -33
  38. package/dist/common/errors/parameter.js.map +1 -1
  39. package/dist/common/errors/password-error.js +10 -24
  40. package/dist/common/errors/password-error.js.map +1 -1
  41. package/dist/common/errors/permission.js +9 -23
  42. package/dist/common/errors/permission.js.map +1 -1
  43. package/dist/common/errors/reconnection-in-progress.js +0 -17
  44. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  45. package/dist/common/errors/reconnection.js +10 -24
  46. package/dist/common/errors/reconnection.js.map +1 -1
  47. package/dist/common/errors/stats.js +10 -24
  48. package/dist/common/errors/stats.js.map +1 -1
  49. package/dist/common/errors/webex-errors.js +10 -69
  50. package/dist/common/errors/webex-errors.js.map +1 -1
  51. package/dist/common/errors/webex-meetings-error.js +5 -25
  52. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  53. package/dist/common/events/events-scope.js +0 -22
  54. package/dist/common/events/events-scope.js.map +1 -1
  55. package/dist/common/events/events.js +0 -23
  56. package/dist/common/events/events.js.map +1 -1
  57. package/dist/common/events/trigger-proxy.js +0 -12
  58. package/dist/common/events/trigger-proxy.js.map +1 -1
  59. package/dist/common/events/util.js +0 -15
  60. package/dist/common/events/util.js.map +1 -1
  61. package/dist/common/logs/logger-config.js +0 -4
  62. package/dist/common/logs/logger-config.js.map +1 -1
  63. package/dist/common/logs/logger-proxy.js +1 -8
  64. package/dist/common/logs/logger-proxy.js.map +1 -1
  65. package/dist/common/logs/request.js +37 -60
  66. package/dist/common/logs/request.js.map +1 -1
  67. package/dist/common/queue.js +4 -14
  68. package/dist/common/queue.js.map +1 -1
  69. package/dist/config.js +7 -6
  70. package/dist/config.js.map +1 -1
  71. package/dist/constants.js +184 -122
  72. package/dist/constants.js.map +1 -1
  73. package/dist/controls-options-manager/constants.js +14 -0
  74. package/dist/controls-options-manager/constants.js.map +1 -0
  75. package/dist/controls-options-manager/enums.js +25 -0
  76. package/dist/controls-options-manager/enums.js.map +1 -0
  77. package/dist/controls-options-manager/index.js +297 -0
  78. package/dist/controls-options-manager/index.js.map +1 -0
  79. package/dist/controls-options-manager/types.js +7 -0
  80. package/dist/controls-options-manager/types.js.map +1 -0
  81. package/dist/controls-options-manager/util.js +250 -0
  82. package/dist/controls-options-manager/util.js.map +1 -0
  83. package/dist/index.js +72 -17
  84. package/dist/index.js.map +1 -1
  85. package/dist/locus-info/controlsUtils.js +56 -29
  86. package/dist/locus-info/controlsUtils.js.map +1 -1
  87. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  88. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  89. package/dist/locus-info/fullState.js +0 -15
  90. package/dist/locus-info/fullState.js.map +1 -1
  91. package/dist/locus-info/hostUtils.js +4 -12
  92. package/dist/locus-info/hostUtils.js.map +1 -1
  93. package/dist/locus-info/index.js +362 -208
  94. package/dist/locus-info/index.js.map +1 -1
  95. package/dist/locus-info/infoUtils.js +3 -37
  96. package/dist/locus-info/infoUtils.js.map +1 -1
  97. package/dist/locus-info/mediaSharesUtils.js +12 -38
  98. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  99. package/dist/locus-info/parser.js +92 -118
  100. package/dist/locus-info/parser.js.map +1 -1
  101. package/dist/locus-info/selfUtils.js +99 -91
  102. package/dist/locus-info/selfUtils.js.map +1 -1
  103. package/dist/media/index.js +113 -337
  104. package/dist/media/index.js.map +1 -1
  105. package/dist/media/properties.js +96 -135
  106. package/dist/media/properties.js.map +1 -1
  107. package/dist/media/util.js +1 -35
  108. package/dist/media/util.js.map +1 -1
  109. package/dist/mediaQualityMetrics/config.js +505 -495
  110. package/dist/mediaQualityMetrics/config.js.map +1 -1
  111. package/dist/meeting/in-meeting-actions.js +59 -14
  112. package/dist/meeting/in-meeting-actions.js.map +1 -1
  113. package/dist/meeting/index.js +2909 -2398
  114. package/dist/meeting/index.js.map +1 -1
  115. package/dist/meeting/muteState.js +257 -112
  116. package/dist/meeting/muteState.js.map +1 -1
  117. package/dist/meeting/request.js +330 -264
  118. package/dist/meeting/request.js.map +1 -1
  119. package/dist/meeting/request.type.js +7 -0
  120. package/dist/meeting/request.type.js.map +1 -0
  121. package/dist/meeting/state.js +21 -31
  122. package/dist/meeting/state.js.map +1 -1
  123. package/dist/meeting/util.js +63 -261
  124. package/dist/meeting/util.js.map +1 -1
  125. package/dist/meeting-info/collection.js +6 -25
  126. package/dist/meeting-info/collection.js.map +1 -1
  127. package/dist/meeting-info/index.js +14 -32
  128. package/dist/meeting-info/index.js.map +1 -1
  129. package/dist/meeting-info/meeting-info-v2.js +273 -280
  130. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  131. package/dist/meeting-info/request.js +3 -15
  132. package/dist/meeting-info/request.js.map +1 -1
  133. package/dist/meeting-info/util.js +98 -183
  134. package/dist/meeting-info/util.js.map +1 -1
  135. package/dist/meeting-info/utilv2.js +155 -232
  136. package/dist/meeting-info/utilv2.js.map +1 -1
  137. package/dist/meetings/collection.js +26 -19
  138. package/dist/meetings/collection.js.map +1 -1
  139. package/dist/meetings/index.js +741 -548
  140. package/dist/meetings/index.js.map +1 -1
  141. package/dist/meetings/request.js +26 -41
  142. package/dist/meetings/request.js.map +1 -1
  143. package/dist/meetings/util.js +194 -149
  144. package/dist/meetings/util.js.map +1 -1
  145. package/dist/member/index.js +100 -85
  146. package/dist/member/index.js.map +1 -1
  147. package/dist/member/types.js +15 -0
  148. package/dist/member/types.js.map +1 -0
  149. package/dist/member/util.js +90 -68
  150. package/dist/member/util.js.map +1 -1
  151. package/dist/members/collection.js +13 -12
  152. package/dist/members/collection.js.map +1 -1
  153. package/dist/members/index.js +227 -188
  154. package/dist/members/index.js.map +1 -1
  155. package/dist/members/request.js +54 -39
  156. package/dist/members/request.js.map +1 -1
  157. package/dist/members/types.js +15 -0
  158. package/dist/members/types.js.map +1 -0
  159. package/dist/members/util.js +107 -44
  160. package/dist/members/util.js.map +1 -1
  161. package/dist/metrics/config.js +5 -14
  162. package/dist/metrics/config.js.map +1 -1
  163. package/dist/metrics/constants.js +3 -7
  164. package/dist/metrics/constants.js.map +1 -1
  165. package/dist/metrics/index.js +67 -159
  166. package/dist/metrics/index.js.map +1 -1
  167. package/dist/multistream/mediaRequestManager.js +250 -0
  168. package/dist/multistream/mediaRequestManager.js.map +1 -0
  169. package/dist/multistream/receiveSlot.js +202 -0
  170. package/dist/multistream/receiveSlot.js.map +1 -0
  171. package/dist/multistream/receiveSlotManager.js +176 -0
  172. package/dist/multistream/receiveSlotManager.js.map +1 -0
  173. package/dist/multistream/remoteMedia.js +270 -0
  174. package/dist/multistream/remoteMedia.js.map +1 -0
  175. package/dist/multistream/remoteMediaGroup.js +209 -0
  176. package/dist/multistream/remoteMediaGroup.js.map +1 -0
  177. package/dist/multistream/remoteMediaManager.js +1137 -0
  178. package/dist/multistream/remoteMediaManager.js.map +1 -0
  179. package/dist/networkQualityMonitor/index.js +40 -59
  180. package/dist/networkQualityMonitor/index.js.map +1 -1
  181. package/dist/personal-meeting-room/index.js +21 -45
  182. package/dist/personal-meeting-room/index.js.map +1 -1
  183. package/dist/personal-meeting-room/request.js +1 -31
  184. package/dist/personal-meeting-room/request.js.map +1 -1
  185. package/dist/personal-meeting-room/util.js +0 -13
  186. package/dist/personal-meeting-room/util.js.map +1 -1
  187. package/dist/reachability/index.js +192 -191
  188. package/dist/reachability/index.js.map +1 -1
  189. package/dist/reachability/request.js +15 -23
  190. package/dist/reachability/request.js.map +1 -1
  191. package/dist/reactions/constants.js +13 -0
  192. package/dist/reactions/constants.js.map +1 -0
  193. package/dist/reactions/reactions.js +109 -0
  194. package/dist/reactions/reactions.js.map +1 -0
  195. package/dist/reactions/reactions.type.js +36 -0
  196. package/dist/reactions/reactions.type.js.map +1 -0
  197. package/dist/reconnection-manager/index.js +386 -527
  198. package/dist/reconnection-manager/index.js.map +1 -1
  199. package/dist/recording-controller/enums.js +17 -0
  200. package/dist/recording-controller/enums.js.map +1 -0
  201. package/dist/recording-controller/index.js +343 -0
  202. package/dist/recording-controller/index.js.map +1 -0
  203. package/dist/recording-controller/util.js +63 -0
  204. package/dist/recording-controller/util.js.map +1 -0
  205. package/dist/roap/index.js +84 -286
  206. package/dist/roap/index.js.map +1 -1
  207. package/dist/roap/request.js +138 -238
  208. package/dist/roap/request.js.map +1 -1
  209. package/dist/roap/turnDiscovery.js +164 -102
  210. package/dist/roap/turnDiscovery.js.map +1 -1
  211. package/dist/statsAnalyzer/global.js +1 -93
  212. package/dist/statsAnalyzer/global.js.map +1 -1
  213. package/dist/statsAnalyzer/index.js +399 -470
  214. package/dist/statsAnalyzer/index.js.map +1 -1
  215. package/dist/statsAnalyzer/mqaUtil.js +143 -87
  216. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  217. package/dist/transcription/index.js +22 -47
  218. package/dist/transcription/index.js.map +1 -1
  219. package/dist/types/annotation/annotation.types.d.ts +34 -0
  220. package/dist/types/annotation/constants.d.ts +31 -0
  221. package/dist/types/annotation/index.d.ts +124 -0
  222. package/dist/types/breakouts/breakout.d.ts +8 -0
  223. package/dist/types/breakouts/collection.d.ts +5 -0
  224. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  225. package/dist/types/breakouts/events.d.ts +2 -0
  226. package/dist/types/breakouts/index.d.ts +5 -0
  227. package/dist/types/breakouts/request.d.ts +22 -0
  228. package/dist/types/breakouts/utils.d.ts +15 -0
  229. package/dist/types/common/browser-detection.d.ts +9 -0
  230. package/dist/types/common/collection.d.ts +48 -0
  231. package/dist/types/common/config.d.ts +2 -0
  232. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  233. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  234. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  235. package/dist/types/common/errors/media.d.ts +15 -0
  236. package/dist/types/common/errors/parameter.d.ts +15 -0
  237. package/dist/types/common/errors/password-error.d.ts +15 -0
  238. package/dist/types/common/errors/permission.d.ts +14 -0
  239. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  240. package/dist/types/common/errors/reconnection.d.ts +15 -0
  241. package/dist/types/common/errors/stats.d.ts +15 -0
  242. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  243. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  244. package/dist/types/common/events/events-scope.d.ts +17 -0
  245. package/dist/types/common/events/events.d.ts +12 -0
  246. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  247. package/dist/types/common/events/util.d.ts +2 -0
  248. package/dist/types/common/logs/logger-config.d.ts +2 -0
  249. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  250. package/dist/types/common/logs/request.d.ts +34 -0
  251. package/dist/types/common/queue.d.ts +32 -0
  252. package/dist/types/config.d.ts +78 -0
  253. package/dist/types/constants.d.ts +968 -0
  254. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  255. package/dist/types/controls-options-manager/enums.d.ts +13 -0
  256. package/dist/types/controls-options-manager/index.d.ts +136 -0
  257. package/dist/types/controls-options-manager/types.d.ts +37 -0
  258. package/dist/types/controls-options-manager/util.d.ts +1 -0
  259. package/dist/types/index.d.ts +7 -0
  260. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  261. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  262. package/dist/types/locus-info/fullState.d.ts +2 -0
  263. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  264. package/dist/types/locus-info/index.d.ts +315 -0
  265. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  266. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  267. package/dist/types/locus-info/parser.d.ts +212 -0
  268. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  269. package/dist/types/media/index.d.ts +34 -0
  270. package/dist/types/media/properties.d.ts +108 -0
  271. package/dist/types/media/util.d.ts +2 -0
  272. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  273. package/dist/types/meeting/in-meeting-actions.d.ts +129 -0
  274. package/dist/types/meeting/index.d.ts +1748 -0
  275. package/dist/types/meeting/muteState.d.ts +185 -0
  276. package/dist/types/meeting/request.d.ts +275 -0
  277. package/dist/types/meeting/request.type.d.ts +11 -0
  278. package/dist/types/meeting/state.d.ts +9 -0
  279. package/dist/types/meeting/util.d.ts +2 -0
  280. package/dist/types/meeting-info/collection.d.ts +20 -0
  281. package/dist/types/meeting-info/index.d.ts +57 -0
  282. package/dist/types/meeting-info/meeting-info-v2.d.ts +112 -0
  283. package/dist/types/meeting-info/request.d.ts +22 -0
  284. package/dist/types/meeting-info/util.d.ts +2 -0
  285. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  286. package/dist/types/meetings/collection.d.ts +31 -0
  287. package/dist/types/meetings/index.d.ts +345 -0
  288. package/dist/types/meetings/request.d.ts +27 -0
  289. package/dist/types/meetings/util.d.ts +18 -0
  290. package/dist/types/member/index.d.ts +156 -0
  291. package/dist/types/member/types.d.ts +21 -0
  292. package/dist/types/member/util.d.ts +2 -0
  293. package/dist/types/members/collection.d.ts +29 -0
  294. package/dist/types/members/index.d.ts +353 -0
  295. package/dist/types/members/request.d.ts +69 -0
  296. package/dist/types/members/types.d.ts +24 -0
  297. package/dist/types/members/util.d.ts +2 -0
  298. package/dist/types/metrics/config.d.ts +172 -0
  299. package/dist/types/metrics/constants.d.ts +54 -0
  300. package/dist/types/metrics/index.d.ts +152 -0
  301. package/dist/types/multistream/mediaRequestManager.d.ts +101 -0
  302. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  303. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  304. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  305. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  306. package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
  307. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  308. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  309. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  310. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  311. package/dist/types/reachability/index.d.ts +152 -0
  312. package/dist/types/reachability/request.d.ts +37 -0
  313. package/dist/types/reactions/constants.d.ts +3 -0
  314. package/dist/types/reactions/reactions.d.ts +4 -0
  315. package/dist/types/reactions/reactions.type.d.ts +52 -0
  316. package/dist/types/reconnection-manager/index.d.ts +126 -0
  317. package/dist/types/recording-controller/enums.d.ts +7 -0
  318. package/dist/types/recording-controller/index.d.ts +193 -0
  319. package/dist/types/recording-controller/util.d.ts +13 -0
  320. package/dist/types/roap/index.d.ts +77 -0
  321. package/dist/types/roap/request.d.ts +38 -0
  322. package/dist/types/roap/turnDiscovery.d.ts +88 -0
  323. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  324. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  325. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  326. package/dist/types/transcription/index.d.ts +64 -0
  327. package/internal-README.md +7 -6
  328. package/package.json +29 -21
  329. package/src/annotation/annotation.types.ts +41 -0
  330. package/src/annotation/constants.ts +36 -0
  331. package/src/annotation/index.ts +339 -0
  332. package/src/breakouts/README.md +219 -0
  333. package/src/breakouts/breakout.ts +141 -0
  334. package/src/breakouts/collection.ts +19 -0
  335. package/src/breakouts/edit-lock-error.ts +25 -0
  336. package/src/breakouts/events.ts +37 -0
  337. package/src/breakouts/index.ts +823 -0
  338. package/src/breakouts/request.ts +55 -0
  339. package/src/breakouts/utils.ts +57 -0
  340. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  341. package/src/common/collection.ts +9 -7
  342. package/src/common/{config.js → config.ts} +1 -1
  343. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  344. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  345. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  346. package/src/common/errors/{media.js → media.ts} +11 -7
  347. package/src/common/errors/parameter.ts +11 -7
  348. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  349. package/src/common/errors/{permission.js → permission.ts} +10 -6
  350. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  351. package/src/common/errors/{stats.js → stats.ts} +11 -7
  352. package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -25
  353. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  354. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  355. package/src/common/events/{events.js → events.ts} +5 -1
  356. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  357. package/src/common/events/{util.js → util.ts} +2 -3
  358. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  359. package/src/common/logs/logger-proxy.ts +44 -0
  360. package/src/common/logs/{request.js → request.ts} +22 -9
  361. package/src/common/queue.ts +1 -2
  362. package/src/{config.js → config.ts} +18 -12
  363. package/src/constants.ts +256 -183
  364. package/src/controls-options-manager/constants.ts +5 -0
  365. package/src/controls-options-manager/enums.ts +16 -0
  366. package/src/controls-options-manager/index.ts +278 -0
  367. package/src/controls-options-manager/types.ts +49 -0
  368. package/src/controls-options-manager/util.ts +229 -0
  369. package/src/index.ts +33 -0
  370. package/src/locus-info/controlsUtils.ts +169 -0
  371. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  372. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  373. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  374. package/src/locus-info/{index.js → index.ts} +331 -80
  375. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  376. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
  377. package/src/locus-info/{parser.js → parser.ts} +67 -79
  378. package/src/locus-info/{selfUtils.js → selfUtils.ts} +196 -67
  379. package/src/media/index.ts +488 -0
  380. package/src/media/{properties.js → properties.ts} +67 -54
  381. package/src/media/util.ts +16 -0
  382. package/src/mediaQualityMetrics/config.ts +384 -0
  383. package/src/meeting/in-meeting-actions.ts +123 -3
  384. package/src/meeting/{index.js → index.ts} +3334 -1775
  385. package/src/meeting/muteState.ts +526 -0
  386. package/src/meeting/{request.js → request.ts} +350 -142
  387. package/src/meeting/request.type.ts +13 -0
  388. package/src/meeting/{state.js → state.ts} +50 -35
  389. package/src/meeting/{util.js → util.ts} +126 -159
  390. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  391. package/src/meeting-info/{index.js → index.ts} +42 -36
  392. package/src/meeting-info/meeting-info-v2.ts +345 -0
  393. package/src/meeting-info/{request.js → request.ts} +14 -4
  394. package/src/meeting-info/{util.js → util.ts} +60 -51
  395. package/src/meeting-info/{utilv2.js → utilv2.ts} +76 -60
  396. package/src/meetings/{collection.js → collection.ts} +26 -3
  397. package/src/meetings/index.ts +1394 -0
  398. package/src/meetings/{request.js → request.ts} +34 -25
  399. package/src/meetings/util.ts +288 -0
  400. package/src/member/{index.js → index.ts} +124 -56
  401. package/src/member/types.ts +24 -0
  402. package/src/member/{util.js → util.ts} +105 -25
  403. package/src/members/{collection.js → collection.ts} +10 -2
  404. package/src/members/{index.js → index.ts} +359 -139
  405. package/src/members/request.ts +215 -0
  406. package/src/members/types.ts +28 -0
  407. package/src/members/{util.js → util.ts} +145 -54
  408. package/src/metrics/{config.js → config.ts} +256 -92
  409. package/src/metrics/{constants.js → constants.ts} +1 -6
  410. package/src/metrics/{index.js → index.ts} +116 -97
  411. package/src/multistream/mediaRequestManager.ts +324 -0
  412. package/src/multistream/receiveSlot.ts +184 -0
  413. package/src/multistream/receiveSlotManager.ts +166 -0
  414. package/src/multistream/remoteMedia.ts +254 -0
  415. package/src/multistream/remoteMediaGroup.ts +225 -0
  416. package/src/multistream/remoteMediaManager.ts +1075 -0
  417. package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
  418. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  419. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  420. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  421. package/src/reachability/{index.js → index.ts} +157 -94
  422. package/src/reachability/request.ts +46 -35
  423. package/src/reactions/constants.ts +4 -0
  424. package/src/reactions/reactions.ts +104 -0
  425. package/src/reactions/reactions.type.ts +62 -0
  426. package/src/reconnection-manager/{index.js → index.ts} +261 -163
  427. package/src/recording-controller/enums.ts +8 -0
  428. package/src/recording-controller/index.ts +315 -0
  429. package/src/recording-controller/util.ts +58 -0
  430. package/src/roap/index.ts +241 -0
  431. package/src/roap/request.ts +172 -0
  432. package/src/roap/turnDiscovery.ts +127 -53
  433. package/src/statsAnalyzer/global.ts +37 -0
  434. package/src/statsAnalyzer/index.ts +1273 -0
  435. package/src/statsAnalyzer/mqaUtil.ts +291 -0
  436. package/src/transcription/{index.js → index.ts} +46 -39
  437. package/test/integration/spec/converged-space-meetings.js +177 -0
  438. package/test/integration/spec/journey.js +666 -464
  439. package/test/integration/spec/space-meeting.js +321 -206
  440. package/test/integration/spec/transcription.js +7 -8
  441. package/test/unit/spec/annotation/index.ts +435 -0
  442. package/test/unit/spec/breakouts/breakout.ts +184 -0
  443. package/test/unit/spec/breakouts/collection.ts +15 -0
  444. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  445. package/test/unit/spec/breakouts/events.ts +77 -0
  446. package/test/unit/spec/breakouts/index.ts +1504 -0
  447. package/test/unit/spec/breakouts/request.ts +104 -0
  448. package/test/unit/spec/breakouts/utils.js +72 -0
  449. package/test/unit/spec/common/browser-detection.js +9 -28
  450. package/test/unit/spec/controls-options-manager/index.js +287 -0
  451. package/test/unit/spec/controls-options-manager/util.js +403 -0
  452. package/test/unit/spec/fixture/locus.js +92 -90
  453. package/test/unit/spec/locus-info/controlsUtils.js +177 -32
  454. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  455. package/test/unit/spec/locus-info/index.js +493 -3
  456. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  457. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  458. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  459. package/test/unit/spec/locus-info/parser.js +3 -9
  460. package/test/unit/spec/locus-info/selfConstant.js +110 -103
  461. package/test/unit/spec/locus-info/selfUtils.js +236 -12
  462. package/test/unit/spec/media/index.ts +303 -0
  463. package/test/unit/spec/media/properties.ts +73 -82
  464. package/test/unit/spec/meeting/in-meeting-actions.ts +58 -3
  465. package/test/unit/spec/meeting/index.js +3127 -975
  466. package/test/unit/spec/meeting/muteState.js +375 -70
  467. package/test/unit/spec/meeting/request.js +217 -43
  468. package/test/unit/spec/meeting/utils.js +205 -163
  469. package/test/unit/spec/meeting-info/meetinginfov2.js +268 -74
  470. package/test/unit/spec/meeting-info/request.js +7 -9
  471. package/test/unit/spec/meeting-info/util.js +11 -12
  472. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  473. package/test/unit/spec/meetings/collection.js +15 -1
  474. package/test/unit/spec/meetings/index.js +1052 -333
  475. package/test/unit/spec/meetings/utils.js +163 -14
  476. package/test/unit/spec/member/index.js +24 -1
  477. package/test/unit/spec/member/util.js +359 -32
  478. package/test/unit/spec/members/index.js +547 -37
  479. package/test/unit/spec/members/request.js +76 -20
  480. package/test/unit/spec/members/utils.js +191 -4
  481. package/test/unit/spec/metrics/index.js +46 -20
  482. package/test/unit/spec/multistream/mediaRequestManager.ts +1060 -0
  483. package/test/unit/spec/multistream/receiveSlot.ts +163 -0
  484. package/test/unit/spec/multistream/receiveSlotManager.ts +203 -0
  485. package/test/unit/spec/multistream/remoteMedia.ts +255 -0
  486. package/test/unit/spec/multistream/remoteMediaGroup.ts +396 -0
  487. package/test/unit/spec/multistream/remoteMediaManager.ts +1793 -0
  488. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  489. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  490. package/test/unit/spec/reachability/index.ts +176 -27
  491. package/test/unit/spec/reachability/request.js +66 -0
  492. package/test/unit/spec/reconnection-manager/index.js +106 -9
  493. package/test/unit/spec/recording-controller/index.js +231 -0
  494. package/test/unit/spec/recording-controller/util.js +102 -0
  495. package/test/unit/spec/roap/index.ts +78 -45
  496. package/test/unit/spec/roap/request.ts +217 -0
  497. package/test/unit/spec/roap/turnDiscovery.ts +93 -49
  498. package/test/unit/spec/stats-analyzer/index.js +118 -65
  499. package/test/utils/cmr.js +44 -42
  500. package/test/utils/constants.js +9 -0
  501. package/test/utils/integrationTestUtils.js +64 -0
  502. package/test/utils/testUtils.js +63 -99
  503. package/test/utils/webex-config.js +22 -18
  504. package/test/utils/webex-test-users.js +57 -50
  505. package/tsconfig.json +6 -0
  506. package/dist/meeting/effectsState.js +0 -327
  507. package/dist/meeting/effectsState.js.map +0 -1
  508. package/dist/peer-connection-manager/index.js +0 -794
  509. package/dist/peer-connection-manager/index.js.map +0 -1
  510. package/dist/peer-connection-manager/util.js +0 -124
  511. package/dist/peer-connection-manager/util.js.map +0 -1
  512. package/dist/roap/collection.js +0 -73
  513. package/dist/roap/collection.js.map +0 -1
  514. package/dist/roap/handler.js +0 -337
  515. package/dist/roap/handler.js.map +0 -1
  516. package/dist/roap/state.js +0 -164
  517. package/dist/roap/state.js.map +0 -1
  518. package/dist/roap/util.js +0 -102
  519. package/dist/roap/util.js.map +0 -1
  520. package/src/common/logs/logger-proxy.js +0 -33
  521. package/src/index.js +0 -15
  522. package/src/locus-info/controlsUtils.js +0 -102
  523. package/src/media/index.js +0 -593
  524. package/src/media/util.js +0 -38
  525. package/src/mediaQualityMetrics/config.js +0 -382
  526. package/src/meeting/effectsState.js +0 -205
  527. package/src/meeting/muteState.js +0 -318
  528. package/src/meeting-info/meeting-info-v2.js +0 -255
  529. package/src/meetings/index.js +0 -986
  530. package/src/meetings/util.js +0 -176
  531. package/src/members/request.js +0 -131
  532. package/src/peer-connection-manager/index.js +0 -723
  533. package/src/peer-connection-manager/util.ts +0 -117
  534. package/src/roap/collection.js +0 -63
  535. package/src/roap/handler.js +0 -252
  536. package/src/roap/index.js +0 -380
  537. package/src/roap/request.js +0 -198
  538. package/src/roap/state.js +0 -149
  539. package/src/roap/util.js +0 -93
  540. package/src/statsAnalyzer/global.js +0 -131
  541. package/src/statsAnalyzer/index.js +0 -1020
  542. package/src/statsAnalyzer/mqaUtil.js +0 -173
  543. package/test/unit/spec/meeting/effectsState.js +0 -293
  544. package/test/unit/spec/peerconnection-manager/index.js +0 -188
  545. package/test/unit/spec/peerconnection-manager/utils.js +0 -48
  546. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
  547. package/test/unit/spec/roap/util.js +0 -30
  548. /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
@@ -0,0 +1,339 @@
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
+ deviceUrl: string;
32
+
33
+ /**
34
+ * Initializes annotation module
35
+ */
36
+ constructor(...args) {
37
+ super(...args);
38
+ this.seqNum = 1;
39
+ }
40
+
41
+ /**
42
+ * Process Stroke Data
43
+ * @param {request} request stroke data
44
+ * @returns {void}
45
+ */
46
+ private processStrokeMessage(request) {
47
+ this.decryptContent(request.encryptionKeyUrl, request.content).then((decryptedContent) => {
48
+ request.content = decryptedContent;
49
+ TriggerProxy.trigger(
50
+ this,
51
+ {
52
+ file: 'annotation',
53
+ function: 'processStrokeMessage',
54
+ },
55
+ EVENT_TRIGGERS.ANNOTATION_STROKE_DATA,
56
+ {
57
+ data: request,
58
+ }
59
+ );
60
+ });
61
+ }
62
+
63
+ /** bind all events from mercury
64
+ * @param {Object} e
65
+ * @returns {undefined}
66
+ */
67
+ private eventCommandProcessor(e) {
68
+ if (
69
+ e?.data?.eventType === 'locus.approval_request' &&
70
+ e?.data?.approval?.resourceType === ANNOTATION_RESOURCE_TYPE &&
71
+ e?.data?.approval?.actionType
72
+ ) {
73
+ TriggerProxy.trigger(
74
+ this,
75
+ {
76
+ file: 'annotation',
77
+ function: 'approval_request',
78
+ },
79
+ EVENT_TRIGGERS.ANNOTATION_COMMAND,
80
+ {
81
+ type: e.data.approval.actionType,
82
+ payload: e.data.approval,
83
+ }
84
+ );
85
+ this.seqNum = (e?.sequenceNumber || 0) + 1;
86
+ }
87
+ }
88
+
89
+ /** bind all events from llm
90
+ * @param {Object} e
91
+ * @returns {undefined}
92
+ */
93
+ private eventDataProcessor(e) {
94
+ switch (e?.data?.relayType) {
95
+ case ANNOTATION_RELAY_TYPES.ANNOTATION_CLIENT:
96
+ this.seqNum = (e?.sequenceNumber || 0) + 1;
97
+ this.processStrokeMessage(e.data.request);
98
+ break;
99
+ default:
100
+ break;
101
+ }
102
+ }
103
+
104
+ /**
105
+ * Listen to websocket messages
106
+ * @returns {undefined}
107
+ */
108
+ private listenToEvents() {
109
+ if (!this.hasSubscribedToEvents) {
110
+ // @ts-ignore
111
+ this.webex.internal.mercury.on(
112
+ 'event:locus.approval_request',
113
+ this.eventCommandProcessor,
114
+ this
115
+ );
116
+ // @ts-ignore
117
+ this.webex.internal.llm.on('event:relay.event', this.eventDataProcessor, this);
118
+ this.hasSubscribedToEvents = true;
119
+ }
120
+ }
121
+
122
+ /**
123
+ * set locusUrl
124
+ * @param {string} locusUrl
125
+ * @returns {void}
126
+ */
127
+ public locusUrlUpdate(locusUrl: string) {
128
+ this.locusUrl = locusUrl;
129
+ this.listenToEvents();
130
+ }
131
+
132
+ /**
133
+ * set approved url
134
+ * @param {string} approvalUrl
135
+ * @returns {void}
136
+ */
137
+ public approvalUrlUpdate(approvalUrl: string) {
138
+ this.approvalUrl = approvalUrl;
139
+ }
140
+
141
+ /**
142
+ * accept request
143
+ * @param {object} approval
144
+ * @returns {Promise}
145
+ */
146
+ public acceptRequest(approval) {
147
+ // @ts-ignore
148
+ return this.request({
149
+ method: HTTP_VERBS.PUT,
150
+ url: approval.url,
151
+ body: {
152
+ resourceType: ANNOTATION_RESOURCE_TYPE,
153
+ actionType: ANNOTATION_ACTION_TYPE.ACCEPTED,
154
+ },
155
+ });
156
+ }
157
+
158
+ /**
159
+ * presenter declined request annotation
160
+ * @param {approval} approval
161
+ * @returns {Promise}
162
+ */
163
+ public declineRequest(approval) {
164
+ // @ts-ignore
165
+ return this.request({
166
+ method: HTTP_VERBS.PUT,
167
+ url: approval.url,
168
+ body: {
169
+ resourceType: ANNOTATION_RESOURCE_TYPE,
170
+ actionType: ANNOTATION_ACTION_TYPE.DECLINED,
171
+ },
172
+ });
173
+ }
174
+
175
+ /**
176
+ * request approved annotation
177
+ * @param {RequestData} requestData
178
+ * @returns {Promise}
179
+ */
180
+ public approveAnnotation(requestData: RequestData) {
181
+ return this.sendAnnotationAction(ANNOTATION_ACTION_TYPE.REQUESTED, requestData);
182
+ }
183
+
184
+ /**
185
+ * cancel approved annotation
186
+ * @param {object} requestData
187
+ * @param {object} approval
188
+ * @returns {Promise}
189
+ */
190
+ public cancelApproveAnnotation(requestData: RequestData, approval) {
191
+ const body: CommandRequestBody = {
192
+ actionType: ANNOTATION_ACTION_TYPE.CANCELED,
193
+ resourceType: 'AnnotationOnShare',
194
+ shareInstanceId: requestData.shareInstanceId,
195
+ };
196
+
197
+ // @ts-ignore
198
+ return this.request({
199
+ method: HTTP_VERBS.PUT,
200
+ url: `${approval.url}`,
201
+ body,
202
+ });
203
+ }
204
+
205
+ /**
206
+ * close annotation
207
+ * @param {object} requestData
208
+ * @returns {Promise}
209
+ */
210
+ public closeAnnotation(requestData: RequestData) {
211
+ return this.sendAnnotationAction(ANNOTATION_ACTION_TYPE.CLOSED, requestData);
212
+ }
213
+
214
+ /**
215
+ * send annotation command
216
+ * @param {ANNOTATION_ACTION_TYPE} actionType
217
+ * @param {RequestData} requestData
218
+ * @returns {Promise}
219
+ */
220
+ private sendAnnotationAction = async (
221
+ actionType: ANNOTATION_ACTION_TYPE,
222
+ requestData: RequestData
223
+ ): Promise<void> => {
224
+ const body: CommandRequestBody = {
225
+ actionType,
226
+ resourceType: 'AnnotationOnShare',
227
+ shareInstanceId: requestData.shareInstanceId,
228
+ };
229
+ if (requestData?.toUserId) {
230
+ body.receivers = [{participantId: requestData.toUserId, deviceUrl: requestData.toDeviceUrl}];
231
+ }
232
+
233
+ // @ts-ignore
234
+ return this.request({
235
+ method: HTTP_VERBS.POST,
236
+ url: `${this.approvalUrl}`,
237
+ body,
238
+ });
239
+ };
240
+
241
+ /**
242
+ * decrypt data
243
+ * @param {string} encryptionKeyUrl
244
+ * @param {string} content encrypted content
245
+ * @returns {string} decrypted content
246
+ */
247
+ private decryptContent = (encryptionKeyUrl: string, content: string): Promise<any> => {
248
+ // @ts-ignore
249
+ return this.webex.internal.encryption.decryptText(encryptionKeyUrl, content).then((res) => {
250
+ return res;
251
+ });
252
+ };
253
+
254
+ /**
255
+ * encrypt data
256
+ * @param {string} encryptionKeyUrl
257
+ * @param {string} content original content
258
+ * @returns {string} encrypted content
259
+ */
260
+ private encryptContent = (encryptionKeyUrl: string, content: string): Promise<any> => {
261
+ // @ts-ignore
262
+ return this.webex.internal.encryption.encryptText(encryptionKeyUrl, content).then((res) => {
263
+ return res;
264
+ });
265
+ };
266
+
267
+ /**
268
+ * Sends stroke data to presenter
269
+ * @param {StrokeData} strokeData
270
+ * @returns {void}
271
+ */
272
+ public sendStrokeData = (strokeData: StrokeData): void => {
273
+ // @ts-ignore
274
+ if (!this.webex.internal.llm.isConnected()) return;
275
+ this.encryptContent(strokeData.encryptionKeyUrl, strokeData.content).then(
276
+ (encryptedContent) => {
277
+ this.publishEncrypted(encryptedContent, strokeData);
278
+ }
279
+ );
280
+ };
281
+
282
+ /**
283
+ * Change annotation options
284
+ * @param {object} options
285
+ * @param {object} meeting
286
+ * @returns {Promise}
287
+ */
288
+ public changeAnnotationOptions(options, meeting) {
289
+ return meeting?.meetingRequest.changeMeetingFloor(options);
290
+ }
291
+
292
+ /**
293
+ * private encrypted the strokes data
294
+ * @param {string} encryptedContent
295
+ * @param {StrokeData} strokeData
296
+ * @returns {void}
297
+ */
298
+ private publishEncrypted(encryptedContent: string, strokeData: StrokeData) {
299
+ const data = {
300
+ id: `${this.seqNum}`,
301
+ type: 'publishRequest',
302
+ recipients: {
303
+ // @ts-ignore
304
+ route: this.webex.internal.llm.getBinding(),
305
+ },
306
+ headers: {
307
+ to: strokeData.toUserId,
308
+ },
309
+ data: {
310
+ eventType: 'relay.event',
311
+ relayType: ANNOTATION_RELAY_TYPES.ANNOTATION_CLIENT,
312
+ request: {
313
+ value: {
314
+ sessionId: uuid.v4(),
315
+ type: ANNOTATION_REQUEST_TYPE.ANNOTATION_MESSAGE,
316
+ locusUrl: this.locusUrl,
317
+ content: encryptedContent,
318
+ version: 'mVersion',
319
+ fromUserId: strokeData.fromUserId,
320
+ fromDeviceUrl: strokeData.fromDeviceUrl,
321
+ shareInstanceId: strokeData.shareInstanceId,
322
+ locusId: this.locusUrl && this.locusUrl.split('/').pop(),
323
+ encryptionKeyUrl: strokeData.encryptionKeyUrl,
324
+ },
325
+ },
326
+ },
327
+ trackingId: `${config.trackingIdPrefix}_${uuid.v4().toString()}`,
328
+ timestamp: new Date().getTime(),
329
+ sequenceNumber: this.seqNum,
330
+ filterMessage: false,
331
+ };
332
+
333
+ // @ts-ignore
334
+ this.webex.internal.llm.socket.send(data);
335
+ this.seqNum += 1;
336
+ }
337
+ }
338
+
339
+ 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,141 @@
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 {_ID_, HTTP_VERBS, MEETINGS} from '../constants';
9
+ import Members from '../members';
10
+ import BreakoutRequest from './request';
11
+ import breakoutEvent from './events';
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
+ requestedLastModifiedTime: 'string',
34
+ },
35
+
36
+ derived: {
37
+ isMain: {
38
+ cache: false, // fix issue: sometimes the derived will not change even if the deps changed
39
+ deps: ['sessionType'],
40
+ /**
41
+ * If the breakout has no name, assume it is the main session
42
+ * @returns {boolean}
43
+ */
44
+ fn() {
45
+ return this.sessionType === 'MAIN';
46
+ },
47
+ },
48
+ },
49
+
50
+ initialize() {
51
+ this.members = new Members({}, {parent: this.webex});
52
+ // @ts-ignore
53
+ this.breakoutRequest = new BreakoutRequest({webex: this.webex});
54
+ },
55
+
56
+ /**
57
+ * Joins the breakout session
58
+ * @returns {Promise}
59
+ */
60
+ async join() {
61
+ const breakoutMoveId = uuid.v4();
62
+ const deviceUrl = this.webex.internal.device.url;
63
+ const {meetingId} = this.collection.parent;
64
+ const meeting = this.webex.meetings.getMeetingByType(_ID_, meetingId);
65
+ breakoutEvent.onBreakoutMoveRequest({currentSession: this, meeting, breakoutMoveId});
66
+ const result = await this.request({
67
+ method: HTTP_VERBS.POST,
68
+ uri: `${this.url}/move`,
69
+ body: {
70
+ breakoutMoveId,
71
+ deviceUrl,
72
+ groupId: this.groupId,
73
+ sessionId: this.sessionId,
74
+ },
75
+ });
76
+ breakoutEvent.onBreakoutMoveResponse({currentSession: this, meeting, breakoutMoveId});
77
+
78
+ return result;
79
+ },
80
+
81
+ /**
82
+ * Leaves the breakout session to return to the main session
83
+ * @returns {Promise}
84
+ * @throws {Error} if an attempt is made to leave the main session or if the main session cannot be found
85
+ */
86
+ leave() {
87
+ if (this.isMain) {
88
+ throw new Error('Cannot leave the main session');
89
+ }
90
+
91
+ const mainSession = this.parent.breakouts.filter((breakout) => breakout.isMain)[0];
92
+
93
+ if (!mainSession) {
94
+ throw new Error('Cannot leave, no main session found');
95
+ }
96
+
97
+ return mainSession.join();
98
+ },
99
+
100
+ /**
101
+ * Sends a help request for the current breakout
102
+ * @returns {Promise}
103
+ */
104
+ askForHelp() {
105
+ return this.request({
106
+ method: HTTP_VERBS.POST,
107
+ uri: `${this.url}/help`,
108
+ body: {
109
+ groupId: this.groupId,
110
+ sessionId: this.sessionId,
111
+ },
112
+ });
113
+ },
114
+
115
+ /**
116
+ * Parses the participants from the locus object
117
+ * @param locus Locus object
118
+ * @returns {void}
119
+ */
120
+
121
+ parseRoster(locus) {
122
+ this.members.locusParticipantsUpdate(locus);
123
+ },
124
+ /*
125
+ * Broadcast message to this breakout session's participants
126
+ * @param {String} message
127
+ * @param {Object} options
128
+ * @returns {Promise}
129
+ */
130
+ broadcast(message, options) {
131
+ return this.breakoutRequest.broadcast({
132
+ url: this.url,
133
+ message,
134
+ options,
135
+ groupId: this.groupId,
136
+ sessionId: this.sessionId,
137
+ });
138
+ },
139
+ });
140
+
141
+ 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;