@webex/plugin-meetings 3.0.0-beta.7 → 3.0.0-beta.71

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 (506) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/breakouts/breakout.js +178 -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/edit-lock-error.js +52 -0
  8. package/dist/breakouts/edit-lock-error.js.map +1 -0
  9. package/dist/breakouts/index.js +843 -0
  10. package/dist/breakouts/index.js.map +1 -0
  11. package/dist/breakouts/request.js +78 -0
  12. package/dist/breakouts/request.js.map +1 -0
  13. package/dist/breakouts/utils.js +56 -0
  14. package/dist/breakouts/utils.js.map +1 -0
  15. package/dist/common/browser-detection.js +1 -20
  16. package/dist/common/browser-detection.js.map +1 -1
  17. package/dist/common/collection.js +5 -20
  18. package/dist/common/collection.js.map +1 -1
  19. package/dist/common/config.js +0 -7
  20. package/dist/common/config.js.map +1 -1
  21. package/dist/common/errors/captcha-error.js +10 -24
  22. package/dist/common/errors/captcha-error.js.map +1 -1
  23. package/dist/common/errors/intent-to-join.js +11 -24
  24. package/dist/common/errors/intent-to-join.js.map +1 -1
  25. package/dist/common/errors/join-meeting.js +12 -25
  26. package/dist/common/errors/join-meeting.js.map +1 -1
  27. package/dist/common/errors/media.js +10 -24
  28. package/dist/common/errors/media.js.map +1 -1
  29. package/dist/common/errors/parameter.js +5 -33
  30. package/dist/common/errors/parameter.js.map +1 -1
  31. package/dist/common/errors/password-error.js +10 -24
  32. package/dist/common/errors/password-error.js.map +1 -1
  33. package/dist/common/errors/permission.js +9 -23
  34. package/dist/common/errors/permission.js.map +1 -1
  35. package/dist/common/errors/reconnection-in-progress.js +0 -17
  36. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  37. package/dist/common/errors/reconnection.js +10 -24
  38. package/dist/common/errors/reconnection.js.map +1 -1
  39. package/dist/common/errors/stats.js +10 -24
  40. package/dist/common/errors/stats.js.map +1 -1
  41. package/dist/common/errors/webex-errors.js +6 -41
  42. package/dist/common/errors/webex-errors.js.map +1 -1
  43. package/dist/common/errors/webex-meetings-error.js +5 -25
  44. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  45. package/dist/common/events/events-scope.js +0 -22
  46. package/dist/common/events/events-scope.js.map +1 -1
  47. package/dist/common/events/events.js +0 -23
  48. package/dist/common/events/events.js.map +1 -1
  49. package/dist/common/events/trigger-proxy.js +0 -12
  50. package/dist/common/events/trigger-proxy.js.map +1 -1
  51. package/dist/common/events/util.js +0 -15
  52. package/dist/common/events/util.js.map +1 -1
  53. package/dist/common/logs/logger-config.js +0 -4
  54. package/dist/common/logs/logger-config.js.map +1 -1
  55. package/dist/common/logs/logger-proxy.js +1 -8
  56. package/dist/common/logs/logger-proxy.js.map +1 -1
  57. package/dist/common/logs/request.js +37 -60
  58. package/dist/common/logs/request.js.map +1 -1
  59. package/dist/common/queue.js +4 -14
  60. package/dist/common/queue.js.map +1 -1
  61. package/dist/config.js +6 -6
  62. package/dist/config.js.map +1 -1
  63. package/dist/constants.js +143 -52
  64. package/dist/constants.js.map +1 -1
  65. package/dist/controls-options-manager/constants.js +14 -0
  66. package/dist/controls-options-manager/constants.js.map +1 -0
  67. package/dist/controls-options-manager/enums.js +16 -0
  68. package/dist/controls-options-manager/enums.js.map +1 -0
  69. package/dist/controls-options-manager/index.js +261 -0
  70. package/dist/controls-options-manager/index.js.map +1 -0
  71. package/dist/controls-options-manager/util.js +39 -0
  72. package/dist/controls-options-manager/util.js.map +1 -0
  73. package/dist/index.js +11 -18
  74. package/dist/index.js.map +1 -1
  75. package/dist/locus-info/controlsUtils.js +31 -29
  76. package/dist/locus-info/controlsUtils.js.map +1 -1
  77. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  78. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  79. package/dist/locus-info/fullState.js +0 -15
  80. package/dist/locus-info/fullState.js.map +1 -1
  81. package/dist/locus-info/hostUtils.js +4 -12
  82. package/dist/locus-info/hostUtils.js.map +1 -1
  83. package/dist/locus-info/index.js +237 -198
  84. package/dist/locus-info/index.js.map +1 -1
  85. package/dist/locus-info/infoUtils.js +3 -37
  86. package/dist/locus-info/infoUtils.js.map +1 -1
  87. package/dist/locus-info/mediaSharesUtils.js +12 -38
  88. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  89. package/dist/locus-info/parser.js +92 -118
  90. package/dist/locus-info/parser.js.map +1 -1
  91. package/dist/locus-info/selfUtils.js +80 -89
  92. package/dist/locus-info/selfUtils.js.map +1 -1
  93. package/dist/media/index.js +56 -146
  94. package/dist/media/index.js.map +1 -1
  95. package/dist/media/properties.js +83 -117
  96. package/dist/media/properties.js.map +1 -1
  97. package/dist/media/util.js +2 -9
  98. package/dist/media/util.js.map +1 -1
  99. package/dist/mediaQualityMetrics/config.js +505 -495
  100. package/dist/mediaQualityMetrics/config.js.map +1 -1
  101. package/dist/meeting/in-meeting-actions.js +31 -14
  102. package/dist/meeting/in-meeting-actions.js.map +1 -1
  103. package/dist/meeting/index.js +2225 -2244
  104. package/dist/meeting/index.js.map +1 -1
  105. package/dist/meeting/muteState.js +102 -100
  106. package/dist/meeting/muteState.js.map +1 -1
  107. package/dist/meeting/request.js +308 -264
  108. package/dist/meeting/request.js.map +1 -1
  109. package/dist/meeting/request.type.js +7 -0
  110. package/dist/meeting/request.type.js.map +1 -0
  111. package/dist/meeting/state.js +21 -31
  112. package/dist/meeting/state.js.map +1 -1
  113. package/dist/meeting/util.js +63 -217
  114. package/dist/meeting/util.js.map +1 -1
  115. package/dist/meeting-info/collection.js +6 -25
  116. package/dist/meeting-info/collection.js.map +1 -1
  117. package/dist/meeting-info/index.js +14 -32
  118. package/dist/meeting-info/index.js.map +1 -1
  119. package/dist/meeting-info/meeting-info-v2.js +193 -268
  120. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  121. package/dist/meeting-info/request.js +3 -15
  122. package/dist/meeting-info/request.js.map +1 -1
  123. package/dist/meeting-info/util.js +98 -183
  124. package/dist/meeting-info/util.js.map +1 -1
  125. package/dist/meeting-info/utilv2.js +137 -228
  126. package/dist/meeting-info/utilv2.js.map +1 -1
  127. package/dist/meetings/collection.js +26 -19
  128. package/dist/meetings/collection.js.map +1 -1
  129. package/dist/meetings/index.js +565 -552
  130. package/dist/meetings/index.js.map +1 -1
  131. package/dist/meetings/request.js +26 -41
  132. package/dist/meetings/request.js.map +1 -1
  133. package/dist/meetings/util.js +151 -155
  134. package/dist/meetings/util.js.map +1 -1
  135. package/dist/member/index.js +100 -85
  136. package/dist/member/index.js.map +1 -1
  137. package/dist/member/types.js +15 -0
  138. package/dist/member/types.js.map +1 -0
  139. package/dist/member/util.js +90 -68
  140. package/dist/member/util.js.map +1 -1
  141. package/dist/members/collection.js +13 -12
  142. package/dist/members/collection.js.map +1 -1
  143. package/dist/members/index.js +152 -204
  144. package/dist/members/index.js.map +1 -1
  145. package/dist/members/request.js +35 -39
  146. package/dist/members/request.js.map +1 -1
  147. package/dist/members/types.js +15 -0
  148. package/dist/members/types.js.map +1 -0
  149. package/dist/members/util.js +76 -46
  150. package/dist/members/util.js.map +1 -1
  151. package/dist/metrics/config.js +4 -14
  152. package/dist/metrics/config.js.map +1 -1
  153. package/dist/metrics/constants.js +1 -6
  154. package/dist/metrics/constants.js.map +1 -1
  155. package/dist/metrics/index.js +59 -156
  156. package/dist/metrics/index.js.map +1 -1
  157. package/dist/multistream/mediaRequestManager.js +116 -52
  158. package/dist/multistream/mediaRequestManager.js.map +1 -1
  159. package/dist/multistream/receiveSlot.js +58 -65
  160. package/dist/multistream/receiveSlot.js.map +1 -1
  161. package/dist/multistream/receiveSlotManager.js +58 -93
  162. package/dist/multistream/receiveSlotManager.js.map +1 -1
  163. package/dist/multistream/remoteMedia.js +55 -74
  164. package/dist/multistream/remoteMedia.js.map +1 -1
  165. package/dist/multistream/remoteMediaGroup.js +6 -40
  166. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  167. package/dist/multistream/remoteMediaManager.js +466 -442
  168. package/dist/multistream/remoteMediaManager.js.map +1 -1
  169. package/dist/networkQualityMonitor/index.js +40 -59
  170. package/dist/networkQualityMonitor/index.js.map +1 -1
  171. package/dist/personal-meeting-room/index.js +21 -45
  172. package/dist/personal-meeting-room/index.js.map +1 -1
  173. package/dist/personal-meeting-room/request.js +1 -31
  174. package/dist/personal-meeting-room/request.js.map +1 -1
  175. package/dist/personal-meeting-room/util.js +0 -13
  176. package/dist/personal-meeting-room/util.js.map +1 -1
  177. package/dist/reachability/index.js +192 -191
  178. package/dist/reachability/index.js.map +1 -1
  179. package/dist/reachability/request.js +15 -23
  180. package/dist/reachability/request.js.map +1 -1
  181. package/dist/reactions/constants.js +13 -0
  182. package/dist/reactions/constants.js.map +1 -0
  183. package/dist/reactions/reactions.js +109 -0
  184. package/dist/reactions/reactions.js.map +1 -0
  185. package/dist/reactions/reactions.type.js +36 -0
  186. package/dist/reactions/reactions.type.js.map +1 -0
  187. package/dist/reconnection-manager/index.js +342 -460
  188. package/dist/reconnection-manager/index.js.map +1 -1
  189. package/dist/recording-controller/enums.js +17 -0
  190. package/dist/recording-controller/enums.js.map +1 -0
  191. package/dist/recording-controller/index.js +343 -0
  192. package/dist/recording-controller/index.js.map +1 -0
  193. package/dist/recording-controller/util.js +63 -0
  194. package/dist/recording-controller/util.js.map +1 -0
  195. package/dist/roap/index.js +48 -70
  196. package/dist/roap/index.js.map +1 -1
  197. package/dist/roap/request.js +143 -131
  198. package/dist/roap/request.js.map +1 -1
  199. package/dist/roap/turnDiscovery.js +91 -98
  200. package/dist/roap/turnDiscovery.js.map +1 -1
  201. package/dist/statsAnalyzer/global.js +1 -95
  202. package/dist/statsAnalyzer/global.js.map +1 -1
  203. package/dist/statsAnalyzer/index.js +372 -455
  204. package/dist/statsAnalyzer/index.js.map +1 -1
  205. package/dist/statsAnalyzer/mqaUtil.js +143 -87
  206. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  207. package/dist/transcription/index.js +22 -47
  208. package/dist/transcription/index.js.map +1 -1
  209. package/dist/types/breakouts/breakout.d.ts +8 -0
  210. package/dist/types/breakouts/collection.d.ts +5 -0
  211. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  212. package/dist/types/breakouts/index.d.ts +5 -0
  213. package/dist/types/breakouts/request.d.ts +22 -0
  214. package/dist/types/breakouts/utils.d.ts +8 -0
  215. package/dist/types/common/browser-detection.d.ts +9 -0
  216. package/dist/types/common/collection.d.ts +48 -0
  217. package/dist/types/common/config.d.ts +2 -0
  218. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  219. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  220. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  221. package/dist/types/common/errors/media.d.ts +15 -0
  222. package/dist/types/common/errors/parameter.d.ts +15 -0
  223. package/dist/types/common/errors/password-error.d.ts +15 -0
  224. package/dist/types/common/errors/permission.d.ts +14 -0
  225. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  226. package/dist/types/common/errors/reconnection.d.ts +15 -0
  227. package/dist/types/common/errors/stats.d.ts +15 -0
  228. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  229. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  230. package/dist/types/common/events/events-scope.d.ts +17 -0
  231. package/dist/types/common/events/events.d.ts +12 -0
  232. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  233. package/dist/types/common/events/util.d.ts +2 -0
  234. package/dist/types/common/logs/logger-config.d.ts +2 -0
  235. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  236. package/dist/types/common/logs/request.d.ts +34 -0
  237. package/dist/types/common/queue.d.ts +32 -0
  238. package/dist/types/config.d.ts +77 -0
  239. package/dist/types/constants.d.ts +944 -0
  240. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  241. package/dist/types/controls-options-manager/enums.d.ts +6 -0
  242. package/dist/types/controls-options-manager/index.d.ts +128 -0
  243. package/dist/types/controls-options-manager/util.d.ts +9 -0
  244. package/dist/types/index.d.ts +6 -0
  245. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  246. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  247. package/dist/types/locus-info/fullState.d.ts +2 -0
  248. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  249. package/dist/types/locus-info/index.d.ts +276 -0
  250. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  251. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  252. package/dist/types/locus-info/parser.d.ts +212 -0
  253. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  254. package/dist/types/media/index.d.ts +32 -0
  255. package/dist/types/media/properties.d.ts +108 -0
  256. package/dist/types/media/util.d.ts +2 -0
  257. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  258. package/dist/types/meeting/in-meeting-actions.d.ts +101 -0
  259. package/dist/types/meeting/index.d.ts +1720 -0
  260. package/dist/types/meeting/muteState.d.ts +132 -0
  261. package/dist/types/meeting/request.d.ts +271 -0
  262. package/dist/types/meeting/request.type.d.ts +11 -0
  263. package/dist/types/meeting/state.d.ts +9 -0
  264. package/dist/types/meeting/util.d.ts +2 -0
  265. package/dist/types/meeting-info/collection.d.ts +20 -0
  266. package/dist/types/meeting-info/index.d.ts +57 -0
  267. package/dist/types/meeting-info/meeting-info-v2.d.ts +93 -0
  268. package/dist/types/meeting-info/request.d.ts +22 -0
  269. package/dist/types/meeting-info/util.d.ts +2 -0
  270. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  271. package/dist/types/meetings/collection.d.ts +31 -0
  272. package/dist/types/meetings/index.d.ts +315 -0
  273. package/dist/types/meetings/request.d.ts +27 -0
  274. package/dist/types/meetings/util.d.ts +18 -0
  275. package/dist/types/member/index.d.ts +156 -0
  276. package/dist/types/member/types.d.ts +21 -0
  277. package/dist/types/member/util.d.ts +2 -0
  278. package/dist/types/members/collection.d.ts +29 -0
  279. package/dist/types/members/index.d.ts +343 -0
  280. package/dist/types/members/request.d.ts +58 -0
  281. package/dist/types/members/types.d.ts +24 -0
  282. package/dist/types/members/util.d.ts +2 -0
  283. package/dist/types/metrics/config.d.ts +171 -0
  284. package/dist/types/metrics/constants.d.ts +53 -0
  285. package/dist/types/metrics/index.d.ts +152 -0
  286. package/dist/types/multistream/mediaRequestManager.d.ts +68 -0
  287. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  288. package/dist/types/multistream/receiveSlotManager.d.ts +49 -0
  289. package/dist/types/multistream/remoteMedia.d.ts +100 -0
  290. package/dist/types/multistream/remoteMediaGroup.d.ts +56 -0
  291. package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
  292. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  293. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  294. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  295. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  296. package/dist/types/reachability/index.d.ts +152 -0
  297. package/dist/types/reachability/request.d.ts +37 -0
  298. package/dist/types/reactions/constants.d.ts +3 -0
  299. package/dist/types/reactions/reactions.d.ts +4 -0
  300. package/dist/types/reactions/reactions.type.d.ts +52 -0
  301. package/dist/types/reconnection-manager/index.d.ts +126 -0
  302. package/dist/types/recording-controller/enums.d.ts +7 -0
  303. package/dist/types/recording-controller/index.d.ts +193 -0
  304. package/dist/types/recording-controller/util.d.ts +13 -0
  305. package/dist/types/roap/index.d.ts +77 -0
  306. package/dist/types/roap/request.d.ts +38 -0
  307. package/dist/types/roap/turnDiscovery.d.ts +74 -0
  308. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  309. package/dist/types/statsAnalyzer/index.d.ts +195 -0
  310. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  311. package/dist/types/transcription/index.d.ts +64 -0
  312. package/internal-README.md +7 -6
  313. package/package.json +27 -21
  314. package/src/breakouts/README.md +219 -0
  315. package/src/breakouts/breakout.ts +153 -0
  316. package/src/breakouts/collection.ts +19 -0
  317. package/src/breakouts/edit-lock-error.ts +25 -0
  318. package/src/breakouts/index.ts +745 -0
  319. package/src/breakouts/request.ts +55 -0
  320. package/src/breakouts/utils.ts +44 -0
  321. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  322. package/src/common/collection.ts +9 -7
  323. package/src/common/{config.js → config.ts} +1 -1
  324. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  325. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  326. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  327. package/src/common/errors/{media.js → media.ts} +11 -7
  328. package/src/common/errors/parameter.ts +11 -7
  329. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  330. package/src/common/errors/{permission.js → permission.ts} +10 -6
  331. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  332. package/src/common/errors/{stats.js → stats.ts} +11 -7
  333. package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -7
  334. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  335. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  336. package/src/common/events/{events.js → events.ts} +5 -1
  337. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  338. package/src/common/events/{util.js → util.ts} +2 -3
  339. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  340. package/src/common/logs/logger-proxy.ts +44 -0
  341. package/src/common/logs/{request.js → request.ts} +22 -9
  342. package/src/common/queue.ts +1 -2
  343. package/src/{config.js → config.ts} +17 -12
  344. package/src/constants.ts +92 -5
  345. package/src/controls-options-manager/constants.ts +5 -0
  346. package/src/controls-options-manager/enums.ts +7 -0
  347. package/src/controls-options-manager/index.ts +240 -0
  348. package/src/controls-options-manager/util.ts +30 -0
  349. package/src/index.js +4 -1
  350. package/src/locus-info/controlsUtils.ts +141 -0
  351. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  352. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  353. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  354. package/src/locus-info/{index.js → index.ts} +211 -71
  355. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  356. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
  357. package/src/locus-info/{parser.js → parser.ts} +67 -79
  358. package/src/locus-info/{selfUtils.js → selfUtils.ts} +183 -67
  359. package/src/media/{index.js → index.ts} +179 -176
  360. package/src/media/{properties.js → properties.ts} +60 -37
  361. package/src/media/{util.js → util.ts} +2 -2
  362. package/src/mediaQualityMetrics/config.ts +384 -0
  363. package/src/meeting/in-meeting-actions.ts +67 -3
  364. package/src/meeting/{index.js → index.ts} +2605 -1605
  365. package/src/meeting/{muteState.js → muteState.ts} +138 -73
  366. package/src/meeting/{request.js → request.ts} +326 -142
  367. package/src/meeting/request.type.ts +13 -0
  368. package/src/meeting/{state.js → state.ts} +50 -35
  369. package/src/meeting/{util.js → util.ts} +131 -115
  370. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  371. package/src/meeting-info/{index.js → index.ts} +42 -36
  372. package/src/meeting-info/meeting-info-v2.ts +273 -0
  373. package/src/meeting-info/{request.js → request.ts} +14 -4
  374. package/src/meeting-info/{util.js → util.ts} +60 -51
  375. package/src/meeting-info/{utilv2.js → utilv2.ts} +65 -58
  376. package/src/meetings/{collection.js → collection.ts} +26 -3
  377. package/src/meetings/index.ts +1275 -0
  378. package/src/meetings/{request.js → request.ts} +34 -25
  379. package/src/meetings/{util.js → util.ts} +99 -33
  380. package/src/member/{index.js → index.ts} +124 -56
  381. package/src/member/types.ts +24 -0
  382. package/src/member/{util.js → util.ts} +105 -25
  383. package/src/members/{collection.js → collection.ts} +10 -2
  384. package/src/members/{index.js → index.ts} +281 -144
  385. package/src/members/{request.js → request.ts} +80 -16
  386. package/src/members/types.ts +28 -0
  387. package/src/members/{util.js → util.ts} +108 -55
  388. package/src/metrics/{config.js → config.ts} +255 -92
  389. package/src/metrics/{constants.js → constants.ts} +0 -6
  390. package/src/metrics/{index.js → index.ts} +110 -94
  391. package/src/multistream/mediaRequestManager.ts +144 -40
  392. package/src/multistream/receiveSlot.ts +69 -26
  393. package/src/multistream/receiveSlotManager.ts +50 -38
  394. package/src/multistream/remoteMedia.ts +30 -4
  395. package/src/multistream/remoteMediaGroup.ts +4 -3
  396. package/src/multistream/remoteMediaManager.ts +230 -66
  397. package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
  398. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  399. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  400. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  401. package/src/reachability/{index.js → index.ts} +157 -94
  402. package/src/reachability/request.ts +46 -35
  403. package/src/reactions/constants.ts +4 -0
  404. package/src/reactions/reactions.ts +104 -0
  405. package/src/reactions/reactions.type.ts +62 -0
  406. package/src/reconnection-manager/{index.js → index.ts} +228 -120
  407. package/src/recording-controller/enums.ts +8 -0
  408. package/src/recording-controller/index.ts +315 -0
  409. package/src/recording-controller/util.ts +58 -0
  410. package/src/roap/{index.js → index.ts} +77 -60
  411. package/src/roap/request.ts +172 -0
  412. package/src/roap/turnDiscovery.ts +81 -41
  413. package/src/statsAnalyzer/global.ts +37 -0
  414. package/src/statsAnalyzer/index.ts +1242 -0
  415. package/src/statsAnalyzer/mqaUtil.ts +291 -0
  416. package/src/transcription/{index.js → index.ts} +46 -39
  417. package/test/integration/spec/converged-space-meetings.js +176 -0
  418. package/test/integration/spec/journey.js +665 -464
  419. package/test/integration/spec/space-meeting.js +320 -206
  420. package/test/integration/spec/transcription.js +7 -8
  421. package/test/unit/spec/breakouts/breakout.ts +178 -0
  422. package/test/unit/spec/breakouts/collection.ts +15 -0
  423. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  424. package/test/unit/spec/breakouts/index.ts +1252 -0
  425. package/test/unit/spec/breakouts/request.ts +104 -0
  426. package/test/unit/spec/breakouts/utils.js +54 -0
  427. package/test/unit/spec/common/browser-detection.js +9 -28
  428. package/test/unit/spec/controls-options-manager/index.js +204 -0
  429. package/test/unit/spec/controls-options-manager/util.js +86 -0
  430. package/test/unit/spec/fixture/locus.js +92 -90
  431. package/test/unit/spec/locus-info/controlsUtils.js +133 -34
  432. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  433. package/test/unit/spec/locus-info/index.js +303 -2
  434. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  435. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  436. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  437. package/test/unit/spec/locus-info/parser.js +3 -9
  438. package/test/unit/spec/locus-info/selfConstant.js +101 -103
  439. package/test/unit/spec/locus-info/selfUtils.js +165 -12
  440. package/test/unit/spec/media/index.ts +72 -8
  441. package/test/unit/spec/media/properties.ts +9 -9
  442. package/test/unit/spec/meeting/in-meeting-actions.ts +29 -2
  443. package/test/unit/spec/meeting/index.js +2503 -802
  444. package/test/unit/spec/meeting/muteState.js +146 -61
  445. package/test/unit/spec/meeting/request.js +141 -43
  446. package/test/unit/spec/meeting/utils.js +135 -164
  447. package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
  448. package/test/unit/spec/meeting-info/request.js +7 -9
  449. package/test/unit/spec/meeting-info/util.js +11 -12
  450. package/test/unit/spec/meeting-info/utilv2.js +110 -74
  451. package/test/unit/spec/meetings/collection.js +15 -1
  452. package/test/unit/spec/meetings/index.js +622 -263
  453. package/test/unit/spec/meetings/utils.js +65 -14
  454. package/test/unit/spec/member/index.js +24 -1
  455. package/test/unit/spec/member/util.js +359 -32
  456. package/test/unit/spec/members/index.js +294 -54
  457. package/test/unit/spec/members/request.js +50 -20
  458. package/test/unit/spec/members/utils.js +147 -4
  459. package/test/unit/spec/metrics/index.js +16 -21
  460. package/test/unit/spec/multistream/mediaRequestManager.ts +369 -68
  461. package/test/unit/spec/multistream/receiveSlot.ts +76 -17
  462. package/test/unit/spec/multistream/receiveSlotManager.ts +60 -38
  463. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  464. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  465. package/test/unit/spec/multistream/remoteMediaManager.ts +549 -65
  466. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  467. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  468. package/test/unit/spec/reachability/index.ts +176 -27
  469. package/test/unit/spec/reachability/request.js +66 -0
  470. package/test/unit/spec/reconnection-manager/index.js +58 -30
  471. package/test/unit/spec/recording-controller/index.js +231 -0
  472. package/test/unit/spec/recording-controller/util.js +102 -0
  473. package/test/unit/spec/roap/index.ts +12 -8
  474. package/test/unit/spec/roap/request.ts +217 -0
  475. package/test/unit/spec/roap/turnDiscovery.ts +72 -49
  476. package/test/unit/spec/stats-analyzer/index.js +108 -57
  477. package/test/utils/cmr.js +44 -42
  478. package/test/utils/constants.js +9 -0
  479. package/test/utils/testUtils.js +98 -77
  480. package/test/utils/webex-config.js +22 -18
  481. package/test/utils/webex-test-users.js +57 -50
  482. package/tsconfig.json +6 -0
  483. package/dist/media/internal-media-core-wrapper.js +0 -22
  484. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  485. package/dist/meeting/effectsState.js +0 -327
  486. package/dist/meeting/effectsState.js.map +0 -1
  487. package/dist/multistream/multistreamMedia.js +0 -116
  488. package/dist/multistream/multistreamMedia.js.map +0 -1
  489. package/dist/peer-connection-manager/util.js +0 -124
  490. package/dist/peer-connection-manager/util.js.map +0 -1
  491. package/src/common/logs/logger-proxy.js +0 -33
  492. package/src/locus-info/controlsUtils.js +0 -102
  493. package/src/media/internal-media-core-wrapper.ts +0 -9
  494. package/src/mediaQualityMetrics/config.js +0 -382
  495. package/src/meeting/effectsState.js +0 -205
  496. package/src/meeting-info/meeting-info-v2.js +0 -255
  497. package/src/meetings/index.js +0 -1015
  498. package/src/multistream/multistreamMedia.ts +0 -92
  499. package/src/peer-connection-manager/util.ts +0 -117
  500. package/src/roap/request.js +0 -127
  501. package/src/statsAnalyzer/global.js +0 -133
  502. package/src/statsAnalyzer/index.js +0 -1006
  503. package/src/statsAnalyzer/mqaUtil.js +0 -173
  504. package/test/unit/spec/meeting/effectsState.js +0 -291
  505. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
  506. /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
@@ -2,6 +2,7 @@
2
2
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
3
  */
4
4
  import {isEmpty} from 'lodash';
5
+ // @ts-ignore
5
6
  import {StatelessWebexPlugin} from '@webex/webex-core';
6
7
 
7
8
  import {MEETINGS, EVENT_TRIGGERS, FLOOR_ACTION, CONTENT, WHITEBOARD} from '../constants';
@@ -13,53 +14,72 @@ import ParameterError from '../common/errors/parameter';
13
14
  import MembersCollection from './collection';
14
15
  import MembersRequest from './request';
15
16
  import MembersUtil from './util';
17
+ import {ReceiveSlotManager} from '../multistream/receiveSlotManager';
18
+ import {MediaRequestManager} from '../multistream/mediaRequestManager';
19
+ import {ServerRoleShape} from './types';
16
20
 
17
21
  /**
18
- * Members Update Event
19
- * Emitted when something in the roster list needs to be updated
20
- * @event members:update
21
- * @instance
22
- * @property {Object} delta the changes to the members list
23
- * @property {Array} delta.updated array only the updates, includes removals, as they will have updated status and member properties
24
- * @property {Array} delta.added array added members to the meeting
25
- * @property {Array} full array the full members collection
26
- * @memberof Members
27
- */
22
+ * Members Update Event
23
+ * Emitted when something in the roster list needs to be updated
24
+ * @event members:update
25
+ * @instance
26
+ * @property {Object} delta the changes to the members list
27
+ * @property {Array} delta.updated array only the updates, includes removals, as they will have updated status and member properties
28
+ * @property {Array} delta.added array added members to the meeting
29
+ * @property {Array} full array the full members collection
30
+ * @memberof Members
31
+ */
28
32
 
29
33
  /**
30
- * Members Content Update Event
31
- * Emitted when who is sharing changes
32
- * @event members:content:update
33
- * @instance
34
- * @property {String} activeContentSharingId
35
- * @property {String} endedContentSharingId
36
- * @memberof Members
37
- */
34
+ * Members Content Update Event
35
+ * Emitted when who is sharing changes
36
+ * @event members:content:update
37
+ * @instance
38
+ * @property {String} activeContentSharingId
39
+ * @property {String} endedContentSharingId
40
+ * @memberof Members
41
+ */
38
42
 
39
43
  /**
40
- * Members Host Update Event
41
- * Emitted when who is the host changes
42
- * @event members:host:update
43
- * @instance
44
- * @property {String} activeHostId
45
- * @property {String} endedHostId
46
- * @memberof Members
47
- */
44
+ * Members Host Update Event
45
+ * Emitted when who is the host changes
46
+ * @event members:host:update
47
+ * @instance
48
+ * @property {String} activeHostId
49
+ * @property {String} endedHostId
50
+ * @memberof Members
51
+ */
48
52
 
49
53
  /**
50
- * Members Self Update Event
51
- * Emitted when who is the self changes
52
- * @event members:self:update
53
- * @instance
54
- * @property {String} activeSelfId
55
- * @property {String} endedSelfId
56
- * @memberof Members
57
- */
54
+ * Members Self Update Event
55
+ * Emitted when who is the self changes
56
+ * @event members:self:update
57
+ * @instance
58
+ * @property {String} activeSelfId
59
+ * @property {String} endedSelfId
60
+ * @memberof Members
61
+ */
58
62
 
59
63
  /**
60
64
  * @class Members
61
65
  */
62
66
  export default class Members extends StatelessWebexPlugin {
67
+ hostId: any;
68
+ locusUrl: any;
69
+ mediaShareContentId: any;
70
+ mediaShareWhiteboardId: any;
71
+ membersCollection: any;
72
+ membersRequest: any;
73
+ receiveSlotManager: ReceiveSlotManager;
74
+ mediaRequestManagers: {
75
+ audio: MediaRequestManager;
76
+ video: MediaRequestManager;
77
+ };
78
+
79
+ recordingId: any;
80
+ selfId: any;
81
+ type: any;
82
+
63
83
  namespace = MEETINGS;
64
84
 
65
85
  /**
@@ -68,7 +88,7 @@ export default class Members extends StatelessWebexPlugin {
68
88
  * @param {Object} options
69
89
  * @memberof Members
70
90
  */
71
- constructor(attrs, options) {
91
+ constructor(attrs: any, options: object) {
72
92
  super({}, options);
73
93
  /**
74
94
  * The Members Request object to interact with server
@@ -76,7 +96,8 @@ export default class Members extends StatelessWebexPlugin {
76
96
  * @type {MembersRequest}
77
97
  * @private
78
98
  * @memberof Members
79
- */
99
+ */
100
+ // @ts-ignore
80
101
  this.membersRequest = new MembersRequest({}, options);
81
102
  /**
82
103
  * The Members Collection cache
@@ -84,7 +105,7 @@ export default class Members extends StatelessWebexPlugin {
84
105
  * @type {MembersCollection}
85
106
  * @private
86
107
  * @memberof Members
87
- */
108
+ */
88
109
  this.membersCollection = new MembersCollection();
89
110
  /**
90
111
  * The current locus url for the active meeting
@@ -92,7 +113,7 @@ export default class Members extends StatelessWebexPlugin {
92
113
  * @type {String}
93
114
  * @private
94
115
  * @memberof Members
95
- */
116
+ */
96
117
  this.locusUrl = attrs.locusUrl || null;
97
118
  /**
98
119
  * The current hostId for the meeting
@@ -100,7 +121,7 @@ export default class Members extends StatelessWebexPlugin {
100
121
  * @type {String}
101
122
  * @private
102
123
  * @memberof Members
103
- */
124
+ */
104
125
  this.hostId = null;
105
126
  /**
106
127
  * The current type for the meeting, could be MEETING or CALL
@@ -108,7 +129,7 @@ export default class Members extends StatelessWebexPlugin {
108
129
  * @type {String}
109
130
  * @private
110
131
  * @memberof Members
111
- */
132
+ */
112
133
  this.type = null;
113
134
  /**
114
135
  * Locus has a self object, sent individually to the client
@@ -122,7 +143,7 @@ export default class Members extends StatelessWebexPlugin {
122
143
  * @type {String}
123
144
  * @private
124
145
  * @memberof Members
125
- */
146
+ */
126
147
  this.selfId = null;
127
148
  /**
128
149
  * The current mediaShareContentId for the meeting
@@ -130,7 +151,7 @@ export default class Members extends StatelessWebexPlugin {
130
151
  * @type {String}
131
152
  * @private
132
153
  * @memberof Members
133
- */
154
+ */
134
155
  this.mediaShareContentId = null;
135
156
  /**
136
157
  * The current mediaShareWhiteboardId for the meeting
@@ -138,7 +159,7 @@ export default class Members extends StatelessWebexPlugin {
138
159
  * @type {String}
139
160
  * @private
140
161
  * @memberof Members
141
- */
162
+ */
142
163
  this.mediaShareWhiteboardId = null;
143
164
  /**
144
165
  * The current recordingId for the meeting, if it exists
@@ -146,7 +167,7 @@ export default class Members extends StatelessWebexPlugin {
146
167
  * @type {String}
147
168
  * @private
148
169
  * @memberof Members
149
- */
170
+ */
150
171
  this.recordingId = null;
151
172
 
152
173
  /**
@@ -171,7 +192,7 @@ export default class Members extends StatelessWebexPlugin {
171
192
  * @private
172
193
  * @memberof Members
173
194
  */
174
- locusSelfUpdate(payload) {
195
+ locusSelfUpdate(payload: {newSelf: any; oldSelf: any}) {
175
196
  let newSelfId = null;
176
197
  let oldSelfId = null;
177
198
 
@@ -202,12 +223,12 @@ export default class Members extends StatelessWebexPlugin {
202
223
  this,
203
224
  {
204
225
  file: 'members',
205
- function: 'locusSelfUpdate'
226
+ function: 'locusSelfUpdate',
206
227
  },
207
228
  EVENT_TRIGGERS.MEMBERS_SELF_UPDATE,
208
229
  {
209
230
  activeSelfId: newSelfId,
210
- endedSelfId: oldSelfId
231
+ endedSelfId: oldSelfId,
211
232
  }
212
233
  );
213
234
  }
@@ -221,7 +242,7 @@ export default class Members extends StatelessWebexPlugin {
221
242
  * @private
222
243
  * @memberof Members
223
244
  */
224
- locusHostUpdate(payload) {
245
+ locusHostUpdate(payload: {newHost: any; oldHost: any}) {
225
246
  let newHostId = null;
226
247
  let oldHostId = null;
227
248
 
@@ -252,16 +273,35 @@ export default class Members extends StatelessWebexPlugin {
252
273
  this,
253
274
  {
254
275
  file: 'members',
255
- function: 'locusHostUpdate'
276
+ function: 'locusHostUpdate',
256
277
  },
257
278
  EVENT_TRIGGERS.MEMBERS_HOST_UPDATE,
258
279
  {
259
280
  activeHostId: newHostId,
260
- endedHostId: oldHostId
281
+ endedHostId: oldHostId,
261
282
  }
262
283
  );
263
284
  }
264
285
 
286
+ /**
287
+ * clear member collection
288
+ * @returns {void}
289
+ * @private
290
+ * @memberof Members
291
+ */
292
+ clearMembers() {
293
+ this.membersCollection.reset();
294
+ Trigger.trigger(
295
+ this,
296
+ {
297
+ file: 'members',
298
+ function: 'clearMembers',
299
+ },
300
+ EVENT_TRIGGERS.MEMBERS_CLEAR,
301
+ {}
302
+ );
303
+ }
304
+
265
305
  /**
266
306
  * when new participant updates come in, both delta and full participants, update them in members collection
267
307
  * delta object in the event will have {updated, added} and full will be the full membersCollection
@@ -271,21 +311,27 @@ export default class Members extends StatelessWebexPlugin {
271
311
  * @private
272
312
  * @memberof Members
273
313
  */
274
- locusParticipantsUpdate(payload) {
314
+ locusParticipantsUpdate(payload: {participants: object; isReplace?: boolean}) {
275
315
  if (payload) {
316
+ if (payload.isReplace) {
317
+ this.clearMembers();
318
+ }
276
319
  const delta = this.handleLocusInfoUpdatedParticipants(payload);
277
320
  const full = this.handleMembersUpdate(delta); // SDK should propagate the full list for both delta and non delta updates
278
321
 
322
+ this.receiveSlotManager?.updateMemberIds();
323
+
279
324
  Trigger.trigger(
280
325
  this,
281
326
  {
282
327
  file: 'members',
283
- function: 'locusParticipantsUpdate'
328
+ function: 'locusParticipantsUpdate',
284
329
  },
285
330
  EVENT_TRIGGERS.MEMBERS_UPDATE,
286
331
  {
287
332
  delta,
288
- full
333
+ full,
334
+ isReplace: !!payload.isReplace,
289
335
  }
290
336
  );
291
337
  }
@@ -300,7 +346,7 @@ export default class Members extends StatelessWebexPlugin {
300
346
  * @private
301
347
  * @memberof Members
302
348
  */
303
- locusMediaSharesUpdate(payload) {
349
+ locusMediaSharesUpdate(payload: {current: any; previous: any}) {
304
350
  const currentContent = payload.current?.content;
305
351
  const previousContent = payload.previous?.content;
306
352
  const currentWhiteboard = payload.current?.whiteboard;
@@ -319,8 +365,10 @@ export default class Members extends StatelessWebexPlugin {
319
365
  if (currentContent.disposition === FLOOR_ACTION.RELEASED) {
320
366
  whoStopped = currentContent.beneficiaryId;
321
367
  this.mediaShareContentId = null;
322
- }
323
- else if (currentContent.disposition === FLOOR_ACTION.GRANTED && currentContent.beneficiaryId !== previousContent.beneficiaryId) {
368
+ } else if (
369
+ currentContent.disposition === FLOOR_ACTION.GRANTED &&
370
+ currentContent.beneficiaryId !== previousContent.beneficiaryId
371
+ ) {
324
372
  whoStopped = previousContent.beneficiaryId;
325
373
  }
326
374
  }
@@ -337,8 +385,10 @@ export default class Members extends StatelessWebexPlugin {
337
385
  if (currentWhiteboard.disposition === FLOOR_ACTION.RELEASED) {
338
386
  whoStopped = currentWhiteboard.beneficiaryId;
339
387
  this.mediaShareWhiteboardId = null;
340
- }
341
- else if (currentWhiteboard.disposition === FLOOR_ACTION.GRANTED && currentWhiteboard.beneficiaryId !== previousWhiteboard.beneficiaryId) {
388
+ } else if (
389
+ currentWhiteboard.disposition === FLOOR_ACTION.GRANTED &&
390
+ currentWhiteboard.beneficiaryId !== previousWhiteboard.beneficiaryId
391
+ ) {
342
392
  whoStopped = previousWhiteboard.beneficiaryId;
343
393
  }
344
394
  }
@@ -363,17 +413,16 @@ export default class Members extends StatelessWebexPlugin {
363
413
  this,
364
414
  {
365
415
  file: 'members',
366
- function: 'locusMediaSharesUpdate'
416
+ function: 'locusMediaSharesUpdate',
367
417
  },
368
418
  EVENT_TRIGGERS.MEMBERS_CONTENT_UPDATE,
369
419
  {
370
420
  activeSharingId: whoSharing,
371
- endedSharingId: whoStopped
421
+ endedSharingId: whoStopped,
372
422
  }
373
423
  );
374
424
  }
375
425
 
376
-
377
426
  /**
378
427
  * Internal update the locus url value
379
428
  * @param {Object} payload
@@ -382,7 +431,7 @@ export default class Members extends StatelessWebexPlugin {
382
431
  * @private
383
432
  * @memberof Members
384
433
  */
385
- locusUrlUpdate(payload) {
434
+ locusUrlUpdate(payload: any) {
386
435
  if (payload) {
387
436
  this.setLocusUrl(null, payload);
388
437
  }
@@ -396,7 +445,7 @@ export default class Members extends StatelessWebexPlugin {
396
445
  * @private
397
446
  * @memberof Members
398
447
  */
399
- locusFullStateTypeUpdate(payload) {
448
+ locusFullStateTypeUpdate(payload: {type: string}) {
400
449
  // TODO: at some point there could be a timing issue here, for updating each member
401
450
  // ie., if the type changes AND there is no locus update, then each member will not know the type of call
402
451
  // which means they cannot determine isMutable && isRemovable
@@ -415,7 +464,7 @@ export default class Members extends StatelessWebexPlugin {
415
464
  * @private
416
465
  * @memberof Members
417
466
  */
418
- handleMembersUpdate(membersUpdate) {
467
+ private handleMembersUpdate(membersUpdate: any) {
419
468
  if (membersUpdate) {
420
469
  if (membersUpdate.updated) {
421
470
  this.constructMembers(membersUpdate.updated);
@@ -435,7 +484,7 @@ export default class Members extends StatelessWebexPlugin {
435
484
  * @private
436
485
  * @memberof Members
437
486
  */
438
- constructMembers(list) {
487
+ private constructMembers(list: Array<any>) {
439
488
  list.forEach((member) => {
440
489
  this.membersCollection.set(member.id, member);
441
490
  });
@@ -448,12 +497,14 @@ export default class Members extends StatelessWebexPlugin {
448
497
  * @private
449
498
  * @memberof Members
450
499
  */
451
- handleLocusInfoUpdatedParticipants(payload) {
500
+ private handleLocusInfoUpdatedParticipants(payload: any) {
452
501
  this.hostId = payload.hostId || this.hostId;
453
502
  this.selfId = payload.selfId || this.selfId;
454
503
  this.recordingId = payload.recordingId;
455
504
  if (!payload.participants) {
456
- LoggerProxy.logger.warn('Members:index#handleLocusInfoUpdatedParticipants --> participants payload is missing.');
505
+ LoggerProxy.logger.warn(
506
+ 'Members:index#handleLocusInfoUpdatedParticipants --> participants payload is missing.'
507
+ );
457
508
  }
458
509
  const memberUpdate = this.update(payload.participants);
459
510
 
@@ -469,15 +520,15 @@ export default class Members extends StatelessWebexPlugin {
469
520
  * @public
470
521
  * @memberof Members
471
522
  */
472
- setLocusUrl(locus, locusUrl = null) {
523
+ public setLocusUrl(locus: any, locusUrl: string = null) {
473
524
  if (locusUrl) {
474
525
  this.locusUrl = locusUrl;
475
- }
476
- else if (locus && (locus.locusUrl || locus.url)) {
526
+ } else if (locus && (locus.locusUrl || locus.url)) {
477
527
  this.locusUrl = locus.locusUrl || locus.url;
478
- }
479
- else {
480
- throw new ParameterError('Setting locusUrl for the Members module should be done with a locus object or locusUrl');
528
+ } else {
529
+ throw new ParameterError(
530
+ 'Setting locusUrl for the Members module should be done with a locus object or locusUrl'
531
+ );
481
532
  }
482
533
  }
483
534
 
@@ -490,15 +541,15 @@ export default class Members extends StatelessWebexPlugin {
490
541
  * @public
491
542
  * @memberof Members
492
543
  */
493
- setHostId(locus, hostId = null) {
544
+ public setHostId(locus: any, hostId: string = null) {
494
545
  if (hostId) {
495
546
  this.hostId = hostId;
496
- }
497
- else if (locus) {
547
+ } else if (locus) {
498
548
  this.hostId = locus && locus.owner && locus.owner.info ? locus.owner.info : null;
499
- }
500
- else {
501
- throw new ParameterError('Setting hostid for the Members module should be done with a locus object or hostId');
549
+ } else {
550
+ throw new ParameterError(
551
+ 'Setting hostid for the Members module should be done with a locus object or hostId'
552
+ );
502
553
  }
503
554
  }
504
555
 
@@ -511,15 +562,15 @@ export default class Members extends StatelessWebexPlugin {
511
562
  * @public
512
563
  * @memberof Members
513
564
  */
514
- setType(fullState, type = null) {
565
+ public setType(fullState: any, type: string = null) {
515
566
  if (type) {
516
567
  this.type = type;
517
- }
518
- else if (fullState) {
568
+ } else if (fullState) {
519
569
  this.type = (fullState && fullState.type) || null;
520
- }
521
- else {
522
- throw new ParameterError('Setting type for the Members module should be done with a fullstate object or type string');
570
+ } else {
571
+ throw new ParameterError(
572
+ 'Setting type for the Members module should be done with a fullstate object or type string'
573
+ );
523
574
  }
524
575
  }
525
576
 
@@ -531,15 +582,18 @@ export default class Members extends StatelessWebexPlugin {
531
582
  * @returns {undefined}
532
583
  * @memberof Members
533
584
  */
534
- setSelfId(locus, selfId = null) {
585
+ setSelfId(locus: any, selfId: string = null) {
535
586
  if (selfId) {
536
587
  this.selfId = selfId;
537
- }
538
- else if (locus) {
539
- this.selfId = locus && locus.self && locus.self.person && locus.self.person.id ? locus.self.person.id : null;
540
- }
541
- else {
542
- throw new ParameterError('Setting selfid for the Members module should be done with a locus object or selfId');
588
+ } else if (locus) {
589
+ this.selfId =
590
+ locus && locus.self && locus.self.person && locus.self.person.id
591
+ ? locus.self.person.id
592
+ : null;
593
+ } else {
594
+ throw new ParameterError(
595
+ 'Setting selfid for the Members module should be done with a locus object or selfId'
596
+ );
543
597
  }
544
598
  }
545
599
 
@@ -551,11 +605,10 @@ export default class Members extends StatelessWebexPlugin {
551
605
  * @returns {undefined}
552
606
  * @memberof Members
553
607
  */
554
- setMediaShareContentId(locus, contentId) {
608
+ setMediaShareContentId(locus: any, contentId?: string) {
555
609
  if (contentId) {
556
610
  this.mediaShareContentId = contentId;
557
- }
558
- else if (locus) {
611
+ } else if (locus) {
559
612
  const contentMediaShare =
560
613
  locus.mediaShares &&
561
614
  locus.mediaShares.length &&
@@ -567,9 +620,10 @@ export default class Members extends StatelessWebexPlugin {
567
620
  contentMediaShare.floor.beneficiary &&
568
621
  contentMediaShare.floor.beneficiary.id) ||
569
622
  null;
570
- }
571
- else {
572
- throw new ParameterError('Setting hostid for the Members module should be done with a locus object or hostId');
623
+ } else {
624
+ throw new ParameterError(
625
+ 'Setting hostid for the Members module should be done with a locus object or hostId'
626
+ );
573
627
  }
574
628
  }
575
629
 
@@ -581,11 +635,10 @@ export default class Members extends StatelessWebexPlugin {
581
635
  * @returns {undefined}
582
636
  * @memberof Members
583
637
  */
584
- setMediaShareWhiteboardId(locus, whiteboardId) {
638
+ setMediaShareWhiteboardId(locus: any, whiteboardId?: string) {
585
639
  if (whiteboardId) {
586
640
  this.mediaShareWhiteboardId = whiteboardId;
587
- }
588
- else if (locus) {
641
+ } else if (locus) {
589
642
  const whiteboardMediaShare =
590
643
  locus.mediaShares &&
591
644
  locus.mediaShares.length &&
@@ -597,9 +650,10 @@ export default class Members extends StatelessWebexPlugin {
597
650
  whiteboardMediaShare.floor.beneficiary &&
598
651
  whiteboardMediaShare.floor.beneficiary.id) ||
599
652
  null;
600
- }
601
- else {
602
- throw new ParameterError('Setting hostid for the Members module should be done with a locus object or hostId');
653
+ } else {
654
+ throw new ParameterError(
655
+ 'Setting hostid for the Members module should be done with a locus object or hostId'
656
+ );
603
657
  }
604
658
  }
605
659
 
@@ -612,7 +666,7 @@ export default class Members extends StatelessWebexPlugin {
612
666
  * @private
613
667
  * @memberof Members
614
668
  */
615
- update(participants) {
669
+ private update(participants: Array<any>) {
616
670
  const membersUpdate = {added: [], updated: []};
617
671
 
618
672
  if (participants) {
@@ -632,11 +686,10 @@ export default class Members extends StatelessWebexPlugin {
632
686
  hostId: this.hostId,
633
687
  contentSharingId: this.mediaShareContentId,
634
688
  whiteboardSharingId: this.mediaShareWhiteboardId,
635
- type: this.type
689
+ type: this.type,
636
690
  })
637
691
  );
638
- }
639
- else {
692
+ } else {
640
693
  membersUpdate.added.push(
641
694
  new Member(participant, {
642
695
  recordingId: this.recordingId,
@@ -644,7 +697,7 @@ export default class Members extends StatelessWebexPlugin {
644
697
  hostId: this.hostId,
645
698
  contentSharingId: this.mediaShareContentId,
646
699
  whiteboardSharingId: this.mediaShareWhiteboardId,
647
- type: this.type
700
+ type: this.type,
648
701
  })
649
702
  );
650
703
  }
@@ -661,13 +714,17 @@ export default class Members extends StatelessWebexPlugin {
661
714
  * @returns {Promise}
662
715
  * @memberof Members
663
716
  */
664
- addMember(invitee, alertIfActive) {
717
+ addMember(invitee: any, alertIfActive?: boolean) {
665
718
  if (!this.locusUrl) {
666
- return Promise.reject(new ParameterError('The associated locus url for this meeting object must be defined.'));
719
+ return Promise.reject(
720
+ new ParameterError('The associated locus url for this meeting object must be defined.')
721
+ );
667
722
  }
668
723
  if (MembersUtil.isInvalidInvitee(invitee)) {
669
724
  return Promise.reject(
670
- new ParameterError('The invitee must be defined with either a valid email, emailAddress or phoneNumber property.')
725
+ new ParameterError(
726
+ 'The invitee must be defined with either a valid email, emailAddress or phoneNumber property.'
727
+ )
671
728
  );
672
729
  }
673
730
  const options = MembersUtil.generateAddMemberOptions(invitee, this.locusUrl, alertIfActive);
@@ -681,9 +738,11 @@ export default class Members extends StatelessWebexPlugin {
681
738
  * @returns {Promise}
682
739
  * @memberof Members
683
740
  */
684
- cancelPhoneInvite(invitee) {
741
+ cancelPhoneInvite(invitee: any) {
685
742
  if (!this.locusUrl) {
686
- return Promise.reject(new ParameterError('The associated locus url for this meeting object must be defined.'));
743
+ return Promise.reject(
744
+ new ParameterError('The associated locus url for this meeting object must be defined.')
745
+ );
687
746
  }
688
747
  if (MembersUtil.isInvalidInvitee(invitee)) {
689
748
  return Promise.reject(
@@ -692,22 +751,28 @@ export default class Members extends StatelessWebexPlugin {
692
751
  }
693
752
  const options = MembersUtil.cancelPhoneInviteOptions(invitee, this.locusUrl);
694
753
 
695
-
696
754
  return this.membersRequest.cancelPhoneInvite(options);
697
755
  }
698
756
 
699
757
  /**
700
758
  * Admits waiting members (invited guests to meeting)
701
759
  * @param {Array} memberIds
760
+ * @param {Object} sessionLocusUrls: {authorizingLocusUrl, mainLocusUrl}
702
761
  * @returns {Promise}
703
762
  * @public
704
763
  * @memberof Members
705
764
  */
706
- admitMembers(memberIds) {
765
+ public admitMembers(
766
+ memberIds: Array<any>,
767
+ sessionLocusUrls?: {authorizingLocusUrl: string; mainLocusUrl: string}
768
+ ) {
707
769
  if (isEmpty(memberIds)) {
708
770
  return Promise.reject(new ParameterError('No member ids provided to admit.'));
709
771
  }
710
- const options = MembersUtil.generateAdmitMemberOptions(memberIds, this.locusUrl);
772
+ const options = {
773
+ sessionLocusUrls,
774
+ ...MembersUtil.generateAdmitMemberOptions(memberIds, this.locusUrl),
775
+ };
711
776
 
712
777
  return this.membersRequest.admitMember(options);
713
778
  }
@@ -719,12 +784,16 @@ export default class Members extends StatelessWebexPlugin {
719
784
  * @public
720
785
  * @memberof Members
721
786
  */
722
- removeMember(memberId) {
787
+ public removeMember(memberId: string) {
723
788
  if (!this.locusUrl) {
724
- return Promise.reject(new ParameterError('The associated locus url for this meeting object must be defined.'));
789
+ return Promise.reject(
790
+ new ParameterError('The associated locus url for this meeting object must be defined.')
791
+ );
725
792
  }
726
793
  if (!memberId) {
727
- return Promise.reject(new ParameterError('The member id must be defined to remove the member.'));
794
+ return Promise.reject(
795
+ new ParameterError('The member id must be defined to remove the member.')
796
+ );
728
797
  }
729
798
  const options = MembersUtil.generateRemoveMemberOptions(memberId, this.locusUrl);
730
799
 
@@ -735,22 +804,55 @@ export default class Members extends StatelessWebexPlugin {
735
804
  * Audio mutes another member in a meeting
736
805
  * @param {String} memberId
737
806
  * @param {boolean} [mute] default true
807
+ * @param {boolean} [isAudio] default true
738
808
  * @returns {Promise}
739
809
  * @public
740
810
  * @memberof Members
741
811
  */
742
- muteMember(memberId, mute = true) {
812
+ public muteMember(memberId: string, mute = true, isAudio = true) {
743
813
  if (!this.locusUrl) {
744
- return Promise.reject(new ParameterError('The associated locus url for this meetings members object must be defined.'));
814
+ return Promise.reject(
815
+ new ParameterError(
816
+ 'The associated locus url for this meetings members object must be defined.'
817
+ )
818
+ );
745
819
  }
746
820
  if (!memberId) {
747
- return Promise.reject(new ParameterError('The member id must be defined to mute the member.'));
821
+ return Promise.reject(
822
+ new ParameterError('The member id must be defined to mute the member.')
823
+ );
748
824
  }
749
- const options = MembersUtil.generateMuteMemberOptions(memberId, mute, this.locusUrl);
825
+ const options = MembersUtil.generateMuteMemberOptions(memberId, mute, this.locusUrl, isAudio);
750
826
 
751
827
  return this.membersRequest.muteMember(options);
752
828
  }
753
829
 
830
+ /**
831
+ * Assign role(s) to a member in the meeting
832
+ * @param {String} memberId
833
+ * @param {[ServerRoleShape]} roles - to assign an array of roles
834
+ * @returns {Promise}
835
+ * @public
836
+ * @memberof Members
837
+ */
838
+ public assignRoles(memberId: string, roles: Array<ServerRoleShape>) {
839
+ if (!this.locusUrl) {
840
+ return Promise.reject(
841
+ new ParameterError(
842
+ 'The associated locus url for this meetings members object must be defined.'
843
+ )
844
+ );
845
+ }
846
+ if (!memberId) {
847
+ return Promise.reject(
848
+ new ParameterError('The member id must be defined to assign the roles to a member.')
849
+ );
850
+ }
851
+ const options = MembersUtil.generateRoleAssignmentMemberOptions(memberId, roles, this.locusUrl);
852
+
853
+ return this.membersRequest.assignRolesMember(options);
854
+ }
855
+
754
856
  /**
755
857
  * Raise or lower the hand of a member in a meeting
756
858
  * @param {String} memberId
@@ -759,12 +861,18 @@ export default class Members extends StatelessWebexPlugin {
759
861
  * @public
760
862
  * @memberof Members
761
863
  */
762
- raiseOrLowerHand(memberId, raise = true) {
864
+ public raiseOrLowerHand(memberId: string, raise = true) {
763
865
  if (!this.locusUrl) {
764
- return Promise.reject(new ParameterError('The associated locus url for this meetings members object must be defined.'));
866
+ return Promise.reject(
867
+ new ParameterError(
868
+ 'The associated locus url for this meetings members object must be defined.'
869
+ )
870
+ );
765
871
  }
766
872
  if (!memberId) {
767
- return Promise.reject(new ParameterError('The member id must be defined to raise/lower the hand of the member.'));
873
+ return Promise.reject(
874
+ new ParameterError('The member id must be defined to raise/lower the hand of the member.')
875
+ );
768
876
  }
769
877
  const options = MembersUtil.generateRaiseHandMemberOptions(memberId, raise, this.locusUrl);
770
878
 
@@ -778,19 +886,29 @@ export default class Members extends StatelessWebexPlugin {
778
886
  * @public
779
887
  * @memberof Members
780
888
  */
781
- lowerAllHands(requestingMemberId) {
889
+ public lowerAllHands(requestingMemberId: string) {
782
890
  if (!this.locusUrl) {
783
- return Promise.reject(new ParameterError('The associated locus url for this meetings members object must be defined.'));
891
+ return Promise.reject(
892
+ new ParameterError(
893
+ 'The associated locus url for this meetings members object must be defined.'
894
+ )
895
+ );
784
896
  }
785
897
  if (!requestingMemberId) {
786
- return Promise.reject(new ParameterError('The requestingMemberId must be defined to lower all hands in a meeting.'));
898
+ return Promise.reject(
899
+ new ParameterError(
900
+ 'The requestingMemberId must be defined to lower all hands in a meeting.'
901
+ )
902
+ );
787
903
  }
788
- const options = MembersUtil.generateLowerAllHandsMemberOptions(requestingMemberId, this.locusUrl);
904
+ const options = MembersUtil.generateLowerAllHandsMemberOptions(
905
+ requestingMemberId,
906
+ this.locusUrl
907
+ );
789
908
 
790
909
  return this.membersRequest.lowerAllHandsMember(options);
791
910
  }
792
911
 
793
-
794
912
  /**
795
913
  * Transfers the host to another member
796
914
  * @param {String} memberId
@@ -799,19 +917,28 @@ export default class Members extends StatelessWebexPlugin {
799
917
  * @public
800
918
  * @memberof Members
801
919
  */
802
- transferHostToMember(memberId, moderator = true) {
920
+ public transferHostToMember(memberId: string, moderator = true) {
803
921
  if (!this.locusUrl) {
804
- return Promise.reject(new ParameterError('The associated locus url for this meetings members object must be defined.'));
922
+ return Promise.reject(
923
+ new ParameterError(
924
+ 'The associated locus url for this meetings members object must be defined.'
925
+ )
926
+ );
805
927
  }
806
928
  if (!memberId) {
807
- return Promise.reject(new ParameterError('The member id must be defined to transfer host to the member.'));
929
+ return Promise.reject(
930
+ new ParameterError('The member id must be defined to transfer host to the member.')
931
+ );
808
932
  }
809
- const options = MembersUtil.generateTransferHostMemberOptions(memberId, moderator, this.locusUrl);
933
+ const options = MembersUtil.generateTransferHostMemberOptions(
934
+ memberId,
935
+ moderator,
936
+ this.locusUrl
937
+ );
810
938
 
811
939
  return this.membersRequest.transferHostToMember(options);
812
940
  }
813
941
 
814
-
815
942
  /**
816
943
  * Sends DTMF tones for the PSTN member of a meeting
817
944
  * @param {String} tones a string of one or more DTMF tones to send
@@ -820,7 +947,8 @@ export default class Members extends StatelessWebexPlugin {
820
947
  * @public
821
948
  * @memberof Members
822
949
  */
823
- sendDialPadKey(tones = '', memberId = '') {
950
+ public sendDialPadKey(tones = '', memberId = '') {
951
+ // @ts-ignore
824
952
  if (!tones && tones !== 0) {
825
953
  return Promise.reject(new ParameterError('DMTF tones must be passed in'));
826
954
  }
@@ -843,7 +971,11 @@ export default class Members extends StatelessWebexPlugin {
843
971
  return this.membersRequest.sendDialPadKey(options);
844
972
  }
845
973
 
846
- return Promise.reject(new Error('Members:index#sendDialPadKey --> cannot send DTMF, meeting does not have a connection to the "locus" call control service.'));
974
+ return Promise.reject(
975
+ new Error(
976
+ 'Members:index#sendDialPadKey --> cannot send DTMF, meeting does not have a connection to the "locus" call control service.'
977
+ )
978
+ );
847
979
  }
848
980
 
849
981
  /** Finds a member that has any device with a csi matching provided value
@@ -852,10 +984,12 @@ export default class Members extends StatelessWebexPlugin {
852
984
  * @returns {Member}
853
985
  */
854
986
  findMemberByCsi(csi) {
855
- return Object.values(this.membersCollection.getAll())
856
- .find((member) => (
857
- member.participant?.devices?.find((device) => (
858
- device.csis?.find((memberCsi) => memberCsi === csi)))));
987
+ return Object.values(this.membersCollection.getAll()).find((member) =>
988
+ // @ts-ignore
989
+ member.participant?.devices?.find((device) =>
990
+ device.csis?.find((memberCsi) => memberCsi === csi)
991
+ )
992
+ );
859
993
  }
860
994
 
861
995
  /**
@@ -872,7 +1006,10 @@ export default class Members extends StatelessWebexPlugin {
872
1006
  this.membersCollection.get(memberId)?.participant?.devices?.forEach((device) => {
873
1007
  if (device.mediaSessions) {
874
1008
  const deviceCsis = device.mediaSessions
875
- ?.filter((mediaSession) => mediaSession.mediaType === mediaType && mediaSession.mediaContent === mediaContent)
1009
+ ?.filter(
1010
+ (mediaSession) =>
1011
+ mediaSession.mediaType === mediaType && mediaSession.mediaContent === mediaContent
1012
+ )
876
1013
  .map((mediaSession) => mediaSession.csi);
877
1014
 
878
1015
  csis.push(...deviceCsis);