@webex/plugin-meetings 3.0.0-beta.3 → 3.0.0-beta.300

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 (601) hide show
  1. package/README.md +46 -8
  2. package/UPGRADING.md +9 -9
  3. package/browsers.js +19 -24
  4. package/dist/annotation/annotation.types.js +7 -0
  5. package/dist/annotation/annotation.types.js.map +1 -0
  6. package/dist/annotation/constants.js +49 -0
  7. package/dist/annotation/constants.js.map +1 -0
  8. package/dist/annotation/index.js +342 -0
  9. package/dist/annotation/index.js.map +1 -0
  10. package/dist/breakouts/breakout.js +216 -0
  11. package/dist/breakouts/breakout.js.map +1 -0
  12. package/dist/breakouts/collection.js +23 -0
  13. package/dist/breakouts/collection.js.map +1 -0
  14. package/dist/breakouts/edit-lock-error.js +52 -0
  15. package/dist/breakouts/edit-lock-error.js.map +1 -0
  16. package/dist/breakouts/events.js +45 -0
  17. package/dist/breakouts/events.js.map +1 -0
  18. package/dist/breakouts/index.js +1048 -0
  19. package/dist/breakouts/index.js.map +1 -0
  20. package/dist/breakouts/request.js +78 -0
  21. package/dist/breakouts/request.js.map +1 -0
  22. package/dist/breakouts/utils.js +67 -0
  23. package/dist/breakouts/utils.js.map +1 -0
  24. package/dist/common/browser-detection.js +1 -20
  25. package/dist/common/browser-detection.js.map +1 -1
  26. package/dist/common/collection.js +5 -20
  27. package/dist/common/collection.js.map +1 -1
  28. package/dist/common/config.js +0 -7
  29. package/dist/common/config.js.map +1 -1
  30. package/dist/common/errors/captcha-error.js +10 -24
  31. package/dist/common/errors/captcha-error.js.map +1 -1
  32. package/dist/common/errors/intent-to-join.js +11 -24
  33. package/dist/common/errors/intent-to-join.js.map +1 -1
  34. package/dist/common/errors/join-meeting.js +12 -25
  35. package/dist/common/errors/join-meeting.js.map +1 -1
  36. package/dist/common/errors/media.js +10 -24
  37. package/dist/common/errors/media.js.map +1 -1
  38. package/dist/common/errors/no-meeting-info.js +51 -0
  39. package/dist/common/errors/no-meeting-info.js.map +1 -0
  40. package/dist/common/errors/parameter.js +5 -33
  41. package/dist/common/errors/parameter.js.map +1 -1
  42. package/dist/common/errors/password-error.js +10 -24
  43. package/dist/common/errors/password-error.js.map +1 -1
  44. package/dist/common/errors/permission.js +9 -23
  45. package/dist/common/errors/permission.js.map +1 -1
  46. package/dist/common/errors/reclaim-host-role-errors.js +158 -0
  47. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  48. package/dist/common/errors/reconnection-in-progress.js +0 -17
  49. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  50. package/dist/common/errors/reconnection.js +10 -24
  51. package/dist/common/errors/reconnection.js.map +1 -1
  52. package/dist/common/errors/stats.js +10 -24
  53. package/dist/common/errors/stats.js.map +1 -1
  54. package/dist/common/errors/webex-errors.js +54 -48
  55. package/dist/common/errors/webex-errors.js.map +1 -1
  56. package/dist/common/errors/webex-meetings-error.js +5 -25
  57. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  58. package/dist/common/events/events-scope.js +0 -22
  59. package/dist/common/events/events-scope.js.map +1 -1
  60. package/dist/common/events/events.js +0 -23
  61. package/dist/common/events/events.js.map +1 -1
  62. package/dist/common/events/trigger-proxy.js +0 -12
  63. package/dist/common/events/trigger-proxy.js.map +1 -1
  64. package/dist/common/events/util.js +0 -15
  65. package/dist/common/events/util.js.map +1 -1
  66. package/dist/common/logs/logger-config.js +0 -4
  67. package/dist/common/logs/logger-config.js.map +1 -1
  68. package/dist/common/logs/logger-proxy.js +1 -8
  69. package/dist/common/logs/logger-proxy.js.map +1 -1
  70. package/dist/common/logs/request.js +41 -60
  71. package/dist/common/logs/request.js.map +1 -1
  72. package/dist/common/queue.js +28 -23
  73. package/dist/common/queue.js.map +1 -1
  74. package/dist/config.js +9 -15
  75. package/dist/config.js.map +1 -1
  76. package/dist/constants.js +315 -68
  77. package/dist/constants.js.map +1 -1
  78. package/dist/controls-options-manager/constants.js +14 -0
  79. package/dist/controls-options-manager/constants.js.map +1 -0
  80. package/dist/controls-options-manager/enums.js +27 -0
  81. package/dist/controls-options-manager/enums.js.map +1 -0
  82. package/dist/controls-options-manager/index.js +297 -0
  83. package/dist/controls-options-manager/index.js.map +1 -0
  84. package/dist/controls-options-manager/types.js +7 -0
  85. package/dist/controls-options-manager/types.js.map +1 -0
  86. package/dist/controls-options-manager/util.js +319 -0
  87. package/dist/controls-options-manager/util.js.map +1 -0
  88. package/dist/index.js +114 -17
  89. package/dist/index.js.map +1 -1
  90. package/dist/interpretation/collection.js +23 -0
  91. package/dist/interpretation/collection.js.map +1 -0
  92. package/dist/interpretation/index.js +366 -0
  93. package/dist/interpretation/index.js.map +1 -0
  94. package/dist/interpretation/siLanguage.js +25 -0
  95. package/dist/interpretation/siLanguage.js.map +1 -0
  96. package/dist/locus-info/controlsUtils.js +101 -29
  97. package/dist/locus-info/controlsUtils.js.map +1 -1
  98. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  99. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  100. package/dist/locus-info/fullState.js +0 -15
  101. package/dist/locus-info/fullState.js.map +1 -1
  102. package/dist/locus-info/hostUtils.js +4 -12
  103. package/dist/locus-info/hostUtils.js.map +1 -1
  104. package/dist/locus-info/index.js +561 -246
  105. package/dist/locus-info/index.js.map +1 -1
  106. package/dist/locus-info/infoUtils.js +10 -38
  107. package/dist/locus-info/infoUtils.js.map +1 -1
  108. package/dist/locus-info/mediaSharesUtils.js +68 -38
  109. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  110. package/dist/locus-info/parser.js +314 -163
  111. package/dist/locus-info/parser.js.map +1 -1
  112. package/dist/locus-info/selfUtils.js +110 -92
  113. package/dist/locus-info/selfUtils.js.map +1 -1
  114. package/dist/media/index.js +103 -231
  115. package/dist/media/index.js.map +1 -1
  116. package/dist/media/properties.js +137 -222
  117. package/dist/media/properties.js.map +1 -1
  118. package/dist/media/util.js +2 -9
  119. package/dist/media/util.js.map +1 -1
  120. package/dist/mediaQualityMetrics/config.js +505 -495
  121. package/dist/mediaQualityMetrics/config.js.map +1 -1
  122. package/dist/meeting/in-meeting-actions.js +93 -14
  123. package/dist/meeting/in-meeting-actions.js.map +1 -1
  124. package/dist/meeting/index.js +4624 -3740
  125. package/dist/meeting/index.js.map +1 -1
  126. package/dist/meeting/locusMediaRequest.js +292 -0
  127. package/dist/meeting/locusMediaRequest.js.map +1 -0
  128. package/dist/meeting/muteState.js +249 -184
  129. package/dist/meeting/muteState.js.map +1 -1
  130. package/dist/meeting/request.js +400 -346
  131. package/dist/meeting/request.js.map +1 -1
  132. package/dist/meeting/request.type.js +7 -0
  133. package/dist/meeting/request.type.js.map +1 -0
  134. package/dist/meeting/state.js +21 -31
  135. package/dist/meeting/state.js.map +1 -1
  136. package/dist/meeting/util.js +598 -586
  137. package/dist/meeting/util.js.map +1 -1
  138. package/dist/meeting-info/collection.js +6 -25
  139. package/dist/meeting-info/collection.js.map +1 -1
  140. package/dist/meeting-info/index.js +87 -39
  141. package/dist/meeting-info/index.js.map +1 -1
  142. package/dist/meeting-info/meeting-info-v2.js +349 -283
  143. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  144. package/dist/meeting-info/request.js +3 -15
  145. package/dist/meeting-info/request.js.map +1 -1
  146. package/dist/meeting-info/util.js +98 -183
  147. package/dist/meeting-info/util.js.map +1 -1
  148. package/dist/meeting-info/utilv2.js +143 -234
  149. package/dist/meeting-info/utilv2.js.map +1 -1
  150. package/dist/meetings/collection.js +26 -19
  151. package/dist/meetings/collection.js.map +1 -1
  152. package/dist/meetings/index.js +813 -596
  153. package/dist/meetings/index.js.map +1 -1
  154. package/dist/meetings/meetings.types.js +7 -0
  155. package/dist/meetings/meetings.types.js.map +1 -0
  156. package/dist/meetings/request.js +26 -41
  157. package/dist/meetings/request.js.map +1 -1
  158. package/dist/meetings/util.js +183 -156
  159. package/dist/meetings/util.js.map +1 -1
  160. package/dist/member/index.js +135 -85
  161. package/dist/member/index.js.map +1 -1
  162. package/dist/member/types.js +25 -0
  163. package/dist/member/types.js.map +1 -0
  164. package/dist/member/util.js +158 -88
  165. package/dist/member/util.js.map +1 -1
  166. package/dist/members/collection.js +13 -12
  167. package/dist/members/collection.js.map +1 -1
  168. package/dist/members/index.js +194 -204
  169. package/dist/members/index.js.map +1 -1
  170. package/dist/members/request.js +113 -68
  171. package/dist/members/request.js.map +1 -1
  172. package/dist/members/types.js +15 -0
  173. package/dist/members/types.js.map +1 -0
  174. package/dist/members/util.js +324 -259
  175. package/dist/members/util.js.map +1 -1
  176. package/dist/metrics/constants.js +14 -7
  177. package/dist/metrics/constants.js.map +1 -1
  178. package/dist/metrics/index.js +11 -558
  179. package/dist/metrics/index.js.map +1 -1
  180. package/dist/multistream/mediaRequestManager.js +263 -50
  181. package/dist/multistream/mediaRequestManager.js.map +1 -1
  182. package/dist/multistream/receiveSlot.js +58 -65
  183. package/dist/multistream/receiveSlot.js.map +1 -1
  184. package/dist/multistream/receiveSlotManager.js +76 -95
  185. package/dist/multistream/receiveSlotManager.js.map +1 -1
  186. package/dist/multistream/remoteMedia.js +62 -76
  187. package/dist/multistream/remoteMedia.js.map +1 -1
  188. package/dist/multistream/remoteMediaGroup.js +66 -43
  189. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  190. package/dist/multistream/remoteMediaManager.js +536 -439
  191. package/dist/multistream/remoteMediaManager.js.map +1 -1
  192. package/dist/multistream/sendSlotManager.js +233 -0
  193. package/dist/multistream/sendSlotManager.js.map +1 -0
  194. package/dist/networkQualityMonitor/index.js +40 -59
  195. package/dist/networkQualityMonitor/index.js.map +1 -1
  196. package/dist/personal-meeting-room/index.js +21 -45
  197. package/dist/personal-meeting-room/index.js.map +1 -1
  198. package/dist/personal-meeting-room/request.js +1 -31
  199. package/dist/personal-meeting-room/request.js.map +1 -1
  200. package/dist/personal-meeting-room/util.js +0 -13
  201. package/dist/personal-meeting-room/util.js.map +1 -1
  202. package/dist/reachability/index.js +322 -200
  203. package/dist/reachability/index.js.map +1 -1
  204. package/dist/reachability/request.js +20 -26
  205. package/dist/reachability/request.js.map +1 -1
  206. package/dist/reactions/constants.js +13 -0
  207. package/dist/reactions/constants.js.map +1 -0
  208. package/dist/reactions/reactions.js +109 -0
  209. package/dist/reactions/reactions.js.map +1 -0
  210. package/dist/reactions/reactions.type.js +36 -0
  211. package/dist/reactions/reactions.type.js.map +1 -0
  212. package/dist/reconnection-manager/index.js +388 -476
  213. package/dist/reconnection-manager/index.js.map +1 -1
  214. package/dist/recording-controller/enums.js +17 -0
  215. package/dist/recording-controller/enums.js.map +1 -0
  216. package/dist/recording-controller/index.js +362 -0
  217. package/dist/recording-controller/index.js.map +1 -0
  218. package/dist/recording-controller/util.js +64 -0
  219. package/dist/recording-controller/util.js.map +1 -0
  220. package/dist/roap/index.js +99 -94
  221. package/dist/roap/index.js.map +1 -1
  222. package/dist/roap/request.js +131 -135
  223. package/dist/roap/request.js.map +1 -1
  224. package/dist/roap/turnDiscovery.js +151 -101
  225. package/dist/roap/turnDiscovery.js.map +1 -1
  226. package/dist/rtcMetrics/constants.js +12 -0
  227. package/dist/rtcMetrics/constants.js.map +1 -0
  228. package/dist/rtcMetrics/index.js +117 -0
  229. package/dist/rtcMetrics/index.js.map +1 -0
  230. package/dist/statsAnalyzer/global.js +1 -95
  231. package/dist/statsAnalyzer/global.js.map +1 -1
  232. package/dist/statsAnalyzer/index.js +416 -497
  233. package/dist/statsAnalyzer/index.js.map +1 -1
  234. package/dist/statsAnalyzer/mqaUtil.js +145 -88
  235. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  236. package/dist/transcription/index.js +22 -47
  237. package/dist/transcription/index.js.map +1 -1
  238. package/dist/types/annotation/annotation.types.d.ts +42 -0
  239. package/dist/types/annotation/constants.d.ts +31 -0
  240. package/dist/types/annotation/index.d.ts +117 -0
  241. package/dist/types/breakouts/breakout.d.ts +8 -0
  242. package/dist/types/breakouts/collection.d.ts +5 -0
  243. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  244. package/dist/types/breakouts/events.d.ts +8 -0
  245. package/dist/types/breakouts/index.d.ts +5 -0
  246. package/dist/types/breakouts/request.d.ts +22 -0
  247. package/dist/types/breakouts/utils.d.ts +15 -0
  248. package/dist/types/common/browser-detection.d.ts +9 -0
  249. package/dist/types/common/collection.d.ts +48 -0
  250. package/dist/types/common/config.d.ts +2 -0
  251. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  252. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  253. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  254. package/dist/types/common/errors/media.d.ts +15 -0
  255. package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
  256. package/dist/types/common/errors/parameter.d.ts +15 -0
  257. package/dist/types/common/errors/password-error.d.ts +15 -0
  258. package/dist/types/common/errors/permission.d.ts +14 -0
  259. package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
  260. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  261. package/dist/types/common/errors/reconnection.d.ts +15 -0
  262. package/dist/types/common/errors/stats.d.ts +15 -0
  263. package/dist/types/common/errors/webex-errors.d.ts +93 -0
  264. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  265. package/dist/types/common/events/events-scope.d.ts +17 -0
  266. package/dist/types/common/events/events.d.ts +12 -0
  267. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  268. package/dist/types/common/events/util.d.ts +2 -0
  269. package/dist/types/common/logs/logger-config.d.ts +2 -0
  270. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  271. package/dist/types/common/logs/request.d.ts +36 -0
  272. package/dist/types/common/queue.d.ts +34 -0
  273. package/dist/types/config.d.ts +71 -0
  274. package/dist/types/constants.d.ts +1066 -0
  275. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  276. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  277. package/dist/types/controls-options-manager/index.d.ts +136 -0
  278. package/dist/types/controls-options-manager/types.d.ts +43 -0
  279. package/dist/types/controls-options-manager/util.d.ts +1 -0
  280. package/dist/types/index.d.ts +7 -0
  281. package/dist/types/interpretation/collection.d.ts +5 -0
  282. package/dist/types/interpretation/index.d.ts +5 -0
  283. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  284. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  285. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  286. package/dist/types/locus-info/fullState.d.ts +2 -0
  287. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  288. package/dist/types/locus-info/index.d.ts +322 -0
  289. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  290. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  291. package/dist/types/locus-info/parser.d.ts +273 -0
  292. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  293. package/dist/types/media/index.d.ts +34 -0
  294. package/dist/types/media/properties.d.ts +93 -0
  295. package/dist/types/media/util.d.ts +2 -0
  296. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  297. package/dist/types/meeting/in-meeting-actions.d.ts +163 -0
  298. package/dist/types/meeting/index.d.ts +1676 -0
  299. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  300. package/dist/types/meeting/muteState.d.ts +184 -0
  301. package/dist/types/meeting/request.d.ts +290 -0
  302. package/dist/types/meeting/request.type.d.ts +11 -0
  303. package/dist/types/meeting/state.d.ts +9 -0
  304. package/dist/types/meeting/util.d.ts +102 -0
  305. package/dist/types/meeting-info/collection.d.ts +20 -0
  306. package/dist/types/meeting-info/index.d.ts +69 -0
  307. package/dist/types/meeting-info/meeting-info-v2.d.ts +123 -0
  308. package/dist/types/meeting-info/request.d.ts +22 -0
  309. package/dist/types/meeting-info/util.d.ts +2 -0
  310. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  311. package/dist/types/meetings/collection.d.ts +31 -0
  312. package/dist/types/meetings/index.d.ts +367 -0
  313. package/dist/types/meetings/meetings.types.d.ts +4 -0
  314. package/dist/types/meetings/request.d.ts +27 -0
  315. package/dist/types/meetings/util.d.ts +18 -0
  316. package/dist/types/member/index.d.ts +160 -0
  317. package/dist/types/member/types.d.ts +32 -0
  318. package/dist/types/member/util.d.ts +2 -0
  319. package/dist/types/members/collection.d.ts +29 -0
  320. package/dist/types/members/index.d.ts +353 -0
  321. package/dist/types/members/request.d.ts +114 -0
  322. package/dist/types/members/types.d.ts +25 -0
  323. package/dist/types/members/util.d.ts +215 -0
  324. package/dist/types/metrics/constants.d.ts +65 -0
  325. package/dist/types/metrics/index.d.ts +45 -0
  326. package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
  327. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  328. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  329. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  330. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  331. package/dist/types/multistream/remoteMediaManager.d.ts +285 -0
  332. package/dist/types/multistream/sendSlotManager.d.ts +61 -0
  333. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  334. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  335. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  336. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  337. package/dist/types/reachability/index.d.ts +194 -0
  338. package/dist/types/reachability/request.d.ts +39 -0
  339. package/dist/types/reactions/constants.d.ts +3 -0
  340. package/dist/types/reactions/reactions.d.ts +4 -0
  341. package/dist/types/reactions/reactions.type.d.ts +52 -0
  342. package/dist/types/reconnection-manager/index.d.ts +126 -0
  343. package/dist/types/recording-controller/enums.d.ts +7 -0
  344. package/dist/types/recording-controller/index.d.ts +207 -0
  345. package/dist/types/recording-controller/util.d.ts +14 -0
  346. package/dist/types/roap/index.d.ts +78 -0
  347. package/dist/types/roap/request.d.ts +39 -0
  348. package/dist/types/roap/turnDiscovery.d.ts +92 -0
  349. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  350. package/dist/types/rtcMetrics/index.d.ts +47 -0
  351. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  352. package/dist/types/statsAnalyzer/index.d.ts +201 -0
  353. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  354. package/dist/types/transcription/index.d.ts +64 -0
  355. package/dist/types/webinar/collection.d.ts +16 -0
  356. package/dist/types/webinar/index.d.ts +5 -0
  357. package/dist/webinar/collection.js +44 -0
  358. package/dist/webinar/collection.js.map +1 -0
  359. package/dist/webinar/index.js +69 -0
  360. package/dist/webinar/index.js.map +1 -0
  361. package/internal-README.md +7 -6
  362. package/package.json +29 -21
  363. package/src/annotation/annotation.types.ts +50 -0
  364. package/src/annotation/constants.ts +36 -0
  365. package/src/annotation/index.ts +328 -0
  366. package/src/breakouts/README.md +220 -0
  367. package/src/breakouts/breakout.ts +188 -0
  368. package/src/breakouts/collection.ts +19 -0
  369. package/src/breakouts/edit-lock-error.ts +25 -0
  370. package/src/breakouts/events.ts +56 -0
  371. package/src/breakouts/index.ts +925 -0
  372. package/src/breakouts/request.ts +55 -0
  373. package/src/breakouts/utils.ts +57 -0
  374. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  375. package/src/common/collection.ts +9 -7
  376. package/src/common/{config.js → config.ts} +1 -1
  377. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  378. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  379. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  380. package/src/common/errors/{media.js → media.ts} +11 -7
  381. package/src/common/errors/no-meeting-info.ts +24 -0
  382. package/src/common/errors/parameter.ts +11 -7
  383. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  384. package/src/common/errors/{permission.js → permission.ts} +10 -6
  385. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  386. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  387. package/src/common/errors/{stats.js → stats.ts} +11 -7
  388. package/src/common/errors/{webex-errors.js → webex-errors.ts} +51 -8
  389. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  390. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  391. package/src/common/events/{events.js → events.ts} +5 -1
  392. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  393. package/src/common/events/{util.js → util.ts} +2 -3
  394. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  395. package/src/common/logs/logger-proxy.ts +44 -0
  396. package/src/common/logs/{request.js → request.ts} +26 -9
  397. package/src/common/queue.ts +22 -9
  398. package/src/{config.js → config.ts} +18 -19
  399. package/src/constants.ts +260 -22
  400. package/src/controls-options-manager/constants.ts +5 -0
  401. package/src/controls-options-manager/enums.ts +18 -0
  402. package/src/controls-options-manager/index.ts +278 -0
  403. package/src/controls-options-manager/types.ts +59 -0
  404. package/src/controls-options-manager/util.ts +300 -0
  405. package/src/index.ts +40 -0
  406. package/src/interpretation/README.md +60 -0
  407. package/src/interpretation/collection.ts +19 -0
  408. package/src/interpretation/index.ts +332 -0
  409. package/src/interpretation/siLanguage.ts +18 -0
  410. package/src/locus-info/controlsUtils.ts +222 -0
  411. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  412. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  413. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  414. package/src/locus-info/{index.js → index.ts} +557 -119
  415. package/src/locus-info/{infoUtils.js → infoUtils.ts} +29 -10
  416. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +81 -17
  417. package/src/locus-info/{parser.js → parser.ts} +303 -104
  418. package/src/locus-info/{selfUtils.js → selfUtils.ts} +199 -68
  419. package/src/media/index.ts +458 -0
  420. package/src/media/properties.ts +283 -0
  421. package/src/media/{util.js → util.ts} +2 -2
  422. package/src/mediaQualityMetrics/config.ts +384 -0
  423. package/src/meeting/in-meeting-actions.ts +191 -3
  424. package/src/meeting/index.ts +7882 -0
  425. package/src/meeting/locusMediaRequest.ts +313 -0
  426. package/src/meeting/muteState.ts +451 -0
  427. package/src/meeting/{request.js → request.ts} +421 -220
  428. package/src/meeting/request.type.ts +13 -0
  429. package/src/meeting/{state.js → state.ts} +50 -35
  430. package/src/meeting/util.ts +697 -0
  431. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  432. package/src/meeting-info/index.ts +210 -0
  433. package/src/meeting-info/meeting-info-v2.ts +429 -0
  434. package/src/meeting-info/{request.js → request.ts} +14 -4
  435. package/src/meeting-info/{util.js → util.ts} +60 -51
  436. package/src/meeting-info/{utilv2.js → utilv2.ts} +78 -71
  437. package/src/meetings/{collection.js → collection.ts} +26 -3
  438. package/src/meetings/index.ts +1470 -0
  439. package/src/meetings/meetings.types.ts +12 -0
  440. package/src/meetings/{request.js → request.ts} +34 -25
  441. package/src/meetings/{util.js → util.ts} +132 -37
  442. package/src/member/{index.js → index.ts} +160 -56
  443. package/src/member/types.ts +38 -0
  444. package/src/member/util.ts +397 -0
  445. package/src/members/{collection.js → collection.ts} +10 -2
  446. package/src/members/{index.js → index.ts} +351 -146
  447. package/src/members/request.ts +255 -0
  448. package/src/members/types.ts +29 -0
  449. package/src/members/util.ts +353 -0
  450. package/src/metrics/{constants.js → constants.ts} +12 -6
  451. package/src/metrics/index.ts +73 -0
  452. package/src/multistream/mediaRequestManager.ts +337 -63
  453. package/src/multistream/receiveSlot.ts +69 -26
  454. package/src/multistream/receiveSlotManager.ts +66 -42
  455. package/src/multistream/remoteMedia.ts +40 -5
  456. package/src/multistream/remoteMediaGroup.ts +63 -3
  457. package/src/multistream/remoteMediaManager.ts +300 -66
  458. package/src/multistream/sendSlotManager.ts +170 -0
  459. package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
  460. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  461. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  462. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  463. package/src/reachability/index.ts +671 -0
  464. package/src/reachability/request.ts +50 -35
  465. package/src/reactions/constants.ts +4 -0
  466. package/src/reactions/reactions.ts +104 -0
  467. package/src/reactions/reactions.type.ts +62 -0
  468. package/src/reconnection-manager/{index.js → index.ts} +258 -138
  469. package/src/recording-controller/enums.ts +8 -0
  470. package/src/recording-controller/index.ts +332 -0
  471. package/src/recording-controller/util.ts +75 -0
  472. package/src/roap/{index.js → index.ts} +127 -79
  473. package/src/roap/request.ts +153 -0
  474. package/src/roap/turnDiscovery.ts +109 -47
  475. package/src/rtcMetrics/constants.ts +3 -0
  476. package/src/rtcMetrics/index.ts +100 -0
  477. package/src/statsAnalyzer/global.ts +37 -0
  478. package/src/statsAnalyzer/index.ts +1250 -0
  479. package/src/statsAnalyzer/mqaUtil.ts +292 -0
  480. package/src/transcription/{index.js → index.ts} +46 -39
  481. package/src/webinar/collection.ts +31 -0
  482. package/src/webinar/index.ts +62 -0
  483. package/test/integration/spec/converged-space-meetings.js +233 -0
  484. package/test/integration/spec/journey.js +790 -530
  485. package/test/integration/spec/space-meeting.js +391 -204
  486. package/test/integration/spec/transcription.js +7 -8
  487. package/test/unit/spec/annotation/index.ts +418 -0
  488. package/test/unit/spec/breakouts/breakout.ts +237 -0
  489. package/test/unit/spec/breakouts/collection.ts +15 -0
  490. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  491. package/test/unit/spec/breakouts/events.ts +89 -0
  492. package/test/unit/spec/breakouts/index.ts +1790 -0
  493. package/test/unit/spec/breakouts/request.ts +104 -0
  494. package/test/unit/spec/breakouts/utils.js +72 -0
  495. package/test/unit/spec/common/browser-detection.js +9 -28
  496. package/test/unit/spec/common/queue.js +31 -2
  497. package/test/unit/spec/controls-options-manager/index.js +287 -0
  498. package/test/unit/spec/controls-options-manager/util.js +582 -0
  499. package/test/unit/spec/fixture/locus.js +93 -90
  500. package/test/unit/spec/interpretation/collection.ts +15 -0
  501. package/test/unit/spec/interpretation/index.ts +589 -0
  502. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  503. package/test/unit/spec/locus-info/controlsUtils.js +325 -32
  504. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  505. package/test/unit/spec/locus-info/index.js +1390 -17
  506. package/test/unit/spec/locus-info/infoUtils.js +71 -40
  507. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  508. package/test/unit/spec/locus-info/lib/SeqCmp.json +529 -685
  509. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  510. package/test/unit/spec/locus-info/parser.js +119 -44
  511. package/test/unit/spec/locus-info/selfConstant.js +120 -103
  512. package/test/unit/spec/locus-info/selfUtils.js +296 -12
  513. package/test/unit/spec/media/index.ts +128 -77
  514. package/test/unit/spec/media/properties.ts +11 -11
  515. package/test/unit/spec/meeting/in-meeting-actions.ts +92 -3
  516. package/test/unit/spec/meeting/index.js +7433 -2752
  517. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  518. package/test/unit/spec/meeting/muteState.js +420 -211
  519. package/test/unit/spec/meeting/request.js +545 -79
  520. package/test/unit/spec/meeting/utils.js +722 -174
  521. package/test/unit/spec/meeting-info/index.js +300 -0
  522. package/test/unit/spec/meeting-info/meetinginfov2.js +624 -76
  523. package/test/unit/spec/meeting-info/request.js +7 -9
  524. package/test/unit/spec/meeting-info/util.js +11 -12
  525. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  526. package/test/unit/spec/meetings/collection.js +15 -1
  527. package/test/unit/spec/meetings/index.js +1365 -377
  528. package/test/unit/spec/meetings/utils.js +216 -14
  529. package/test/unit/spec/member/index.js +61 -7
  530. package/test/unit/spec/member/util.js +526 -26
  531. package/test/unit/spec/members/index.js +536 -55
  532. package/test/unit/spec/members/request.js +228 -40
  533. package/test/unit/spec/members/utils.js +217 -4
  534. package/test/unit/spec/metrics/index.js +12 -66
  535. package/test/unit/spec/multistream/mediaRequestManager.ts +1012 -109
  536. package/test/unit/spec/multistream/receiveSlot.ts +77 -18
  537. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  538. package/test/unit/spec/multistream/remoteMedia.ts +40 -2
  539. package/test/unit/spec/multistream/remoteMediaGroup.ts +271 -5
  540. package/test/unit/spec/multistream/remoteMediaManager.ts +738 -65
  541. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  542. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  543. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  544. package/test/unit/spec/reachability/index.ts +598 -26
  545. package/test/unit/spec/reachability/request.js +68 -0
  546. package/test/unit/spec/reconnection-manager/index.js +181 -12
  547. package/test/unit/spec/recording-controller/index.js +307 -0
  548. package/test/unit/spec/recording-controller/util.js +229 -0
  549. package/test/unit/spec/roap/index.ts +179 -64
  550. package/test/unit/spec/roap/request.ts +232 -0
  551. package/test/unit/spec/roap/turnDiscovery.ts +123 -58
  552. package/test/unit/spec/rtcMetrics/index.ts +73 -0
  553. package/test/unit/spec/stats-analyzer/index.js +199 -60
  554. package/test/unit/spec/webinar/collection.ts +13 -0
  555. package/test/unit/spec/webinar/index.ts +60 -0
  556. package/test/utils/cmr.js +44 -42
  557. package/test/utils/constants.js +9 -0
  558. package/test/utils/integrationTestUtils.js +46 -0
  559. package/test/utils/testUtils.js +63 -99
  560. package/test/utils/webex-config.js +22 -18
  561. package/test/utils/webex-test-users.js +57 -50
  562. package/tsconfig.json +6 -0
  563. package/dist/media/internal-media-core-wrapper.js +0 -22
  564. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  565. package/dist/meeting/effectsState.js +0 -327
  566. package/dist/meeting/effectsState.js.map +0 -1
  567. package/dist/metrics/config.js +0 -301
  568. package/dist/metrics/config.js.map +0 -1
  569. package/dist/multistream/multistreamMedia.js +0 -116
  570. package/dist/multistream/multistreamMedia.js.map +0 -1
  571. package/dist/peer-connection-manager/util.js +0 -124
  572. package/dist/peer-connection-manager/util.js.map +0 -1
  573. package/src/common/logs/logger-proxy.js +0 -33
  574. package/src/index.js +0 -15
  575. package/src/locus-info/controlsUtils.js +0 -102
  576. package/src/media/index.js +0 -459
  577. package/src/media/internal-media-core-wrapper.ts +0 -9
  578. package/src/media/properties.js +0 -289
  579. package/src/mediaQualityMetrics/config.js +0 -382
  580. package/src/meeting/effectsState.js +0 -205
  581. package/src/meeting/index.js +0 -6284
  582. package/src/meeting/muteState.js +0 -318
  583. package/src/meeting/util.js +0 -506
  584. package/src/meeting-info/index.js +0 -131
  585. package/src/meeting-info/meeting-info-v2.js +0 -255
  586. package/src/meetings/index.js +0 -1015
  587. package/src/member/util.js +0 -254
  588. package/src/members/request.js +0 -131
  589. package/src/members/util.js +0 -258
  590. package/src/metrics/config.js +0 -324
  591. package/src/metrics/index.js +0 -530
  592. package/src/multistream/multistreamMedia.ts +0 -92
  593. package/src/peer-connection-manager/util.ts +0 -117
  594. package/src/reachability/index.js +0 -464
  595. package/src/roap/request.js +0 -127
  596. package/src/statsAnalyzer/global.js +0 -133
  597. package/src/statsAnalyzer/index.js +0 -1006
  598. package/src/statsAnalyzer/mqaUtil.js +0 -173
  599. package/test/unit/spec/meeting/effectsState.js +0 -291
  600. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
  601. /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
@@ -1,13 +1,20 @@
1
- import {MediaConnection as MC} from '@webex/internal-media-core';
1
+ /* eslint-disable valid-jsdoc */
2
+ import {
3
+ MediaType,
4
+ ReceiveSlot as WcmeReceiveSlot,
5
+ ReceiveSlotEvents as WcmeReceiveSlotEvents,
6
+ StreamState,
7
+ } from '@webex/internal-media-core';
2
8
 
3
9
  import LoggerProxy from '../common/logs/logger-proxy';
4
10
  import EventsScope from '../common/events/events-scope';
5
11
 
6
12
  export const ReceiveSlotEvents = {
7
13
  SourceUpdate: 'sourceUpdate',
14
+ MaxFsUpdate: 'maxFsUpdate',
8
15
  };
9
16
 
10
- export type SourceState = MC.SourceState;
17
+ export type {StreamState} from '@webex/internal-media-core';
11
18
  export type CSI = number;
12
19
  export type MemberId = string;
13
20
  export type ReceiveSlotId = string;
@@ -21,31 +28,31 @@ export type FindMemberIdCallback = (csi: CSI) => MemberId | undefined;
21
28
  * for example some participant's main video or audio
22
29
  */
23
30
  export class ReceiveSlot extends EventsScope {
24
- private readonly mcReceiveSlot: MC.ReceiveSlot;
31
+ private readonly mcReceiveSlot: WcmeReceiveSlot;
25
32
 
26
33
  private readonly findMemberIdCallback: FindMemberIdCallback;
27
34
 
28
35
  public readonly id: ReceiveSlotId;
29
36
 
30
- public readonly mediaType: MC.MediaType;
37
+ public readonly mediaType: MediaType;
31
38
 
32
39
  #memberId?: MemberId;
33
40
 
34
41
  #csi?: CSI;
35
42
 
36
- #sourceState: MC.SourceState;
43
+ #sourceState: StreamState;
37
44
 
38
45
  /**
39
46
  * constructor - don't use it directly, you should always use meeting.receiveSlotManager.allocateSlot()
40
47
  * to create any receive slots
41
48
  *
42
- * @param {MC.MediaType} mediaType
43
- * @param {MC.ReceiveSlot} mcReceiveSlot
49
+ * @param {MediaType} mediaType
50
+ * @param {ReceiveSlot} mcReceiveSlot
44
51
  * @param {FindMemberIdCallback} findMemberIdCallback callback for finding memberId for given CSI
45
52
  */
46
53
  constructor(
47
- mediaType: MC.MediaType,
48
- mcReceiveSlot: MC.ReceiveSlot,
54
+ mediaType: MediaType,
55
+ mcReceiveSlot: WcmeReceiveSlot,
49
56
  findMemberIdCallback: FindMemberIdCallback
50
57
  ) {
51
58
  super();
@@ -75,6 +82,25 @@ export class ReceiveSlot extends EventsScope {
75
82
  return this.#csi;
76
83
  }
77
84
 
85
+ /**
86
+ * Set the max frame size for this slot
87
+ * @param newFs frame size
88
+ */
89
+ public setMaxFs(newFs) {
90
+ // emit event for media request manager to listen to
91
+
92
+ this.emit(
93
+ {
94
+ file: 'meeting/receiveSlot',
95
+ function: 'findMemberId',
96
+ },
97
+ ReceiveSlotEvents.MaxFsUpdate,
98
+ {
99
+ maxFs: newFs,
100
+ }
101
+ );
102
+ }
103
+
78
104
  /**
79
105
  * Getter for sourceState
80
106
  */
@@ -85,15 +111,15 @@ export class ReceiveSlot extends EventsScope {
85
111
  /**
86
112
  * registers event handlers with the underlying ReceiveSlot
87
113
  */
88
- setupEventListeners() {
114
+ private setupEventListeners() {
89
115
  const scope = {
90
116
  file: 'meeting/receiveSlot',
91
117
  function: 'setupEventListeners',
92
118
  };
93
119
 
94
120
  this.mcReceiveSlot.on(
95
- MC.ReceiveSlotEvents.SourceUpdate,
96
- (state: MC.SourceState, csi?: number) => {
121
+ WcmeReceiveSlotEvents.SourceUpdate,
122
+ (state: StreamState, csi?: number) => {
97
123
  LoggerProxy.logger.log(
98
124
  `ReceiveSlot#setupEventListeners --> got source update on receive slot ${this.id}, mediaType=${this.mediaType}, csi=${csi}, state=${state}`
99
125
  );
@@ -110,6 +136,36 @@ export class ReceiveSlot extends EventsScope {
110
136
  );
111
137
  }
112
138
 
139
+ /** Tries to find the member id for this receive slot if it hasn't got one */
140
+ public findMemberId() {
141
+ if (this.#memberId === undefined && this.#csi) {
142
+ this.#memberId = this.findMemberIdCallback(this.#csi);
143
+
144
+ if (this.#memberId) {
145
+ // if we found the memberId, simulate source update so that the client app knows that something's changed
146
+ this.emit(
147
+ {
148
+ file: 'meeting/receiveSlot',
149
+ function: 'findMemberId',
150
+ },
151
+ ReceiveSlotEvents.SourceUpdate,
152
+ {
153
+ state: this.#sourceState,
154
+ csi: this.#csi,
155
+ memberId: this.#memberId,
156
+ }
157
+ );
158
+ }
159
+ }
160
+ }
161
+
162
+ /**
163
+ * @returns {string} a log message used to identify the receive slot
164
+ */
165
+ public get logString() {
166
+ return `ReceiveSlot - ${this.id}: ${JSON.stringify(this.mcReceiveSlot.id)}`;
167
+ }
168
+
113
169
  /**
114
170
  * The MediaStream object associated with this slot.
115
171
  *
@@ -122,20 +178,7 @@ export class ReceiveSlot extends EventsScope {
122
178
  /**
123
179
  * The underlying WCME receive slot
124
180
  */
125
- get wcmeReceiveSlot(): MC.ReceiveSlot {
181
+ get wcmeReceiveSlot(): WcmeReceiveSlot {
126
182
  return this.mcReceiveSlot;
127
183
  }
128
-
129
- /**
130
- * Resets the source state to the default 'no source' value.
131
- * This function should be called on receive slots that are
132
- * no longer part of a media request. It's needed because WCME
133
- * does not send any more events on such slots, so the sourceState
134
- * value would not represent the truth anymore.
135
- */
136
- public resetSourceState() {
137
- this.#sourceState = 'no source';
138
- this.#csi = undefined;
139
- this.#memberId = undefined;
140
- }
141
184
  }
@@ -1,76 +1,76 @@
1
+ /* eslint-disable valid-jsdoc */
1
2
  /* eslint-disable import/prefer-default-export */
2
- import {MediaConnection as MC} from '@webex/internal-media-core';
3
-
3
+ import {MediaType, ReceiveSlot as WcmeReceiveSlot} from '@webex/internal-media-core';
4
4
  import LoggerProxy from '../common/logs/logger-proxy';
5
- import Meeting from '../meeting';
6
5
 
7
- import {CSI, ReceiveSlot} from './receiveSlot';
6
+ import {FindMemberIdCallback, ReceiveSlot} from './receiveSlot';
7
+
8
+ export type CreateSlotCallback = (mediaType: MediaType) => Promise<WcmeReceiveSlot>;
9
+
10
+ export type {CSI, FindMemberIdCallback} from './receiveSlot';
8
11
 
9
12
  /**
10
13
  * Manages all receive slots used by a meeting. WMCE receive slots cannot be ever deleted,
11
14
  * so this manager has a pool in order to re-use the slots that were released earlier.
12
15
  */
13
16
  export class ReceiveSlotManager {
14
- private allocatedSlots: {[key in MC.MediaType]: ReceiveSlot[]};
17
+ private allocatedSlots: {[key in MediaType]: ReceiveSlot[]};
15
18
 
16
- private freeSlots: {[key in MC.MediaType]: ReceiveSlot[]};
19
+ private freeSlots: {[key in MediaType]: ReceiveSlot[]};
17
20
 
18
- private meeting: Meeting;
21
+ private createSlotCallback: CreateSlotCallback;
22
+
23
+ private findMemberIdByCsiCallback: FindMemberIdCallback;
19
24
 
20
25
  /**
21
26
  * Constructor
22
27
  * @param {Meeting} meeting
23
28
  */
24
- constructor(meeting) {
29
+ constructor(
30
+ createSlotCallback: CreateSlotCallback,
31
+ findMemberIdByCsiCallback: FindMemberIdCallback
32
+ ) {
25
33
  this.allocatedSlots = {
26
- [MC.MediaType.AudioMain]: [],
27
- [MC.MediaType.VideoMain]: [],
28
- [MC.MediaType.AudioSlides]: [],
29
- [MC.MediaType.VideoSlides]: [],
34
+ [MediaType.AudioMain]: [],
35
+ [MediaType.VideoMain]: [],
36
+ [MediaType.AudioSlides]: [],
37
+ [MediaType.VideoSlides]: [],
30
38
  };
31
39
  this.freeSlots = {
32
- [MC.MediaType.AudioMain]: [],
33
- [MC.MediaType.VideoMain]: [],
34
- [MC.MediaType.AudioSlides]: [],
35
- [MC.MediaType.VideoSlides]: [],
40
+ [MediaType.AudioMain]: [],
41
+ [MediaType.VideoMain]: [],
42
+ [MediaType.AudioSlides]: [],
43
+ [MediaType.VideoSlides]: [],
36
44
  };
37
- this.meeting = meeting;
45
+ this.createSlotCallback = createSlotCallback;
46
+ this.findMemberIdByCsiCallback = findMemberIdByCsiCallback;
38
47
  }
39
48
 
40
49
  /**
41
50
  * Creates a new receive slot or returns one from the existing pool of free slots
42
51
  *
43
- * @param {MC.MediaType} mediaType
52
+ * @param {MediaType} mediaType
44
53
  * @returns {Promise<ReceiveSlot>}
45
54
  */
46
- async allocateSlot(mediaType: MC.MediaType): Promise<ReceiveSlot> {
47
- if (!this.meeting?.mediaProperties?.webrtcMediaConnection) {
48
- return Promise.reject(new Error('Webrtc media connection is missing'));
49
- }
50
-
55
+ async allocateSlot(mediaType: MediaType): Promise<ReceiveSlot> {
51
56
  // try to use one of the free ones
52
57
  const availableSlot = this.freeSlots[mediaType].pop();
53
58
 
54
59
  if (availableSlot) {
55
60
  this.allocatedSlots[mediaType].push(availableSlot);
56
61
 
57
- LoggerProxy.logger.log(`receive slot re-used: ${availableSlot.id}`);
62
+ LoggerProxy.logger.log(`${mediaType}: receive slot re-used: ${availableSlot.id}`);
58
63
 
59
64
  return availableSlot;
60
65
  }
61
66
 
62
67
  // we have to create a new one
63
- const wcmeReceiveSlot =
64
- await this.meeting.mediaProperties.webrtcMediaConnection.createReceiveSlot(mediaType);
68
+ const wcmeReceiveSlot = await this.createSlotCallback(mediaType);
65
69
 
66
- const receiveSlot = new ReceiveSlot(
67
- mediaType,
68
- wcmeReceiveSlot,
69
- (csi: CSI) => this.meeting.members.findMemberByCsi(csi)?.id
70
- );
70
+ const receiveSlot = new ReceiveSlot(mediaType, wcmeReceiveSlot, this.findMemberIdByCsiCallback);
71
71
 
72
72
  this.allocatedSlots[mediaType].push(receiveSlot);
73
- LoggerProxy.logger.log(`new receive slot allocated: ${receiveSlot.id}`);
73
+ LoggerProxy.logger.log(`${mediaType}: new receive slot allocated: ${receiveSlot.id}`);
74
74
 
75
75
  return receiveSlot;
76
76
  }
@@ -87,10 +87,10 @@ export class ReceiveSlotManager {
87
87
  if (idx >= 0) {
88
88
  this.allocatedSlots[slot.mediaType].splice(idx, 1);
89
89
  this.freeSlots[slot.mediaType].push(slot);
90
- LoggerProxy.logger.log(`receive slot released: ${slot.id}`);
90
+ LoggerProxy.logger.log(`${slot.mediaType}: receive slot released: ${slot.id}`);
91
91
  } else {
92
92
  LoggerProxy.logger.warn(
93
- 'ReceiveSlotManager#releaseSlot --> trying to release a slot that is not managed by this ReceiveSlotManager'
93
+ `ReceiveSlotManager#releaseSlot --> trying to release a ${slot.mediaType}} slot that is not managed by this ReceiveSlotManager`
94
94
  );
95
95
  }
96
96
  }
@@ -100,16 +100,16 @@ export class ReceiveSlotManager {
100
100
  */
101
101
  reset() {
102
102
  this.allocatedSlots = {
103
- [MC.MediaType.AudioMain]: [],
104
- [MC.MediaType.VideoMain]: [],
105
- [MC.MediaType.AudioSlides]: [],
106
- [MC.MediaType.VideoSlides]: [],
103
+ [MediaType.AudioMain]: [],
104
+ [MediaType.VideoMain]: [],
105
+ [MediaType.AudioSlides]: [],
106
+ [MediaType.VideoSlides]: [],
107
107
  };
108
108
  this.freeSlots = {
109
- [MC.MediaType.AudioMain]: [],
110
- [MC.MediaType.VideoMain]: [],
111
- [MC.MediaType.AudioSlides]: [],
112
- [MC.MediaType.VideoSlides]: [],
109
+ [MediaType.AudioMain]: [],
110
+ [MediaType.VideoMain]: [],
111
+ [MediaType.AudioSlides]: [],
112
+ [MediaType.VideoSlides]: [],
113
113
  };
114
114
  }
115
115
 
@@ -139,4 +139,28 @@ export class ReceiveSlotManager {
139
139
  numFreeSlots,
140
140
  };
141
141
  }
142
+
143
+ /**
144
+ * Tries to find the member id on all allocated receive slots
145
+ * This function should be called when new members are added to the meeting.
146
+ */
147
+ updateMemberIds() {
148
+ Object.keys(this.allocatedSlots).forEach((key) => {
149
+ this.allocatedSlots[key].forEach((slot: ReceiveSlot) => {
150
+ slot.findMemberId();
151
+ });
152
+ });
153
+ }
154
+
155
+ /**
156
+ * Find a receive slot by a ssrc.
157
+ *
158
+ * @param ssrc - The ssrc of the receive slot to find.
159
+ * @returns - The receive slot with this ssrc, undefined if not found.
160
+ */
161
+ findReceiveSlotBySsrc(ssrc: number): ReceiveSlot | undefined {
162
+ return Object.values(this.allocatedSlots)
163
+ .flat()
164
+ .find((r) => ssrc && r.wcmeReceiveSlot?.id?.ssrc === ssrc);
165
+ }
142
166
  }
@@ -1,4 +1,5 @@
1
1
  /* eslint-disable valid-jsdoc */
2
+ import {MediaType, StreamState} from '@webex/internal-media-core';
2
3
  import LoggerProxy from '../common/logs/logger-proxy';
3
4
  import EventsScope from '../common/events/events-scope';
4
5
 
@@ -7,6 +8,7 @@ import {CSI, ReceiveSlot, ReceiveSlotEvents} from './receiveSlot';
7
8
 
8
9
  export const RemoteMediaEvents = {
9
10
  SourceUpdate: ReceiveSlotEvents.SourceUpdate,
11
+ Stopped: 'stopped',
10
12
  };
11
13
 
12
14
  export type RemoteVideoResolution =
@@ -55,7 +57,7 @@ export function getMaxFs(paneSize: RemoteVideoResolution): number {
55
57
  }
56
58
 
57
59
  type Options = {
58
- resolution?: RemoteVideoResolution; // applies only to groups of type MC.MediaType.VideoMain and MC.MediaType.VideoSlides
60
+ resolution?: RemoteVideoResolution; // applies only to groups of type MediaType.VideoMain and MediaType.VideoSlides
59
61
  };
60
62
 
61
63
  export type RemoteMediaId = string;
@@ -100,6 +102,31 @@ export class RemoteMedia extends EventsScope {
100
102
  this.id = `RM${remoteMediaCounter}-${this.receiveSlot.id}`;
101
103
  }
102
104
 
105
+ /**
106
+ * Supply the width and height of the video element
107
+ * to restrict the requested resolution to this size
108
+ * @param width width of the video element
109
+ * @param height height of the video element
110
+ */
111
+ public setSizeHint(width, height) {
112
+ // only base on height for now
113
+ let fs: number;
114
+
115
+ if (height < 135) {
116
+ fs = 60;
117
+ } else if (height < 270) {
118
+ fs = 240;
119
+ } else if (height < 540) {
120
+ fs = 920;
121
+ } else if (height <= 720) {
122
+ fs = 3600;
123
+ } else {
124
+ fs = 8192;
125
+ }
126
+
127
+ this.receiveSlot?.setMaxFs(fs);
128
+ }
129
+
103
130
  /**
104
131
  * Invalidates the remote media by clearing the reference to a receive slot and
105
132
  * cancelling the media request.
@@ -108,10 +135,18 @@ export class RemoteMedia extends EventsScope {
108
135
  * @param {boolean} commit - whether to commit the cancellation of the media request
109
136
  * @internal
110
137
  */
111
- public stop(commit: boolean = true) {
138
+ public stop(commit = true) {
112
139
  this.cancelMediaRequest(commit);
113
140
  this.receiveSlot?.removeAllListeners();
114
141
  this.receiveSlot = undefined;
142
+ this.emit(
143
+ {
144
+ file: 'multistream/remoteMedia',
145
+ function: 'stop',
146
+ },
147
+ RemoteMediaEvents.Stopped,
148
+ {}
149
+ );
115
150
  }
116
151
 
117
152
  /**
@@ -164,7 +199,7 @@ export class RemoteMedia extends EventsScope {
164
199
  private setupEventListeners() {
165
200
  if (this.receiveSlot) {
166
201
  const scope = {
167
- file: 'meeting/remoteMedia',
202
+ file: 'multistream/remoteMedia',
168
203
  function: 'setupEventListeners',
169
204
  };
170
205
 
@@ -177,7 +212,7 @@ export class RemoteMedia extends EventsScope {
177
212
  /**
178
213
  * Getter for mediaType
179
214
  */
180
- public get mediaType() {
215
+ public get mediaType(): MediaType {
181
216
  return this.receiveSlot?.mediaType;
182
217
  }
183
218
 
@@ -198,7 +233,7 @@ export class RemoteMedia extends EventsScope {
198
233
  /**
199
234
  * Getter for source state
200
235
  */
201
- public get sourceState() {
236
+ public get sourceState(): StreamState {
202
237
  return this.receiveSlot?.sourceState;
203
238
  }
204
239
 
@@ -1,6 +1,7 @@
1
1
  /* eslint-disable valid-jsdoc */
2
2
  /* eslint-disable require-jsdoc */
3
3
  /* eslint-disable import/prefer-default-export */
4
+ import {forEach} from 'lodash';
4
5
  import LoggerProxy from '../common/logs/logger-proxy';
5
6
 
6
7
  import {getMaxFs, RemoteMedia, RemoteVideoResolution} from './remoteMedia';
@@ -8,8 +9,8 @@ import {MediaRequestId, MediaRequestManager} from './mediaRequestManager';
8
9
  import {CSI, ReceiveSlot} from './receiveSlot';
9
10
 
10
11
  type Options = {
11
- resolution?: RemoteVideoResolution; // applies only to groups of type MC.MediaType.VideoMain and MC.MediaType.VideoSlides
12
- preferLiveVideo?: boolean; // applies only to groups of type MC.MediaType.VideoMain and MC.MediaType.VideoSlides
12
+ resolution?: RemoteVideoResolution; // applies only to groups of type MediaType.VideoMain and MediaType.VideoSlides
13
+ preferLiveVideo?: boolean; // applies only to groups of type MediaType.VideoMain and MediaType.VideoSlides
13
14
  };
14
15
 
15
16
  export class RemoteMediaGroup {
@@ -62,9 +63,57 @@ export class RemoteMediaGroup {
62
63
  // return a shallow copy so that the client cannot modify this.pinnedRemoteMedia array
63
64
  return [...this.pinnedRemoteMedia];
64
65
  }
66
+
65
67
  return [...this.unpinnedRemoteMedia, ...this.pinnedRemoteMedia];
66
68
  }
67
69
 
70
+ /**
71
+ * Sets CSIs for multiple RemoteMedia instances belonging to this RemoteMediaGroup.
72
+ * For each entry in the remoteMediaCsis array:
73
+ * - if csi is specified, the RemoteMedia instance is pinned to that CSI
74
+ * - if csi is undefined, the RemoteMedia instance is unpinned
75
+ * @internal
76
+ */
77
+ public setActiveSpeakerCsis(
78
+ remoteMediaCsis: {remoteMedia: RemoteMedia; csi?: number}[],
79
+ commit = true
80
+ ): void {
81
+ forEach(remoteMediaCsis, ({csi, remoteMedia}) => {
82
+ if (csi) {
83
+ if (!(this.pinnedRemoteMedia.indexOf(remoteMedia) >= 0)) {
84
+ const unpinId = this.unpinnedRemoteMedia.indexOf(remoteMedia);
85
+ if (unpinId >= 0) {
86
+ this.unpinnedRemoteMedia.splice(unpinId, 1);
87
+ this.pinnedRemoteMedia.push(remoteMedia);
88
+ } else {
89
+ throw new Error(
90
+ `failed to pin a remote media object ${remoteMedia.id}, because it is not found in this remote media group`
91
+ );
92
+ }
93
+ }
94
+ remoteMedia.sendMediaRequest(csi, false);
95
+ } else {
96
+ if (!(this.unpinnedRemoteMedia.indexOf(remoteMedia) >= 0)) {
97
+ const pinId = this.pinnedRemoteMedia.indexOf(remoteMedia);
98
+ if (pinId >= 0) {
99
+ this.pinnedRemoteMedia.splice(pinId, 1);
100
+ this.unpinnedRemoteMedia.push(remoteMedia);
101
+ } else {
102
+ throw new Error(
103
+ `failed to unpin a remote media object ${remoteMedia.id}, because it is not found in this remote media group`
104
+ );
105
+ }
106
+ }
107
+ remoteMedia.cancelMediaRequest(false);
108
+ }
109
+ });
110
+ this.cancelActiveSpeakerMediaRequest(false);
111
+ this.sendActiveSpeakerMediaRequest(false);
112
+ if (commit) {
113
+ this.mediaRequestManager.commit();
114
+ }
115
+ }
116
+
68
117
  /**
69
118
  * Pins a specific remote media instance to a specfic CSI, so the media will
70
119
  * no longer come from active speaker, but from that CSI.
@@ -150,6 +199,17 @@ export class RemoteMediaGroup {
150
199
  throw new Error(`remote media object ${remoteMedia.id} not found in the group`);
151
200
  }
152
201
 
202
+ /**
203
+ * setPreferLiveVideo - sets preferLiveVideo to true/false
204
+ * @internal
205
+ */
206
+ public setPreferLiveVideo(preferLiveVideo: boolean, commit: boolean) {
207
+ if (this.options.preferLiveVideo !== preferLiveVideo) {
208
+ this.options.preferLiveVideo = preferLiveVideo;
209
+ this.sendActiveSpeakerMediaRequest(commit);
210
+ }
211
+ }
212
+
153
213
  private sendActiveSpeakerMediaRequest(commit: boolean) {
154
214
  this.cancelActiveSpeakerMediaRequest(false);
155
215
 
@@ -189,7 +249,7 @@ export class RemoteMediaGroup {
189
249
  * @param{boolean} commit whether to commit the cancellation of media requests
190
250
  * @internal
191
251
  */
192
- public stop(commit: boolean = true) {
252
+ public stop(commit = true) {
193
253
  this.unpinnedRemoteMedia.forEach((remoteMedia) => remoteMedia.stop(false));
194
254
  this.pinnedRemoteMedia.forEach((remoteMedia) => remoteMedia.stop(false));
195
255
  this.cancelActiveSpeakerMediaRequest(false);