@webex/plugin-meetings 3.0.0-beta.42 → 3.0.0-beta.421

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 (398) hide show
  1. package/README.md +58 -8
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +49 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +342 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +94 -15
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/events.js +45 -0
  11. package/dist/breakouts/events.js.map +1 -0
  12. package/dist/breakouts/index.js +625 -123
  13. package/dist/breakouts/index.js.map +1 -1
  14. package/dist/breakouts/utils.js +27 -8
  15. package/dist/breakouts/utils.js.map +1 -1
  16. package/dist/common/errors/no-meeting-info.js +51 -0
  17. package/dist/common/errors/no-meeting-info.js.map +1 -0
  18. package/dist/common/errors/reclaim-host-role-errors.js +158 -0
  19. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  20. package/dist/common/errors/webex-errors.js +48 -7
  21. package/dist/common/errors/webex-errors.js.map +1 -1
  22. package/dist/common/logs/logger-proxy.js +1 -1
  23. package/dist/common/logs/logger-proxy.js.map +1 -1
  24. package/dist/common/logs/request.js +5 -1
  25. package/dist/common/logs/request.js.map +1 -1
  26. package/dist/common/queue.js +24 -9
  27. package/dist/common/queue.js.map +1 -1
  28. package/dist/config.js +6 -10
  29. package/dist/config.js.map +1 -1
  30. package/dist/constants.js +247 -34
  31. package/dist/constants.js.map +1 -1
  32. package/dist/controls-options-manager/enums.js +14 -2
  33. package/dist/controls-options-manager/enums.js.map +1 -1
  34. package/dist/controls-options-manager/index.js +109 -15
  35. package/dist/controls-options-manager/index.js.map +1 -1
  36. package/dist/controls-options-manager/types.js +7 -0
  37. package/dist/controls-options-manager/types.js.map +1 -0
  38. package/dist/controls-options-manager/util.js +309 -18
  39. package/dist/controls-options-manager/util.js.map +1 -1
  40. package/dist/index.js +116 -2
  41. package/dist/index.js.map +1 -1
  42. package/dist/interceptors/index.js +15 -0
  43. package/dist/interceptors/index.js.map +1 -0
  44. package/dist/interceptors/locusRetry.js +93 -0
  45. package/dist/interceptors/locusRetry.js.map +1 -0
  46. package/dist/interpretation/collection.js +23 -0
  47. package/dist/interpretation/collection.js.map +1 -0
  48. package/dist/interpretation/index.js +380 -0
  49. package/dist/interpretation/index.js.map +1 -0
  50. package/dist/interpretation/siLanguage.js +25 -0
  51. package/dist/interpretation/siLanguage.js.map +1 -0
  52. package/dist/locus-info/controlsUtils.js +91 -2
  53. package/dist/locus-info/controlsUtils.js.map +1 -1
  54. package/dist/locus-info/index.js +386 -62
  55. package/dist/locus-info/index.js.map +1 -1
  56. package/dist/locus-info/infoUtils.js +7 -1
  57. package/dist/locus-info/infoUtils.js.map +1 -1
  58. package/dist/locus-info/mediaSharesUtils.js +71 -1
  59. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  60. package/dist/locus-info/parser.js +249 -72
  61. package/dist/locus-info/parser.js.map +1 -1
  62. package/dist/locus-info/selfUtils.js +89 -14
  63. package/dist/locus-info/selfUtils.js.map +1 -1
  64. package/dist/media/index.js +65 -102
  65. package/dist/media/index.js.map +1 -1
  66. package/dist/media/properties.js +73 -124
  67. package/dist/media/properties.js.map +1 -1
  68. package/dist/mediaQualityMetrics/config.js +135 -330
  69. package/dist/mediaQualityMetrics/config.js.map +1 -1
  70. package/dist/meeting/in-meeting-actions.js +86 -2
  71. package/dist/meeting/in-meeting-actions.js.map +1 -1
  72. package/dist/meeting/index.js +4525 -2997
  73. package/dist/meeting/index.js.map +1 -1
  74. package/dist/meeting/locusMediaRequest.js +292 -0
  75. package/dist/meeting/locusMediaRequest.js.map +1 -0
  76. package/dist/meeting/muteState.js +236 -136
  77. package/dist/meeting/muteState.js.map +1 -1
  78. package/dist/meeting/request.js +189 -155
  79. package/dist/meeting/request.js.map +1 -1
  80. package/dist/meeting/util.js +676 -417
  81. package/dist/meeting/util.js.map +1 -1
  82. package/dist/meeting/voicea-meeting.js +172 -0
  83. package/dist/meeting/voicea-meeting.js.map +1 -0
  84. package/dist/meeting-info/index.js +73 -7
  85. package/dist/meeting-info/index.js.map +1 -1
  86. package/dist/meeting-info/meeting-info-v2.js +201 -57
  87. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  88. package/dist/meeting-info/util.js +8 -7
  89. package/dist/meeting-info/util.js.map +1 -1
  90. package/dist/meeting-info/utilv2.js +44 -40
  91. package/dist/meeting-info/utilv2.js.map +1 -1
  92. package/dist/meetings/collection.js +39 -0
  93. package/dist/meetings/collection.js.map +1 -1
  94. package/dist/meetings/index.js +484 -119
  95. package/dist/meetings/index.js.map +1 -1
  96. package/dist/meetings/meetings.types.js +7 -0
  97. package/dist/meetings/meetings.types.js.map +1 -0
  98. package/dist/meetings/request.js +2 -0
  99. package/dist/meetings/request.js.map +1 -1
  100. package/dist/meetings/util.js +73 -7
  101. package/dist/meetings/util.js.map +1 -1
  102. package/dist/member/index.js +57 -0
  103. package/dist/member/index.js.map +1 -1
  104. package/dist/member/types.js +25 -0
  105. package/dist/member/types.js.map +1 -0
  106. package/dist/member/util.js +132 -25
  107. package/dist/member/util.js.map +1 -1
  108. package/dist/members/collection.js +10 -0
  109. package/dist/members/collection.js.map +1 -1
  110. package/dist/members/index.js +100 -5
  111. package/dist/members/index.js.map +1 -1
  112. package/dist/members/request.js +106 -38
  113. package/dist/members/request.js.map +1 -1
  114. package/dist/members/types.js +15 -0
  115. package/dist/members/types.js.map +1 -0
  116. package/dist/members/util.js +326 -232
  117. package/dist/members/util.js.map +1 -1
  118. package/dist/metrics/constants.js +18 -1
  119. package/dist/metrics/constants.js.map +1 -1
  120. package/dist/metrics/index.js +1 -446
  121. package/dist/metrics/index.js.map +1 -1
  122. package/dist/multistream/mediaRequestManager.js +223 -32
  123. package/dist/multistream/mediaRequestManager.js.map +1 -1
  124. package/dist/multistream/receiveSlot.js +10 -0
  125. package/dist/multistream/receiveSlot.js.map +1 -1
  126. package/dist/multistream/receiveSlotManager.js +20 -4
  127. package/dist/multistream/receiveSlotManager.js.map +1 -1
  128. package/dist/multistream/remoteMedia.js +3 -1
  129. package/dist/multistream/remoteMedia.js.map +1 -1
  130. package/dist/multistream/remoteMediaGroup.js +76 -5
  131. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  132. package/dist/multistream/remoteMediaManager.js +366 -104
  133. package/dist/multistream/remoteMediaManager.js.map +1 -1
  134. package/dist/multistream/sendSlotManager.js +255 -0
  135. package/dist/multistream/sendSlotManager.js.map +1 -0
  136. package/dist/reachability/clusterReachability.js +356 -0
  137. package/dist/reachability/clusterReachability.js.map +1 -0
  138. package/dist/reachability/index.js +263 -390
  139. package/dist/reachability/index.js.map +1 -1
  140. package/dist/reachability/request.js +16 -12
  141. package/dist/reachability/request.js.map +1 -1
  142. package/dist/reachability/util.js +29 -0
  143. package/dist/reachability/util.js.map +1 -0
  144. package/dist/reconnection-manager/index.js +266 -202
  145. package/dist/reconnection-manager/index.js.map +1 -1
  146. package/dist/recording-controller/index.js +21 -2
  147. package/dist/recording-controller/index.js.map +1 -1
  148. package/dist/recording-controller/util.js +9 -8
  149. package/dist/recording-controller/util.js.map +1 -1
  150. package/dist/roap/index.js +66 -28
  151. package/dist/roap/index.js.map +1 -1
  152. package/dist/roap/request.js +50 -66
  153. package/dist/roap/request.js.map +1 -1
  154. package/dist/roap/turnDiscovery.js +407 -79
  155. package/dist/roap/turnDiscovery.js.map +1 -1
  156. package/dist/rtcMetrics/constants.js +12 -0
  157. package/dist/rtcMetrics/constants.js.map +1 -0
  158. package/dist/rtcMetrics/index.js +179 -0
  159. package/dist/rtcMetrics/index.js.map +1 -0
  160. package/dist/statsAnalyzer/index.js +389 -304
  161. package/dist/statsAnalyzer/index.js.map +1 -1
  162. package/dist/statsAnalyzer/mqaUtil.js +296 -156
  163. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  164. package/dist/types/annotation/annotation.types.d.ts +42 -0
  165. package/dist/types/annotation/constants.d.ts +31 -0
  166. package/dist/types/annotation/index.d.ts +117 -0
  167. package/dist/types/breakouts/events.d.ts +8 -0
  168. package/dist/types/breakouts/utils.d.ts +9 -2
  169. package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
  170. package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
  171. package/dist/types/common/errors/webex-errors.d.ts +25 -1
  172. package/dist/types/common/logs/request.d.ts +2 -0
  173. package/dist/types/common/queue.d.ts +9 -7
  174. package/dist/types/config.d.ts +2 -7
  175. package/dist/types/constants.d.ts +204 -32
  176. package/dist/types/controls-options-manager/enums.d.ts +11 -1
  177. package/dist/types/controls-options-manager/index.d.ts +17 -1
  178. package/dist/types/controls-options-manager/types.d.ts +43 -0
  179. package/dist/types/controls-options-manager/util.d.ts +1 -7
  180. package/dist/types/index.d.ts +6 -5
  181. package/dist/types/interceptors/index.d.ts +2 -0
  182. package/dist/types/interceptors/locusRetry.d.ts +27 -0
  183. package/dist/types/interpretation/collection.d.ts +5 -0
  184. package/dist/types/interpretation/index.d.ts +5 -0
  185. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  186. package/dist/types/locus-info/index.d.ts +57 -4
  187. package/dist/types/locus-info/parser.d.ts +66 -6
  188. package/dist/types/media/index.d.ts +2 -0
  189. package/dist/types/media/properties.d.ts +34 -49
  190. package/dist/types/mediaQualityMetrics/config.d.ts +99 -223
  191. package/dist/types/meeting/in-meeting-actions.d.ts +86 -2
  192. package/dist/types/meeting/index.d.ts +631 -505
  193. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  194. package/dist/types/meeting/muteState.d.ts +88 -26
  195. package/dist/types/meeting/request.d.ts +67 -43
  196. package/dist/types/meeting/util.d.ts +118 -1
  197. package/dist/types/meeting/voicea-meeting.d.ts +16 -0
  198. package/dist/types/meeting-info/index.d.ts +13 -1
  199. package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
  200. package/dist/types/meetings/collection.d.ts +17 -0
  201. package/dist/types/meetings/index.d.ts +114 -21
  202. package/dist/types/meetings/meetings.types.d.ts +4 -0
  203. package/dist/types/member/index.d.ts +14 -0
  204. package/dist/types/member/types.d.ts +32 -0
  205. package/dist/types/members/collection.d.ts +5 -0
  206. package/dist/types/members/index.d.ts +35 -2
  207. package/dist/types/members/request.d.ts +73 -9
  208. package/dist/types/members/types.d.ts +25 -0
  209. package/dist/types/members/util.d.ts +214 -1
  210. package/dist/types/metrics/constants.d.ts +17 -0
  211. package/dist/types/metrics/index.d.ts +4 -111
  212. package/dist/types/multistream/mediaRequestManager.d.ts +71 -3
  213. package/dist/types/multistream/receiveSlot.d.ts +7 -3
  214. package/dist/types/multistream/receiveSlotManager.d.ts +7 -0
  215. package/dist/types/multistream/remoteMedia.d.ts +3 -31
  216. package/dist/types/multistream/remoteMediaGroup.d.ts +2 -9
  217. package/dist/types/multistream/remoteMediaManager.d.ts +61 -2
  218. package/dist/types/multistream/sendSlotManager.d.ts +69 -0
  219. package/dist/types/reachability/clusterReachability.d.ts +109 -0
  220. package/dist/types/reachability/index.d.ts +60 -95
  221. package/dist/types/reachability/request.d.ts +3 -1
  222. package/dist/types/reachability/util.d.ts +8 -0
  223. package/dist/types/reconnection-manager/index.d.ts +19 -0
  224. package/dist/types/recording-controller/index.d.ts +15 -1
  225. package/dist/types/recording-controller/util.d.ts +5 -4
  226. package/dist/types/roap/index.d.ts +11 -2
  227. package/dist/types/roap/request.d.ts +9 -8
  228. package/dist/types/roap/turnDiscovery.d.ts +90 -9
  229. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  230. package/dist/types/rtcMetrics/index.d.ts +61 -0
  231. package/dist/types/statsAnalyzer/index.d.ts +34 -12
  232. package/dist/types/statsAnalyzer/mqaUtil.d.ts +28 -4
  233. package/dist/types/webinar/collection.d.ts +16 -0
  234. package/dist/types/webinar/index.d.ts +5 -0
  235. package/dist/webinar/collection.js +44 -0
  236. package/dist/webinar/collection.js.map +1 -0
  237. package/dist/webinar/index.js +69 -0
  238. package/dist/webinar/index.js.map +1 -0
  239. package/package.json +22 -19
  240. package/src/annotation/annotation.types.ts +50 -0
  241. package/src/annotation/constants.ts +36 -0
  242. package/src/annotation/index.ts +328 -0
  243. package/src/breakouts/README.md +27 -6
  244. package/src/breakouts/breakout.ts +67 -9
  245. package/src/breakouts/events.ts +56 -0
  246. package/src/breakouts/index.ts +494 -73
  247. package/src/breakouts/utils.ts +26 -8
  248. package/src/common/errors/no-meeting-info.ts +24 -0
  249. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  250. package/src/common/errors/webex-errors.ts +44 -2
  251. package/src/common/logs/logger-proxy.ts +1 -1
  252. package/src/common/logs/request.ts +5 -1
  253. package/src/common/queue.ts +22 -8
  254. package/src/config.ts +6 -13
  255. package/src/constants.ts +234 -22
  256. package/src/controls-options-manager/enums.ts +12 -0
  257. package/src/controls-options-manager/index.ts +116 -21
  258. package/src/controls-options-manager/types.ts +59 -0
  259. package/src/controls-options-manager/util.ts +294 -14
  260. package/src/index.ts +45 -0
  261. package/src/interceptors/index.ts +3 -0
  262. package/src/interceptors/locusRetry.ts +67 -0
  263. package/src/interpretation/README.md +60 -0
  264. package/src/interpretation/collection.ts +19 -0
  265. package/src/interpretation/index.ts +349 -0
  266. package/src/interpretation/siLanguage.ts +18 -0
  267. package/src/locus-info/controlsUtils.ts +108 -0
  268. package/src/locus-info/index.ts +417 -59
  269. package/src/locus-info/infoUtils.ts +10 -2
  270. package/src/locus-info/mediaSharesUtils.ts +80 -0
  271. package/src/locus-info/parser.ts +258 -47
  272. package/src/locus-info/selfUtils.ts +81 -5
  273. package/src/media/index.ts +100 -108
  274. package/src/media/properties.ts +88 -117
  275. package/src/mediaQualityMetrics/config.ts +103 -238
  276. package/src/meeting/in-meeting-actions.ts +171 -3
  277. package/src/meeting/index.ts +3869 -2574
  278. package/src/meeting/locusMediaRequest.ts +313 -0
  279. package/src/meeting/muteState.ts +237 -136
  280. package/src/meeting/request.ts +173 -122
  281. package/src/meeting/util.ts +690 -395
  282. package/src/meeting/voicea-meeting.ts +122 -0
  283. package/src/meeting-info/index.ts +81 -8
  284. package/src/meeting-info/meeting-info-v2.ts +166 -16
  285. package/src/meeting-info/util.ts +13 -10
  286. package/src/meeting-info/utilv2.ts +47 -37
  287. package/src/meetings/collection.ts +33 -0
  288. package/src/meetings/index.ts +507 -127
  289. package/src/meetings/meetings.types.ts +12 -0
  290. package/src/meetings/request.ts +2 -0
  291. package/src/meetings/util.ts +81 -12
  292. package/src/member/index.ts +57 -0
  293. package/src/member/types.ts +38 -0
  294. package/src/member/util.ts +141 -25
  295. package/src/members/collection.ts +8 -0
  296. package/src/members/index.ts +133 -7
  297. package/src/members/request.ts +97 -17
  298. package/src/members/types.ts +29 -0
  299. package/src/members/util.ts +333 -240
  300. package/src/metrics/constants.ts +17 -0
  301. package/src/metrics/index.ts +1 -469
  302. package/src/multistream/mediaRequestManager.ts +271 -56
  303. package/src/multistream/receiveSlot.ts +11 -4
  304. package/src/multistream/receiveSlotManager.ts +16 -4
  305. package/src/multistream/remoteMedia.ts +5 -3
  306. package/src/multistream/remoteMediaGroup.ts +78 -0
  307. package/src/multistream/remoteMediaManager.ts +248 -45
  308. package/src/multistream/sendSlotManager.ts +198 -0
  309. package/src/reachability/clusterReachability.ts +320 -0
  310. package/src/reachability/index.ts +229 -346
  311. package/src/reachability/request.ts +22 -14
  312. package/src/reachability/util.ts +24 -0
  313. package/src/reconnection-manager/index.ts +128 -97
  314. package/src/recording-controller/index.ts +20 -3
  315. package/src/recording-controller/util.ts +26 -9
  316. package/src/roap/index.ts +76 -25
  317. package/src/roap/request.ts +50 -69
  318. package/src/roap/turnDiscovery.ts +331 -67
  319. package/src/rtcMetrics/constants.ts +3 -0
  320. package/src/rtcMetrics/index.ts +166 -0
  321. package/src/statsAnalyzer/index.ts +496 -419
  322. package/src/statsAnalyzer/mqaUtil.ts +317 -170
  323. package/src/webinar/collection.ts +31 -0
  324. package/src/webinar/index.ts +62 -0
  325. package/test/integration/spec/converged-space-meetings.js +60 -3
  326. package/test/integration/spec/journey.js +321 -262
  327. package/test/integration/spec/space-meeting.js +76 -3
  328. package/test/unit/spec/annotation/index.ts +418 -0
  329. package/test/unit/spec/breakouts/breakout.ts +119 -28
  330. package/test/unit/spec/breakouts/events.ts +89 -0
  331. package/test/unit/spec/breakouts/index.ts +1204 -118
  332. package/test/unit/spec/breakouts/utils.js +27 -2
  333. package/test/unit/spec/common/queue.js +31 -2
  334. package/test/unit/spec/controls-options-manager/index.js +163 -0
  335. package/test/unit/spec/controls-options-manager/util.js +576 -60
  336. package/test/unit/spec/fixture/locus.js +1 -0
  337. package/test/unit/spec/interceptors/locusRetry.ts +131 -0
  338. package/test/unit/spec/interpretation/collection.ts +15 -0
  339. package/test/unit/spec/interpretation/index.ts +625 -0
  340. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  341. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  342. package/test/unit/spec/locus-info/index.js +1372 -37
  343. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  344. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  345. package/test/unit/spec/locus-info/mediaSharesUtils.ts +41 -0
  346. package/test/unit/spec/locus-info/parser.js +116 -35
  347. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  348. package/test/unit/spec/locus-info/selfUtils.js +203 -17
  349. package/test/unit/spec/media/index.ts +178 -81
  350. package/test/unit/spec/media/properties.ts +2 -2
  351. package/test/unit/spec/meeting/in-meeting-actions.ts +85 -3
  352. package/test/unit/spec/meeting/index.js +7775 -2521
  353. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  354. package/test/unit/spec/meeting/muteState.js +549 -207
  355. package/test/unit/spec/meeting/request.js +494 -54
  356. package/test/unit/spec/meeting/utils.js +827 -74
  357. package/test/unit/spec/meeting/voicea-meeting.ts +266 -0
  358. package/test/unit/spec/meeting-info/index.js +300 -0
  359. package/test/unit/spec/meeting-info/meetinginfov2.js +535 -9
  360. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  361. package/test/unit/spec/meetings/collection.js +26 -0
  362. package/test/unit/spec/meetings/index.js +1496 -219
  363. package/test/unit/spec/meetings/utils.js +229 -2
  364. package/test/unit/spec/member/index.js +61 -6
  365. package/test/unit/spec/member/util.js +510 -34
  366. package/test/unit/spec/members/index.js +432 -1
  367. package/test/unit/spec/members/request.js +206 -27
  368. package/test/unit/spec/members/utils.js +210 -0
  369. package/test/unit/spec/metrics/index.js +2 -52
  370. package/test/unit/spec/multistream/mediaRequestManager.ts +782 -114
  371. package/test/unit/spec/multistream/receiveSlot.ts +9 -1
  372. package/test/unit/spec/multistream/receiveSlotManager.ts +11 -3
  373. package/test/unit/spec/multistream/remoteMedia.ts +2 -0
  374. package/test/unit/spec/multistream/remoteMediaGroup.ts +344 -0
  375. package/test/unit/spec/multistream/remoteMediaManager.ts +524 -0
  376. package/test/unit/spec/multistream/sendSlotManager.ts +274 -0
  377. package/test/unit/spec/reachability/clusterReachability.ts +279 -0
  378. package/test/unit/spec/reachability/index.ts +551 -14
  379. package/test/unit/spec/reachability/request.js +18 -8
  380. package/test/unit/spec/reachability/util.ts +40 -0
  381. package/test/unit/spec/reconnection-manager/index.js +171 -11
  382. package/test/unit/spec/recording-controller/index.js +293 -218
  383. package/test/unit/spec/recording-controller/util.js +223 -96
  384. package/test/unit/spec/roap/index.ts +233 -81
  385. package/test/unit/spec/roap/request.ts +100 -62
  386. package/test/unit/spec/roap/turnDiscovery.ts +682 -108
  387. package/test/unit/spec/rtcMetrics/index.ts +122 -0
  388. package/test/unit/spec/stats-analyzer/index.js +1431 -12
  389. package/test/unit/spec/webinar/collection.ts +13 -0
  390. package/test/unit/spec/webinar/index.ts +60 -0
  391. package/test/utils/integrationTestUtils.js +46 -0
  392. package/test/utils/testUtils.js +0 -57
  393. package/test/utils/webex-test-users.js +12 -4
  394. package/dist/metrics/config.js +0 -289
  395. package/dist/metrics/config.js.map +0 -1
  396. package/dist/types/metrics/config.d.ts +0 -169
  397. package/src/index.js +0 -18
  398. package/src/metrics/config.ts +0 -485
@@ -24,6 +24,7 @@ var _constants = require("../constants");
24
24
  var _breakout = _interopRequireDefault(require("./breakout"));
25
25
  var _collection = _interopRequireDefault(require("./collection"));
26
26
  var _request = _interopRequireDefault(require("./request"));
27
+ var _events = _interopRequireDefault(require("./events"));
27
28
  var _utils = require("./utils");
28
29
  function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
29
30
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
@@ -43,6 +44,8 @@ var Breakouts = _webexCore.WebexPlugin.extend({
43
44
  // appears once breakouts start
44
45
  enableBreakoutSession: 'boolean',
45
46
  // appears from the moment you enable breakouts
47
+ hasBreakoutPreAssignments: 'boolean',
48
+ // appears from the moment you enable breakouts
46
49
  groupId: 'string',
47
50
  // appears from the moment you enable breakouts
48
51
  name: 'string',
@@ -60,8 +63,20 @@ var Breakouts = _webexCore.WebexPlugin.extend({
60
63
  locusUrl: 'string',
61
64
  // the current locus url
62
65
  breakoutServiceUrl: 'string',
63
- // the current breakout resouce url
64
- groups: 'array' // appears when create breakouts
66
+ // the current breakout resource url
67
+ mainLocusUrl: 'string',
68
+ // the locus url of the main session
69
+ groups: 'array',
70
+ // appears when create breakouts
71
+ manageGroups: 'array',
72
+ // appears when manage breakouts
73
+ preAssignments: 'array',
74
+ // appears when getPreAssignments info hasBreakoutPreAssignments = true
75
+ editLock: 'object',
76
+ // appears when getBreakout info editlock = true
77
+ intervalID: 'number',
78
+ meetingId: 'string',
79
+ canManageBreakouts: 'boolean' // appear the ability to manage breakouts
65
80
  },
66
81
 
67
82
  children: {
@@ -69,6 +84,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
69
84
  },
70
85
  derived: {
71
86
  isInMainSession: {
87
+ cache: false,
72
88
  deps: ['sessionType'],
73
89
  /**
74
90
  * Returns true if the user is in the main session
@@ -78,19 +94,55 @@ var Breakouts = _webexCore.WebexPlugin.extend({
78
94
  return this.sessionType === _constants.BREAKOUTS.SESSION_TYPES.MAIN;
79
95
  }
80
96
  },
97
+ isActiveBreakout: {
98
+ cache: false,
99
+ // fix issue: sometimes the derived will not change even if the deps changed
100
+ deps: ['sessionType', 'status'],
101
+ /**
102
+ * Returns true if the breakout status is active
103
+ * @returns {boolean}
104
+ */
105
+ fn: function fn() {
106
+ return this.sessionType === _constants.BREAKOUTS.SESSION_TYPES.BREAKOUT && (this.status === _constants.BREAKOUTS.STATUS.OPEN || this.status === _constants.BREAKOUTS.STATUS.CLOSING);
107
+ }
108
+ },
81
109
  breakoutGroupId: {
82
- deps: ['groups'],
110
+ cache: false,
111
+ deps: ['manageGroups'],
83
112
  /**
84
- * Returns the actived group id
113
+ * Returns the active group id
85
114
  * @returns {boolean}
86
115
  */
87
116
  fn: function fn() {
88
- var _this$groups;
89
- if ((_this$groups = this.groups) !== null && _this$groups !== void 0 && _this$groups.length) {
90
- return this.groups[0].id;
117
+ var _this$manageGroups;
118
+ if ((_this$manageGroups = this.manageGroups) !== null && _this$manageGroups !== void 0 && _this$manageGroups.length) {
119
+ return this.manageGroups[0].status !== _constants.BREAKOUTS.STATUS.CLOSED ? this.manageGroups[0].id : '';
91
120
  }
92
121
  return '';
93
122
  }
123
+ },
124
+ breakoutStatus: {
125
+ cache: true,
126
+ deps: ['isInMainSession', 'status', 'groups'],
127
+ /**
128
+ * Returns the breakout status
129
+ * @returns {boolean}
130
+ */
131
+ fn: function fn() {
132
+ var _this$groups, _this$groups$;
133
+ return this.isInMainSession ? (_this$groups = this.groups) === null || _this$groups === void 0 ? void 0 : (_this$groups$ = _this$groups[0]) === null || _this$groups$ === void 0 ? void 0 : _this$groups$.status : this.status;
134
+ }
135
+ },
136
+ shouldQueryPreAssignments: {
137
+ cache: false,
138
+ deps: ['canManageBreakouts', 'enableBreakoutSession', 'hasBreakoutPreAssignments'],
139
+ /**
140
+ * Returns should query preAssignments or not
141
+ * @returns {boolean}
142
+ */
143
+ fn: function fn() {
144
+ return !!(this.canManageBreakouts && this.enableBreakoutSession && this.hasBreakoutPreAssignments);
145
+ }
94
146
  }
95
147
  },
96
148
  /**
@@ -99,20 +151,31 @@ var Breakouts = _webexCore.WebexPlugin.extend({
99
151
  */
100
152
  initialize: function initialize() {
101
153
  var _this = this;
102
- this.listenTo(this, 'change:status', function () {
103
- if (_this.status === _constants.BREAKOUTS.STATUS.CLOSING) {
154
+ this.listenTo(this, 'change:breakoutStatus', function () {
155
+ if (_this.breakoutStatus === _constants.BREAKOUTS.STATUS.CLOSING) {
104
156
  _this.trigger(_constants.BREAKOUTS.EVENTS.BREAKOUTS_CLOSING);
105
157
  }
106
158
  });
159
+ this.listenTo(this, 'change:shouldQueryPreAssignments', function () {
160
+ if (_this.shouldQueryPreAssignments && !_this.preAssignments) {
161
+ _this.queryPreAssignments();
162
+ }
163
+ });
107
164
  this.debouncedQueryRosters = (0, _debounce2.default)(this.queryRosters, 10, {
108
165
  leading: true,
109
166
  trailing: false
110
167
  });
111
- this.listenTo(this.breakouts, 'add', function () {
168
+ this.listenTo(this.breakouts, 'add', function (breakout) {
112
169
  _this.debouncedQueryRosters();
170
+ _this.triggerReturnToMainEvent(breakout);
171
+ });
172
+ this.listenTo(this.breakouts, 'change:requestedLastModifiedTime', function (breakout) {
173
+ _this.triggerReturnToMainEvent(breakout);
113
174
  });
175
+ this.listenToCurrentSessionTypeChange();
114
176
  this.listenToBroadcastMessages();
115
177
  this.listenToBreakoutRosters();
178
+ this.listenToBreakoutHelp();
116
179
  // @ts-ignore
117
180
  this.breakoutRequest = new _request.default({
118
181
  webex: this.webex
@@ -132,9 +195,22 @@ var Breakouts = _webexCore.WebexPlugin.extend({
132
195
  */
133
196
  locusUrlUpdate: function locusUrlUpdate(locusUrl) {
134
197
  this.set('locusUrl', locusUrl);
198
+ var isInMainSession = this.isInMainSession,
199
+ mainLocusUrl = this.mainLocusUrl;
200
+ if (isInMainSession || !mainLocusUrl) {
201
+ this.set('mainLocusUrl', locusUrl);
202
+ }
135
203
  },
136
204
  /**
137
- * Update the current breakout resouce url
205
+ * Update whether self is moderator/cohost or not
206
+ * @param {boolean} canManageBreakouts
207
+ * @returns {void}
208
+ */
209
+ updateCanManageBreakouts: function updateCanManageBreakouts(canManageBreakouts) {
210
+ this.set('canManageBreakouts', canManageBreakouts);
211
+ },
212
+ /**
213
+ * Update the current breakout resource url
138
214
  * @param {string} breakoutServiceUrl
139
215
  * @returns {void}
140
216
  */
@@ -155,7 +231,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
155
231
  }
156
232
  }).then(function (result) {
157
233
  var rosters = result.body.rosters;
158
- rosters.forEach(function (_ref) {
234
+ rosters === null || rosters === void 0 ? void 0 : rosters.forEach(function (_ref) {
159
235
  var locus = _ref.locus;
160
236
  _this2.handleRosterUpdate(locus);
161
237
  });
@@ -178,25 +254,37 @@ var Breakouts = _webexCore.WebexPlugin.extend({
178
254
  }
179
255
  session.parseRoster(locus);
180
256
  },
257
+ /**
258
+ *Sets up listener for currentBreakoutSession sessionType changed
259
+ * @returns {void}
260
+ */
261
+ listenToCurrentSessionTypeChange: function listenToCurrentSessionTypeChange() {
262
+ var _this3 = this;
263
+ this.listenTo(this.currentBreakoutSession, 'change:sessionType', function (currentBreakoutSession, sessionType) {
264
+ if ((0, _utils.isSessionTypeChangedFromSessionToMain)(currentBreakoutSession, sessionType)) {
265
+ _this3.trigger(_constants.BREAKOUTS.EVENTS.LEAVE_BREAKOUT);
266
+ }
267
+ });
268
+ },
181
269
  /**
182
270
  * Sets up listener for broadcast messages sent to the breakout session
183
271
  * @returns {void}
184
272
  */
185
273
  listenToBroadcastMessages: function listenToBroadcastMessages() {
186
- var _this3 = this;
274
+ var _this4 = this;
187
275
  this.listenTo(this.webex.internal.llm, 'event:breakout.message', function (event) {
188
276
  var _event$data = event.data,
189
277
  senderUserId = _event$data.senderUserId,
190
278
  sentTime = _event$data.sentTime,
191
279
  message = _event$data.message;
192
- _this3.trigger(_constants.BREAKOUTS.EVENTS.MESSAGE, {
280
+ _this4.trigger(_constants.BREAKOUTS.EVENTS.MESSAGE, {
193
281
  senderUserId: senderUserId,
194
282
  sentTime: sentTime,
195
283
  message: message,
196
284
  // FIXME: This is only the current sessionId
197
285
  // We'd need to check that the dataChannelUrl is still the same
198
286
  // to guarantee that this message was sent to this session
199
- sessionId: _this3.currentBreakoutSession.sessionId
287
+ sessionId: _this4.currentBreakoutSession.sessionId
200
288
  });
201
289
  });
202
290
  },
@@ -205,12 +293,45 @@ var Breakouts = _webexCore.WebexPlugin.extend({
205
293
  * @returns {void}
206
294
  */
207
295
  listenToBreakoutRosters: function listenToBreakoutRosters() {
208
- var _this4 = this;
296
+ var _this5 = this;
209
297
  this.listenTo(this.webex.internal.mercury, 'event:breakout.roster', function (event) {
210
- _this4.handleRosterUpdate(event.data.locus);
211
- _this4.trigger(_constants.BREAKOUTS.EVENTS.MEMBERS_UPDATE);
298
+ _this5.handleRosterUpdate(event.data.locus);
299
+ _this5.trigger(_constants.BREAKOUTS.EVENTS.MEMBERS_UPDATE);
212
300
  });
213
301
  },
302
+ /**
303
+ * Sets up a listener for ask help notify from mecury
304
+ * @returns {void}
305
+ */
306
+ listenToBreakoutHelp: function listenToBreakoutHelp() {
307
+ var _this6 = this;
308
+ this.listenTo(this.webex.internal.mercury, 'event:breakout.help', function (event) {
309
+ var _event$data2 = event.data,
310
+ participant = _event$data2.participant,
311
+ sessionId = _event$data2.sessionId;
312
+ _this6.trigger(_constants.BREAKOUTS.EVENTS.ASK_FOR_HELP, {
313
+ participant: participant,
314
+ sessionId: sessionId
315
+ });
316
+ });
317
+ },
318
+ /**
319
+ * get current breakout is in progress or not
320
+ * @returns {boolean}
321
+ */
322
+ isBreakoutInProgress: function isBreakoutInProgress() {
323
+ var _this$groups2, _this$groups2$;
324
+ var currentStatus = ((_this$groups2 = this.groups) === null || _this$groups2 === void 0 ? void 0 : (_this$groups2$ = _this$groups2[0]) === null || _this$groups2$ === void 0 ? void 0 : _this$groups2$.status) || this.status;
325
+ return currentStatus === _constants.BREAKOUTS.STATUS.OPEN || currentStatus === _constants.BREAKOUTS.STATUS.CLOSING;
326
+ },
327
+ /**
328
+ * get current breakout is in closing or not
329
+ * @returns {boolean}
330
+ */
331
+ isBreakoutIClosing: function isBreakoutIClosing() {
332
+ var _this$groups3, _this$groups3$;
333
+ return (((_this$groups3 = this.groups) === null || _this$groups3 === void 0 ? void 0 : (_this$groups3$ = _this$groups3[0]) === null || _this$groups3$ === void 0 ? void 0 : _this$groups3$.status) || this.status) === _constants.BREAKOUTS.STATUS.CLOSING;
334
+ },
214
335
  /**
215
336
  * Updates the information about the current breakout
216
337
  * @param {Object} params
@@ -219,6 +340,10 @@ var Breakouts = _webexCore.WebexPlugin.extend({
219
340
  updateBreakout: function updateBreakout(params) {
220
341
  var _this$set;
221
342
  this.set(params);
343
+ // These values are set manually so they are unset when they are not included in params
344
+ this.set('groups', params.groups);
345
+ this.set('startTime', params.startTime);
346
+ this.set('status', params.status);
222
347
  this.set('currentBreakoutSession', (_this$set = {
223
348
  sessionId: params.sessionId,
224
349
  groupId: params.groupId,
@@ -226,8 +351,21 @@ var Breakouts = _webexCore.WebexPlugin.extend({
226
351
  current: true,
227
352
  sessionType: params.sessionType,
228
353
  url: params.url
229
- }, (0, _defineProperty2.default)(_this$set, _constants.BREAKOUTS.SESSION_STATES.ACTIVE, false), (0, _defineProperty2.default)(_this$set, _constants.BREAKOUTS.SESSION_STATES.ALLOWED, false), (0, _defineProperty2.default)(_this$set, _constants.BREAKOUTS.SESSION_STATES.ALLOWED, false), (0, _defineProperty2.default)(_this$set, _constants.BREAKOUTS.SESSION_STATES.ASSIGNED_CURRENT, false), (0, _defineProperty2.default)(_this$set, _constants.BREAKOUTS.SESSION_STATES.REQUESTED, false), _this$set));
230
- this.set('enableBreakoutSession', params.enableBreakoutSession);
354
+ }, (0, _defineProperty2.default)(_this$set, _constants.BREAKOUTS.SESSION_STATES.ACTIVE, false), (0, _defineProperty2.default)(_this$set, _constants.BREAKOUTS.SESSION_STATES.ALLOWED, false), (0, _defineProperty2.default)(_this$set, _constants.BREAKOUTS.SESSION_STATES.ASSIGNED, false), (0, _defineProperty2.default)(_this$set, _constants.BREAKOUTS.SESSION_STATES.ASSIGNED_CURRENT, false), (0, _defineProperty2.default)(_this$set, _constants.BREAKOUTS.SESSION_STATES.REQUESTED, false), _this$set));
355
+ if (!this.isBreakoutInProgress()) {
356
+ this.clearBreakouts();
357
+ }
358
+ if (this.currentBreakoutSession.previous('sessionId') !== this.currentBreakoutSession.sessionId || this.currentBreakoutSession.previous('groupId') !== this.currentBreakoutSession.groupId) {
359
+ // should report joined session changed
360
+ var meeting = this.webex.meetings.getMeetingByType(_constants._ID_, this.meetingId);
361
+ _events.default.onBreakoutJoinResponse({
362
+ currentSession: this.currentBreakoutSession,
363
+ meeting: meeting,
364
+ breakoutMoveId: params.breakoutMoveId
365
+ },
366
+ // @ts-ignore
367
+ this.webex.internal.newMetrics.submitClientEvent.bind(this.webex.internal.newMetrics));
368
+ }
231
369
  },
232
370
  /**
233
371
  * Updates the information about available breakouts
@@ -235,8 +373,14 @@ var Breakouts = _webexCore.WebexPlugin.extend({
235
373
  * @returns {void}
236
374
  */
237
375
  updateBreakoutSessions: function updateBreakoutSessions(payload) {
238
- var _this5 = this;
376
+ var _this7 = this;
239
377
  var breakouts = {};
378
+ if (this.isBreakoutIClosing()) {
379
+ // fix issue: don't clear/update breakouts collection when in closing since locus DTO will send undefined or
380
+ // only the MAIN session info here, if just update it, will miss the breakout roster info during
381
+ // count down to end breakouts
382
+ return;
383
+ }
240
384
  if (payload.breakoutSessions) {
241
385
  (0, _forEach2.default)(_constants.BREAKOUTS.SESSION_STATES, function (state) {
242
386
  (0, _forEach2.default)(payload.breakoutSessions[state], function (breakout) {
@@ -250,15 +394,27 @@ var Breakouts = _webexCore.WebexPlugin.extend({
250
394
  breakouts[sessionId][_constants.BREAKOUTS.SESSION_STATES.REQUESTED] = false;
251
395
  }
252
396
  breakouts[sessionId][state] = true;
397
+ if (state === _constants.BREAKOUTS.SESSION_STATES.REQUESTED) {
398
+ breakouts[sessionId].requestedLastModifiedTime = breakout.modifiedAt;
399
+ }
253
400
  });
254
401
  });
255
402
  }
256
403
  (0, _forEach2.default)(breakouts, function (breakout) {
257
404
  // eslint-disable-next-line no-param-reassign
258
- breakout.url = _this5.url;
405
+ breakout.url = _this7.url;
259
406
  });
260
407
  this.breakouts.set((0, _values.default)(breakouts));
261
408
  },
409
+ /**
410
+ * clear breakouts collection
411
+ * @returns {void}
412
+ */
413
+ clearBreakouts: function clearBreakouts() {
414
+ if (this.breakouts.length > 0) {
415
+ this.breakouts.reset();
416
+ }
417
+ },
262
418
  /**
263
419
  * get main session
264
420
  * @returns {Breakout}
@@ -329,39 +485,39 @@ var Breakouts = _webexCore.WebexPlugin.extend({
329
485
  return _promise.default.reject(new Error("enableBreakouts: the breakoutServiceUrl is empty"));
330
486
  },
331
487
  /**
332
- * Make the meeting enbale or disable breakout session
488
+ * Make the meeting enable or disable breakout session
333
489
  * @param {boolean} enable
334
490
  * @returns {Promise}
335
491
  */
336
492
  toggleBreakout: function toggleBreakout(enable) {
337
- var _this6 = this;
493
+ var _this8 = this;
338
494
  return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
339
495
  var info;
340
496
  return _regenerator.default.wrap(function _callee$(_context) {
341
497
  while (1) switch (_context.prev = _context.next) {
342
498
  case 0:
343
- if (!(_this6.enableBreakoutSession === undefined)) {
499
+ if (!(_this8.enableBreakoutSession === undefined)) {
344
500
  _context.next = 10;
345
501
  break;
346
502
  }
347
503
  _context.next = 3;
348
- return _this6.enableBreakouts();
504
+ return _this8.enableBreakouts();
349
505
  case 3:
350
506
  info = _context.sent;
507
+ // first time enable, set the initial data
508
+ _this8.updateBreakout(info === null || info === void 0 ? void 0 : info.body);
351
509
  if (enable) {
352
510
  _context.next = 8;
353
511
  break;
354
512
  }
355
- // if enable is false, updateBreakout set the param then set enableBreakoutSession as false
356
- _this6.updateBreakout(info.body);
357
513
  _context.next = 8;
358
- return _this6.doToggleBreakout(enable);
514
+ return _this8.doToggleBreakout(enable);
359
515
  case 8:
360
516
  _context.next = 12;
361
517
  break;
362
518
  case 10:
363
519
  _context.next = 12;
364
- return _this6.doToggleBreakout(enable);
520
+ return _this8.doToggleBreakout(enable);
365
521
  case 12:
366
522
  case "end":
367
523
  return _context.stop();
@@ -375,47 +531,68 @@ var Breakouts = _webexCore.WebexPlugin.extend({
375
531
  * @returns {Promise}
376
532
  */
377
533
  doToggleBreakout: function doToggleBreakout(enable) {
534
+ var body = _objectSpread(_objectSpread({}, this.editLock && !!this.editLock.token ? {
535
+ editlock: {
536
+ token: this.editLock.token
537
+ }
538
+ } : {}), {
539
+ enableBreakoutSession: enable
540
+ });
541
+
378
542
  // @ts-ignore
379
543
  return this.webex.request({
380
544
  method: _constants.HTTP_VERBS.PUT,
381
545
  uri: this.url,
382
- body: {
383
- enableBreakoutSession: enable
384
- }
546
+ body: body
385
547
  });
386
548
  },
549
+ /**
550
+ * set groups to manageGroups prop
551
+ * @param {Object} breakoutInfo -- breakout groups
552
+ * @returns {void}
553
+ */
554
+ _setManageGroups: function _setManageGroups(breakoutInfo) {
555
+ var _breakoutInfo$body;
556
+ if (breakoutInfo !== null && breakoutInfo !== void 0 && (_breakoutInfo$body = breakoutInfo.body) !== null && _breakoutInfo$body !== void 0 && _breakoutInfo$body.groups) {
557
+ this.set('manageGroups', breakoutInfo.body.groups);
558
+ }
559
+ },
387
560
  /**
388
561
  * Create new breakout sessions
389
- * @param {object} sessions -- breakout session group
562
+ * @param {object} params -- breakout session group
390
563
  * @returns {Promise}
391
564
  */
392
- create: function create(sessions) {
393
- var _this7 = this;
565
+ create: function create(params) {
566
+ var _this9 = this;
394
567
  return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
395
- var _breakInfo$body;
396
- var breakInfo;
568
+ var payload, body, breakoutInfo;
397
569
  return _regenerator.default.wrap(function _callee2$(_context2) {
398
570
  while (1) switch (_context2.prev = _context2.next) {
399
571
  case 0:
400
- _context2.next = 2;
401
- return _this7.webex.request({
402
- method: _constants.HTTP_VERBS.PUT,
403
- uri: _this7.url,
404
- body: {
405
- groups: [{
406
- sessions: sessions
407
- }]
572
+ payload = _objectSpread({}, params);
573
+ body = _objectSpread(_objectSpread({}, _this9.editLock && !!_this9.editLock.token ? {
574
+ editlock: {
575
+ token: _this9.editLock.token
408
576
  }
577
+ } : {}), {
578
+ groups: [payload]
579
+ }); // @ts-ignore
580
+ _context2.next = 4;
581
+ return _this9.webex.request({
582
+ method: _constants.HTTP_VERBS.PUT,
583
+ uri: _this9.url,
584
+ body: body
409
585
  }).catch(function (error) {
410
- return _promise.default.reject((0, _utils.boServiceErrorHandler)(error, 'Breakouts#create --> Edit lock token mismatch'));
586
+ return _promise.default.reject((0, _utils.boServiceErrorHandler)(error, 'Breakouts#create'));
411
587
  });
412
- case 2:
413
- breakInfo = _context2.sent;
414
- if ((_breakInfo$body = breakInfo.body) !== null && _breakInfo$body !== void 0 && _breakInfo$body.groups) {
415
- _this7.set('groups', breakInfo.body.groups);
416
- }
417
- return _context2.abrupt("return", _promise.default.resolve(breakInfo));
418
- case 5:
588
+ case 4:
589
+ breakoutInfo = _context2.sent;
590
+ _this9._setManageGroups(breakoutInfo);
591
+
592
+ // clear edit lock info after save breakout session info
593
+ _this9._clearEditLockInfo();
594
+ return _context2.abrupt("return", breakoutInfo);
595
+ case 8:
419
596
  case "end":
420
597
  return _context2.stop();
421
598
  }
@@ -427,32 +604,34 @@ var Breakouts = _webexCore.WebexPlugin.extend({
427
604
  * @returns {Promise}
428
605
  */
429
606
  clearSessions: function clearSessions() {
430
- var _this8 = this;
607
+ var _this10 = this;
431
608
  return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
432
- var _breakInfo$body2;
433
- var breakInfo;
609
+ var body, breakoutInfo;
434
610
  return _regenerator.default.wrap(function _callee3$(_context3) {
435
611
  while (1) switch (_context3.prev = _context3.next) {
436
612
  case 0:
437
- _context3.next = 2;
438
- return _this8.webex.request({
439
- method: _constants.HTTP_VERBS.PUT,
440
- uri: _this8.url,
441
- body: {
442
- groups: [{
443
- action: _constants.BREAKOUTS.ACTION.DELETE
444
- }]
613
+ body = _objectSpread(_objectSpread({}, _this10.editLock && !!_this10.editLock.token ? {
614
+ editlock: {
615
+ token: _this10.editLock.token
445
616
  }
617
+ } : {}), {
618
+ groups: [{
619
+ action: _constants.BREAKOUTS.ACTION.DELETE
620
+ }]
621
+ }); // @ts-ignore
622
+ _context3.next = 3;
623
+ return _this10.webex.request({
624
+ method: _constants.HTTP_VERBS.PUT,
625
+ uri: _this10.url,
626
+ body: body
446
627
  }).catch(function (error) {
447
- return _promise.default.reject((0, _utils.boServiceErrorHandler)(error, 'Breakouts#clearSessions --> Edit lock token mismatch'));
628
+ return _promise.default.reject((0, _utils.boServiceErrorHandler)(error, 'Breakouts#clearSessions'));
448
629
  });
449
- case 2:
450
- breakInfo = _context3.sent;
451
- if ((_breakInfo$body2 = breakInfo.body) !== null && _breakInfo$body2 !== void 0 && _breakInfo$body2.groups) {
452
- _this8.set('groups', breakInfo.body.groups);
453
- }
454
- return _context3.abrupt("return", _promise.default.resolve(breakInfo));
455
- case 5:
630
+ case 3:
631
+ breakoutInfo = _context3.sent;
632
+ _this10._setManageGroups(breakoutInfo);
633
+ return _context3.abrupt("return", breakoutInfo);
634
+ case 6:
456
635
  case "end":
457
636
  return _context3.stop();
458
637
  }
@@ -465,23 +644,47 @@ var Breakouts = _webexCore.WebexPlugin.extend({
465
644
  * @returns {Promise}
466
645
  */
467
646
  start: function start() {
468
- var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
469
- var action = _constants.BREAKOUTS.ACTION.START;
470
- var payload = _objectSpread({
471
- id: this.breakoutGroupId,
472
- action: action,
473
- allowBackToMain: false,
474
- allowToJoinLater: false
475
- }, params);
476
- return this.request({
477
- method: _constants.HTTP_VERBS.PUT,
478
- uri: this.url,
479
- body: {
480
- groups: [payload]
481
- }
482
- }).catch(function (error) {
483
- return _promise.default.reject((0, _utils.boServiceErrorHandler)(error, 'Breakouts#start --> Edit lock token mismatch'));
484
- });
647
+ var _arguments = arguments,
648
+ _this11 = this;
649
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
650
+ var params, action, payload, body, breakoutInfo;
651
+ return _regenerator.default.wrap(function _callee4$(_context4) {
652
+ while (1) switch (_context4.prev = _context4.next) {
653
+ case 0:
654
+ params = _arguments.length > 0 && _arguments[0] !== undefined ? _arguments[0] : {};
655
+ action = _constants.BREAKOUTS.ACTION.START;
656
+ payload = _objectSpread({
657
+ id: _this11.breakoutGroupId,
658
+ action: action,
659
+ allowBackToMain: false,
660
+ allowToJoinLater: false
661
+ }, params);
662
+ body = _objectSpread(_objectSpread({}, _this11.editLock && !!_this11.editLock.token ? {
663
+ editlock: {
664
+ token: _this11.editLock.token,
665
+ refresh: true
666
+ }
667
+ } : {}), {
668
+ groups: [payload]
669
+ });
670
+ _context4.next = 6;
671
+ return _this11.request({
672
+ method: _constants.HTTP_VERBS.PUT,
673
+ uri: _this11.url,
674
+ body: body
675
+ }).catch(function (error) {
676
+ return _promise.default.reject((0, _utils.boServiceErrorHandler)(error, 'Breakouts#start'));
677
+ });
678
+ case 6:
679
+ breakoutInfo = _context4.sent;
680
+ _this11._setManageGroups(breakoutInfo);
681
+ return _context4.abrupt("return", breakoutInfo);
682
+ case 9:
683
+ case "end":
684
+ return _context4.stop();
685
+ }
686
+ }, _callee4);
687
+ }))();
485
688
  },
486
689
  /**
487
690
  * Host or cohost ends breakout sessions
@@ -489,24 +692,99 @@ var Breakouts = _webexCore.WebexPlugin.extend({
489
692
  * @returns {Promise}
490
693
  */
491
694
  end: function end() {
492
- var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
493
- var delayCloseTime = this.delayCloseTime,
494
- id = this.breakoutGroupId;
495
- var action = _constants.BREAKOUTS.ACTION.CLOSE;
496
- var payload = _objectSpread({
497
- id: id,
498
- action: action,
499
- delayCloseTime: delayCloseTime
500
- }, params);
501
- return this.request({
502
- method: _constants.HTTP_VERBS.PUT,
503
- uri: this.url,
504
- body: {
505
- groups: [payload]
506
- }
507
- }).catch(function (error) {
508
- return _promise.default.reject((0, _utils.boServiceErrorHandler)(error, 'Breakouts#end --> Edit lock token mismatch'));
509
- });
695
+ var _arguments2 = arguments,
696
+ _this12 = this;
697
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {
698
+ var params, delayCloseTime, id, action, payload, body, breakoutInfo;
699
+ return _regenerator.default.wrap(function _callee5$(_context5) {
700
+ while (1) switch (_context5.prev = _context5.next) {
701
+ case 0:
702
+ params = _arguments2.length > 0 && _arguments2[0] !== undefined ? _arguments2[0] : {};
703
+ delayCloseTime = _this12.delayCloseTime, id = _this12.breakoutGroupId;
704
+ action = _constants.BREAKOUTS.ACTION.CLOSE;
705
+ payload = _objectSpread({
706
+ id: id,
707
+ action: action,
708
+ delayCloseTime: delayCloseTime
709
+ }, params);
710
+ body = _objectSpread(_objectSpread({}, _this12.editLock && !!_this12.editLock.token ? {
711
+ editlock: {
712
+ token: _this12.editLock.token,
713
+ refresh: true
714
+ }
715
+ } : {}), {
716
+ groups: [payload]
717
+ });
718
+ _context5.next = 7;
719
+ return _this12.request({
720
+ method: _constants.HTTP_VERBS.PUT,
721
+ uri: _this12.url,
722
+ body: body
723
+ }).catch(function (error) {
724
+ return _promise.default.reject((0, _utils.boServiceErrorHandler)(error, 'Breakouts#end'));
725
+ });
726
+ case 7:
727
+ breakoutInfo = _context5.sent;
728
+ _this12._setManageGroups(breakoutInfo);
729
+ return _context5.abrupt("return", breakoutInfo);
730
+ case 10:
731
+ case "end":
732
+ return _context5.stop();
733
+ }
734
+ }, _callee5);
735
+ }))();
736
+ },
737
+ /**
738
+ * Host or cohost update breakout sessions
739
+ * @param {Object} params
740
+ * @param {String} params.id
741
+ * @param {Boolean} unlockEdit
742
+ * @returns {Promise}
743
+ */
744
+ update: function update(params, unlockEdit) {
745
+ var _this13 = this;
746
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {
747
+ var _this13$editLock;
748
+ var payload, body, breakoutInfo;
749
+ return _regenerator.default.wrap(function _callee6$(_context6) {
750
+ while (1) switch (_context6.prev = _context6.next) {
751
+ case 0:
752
+ if (params.id) {
753
+ _context6.next = 2;
754
+ break;
755
+ }
756
+ return _context6.abrupt("return", _promise.default.reject(new Error('Missing breakout group id')));
757
+ case 2:
758
+ payload = _objectSpread({}, params);
759
+ body = _objectSpread(_objectSpread({}, (_this13$editLock = _this13.editLock) !== null && _this13$editLock !== void 0 && _this13$editLock.token ? {
760
+ editlock: {
761
+ token: _this13.editLock.token,
762
+ refresh: !unlockEdit
763
+ }
764
+ } : {}), {
765
+ groups: [payload]
766
+ });
767
+ _context6.next = 6;
768
+ return _this13.request({
769
+ method: _constants.HTTP_VERBS.PUT,
770
+ uri: _this13.url,
771
+ body: body
772
+ }).catch(function (error) {
773
+ return _promise.default.reject((0, _utils.boServiceErrorHandler)(error, 'Breakouts#update'));
774
+ });
775
+ case 6:
776
+ breakoutInfo = _context6.sent;
777
+ if (unlockEdit) {
778
+ _this13._clearEditLockInfo();
779
+ }
780
+ _this13._setManageGroups(breakoutInfo);
781
+ return _context6.abrupt("return", breakoutInfo);
782
+ case 10:
783
+ case "end":
784
+ return _context6.stop();
785
+ }
786
+ }, _callee6);
787
+ }))();
510
788
  },
511
789
  /**
512
790
  * get existed breakout sessions
@@ -514,32 +792,256 @@ var Breakouts = _webexCore.WebexPlugin.extend({
514
792
  * @returns {Promise}
515
793
  */
516
794
  getBreakout: function getBreakout(editlock) {
517
- var _this9 = this;
518
- return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
519
- var _breakout$body;
795
+ var _this14 = this;
796
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7() {
797
+ var _breakout$body, _breakout$body$editlo;
520
798
  var breakout;
521
- return _regenerator.default.wrap(function _callee4$(_context4) {
522
- while (1) switch (_context4.prev = _context4.next) {
799
+ return _regenerator.default.wrap(function _callee7$(_context7) {
800
+ while (1) switch (_context7.prev = _context7.next) {
523
801
  case 0:
524
- _context4.next = 2;
525
- return _this9.request({
802
+ _context7.next = 2;
803
+ return _this14.request({
526
804
  method: _constants.HTTP_VERBS.GET,
527
- uri: _this9.url + (editlock ? "?editlock=".concat(editlock) : '')
805
+ uri: _this14.url + (editlock ? "?editlock=".concat(editlock) : '')
528
806
  });
529
807
  case 2:
530
- breakout = _context4.sent;
531
- if ((_breakout$body = breakout.body) !== null && _breakout$body !== void 0 && _breakout$body.groups) {
532
- _this9.set('groups', breakout.body.groups);
808
+ breakout = _context7.sent;
809
+ _this14._setManageGroups(breakout);
810
+ if (editlock && (_breakout$body = breakout.body) !== null && _breakout$body !== void 0 && (_breakout$body$editlo = _breakout$body.editlock) !== null && _breakout$body$editlo !== void 0 && _breakout$body$editlo.token) {
811
+ _this14.set('editLock', breakout.body.editlock);
812
+ _this14.keepEditLockAlive();
533
813
  }
534
- return _context4.abrupt("return", breakout);
814
+ return _context7.abrupt("return", breakout);
815
+ case 6:
816
+ case "end":
817
+ return _context7.stop();
818
+ }
819
+ }, _callee7);
820
+ }))();
821
+ },
822
+ /**
823
+ * enable and edit lock breakout
824
+ * @returns {void}
825
+ */
826
+ enableAndLockBreakout: function enableAndLockBreakout() {
827
+ var _this15 = this;
828
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee8() {
829
+ var info;
830
+ return _regenerator.default.wrap(function _callee8$(_context8) {
831
+ while (1) switch (_context8.prev = _context8.next) {
832
+ case 0:
833
+ if (!_this15.enableBreakoutSession) {
834
+ _context8.next = 4;
835
+ break;
836
+ }
837
+ _this15.lockBreakout();
838
+ _context8.next = 8;
839
+ break;
840
+ case 4:
841
+ _context8.next = 6;
842
+ return _this15.enableBreakouts();
843
+ case 6:
844
+ info = _context8.sent;
845
+ if (info.body) {
846
+ _this15.lockBreakout();
847
+ }
848
+ case 8:
849
+ case "end":
850
+ return _context8.stop();
851
+ }
852
+ }, _callee8);
853
+ }))();
854
+ },
855
+ /**
856
+ * breakout edit locked by yourself or not
857
+ * @returns {boolean}
858
+ */
859
+ hasBreakoutLocked: function hasBreakoutLocked() {
860
+ return this.editLock && this.editLock.token && this.editLock.state === _constants.BREAKOUTS.EDIT_LOCK_STATUS.LOCKED;
861
+ },
862
+ /**
863
+ * send breakout edit lock
864
+ * @returns {void}
865
+ */
866
+ lockBreakout: function lockBreakout() {
867
+ var _this16 = this;
868
+ return (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9() {
869
+ var _breakout$body2, breakout;
870
+ return _regenerator.default.wrap(function _callee9$(_context9) {
871
+ while (1) switch (_context9.prev = _context9.next) {
872
+ case 0:
873
+ if (!(_this16.editLock && !!_this16.editLock.token)) {
874
+ _context9.next = 8;
875
+ break;
876
+ }
877
+ if (!(_this16.editLock.state === _constants.BREAKOUTS.EDIT_LOCK_STATUS.LOCKED)) {
878
+ _context9.next = 5;
879
+ break;
880
+ }
881
+ throw new Error('Breakout already locked');
535
882
  case 5:
883
+ _this16.keepEditLockAlive();
884
+ case 6:
885
+ _context9.next = 12;
886
+ break;
887
+ case 8:
888
+ _context9.next = 10;
889
+ return _this16.getBreakout(true);
890
+ case 10:
891
+ breakout = _context9.sent;
892
+ if ((_breakout$body2 = breakout.body) !== null && _breakout$body2 !== void 0 && _breakout$body2.editlock) {
893
+ _this16.keepEditLockAlive();
894
+ }
895
+ case 12:
536
896
  case "end":
537
- return _context4.stop();
897
+ return _context9.stop();
538
898
  }
539
- }, _callee4);
899
+ }, _callee9);
540
900
  }))();
541
901
  },
542
- version: "3.0.0-beta.42"
902
+ /**
903
+ * keep edit lock alive
904
+ * @returns {void}
905
+ */
906
+ keepEditLockAlive: function keepEditLockAlive() {
907
+ var _this17 = this;
908
+ if (this.editLock && !!this.editLock.token) {
909
+ var ttl = this.editLock.ttl < 30 ? _constants.BREAKOUTS.DEFAULT_TTL : this.editLock.ttl;
910
+ if (this.intervalID) {
911
+ window.clearInterval(this.intervalID);
912
+ }
913
+ this.intervalID = window.setInterval(function () {
914
+ _this17.request({
915
+ method: _constants.HTTP_VERBS.PUT,
916
+ uri: "".concat(_this17.url, "/editlock/").concat(_this17.editLock.token)
917
+ }).catch(function (error) {
918
+ _this17._clearEditLockInfo();
919
+ return _promise.default.reject((0, _utils.boServiceErrorHandler)(error, 'Breakouts#keepEditLockAlive'));
920
+ });
921
+ }, ttl / 2 * 1000);
922
+ }
923
+ },
924
+ /**
925
+ * unlock edit breakout
926
+ * @returns {void}
927
+ */
928
+ unLockEditBreakout: function unLockEditBreakout() {
929
+ var _this18 = this;
930
+ if (this.editLock && !!this.editLock.token) {
931
+ this.request({
932
+ method: _constants.HTTP_VERBS.DELETE,
933
+ uri: "".concat(this.url, "/editlock/").concat(this.editLock.token)
934
+ }).then(function () {
935
+ _this18._clearEditLockInfo();
936
+ }).catch(function (error) {
937
+ return _promise.default.reject((0, _utils.boServiceErrorHandler)(error, 'Breakouts#unLockEditBreakout'));
938
+ });
939
+ }
940
+ },
941
+ /**
942
+ * clear interval and edit lock info
943
+ * @private
944
+ * @returns {void}
945
+ */
946
+ _clearEditLockInfo: function _clearEditLockInfo() {
947
+ if (this.intervalID) {
948
+ clearInterval(this.intervalID);
949
+ }
950
+ this.set('editLock', {});
951
+ },
952
+ /**
953
+ * assign participants to breakout session
954
+ * @param {Array} sessions
955
+ * @returns {void}
956
+ */
957
+ assign: function assign(sessions) {
958
+ var internalSessions = sessions.map(function (item) {
959
+ return {
960
+ id: item.id,
961
+ assigned: item.memberIds,
962
+ assignedEmails: item.emails,
963
+ anyoneCanJoin: !!item.anyone
964
+ };
965
+ });
966
+ var body = _objectSpread(_objectSpread({}, this.editLock && !!this.editLock.token ? {
967
+ editlock: {
968
+ token: this.editLock.token,
969
+ refresh: true
970
+ }
971
+ } : {}), {
972
+ groups: [{
973
+ id: this.breakoutGroupId,
974
+ sessions: internalSessions
975
+ }]
976
+ });
977
+ return this.request({
978
+ method: _constants.HTTP_VERBS.PUT,
979
+ uri: this.url,
980
+ body: body
981
+ });
982
+ },
983
+ /**
984
+ * query preAssignments
985
+ * @returns {void}
986
+ */
987
+ queryPreAssignments: function queryPreAssignments() {
988
+ var _this19 = this;
989
+ this.webex.request({
990
+ uri: "".concat(this.url, "/preassignments"),
991
+ qs: {
992
+ locusUrl: btoa(this.locusUrl)
993
+ }
994
+ }).then(function (result) {
995
+ var _result$body;
996
+ if ((_result$body = result.body) !== null && _result$body !== void 0 && _result$body.groups) {
997
+ _this19.set('preAssignments', result.body.groups);
998
+ _this19.trigger(_constants.BREAKOUTS.EVENTS.PRE_ASSIGNMENTS_UPDATE);
999
+ }
1000
+ }).catch(function (error) {
1001
+ _loggerProxy.default.logger.error('Meeting:breakouts#queryPreAssignments failed', error);
1002
+ });
1003
+ },
1004
+ /**
1005
+ * assign participants dynamically after breakout sessions started,
1006
+ * but currently it only used for admitting participants from lobby into breakout directly
1007
+ * @param {Array} sessions
1008
+ * @returns {void}
1009
+ */
1010
+ dynamicAssign: function dynamicAssign(sessions) {
1011
+ var updatedSessions = sessions.map(function (item) {
1012
+ return {
1013
+ id: item.id,
1014
+ participants: item.participants,
1015
+ targetState: item.targetState
1016
+ };
1017
+ });
1018
+ var body = {
1019
+ groups: [{
1020
+ id: this.breakoutGroupId,
1021
+ sessions: updatedSessions
1022
+ }],
1023
+ editlock: null
1024
+ };
1025
+ if (this.editLock && this.editLock.token) {
1026
+ body.editlock = this.editLock;
1027
+ }
1028
+ return this.request({
1029
+ method: _constants.HTTP_VERBS.PUT,
1030
+ uri: "".concat(this.url, "/dynamicAssign"),
1031
+ body: body
1032
+ });
1033
+ },
1034
+ /**
1035
+ * trigger ASK_RETURN_TO_MAIN event when main session requested
1036
+ * @param {Object} breakout
1037
+ * @returns {void}
1038
+ */
1039
+ triggerReturnToMainEvent: function triggerReturnToMainEvent(breakout) {
1040
+ if (breakout.isMain && breakout.requested) {
1041
+ this.trigger(_constants.BREAKOUTS.EVENTS.ASK_RETURN_TO_MAIN);
1042
+ }
1043
+ },
1044
+ version: "3.0.0-beta.421"
543
1045
  });
544
1046
  var _default = Breakouts;
545
1047
  exports.default = _default;