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

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 +4 -18
  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 +2 -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
@@ -0,0 +1,225 @@
1
+ /*!
2
+ * Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+ import {WebexPlugin} from '@webex/webex-core';
5
+ import {debounce, forEach} from 'lodash';
6
+ import LoggerProxy from '../common/logs/logger-proxy';
7
+
8
+ import {BREAKOUTS, MEETINGS} from '../constants';
9
+
10
+ import Breakout from './breakout';
11
+ import BreakoutCollection from './collection';
12
+
13
+ /**
14
+ * @class Breakouts
15
+ */
16
+ const Breakouts = WebexPlugin.extend({
17
+ namespace: MEETINGS,
18
+
19
+ collections: {
20
+ breakouts: BreakoutCollection,
21
+ },
22
+
23
+ props: {
24
+ allowBackToMain: 'boolean', // only present when in a breakout session
25
+ delayCloseTime: 'number', // appears once breakouts start
26
+ enableBreakoutSession: 'boolean', // appears from the moment you enable breakouts
27
+ groupId: 'string', // appears from the moment you enable breakouts
28
+ name: 'string', // only present when in a breakout session
29
+ sessionId: 'string', // appears from the moment you enable breakouts
30
+ sessionType: 'string', // appears from the moment you enable breakouts
31
+ startTime: 'string', // appears once breakouts start
32
+ status: 'string', // only present when in a breakout session
33
+ url: 'string', // appears from the moment you enable breakouts
34
+ locusUrl: 'string', // the current locus url
35
+ },
36
+
37
+ children: {
38
+ currentBreakoutSession: Breakout,
39
+ },
40
+
41
+ derived: {
42
+ isInMainSession: {
43
+ deps: ['sessionType'],
44
+ /**
45
+ * Returns true if the user is in the main session
46
+ * @returns {boolean}
47
+ */
48
+ fn() {
49
+ return this.sessionType === BREAKOUTS.SESSION_TYPES.MAIN;
50
+ },
51
+ },
52
+ },
53
+
54
+ /**
55
+ * initialize for the breakouts
56
+ * @returns {void}
57
+ */
58
+ initialize() {
59
+ this.listenTo(this, 'change:status', () => {
60
+ if (this.status === BREAKOUTS.STATUS.CLOSING) {
61
+ this.trigger(BREAKOUTS.EVENTS.BREAKOUTS_CLOSING);
62
+ }
63
+ });
64
+ this.debouncedQueryRosters = debounce(this.queryRosters, 10, {
65
+ leading: true,
66
+ trailing: false,
67
+ });
68
+ this.listenTo(this.breakouts, 'add', () => {
69
+ this.debouncedQueryRosters();
70
+ });
71
+ this.listenToBroadcastMessages();
72
+ this.listenToBreakoutRosters();
73
+ },
74
+
75
+ /**
76
+ * Calls this to clean up listeners
77
+ * @returns {void}
78
+ */
79
+ cleanUp() {
80
+ this.stopListening();
81
+ },
82
+
83
+ /**
84
+ * Update the current locus url of the meeting
85
+ * @param {string} locusUrl // locus url
86
+ * @returns {void}
87
+ */
88
+ locusUrlUpdate(locusUrl) {
89
+ this.set('locusUrl', locusUrl);
90
+ },
91
+
92
+ /**
93
+ * The initial roster lists need to be queried because you don't
94
+ * get a breakout.roster event when you join the meeting
95
+ * @returns {void}
96
+ */
97
+ queryRosters() {
98
+ this.webex
99
+ .request({uri: `${this.url}/roster`, qs: {locusUrl: btoa(this.locusUrl)}})
100
+ .then((result) => {
101
+ const {
102
+ body: {rosters},
103
+ } = result;
104
+
105
+ rosters.forEach(({locus}) => {
106
+ this.handleRosterUpdate(locus);
107
+ });
108
+
109
+ this.trigger(BREAKOUTS.EVENTS.MEMBERS_UPDATE);
110
+ })
111
+ .catch((error) => {
112
+ LoggerProxy.logger.error('Meeting:breakouts#queryRosters failed', error);
113
+ });
114
+ },
115
+
116
+ /**
117
+ *
118
+ * @param {Object} locus // locus object
119
+ * @returns {void}
120
+ */
121
+ handleRosterUpdate(locus) {
122
+ const sessionId = locus.controls?.breakout?.sessionId;
123
+
124
+ const session = this.breakouts.get(sessionId);
125
+
126
+ if (!session) {
127
+ return;
128
+ }
129
+
130
+ session.parseRoster(locus);
131
+ },
132
+
133
+ /**
134
+ * Sets up listener for broadcast messages sent to the breakout session
135
+ * @returns {void}
136
+ */
137
+ listenToBroadcastMessages() {
138
+ this.listenTo(this.webex.internal.llm, 'event:breakout.message', (event) => {
139
+ const {
140
+ data: {senderUserId, sentTime, message},
141
+ } = event;
142
+
143
+ this.trigger(BREAKOUTS.EVENTS.MESSAGE, {
144
+ senderUserId,
145
+ sentTime,
146
+ message,
147
+ // FIXME: This is only the current sessionId
148
+ // We'd need to check that the dataChannelUrl is still the same
149
+ // to guarantee that this message was sent to this session
150
+ sessionId: this.currentBreakoutSession.sessionId,
151
+ });
152
+ });
153
+ },
154
+
155
+ /**
156
+ * Sets up a listener for roster messags from mecury
157
+ * @returns {void}
158
+ */
159
+ listenToBreakoutRosters() {
160
+ this.listenTo(this.webex.internal.mercury, 'event:breakout.roster', (event) => {
161
+ this.handleRosterUpdate(event.data.locus);
162
+ this.trigger(BREAKOUTS.EVENTS.MEMBERS_UPDATE);
163
+ });
164
+ },
165
+
166
+ /**
167
+ * Updates the information about the current breakout
168
+ * @param {Object} params
169
+ * @returns {void}
170
+ */
171
+ updateBreakout(params) {
172
+ this.set(params);
173
+
174
+ this.set('currentBreakoutSession', {
175
+ sessionId: params.sessionId,
176
+ groupId: params.groupId,
177
+ name: params.name,
178
+ current: true,
179
+ sessionType: params.sessionType,
180
+ url: params.url,
181
+ [BREAKOUTS.SESSION_STATES.ACTIVE]: false,
182
+ [BREAKOUTS.SESSION_STATES.ALLOWED]: false,
183
+ [BREAKOUTS.SESSION_STATES.ALLOWED]: false,
184
+ [BREAKOUTS.SESSION_STATES.ASSIGNED_CURRENT]: false,
185
+ [BREAKOUTS.SESSION_STATES.REQUESTED]: false,
186
+ });
187
+ },
188
+
189
+ /**
190
+ * Updates the information about available breakouts
191
+ * @param {Object} payload
192
+ * @returns {void}
193
+ */
194
+ updateBreakoutSessions(payload) {
195
+ const breakouts = {};
196
+
197
+ if (payload.breakoutSessions) {
198
+ forEach(BREAKOUTS.SESSION_STATES, (state) => {
199
+ forEach(payload.breakoutSessions[state], (breakout) => {
200
+ const {sessionId} = breakout;
201
+
202
+ if (!breakouts[sessionId]) {
203
+ breakouts[sessionId] = breakout;
204
+ breakouts[sessionId][BREAKOUTS.SESSION_STATES.ACTIVE] = false;
205
+ breakouts[sessionId][BREAKOUTS.SESSION_STATES.ASSIGNED] = false;
206
+ breakouts[sessionId][BREAKOUTS.SESSION_STATES.ALLOWED] = false;
207
+ breakouts[sessionId][BREAKOUTS.SESSION_STATES.ASSIGNED_CURRENT] = false;
208
+ breakouts[sessionId][BREAKOUTS.SESSION_STATES.REQUESTED] = false;
209
+ }
210
+
211
+ breakouts[sessionId][state] = true;
212
+ });
213
+ });
214
+ }
215
+
216
+ forEach(breakouts, (breakout: typeof Breakout) => {
217
+ // eslint-disable-next-line no-param-reassign
218
+ breakout.url = this.url;
219
+ });
220
+
221
+ this.breakouts.set(Object.values(breakouts));
222
+ },
223
+ });
224
+
225
+ export default Breakouts;
@@ -1,3 +1,5 @@
1
+ /* eslint-disable @typescript-eslint/no-var-requires */
2
+
1
3
  import bowser from 'bowser';
2
4
  import {memoize} from 'lodash';
3
5
  import window from 'global/window';
@@ -9,7 +11,7 @@ const mockDetectionObject = {
9
11
  /* eslint-enable global-require */
10
12
  getBrowserName: () => '',
11
13
  getBrowserVersion: () => '',
12
- isBrowser: () => false
14
+ isBrowser: () => false,
13
15
  };
14
16
 
15
17
  const createDetectionObject = (results) => {
@@ -26,11 +28,12 @@ const createDetectionObject = (results) => {
26
28
  getOSVersion,
27
29
  getBrowserName,
28
30
  getBrowserVersion,
29
- isBrowser
31
+ isBrowser,
30
32
  };
31
33
  };
32
34
 
33
- export default memoize((agent) => (agent || window.navigator?.userAgent ?
34
- createDetectionObject(bowser.getParser(agent || window.navigator.userAgent)) :
35
- mockDetectionObject
36
- ));
35
+ export default memoize((agent?: any) =>
36
+ agent || window.navigator?.userAgent
37
+ ? createDetectionObject(bowser.getParser(agent || window.navigator.userAgent))
38
+ : mockDetectionObject
39
+ );
@@ -13,7 +13,7 @@ export default class Collection {
13
13
  * @param {String} property
14
14
  * @memberof Collection
15
15
  */
16
- constructor(property) {
16
+ constructor(property: string) {
17
17
  if (!property || !isString(property)) {
18
18
  throw new ParameterError('Collection expects a string to use as a property name.');
19
19
  }
@@ -41,8 +41,10 @@ export default class Collection {
41
41
  * @public
42
42
  * @memberof Collection
43
43
  */
44
- get(id) {
45
- return this[this.propertyName] && this[this.propertyName][id] ? this[this.propertyName][id] : null;
44
+ public get(id: string) {
45
+ return this[this.propertyName] && this[this.propertyName][id]
46
+ ? this[this.propertyName][id]
47
+ : null;
46
48
  }
47
49
 
48
50
  /**
@@ -52,7 +54,7 @@ export default class Collection {
52
54
  * @public
53
55
  * @memberof Collection
54
56
  */
55
- set(id, value) {
57
+ public set(id: string, value: any) {
56
58
  this[this.propertyName][id] = value;
57
59
 
58
60
  return this.get(id);
@@ -65,7 +67,7 @@ export default class Collection {
65
67
  * @public
66
68
  * @memberof Collection
67
69
  */
68
- delete(id) {
70
+ public delete(id: string) {
69
71
  delete this[this.propertyName][id];
70
72
  }
71
73
 
@@ -74,7 +76,7 @@ export default class Collection {
74
76
  * @public
75
77
  * @memberof Collection
76
78
  */
77
- getAll() {
79
+ public getAll() {
78
80
  return this[this.propertyName];
79
81
  }
80
82
 
@@ -84,7 +86,7 @@ export default class Collection {
84
86
  * @public
85
87
  * @memberof Collection
86
88
  */
87
- setAll(set) {
89
+ public setAll(set: object) {
88
90
  this[this.propertyName] = set;
89
91
 
90
92
  return this.getAll();
@@ -1,4 +1,4 @@
1
- const StaticConfig = {};
1
+ const StaticConfig: any = {};
2
2
 
3
3
  StaticConfig.set = (options) => {
4
4
  const values = {};
@@ -4,18 +4,22 @@ import {ERROR_DICTIONARY} from '../../constants';
4
4
  * Extended Error object to signify captcha related errors
5
5
  */
6
6
  export default class CaptchaError extends Error {
7
+ code: any;
8
+ error: any;
9
+ sdkMessage: any;
10
+
7
11
  /**
8
- *
9
- * @constructor
10
- * @param {String} [message]
11
- * @param {Object} [error]
12
- */
13
- constructor(message = ERROR_DICTIONARY.CAPTCHA.MESSAGE, error = null) {
12
+ *
13
+ * @constructor
14
+ * @param {String} [message]
15
+ * @param {Object} [error]
16
+ */
17
+ constructor(message: string = ERROR_DICTIONARY.CAPTCHA.MESSAGE, error: any = null) {
14
18
  super(message);
15
19
  this.name = ERROR_DICTIONARY.CAPTCHA.NAME;
16
20
  this.sdkMessage = ERROR_DICTIONARY.CAPTCHA.MESSAGE;
17
21
  this.error = error;
18
- this.stack = error ? error.stack : (new Error()).stack;
22
+ this.stack = error ? error.stack : new Error().stack;
19
23
  this.code = ERROR_DICTIONARY.CAPTCHA.CODE;
20
24
  }
21
25
  }
@@ -4,18 +4,23 @@ import {ERROR_DICTIONARY} from '../../constants';
4
4
  * Extended Error object to signify the intent to join for unclaimed PMR scenarios
5
5
  */
6
6
  export default class IntentToJoinError extends Error {
7
+ code: any;
8
+ error: any;
9
+ joinIntentRequired: any;
10
+ sdkMessage: any;
11
+
7
12
  /**
8
- *
9
- * @constructor
10
- * @param {String} [message]
11
- * @param {Object} [error]
12
- */
13
- constructor(message = ERROR_DICTIONARY.INTENT_TO_JOIN.MESSAGE, error = null) {
13
+ *
14
+ * @constructor
15
+ * @param {String} [message]
16
+ * @param {Object} [error]
17
+ */
18
+ constructor(message: string = ERROR_DICTIONARY.INTENT_TO_JOIN.MESSAGE, error: any = null) {
14
19
  super(message);
15
20
  this.name = ERROR_DICTIONARY.INTENT_TO_JOIN.NAME;
16
21
  this.sdkMessage = ERROR_DICTIONARY.INTENT_TO_JOIN.MESSAGE;
17
22
  this.error = error;
18
- this.stack = error ? error.stack : (new Error()).stack;
23
+ this.stack = error ? error.stack : new Error().stack;
19
24
  this.joinIntentRequired = true;
20
25
  this.code = ERROR_DICTIONARY.INTENT_TO_JOIN.CODE;
21
26
  }
@@ -4,19 +4,28 @@ import {ERROR_DICTIONARY} from '../../constants';
4
4
  * Extended Error object to signify a join meeting error
5
5
  */
6
6
  export default class JoinMeetingError extends Error {
7
+ code: any;
8
+ error: any;
9
+ joinOptions: any;
10
+ sdkMessage: any;
11
+
7
12
  /**
8
- *
9
- * @constructor
10
- * @param {Object} [options]
11
- * @param {String} [message]
12
- * @param {Object} [error]
13
- */
14
- constructor(options = {}, message = ERROR_DICTIONARY.JOIN_MEETING.MESSAGE, error = null) {
13
+ *
14
+ * @constructor
15
+ * @param {Object} [options]
16
+ * @param {String} [message]
17
+ * @param {Object} [error]
18
+ */
19
+ constructor(
20
+ options: object = {},
21
+ message: string = ERROR_DICTIONARY.JOIN_MEETING.MESSAGE,
22
+ error: any = null
23
+ ) {
15
24
  super(message);
16
25
  this.name = ERROR_DICTIONARY.JOIN_MEETING.NAME;
17
26
  this.sdkMessage = ERROR_DICTIONARY.JOIN_MEETING.MESSAGE;
18
27
  this.error = error;
19
- this.stack = error ? error.stack : (new Error()).stack;
28
+ this.stack = error ? error.stack : new Error().stack;
20
29
  this.joinOptions = options;
21
30
  this.code = ERROR_DICTIONARY.JOIN_MEETING.CODE;
22
31
  }
@@ -4,18 +4,22 @@ import {ERROR_DICTIONARY} from '../../constants';
4
4
  * Extended Error object for media errors
5
5
  */
6
6
  export default class MediaError extends Error {
7
+ code: any;
8
+ error: any;
9
+ sdkMessage: any;
10
+
7
11
  /**
8
- *
9
- * @constructor
10
- * @param {String} [message]
11
- * @param {Object} [error]
12
- */
13
- constructor(message = ERROR_DICTIONARY.MEDIA.MESSAGE, error = null) {
12
+ *
13
+ * @constructor
14
+ * @param {String} [message]
15
+ * @param {Object} [error]
16
+ */
17
+ constructor(message: string = ERROR_DICTIONARY.MEDIA.MESSAGE, error: any = null) {
14
18
  super(message);
15
19
  this.name = ERROR_DICTIONARY.RECONNECTION.NAME;
16
20
  this.sdkMessage = ERROR_DICTIONARY.MEDIA.MESSAGE;
17
21
  this.error = error;
18
- this.stack = error ? error.stack : (new Error()).stack;
22
+ this.stack = error ? error.stack : new Error().stack;
19
23
  this.code = ERROR_DICTIONARY.RECONNECTION.CODE;
20
24
  }
21
25
  }
@@ -1,4 +1,4 @@
1
- import * as MEETINGCONSTANTS from '../../constants';
1
+ import * as MEETINGCONSTANTS from '../../constants';
2
2
 
3
3
  /**
4
4
  * Extended Error object for general parameter errors
@@ -7,13 +7,17 @@ export default class ParameterError extends Error {
7
7
  sdkMessage: string;
8
8
  error: null;
9
9
  code: number;
10
+
10
11
  /**
11
- *
12
- * @constructor
13
- * @param {String} [message]
14
- * @param {Object} [error]
15
- */
16
- constructor(message = MEETINGCONSTANTS.ERROR_DICTIONARY.PARAMETER.MESSAGE, error = null) {
12
+ *
13
+ * @constructor
14
+ * @param {String} [message]
15
+ * @param {Object} [error]
16
+ */
17
+ constructor(
18
+ message: string = MEETINGCONSTANTS.ERROR_DICTIONARY.PARAMETER.MESSAGE,
19
+ error: any = null
20
+ ) {
17
21
  super(message);
18
22
 
19
23
  if (Error.captureStackTrace) {
@@ -4,18 +4,22 @@ import {ERROR_DICTIONARY} from '../../constants';
4
4
  * Extended Error object to signify password related errors
5
5
  */
6
6
  export default class PasswordError extends Error {
7
+ code: any;
8
+ error: any;
9
+ sdkMessage: any;
10
+
7
11
  /**
8
- *
9
- * @constructor
10
- * @param {String} [message]
11
- * @param {Object} [error]
12
- */
13
- constructor(message = ERROR_DICTIONARY.PASSWORD.MESSAGE, error = null) {
12
+ *
13
+ * @constructor
14
+ * @param {String} [message]
15
+ * @param {Object} [error]
16
+ */
17
+ constructor(message: string = ERROR_DICTIONARY.PASSWORD.MESSAGE, error: any = null) {
14
18
  super(message);
15
19
  this.name = ERROR_DICTIONARY.PASSWORD.NAME;
16
20
  this.sdkMessage = ERROR_DICTIONARY.PASSWORD.MESSAGE;
17
21
  this.error = error;
18
- this.stack = error ? error.stack : (new Error()).stack;
22
+ this.stack = error ? error.stack : new Error().stack;
19
23
  this.code = ERROR_DICTIONARY.PASSWORD.CODE;
20
24
  }
21
25
  }
@@ -4,17 +4,21 @@ import {ERROR_DICTIONARY} from '../../constants';
4
4
  * Extended Error object for general parameter errors
5
5
  */
6
6
  export default class PermissionError extends Error {
7
+ code: any;
8
+ error: any;
9
+ sdkMessage: any;
10
+
7
11
  /**
8
- * @constructor
9
- * @param {String} [message]
10
- * @param {Object} [error]
11
- */
12
- constructor(message = ERROR_DICTIONARY.PERMISSION.MESSAGE, error = null) {
12
+ * @constructor
13
+ * @param {String} [message]
14
+ * @param {Object} [error]
15
+ */
16
+ constructor(message: string = ERROR_DICTIONARY.PERMISSION.MESSAGE, error: any = null) {
13
17
  super(message);
14
18
  this.name = ERROR_DICTIONARY.PERMISSION.NAME;
15
19
  this.sdkMessage = ERROR_DICTIONARY.PERMISSION.MESSAGE;
16
20
  this.error = error;
17
- this.stack = error ? error.stack : (new Error()).stack;
21
+ this.stack = error ? error.stack : new Error().stack;
18
22
  this.code = ERROR_DICTIONARY.PERMISSION.CODE;
19
23
  }
20
24
  }
@@ -4,18 +4,22 @@ import {ERROR_DICTIONARY} from '../../constants';
4
4
  * Extended Error object to signify the intent to join for unclaimed PMR scenarios
5
5
  */
6
6
  export default class ReconnectionError extends Error {
7
+ code: any;
8
+ error: any;
9
+ sdkMessage: any;
10
+
7
11
  /**
8
- *
9
- * @constructor
10
- * @param {String} [message]
11
- * @param {Object} [error]
12
- */
13
- constructor(message = ERROR_DICTIONARY.RECONNECTION.MESSAGE, error = null) {
12
+ *
13
+ * @constructor
14
+ * @param {String} [message]
15
+ * @param {Object} [error]
16
+ */
17
+ constructor(message: string = ERROR_DICTIONARY.RECONNECTION.MESSAGE, error: any = null) {
14
18
  super(message);
15
19
  this.name = ERROR_DICTIONARY.RECONNECTION.NAME;
16
20
  this.sdkMessage = ERROR_DICTIONARY.RECONNECTION.MESSAGE;
17
21
  this.error = error;
18
- this.stack = error ? error.stack : (new Error()).stack;
22
+ this.stack = error ? error.stack : new Error().stack;
19
23
  this.code = ERROR_DICTIONARY.RECONNECTION.CODE;
20
24
  }
21
25
  }
@@ -4,18 +4,22 @@ import {ERROR_DICTIONARY} from '../../constants';
4
4
  * Extended Error object for Stats Errors
5
5
  */
6
6
  export default class StatsError extends Error {
7
+ code: any;
8
+ error: any;
9
+ sdkMessage: any;
10
+
7
11
  /**
8
- *
9
- * @constructor
10
- * @param {String} [message]
11
- * @param {Object} [error]
12
- */
13
- constructor(message = ERROR_DICTIONARY.STATS.MESSAGE, error = null) {
12
+ *
13
+ * @constructor
14
+ * @param {String} [message]
15
+ * @param {Object} [error]
16
+ */
17
+ constructor(message: string = ERROR_DICTIONARY.STATS.MESSAGE, error: any = null) {
14
18
  super(message);
15
19
  this.name = ERROR_DICTIONARY.STATS.NAME;
16
20
  this.sdkMessage = ERROR_DICTIONARY.STATS.MESSAGE;
17
21
  this.error = error;
18
- this.stack = error ? error.stack : (new Error()).stack;
22
+ this.stack = error ? error.stack : new Error().stack;
19
23
  this.code = ERROR_DICTIONARY.STATS.CODE;
20
24
  }
21
25
  }
@@ -5,7 +5,6 @@
5
5
  // 3) Any errors we generate from the SDK can be split into various categories
6
6
  // Parameter validation, user action, connection, media specific(They can have different range)
7
7
 
8
-
9
8
  // TODO: all the errors from the server need to be captured
10
9
 
11
10
  // add a way to log and send metrics if needed
@@ -20,11 +19,13 @@ const WebExMeetingsErrors = {};
20
19
  * @param {string} [message] - Error message
21
20
  * @returns {WebexMeetingsError}
22
21
  */
23
- export function createMeetingsError(code, message) {
22
+ export function createMeetingsError(code?: number, message?: string) {
24
23
  code = typeof code === 'number' ? code : 0;
25
24
  message = typeof message === 'string' && message ? message : 'Unknown error';
26
25
 
27
- return WebExMeetingsErrors[code] ? new WebExMeetingsErrors[code]() : new WebexMeetingsError(code, message);
26
+ return WebExMeetingsErrors[code]
27
+ ? new WebExMeetingsErrors[code]()
28
+ : new WebexMeetingsError(code, message);
28
29
  }
29
30
 
30
31
  /**
@@ -56,14 +57,16 @@ class UserNotJoinedError extends WebexMeetingsError {
56
57
  static CODE = 30102;
57
58
 
58
59
  constructor() {
59
- super(UserNotJoinedError.CODE, 'User currently not in meeting. Please join a meeting before adding media.');
60
+ super(
61
+ UserNotJoinedError.CODE,
62
+ 'User currently not in meeting. Please join a meeting before adding media.'
63
+ );
60
64
  }
61
65
  }
62
66
 
63
67
  export {UserNotJoinedError};
64
68
  WebExMeetingsErrors[UserNotJoinedError.CODE] = UserNotJoinedError;
65
69
 
66
-
67
70
  /**
68
71
  * @class NoMediaEstablishedYetError
69
72
  * @classdesc Raised whenever the user has not established media yet.
@@ -82,7 +85,6 @@ class NoMediaEstablishedYetError extends WebexMeetingsError {
82
85
  export {NoMediaEstablishedYetError};
83
86
  WebExMeetingsErrors[NoMediaEstablishedYetError.CODE] = NoMediaEstablishedYetError;
84
87
 
85
-
86
88
  /**
87
89
  * @class UserInLobbyError
88
90
  * @classdesc Raised whenever the user is in lobby and not joined yet.
@@ -101,7 +103,6 @@ class UserInLobbyError extends WebexMeetingsError {
101
103
  export {UserInLobbyError};
102
104
  WebExMeetingsErrors[UserInLobbyError.CODE] = UserInLobbyError;
103
105
 
104
-
105
106
  /**
106
107
  * @class IceGatheringFailed
107
108
  * @classdesc Raised whenever ice gathering fails.