@webex/plugin-meetings 3.0.0-beta.15 → 3.0.0-beta.151

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 (480) hide show
  1. package/README.md +45 -1
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +49 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +359 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +193 -0
  9. package/dist/breakouts/breakout.js.map +1 -0
  10. package/dist/breakouts/collection.js +23 -0
  11. package/dist/breakouts/collection.js.map +1 -0
  12. package/dist/breakouts/edit-lock-error.js +52 -0
  13. package/dist/breakouts/edit-lock-error.js.map +1 -0
  14. package/dist/breakouts/events.js +43 -0
  15. package/dist/breakouts/events.js.map +1 -0
  16. package/dist/breakouts/index.js +1046 -0
  17. package/dist/breakouts/index.js.map +1 -0
  18. package/dist/breakouts/request.js +78 -0
  19. package/dist/breakouts/request.js.map +1 -0
  20. package/dist/breakouts/utils.js +67 -0
  21. package/dist/breakouts/utils.js.map +1 -0
  22. package/dist/common/browser-detection.js +1 -21
  23. package/dist/common/browser-detection.js.map +1 -1
  24. package/dist/common/collection.js +5 -20
  25. package/dist/common/collection.js.map +1 -1
  26. package/dist/common/config.js +0 -7
  27. package/dist/common/config.js.map +1 -1
  28. package/dist/common/errors/captcha-error.js +0 -21
  29. package/dist/common/errors/captcha-error.js.map +1 -1
  30. package/dist/common/errors/intent-to-join.js +0 -21
  31. package/dist/common/errors/intent-to-join.js.map +1 -1
  32. package/dist/common/errors/join-meeting.js +0 -21
  33. package/dist/common/errors/join-meeting.js.map +1 -1
  34. package/dist/common/errors/media.js +0 -21
  35. package/dist/common/errors/media.js.map +1 -1
  36. package/dist/common/errors/parameter.js +0 -28
  37. package/dist/common/errors/parameter.js.map +1 -1
  38. package/dist/common/errors/password-error.js +0 -21
  39. package/dist/common/errors/password-error.js.map +1 -1
  40. package/dist/common/errors/permission.js +0 -21
  41. package/dist/common/errors/permission.js.map +1 -1
  42. package/dist/common/errors/reconnection-in-progress.js +0 -17
  43. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  44. package/dist/common/errors/reconnection.js +0 -21
  45. package/dist/common/errors/reconnection.js.map +1 -1
  46. package/dist/common/errors/stats.js +0 -21
  47. package/dist/common/errors/stats.js.map +1 -1
  48. package/dist/common/errors/webex-errors.js +9 -43
  49. package/dist/common/errors/webex-errors.js.map +1 -1
  50. package/dist/common/errors/webex-meetings-error.js +1 -24
  51. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  52. package/dist/common/events/events-scope.js +0 -22
  53. package/dist/common/events/events-scope.js.map +1 -1
  54. package/dist/common/events/events.js +0 -23
  55. package/dist/common/events/events.js.map +1 -1
  56. package/dist/common/events/trigger-proxy.js +0 -12
  57. package/dist/common/events/trigger-proxy.js.map +1 -1
  58. package/dist/common/events/util.js +0 -15
  59. package/dist/common/events/util.js.map +1 -1
  60. package/dist/common/logs/logger-config.js +0 -4
  61. package/dist/common/logs/logger-config.js.map +1 -1
  62. package/dist/common/logs/logger-proxy.js +1 -8
  63. package/dist/common/logs/logger-proxy.js.map +1 -1
  64. package/dist/common/logs/request.js +35 -61
  65. package/dist/common/logs/request.js.map +1 -1
  66. package/dist/common/queue.js +4 -14
  67. package/dist/common/queue.js.map +1 -1
  68. package/dist/config.js +7 -13
  69. package/dist/config.js.map +1 -1
  70. package/dist/constants.js +208 -64
  71. package/dist/constants.js.map +1 -1
  72. package/dist/controls-options-manager/constants.js +14 -0
  73. package/dist/controls-options-manager/constants.js.map +1 -0
  74. package/dist/controls-options-manager/enums.js +27 -0
  75. package/dist/controls-options-manager/enums.js.map +1 -0
  76. package/dist/controls-options-manager/index.js +297 -0
  77. package/dist/controls-options-manager/index.js.map +1 -0
  78. package/dist/controls-options-manager/types.js +7 -0
  79. package/dist/controls-options-manager/types.js.map +1 -0
  80. package/dist/controls-options-manager/util.js +300 -0
  81. package/dist/controls-options-manager/util.js.map +1 -0
  82. package/dist/index.js +78 -17
  83. package/dist/index.js.map +1 -1
  84. package/dist/locus-info/controlsUtils.js +100 -29
  85. package/dist/locus-info/controlsUtils.js.map +1 -1
  86. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  87. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  88. package/dist/locus-info/fullState.js +0 -15
  89. package/dist/locus-info/fullState.js.map +1 -1
  90. package/dist/locus-info/hostUtils.js +4 -12
  91. package/dist/locus-info/hostUtils.js.map +1 -1
  92. package/dist/locus-info/index.js +387 -208
  93. package/dist/locus-info/index.js.map +1 -1
  94. package/dist/locus-info/infoUtils.js +0 -38
  95. package/dist/locus-info/infoUtils.js.map +1 -1
  96. package/dist/locus-info/mediaSharesUtils.js +54 -38
  97. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  98. package/dist/locus-info/parser.js +90 -126
  99. package/dist/locus-info/parser.js.map +1 -1
  100. package/dist/locus-info/selfUtils.js +93 -92
  101. package/dist/locus-info/selfUtils.js.map +1 -1
  102. package/dist/media/index.js +70 -219
  103. package/dist/media/index.js.map +1 -1
  104. package/dist/media/properties.js +74 -198
  105. package/dist/media/properties.js.map +1 -1
  106. package/dist/media/util.js +1 -8
  107. package/dist/media/util.js.map +1 -1
  108. package/dist/mediaQualityMetrics/config.js +505 -495
  109. package/dist/mediaQualityMetrics/config.js.map +1 -1
  110. package/dist/meeting/in-meeting-actions.js +79 -14
  111. package/dist/meeting/in-meeting-actions.js.map +1 -1
  112. package/dist/meeting/index.js +2685 -3324
  113. package/dist/meeting/index.js.map +1 -1
  114. package/dist/meeting/locusMediaRequest.js +291 -0
  115. package/dist/meeting/locusMediaRequest.js.map +1 -0
  116. package/dist/meeting/muteState.js +243 -185
  117. package/dist/meeting/muteState.js.map +1 -1
  118. package/dist/meeting/request.js +296 -342
  119. package/dist/meeting/request.js.map +1 -1
  120. package/dist/meeting/request.type.js +0 -1
  121. package/dist/meeting/request.type.js.map +1 -1
  122. package/dist/meeting/state.js +16 -26
  123. package/dist/meeting/state.js.map +1 -1
  124. package/dist/meeting/util.js +446 -585
  125. package/dist/meeting/util.js.map +1 -1
  126. package/dist/meeting-info/collection.js +3 -25
  127. package/dist/meeting-info/collection.js.map +1 -1
  128. package/dist/meeting-info/index.js +8 -31
  129. package/dist/meeting-info/index.js.map +1 -1
  130. package/dist/meeting-info/meeting-info-v2.js +261 -242
  131. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  132. package/dist/meeting-info/request.js +1 -16
  133. package/dist/meeting-info/request.js.map +1 -1
  134. package/dist/meeting-info/util.js +98 -183
  135. package/dist/meeting-info/util.js.map +1 -1
  136. package/dist/meeting-info/utilv2.js +156 -232
  137. package/dist/meeting-info/utilv2.js.map +1 -1
  138. package/dist/meetings/collection.js +24 -20
  139. package/dist/meetings/collection.js.map +1 -1
  140. package/dist/meetings/index.js +526 -372
  141. package/dist/meetings/index.js.map +1 -1
  142. package/dist/meetings/meetings.types.js +7 -0
  143. package/dist/meetings/meetings.types.js.map +1 -0
  144. package/dist/meetings/request.js +21 -40
  145. package/dist/meetings/request.js.map +1 -1
  146. package/dist/meetings/util.js +172 -141
  147. package/dist/meetings/util.js.map +1 -1
  148. package/dist/member/index.js +58 -57
  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 +123 -162
  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 +75 -147
  169. package/dist/metrics/index.js.map +1 -1
  170. package/dist/multistream/mediaRequestManager.js +170 -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 +73 -94
  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 +66 -43
  179. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  180. package/dist/multistream/remoteMediaManager.js +502 -442
  181. package/dist/multistream/remoteMediaManager.js.map +1 -1
  182. package/dist/networkQualityMonitor/index.js +24 -51
  183. package/dist/networkQualityMonitor/index.js.map +1 -1
  184. package/dist/personal-meeting-room/index.js +3 -38
  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 +18 -24
  199. package/dist/reactions/reactions.type.js.map +1 -1
  200. package/dist/reconnection-manager/index.js +356 -476
  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 +32 -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 -462
  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 +9 -44
  221. package/dist/transcription/index.js.map +1 -1
  222. package/dist/types/annotation/annotation.types.d.ts +43 -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 +72 -0
  256. package/dist/types/constants.d.ts +978 -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 +86 -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 +149 -0
  277. package/dist/types/meeting/index.d.ts +1509 -0
  278. package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
  279. package/dist/types/meeting/muteState.d.ts +184 -0
  280. package/dist/types/meeting/request.d.ts +270 -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 +75 -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 +364 -0
  292. package/dist/types/meetings/meetings.types.d.ts +4 -0
  293. package/dist/types/meetings/request.d.ts +27 -0
  294. package/dist/types/meetings/util.d.ts +18 -0
  295. package/dist/types/member/index.d.ts +157 -0
  296. package/dist/types/member/types.d.ts +21 -0
  297. package/dist/types/member/util.d.ts +2 -0
  298. package/dist/types/members/collection.d.ts +29 -0
  299. package/dist/types/members/index.d.ts +353 -0
  300. package/dist/types/members/request.d.ts +114 -0
  301. package/dist/types/members/types.d.ts +24 -0
  302. package/dist/types/members/util.d.ts +210 -0
  303. package/dist/types/metrics/config.d.ts +195 -0
  304. package/dist/types/metrics/constants.d.ts +55 -0
  305. package/dist/types/metrics/index.d.ts +169 -0
  306. package/dist/types/multistream/mediaRequestManager.d.ts +104 -0
  307. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  308. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  309. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  310. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  311. package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
  312. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  313. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  314. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  315. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  316. package/dist/types/reachability/index.d.ts +152 -0
  317. package/dist/types/reachability/request.d.ts +37 -0
  318. package/dist/types/reactions/constants.d.ts +3 -0
  319. package/dist/types/reactions/reactions.d.ts +4 -0
  320. package/dist/types/reactions/reactions.type.d.ts +52 -0
  321. package/dist/types/reconnection-manager/index.d.ts +126 -0
  322. package/dist/types/recording-controller/enums.d.ts +7 -0
  323. package/dist/types/recording-controller/index.d.ts +193 -0
  324. package/dist/types/recording-controller/util.d.ts +13 -0
  325. package/dist/types/roap/index.d.ts +77 -0
  326. package/dist/types/roap/request.d.ts +36 -0
  327. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  328. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  329. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  330. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  331. package/dist/types/transcription/index.d.ts +64 -0
  332. package/package.json +28 -21
  333. package/src/annotation/annotation.types.ts +52 -0
  334. package/src/annotation/constants.ts +36 -0
  335. package/src/annotation/index.ts +343 -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 +921 -0
  342. package/src/breakouts/request.ts +55 -0
  343. package/src/breakouts/utils.ts +57 -0
  344. package/src/common/errors/webex-errors.ts +6 -2
  345. package/src/common/logs/logger-proxy.ts +1 -1
  346. package/src/config.ts +5 -7
  347. package/src/constants.ts +155 -20
  348. package/src/controls-options-manager/constants.ts +5 -0
  349. package/src/controls-options-manager/enums.ts +18 -0
  350. package/src/controls-options-manager/index.ts +278 -0
  351. package/src/controls-options-manager/types.ts +59 -0
  352. package/src/controls-options-manager/util.ts +286 -0
  353. package/src/index.ts +34 -0
  354. package/src/locus-info/controlsUtils.ts +108 -0
  355. package/src/locus-info/index.ts +310 -21
  356. package/src/locus-info/mediaSharesUtils.ts +48 -0
  357. package/src/locus-info/parser.ts +2 -1
  358. package/src/locus-info/selfUtils.ts +71 -1
  359. package/src/media/index.ts +70 -142
  360. package/src/media/properties.ts +41 -104
  361. package/src/mediaQualityMetrics/config.ts +379 -377
  362. package/src/meeting/in-meeting-actions.ts +156 -0
  363. package/src/meeting/index.ts +1730 -1768
  364. package/src/meeting/locusMediaRequest.ts +309 -0
  365. package/src/meeting/muteState.ts +228 -132
  366. package/src/meeting/request.ts +100 -91
  367. package/src/meeting/request.type.ts +2 -0
  368. package/src/meeting/util.ts +421 -421
  369. package/src/meeting-info/meeting-info-v2.ts +134 -13
  370. package/src/meeting-info/utilv2.ts +13 -3
  371. package/src/meetings/collection.ts +20 -0
  372. package/src/meetings/index.ts +375 -83
  373. package/src/meetings/meetings.types.ts +9 -0
  374. package/src/meetings/request.ts +3 -1
  375. package/src/meetings/util.ts +103 -4
  376. package/src/member/index.ts +40 -0
  377. package/src/member/types.ts +24 -0
  378. package/src/member/util.ts +81 -1
  379. package/src/members/collection.ts +8 -0
  380. package/src/members/index.ts +108 -6
  381. package/src/members/request.ts +98 -17
  382. package/src/members/types.ts +28 -0
  383. package/src/members/util.ts +319 -240
  384. package/src/metrics/config.ts +49 -10
  385. package/src/metrics/constants.ts +2 -4
  386. package/src/metrics/index.ts +43 -27
  387. package/src/multistream/mediaRequestManager.ts +210 -45
  388. package/src/multistream/receiveSlot.ts +68 -26
  389. package/src/multistream/receiveSlotManager.ts +61 -38
  390. package/src/multistream/remoteMedia.ts +29 -3
  391. package/src/multistream/remoteMediaGroup.ts +61 -2
  392. package/src/multistream/remoteMediaManager.ts +260 -66
  393. package/src/networkQualityMonitor/index.ts +6 -6
  394. package/src/reachability/index.ts +75 -25
  395. package/src/reachability/request.ts +10 -5
  396. package/src/reactions/constants.ts +4 -0
  397. package/src/reactions/reactions.ts +4 -4
  398. package/src/reactions/reactions.type.ts +28 -3
  399. package/src/reconnection-manager/index.ts +53 -32
  400. package/src/recording-controller/enums.ts +8 -0
  401. package/src/recording-controller/index.ts +315 -0
  402. package/src/recording-controller/util.ts +58 -0
  403. package/src/roap/index.ts +21 -30
  404. package/src/roap/request.ts +51 -52
  405. package/src/roap/turnDiscovery.ts +51 -27
  406. package/src/statsAnalyzer/global.ts +1 -94
  407. package/src/statsAnalyzer/index.ts +380 -390
  408. package/src/statsAnalyzer/mqaUtil.ts +106 -99
  409. package/test/integration/spec/converged-space-meetings.js +233 -0
  410. package/test/integration/spec/journey.js +332 -255
  411. package/test/integration/spec/space-meeting.js +78 -5
  412. package/test/integration/spec/transcription.js +1 -1
  413. package/test/unit/spec/annotation/index.ts +436 -0
  414. package/test/unit/spec/breakouts/breakout.ts +203 -0
  415. package/test/unit/spec/breakouts/collection.ts +15 -0
  416. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  417. package/test/unit/spec/breakouts/events.ts +77 -0
  418. package/test/unit/spec/breakouts/index.ts +1790 -0
  419. package/test/unit/spec/breakouts/request.ts +104 -0
  420. package/test/unit/spec/breakouts/utils.js +72 -0
  421. package/test/unit/spec/controls-options-manager/index.js +287 -0
  422. package/test/unit/spec/controls-options-manager/util.js +518 -0
  423. package/test/unit/spec/fixture/locus.js +1 -0
  424. package/test/unit/spec/locus-info/controlsUtils.js +303 -30
  425. package/test/unit/spec/locus-info/index.js +615 -4
  426. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  427. package/test/unit/spec/locus-info/selfConstant.js +38 -0
  428. package/test/unit/spec/locus-info/selfUtils.js +200 -0
  429. package/test/unit/spec/media/index.ts +118 -22
  430. package/test/unit/spec/media/properties.ts +9 -9
  431. package/test/unit/spec/meeting/in-meeting-actions.ts +76 -0
  432. package/test/unit/spec/meeting/index.js +2394 -1381
  433. package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
  434. package/test/unit/spec/meeting/muteState.js +370 -208
  435. package/test/unit/spec/meeting/request.js +354 -42
  436. package/test/unit/spec/meeting/utils.js +268 -156
  437. package/test/unit/spec/meeting-info/meetinginfov2.js +383 -5
  438. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  439. package/test/unit/spec/meetings/collection.js +14 -0
  440. package/test/unit/spec/meetings/index.js +842 -128
  441. package/test/unit/spec/meetings/utils.js +206 -2
  442. package/test/unit/spec/member/index.js +24 -0
  443. package/test/unit/spec/member/util.js +384 -32
  444. package/test/unit/spec/members/index.js +320 -1
  445. package/test/unit/spec/members/request.js +206 -27
  446. package/test/unit/spec/members/utils.js +184 -0
  447. package/test/unit/spec/metrics/index.js +98 -0
  448. package/test/unit/spec/multistream/mediaRequestManager.ts +676 -105
  449. package/test/unit/spec/multistream/receiveSlot.ts +77 -18
  450. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  451. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  452. package/test/unit/spec/multistream/remoteMediaGroup.ts +271 -5
  453. package/test/unit/spec/multistream/remoteMediaManager.ts +672 -65
  454. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  455. package/test/unit/spec/reachability/index.ts +176 -25
  456. package/test/unit/spec/reachability/request.js +66 -0
  457. package/test/unit/spec/reconnection-manager/index.js +46 -13
  458. package/test/unit/spec/recording-controller/index.js +231 -0
  459. package/test/unit/spec/recording-controller/util.js +102 -0
  460. package/test/unit/spec/roap/index.ts +21 -51
  461. package/test/unit/spec/roap/request.ts +187 -0
  462. package/test/unit/spec/roap/turnDiscovery.ts +73 -34
  463. package/test/unit/spec/stats-analyzer/index.js +94 -43
  464. package/test/utils/constants.js +9 -0
  465. package/test/utils/integrationTestUtils.js +46 -0
  466. package/test/utils/testUtils.js +0 -45
  467. package/test/utils/webex-config.js +4 -0
  468. package/test/utils/webex-test-users.js +7 -3
  469. package/tsconfig.json +6 -0
  470. package/dist/media/internal-media-core-wrapper.js +0 -22
  471. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  472. package/dist/meeting/effectsState.js +0 -334
  473. package/dist/meeting/effectsState.js.map +0 -1
  474. package/dist/multistream/multistreamMedia.js +0 -117
  475. package/dist/multistream/multistreamMedia.js.map +0 -1
  476. package/src/index.js +0 -15
  477. package/src/media/internal-media-core-wrapper.ts +0 -9
  478. package/src/meeting/effectsState.ts +0 -211
  479. package/src/multistream/multistreamMedia.ts +0 -93
  480. package/test/unit/spec/meeting/effectsState.js +0 -281
@@ -1,16 +1,23 @@
1
1
  /* globals window */
2
2
 
3
3
  import {
4
- _LOCUS_ID_,
5
- _INCOMING_,
6
4
  _CREATED_,
7
- LOCUSEVENT,
5
+ _INCOMING_,
6
+ _JOINED_,
7
+ _LEFT_,
8
+ _LOCUS_ID_,
9
+ _MOVED_,
10
+ BREAKOUTS,
8
11
  CORRELATION_ID,
9
12
  EVENT_TRIGGERS,
13
+ LOCUS,
14
+ LOCUSEVENT,
10
15
  ROAP,
11
16
  } from '../constants';
12
17
  import LoggerProxy from '../common/logs/logger-proxy';
13
18
  import Trigger from '../common/events/trigger-proxy';
19
+ import BEHAVIORAL_METRICS from '../metrics/constants';
20
+ import Metrics from '../metrics';
14
21
 
15
22
  /**
16
23
  * Meetings Media Codec Missing Event
@@ -44,6 +51,14 @@ MeetingsUtil.handleRoapMercury = (envelope, meetingCollection) => {
44
51
  if (meeting) {
45
52
  const {seq, messageType, tieBreaker, errorType, errorCause} = data.message;
46
53
 
54
+ Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.ROAP_MERCURY_EVENT_RECEIVED, {
55
+ correlation_id: data.correlationId,
56
+ seq,
57
+ message_type: messageType,
58
+ error_type: errorType,
59
+ error_cause: errorCause,
60
+ });
61
+
47
62
  if (messageType === ROAP.ROAP_TYPES.TURN_DISCOVERY_RESPONSE) {
48
63
  // turn discovery is not part of normal roap protocol and so we are not handling it
49
64
  // through the usual roap state machine
@@ -58,12 +73,36 @@ MeetingsUtil.handleRoapMercury = (envelope, meetingCollection) => {
58
73
  errorCause,
59
74
  };
60
75
 
76
+ const mediaServer = MeetingsUtil.getMediaServer(roapMessage.sdp);
77
+
61
78
  meeting.mediaProperties.webrtcMediaConnection.roapMessageReceived(roapMessage);
79
+
80
+ if (mediaServer) {
81
+ meeting.mediaProperties.webrtcMediaConnection.mediaServer = mediaServer;
82
+ }
62
83
  }
63
84
  }
64
85
  }
65
86
  };
66
87
 
88
+ MeetingsUtil.getMediaServer = (sdp) => {
89
+ let mediaServer;
90
+
91
+ // Attempt to collect the media server from the roap message.
92
+ try {
93
+ mediaServer = sdp
94
+ .split('\r\n')
95
+ .find((line) => line.startsWith('o='))
96
+ .split(' ')
97
+ .shift()
98
+ .replace('o=', '');
99
+ } catch {
100
+ mediaServer = undefined;
101
+ }
102
+
103
+ return mediaServer;
104
+ };
105
+
67
106
  MeetingsUtil.checkForCorrelationId = (deviceUrl, locus) => {
68
107
  let devices = [];
69
108
 
@@ -85,11 +124,13 @@ MeetingsUtil.checkForCorrelationId = (deviceUrl, locus) => {
85
124
  MeetingsUtil.parseDefaultSiteFromMeetingPreferences = (userPreferences) => {
86
125
  let result = '';
87
126
 
88
- if (userPreferences && userPreferences.sites) {
127
+ if (userPreferences?.sites?.length) {
89
128
  const defaultSite = userPreferences.sites.find((site) => site.default);
90
129
 
91
130
  if (defaultSite) {
92
131
  result = defaultSite.siteUrl;
132
+ } else {
133
+ result = userPreferences.sites[0].siteUrl;
93
134
  }
94
135
  }
95
136
 
@@ -196,4 +237,62 @@ MeetingsUtil.checkH264Support = async function checkH264Support(options: {
196
237
  }, delay);
197
238
  };
198
239
 
240
+ /**
241
+ * get device from locus data
242
+ * @param {Object} newLocus new locus data
243
+ * @param {String} deviceUrl current device url
244
+ * @returns {Object}
245
+ */
246
+ MeetingsUtil.getThisDevice = (newLocus: any, deviceUrl: string) => {
247
+ if (newLocus?.self?.devices?.length > 0) {
248
+ return newLocus.self.devices.find((device) => device.url === deviceUrl);
249
+ }
250
+
251
+ return null;
252
+ };
253
+
254
+ /**
255
+ * get self device joined status from locus data
256
+ * @param {Object} meeting current meeting data
257
+ * @param {Object} newLocus new locus data
258
+ * @param {String} deviceUrl current device url
259
+ * @returns {Object}
260
+ */
261
+ MeetingsUtil.joinedOnThisDevice = (meeting: any, newLocus: any, deviceUrl: string) => {
262
+ const thisDevice = MeetingsUtil.getThisDevice(newLocus, deviceUrl);
263
+ if (thisDevice) {
264
+ if (!thisDevice.correlationId || meeting?.correlationId === thisDevice.correlationId) {
265
+ return (
266
+ thisDevice.state === _JOINED_ ||
267
+ (thisDevice.state === _LEFT_ && thisDevice.reason === _MOVED_)
268
+ );
269
+ }
270
+ }
271
+
272
+ return false;
273
+ };
274
+
275
+ /**
276
+ * check the new locus is breakout session's one or not
277
+ * @param {Object} newLocus new locus data
278
+ * @returns {boolean}
279
+ * @private
280
+ */
281
+ MeetingsUtil.isBreakoutLocusDTO = (newLocus: any) => {
282
+ return newLocus?.controls?.breakout?.sessionType === BREAKOUTS.SESSION_TYPES.BREAKOUT;
283
+ };
284
+
285
+ /**
286
+ * check the locus is valid breakout locus or not
287
+ * @param {Object} locus
288
+ * @returns {boolean}
289
+ * @private
290
+ */
291
+ MeetingsUtil.isValidBreakoutLocus = (locus: any) => {
292
+ const inActiveStatus = locus?.fullState?.state === LOCUS.STATE.INACTIVE;
293
+ const isLocusAsBreakout = MeetingsUtil.isBreakoutLocusDTO(locus);
294
+ const selfJoined = locus.self?.state === _JOINED_;
295
+
296
+ return isLocusAsBreakout && !inActiveStatus && selfJoined;
297
+ };
199
298
  export default MeetingsUtil;
@@ -2,6 +2,7 @@
2
2
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
3
  */
4
4
  import {MEETINGS, _IN_LOBBY_, _NOT_IN_MEETING_, _IN_MEETING_} from '../constants';
5
+ import {IExternalRoles, ParticipantWithRoles} from './types';
5
6
 
6
7
  import MemberUtil from './util';
7
8
 
@@ -28,9 +29,12 @@ export default class Member {
28
29
  isSelf: any;
29
30
  isUser: any;
30
31
  isVideoMuted: any;
32
+ roles: IExternalRoles;
31
33
  name: any;
32
34
  participant: any;
33
35
  status: any;
36
+ supportsBreakouts: boolean;
37
+ supportLiveAnnotation: boolean;
34
38
  type: any;
35
39
  namespace = MEETINGS;
36
40
 
@@ -100,6 +104,20 @@ export default class Member {
100
104
  * @memberof Member
101
105
  */
102
106
  this.isHandRaised = null;
107
+ /**
108
+ * @instance
109
+ * @type {Boolean}
110
+ * @public
111
+ * @memberof Member
112
+ */
113
+ this.supportsBreakouts = null;
114
+ /**
115
+ * @instance
116
+ * @type {Boolean}
117
+ * @public
118
+ * @memberof Member
119
+ */
120
+ this.supportLiveAnnotation = null;
103
121
  /**
104
122
  * @instance
105
123
  * @type {Boolean}
@@ -220,6 +238,14 @@ export default class Member {
220
238
  * @memberof Member
221
239
  */
222
240
  this.isModeratorAssignmentProhibited = null;
241
+
242
+ /**
243
+ * @instance
244
+ * @type {IExternalRoles}
245
+ * @public
246
+ * @memberof Member
247
+ */
248
+ this.roles = null;
223
249
  // TODO: more participant types
224
250
  // such as native client, web client, is a device, what type of phone, etc
225
251
  this.processParticipant(participant);
@@ -242,6 +268,8 @@ export default class Member {
242
268
  this.isAudioMuted = MemberUtil.isAudioMuted(participant);
243
269
  this.isVideoMuted = MemberUtil.isVideoMuted(participant);
244
270
  this.isHandRaised = MemberUtil.isHandRaised(participant);
271
+ this.supportsBreakouts = MemberUtil.isBreakoutsSupported(participant);
272
+ this.supportLiveAnnotation = MemberUtil.isLiveAnnotationSupported(participant);
245
273
  this.isGuest = MemberUtil.isGuest(participant);
246
274
  this.isUser = MemberUtil.isUser(participant);
247
275
  this.isDevice = MemberUtil.isDevice(participant);
@@ -249,6 +277,7 @@ export default class Member {
249
277
  this.isModeratorAssignmentProhibited =
250
278
  MemberUtil.isModeratorAssignmentProhibited(participant);
251
279
  this.processStatus(participant);
280
+ this.processRoles(participant as ParticipantWithRoles);
252
281
  // must be done last
253
282
  this.isNotAdmitted = MemberUtil.isNotAdmitted(participant, this.isGuest, this.status);
254
283
  }
@@ -418,6 +447,17 @@ export default class Member {
418
447
  }
419
448
  }
420
449
 
450
+ /**
451
+ * process the roles that have been applied to this member
452
+ * @param {Object} participant
453
+ * @returns {undefined}
454
+ * @private
455
+ * @memberof Member
456
+ */
457
+ private processRoles(participant: ParticipantWithRoles) {
458
+ this.roles = MemberUtil.extractControlRoles(participant);
459
+ }
460
+
421
461
  /**
422
462
  * set the type for the member, could be MEETING or CALL
423
463
  * @param {String} type
@@ -0,0 +1,24 @@
1
+ export interface IExternalRoles {
2
+ cohost: boolean;
3
+ moderator: boolean;
4
+ presenter: boolean;
5
+ }
6
+
7
+ export enum ServerRoles {
8
+ Cohost = 'COHOST',
9
+ Moderator = 'MODERATOR',
10
+ Presenter = 'PRESENTER',
11
+ }
12
+
13
+ export type ServerRoleShape = {
14
+ type: ServerRoles;
15
+ hasRole: boolean;
16
+ };
17
+
18
+ export type ParticipantWithRoles = {
19
+ controls: {
20
+ role: {
21
+ roles: Array<ServerRoleShape>;
22
+ };
23
+ };
24
+ };
@@ -1,3 +1,4 @@
1
+ import {IExternalRoles, ParticipantWithRoles, ServerRoles, ServerRoleShape} from './types';
1
2
  import {
2
3
  _USER_,
3
4
  _RESOURCE_ROOM_,
@@ -19,6 +20,58 @@ import ParameterError from '../common/errors/parameter';
19
20
 
20
21
  const MemberUtil: any = {};
21
22
 
23
+ /**
24
+ * @param {Object} participant the locus participant
25
+ * @returns {[ServerRoleShape]}
26
+ */
27
+ MemberUtil.getControlsRoles = (participant: ParticipantWithRoles): Array<ServerRoleShape> =>
28
+ participant?.controls?.role?.roles;
29
+
30
+ /**
31
+ * @param {Object} participant the locus participant
32
+ * @param {ServerRoles} controlRole the search role
33
+ * @returns {Boolean}
34
+ */
35
+ MemberUtil.hasRole = (participant: any, controlRole: ServerRoles): boolean =>
36
+ MemberUtil.getControlsRoles(participant)?.some(
37
+ (role) => role.type === controlRole && role.hasRole
38
+ );
39
+
40
+ /**
41
+ * @param {Object} participant the locus participant
42
+ * @returns {Boolean}
43
+ */
44
+ MemberUtil.hasCohost = (participant: ParticipantWithRoles): boolean =>
45
+ MemberUtil.hasRole(participant, ServerRoles.Cohost) || false;
46
+
47
+ /**
48
+ * @param {Object} participant the locus participant
49
+ * @returns {Boolean}
50
+ */
51
+ MemberUtil.hasModerator = (participant: ParticipantWithRoles): boolean =>
52
+ MemberUtil.hasRole(participant, ServerRoles.Moderator) || false;
53
+
54
+ /**
55
+ * @param {Object} participant the locus participant
56
+ * @returns {Boolean}
57
+ */
58
+ MemberUtil.hasPresenter = (participant: ParticipantWithRoles): boolean =>
59
+ MemberUtil.hasRole(participant, ServerRoles.Presenter) || false;
60
+
61
+ /**
62
+ * @param {Object} participant the locus participant
63
+ * @returns {IExternalRoles}
64
+ */
65
+ MemberUtil.extractControlRoles = (participant: ParticipantWithRoles): IExternalRoles => {
66
+ const roles = {
67
+ cohost: MemberUtil.hasCohost(participant),
68
+ moderator: MemberUtil.hasModerator(participant),
69
+ presenter: MemberUtil.hasPresenter(participant),
70
+ };
71
+
72
+ return roles;
73
+ };
74
+
22
75
  /**
23
76
  * @param {Object} participant the locus participant
24
77
  * @returns {Boolean}
@@ -72,7 +125,7 @@ MemberUtil.isAssociatedSame = (participant: any, id: string) =>
72
125
  * @param {String} status
73
126
  * @returns {Boolean}
74
127
  */
75
- MemberUtil.isNotAdmitted = (participant: any, isGuest: boolean, status: string) =>
128
+ MemberUtil.isNotAdmitted = (participant: any, isGuest: boolean, status: string): boolean =>
76
129
  participant &&
77
130
  participant.guest &&
78
131
  ((participant.devices &&
@@ -82,6 +135,7 @@ MemberUtil.isNotAdmitted = (participant: any, isGuest: boolean, status: string)
82
135
  // @ts-ignore
83
136
  isGuest &&
84
137
  status === _IN_LOBBY_) ||
138
+ // @ts-ignore
85
139
  !status === _IN_MEETING_);
86
140
 
87
141
  /**
@@ -130,6 +184,32 @@ MemberUtil.isHandRaised = (participant: any) => {
130
184
  return participant.controls?.hand?.raised || false;
131
185
  };
132
186
 
187
+ /**
188
+ * @param {Object} participant the locus participant
189
+ * @returns {Boolean}
190
+ */
191
+ MemberUtil.isBreakoutsSupported = (participant) => {
192
+ if (!participant) {
193
+ throw new ParameterError('Breakout support could not be processed, participant is undefined.');
194
+ }
195
+
196
+ return !participant.doesNotSupportBreakouts;
197
+ };
198
+
199
+ /**
200
+ * @param {Object} participant the locus participant
201
+ * @returns {Boolean}
202
+ */
203
+ MemberUtil.isLiveAnnotationSupported = (participant) => {
204
+ if (!participant) {
205
+ throw new ParameterError(
206
+ 'LiveAnnotation support could not be processed, participant is undefined.'
207
+ );
208
+ }
209
+
210
+ return !participant.annotatorAssignmentNotAllowed;
211
+ };
212
+
133
213
  /**
134
214
  * utility method for audio/video muted status
135
215
  * @param {String} status
@@ -37,4 +37,12 @@ export default class MembersCollection {
37
37
  getAll() {
38
38
  return this.members;
39
39
  }
40
+
41
+ /**
42
+ * @returns {void}
43
+ * reset members
44
+ */
45
+ reset() {
46
+ this.members = {};
47
+ }
40
48
  }
@@ -16,6 +16,7 @@ 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
22
  * Members Update Event
@@ -96,8 +97,14 @@ export default class Members extends StatelessWebexPlugin {
96
97
  * @private
97
98
  * @memberof Members
98
99
  */
100
+
99
101
  // @ts-ignore
100
- this.membersRequest = new MembersRequest({}, options);
102
+ this.membersRequest = new MembersRequest(
103
+ {
104
+ meeting: attrs.meeting,
105
+ },
106
+ options
107
+ );
101
108
  /**
102
109
  * The Members Collection cache
103
110
  * @instance
@@ -282,6 +289,25 @@ export default class Members extends StatelessWebexPlugin {
282
289
  );
283
290
  }
284
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
+
285
311
  /**
286
312
  * when new participant updates come in, both delta and full participants, update them in members collection
287
313
  * delta object in the event will have {updated, added} and full will be the full membersCollection
@@ -291,11 +317,16 @@ export default class Members extends StatelessWebexPlugin {
291
317
  * @private
292
318
  * @memberof Members
293
319
  */
294
- locusParticipantsUpdate(payload: {participants: object}) {
320
+ locusParticipantsUpdate(payload: {participants: object; isReplace?: boolean}) {
295
321
  if (payload) {
322
+ if (payload.isReplace) {
323
+ this.clearMembers();
324
+ }
296
325
  const delta = this.handleLocusInfoUpdatedParticipants(payload);
297
326
  const full = this.handleMembersUpdate(delta); // SDK should propagate the full list for both delta and non delta updates
298
327
 
328
+ this.receiveSlotManager?.updateMemberIds();
329
+
299
330
  Trigger.trigger(
300
331
  this,
301
332
  {
@@ -306,6 +337,7 @@ export default class Members extends StatelessWebexPlugin {
306
337
  {
307
338
  delta,
308
339
  full,
340
+ isReplace: !!payload.isReplace,
309
341
  }
310
342
  );
311
343
  }
@@ -731,15 +763,22 @@ export default class Members extends StatelessWebexPlugin {
731
763
  /**
732
764
  * Admits waiting members (invited guests to meeting)
733
765
  * @param {Array} memberIds
766
+ * @param {Object} sessionLocusUrls: {authorizingLocusUrl, mainLocusUrl}
734
767
  * @returns {Promise}
735
768
  * @public
736
769
  * @memberof Members
737
770
  */
738
- public admitMembers(memberIds: Array<any>) {
771
+ public admitMembers(
772
+ memberIds: Array<any>,
773
+ sessionLocusUrls?: {authorizingLocusUrl: string; mainLocusUrl: string}
774
+ ) {
739
775
  if (isEmpty(memberIds)) {
740
776
  return Promise.reject(new ParameterError('No member ids provided to admit.'));
741
777
  }
742
- const options = MembersUtil.generateAdmitMemberOptions(memberIds, this.locusUrl);
778
+ const options = {
779
+ sessionLocusUrls,
780
+ ...MembersUtil.generateAdmitMemberOptions(memberIds, this.locusUrl),
781
+ };
743
782
 
744
783
  return this.membersRequest.admitMember(options);
745
784
  }
@@ -771,11 +810,12 @@ export default class Members extends StatelessWebexPlugin {
771
810
  * Audio mutes another member in a meeting
772
811
  * @param {String} memberId
773
812
  * @param {boolean} [mute] default true
813
+ * @param {boolean} [isAudio] default true
774
814
  * @returns {Promise}
775
815
  * @public
776
816
  * @memberof Members
777
817
  */
778
- public muteMember(memberId: string, mute = true) {
818
+ public muteMember(memberId: string, mute = true, isAudio = true) {
779
819
  if (!this.locusUrl) {
780
820
  return Promise.reject(
781
821
  new ParameterError(
@@ -788,11 +828,37 @@ export default class Members extends StatelessWebexPlugin {
788
828
  new ParameterError('The member id must be defined to mute the member.')
789
829
  );
790
830
  }
791
- const options = MembersUtil.generateMuteMemberOptions(memberId, mute, this.locusUrl);
831
+ const options = MembersUtil.generateMuteMemberOptions(memberId, mute, this.locusUrl, isAudio);
792
832
 
793
833
  return this.membersRequest.muteMember(options);
794
834
  }
795
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
+
796
862
  /**
797
863
  * Raise or lower the hand of a member in a meeting
798
864
  * @param {String} memberId
@@ -925,6 +991,7 @@ export default class Members extends StatelessWebexPlugin {
925
991
  */
926
992
  findMemberByCsi(csi) {
927
993
  return Object.values(this.membersCollection.getAll()).find((member) =>
994
+ // @ts-ignore
928
995
  member.participant?.devices?.find((device) =>
929
996
  device.csis?.find((memberCsi) => memberCsi === csi)
930
997
  )
@@ -957,4 +1024,39 @@ export default class Members extends StatelessWebexPlugin {
957
1024
 
958
1025
  return csis;
959
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
+ }
960
1062
  }