@webex/plugin-meetings 3.0.0-beta.11 → 3.0.0-beta.111

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