@webex/plugin-meetings 3.0.0-beta.13 → 3.0.0-beta.130

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