@webex/plugin-meetings 3.0.0-beta.1 → 3.0.0-beta.104

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