@webex/plugin-meetings 3.0.0-beta.31 → 3.0.0-beta.310

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 (378) hide show
  1. package/README.md +46 -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/edit-lock-error.js +52 -0
  11. package/dist/breakouts/edit-lock-error.js.map +1 -0
  12. package/dist/breakouts/events.js +45 -0
  13. package/dist/breakouts/events.js.map +1 -0
  14. package/dist/breakouts/index.js +709 -35
  15. package/dist/breakouts/index.js.map +1 -1
  16. package/dist/breakouts/utils.js +45 -1
  17. package/dist/breakouts/utils.js.map +1 -1
  18. package/dist/common/errors/no-meeting-info.js +51 -0
  19. package/dist/common/errors/no-meeting-info.js.map +1 -0
  20. package/dist/common/errors/reclaim-host-role-errors.js +158 -0
  21. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  22. package/dist/common/errors/webex-errors.js +48 -7
  23. package/dist/common/errors/webex-errors.js.map +1 -1
  24. package/dist/common/logs/logger-proxy.js +1 -1
  25. package/dist/common/logs/logger-proxy.js.map +1 -1
  26. package/dist/common/logs/request.js +5 -1
  27. package/dist/common/logs/request.js.map +1 -1
  28. package/dist/common/queue.js +24 -9
  29. package/dist/common/queue.js.map +1 -1
  30. package/dist/config.js +5 -11
  31. package/dist/config.js.map +1 -1
  32. package/dist/constants.js +233 -29
  33. package/dist/constants.js.map +1 -1
  34. package/dist/controls-options-manager/enums.js +14 -2
  35. package/dist/controls-options-manager/enums.js.map +1 -1
  36. package/dist/controls-options-manager/index.js +109 -15
  37. package/dist/controls-options-manager/index.js.map +1 -1
  38. package/dist/controls-options-manager/types.js +7 -0
  39. package/dist/controls-options-manager/types.js.map +1 -0
  40. package/dist/controls-options-manager/util.js +309 -18
  41. package/dist/controls-options-manager/util.js.map +1 -1
  42. package/dist/index.js +112 -1
  43. package/dist/index.js.map +1 -1
  44. package/dist/interpretation/collection.js +23 -0
  45. package/dist/interpretation/collection.js.map +1 -0
  46. package/dist/interpretation/index.js +366 -0
  47. package/dist/interpretation/index.js.map +1 -0
  48. package/dist/interpretation/siLanguage.js +25 -0
  49. package/dist/interpretation/siLanguage.js.map +1 -0
  50. package/dist/locus-info/controlsUtils.js +91 -2
  51. package/dist/locus-info/controlsUtils.js.map +1 -1
  52. package/dist/locus-info/index.js +383 -62
  53. package/dist/locus-info/index.js.map +1 -1
  54. package/dist/locus-info/infoUtils.js +7 -1
  55. package/dist/locus-info/infoUtils.js.map +1 -1
  56. package/dist/locus-info/mediaSharesUtils.js +57 -1
  57. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  58. package/dist/locus-info/parser.js +249 -72
  59. package/dist/locus-info/parser.js.map +1 -1
  60. package/dist/locus-info/selfUtils.js +89 -14
  61. package/dist/locus-info/selfUtils.js.map +1 -1
  62. package/dist/media/index.js +61 -116
  63. package/dist/media/index.js.map +1 -1
  64. package/dist/media/properties.js +73 -124
  65. package/dist/media/properties.js.map +1 -1
  66. package/dist/meeting/in-meeting-actions.js +82 -2
  67. package/dist/meeting/in-meeting-actions.js.map +1 -1
  68. package/dist/meeting/index.js +3777 -2929
  69. package/dist/meeting/index.js.map +1 -1
  70. package/dist/meeting/locusMediaRequest.js +292 -0
  71. package/dist/meeting/locusMediaRequest.js.map +1 -0
  72. package/dist/meeting/muteState.js +230 -124
  73. package/dist/meeting/muteState.js.map +1 -1
  74. package/dist/meeting/request.js +260 -196
  75. package/dist/meeting/request.js.map +1 -1
  76. package/dist/meeting/util.js +601 -417
  77. package/dist/meeting/util.js.map +1 -1
  78. package/dist/meeting-info/index.js +73 -7
  79. package/dist/meeting-info/index.js.map +1 -1
  80. package/dist/meeting-info/meeting-info-v2.js +192 -51
  81. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  82. package/dist/meeting-info/util.js +1 -1
  83. package/dist/meeting-info/util.js.map +1 -1
  84. package/dist/meeting-info/utilv2.js +36 -36
  85. package/dist/meeting-info/utilv2.js.map +1 -1
  86. package/dist/meetings/collection.js +39 -0
  87. package/dist/meetings/collection.js.map +1 -1
  88. package/dist/meetings/index.js +415 -115
  89. package/dist/meetings/index.js.map +1 -1
  90. package/dist/meetings/meetings.types.js +7 -0
  91. package/dist/meetings/meetings.types.js.map +1 -0
  92. package/dist/meetings/request.js +2 -0
  93. package/dist/meetings/request.js.map +1 -1
  94. package/dist/meetings/util.js +72 -6
  95. package/dist/meetings/util.js.map +1 -1
  96. package/dist/member/index.js +58 -0
  97. package/dist/member/index.js.map +1 -1
  98. package/dist/member/types.js +25 -0
  99. package/dist/member/types.js.map +1 -0
  100. package/dist/member/util.js +132 -25
  101. package/dist/member/util.js.map +1 -1
  102. package/dist/members/collection.js +10 -0
  103. package/dist/members/collection.js.map +1 -1
  104. package/dist/members/index.js +102 -6
  105. package/dist/members/index.js.map +1 -1
  106. package/dist/members/request.js +106 -38
  107. package/dist/members/request.js.map +1 -1
  108. package/dist/members/types.js +15 -0
  109. package/dist/members/types.js.map +1 -0
  110. package/dist/members/util.js +326 -232
  111. package/dist/members/util.js.map +1 -1
  112. package/dist/metrics/constants.js +13 -5
  113. package/dist/metrics/constants.js.map +1 -1
  114. package/dist/metrics/index.js +1 -468
  115. package/dist/metrics/index.js.map +1 -1
  116. package/dist/multistream/mediaRequestManager.js +238 -49
  117. package/dist/multistream/mediaRequestManager.js.map +1 -1
  118. package/dist/multistream/receiveSlot.js +29 -16
  119. package/dist/multistream/receiveSlot.js.map +1 -1
  120. package/dist/multistream/receiveSlotManager.js +39 -36
  121. package/dist/multistream/receiveSlotManager.js.map +1 -1
  122. package/dist/multistream/remoteMedia.js +44 -18
  123. package/dist/multistream/remoteMedia.js.map +1 -1
  124. package/dist/multistream/remoteMediaGroup.js +60 -3
  125. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  126. package/dist/multistream/remoteMediaManager.js +209 -59
  127. package/dist/multistream/remoteMediaManager.js.map +1 -1
  128. package/dist/multistream/sendSlotManager.js +233 -0
  129. package/dist/multistream/sendSlotManager.js.map +1 -0
  130. package/dist/reachability/index.js +225 -59
  131. package/dist/reachability/index.js.map +1 -1
  132. package/dist/reachability/request.js +17 -8
  133. package/dist/reachability/request.js.map +1 -1
  134. package/dist/reconnection-manager/index.js +201 -156
  135. package/dist/reconnection-manager/index.js.map +1 -1
  136. package/dist/recording-controller/index.js +21 -2
  137. package/dist/recording-controller/index.js.map +1 -1
  138. package/dist/recording-controller/util.js +9 -8
  139. package/dist/recording-controller/util.js.map +1 -1
  140. package/dist/roap/index.js +62 -32
  141. package/dist/roap/index.js.map +1 -1
  142. package/dist/roap/request.js +112 -97
  143. package/dist/roap/request.js.map +1 -1
  144. package/dist/roap/turnDiscovery.js +95 -36
  145. package/dist/roap/turnDiscovery.js.map +1 -1
  146. package/dist/rtcMetrics/constants.js +12 -0
  147. package/dist/rtcMetrics/constants.js.map +1 -0
  148. package/dist/rtcMetrics/index.js +117 -0
  149. package/dist/rtcMetrics/index.js.map +1 -0
  150. package/dist/statsAnalyzer/index.js +86 -78
  151. package/dist/statsAnalyzer/index.js.map +1 -1
  152. package/dist/statsAnalyzer/mqaUtil.js +11 -10
  153. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  154. package/dist/types/annotation/annotation.types.d.ts +42 -0
  155. package/dist/types/annotation/constants.d.ts +31 -0
  156. package/dist/types/annotation/index.d.ts +117 -0
  157. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  158. package/dist/types/breakouts/events.d.ts +8 -0
  159. package/dist/types/breakouts/utils.d.ts +14 -0
  160. package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
  161. package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
  162. package/dist/types/common/errors/webex-errors.d.ts +25 -1
  163. package/dist/types/common/logs/request.d.ts +2 -0
  164. package/dist/types/common/queue.d.ts +9 -7
  165. package/dist/types/config.d.ts +1 -7
  166. package/dist/types/constants.d.ts +194 -24
  167. package/dist/types/controls-options-manager/enums.d.ts +11 -1
  168. package/dist/types/controls-options-manager/index.d.ts +17 -1
  169. package/dist/types/controls-options-manager/types.d.ts +43 -0
  170. package/dist/types/controls-options-manager/util.d.ts +1 -7
  171. package/dist/types/index.d.ts +6 -4
  172. package/dist/types/interpretation/collection.d.ts +5 -0
  173. package/dist/types/interpretation/index.d.ts +5 -0
  174. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  175. package/dist/types/locus-info/index.d.ts +57 -4
  176. package/dist/types/locus-info/parser.d.ts +67 -6
  177. package/dist/types/media/index.d.ts +2 -0
  178. package/dist/types/media/properties.d.ts +34 -48
  179. package/dist/types/meeting/in-meeting-actions.d.ts +82 -2
  180. package/dist/types/meeting/index.d.ts +463 -510
  181. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  182. package/dist/types/meeting/muteState.d.ts +99 -23
  183. package/dist/types/meeting/request.d.ts +72 -43
  184. package/dist/types/meeting/util.d.ts +101 -1
  185. package/dist/types/meeting-info/index.d.ts +13 -1
  186. package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
  187. package/dist/types/meetings/collection.d.ts +17 -0
  188. package/dist/types/meetings/index.d.ts +98 -20
  189. package/dist/types/meetings/meetings.types.d.ts +4 -0
  190. package/dist/types/member/index.d.ts +14 -0
  191. package/dist/types/member/types.d.ts +32 -0
  192. package/dist/types/members/collection.d.ts +5 -0
  193. package/dist/types/members/index.d.ts +35 -2
  194. package/dist/types/members/request.d.ts +73 -9
  195. package/dist/types/members/types.d.ts +25 -0
  196. package/dist/types/members/util.d.ts +214 -1
  197. package/dist/types/metrics/constants.d.ts +12 -4
  198. package/dist/types/metrics/index.d.ts +4 -119
  199. package/dist/types/multistream/mediaRequestManager.d.ts +73 -5
  200. package/dist/types/multistream/receiveSlot.d.ts +13 -11
  201. package/dist/types/multistream/receiveSlotManager.d.ts +14 -4
  202. package/dist/types/multistream/remoteMedia.d.ts +8 -29
  203. package/dist/types/multistream/remoteMediaGroup.d.ts +0 -9
  204. package/dist/types/multistream/remoteMediaManager.d.ts +46 -2
  205. package/dist/types/multistream/sendSlotManager.d.ts +61 -0
  206. package/dist/types/reachability/index.d.ts +61 -7
  207. package/dist/types/reachability/request.d.ts +7 -3
  208. package/dist/types/reconnection-manager/index.d.ts +9 -0
  209. package/dist/types/recording-controller/index.d.ts +15 -1
  210. package/dist/types/recording-controller/util.d.ts +5 -4
  211. package/dist/types/roap/index.d.ts +2 -1
  212. package/dist/types/roap/request.d.ts +15 -11
  213. package/dist/types/roap/turnDiscovery.d.ts +21 -3
  214. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  215. package/dist/types/rtcMetrics/index.d.ts +47 -0
  216. package/dist/types/statsAnalyzer/index.d.ts +7 -1
  217. package/dist/types/webinar/collection.d.ts +16 -0
  218. package/dist/types/webinar/index.d.ts +5 -0
  219. package/dist/webinar/collection.js +44 -0
  220. package/dist/webinar/collection.js.map +1 -0
  221. package/dist/webinar/index.js +69 -0
  222. package/dist/webinar/index.js.map +1 -0
  223. package/package.json +23 -20
  224. package/src/annotation/annotation.types.ts +50 -0
  225. package/src/annotation/constants.ts +36 -0
  226. package/src/annotation/index.ts +328 -0
  227. package/src/breakouts/README.md +42 -12
  228. package/src/breakouts/breakout.ts +67 -9
  229. package/src/breakouts/edit-lock-error.ts +25 -0
  230. package/src/breakouts/events.ts +56 -0
  231. package/src/breakouts/index.ts +592 -20
  232. package/src/breakouts/utils.ts +42 -0
  233. package/src/common/errors/no-meeting-info.ts +24 -0
  234. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  235. package/src/common/errors/webex-errors.ts +44 -2
  236. package/src/common/logs/logger-proxy.ts +1 -1
  237. package/src/common/logs/request.ts +5 -1
  238. package/src/common/queue.ts +22 -8
  239. package/src/config.ts +4 -10
  240. package/src/constants.ts +221 -19
  241. package/src/controls-options-manager/enums.ts +12 -0
  242. package/src/controls-options-manager/index.ts +116 -21
  243. package/src/controls-options-manager/types.ts +59 -0
  244. package/src/controls-options-manager/util.ts +294 -14
  245. package/src/index.ts +40 -0
  246. package/src/interpretation/README.md +60 -0
  247. package/src/interpretation/collection.ts +19 -0
  248. package/src/interpretation/index.ts +332 -0
  249. package/src/interpretation/siLanguage.ts +18 -0
  250. package/src/locus-info/controlsUtils.ts +108 -0
  251. package/src/locus-info/index.ts +413 -59
  252. package/src/locus-info/infoUtils.ts +10 -2
  253. package/src/locus-info/mediaSharesUtils.ts +64 -0
  254. package/src/locus-info/parser.ts +258 -47
  255. package/src/locus-info/selfUtils.ts +81 -5
  256. package/src/media/index.ts +102 -122
  257. package/src/media/properties.ts +87 -110
  258. package/src/meeting/in-meeting-actions.ts +163 -3
  259. package/src/meeting/index.ts +3132 -2541
  260. package/src/meeting/locusMediaRequest.ts +313 -0
  261. package/src/meeting/muteState.ts +229 -131
  262. package/src/meeting/request.ts +177 -121
  263. package/src/meeting/util.ts +588 -394
  264. package/src/meeting-info/index.ts +81 -8
  265. package/src/meeting-info/meeting-info-v2.ts +170 -14
  266. package/src/meeting-info/util.ts +1 -1
  267. package/src/meeting-info/utilv2.ts +23 -23
  268. package/src/meetings/collection.ts +33 -0
  269. package/src/meetings/index.ts +445 -123
  270. package/src/meetings/meetings.types.ts +12 -0
  271. package/src/meetings/request.ts +2 -0
  272. package/src/meetings/util.ts +80 -11
  273. package/src/member/index.ts +58 -0
  274. package/src/member/types.ts +38 -0
  275. package/src/member/util.ts +141 -25
  276. package/src/members/collection.ts +8 -0
  277. package/src/members/index.ts +134 -8
  278. package/src/members/request.ts +97 -17
  279. package/src/members/types.ts +29 -0
  280. package/src/members/util.ts +333 -240
  281. package/src/metrics/constants.ts +12 -4
  282. package/src/metrics/index.ts +1 -490
  283. package/src/multistream/mediaRequestManager.ts +289 -79
  284. package/src/multistream/receiveSlot.ts +31 -17
  285. package/src/multistream/receiveSlotManager.ts +34 -24
  286. package/src/multistream/remoteMedia.ts +27 -2
  287. package/src/multistream/remoteMediaGroup.ts +59 -0
  288. package/src/multistream/remoteMediaManager.ts +148 -30
  289. package/src/multistream/sendSlotManager.ts +170 -0
  290. package/src/reachability/index.ts +228 -37
  291. package/src/reachability/request.ts +17 -8
  292. package/src/reconnection-manager/index.ts +83 -56
  293. package/src/recording-controller/index.ts +20 -3
  294. package/src/recording-controller/util.ts +26 -9
  295. package/src/roap/index.ts +63 -32
  296. package/src/roap/request.ts +100 -104
  297. package/src/roap/turnDiscovery.ts +48 -26
  298. package/src/rtcMetrics/constants.ts +3 -0
  299. package/src/rtcMetrics/index.ts +100 -0
  300. package/src/statsAnalyzer/index.ts +105 -91
  301. package/src/statsAnalyzer/mqaUtil.ts +13 -14
  302. package/src/webinar/collection.ts +31 -0
  303. package/src/webinar/index.ts +62 -0
  304. package/test/integration/spec/converged-space-meetings.js +60 -3
  305. package/test/integration/spec/journey.js +320 -261
  306. package/test/integration/spec/space-meeting.js +76 -3
  307. package/test/unit/spec/annotation/index.ts +418 -0
  308. package/test/unit/spec/breakouts/breakout.ts +118 -28
  309. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  310. package/test/unit/spec/breakouts/events.ts +89 -0
  311. package/test/unit/spec/breakouts/index.ts +1395 -69
  312. package/test/unit/spec/breakouts/utils.js +52 -1
  313. package/test/unit/spec/common/queue.js +31 -2
  314. package/test/unit/spec/controls-options-manager/index.js +163 -0
  315. package/test/unit/spec/controls-options-manager/util.js +576 -60
  316. package/test/unit/spec/fixture/locus.js +1 -0
  317. package/test/unit/spec/interpretation/collection.ts +15 -0
  318. package/test/unit/spec/interpretation/index.ts +589 -0
  319. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  320. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  321. package/test/unit/spec/locus-info/index.js +1304 -33
  322. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  323. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  324. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  325. package/test/unit/spec/locus-info/parser.js +116 -35
  326. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  327. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  328. package/test/unit/spec/media/index.ts +104 -37
  329. package/test/unit/spec/media/properties.ts +2 -2
  330. package/test/unit/spec/meeting/in-meeting-actions.ts +81 -3
  331. package/test/unit/spec/meeting/index.js +5216 -1956
  332. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  333. package/test/unit/spec/meeting/muteState.js +408 -208
  334. package/test/unit/spec/meeting/request.js +483 -49
  335. package/test/unit/spec/meeting/utils.js +679 -64
  336. package/test/unit/spec/meeting-info/index.js +300 -0
  337. package/test/unit/spec/meeting-info/meetinginfov2.js +526 -5
  338. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  339. package/test/unit/spec/meetings/collection.js +26 -0
  340. package/test/unit/spec/meetings/index.js +1011 -205
  341. package/test/unit/spec/meetings/utils.js +202 -2
  342. package/test/unit/spec/member/index.js +61 -6
  343. package/test/unit/spec/member/util.js +510 -34
  344. package/test/unit/spec/members/index.js +432 -1
  345. package/test/unit/spec/members/request.js +206 -27
  346. package/test/unit/spec/members/utils.js +210 -0
  347. package/test/unit/spec/metrics/index.js +1 -50
  348. package/test/unit/spec/multistream/mediaRequestManager.ts +803 -162
  349. package/test/unit/spec/multistream/receiveSlot.ts +28 -20
  350. package/test/unit/spec/multistream/receiveSlotManager.ts +32 -30
  351. package/test/unit/spec/multistream/remoteMedia.ts +30 -0
  352. package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
  353. package/test/unit/spec/multistream/remoteMediaManager.ts +326 -0
  354. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  355. package/test/unit/spec/reachability/index.ts +549 -9
  356. package/test/unit/spec/reachability/request.js +68 -0
  357. package/test/unit/spec/reconnection-manager/index.js +85 -9
  358. package/test/unit/spec/recording-controller/index.js +294 -218
  359. package/test/unit/spec/recording-controller/util.js +223 -96
  360. package/test/unit/spec/roap/index.ts +178 -64
  361. package/test/unit/spec/roap/request.ts +203 -85
  362. package/test/unit/spec/roap/turnDiscovery.ts +82 -36
  363. package/test/unit/spec/rtcMetrics/index.ts +73 -0
  364. package/test/unit/spec/stats-analyzer/index.js +136 -2
  365. package/test/unit/spec/webinar/collection.ts +13 -0
  366. package/test/unit/spec/webinar/index.ts +60 -0
  367. package/test/utils/integrationTestUtils.js +46 -0
  368. package/test/utils/testUtils.js +0 -52
  369. package/dist/meeting/effectsState.js +0 -262
  370. package/dist/meeting/effectsState.js.map +0 -1
  371. package/dist/metrics/config.js +0 -299
  372. package/dist/metrics/config.js.map +0 -1
  373. package/dist/types/meeting/effectsState.d.ts +0 -42
  374. package/dist/types/metrics/config.d.ts +0 -178
  375. package/src/index.js +0 -16
  376. package/src/meeting/effectsState.ts +0 -211
  377. package/src/metrics/config.ts +0 -495
  378. package/test/unit/spec/meeting/effectsState.js +0 -285
@@ -5,17 +5,31 @@ import {isEmpty} from 'lodash';
5
5
  // @ts-ignore
6
6
  import {StatelessWebexPlugin} from '@webex/webex-core';
7
7
 
8
- import {MEETINGS, EVENT_TRIGGERS, FLOOR_ACTION, CONTENT, WHITEBOARD} from '../constants';
8
+ import {
9
+ MEETINGS,
10
+ EVENT_TRIGGERS,
11
+ FLOOR_ACTION,
12
+ CONTENT,
13
+ WHITEBOARD,
14
+ ASSIGN_ROLES_ERROR_CODES,
15
+ } from '../constants';
9
16
  import Trigger from '../common/events/trigger-proxy';
10
17
  import Member from '../member';
11
18
  import LoggerProxy from '../common/logs/logger-proxy';
12
19
  import ParameterError from '../common/errors/parameter';
20
+ import {
21
+ ReclaimHostEmptyWrongKeyError,
22
+ ReclaimHostIsHostAlreadyError,
23
+ ReclaimHostNotAllowedError,
24
+ ReclaimHostNotSupportedError,
25
+ } from '../common/errors/reclaim-host-role-errors';
13
26
 
14
27
  import MembersCollection from './collection';
15
28
  import MembersRequest from './request';
16
29
  import MembersUtil from './util';
17
30
  import {ReceiveSlotManager} from '../multistream/receiveSlotManager';
18
31
  import {MediaRequestManager} from '../multistream/mediaRequestManager';
32
+ import {ServerRoleShape} from './types';
19
33
 
20
34
  /**
21
35
  * Members Update Event
@@ -96,8 +110,14 @@ export default class Members extends StatelessWebexPlugin {
96
110
  * @private
97
111
  * @memberof Members
98
112
  */
113
+
99
114
  // @ts-ignore
100
- this.membersRequest = new MembersRequest({}, options);
115
+ this.membersRequest = new MembersRequest(
116
+ {
117
+ meeting: attrs.meeting,
118
+ },
119
+ options
120
+ );
101
121
  /**
102
122
  * The Members Collection cache
103
123
  * @instance
@@ -282,6 +302,25 @@ export default class Members extends StatelessWebexPlugin {
282
302
  );
283
303
  }
284
304
 
305
+ /**
306
+ * clear member collection
307
+ * @returns {void}
308
+ * @private
309
+ * @memberof Members
310
+ */
311
+ clearMembers() {
312
+ this.membersCollection.reset();
313
+ Trigger.trigger(
314
+ this,
315
+ {
316
+ file: 'members',
317
+ function: 'clearMembers',
318
+ },
319
+ EVENT_TRIGGERS.MEMBERS_CLEAR,
320
+ {}
321
+ );
322
+ }
323
+
285
324
  /**
286
325
  * when new participant updates come in, both delta and full participants, update them in members collection
287
326
  * delta object in the event will have {updated, added} and full will be the full membersCollection
@@ -291,12 +330,15 @@ export default class Members extends StatelessWebexPlugin {
291
330
  * @private
292
331
  * @memberof Members
293
332
  */
294
- locusParticipantsUpdate(payload: {participants: object}) {
333
+ locusParticipantsUpdate(payload: {participants: object; isReplace?: boolean}) {
295
334
  if (payload) {
335
+ if (payload.isReplace) {
336
+ this.clearMembers();
337
+ }
296
338
  const delta = this.handleLocusInfoUpdatedParticipants(payload);
297
339
  const full = this.handleMembersUpdate(delta); // SDK should propagate the full list for both delta and non delta updates
298
340
 
299
- this.receiveSlotManager.updateMemberIds();
341
+ this.receiveSlotManager?.updateMemberIds();
300
342
 
301
343
  Trigger.trigger(
302
344
  this,
@@ -308,6 +350,7 @@ export default class Members extends StatelessWebexPlugin {
308
350
  {
309
351
  delta,
310
352
  full,
353
+ isReplace: !!payload.isReplace,
311
354
  }
312
355
  );
313
356
  }
@@ -733,15 +776,22 @@ export default class Members extends StatelessWebexPlugin {
733
776
  /**
734
777
  * Admits waiting members (invited guests to meeting)
735
778
  * @param {Array} memberIds
779
+ * @param {Object} sessionLocusUrls: {authorizingLocusUrl, mainLocusUrl}
736
780
  * @returns {Promise}
737
781
  * @public
738
782
  * @memberof Members
739
783
  */
740
- public admitMembers(memberIds: Array<any>) {
784
+ public admitMembers(
785
+ memberIds: Array<any>,
786
+ sessionLocusUrls?: {authorizingLocusUrl: string; mainLocusUrl: string}
787
+ ) {
741
788
  if (isEmpty(memberIds)) {
742
789
  return Promise.reject(new ParameterError('No member ids provided to admit.'));
743
790
  }
744
- const options = MembersUtil.generateAdmitMemberOptions(memberIds, this.locusUrl);
791
+ const options = {
792
+ sessionLocusUrls,
793
+ ...MembersUtil.generateAdmitMemberOptions(memberIds, this.locusUrl),
794
+ };
745
795
 
746
796
  return this.membersRequest.admitMember(options);
747
797
  }
@@ -773,11 +823,12 @@ export default class Members extends StatelessWebexPlugin {
773
823
  * Audio mutes another member in a meeting
774
824
  * @param {String} memberId
775
825
  * @param {boolean} [mute] default true
826
+ * @param {boolean} [isAudio] default true
776
827
  * @returns {Promise}
777
828
  * @public
778
829
  * @memberof Members
779
830
  */
780
- public muteMember(memberId: string, mute = true) {
831
+ public muteMember(memberId: string, mute = true, isAudio = true) {
781
832
  if (!this.locusUrl) {
782
833
  return Promise.reject(
783
834
  new ParameterError(
@@ -790,11 +841,51 @@ export default class Members extends StatelessWebexPlugin {
790
841
  new ParameterError('The member id must be defined to mute the member.')
791
842
  );
792
843
  }
793
- const options = MembersUtil.generateMuteMemberOptions(memberId, mute, this.locusUrl);
844
+ const options = MembersUtil.generateMuteMemberOptions(memberId, mute, this.locusUrl, isAudio);
794
845
 
795
846
  return this.membersRequest.muteMember(options);
796
847
  }
797
848
 
849
+ /**
850
+ * Assign role(s) to a member in the meeting
851
+ * @param {String} memberId
852
+ * @param {[ServerRoleShape]} roles - to assign an array of roles
853
+ * @returns {Promise}
854
+ * @public
855
+ * @memberof Members
856
+ */
857
+ public assignRoles(memberId: string, roles: Array<ServerRoleShape>) {
858
+ if (!this.locusUrl) {
859
+ return Promise.reject(
860
+ new ParameterError(
861
+ 'The associated locus url for this meetings members object must be defined.'
862
+ )
863
+ );
864
+ }
865
+ if (!memberId) {
866
+ return Promise.reject(
867
+ new ParameterError('The member id must be defined to assign the roles to a member.')
868
+ );
869
+ }
870
+ const options = MembersUtil.generateRoleAssignmentMemberOptions(memberId, roles, this.locusUrl);
871
+
872
+ return this.membersRequest.assignRolesMember(options).catch((error: any) => {
873
+ const errorCode = error.body?.errorCode;
874
+ switch (errorCode) {
875
+ case ASSIGN_ROLES_ERROR_CODES.ReclaimHostNotSupportedErrorCode:
876
+ return Promise.reject(new ReclaimHostNotSupportedError());
877
+ case ASSIGN_ROLES_ERROR_CODES.ReclaimHostNotAllowedErrorCode:
878
+ return Promise.reject(new ReclaimHostNotAllowedError());
879
+ case ASSIGN_ROLES_ERROR_CODES.ReclaimHostEmptyWrongKeyErrorCode:
880
+ return Promise.reject(new ReclaimHostEmptyWrongKeyError());
881
+ case ASSIGN_ROLES_ERROR_CODES.ReclaimHostIsHostAlreadyErrorCode:
882
+ return Promise.reject(new ReclaimHostIsHostAlreadyError());
883
+ default:
884
+ return Promise.reject(error);
885
+ }
886
+ });
887
+ }
888
+
798
889
  /**
799
890
  * Raise or lower the hand of a member in a meeting
800
891
  * @param {String} memberId
@@ -960,4 +1051,39 @@ export default class Members extends StatelessWebexPlugin {
960
1051
 
961
1052
  return csis;
962
1053
  }
1054
+
1055
+ /**
1056
+ * Edit display name of participants in a meeting
1057
+ * @param {string} memberId - id of the participant who is receiving request
1058
+ * @param {string} requestingParticipantId - id of the participant who is sending request (optional)
1059
+ * @param {string} [alias] - alias name
1060
+ * @returns {Promise}
1061
+ * @public
1062
+ * @memberof Members
1063
+ */
1064
+ public editDisplayName(memberId: string, requestingParticipantId: string, alias: string) {
1065
+ if (!this.locusUrl) {
1066
+ return Promise.reject(
1067
+ new ParameterError(
1068
+ 'The associated locus url for this meetings members object must be defined.'
1069
+ )
1070
+ );
1071
+ }
1072
+ if (!memberId) {
1073
+ return Promise.reject(
1074
+ new ParameterError('The member id must be defined to edit display name of the member.')
1075
+ );
1076
+ }
1077
+
1078
+ const {locusUrl} = this;
1079
+
1080
+ const options = MembersUtil.generateEditDisplayNameMemberOptions(
1081
+ memberId,
1082
+ requestingParticipantId,
1083
+ alias,
1084
+ locusUrl
1085
+ );
1086
+
1087
+ return this.membersRequest.editDisplayNameMember(options);
1088
+ }
963
1089
  }
@@ -5,12 +5,26 @@ import {MEETINGS} from '../constants';
5
5
  import ParameterError from '../common/errors/parameter';
6
6
 
7
7
  import MembersUtil from './util';
8
+ import MeetingUtil from '../meeting/util';
8
9
 
9
10
  /**
10
11
  * @class MembersRequest
11
12
  */
12
13
  export default class MembersRequest extends StatelessWebexPlugin {
13
14
  namespace = MEETINGS;
15
+ locusDeltaRequest: (options: object) => Promise<any>;
16
+
17
+ /**
18
+ * Constructor
19
+ * @param {Object} attrs
20
+ * @param {Object} options
21
+ */
22
+ constructor(attrs: {meeting: any}, options: object) {
23
+ const {meeting, ...otherAttrs} = attrs;
24
+ super(otherAttrs, options);
25
+
26
+ this.locusDeltaRequest = MeetingUtil.generateLocusDeltaRequest(meeting);
27
+ }
14
28
 
15
29
  /**
16
30
  *
@@ -36,8 +50,7 @@ export default class MembersRequest extends StatelessWebexPlugin {
36
50
  }
37
51
  const requestParams = MembersUtil.getAddMemberRequestParams(options);
38
52
 
39
- // @ts-ignore
40
- return this.request(requestParams);
53
+ return this.locusDeltaRequest(requestParams);
41
54
  }
42
55
 
43
56
  /**
@@ -55,10 +68,16 @@ export default class MembersRequest extends StatelessWebexPlugin {
55
68
  }
56
69
  const requestParams = MembersUtil.getAdmitMemberRequestParams(options);
57
70
 
58
- // @ts-ignore
59
- return this.request(requestParams);
71
+ return this.locusDeltaRequest(requestParams);
60
72
  }
61
73
 
74
+ /**
75
+ * Sends a request to remove a member
76
+ * @param {Object} options
77
+ * @param {String} options.locusUrl
78
+ * @param {String} options.memberId ID of member
79
+ * @returns {Promise}
80
+ */
62
81
  removeMember(options) {
63
82
  if (!options || !options.locusUrl || !options.memberId) {
64
83
  throw new ParameterError(
@@ -68,10 +87,16 @@ export default class MembersRequest extends StatelessWebexPlugin {
68
87
 
69
88
  const requestParams = MembersUtil.getRemoveMemberRequestParams(options);
70
89
 
71
- // @ts-ignore
72
- return this.request(requestParams);
90
+ return this.locusDeltaRequest(requestParams);
73
91
  }
74
92
 
93
+ /**
94
+ * Sends a request to mute a member
95
+ * @param {Object} options
96
+ * @param {String} options.locusUrl
97
+ * @param {String} options.memberId ID of member
98
+ * @returns {Promise}
99
+ */
75
100
  muteMember(options) {
76
101
  if (!options || !options.locusUrl || !options.memberId) {
77
102
  throw new ParameterError(
@@ -82,9 +107,35 @@ export default class MembersRequest extends StatelessWebexPlugin {
82
107
  const requestParams = MembersUtil.getMuteMemberRequestParams(options);
83
108
 
84
109
  // @ts-ignore
85
- return this.request(requestParams);
110
+ return this.locusDeltaRequest(requestParams);
111
+ }
112
+
113
+ /**
114
+ * Sends a request to the DTMF endpoint to send tones
115
+ * @param {Object} options
116
+ * @param {String} options.locusUrl
117
+ * @param {String} options.memberId ID of PSTN user
118
+ * @returns {Promise}
119
+ */
120
+ assignRolesMember(options: any) {
121
+ if (!options || !options.locusUrl || !options.memberId) {
122
+ throw new ParameterError(
123
+ 'memberId must be defined, and the associated locus url for this meeting object must be defined.'
124
+ );
125
+ }
126
+
127
+ const requestParams = MembersUtil.getRoleAssignmentMemberRequestParams(options);
128
+
129
+ return this.locusDeltaRequest(requestParams);
86
130
  }
87
131
 
132
+ /**
133
+ * Sends a request to raise or lower a member's hand
134
+ * @param {Object} options
135
+ * @param {String} options.locusUrl
136
+ * @param {String} options.memberId ID of member
137
+ * @returns {Promise}
138
+ */
88
139
  raiseOrLowerHandMember(options) {
89
140
  if (!options || !options.locusUrl || !options.memberId) {
90
141
  throw new ParameterError(
@@ -94,10 +145,16 @@ export default class MembersRequest extends StatelessWebexPlugin {
94
145
 
95
146
  const requestParams = MembersUtil.getRaiseHandMemberRequestParams(options);
96
147
 
97
- // @ts-ignore
98
- return this.request(requestParams);
148
+ return this.locusDeltaRequest(requestParams);
99
149
  }
100
150
 
151
+ /**
152
+ * Sends a request to lower all hands
153
+ * @param {Object} options
154
+ * @param {String} options.locusUrl
155
+ * @param {String} options.requestingParticipantId ID of requesting participant
156
+ * @returns {Promise}
157
+ */
101
158
  lowerAllHandsMember(options) {
102
159
  if (!options || !options.locusUrl || !options.requestingParticipantId) {
103
160
  throw new ParameterError(
@@ -107,10 +164,36 @@ export default class MembersRequest extends StatelessWebexPlugin {
107
164
 
108
165
  const requestParams = MembersUtil.getLowerAllHandsMemberRequestParams(options);
109
166
 
110
- // @ts-ignore
111
- return this.request(requestParams);
167
+ return this.locusDeltaRequest(requestParams);
168
+ }
169
+
170
+ /**
171
+ *
172
+ * @param {Object} options with format of {locusUrl: string, requestingParticipantId: string}
173
+ * @returns {Promise}
174
+ * @throws {Error} if the options are not valid and complete, must have requestingParticipantId AND locusUrl
175
+ * @memberof MembersRequest
176
+ */
177
+ editDisplayNameMember(options: {locusUrl: string; requestingParticipantId: string}) {
178
+ if (!options || !options.locusUrl || !options.requestingParticipantId) {
179
+ throw new ParameterError(
180
+ 'requestingParticipantId must be defined, and the associated locus url for this meeting object must be defined.'
181
+ );
182
+ }
183
+
184
+ const requestParams = MembersUtil.editDisplayNameMemberRequestParams(options);
185
+
186
+ return this.locusDeltaRequest(requestParams);
112
187
  }
113
188
 
189
+ /**
190
+ * Sends a request to raise or lower a member's hand
191
+ * @param {Object} options
192
+ * @param {String} options.locusUrl
193
+ * @param {String} options.memberId ID of member
194
+ * @param {String} options.moderator ID of moderator
195
+ * @returns {Promise}
196
+ */
114
197
  transferHostToMember(options) {
115
198
  if (!options || !options.locusUrl || !options.memberId || !options.moderator) {
116
199
  throw new ParameterError(
@@ -120,8 +203,7 @@ export default class MembersRequest extends StatelessWebexPlugin {
120
203
 
121
204
  const requestParams = MembersUtil.getTransferHostToMemberRequestParams(options);
122
205
 
123
- // @ts-ignore
124
- return this.request(requestParams);
206
+ return this.locusDeltaRequest(requestParams);
125
207
  }
126
208
 
127
209
  /**
@@ -150,8 +232,7 @@ export default class MembersRequest extends StatelessWebexPlugin {
150
232
 
151
233
  const requestParams = MembersUtil.generateSendDTMFRequestParams(options);
152
234
 
153
- // @ts-ignore
154
- return this.request(requestParams);
235
+ return this.locusDeltaRequest(requestParams);
155
236
  }
156
237
 
157
238
  /**
@@ -169,7 +250,6 @@ export default class MembersRequest extends StatelessWebexPlugin {
169
250
 
170
251
  const requestParams = MembersUtil.generateCancelInviteRequestParams(options);
171
252
 
172
- // @ts-ignore
173
- return this.request(requestParams);
253
+ return this.locusDeltaRequest(requestParams);
174
254
  }
175
255
  }
@@ -0,0 +1,29 @@
1
+ export enum ServerRoles {
2
+ Cohost = 'COHOST',
3
+ Moderator = 'MODERATOR',
4
+ Presenter = 'PRESENTER',
5
+ }
6
+
7
+ export type ServerRoleShape = {
8
+ type: ServerRoles;
9
+ hasRole: boolean;
10
+ hostKey?: string;
11
+ };
12
+
13
+ export type RoleAssignmentOptions = {
14
+ roles: Array<ServerRoleShape>;
15
+ locusUrl: string;
16
+ memberId: string;
17
+ };
18
+
19
+ export type RoleAssignmentBody = {
20
+ role: {
21
+ roles: Array<ServerRoleShape>;
22
+ };
23
+ };
24
+
25
+ export type RoleAssignmentRequest = {
26
+ method: string;
27
+ uri: string;
28
+ body: RoleAssignmentBody;
29
+ };