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

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 (365) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/breakouts/breakout.js +116 -0
  4. package/dist/breakouts/breakout.js.map +1 -0
  5. package/dist/breakouts/collection.js +23 -0
  6. package/dist/breakouts/collection.js.map +1 -0
  7. package/dist/breakouts/index.js +226 -0
  8. package/dist/breakouts/index.js.map +1 -0
  9. package/dist/common/browser-detection.js +1 -20
  10. package/dist/common/browser-detection.js.map +1 -1
  11. package/dist/common/collection.js +5 -20
  12. package/dist/common/collection.js.map +1 -1
  13. package/dist/common/config.js +0 -7
  14. package/dist/common/config.js.map +1 -1
  15. package/dist/common/errors/captcha-error.js +10 -24
  16. package/dist/common/errors/captcha-error.js.map +1 -1
  17. package/dist/common/errors/intent-to-join.js +11 -24
  18. package/dist/common/errors/intent-to-join.js.map +1 -1
  19. package/dist/common/errors/join-meeting.js +12 -25
  20. package/dist/common/errors/join-meeting.js.map +1 -1
  21. package/dist/common/errors/media.js +10 -24
  22. package/dist/common/errors/media.js.map +1 -1
  23. package/dist/common/errors/parameter.js +5 -33
  24. package/dist/common/errors/parameter.js.map +1 -1
  25. package/dist/common/errors/password-error.js +10 -24
  26. package/dist/common/errors/password-error.js.map +1 -1
  27. package/dist/common/errors/permission.js +9 -23
  28. package/dist/common/errors/permission.js.map +1 -1
  29. package/dist/common/errors/reconnection-in-progress.js +0 -17
  30. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  31. package/dist/common/errors/reconnection.js +10 -24
  32. package/dist/common/errors/reconnection.js.map +1 -1
  33. package/dist/common/errors/stats.js +10 -24
  34. package/dist/common/errors/stats.js.map +1 -1
  35. package/dist/common/errors/webex-errors.js +6 -41
  36. package/dist/common/errors/webex-errors.js.map +1 -1
  37. package/dist/common/errors/webex-meetings-error.js +5 -25
  38. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  39. package/dist/common/events/events-scope.js +0 -22
  40. package/dist/common/events/events-scope.js.map +1 -1
  41. package/dist/common/events/events.js +0 -23
  42. package/dist/common/events/events.js.map +1 -1
  43. package/dist/common/events/trigger-proxy.js +0 -12
  44. package/dist/common/events/trigger-proxy.js.map +1 -1
  45. package/dist/common/events/util.js +0 -15
  46. package/dist/common/events/util.js.map +1 -1
  47. package/dist/common/logs/logger-config.js +0 -4
  48. package/dist/common/logs/logger-config.js.map +1 -1
  49. package/dist/common/logs/logger-proxy.js +1 -8
  50. package/dist/common/logs/logger-proxy.js.map +1 -1
  51. package/dist/common/logs/request.js +37 -60
  52. package/dist/common/logs/request.js.map +1 -1
  53. package/dist/common/queue.js +4 -14
  54. package/dist/common/queue.js.map +1 -1
  55. package/dist/config.js +6 -6
  56. package/dist/config.js.map +1 -1
  57. package/dist/constants.js +88 -46
  58. package/dist/constants.js.map +1 -1
  59. package/dist/index.js +1 -17
  60. package/dist/index.js.map +1 -1
  61. package/dist/locus-info/controlsUtils.js +12 -29
  62. package/dist/locus-info/controlsUtils.js.map +1 -1
  63. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  64. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  65. package/dist/locus-info/fullState.js +0 -15
  66. package/dist/locus-info/fullState.js.map +1 -1
  67. package/dist/locus-info/hostUtils.js +4 -12
  68. package/dist/locus-info/hostUtils.js.map +1 -1
  69. package/dist/locus-info/index.js +184 -190
  70. package/dist/locus-info/index.js.map +1 -1
  71. package/dist/locus-info/infoUtils.js +3 -37
  72. package/dist/locus-info/infoUtils.js.map +1 -1
  73. package/dist/locus-info/mediaSharesUtils.js +12 -38
  74. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  75. package/dist/locus-info/parser.js +92 -118
  76. package/dist/locus-info/parser.js.map +1 -1
  77. package/dist/locus-info/selfUtils.js +34 -91
  78. package/dist/locus-info/selfUtils.js.map +1 -1
  79. package/dist/media/index.js +67 -111
  80. package/dist/media/index.js.map +1 -1
  81. package/dist/media/properties.js +80 -114
  82. package/dist/media/properties.js.map +1 -1
  83. package/dist/media/util.js +2 -9
  84. package/dist/media/util.js.map +1 -1
  85. package/dist/mediaQualityMetrics/config.js +10 -12
  86. package/dist/mediaQualityMetrics/config.js.map +1 -1
  87. package/dist/meeting/effectsState.js +125 -190
  88. package/dist/meeting/effectsState.js.map +1 -1
  89. package/dist/meeting/in-meeting-actions.js +5 -14
  90. package/dist/meeting/in-meeting-actions.js.map +1 -1
  91. package/dist/meeting/index.js +1692 -1925
  92. package/dist/meeting/index.js.map +1 -1
  93. package/dist/meeting/muteState.js +36 -77
  94. package/dist/meeting/muteState.js.map +1 -1
  95. package/dist/meeting/request.js +224 -230
  96. package/dist/meeting/request.js.map +1 -1
  97. package/dist/meeting/request.type.js +7 -0
  98. package/dist/meeting/request.type.js.map +1 -0
  99. package/dist/meeting/state.js +21 -31
  100. package/dist/meeting/state.js.map +1 -1
  101. package/dist/meeting/util.js +43 -215
  102. package/dist/meeting/util.js.map +1 -1
  103. package/dist/meeting-info/collection.js +6 -25
  104. package/dist/meeting-info/collection.js.map +1 -1
  105. package/dist/meeting-info/index.js +14 -32
  106. package/dist/meeting-info/index.js.map +1 -1
  107. package/dist/meeting-info/meeting-info-v2.js +193 -268
  108. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  109. package/dist/meeting-info/request.js +3 -15
  110. package/dist/meeting-info/request.js.map +1 -1
  111. package/dist/meeting-info/util.js +98 -183
  112. package/dist/meeting-info/util.js.map +1 -1
  113. package/dist/meeting-info/utilv2.js +137 -228
  114. package/dist/meeting-info/utilv2.js.map +1 -1
  115. package/dist/meetings/collection.js +5 -20
  116. package/dist/meetings/collection.js.map +1 -1
  117. package/dist/meetings/index.js +490 -560
  118. package/dist/meetings/index.js.map +1 -1
  119. package/dist/meetings/request.js +24 -41
  120. package/dist/meetings/request.js.map +1 -1
  121. package/dist/meetings/util.js +99 -155
  122. package/dist/meetings/util.js.map +1 -1
  123. package/dist/member/index.js +78 -86
  124. package/dist/member/index.js.map +1 -1
  125. package/dist/member/util.js +31 -68
  126. package/dist/member/util.js.map +1 -1
  127. package/dist/members/collection.js +3 -12
  128. package/dist/members/collection.js.map +1 -1
  129. package/dist/members/index.js +93 -200
  130. package/dist/members/index.js.map +1 -1
  131. package/dist/members/request.js +16 -39
  132. package/dist/members/request.js.map +1 -1
  133. package/dist/members/util.js +9 -38
  134. package/dist/members/util.js.map +1 -1
  135. package/dist/metrics/config.js +0 -2
  136. package/dist/metrics/config.js.map +1 -1
  137. package/dist/metrics/constants.js +1 -2
  138. package/dist/metrics/constants.js.map +1 -1
  139. package/dist/metrics/index.js +55 -135
  140. package/dist/metrics/index.js.map +1 -1
  141. package/dist/multistream/mediaRequestManager.js +57 -32
  142. package/dist/multistream/mediaRequestManager.js.map +1 -1
  143. package/dist/multistream/multistreamMedia.js +15 -21
  144. package/dist/multistream/multistreamMedia.js.map +1 -1
  145. package/dist/multistream/receiveSlot.js +10 -50
  146. package/dist/multistream/receiveSlot.js.map +1 -1
  147. package/dist/multistream/receiveSlotManager.js +45 -82
  148. package/dist/multistream/receiveSlotManager.js.map +1 -1
  149. package/dist/multistream/remoteMedia.js +18 -58
  150. package/dist/multistream/remoteMedia.js.map +1 -1
  151. package/dist/multistream/remoteMediaGroup.js +6 -40
  152. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  153. package/dist/multistream/remoteMediaManager.js +362 -416
  154. package/dist/multistream/remoteMediaManager.js.map +1 -1
  155. package/dist/networkQualityMonitor/index.js +36 -57
  156. package/dist/networkQualityMonitor/index.js.map +1 -1
  157. package/dist/personal-meeting-room/index.js +21 -45
  158. package/dist/personal-meeting-room/index.js.map +1 -1
  159. package/dist/personal-meeting-room/request.js +1 -31
  160. package/dist/personal-meeting-room/request.js.map +1 -1
  161. package/dist/personal-meeting-room/util.js +0 -13
  162. package/dist/personal-meeting-room/util.js.map +1 -1
  163. package/dist/reachability/index.js +138 -182
  164. package/dist/reachability/index.js.map +1 -1
  165. package/dist/reachability/request.js +3 -18
  166. package/dist/reachability/request.js.map +1 -1
  167. package/dist/reactions/constants.js +13 -0
  168. package/dist/reactions/constants.js.map +1 -0
  169. package/dist/reactions/reactions.js +109 -0
  170. package/dist/reactions/reactions.js.map +1 -0
  171. package/dist/reactions/reactions.type.js +36 -0
  172. package/dist/reactions/reactions.type.js.map +1 -0
  173. package/dist/reconnection-manager/index.js +322 -455
  174. package/dist/reconnection-manager/index.js.map +1 -1
  175. package/dist/recording-controller/enums.js +17 -0
  176. package/dist/recording-controller/enums.js.map +1 -0
  177. package/dist/recording-controller/index.js +343 -0
  178. package/dist/recording-controller/index.js.map +1 -0
  179. package/dist/recording-controller/util.js +63 -0
  180. package/dist/recording-controller/util.js.map +1 -0
  181. package/dist/roap/index.js +39 -64
  182. package/dist/roap/index.js.map +1 -1
  183. package/dist/roap/request.js +94 -113
  184. package/dist/roap/request.js.map +1 -1
  185. package/dist/roap/turnDiscovery.js +85 -94
  186. package/dist/roap/turnDiscovery.js.map +1 -1
  187. package/dist/statsAnalyzer/global.js +0 -2
  188. package/dist/statsAnalyzer/global.js.map +1 -1
  189. package/dist/statsAnalyzer/index.js +85 -175
  190. package/dist/statsAnalyzer/index.js.map +1 -1
  191. package/dist/statsAnalyzer/mqaUtil.js +72 -53
  192. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  193. package/dist/transcription/index.js +22 -47
  194. package/dist/transcription/index.js.map +1 -1
  195. package/internal-README.md +7 -6
  196. package/package.json +25 -20
  197. package/src/breakouts/README.md +190 -0
  198. package/src/breakouts/breakout.ts +110 -0
  199. package/src/breakouts/collection.ts +19 -0
  200. package/src/breakouts/index.ts +225 -0
  201. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  202. package/src/common/collection.ts +9 -7
  203. package/src/common/{config.js → config.ts} +1 -1
  204. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  205. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  206. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  207. package/src/common/errors/{media.js → media.ts} +11 -7
  208. package/src/common/errors/parameter.ts +11 -7
  209. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  210. package/src/common/errors/{permission.js → permission.ts} +10 -6
  211. package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
  212. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  213. package/src/common/errors/{stats.js → stats.ts} +11 -7
  214. package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -7
  215. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  216. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  217. package/src/common/events/{events.js → events.ts} +5 -1
  218. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  219. package/src/common/events/{util.js → util.ts} +2 -3
  220. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  221. package/src/common/logs/logger-proxy.ts +44 -0
  222. package/src/common/logs/{request.js → request.ts} +22 -9
  223. package/src/common/queue.ts +1 -2
  224. package/src/{config.js → config.ts} +17 -12
  225. package/src/constants.ts +40 -1
  226. package/src/index.js +1 -1
  227. package/src/locus-info/controlsUtils.ts +114 -0
  228. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  229. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  230. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  231. package/src/locus-info/{index.js → index.ts} +148 -64
  232. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  233. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
  234. package/src/locus-info/{parser.js → parser.ts} +67 -79
  235. package/src/locus-info/{selfUtils.js → selfUtils.ts} +123 -68
  236. package/src/media/{index.js → index.ts} +181 -131
  237. package/src/media/{properties.js → properties.ts} +47 -28
  238. package/src/media/{util.js → util.ts} +2 -2
  239. package/src/mediaQualityMetrics/{config.js → config.ts} +46 -46
  240. package/src/meeting/{effectsState.js → effectsState.ts} +47 -41
  241. package/src/meeting/in-meeting-actions.ts +15 -3
  242. package/src/meeting/{index.js → index.ts} +2263 -1427
  243. package/src/meeting/{muteState.js → muteState.ts} +78 -42
  244. package/src/meeting/{request.js → request.ts} +292 -142
  245. package/src/meeting/request.type.ts +13 -0
  246. package/src/meeting/{state.js → state.ts} +50 -35
  247. package/src/meeting/{util.js → util.ts} +112 -115
  248. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  249. package/src/meeting-info/{index.js → index.ts} +42 -36
  250. package/src/meeting-info/meeting-info-v2.ts +273 -0
  251. package/src/meeting-info/{request.js → request.ts} +14 -4
  252. package/src/meeting-info/{util.js → util.ts} +60 -51
  253. package/src/meeting-info/{utilv2.js → utilv2.ts} +65 -58
  254. package/src/meetings/{collection.js → collection.ts} +6 -3
  255. package/src/meetings/index.ts +1159 -0
  256. package/src/meetings/{request.js → request.ts} +32 -25
  257. package/src/meetings/{util.js → util.ts} +34 -32
  258. package/src/member/{index.js → index.ts} +102 -56
  259. package/src/member/{util.js → util.ts} +52 -25
  260. package/src/members/{collection.js → collection.ts} +2 -2
  261. package/src/members/{index.js → index.ts} +219 -142
  262. package/src/members/{request.js → request.ts} +60 -16
  263. package/src/members/{util.js → util.ts} +50 -48
  264. package/src/metrics/{config.js → config.ts} +254 -83
  265. package/src/metrics/{constants.js → constants.ts} +0 -2
  266. package/src/metrics/{index.js → index.ts} +106 -74
  267. package/src/multistream/mediaRequestManager.ts +81 -15
  268. package/src/multistream/multistreamMedia.ts +5 -0
  269. package/src/multistream/receiveSlot.ts +18 -12
  270. package/src/multistream/receiveSlotManager.ts +23 -21
  271. package/src/multistream/remoteMedia.ts +15 -5
  272. package/src/multistream/remoteMediaGroup.ts +4 -3
  273. package/src/multistream/remoteMediaManager.ts +153 -37
  274. package/src/networkQualityMonitor/{index.js → index.ts} +37 -25
  275. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  276. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  277. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  278. package/src/reachability/{index.js → index.ts} +99 -83
  279. package/src/reachability/request.ts +39 -33
  280. package/src/reactions/constants.ts +4 -0
  281. package/src/reactions/reactions.ts +104 -0
  282. package/src/reactions/reactions.type.ts +62 -0
  283. package/src/reconnection-manager/{index.js → index.ts} +195 -102
  284. package/src/recording-controller/enums.ts +8 -0
  285. package/src/recording-controller/index.ts +315 -0
  286. package/src/recording-controller/util.ts +58 -0
  287. package/src/roap/{index.js → index.ts} +73 -56
  288. package/src/roap/request.ts +157 -0
  289. package/src/roap/turnDiscovery.ts +77 -37
  290. package/src/statsAnalyzer/{global.js → global.ts} +30 -33
  291. package/src/statsAnalyzer/{index.js → index.ts} +468 -192
  292. package/src/statsAnalyzer/mqaUtil.ts +290 -0
  293. package/src/transcription/{index.js → index.ts} +46 -39
  294. package/test/integration/spec/journey.js +664 -463
  295. package/test/integration/spec/space-meeting.js +320 -206
  296. package/test/integration/spec/transcription.js +7 -8
  297. package/test/unit/spec/breakouts/breakout.ts +119 -0
  298. package/test/unit/spec/breakouts/collection.ts +15 -0
  299. package/test/unit/spec/breakouts/index.ts +293 -0
  300. package/test/unit/spec/common/browser-detection.js +9 -28
  301. package/test/unit/spec/fixture/locus.js +92 -90
  302. package/test/unit/spec/locus-info/controlsUtils.js +25 -5
  303. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  304. package/test/unit/spec/locus-info/index.js +104 -2
  305. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  306. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  307. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  308. package/test/unit/spec/locus-info/parser.js +3 -9
  309. package/test/unit/spec/locus-info/selfConstant.js +97 -103
  310. package/test/unit/spec/locus-info/selfUtils.js +105 -12
  311. package/test/unit/spec/media/index.ts +31 -47
  312. package/test/unit/spec/media/properties.ts +9 -9
  313. package/test/unit/spec/meeting/effectsState.js +39 -45
  314. package/test/unit/spec/meeting/in-meeting-actions.ts +5 -2
  315. package/test/unit/spec/meeting/index.js +2017 -742
  316. package/test/unit/spec/meeting/muteState.js +42 -33
  317. package/test/unit/spec/meeting/request.js +115 -44
  318. package/test/unit/spec/meeting/utils.js +104 -171
  319. package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
  320. package/test/unit/spec/meeting-info/request.js +7 -9
  321. package/test/unit/spec/meeting-info/util.js +11 -12
  322. package/test/unit/spec/meeting-info/utilv2.js +110 -74
  323. package/test/unit/spec/meetings/collection.js +1 -1
  324. package/test/unit/spec/meetings/index.js +439 -257
  325. package/test/unit/spec/meetings/utils.js +14 -12
  326. package/test/unit/spec/member/index.js +0 -1
  327. package/test/unit/spec/member/util.js +31 -7
  328. package/test/unit/spec/members/index.js +104 -54
  329. package/test/unit/spec/members/request.js +29 -20
  330. package/test/unit/spec/members/utils.js +8 -5
  331. package/test/unit/spec/metrics/index.js +16 -21
  332. package/test/unit/spec/multistream/mediaRequestManager.ts +316 -50
  333. package/test/unit/spec/multistream/receiveSlot.ts +6 -6
  334. package/test/unit/spec/multistream/receiveSlotManager.ts +13 -13
  335. package/test/unit/spec/multistream/remoteMedia.ts +10 -2
  336. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  337. package/test/unit/spec/multistream/remoteMediaManager.ts +412 -65
  338. package/test/unit/spec/networkQualityMonitor/index.js +21 -15
  339. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  340. package/test/unit/spec/reachability/index.ts +58 -26
  341. package/test/unit/spec/reconnection-manager/index.js +102 -9
  342. package/test/unit/spec/recording-controller/index.js +231 -0
  343. package/test/unit/spec/recording-controller/util.js +102 -0
  344. package/test/unit/spec/roap/index.ts +2 -1
  345. package/test/unit/spec/roap/request.ts +114 -0
  346. package/test/unit/spec/roap/turnDiscovery.ts +64 -45
  347. package/test/unit/spec/stats-analyzer/index.js +27 -22
  348. package/test/utils/cmr.js +44 -42
  349. package/test/utils/testUtils.js +83 -74
  350. package/test/utils/webex-config.js +18 -18
  351. package/test/utils/webex-test-users.js +54 -50
  352. package/tsconfig.json +6 -0
  353. package/dist/media/internal-media-core-wrapper.js +0 -22
  354. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  355. package/dist/peer-connection-manager/util.js +0 -124
  356. package/dist/peer-connection-manager/util.js.map +0 -1
  357. package/src/common/logs/logger-proxy.js +0 -33
  358. package/src/locus-info/controlsUtils.js +0 -102
  359. package/src/media/internal-media-core-wrapper.ts +0 -9
  360. package/src/meeting-info/meeting-info-v2.js +0 -255
  361. package/src/meetings/index.js +0 -1015
  362. package/src/peer-connection-manager/util.ts +0 -117
  363. package/src/roap/request.js +0 -127
  364. package/src/statsAnalyzer/mqaUtil.js +0 -173
  365. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
@@ -1 +1 @@
1
- {"version":3,"names":["Transcription","webSocketUrl","sessionId","members","sessionID","memberCSIs","params","webSocket","WebSocket","token","onopen","send","id","uuidv4","type","data","trackingId","toString","callback","onclose","event","onerror","csis","csi","member","membersCollection","find","participant","status","selfIsSpeaking","includes","speaker","transcription","onmessage","JSON","parse","voiceaPayload","getSpeaker","messageID","transcript_id","personID","timestamp","close"],"sources":["index.js"],"sourcesContent":["import {v4 as uuidv4} from 'uuid';\n\n/**\n * @description Meeting Webex assistance transcription feature.\n * @exports\n * @class Transcription\n */\nexport default class Transcription {\n /**\n * @param {string} webSocketUrl\n * @param {sessionID} sessionId\n * @param {object} members\n * @constructor\n * @memberof Transcription\n */\n constructor(webSocketUrl, sessionId, members) {\n this.webSocketUrl = webSocketUrl;\n this.sessionID = sessionId;\n this.members = members;\n this.memberCSIs = {};\n\n const params = '?outboundWireFormat=text&bufferStates=true&aliasHttpStatus=true';\n\n this.webSocket = new WebSocket(`${this.webSocketUrl}${params}`);\n }\n\n /**\n * open the Low Latency Mercury connection\n * An event parameter will be send to the callback.\n *\n * @param {string} token\n * @param {string} sessionID\n * @returns {void}\n */\n connect(token) {\n this.webSocket.onopen = () => {\n this.webSocket.send(JSON.stringify({\n id: uuidv4(),\n type: 'authorization',\n data: {token: `Bearer ${token}`},\n trackingId: `webex-js-sdk_${this.sessionID}${Date.now.toString()}`\n }));\n };\n }\n\n /**\n * Sets callback to invoke when the web socket connection is closed.\n *\n * @param {function} callback\n * @returns {void}\n */\n onCloseSocket(callback) {\n if (callback) {\n this.webSocket.onclose = (event) => {\n callback(event);\n };\n }\n }\n\n /**\n * Sets callback to invoke when a web socket connection error occurs.\n * An event parameter will be send to the callback.\n *\n * @param {function} callback\n * @returns {void}\n */\n onErrorSocket(callback) {\n if (callback) {\n this.webSocket.onerror = (event) => {\n callback(event);\n };\n }\n }\n\n /**\n * Get current speaker from the given csis payload and update the global csis map\n *\n * @private\n * @param {object} csis\n * @returns {object}\n */\n getSpeaker(csis) {\n for (const csi of csis) {\n const member = this.memberCSIs[csi];\n\n if (member) {\n return member;\n }\n }\n\n return Object.values(this.members.membersCollection.members)\n .find((member) => {\n const memberCSIs = member.participant.status.csis;\n let selfIsSpeaking = false;\n\n for (const csi of csis) {\n if (memberCSIs.includes(csi)) {\n this.memberCSIs[csi] = member;\n selfIsSpeaking = true;\n break;\n }\n }\n\n return selfIsSpeaking;\n });\n }\n\n /**\n * Sends transcription data to given callback as it arrives.\n *\n * @param {function} callback\n * @returns {void}\n */\n subscribe(callback) {\n let data, csis, speaker, transcription;\n\n this.webSocket.onmessage = (event) => {\n data = JSON.parse(event.data);\n csis = data.data?.voiceaPayload?.csis || [];\n speaker = this.getSpeaker(csis);\n transcription = data.data?.voiceaPayload?.data || '';\n\n this.webSocket.send(JSON.stringify({messageID: data.id, type: 'ack'}));\n\n if (transcription) {\n callback(\n {\n id: data.data?.voiceaPayload?.transcript_id,\n personID: speaker?.id,\n transcription,\n timestamp: data.timestamp,\n type: data?.data?.voiceaPayload?.type\n }\n );\n }\n };\n }\n\n /**\n * Close the LLM web socket connection\n * @returns {void}\n */\n closeSocket() {\n this.webSocket.close();\n }\n}\n\n"],"mappings":"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"}
1
+ {"version":3,"names":["Transcription","webSocketUrl","sessionId","members","sessionID","memberCSIs","params","webSocket","WebSocket","token","onopen","send","id","uuidv4","type","data","trackingId","toString","callback","onclose","event","onerror","csis","csi","member","membersCollection","find","participant","status","selfIsSpeaking","includes","speaker","transcription","onmessage","JSON","parse","voiceaPayload","getSpeaker","messageID","transcript_id","personID","timestamp","close"],"sources":["index.ts"],"sourcesContent":["import {v4 as uuidv4} from 'uuid';\n\n/**\n * @description Meeting Webex assistance transcription feature.\n * @exports\n * @class Transcription\n */\nexport default class Transcription {\n webSocketUrl: any;\n sessionID: any;\n members: any;\n memberCSIs: any;\n webSocket: any;\n\n /**\n * @param {string} webSocketUrl\n * @param {sessionID} sessionId\n * @param {object} members\n * @constructor\n * @memberof Transcription\n */\n constructor(webSocketUrl: string, sessionId: any, members: object) {\n this.webSocketUrl = webSocketUrl;\n this.sessionID = sessionId;\n this.members = members;\n this.memberCSIs = {};\n\n const params = '?outboundWireFormat=text&bufferStates=true&aliasHttpStatus=true';\n\n this.webSocket = new WebSocket(`${this.webSocketUrl}${params}`);\n }\n\n /**\n * open the Low Latency Mercury connection\n * An event parameter will be send to the callback.\n *\n * @param {string} token\n * @param {string} sessionID\n * @returns {void}\n */\n connect(token: string) {\n this.webSocket.onopen = () => {\n this.webSocket.send(\n JSON.stringify({\n id: uuidv4(),\n type: 'authorization',\n data: {token: `Bearer ${token}`},\n trackingId: `webex-js-sdk_${this.sessionID}${Date.now.toString()}`,\n })\n );\n };\n }\n\n /**\n * Sets callback to invoke when the web socket connection is closed.\n *\n * @param {Function} callback\n * @returns {void}\n */\n onCloseSocket(callback: any) {\n if (callback) {\n this.webSocket.onclose = (event) => {\n callback(event);\n };\n }\n }\n\n /**\n * Sets callback to invoke when a web socket connection error occurs.\n * An event parameter will be send to the callback.\n *\n * @param {Function} callback\n * @returns {void}\n */\n onErrorSocket(callback: any) {\n if (callback) {\n this.webSocket.onerror = (event) => {\n callback(event);\n };\n }\n }\n\n /**\n * Get current speaker from the given csis payload and update the global csis map\n *\n * @private\n * @param {object} csis\n * @returns {object}\n */\n private getSpeaker(csis: any) {\n for (const csi of csis) {\n const member = this.memberCSIs[csi];\n\n if (member) {\n return member;\n }\n }\n\n return Object.values(this.members.membersCollection.members).find((member: any) => {\n const memberCSIs = member.participant.status.csis;\n let selfIsSpeaking = false;\n\n for (const csi of csis) {\n if (memberCSIs.includes(csi)) {\n this.memberCSIs[csi] = member;\n selfIsSpeaking = true;\n break;\n }\n }\n\n return selfIsSpeaking;\n });\n }\n\n /**\n * Sends transcription data to given callback as it arrives.\n *\n * @param {Function} callback\n * @returns {void}\n */\n subscribe(callback: any) {\n let data;\n let csis;\n let speaker;\n let transcription;\n\n this.webSocket.onmessage = (event) => {\n data = JSON.parse(event.data);\n csis = data.data?.voiceaPayload?.csis || [];\n speaker = this.getSpeaker(csis);\n transcription = data.data?.voiceaPayload?.data || '';\n\n this.webSocket.send(JSON.stringify({messageID: data.id, type: 'ack'}));\n\n if (transcription) {\n callback({\n id: data.data?.voiceaPayload?.transcript_id,\n personID: speaker?.id,\n transcription,\n timestamp: data.timestamp,\n type: data?.data?.voiceaPayload?.type,\n });\n }\n };\n }\n\n /**\n * Close the LLM web socket connection\n * @returns {void}\n */\n closeSocket() {\n this.webSocket.close();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAkC;AAAA;AAAA;AAElC;AACA;AACA;AACA;AACA;AAJA,IAKqBA,aAAa;EAOhC;AACF;AACA;AACA;AACA;AACA;AACA;EACE,uBAAYC,YAAoB,EAAEC,SAAc,EAAEC,OAAe,EAAE;IAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IACjE,IAAI,CAACF,YAAY,GAAGA,YAAY;IAChC,IAAI,CAACG,SAAS,GAAGF,SAAS;IAC1B,IAAI,CAACC,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACE,UAAU,GAAG,CAAC,CAAC;IAEpB,IAAMC,MAAM,GAAG,iEAAiE;IAEhF,IAAI,CAACC,SAAS,GAAG,IAAIC,SAAS,WAAI,IAAI,CAACP,YAAY,SAAGK,MAAM,EAAG;EACjE;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAA;IAAA,OAQA,iBAAQG,KAAa,EAAE;MAAA;MACrB,IAAI,CAACF,SAAS,CAACG,MAAM,GAAG,YAAM;QAC5B,KAAI,CAACH,SAAS,CAACI,IAAI,CACjB,wBAAe;UACbC,EAAE,EAAE,IAAAC,QAAM,GAAE;UACZC,IAAI,EAAE,eAAe;UACrBC,IAAI,EAAE;YAACN,KAAK,mBAAYA,KAAK;UAAE,CAAC;UAChCO,UAAU,yBAAkB,KAAI,CAACZ,SAAS,SAAG,aAASa,QAAQ,EAAE;QAClE,CAAC,CAAC,CACH;MACH,CAAC;IACH;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAA;IAAA,OAMA,uBAAcC,QAAa,EAAE;MAC3B,IAAIA,QAAQ,EAAE;QACZ,IAAI,CAACX,SAAS,CAACY,OAAO,GAAG,UAACC,KAAK,EAAK;UAClCF,QAAQ,CAACE,KAAK,CAAC;QACjB,CAAC;MACH;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAA;IAAA,OAOA,uBAAcF,QAAa,EAAE;MAC3B,IAAIA,QAAQ,EAAE;QACZ,IAAI,CAACX,SAAS,CAACc,OAAO,GAAG,UAACD,KAAK,EAAK;UAClCF,QAAQ,CAACE,KAAK,CAAC;QACjB,CAAC;MACH;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAA;IAAA,OAOA,oBAAmBE,IAAS,EAAE;MAAA;MAAA,2CACVA,IAAI;QAAA;MAAA;QAAtB,oDAAwB;UAAA,IAAbC,GAAG;UACZ,IAAMC,MAAM,GAAG,IAAI,CAACnB,UAAU,CAACkB,GAAG,CAAC;UAEnC,IAAIC,MAAM,EAAE;YACV,OAAOA,MAAM;UACf;QACF;MAAC;QAAA;MAAA;QAAA;MAAA;MAED,OAAO,qBAAc,IAAI,CAACrB,OAAO,CAACsB,iBAAiB,CAACtB,OAAO,CAAC,CAACuB,IAAI,CAAC,UAACF,MAAW,EAAK;QACjF,IAAMnB,UAAU,GAAGmB,MAAM,CAACG,WAAW,CAACC,MAAM,CAACN,IAAI;QACjD,IAAIO,cAAc,GAAG,KAAK;QAAC,4CAETP,IAAI;UAAA;QAAA;UAAtB,uDAAwB;YAAA,IAAbC,GAAG;YACZ,IAAIlB,UAAU,CAACyB,QAAQ,CAACP,GAAG,CAAC,EAAE;cAC5B,MAAI,CAAClB,UAAU,CAACkB,GAAG,CAAC,GAAGC,MAAM;cAC7BK,cAAc,GAAG,IAAI;cACrB;YACF;UACF;QAAC;UAAA;QAAA;UAAA;QAAA;QAED,OAAOA,cAAc;MACvB,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAA;IAAA,OAMA,mBAAUX,QAAa,EAAE;MAAA;MACvB,IAAIH,IAAI;MACR,IAAIO,IAAI;MACR,IAAIS,OAAO;MACX,IAAIC,aAAa;MAEjB,IAAI,CAACzB,SAAS,CAAC0B,SAAS,GAAG,UAACb,KAAK,EAAK;QAAA;QACpCL,IAAI,GAAGmB,IAAI,CAACC,KAAK,CAACf,KAAK,CAACL,IAAI,CAAC;QAC7BO,IAAI,GAAG,eAAAP,IAAI,CAACA,IAAI,wEAAT,WAAWqB,aAAa,0DAAxB,sBAA0Bd,IAAI,KAAI,EAAE;QAC3CS,OAAO,GAAG,MAAI,CAACM,UAAU,CAACf,IAAI,CAAC;QAC/BU,aAAa,GAAG,gBAAAjB,IAAI,CAACA,IAAI,yEAAT,YAAWqB,aAAa,0DAAxB,sBAA0BrB,IAAI,KAAI,EAAE;QAEpD,MAAI,CAACR,SAAS,CAACI,IAAI,CAAC,wBAAe;UAAC2B,SAAS,EAAEvB,IAAI,CAACH,EAAE;UAAEE,IAAI,EAAE;QAAK,CAAC,CAAC,CAAC;QAEtE,IAAIkB,aAAa,EAAE;UAAA;UACjBd,QAAQ,CAAC;YACPN,EAAE,iBAAEG,IAAI,CAACA,IAAI,yEAAT,YAAWqB,aAAa,0DAAxB,sBAA0BG,aAAa;YAC3CC,QAAQ,cAAET,OAAO,6CAAP,SAASnB,EAAE;YACrBoB,aAAa,EAAbA,aAAa;YACbS,SAAS,EAAE1B,IAAI,CAAC0B,SAAS;YACzB3B,IAAI,WAAEC,IAAI,yDAAJ,MAAMA,IAAI,yEAAV,YAAYqB,aAAa,0DAAzB,sBAA2BtB;UACnC,CAAC,CAAC;QACJ;MACF,CAAC;IACH;;IAEA;AACF;AACA;AACA;EAHE;IAAA;IAAA,OAIA,uBAAc;MACZ,IAAI,CAACP,SAAS,CAACmC,KAAK,EAAE;IACxB;EAAC;EAAA;AAAA;AAAA"}
@@ -48,7 +48,7 @@ Install tooling dependencies.
48
48
  npm install
49
49
  ```
50
50
 
51
- *Build issues?* See [BUILD-ISSUES.md](https://github.com/webex/webex-js-sdk/blob/master/BUILD-ISSUES.md) for help.
51
+ _Build issues?_ See [BUILD-ISSUES.md](https://github.com/webex/webex-js-sdk/blob/master/BUILD-ISSUES.md) for help.
52
52
 
53
53
  ## Contribute to the `plugin-meetings` branch
54
54
 
@@ -93,12 +93,14 @@ yarn run build
93
93
  ```
94
94
 
95
95
  > Individual packages containing samples can usually be run this way:
96
+ >
96
97
  > ```
97
98
  > yarn run serve:package --env.package @webex/plugin-meetings
99
+ > ```
98
100
 
99
101
  > ```
100
102
  > However, `webex` does not get compiled properly for `plugin-meetings` using this method, so do the following instead.
101
-
103
+ > ```
102
104
 
103
105
  ```bash
104
106
  # Run the "sample app" sample.
@@ -107,8 +109,8 @@ yarn run samples:meetings
107
109
  ```
108
110
 
109
111
  - Visit https://localhost:8000/
110
- - Copy/paste **Your Personal Access Token** from [Cisco Webex for Developers](https://developer.webex.com/docs/api/getting-started) and click *connect*.
111
- - Use the **Dialer** to *create* a Meeting object, *join* it, and *addMedia*, like video and audio.
112
+ - Copy/paste **Your Personal Access Token** from [Cisco Webex for Developers](https://developer.webex.com/docs/api/getting-started) and click _connect_.
113
+ - Use the **Dialer** to _create_ a Meeting object, _join_ it, and _addMedia_, like video and audio.
112
114
 
113
115
  > This sample does not join a meeting in one click on purpose. It is meant to demonstrate the different commands available, and their sequence, to developers. Other samples will be created in the future.
114
116
  >
@@ -124,7 +126,6 @@ yarn run samples:meetings
124
126
 
125
127
  Use `yarn run distsrc` to point each package's `main` entry at the raw src and let `babel` compile on the fly.
126
128
 
127
-
128
129
  ```bash
129
130
  # Point all package.json files to the src directory instead of the dist directory.
130
131
  yarn run distsrc
@@ -156,7 +157,7 @@ yarn run srcdist
156
157
 
157
158
  The SDK enforces relatively strict commit messages to version its packages and keep language similar.
158
159
 
159
- Here is an example committing a new feature. Notice the *package name* in parentheses.
160
+ Here is an example committing a new feature. Notice the _package name_ in parentheses.
160
161
 
161
162
  ```bash
162
163
  git commit -a -m 'feat(plugin-meetings): add ability to join a meeting'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/plugin-meetings",
3
- "version": "3.0.0-beta.2",
3
+ "version": "3.0.0-beta.20",
4
4
  "description": "",
5
5
  "license": "Cisco EULA (https://www.cisco.com/c/en/us/products/end-user-license-agreement.html)",
6
6
  "contributors": [
@@ -12,6 +12,7 @@
12
12
  "Taymoor Khan <taykhan@cisco.com>"
13
13
  ],
14
14
  "main": "dist/index.js",
15
+ "types": "types/index.d.ts",
15
16
  "devMain": "src/index.js",
16
17
  "repository": {
17
18
  "type": "git",
@@ -27,13 +28,16 @@
27
28
  "envify"
28
29
  ]
29
30
  },
31
+ "scripts": {
32
+ "build": "yarn run -T tsc --declaration true --declarationDir ./types"
33
+ },
30
34
  "devDependencies": {
31
- "@webex/plugin-meetings": "3.0.0-beta.2",
32
- "@webex/test-helper-chai": "3.0.0-beta.2",
33
- "@webex/test-helper-mocha": "3.0.0-beta.2",
34
- "@webex/test-helper-mock-webex": "3.0.0-beta.2",
35
- "@webex/test-helper-retry": "3.0.0-beta.2",
36
- "@webex/test-helper-test-users": "3.0.0-beta.2",
35
+ "@webex/plugin-meetings": "3.0.0-beta.20",
36
+ "@webex/test-helper-chai": "3.0.0-beta.20",
37
+ "@webex/test-helper-mocha": "3.0.0-beta.20",
38
+ "@webex/test-helper-mock-webex": "3.0.0-beta.20",
39
+ "@webex/test-helper-retry": "3.0.0-beta.20",
40
+ "@webex/test-helper-test-users": "3.0.0-beta.20",
37
41
  "chai": "^4.3.4",
38
42
  "chai-as-promised": "^7.1.1",
39
43
  "jsdom-global": "3.0.2",
@@ -41,18 +45,19 @@
41
45
  "typed-emitter": "^2.1.0"
42
46
  },
43
47
  "dependencies": {
44
- "@webex/common": "3.0.0-beta.2",
45
- "@webex/internal-media-core": "^0.0.16-beta",
46
- "@webex/internal-plugin-conversation": "3.0.0-beta.2",
47
- "@webex/internal-plugin-device": "3.0.0-beta.2",
48
- "@webex/internal-plugin-mercury": "3.0.0-beta.2",
49
- "@webex/internal-plugin-metrics": "3.0.0-beta.2",
50
- "@webex/internal-plugin-support": "3.0.0-beta.2",
51
- "@webex/internal-plugin-user": "3.0.0-beta.2",
52
- "@webex/plugin-people": "3.0.0-beta.2",
53
- "@webex/plugin-rooms": "3.0.0-beta.2",
54
- "@webex/ts-sdp": "^1.0.1",
55
- "@webex/webex-core": "3.0.0-beta.2",
48
+ "@webex/common": "3.0.0-beta.20",
49
+ "@webex/internal-media-core": "1.33.0",
50
+ "@webex/internal-plugin-conversation": "3.0.0-beta.20",
51
+ "@webex/internal-plugin-device": "3.0.0-beta.20",
52
+ "@webex/internal-plugin-llm": "3.0.0-beta.20",
53
+ "@webex/internal-plugin-mercury": "3.0.0-beta.20",
54
+ "@webex/internal-plugin-metrics": "3.0.0-beta.20",
55
+ "@webex/internal-plugin-support": "3.0.0-beta.20",
56
+ "@webex/internal-plugin-user": "3.0.0-beta.20",
57
+ "@webex/plugin-people": "3.0.0-beta.20",
58
+ "@webex/plugin-rooms": "3.0.0-beta.20",
59
+ "@webex/webex-core": "3.0.0-beta.20",
60
+ "ampersand-collection": "^2.0.2",
56
61
  "bowser": "^2.11.0",
57
62
  "btoa": "^1.2.1",
58
63
  "dotenv": "^4.0.0",
@@ -62,6 +67,6 @@
62
67
  "lodash": "^4.17.21",
63
68
  "sdp-transform": "^2.12.0",
64
69
  "uuid": "^3.3.2",
65
- "webrtc-adapter": "^7.7.0"
70
+ "webrtc-adapter": "^8.1.2"
66
71
  }
67
72
  }
@@ -0,0 +1,190 @@
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
+ breakout.join();
45
+
46
+ // Leave a breakout
47
+ // This will cause the participant to return to the main session
48
+ breakouts.currentBreakoutSession.leave();
49
+
50
+ // Ask for help when in a breakout session. 10 second cooldown.
51
+ breakout.currentBreakoutSession.askForHelp();
52
+ ```
53
+
54
+ #### Members
55
+
56
+ Each breakout session has members. Members represent other entities within the meeting.
57
+ The current breakout session members are accessed via the meeting object i.e. they will automatically
58
+ be updated when the user moves between sessions.
59
+
60
+ To see which members are in other sessions, you can access them via the breakout model. The Members
61
+ class is the same as that of the main meeting.
62
+
63
+ ```javascript
64
+ breakout = breakouts.breakouts.models[0];
65
+ breakout.members;
66
+ ```
67
+
68
+ #### breakouts events
69
+
70
+ ```javascript
71
+ // When the breakouts in the breakouts collection changes. This includes updates to session members
72
+ on('meeting:breakouts:update', (breakouts) => {});
73
+
74
+ // When the breakout sessions end this event will be fired
75
+ on('meeting:breakouts:closing', () => {});
76
+
77
+ // When the host sends a message to the breakout this event will fire
78
+ on('meeting:breakouts:message', {senderUserId, sentTime, message, sessionId});
79
+ ```
80
+
81
+ When breakouts are started there are several possibilities:
82
+
83
+ 1. The attendee is forced to join a session
84
+ 2. The attendee is assigned to a session, but can join when they feel like it
85
+ 3. The attendee is not assigned to a session, and can choose which session they want to join
86
+
87
+ ```javascript
88
+ breakout.assigned; // Assigned to a session, but not in it yet
89
+ breakout.assignedCurrent; // Forced to join a session
90
+ breakout.active; // The session exists
91
+ breakout.allowed; // The user is allowed to join the session
92
+ breakout.requested; // The user has been requested to join the session
93
+ ```
94
+
95
+ The above attributes of the breakout sessions, combined with the `meeting:breakouts:update` event allow you to determine which situation you are in.
96
+
97
+ 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.
98
+
99
+ ### Host functionality
100
+
101
+ The following are methods available to a hosts of a meeting.
102
+
103
+ note: None of these are currently implemented
104
+
105
+ ```javascript
106
+
107
+ // Move a participant to breakout
108
+ breakout.move(participant)
109
+
110
+ // Assign a particpant to a breakout
111
+ // Not sure whether there is any difference from move
112
+ breakout.assign(participant)
113
+
114
+ // Remove someone from a breakout session
115
+ // This returns them to the main session
116
+ breakout.remove(participant)
117
+
118
+ // Deletes a breakout session
119
+ // This can only be done when breakouts are inactive
120
+ breakout.delete()
121
+
122
+ // Create a breakout session
123
+ breakouts.create(sessionName)
124
+
125
+ // Rename an existing breakout session
126
+ breakout.rename(newSessionName)
127
+
128
+ // Start breakout sessions
129
+ breakouts.start()
130
+
131
+ // End breakout sessions
132
+ breakouts.end()
133
+
134
+ // Enable breakout sessions
135
+ breakouts.enable()
136
+
137
+ // Disable breakout sessions
138
+ breakouts.disable()
139
+
140
+ // Send message asking all participants to return to the main session
141
+ breakouts.askAllToReturn()
142
+
143
+ // Send a message to a breakout session
144
+ // You can determine which participant types receive the message
145
+ breakout.broadcast(message, {participants: boolean, cohosts: boolean, presenters: boolean})
146
+
147
+ // Send a message to All breakout sessions
148
+ // You can determine which participant types receive the message
149
+ breakouts.broadcast(message, {participants: boolean, cohosts: boolean, presenters: boolean})
150
+
151
+ // When breakouts are active you can cancel the automatic end of all sessions by calling this
152
+ // method. It cannot be restarted, only manually ending breakouts is possible after calling this
153
+ breakouts.cancelAutomaticEnd()
154
+
155
+ IBreakoutConfig {
156
+ /*
157
+ Number of sessions to count down before returning users to main session. Seconds. Default 60. 0 means off
158
+ */
159
+ countdownTimer: Number,
160
+ /*
161
+ Whether attendees are allowed to return to the main meeting
162
+ */
163
+ allowReturntoMainMeeting: Boolean,
164
+ /*
165
+ Whether attendees are allowed to join later
166
+ */
167
+ allowJoinLater: Boolean,
168
+ /*
169
+ The timeout after which breakouts are automatically ended. Seconds. Default 1800 (30 minutes) Miniumum 5 minutes.
170
+ */
171
+ automaticallyEndBreakoutsAfter: Number,
172
+ /*
173
+ How participants are assigned to breakouts.
174
+ auto -> participants are automatically placed in sessions
175
+ */
176
+ assignmentMethod: 'auto' | 'manual' | 'choose'
177
+ }
178
+
179
+ // Configure settings on breakouts
180
+ breakouts.configure(config)
181
+
182
+ // set whether anyone can join the breakout or whether it is just assigned participants that can join
183
+ breakout.setOpen(isOpen)
184
+
185
+ // When the members change for a given breakout
186
+ on('meeting:breakout:members:update', ({sessionId, members}) => {
187
+
188
+ })
189
+
190
+ ```
@@ -0,0 +1,110 @@
1
+ /*!
2
+ * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+
5
+ import {WebexPlugin} from '@webex/webex-core';
6
+
7
+ import {HTTP_VERBS, MEETINGS} from '../constants';
8
+ import LocusInfo from '../locus-info';
9
+ import Members from '../members';
10
+
11
+ /**
12
+ * @class
13
+ */
14
+ const Breakout = WebexPlugin.extend({
15
+ idAttribute: 'sessionId',
16
+
17
+ namespace: MEETINGS,
18
+
19
+ props: {
20
+ active: ['boolean', false, false], // this session is active
21
+ allowed: ['boolean', false, false], // allowed to join this session
22
+ assigned: ['boolean', false, false], // assigned to this session, but not necessarily joined yet
23
+ assignedCurrent: ['boolean', false, false], // assigned AND current session
24
+ requested: ['boolean', false, false], // requested by the host to join this session
25
+ current: ['boolean', false, false], // the current joined session
26
+ name: 'string',
27
+ sessionId: 'string',
28
+ sessionType: 'string',
29
+ groupId: 'string',
30
+ url: 'string', // where to send requests to
31
+ },
32
+
33
+ derived: {
34
+ isMain: {
35
+ deps: ['sessionType'],
36
+ /**
37
+ * If the breakout has no name, assume it is the main session
38
+ * @returns {boolean}
39
+ */
40
+ fn() {
41
+ return this.sessionType === 'MAIN';
42
+ },
43
+ },
44
+ },
45
+
46
+ initialize() {
47
+ this.members = new Members({}, {parent: this.webex});
48
+ },
49
+
50
+ /**
51
+ * Joins the breakout session
52
+ * @returns {Promise}
53
+ */
54
+ join() {
55
+ return this.request({
56
+ method: HTTP_VERBS.POST,
57
+ uri: `${this.url}/move`,
58
+ body: {
59
+ groupId: this.groupId,
60
+ sessionId: this.sessionId,
61
+ },
62
+ });
63
+ },
64
+
65
+ /**
66
+ * Leaves the breakout session to return to the main session
67
+ * @returns {Promise}
68
+ * @throws {Error} if an attempt is made to leave the main session or if the main session cannot be found
69
+ */
70
+ leave() {
71
+ if (this.isMain) {
72
+ throw new Error('Cannot leave the main session');
73
+ }
74
+
75
+ const mainSession = this.parent.breakouts.filter((breakout) => breakout.isMain)[0];
76
+
77
+ if (!mainSession) {
78
+ throw new Error('Cannot leave, no main session found');
79
+ }
80
+
81
+ return mainSession.join();
82
+ },
83
+
84
+ /**
85
+ * Sends a help request for the current breakout
86
+ * @returns {Promise}
87
+ */
88
+ askForHelp() {
89
+ return this.request({
90
+ method: HTTP_VERBS.POST,
91
+ uri: `${this.url}/help`,
92
+ body: {
93
+ groupId: this.groupId,
94
+ sessionId: this.sessionId,
95
+ },
96
+ });
97
+ },
98
+
99
+ /**
100
+ * Parses the participants from the locus object
101
+ * @param locus Locus object
102
+ * @returns {void}
103
+ */
104
+
105
+ parseRoster(locus) {
106
+ this.members.locusParticipantsUpdate(locus);
107
+ },
108
+ });
109
+
110
+ 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;