@webex/plugin-meetings 3.0.0-beta.2 → 3.0.0-beta.200

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 (576) hide show
  1. package/README.md +45 -7
  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/parameter.js +5 -33
  39. package/dist/common/errors/parameter.js.map +1 -1
  40. package/dist/common/errors/password-error.js +10 -24
  41. package/dist/common/errors/password-error.js.map +1 -1
  42. package/dist/common/errors/permission.js +9 -23
  43. package/dist/common/errors/permission.js.map +1 -1
  44. package/dist/common/errors/reconnection-in-progress.js +0 -17
  45. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  46. package/dist/common/errors/reconnection.js +10 -24
  47. package/dist/common/errors/reconnection.js.map +1 -1
  48. package/dist/common/errors/stats.js +10 -24
  49. package/dist/common/errors/stats.js.map +1 -1
  50. package/dist/common/errors/webex-errors.js +9 -43
  51. package/dist/common/errors/webex-errors.js.map +1 -1
  52. package/dist/common/errors/webex-meetings-error.js +5 -25
  53. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  54. package/dist/common/events/events-scope.js +0 -22
  55. package/dist/common/events/events-scope.js.map +1 -1
  56. package/dist/common/events/events.js +0 -23
  57. package/dist/common/events/events.js.map +1 -1
  58. package/dist/common/events/trigger-proxy.js +0 -12
  59. package/dist/common/events/trigger-proxy.js.map +1 -1
  60. package/dist/common/events/util.js +0 -15
  61. package/dist/common/events/util.js.map +1 -1
  62. package/dist/common/logs/logger-config.js +0 -4
  63. package/dist/common/logs/logger-config.js.map +1 -1
  64. package/dist/common/logs/logger-proxy.js +1 -8
  65. package/dist/common/logs/logger-proxy.js.map +1 -1
  66. package/dist/common/logs/request.js +37 -60
  67. package/dist/common/logs/request.js.map +1 -1
  68. package/dist/common/queue.js +28 -23
  69. package/dist/common/queue.js.map +1 -1
  70. package/dist/config.js +8 -13
  71. package/dist/config.js.map +1 -1
  72. package/dist/constants.js +250 -66
  73. package/dist/constants.js.map +1 -1
  74. package/dist/controls-options-manager/constants.js +14 -0
  75. package/dist/controls-options-manager/constants.js.map +1 -0
  76. package/dist/controls-options-manager/enums.js +27 -0
  77. package/dist/controls-options-manager/enums.js.map +1 -0
  78. package/dist/controls-options-manager/index.js +297 -0
  79. package/dist/controls-options-manager/index.js.map +1 -0
  80. package/dist/controls-options-manager/types.js +7 -0
  81. package/dist/controls-options-manager/types.js.map +1 -0
  82. package/dist/controls-options-manager/util.js +319 -0
  83. package/dist/controls-options-manager/util.js.map +1 -0
  84. package/dist/index.js +108 -17
  85. package/dist/index.js.map +1 -1
  86. package/dist/interpretation/collection.js +23 -0
  87. package/dist/interpretation/collection.js.map +1 -0
  88. package/dist/interpretation/index.js +366 -0
  89. package/dist/interpretation/index.js.map +1 -0
  90. package/dist/interpretation/siLanguage.js +25 -0
  91. package/dist/interpretation/siLanguage.js.map +1 -0
  92. package/dist/locus-info/controlsUtils.js +101 -29
  93. package/dist/locus-info/controlsUtils.js.map +1 -1
  94. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  95. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  96. package/dist/locus-info/fullState.js +0 -15
  97. package/dist/locus-info/fullState.js.map +1 -1
  98. package/dist/locus-info/hostUtils.js +4 -12
  99. package/dist/locus-info/hostUtils.js.map +1 -1
  100. package/dist/locus-info/index.js +532 -240
  101. package/dist/locus-info/index.js.map +1 -1
  102. package/dist/locus-info/infoUtils.js +3 -37
  103. package/dist/locus-info/infoUtils.js.map +1 -1
  104. package/dist/locus-info/mediaSharesUtils.js +54 -38
  105. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  106. package/dist/locus-info/parser.js +284 -154
  107. package/dist/locus-info/parser.js.map +1 -1
  108. package/dist/locus-info/selfUtils.js +110 -92
  109. package/dist/locus-info/selfUtils.js.map +1 -1
  110. package/dist/media/index.js +95 -226
  111. package/dist/media/index.js.map +1 -1
  112. package/dist/media/properties.js +99 -194
  113. package/dist/media/properties.js.map +1 -1
  114. package/dist/media/util.js +2 -9
  115. package/dist/media/util.js.map +1 -1
  116. package/dist/mediaQualityMetrics/config.js +505 -495
  117. package/dist/mediaQualityMetrics/config.js.map +1 -1
  118. package/dist/meeting/in-meeting-actions.js +83 -14
  119. package/dist/meeting/in-meeting-actions.js.map +1 -1
  120. package/dist/meeting/index.js +3478 -3563
  121. package/dist/meeting/index.js.map +1 -1
  122. package/dist/meeting/locusMediaRequest.js +291 -0
  123. package/dist/meeting/locusMediaRequest.js.map +1 -0
  124. package/dist/meeting/muteState.js +247 -183
  125. package/dist/meeting/muteState.js.map +1 -1
  126. package/dist/meeting/request.js +344 -344
  127. package/dist/meeting/request.js.map +1 -1
  128. package/dist/meeting/request.type.js +7 -0
  129. package/dist/meeting/request.type.js.map +1 -0
  130. package/dist/meeting/state.js +21 -31
  131. package/dist/meeting/state.js.map +1 -1
  132. package/dist/meeting/util.js +529 -588
  133. package/dist/meeting/util.js.map +1 -1
  134. package/dist/meeting-info/collection.js +6 -25
  135. package/dist/meeting-info/collection.js.map +1 -1
  136. package/dist/meeting-info/index.js +62 -39
  137. package/dist/meeting-info/index.js.map +1 -1
  138. package/dist/meeting-info/meeting-info-v2.js +328 -283
  139. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  140. package/dist/meeting-info/request.js +3 -15
  141. package/dist/meeting-info/request.js.map +1 -1
  142. package/dist/meeting-info/util.js +98 -183
  143. package/dist/meeting-info/util.js.map +1 -1
  144. package/dist/meeting-info/utilv2.js +156 -232
  145. package/dist/meeting-info/utilv2.js.map +1 -1
  146. package/dist/meetings/collection.js +26 -19
  147. package/dist/meetings/collection.js.map +1 -1
  148. package/dist/meetings/index.js +795 -574
  149. package/dist/meetings/index.js.map +1 -1
  150. package/dist/meetings/meetings.types.js +7 -0
  151. package/dist/meetings/meetings.types.js.map +1 -0
  152. package/dist/meetings/request.js +26 -41
  153. package/dist/meetings/request.js.map +1 -1
  154. package/dist/meetings/util.js +186 -155
  155. package/dist/meetings/util.js.map +1 -1
  156. package/dist/member/index.js +126 -85
  157. package/dist/member/index.js.map +1 -1
  158. package/dist/member/types.js +25 -0
  159. package/dist/member/types.js.map +1 -0
  160. package/dist/member/util.js +147 -88
  161. package/dist/member/util.js.map +1 -1
  162. package/dist/members/collection.js +13 -12
  163. package/dist/members/collection.js.map +1 -1
  164. package/dist/members/index.js +178 -204
  165. package/dist/members/index.js.map +1 -1
  166. package/dist/members/request.js +113 -68
  167. package/dist/members/request.js.map +1 -1
  168. package/dist/members/types.js +15 -0
  169. package/dist/members/types.js.map +1 -0
  170. package/dist/members/util.js +314 -260
  171. package/dist/members/util.js.map +1 -1
  172. package/dist/metrics/constants.js +4 -7
  173. package/dist/metrics/constants.js.map +1 -1
  174. package/dist/metrics/index.js +11 -558
  175. package/dist/metrics/index.js.map +1 -1
  176. package/dist/multistream/mediaRequestManager.js +264 -50
  177. package/dist/multistream/mediaRequestManager.js.map +1 -1
  178. package/dist/multistream/receiveSlot.js +58 -65
  179. package/dist/multistream/receiveSlot.js.map +1 -1
  180. package/dist/multistream/receiveSlotManager.js +76 -95
  181. package/dist/multistream/receiveSlotManager.js.map +1 -1
  182. package/dist/multistream/remoteMedia.js +62 -76
  183. package/dist/multistream/remoteMedia.js.map +1 -1
  184. package/dist/multistream/remoteMediaGroup.js +66 -43
  185. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  186. package/dist/multistream/remoteMediaManager.js +502 -442
  187. package/dist/multistream/remoteMediaManager.js.map +1 -1
  188. package/dist/networkQualityMonitor/index.js +40 -59
  189. package/dist/networkQualityMonitor/index.js.map +1 -1
  190. package/dist/personal-meeting-room/index.js +21 -45
  191. package/dist/personal-meeting-room/index.js.map +1 -1
  192. package/dist/personal-meeting-room/request.js +1 -31
  193. package/dist/personal-meeting-room/request.js.map +1 -1
  194. package/dist/personal-meeting-room/util.js +0 -13
  195. package/dist/personal-meeting-room/util.js.map +1 -1
  196. package/dist/reachability/index.js +192 -191
  197. package/dist/reachability/index.js.map +1 -1
  198. package/dist/reachability/request.js +15 -23
  199. package/dist/reachability/request.js.map +1 -1
  200. package/dist/reactions/constants.js +13 -0
  201. package/dist/reactions/constants.js.map +1 -0
  202. package/dist/reactions/reactions.js +109 -0
  203. package/dist/reactions/reactions.js.map +1 -0
  204. package/dist/reactions/reactions.type.js +36 -0
  205. package/dist/reactions/reactions.type.js.map +1 -0
  206. package/dist/reconnection-manager/index.js +384 -476
  207. package/dist/reconnection-manager/index.js.map +1 -1
  208. package/dist/recording-controller/enums.js +17 -0
  209. package/dist/recording-controller/enums.js.map +1 -0
  210. package/dist/recording-controller/index.js +363 -0
  211. package/dist/recording-controller/index.js.map +1 -0
  212. package/dist/recording-controller/util.js +64 -0
  213. package/dist/recording-controller/util.js.map +1 -0
  214. package/dist/roap/index.js +58 -91
  215. package/dist/roap/index.js.map +1 -1
  216. package/dist/roap/request.js +137 -135
  217. package/dist/roap/request.js.map +1 -1
  218. package/dist/roap/turnDiscovery.js +148 -100
  219. package/dist/roap/turnDiscovery.js.map +1 -1
  220. package/dist/rtcMetrics/constants.js +12 -0
  221. package/dist/rtcMetrics/constants.js.map +1 -0
  222. package/dist/rtcMetrics/index.js +115 -0
  223. package/dist/rtcMetrics/index.js.map +1 -0
  224. package/dist/statsAnalyzer/global.js +1 -95
  225. package/dist/statsAnalyzer/global.js.map +1 -1
  226. package/dist/statsAnalyzer/index.js +385 -460
  227. package/dist/statsAnalyzer/index.js.map +1 -1
  228. package/dist/statsAnalyzer/mqaUtil.js +143 -87
  229. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  230. package/dist/transcription/index.js +22 -47
  231. package/dist/transcription/index.js.map +1 -1
  232. package/dist/types/annotation/annotation.types.d.ts +42 -0
  233. package/dist/types/annotation/constants.d.ts +31 -0
  234. package/dist/types/annotation/index.d.ts +117 -0
  235. package/dist/types/breakouts/breakout.d.ts +8 -0
  236. package/dist/types/breakouts/collection.d.ts +5 -0
  237. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  238. package/dist/types/breakouts/events.d.ts +8 -0
  239. package/dist/types/breakouts/index.d.ts +5 -0
  240. package/dist/types/breakouts/request.d.ts +22 -0
  241. package/dist/types/breakouts/utils.d.ts +15 -0
  242. package/dist/types/common/browser-detection.d.ts +9 -0
  243. package/dist/types/common/collection.d.ts +48 -0
  244. package/dist/types/common/config.d.ts +2 -0
  245. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  246. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  247. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  248. package/dist/types/common/errors/media.d.ts +15 -0
  249. package/dist/types/common/errors/parameter.d.ts +15 -0
  250. package/dist/types/common/errors/password-error.d.ts +15 -0
  251. package/dist/types/common/errors/permission.d.ts +14 -0
  252. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  253. package/dist/types/common/errors/reconnection.d.ts +15 -0
  254. package/dist/types/common/errors/stats.d.ts +15 -0
  255. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  256. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  257. package/dist/types/common/events/events-scope.d.ts +17 -0
  258. package/dist/types/common/events/events.d.ts +12 -0
  259. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  260. package/dist/types/common/events/util.d.ts +2 -0
  261. package/dist/types/common/logs/logger-config.d.ts +2 -0
  262. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  263. package/dist/types/common/logs/request.d.ts +34 -0
  264. package/dist/types/common/queue.d.ts +34 -0
  265. package/dist/types/config.d.ts +72 -0
  266. package/dist/types/constants.d.ts +1016 -0
  267. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  268. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  269. package/dist/types/controls-options-manager/index.d.ts +136 -0
  270. package/dist/types/controls-options-manager/types.d.ts +43 -0
  271. package/dist/types/controls-options-manager/util.d.ts +1 -0
  272. package/dist/types/index.d.ts +7 -0
  273. package/dist/types/interpretation/collection.d.ts +5 -0
  274. package/dist/types/interpretation/index.d.ts +5 -0
  275. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  276. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  277. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  278. package/dist/types/locus-info/fullState.d.ts +2 -0
  279. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  280. package/dist/types/locus-info/index.d.ts +322 -0
  281. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  282. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  283. package/dist/types/locus-info/parser.d.ts +271 -0
  284. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  285. package/dist/types/media/index.d.ts +34 -0
  286. package/dist/types/media/properties.d.ts +93 -0
  287. package/dist/types/media/util.d.ts +2 -0
  288. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  289. package/dist/types/meeting/in-meeting-actions.d.ts +153 -0
  290. package/dist/types/meeting/index.d.ts +1471 -0
  291. package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
  292. package/dist/types/meeting/muteState.d.ts +184 -0
  293. package/dist/types/meeting/request.d.ts +257 -0
  294. package/dist/types/meeting/request.type.d.ts +11 -0
  295. package/dist/types/meeting/state.d.ts +9 -0
  296. package/dist/types/meeting/util.d.ts +78 -0
  297. package/dist/types/meeting-info/collection.d.ts +20 -0
  298. package/dist/types/meeting-info/index.d.ts +62 -0
  299. package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
  300. package/dist/types/meeting-info/request.d.ts +22 -0
  301. package/dist/types/meeting-info/util.d.ts +2 -0
  302. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  303. package/dist/types/meetings/collection.d.ts +31 -0
  304. package/dist/types/meetings/index.d.ts +367 -0
  305. package/dist/types/meetings/meetings.types.d.ts +4 -0
  306. package/dist/types/meetings/request.d.ts +27 -0
  307. package/dist/types/meetings/util.d.ts +18 -0
  308. package/dist/types/member/index.d.ts +159 -0
  309. package/dist/types/member/types.d.ts +32 -0
  310. package/dist/types/member/util.d.ts +2 -0
  311. package/dist/types/members/collection.d.ts +29 -0
  312. package/dist/types/members/index.d.ts +353 -0
  313. package/dist/types/members/request.d.ts +114 -0
  314. package/dist/types/members/types.d.ts +24 -0
  315. package/dist/types/members/util.d.ts +210 -0
  316. package/dist/types/metrics/constants.d.ts +55 -0
  317. package/dist/types/metrics/index.d.ts +45 -0
  318. package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
  319. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  320. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  321. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  322. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  323. package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
  324. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  325. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  326. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  327. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  328. package/dist/types/reachability/index.d.ts +152 -0
  329. package/dist/types/reachability/request.d.ts +37 -0
  330. package/dist/types/reactions/constants.d.ts +3 -0
  331. package/dist/types/reactions/reactions.d.ts +4 -0
  332. package/dist/types/reactions/reactions.type.d.ts +52 -0
  333. package/dist/types/reconnection-manager/index.d.ts +126 -0
  334. package/dist/types/recording-controller/enums.d.ts +7 -0
  335. package/dist/types/recording-controller/index.d.ts +208 -0
  336. package/dist/types/recording-controller/util.d.ts +14 -0
  337. package/dist/types/roap/index.d.ts +77 -0
  338. package/dist/types/roap/request.d.ts +36 -0
  339. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  340. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  341. package/dist/types/rtcMetrics/index.d.ts +46 -0
  342. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  343. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  344. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  345. package/dist/types/transcription/index.d.ts +64 -0
  346. package/internal-README.md +7 -6
  347. package/package.json +29 -21
  348. package/src/annotation/annotation.types.ts +50 -0
  349. package/src/annotation/constants.ts +36 -0
  350. package/src/annotation/index.ts +328 -0
  351. package/src/breakouts/README.md +220 -0
  352. package/src/breakouts/breakout.ts +188 -0
  353. package/src/breakouts/collection.ts +19 -0
  354. package/src/breakouts/edit-lock-error.ts +25 -0
  355. package/src/breakouts/events.ts +56 -0
  356. package/src/breakouts/index.ts +925 -0
  357. package/src/breakouts/request.ts +55 -0
  358. package/src/breakouts/utils.ts +57 -0
  359. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  360. package/src/common/collection.ts +9 -7
  361. package/src/common/{config.js → config.ts} +1 -1
  362. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  363. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  364. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  365. package/src/common/errors/{media.js → media.ts} +11 -7
  366. package/src/common/errors/parameter.ts +11 -7
  367. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  368. package/src/common/errors/{permission.js → permission.ts} +10 -6
  369. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  370. package/src/common/errors/{stats.js → stats.ts} +11 -7
  371. package/src/common/errors/{webex-errors.js → webex-errors.ts} +14 -9
  372. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  373. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  374. package/src/common/events/{events.js → events.ts} +5 -1
  375. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  376. package/src/common/events/{util.js → util.ts} +2 -3
  377. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  378. package/src/common/logs/logger-proxy.ts +44 -0
  379. package/src/common/logs/{request.js → request.ts} +22 -9
  380. package/src/common/queue.ts +22 -9
  381. package/src/{config.js → config.ts} +17 -17
  382. package/src/constants.ts +197 -22
  383. package/src/controls-options-manager/constants.ts +5 -0
  384. package/src/controls-options-manager/enums.ts +18 -0
  385. package/src/controls-options-manager/index.ts +278 -0
  386. package/src/controls-options-manager/types.ts +59 -0
  387. package/src/controls-options-manager/util.ts +300 -0
  388. package/src/index.ts +39 -0
  389. package/src/interpretation/README.md +60 -0
  390. package/src/interpretation/collection.ts +19 -0
  391. package/src/interpretation/index.ts +332 -0
  392. package/src/interpretation/siLanguage.ts +18 -0
  393. package/src/locus-info/controlsUtils.ts +222 -0
  394. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  395. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  396. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  397. package/src/locus-info/{index.js → index.ts} +518 -111
  398. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  399. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +65 -17
  400. package/src/locus-info/{parser.js → parser.ts} +271 -98
  401. package/src/locus-info/{selfUtils.js → selfUtils.ts} +199 -68
  402. package/src/media/index.ts +456 -0
  403. package/src/media/{properties.js → properties.ts} +80 -102
  404. package/src/media/{util.js → util.ts} +2 -2
  405. package/src/mediaQualityMetrics/config.ts +384 -0
  406. package/src/meeting/in-meeting-actions.ts +171 -3
  407. package/src/meeting/index.ts +7070 -0
  408. package/src/meeting/locusMediaRequest.ts +309 -0
  409. package/src/meeting/muteState.ts +450 -0
  410. package/src/meeting/{request.js → request.ts} +354 -214
  411. package/src/meeting/request.type.ts +13 -0
  412. package/src/meeting/{state.js → state.ts} +50 -35
  413. package/src/meeting/util.ts +615 -0
  414. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  415. package/src/meeting-info/index.ts +183 -0
  416. package/src/meeting-info/meeting-info-v2.ts +407 -0
  417. package/src/meeting-info/{request.js → request.ts} +14 -4
  418. package/src/meeting-info/{util.js → util.ts} +60 -51
  419. package/src/meeting-info/{utilv2.js → utilv2.ts} +77 -60
  420. package/src/meetings/{collection.js → collection.ts} +26 -3
  421. package/src/meetings/index.ts +1467 -0
  422. package/src/meetings/meetings.types.ts +12 -0
  423. package/src/meetings/{request.js → request.ts} +34 -25
  424. package/src/meetings/{util.js → util.ts} +137 -36
  425. package/src/member/{index.js → index.ts} +151 -56
  426. package/src/member/types.ts +38 -0
  427. package/src/member/util.ts +383 -0
  428. package/src/members/{collection.js → collection.ts} +10 -2
  429. package/src/members/{index.js → index.ts} +323 -145
  430. package/src/members/request.ts +255 -0
  431. package/src/members/types.ts +28 -0
  432. package/src/members/util.ts +339 -0
  433. package/src/metrics/{constants.js → constants.ts} +2 -6
  434. package/src/metrics/index.ts +73 -0
  435. package/src/multistream/mediaRequestManager.ts +337 -61
  436. package/src/multistream/receiveSlot.ts +69 -26
  437. package/src/multistream/receiveSlotManager.ts +66 -42
  438. package/src/multistream/remoteMedia.ts +40 -5
  439. package/src/multistream/remoteMediaGroup.ts +63 -3
  440. package/src/multistream/remoteMediaManager.ts +263 -66
  441. package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
  442. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  443. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  444. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  445. package/src/reachability/{index.js → index.ts} +157 -94
  446. package/src/reachability/request.ts +46 -35
  447. package/src/reactions/constants.ts +4 -0
  448. package/src/reactions/reactions.ts +104 -0
  449. package/src/reactions/reactions.type.ts +62 -0
  450. package/src/reconnection-manager/{index.js → index.ts} +254 -136
  451. package/src/recording-controller/enums.ts +8 -0
  452. package/src/recording-controller/index.ts +333 -0
  453. package/src/recording-controller/util.ts +75 -0
  454. package/src/roap/{index.js → index.ts} +86 -78
  455. package/src/roap/request.ts +163 -0
  456. package/src/roap/turnDiscovery.ts +111 -49
  457. package/src/rtcMetrics/constants.ts +3 -0
  458. package/src/rtcMetrics/index.ts +96 -0
  459. package/src/statsAnalyzer/global.ts +37 -0
  460. package/src/statsAnalyzer/index.ts +1272 -0
  461. package/src/statsAnalyzer/mqaUtil.ts +291 -0
  462. package/src/transcription/{index.js → index.ts} +46 -39
  463. package/test/integration/spec/converged-space-meetings.js +233 -0
  464. package/test/integration/spec/journey.js +804 -526
  465. package/test/integration/spec/space-meeting.js +391 -204
  466. package/test/integration/spec/transcription.js +7 -8
  467. package/test/unit/spec/annotation/index.ts +418 -0
  468. package/test/unit/spec/breakouts/breakout.ts +237 -0
  469. package/test/unit/spec/breakouts/collection.ts +15 -0
  470. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  471. package/test/unit/spec/breakouts/events.ts +89 -0
  472. package/test/unit/spec/breakouts/index.ts +1790 -0
  473. package/test/unit/spec/breakouts/request.ts +104 -0
  474. package/test/unit/spec/breakouts/utils.js +72 -0
  475. package/test/unit/spec/common/browser-detection.js +9 -28
  476. package/test/unit/spec/common/queue.js +31 -2
  477. package/test/unit/spec/controls-options-manager/index.js +287 -0
  478. package/test/unit/spec/controls-options-manager/util.js +582 -0
  479. package/test/unit/spec/fixture/locus.js +93 -90
  480. package/test/unit/spec/interpretation/collection.ts +15 -0
  481. package/test/unit/spec/interpretation/index.ts +589 -0
  482. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  483. package/test/unit/spec/locus-info/controlsUtils.js +325 -32
  484. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  485. package/test/unit/spec/locus-info/index.js +1176 -18
  486. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  487. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  488. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  489. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  490. package/test/unit/spec/locus-info/parser.js +65 -31
  491. package/test/unit/spec/locus-info/selfConstant.js +120 -103
  492. package/test/unit/spec/locus-info/selfUtils.js +296 -12
  493. package/test/unit/spec/media/index.ts +162 -68
  494. package/test/unit/spec/media/properties.ts +9 -9
  495. package/test/unit/spec/meeting/in-meeting-actions.ts +82 -3
  496. package/test/unit/spec/meeting/index.js +4569 -1773
  497. package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
  498. package/test/unit/spec/meeting/muteState.js +382 -211
  499. package/test/unit/spec/meeting/request.js +444 -78
  500. package/test/unit/spec/meeting/utils.js +517 -192
  501. package/test/unit/spec/meeting-info/index.js +181 -0
  502. package/test/unit/spec/meeting-info/meetinginfov2.js +481 -76
  503. package/test/unit/spec/meeting-info/request.js +7 -9
  504. package/test/unit/spec/meeting-info/util.js +11 -12
  505. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  506. package/test/unit/spec/meetings/collection.js +15 -1
  507. package/test/unit/spec/meetings/index.js +1254 -330
  508. package/test/unit/spec/meetings/utils.js +220 -14
  509. package/test/unit/spec/member/index.js +58 -5
  510. package/test/unit/spec/member/util.js +494 -26
  511. package/test/unit/spec/members/index.js +423 -55
  512. package/test/unit/spec/members/request.js +228 -40
  513. package/test/unit/spec/members/utils.js +191 -4
  514. package/test/unit/spec/metrics/index.js +12 -66
  515. package/test/unit/spec/multistream/mediaRequestManager.ts +1013 -106
  516. package/test/unit/spec/multistream/receiveSlot.ts +77 -18
  517. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  518. package/test/unit/spec/multistream/remoteMedia.ts +40 -2
  519. package/test/unit/spec/multistream/remoteMediaGroup.ts +271 -5
  520. package/test/unit/spec/multistream/remoteMediaManager.ts +730 -65
  521. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  522. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  523. package/test/unit/spec/reachability/index.ts +176 -27
  524. package/test/unit/spec/reachability/request.js +66 -0
  525. package/test/unit/spec/reconnection-manager/index.js +155 -9
  526. package/test/unit/spec/recording-controller/index.js +307 -0
  527. package/test/unit/spec/recording-controller/util.js +229 -0
  528. package/test/unit/spec/roap/index.ts +28 -52
  529. package/test/unit/spec/roap/request.ts +225 -0
  530. package/test/unit/spec/roap/turnDiscovery.ts +92 -50
  531. package/test/unit/spec/rtcMetrics/index.ts +60 -0
  532. package/test/unit/spec/stats-analyzer/index.js +116 -60
  533. package/test/utils/cmr.js +44 -42
  534. package/test/utils/constants.js +9 -0
  535. package/test/utils/integrationTestUtils.js +46 -0
  536. package/test/utils/testUtils.js +63 -99
  537. package/test/utils/webex-config.js +22 -18
  538. package/test/utils/webex-test-users.js +57 -50
  539. package/tsconfig.json +6 -0
  540. package/dist/media/internal-media-core-wrapper.js +0 -22
  541. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  542. package/dist/meeting/effectsState.js +0 -327
  543. package/dist/meeting/effectsState.js.map +0 -1
  544. package/dist/metrics/config.js +0 -301
  545. package/dist/metrics/config.js.map +0 -1
  546. package/dist/multistream/multistreamMedia.js +0 -116
  547. package/dist/multistream/multistreamMedia.js.map +0 -1
  548. package/dist/peer-connection-manager/util.js +0 -124
  549. package/dist/peer-connection-manager/util.js.map +0 -1
  550. package/src/common/logs/logger-proxy.js +0 -33
  551. package/src/index.js +0 -15
  552. package/src/locus-info/controlsUtils.js +0 -102
  553. package/src/media/index.js +0 -459
  554. package/src/media/internal-media-core-wrapper.ts +0 -9
  555. package/src/mediaQualityMetrics/config.js +0 -382
  556. package/src/meeting/effectsState.js +0 -205
  557. package/src/meeting/index.js +0 -6284
  558. package/src/meeting/muteState.js +0 -318
  559. package/src/meeting/util.js +0 -506
  560. package/src/meeting-info/index.js +0 -131
  561. package/src/meeting-info/meeting-info-v2.js +0 -255
  562. package/src/meetings/index.js +0 -1015
  563. package/src/member/util.js +0 -254
  564. package/src/members/request.js +0 -131
  565. package/src/members/util.js +0 -258
  566. package/src/metrics/config.js +0 -324
  567. package/src/metrics/index.js +0 -530
  568. package/src/multistream/multistreamMedia.ts +0 -92
  569. package/src/peer-connection-manager/util.ts +0 -117
  570. package/src/roap/request.js +0 -127
  571. package/src/statsAnalyzer/global.js +0 -133
  572. package/src/statsAnalyzer/index.js +0 -1006
  573. package/src/statsAnalyzer/mqaUtil.js +0 -173
  574. package/test/unit/spec/meeting/effectsState.js +0 -291
  575. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
  576. /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
@@ -1,164 +1,144 @@
1
1
  "use strict";
2
2
 
3
3
  var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
4
-
5
4
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
6
-
7
5
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
8
-
9
6
  _Object$defineProperty(exports, "__esModule", {
10
7
  value: true
11
8
  });
12
-
13
9
  exports.ReceiveSlotEvents = exports.ReceiveSlot = void 0;
14
-
10
+ var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
15
11
  var _weakMap = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/weak-map"));
16
-
17
12
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
18
-
19
13
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
20
-
21
14
  var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
22
-
23
15
  var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
24
-
25
16
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
26
-
27
17
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
28
-
29
18
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
30
-
31
19
  var _classPrivateFieldGet2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classPrivateFieldGet"));
32
-
33
20
  var _classPrivateFieldSet2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classPrivateFieldSet"));
34
-
35
21
  var _internalMediaCore = require("@webex/internal-media-core");
36
-
37
22
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
38
-
39
23
  var _eventsScope = _interopRequireDefault(require("../common/events/events-scope"));
40
-
41
24
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
42
-
43
25
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
44
-
45
26
  function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
46
-
47
27
  function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
48
-
49
28
  var ReceiveSlotEvents = {
50
- SourceUpdate: 'sourceUpdate'
29
+ SourceUpdate: 'sourceUpdate',
30
+ MaxFsUpdate: 'maxFsUpdate'
51
31
  };
52
32
  exports.ReceiveSlotEvents = ReceiveSlotEvents;
53
33
  var receiveSlotCounter = 0;
54
-
55
34
  var _memberId = /*#__PURE__*/new _weakMap.default();
56
-
57
35
  var _csi = /*#__PURE__*/new _weakMap.default();
58
-
59
36
  var _sourceState = /*#__PURE__*/new _weakMap.default();
60
-
61
37
  /**
62
38
  * Class representing a receive slot. A single receive slot is able to receive a single track
63
39
  * for example some participant's main video or audio
64
40
  */
65
41
  var ReceiveSlot = /*#__PURE__*/function (_EventsScope) {
66
42
  (0, _inherits2.default)(ReceiveSlot, _EventsScope);
67
-
68
43
  var _super = _createSuper(ReceiveSlot);
69
-
70
44
  /**
71
45
  * constructor - don't use it directly, you should always use meeting.receiveSlotManager.allocateSlot()
72
46
  * to create any receive slots
73
47
  *
74
- * @param {MC.MediaType} mediaType
75
- * @param {MC.ReceiveSlot} mcReceiveSlot
48
+ * @param {MediaType} mediaType
49
+ * @param {ReceiveSlot} mcReceiveSlot
76
50
  * @param {FindMemberIdCallback} findMemberIdCallback callback for finding memberId for given CSI
77
51
  */
78
52
  function ReceiveSlot(mediaType, mcReceiveSlot, findMemberIdCallback) {
79
53
  var _this;
80
-
81
54
  (0, _classCallCheck2.default)(this, ReceiveSlot);
82
55
  _this = _super.call(this);
83
56
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mcReceiveSlot", void 0);
84
57
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "findMemberIdCallback", void 0);
85
58
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "id", void 0);
86
59
  (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mediaType", void 0);
87
-
88
60
  _classPrivateFieldInitSpec((0, _assertThisInitialized2.default)(_this), _memberId, {
89
61
  writable: true,
90
62
  value: void 0
91
63
  });
92
-
93
64
  _classPrivateFieldInitSpec((0, _assertThisInitialized2.default)(_this), _csi, {
94
65
  writable: true,
95
66
  value: void 0
96
67
  });
97
-
98
68
  _classPrivateFieldInitSpec((0, _assertThisInitialized2.default)(_this), _sourceState, {
99
69
  writable: true,
100
70
  value: void 0
101
71
  });
102
-
103
72
  receiveSlotCounter += 1;
104
73
  _this.findMemberIdCallback = findMemberIdCallback;
105
74
  _this.mediaType = mediaType;
106
75
  _this.mcReceiveSlot = mcReceiveSlot;
107
76
  (0, _classPrivateFieldSet2.default)((0, _assertThisInitialized2.default)(_this), _sourceState, 'no source');
108
77
  _this.id = "r".concat(receiveSlotCounter);
109
-
110
78
  _this.setupEventListeners();
111
-
112
79
  return _this;
113
80
  }
81
+
114
82
  /**
115
83
  * Getter for memberId
116
84
  */
117
-
118
-
119
85
  (0, _createClass2.default)(ReceiveSlot, [{
120
86
  key: "memberId",
121
87
  get: function get() {
122
88
  return (0, _classPrivateFieldGet2.default)(this, _memberId);
123
89
  }
90
+
124
91
  /**
125
92
  * Getter for csi
126
93
  */
127
-
128
94
  }, {
129
95
  key: "csi",
130
96
  get: function get() {
131
97
  return (0, _classPrivateFieldGet2.default)(this, _csi);
132
98
  }
99
+
133
100
  /**
134
- * Getter for sourceState
101
+ * Set the max frame size for this slot
102
+ * @param newFs frame size
135
103
  */
104
+ }, {
105
+ key: "setMaxFs",
106
+ value: function setMaxFs(newFs) {
107
+ // emit event for media request manager to listen to
108
+
109
+ this.emit({
110
+ file: 'meeting/receiveSlot',
111
+ function: 'findMemberId'
112
+ }, ReceiveSlotEvents.MaxFsUpdate, {
113
+ maxFs: newFs
114
+ });
115
+ }
136
116
 
117
+ /**
118
+ * Getter for sourceState
119
+ */
137
120
  }, {
138
121
  key: "sourceState",
139
122
  get: function get() {
140
123
  return (0, _classPrivateFieldGet2.default)(this, _sourceState);
141
124
  }
125
+
142
126
  /**
143
127
  * registers event handlers with the underlying ReceiveSlot
144
128
  */
145
-
146
129
  }, {
147
130
  key: "setupEventListeners",
148
131
  value: function setupEventListeners() {
149
132
  var _this2 = this;
150
-
151
133
  var scope = {
152
134
  file: 'meeting/receiveSlot',
153
135
  function: 'setupEventListeners'
154
136
  };
155
- this.mcReceiveSlot.on(_internalMediaCore.MediaConnection.ReceiveSlotEvents.SourceUpdate, function (state, csi) {
137
+ this.mcReceiveSlot.on(_internalMediaCore.ReceiveSlotEvents.SourceUpdate, function (state, csi) {
156
138
  _loggerProxy.default.logger.log("ReceiveSlot#setupEventListeners --> got source update on receive slot ".concat(_this2.id, ", mediaType=").concat(_this2.mediaType, ", csi=").concat(csi, ", state=").concat(state));
157
-
158
139
  (0, _classPrivateFieldSet2.default)(_this2, _memberId, csi ? _this2.findMemberIdCallback(csi) : undefined);
159
140
  (0, _classPrivateFieldSet2.default)(_this2, _csi, csi);
160
141
  (0, _classPrivateFieldSet2.default)(_this2, _sourceState, state);
161
-
162
142
  _this2.emit(scope, ReceiveSlotEvents.SourceUpdate, {
163
143
  state: (0, _classPrivateFieldGet2.default)(_this2, _sourceState),
164
144
  csi: (0, _classPrivateFieldGet2.default)(_this2, _csi),
@@ -166,44 +146,57 @@ var ReceiveSlot = /*#__PURE__*/function (_EventsScope) {
166
146
  });
167
147
  });
168
148
  }
149
+
150
+ /** Tries to find the member id for this receive slot if it hasn't got one */
151
+ }, {
152
+ key: "findMemberId",
153
+ value: function findMemberId() {
154
+ if ((0, _classPrivateFieldGet2.default)(this, _memberId) === undefined && (0, _classPrivateFieldGet2.default)(this, _csi)) {
155
+ (0, _classPrivateFieldSet2.default)(this, _memberId, this.findMemberIdCallback((0, _classPrivateFieldGet2.default)(this, _csi)));
156
+ if ((0, _classPrivateFieldGet2.default)(this, _memberId)) {
157
+ // if we found the memberId, simulate source update so that the client app knows that something's changed
158
+ this.emit({
159
+ file: 'meeting/receiveSlot',
160
+ function: 'findMemberId'
161
+ }, ReceiveSlotEvents.SourceUpdate, {
162
+ state: (0, _classPrivateFieldGet2.default)(this, _sourceState),
163
+ csi: (0, _classPrivateFieldGet2.default)(this, _csi),
164
+ memberId: (0, _classPrivateFieldGet2.default)(this, _memberId)
165
+ });
166
+ }
167
+ }
168
+ }
169
+
170
+ /**
171
+ * @returns {string} a log message used to identify the receive slot
172
+ */
173
+ }, {
174
+ key: "logString",
175
+ get: function get() {
176
+ return "ReceiveSlot - ".concat(this.id, ": ").concat((0, _stringify.default)(this.mcReceiveSlot.id));
177
+ }
178
+
169
179
  /**
170
180
  * The MediaStream object associated with this slot.
171
181
  *
172
182
  * @returns {MediaStream} The MediaStreamTrack.
173
183
  */
174
-
175
184
  }, {
176
185
  key: "stream",
177
186
  get: function get() {
178
187
  return this.mcReceiveSlot.stream;
179
188
  }
189
+
180
190
  /**
181
191
  * The underlying WCME receive slot
182
192
  */
183
-
184
193
  }, {
185
194
  key: "wcmeReceiveSlot",
186
195
  get: function get() {
187
196
  return this.mcReceiveSlot;
188
197
  }
189
- /**
190
- * Resets the source state to the default 'no source' value.
191
- * This function should be called on receive slots that are
192
- * no longer part of a media request. It's needed because WCME
193
- * does not send any more events on such slots, so the sourceState
194
- * value would not represent the truth anymore.
195
- */
196
-
197
- }, {
198
- key: "resetSourceState",
199
- value: function resetSourceState() {
200
- (0, _classPrivateFieldSet2.default)(this, _sourceState, 'no source');
201
- (0, _classPrivateFieldSet2.default)(this, _csi, undefined);
202
- (0, _classPrivateFieldSet2.default)(this, _memberId, undefined);
203
- }
204
198
  }]);
205
199
  return ReceiveSlot;
206
200
  }(_eventsScope.default);
207
-
208
201
  exports.ReceiveSlot = ReceiveSlot;
209
202
  //# sourceMappingURL=receiveSlot.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["ReceiveSlotEvents","SourceUpdate","receiveSlotCounter","ReceiveSlot","mediaType","mcReceiveSlot","findMemberIdCallback","id","setupEventListeners","scope","file","function","on","MC","state","csi","LoggerProxy","logger","log","undefined","emit","memberId","stream","EventsScope"],"sources":["receiveSlot.ts"],"sourcesContent":["import {MediaConnection as MC} from '@webex/internal-media-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport EventsScope from '../common/events/events-scope';\n\nexport const ReceiveSlotEvents = {\n SourceUpdate: 'sourceUpdate',\n};\n\nexport type SourceState = MC.SourceState;\nexport type CSI = number;\nexport type MemberId = string;\nexport type ReceiveSlotId = string;\n\nlet receiveSlotCounter = 0;\n\nexport type FindMemberIdCallback = (csi: CSI) => MemberId | undefined;\n\n/**\n * Class representing a receive slot. A single receive slot is able to receive a single track\n * for example some participant's main video or audio\n */\nexport class ReceiveSlot extends EventsScope {\n private readonly mcReceiveSlot: MC.ReceiveSlot;\n\n private readonly findMemberIdCallback: FindMemberIdCallback;\n\n public readonly id: ReceiveSlotId;\n\n public readonly mediaType: MC.MediaType;\n\n #memberId?: MemberId;\n\n #csi?: CSI;\n\n #sourceState: MC.SourceState;\n\n /**\n * constructor - don't use it directly, you should always use meeting.receiveSlotManager.allocateSlot()\n * to create any receive slots\n *\n * @param {MC.MediaType} mediaType\n * @param {MC.ReceiveSlot} mcReceiveSlot\n * @param {FindMemberIdCallback} findMemberIdCallback callback for finding memberId for given CSI\n */\n constructor(\n mediaType: MC.MediaType,\n mcReceiveSlot: MC.ReceiveSlot,\n findMemberIdCallback: FindMemberIdCallback\n ) {\n super();\n\n receiveSlotCounter += 1;\n\n this.findMemberIdCallback = findMemberIdCallback;\n this.mediaType = mediaType;\n this.mcReceiveSlot = mcReceiveSlot;\n this.#sourceState = 'no source';\n this.id = `r${receiveSlotCounter}`;\n\n this.setupEventListeners();\n }\n\n /**\n * Getter for memberId\n */\n public get memberId() {\n return this.#memberId;\n }\n\n /**\n * Getter for csi\n */\n public get csi() {\n return this.#csi;\n }\n\n /**\n * Getter for sourceState\n */\n public get sourceState() {\n return this.#sourceState;\n }\n\n /**\n * registers event handlers with the underlying ReceiveSlot\n */\n setupEventListeners() {\n const scope = {\n file: 'meeting/receiveSlot',\n function: 'setupEventListeners',\n };\n\n this.mcReceiveSlot.on(\n MC.ReceiveSlotEvents.SourceUpdate,\n (state: MC.SourceState, csi?: number) => {\n LoggerProxy.logger.log(\n `ReceiveSlot#setupEventListeners --> got source update on receive slot ${this.id}, mediaType=${this.mediaType}, csi=${csi}, state=${state}`\n );\n this.#memberId = csi ? this.findMemberIdCallback(csi) : undefined;\n this.#csi = csi;\n this.#sourceState = state;\n\n this.emit(scope, ReceiveSlotEvents.SourceUpdate, {\n state: this.#sourceState,\n csi: this.#csi,\n memberId: this.#memberId,\n });\n }\n );\n }\n\n /**\n * The MediaStream object associated with this slot.\n *\n * @returns {MediaStream} The MediaStreamTrack.\n */\n get stream(): MediaStream {\n return this.mcReceiveSlot.stream;\n }\n\n /**\n * The underlying WCME receive slot\n */\n get wcmeReceiveSlot(): MC.ReceiveSlot {\n return this.mcReceiveSlot;\n }\n\n /**\n * Resets the source state to the default 'no source' value.\n * This function should be called on receive slots that are\n * no longer part of a media request. It's needed because WCME\n * does not send any more events on such slots, so the sourceState\n * value would not represent the truth anymore.\n */\n public resetSourceState() {\n this.#sourceState = 'no source';\n this.#csi = undefined;\n this.#memberId = undefined;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;AACA;;;;;;;;;;AAEO,IAAMA,iBAAiB,GAAG;EAC/BC,YAAY,EAAE;AADiB,CAA1B;;AASP,IAAIC,kBAAkB,GAAG,CAAzB;;;;;;;;AAIA;AACA;AACA;AACA;IACaC,W;;;;;EAeX;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,qBACEC,SADF,EAEEC,aAFF,EAGEC,oBAHF,EAIE;IAAA;;IAAA;IACA;IADA;IAAA;IAAA;IAAA;;IAAA;MAAA;MAAA;IAAA;;IAAA;MAAA;MAAA;IAAA;;IAAA;MAAA;MAAA;IAAA;;IAGAJ,kBAAkB,IAAI,CAAtB;IAEA,MAAKI,oBAAL,GAA4BA,oBAA5B;IACA,MAAKF,SAAL,GAAiBA,SAAjB;IACA,MAAKC,aAAL,GAAqBA,aAArB;IACA,+FAAoB,WAApB;IACA,MAAKE,EAAL,cAAcL,kBAAd;;IAEA,MAAKM,mBAAL;;IAXA;EAYD;EAED;AACF;AACA;;;;;SACE,eAAsB;MACpB,2CAAO,IAAP;IACD;IAED;AACF;AACA;;;;SACE,eAAiB;MACf,2CAAO,IAAP;IACD;IAED;AACF;AACA;;;;SACE,eAAyB;MACvB,2CAAO,IAAP;IACD;IAED;AACF;AACA;;;;WACE,+BAAsB;MAAA;;MACpB,IAAMC,KAAK,GAAG;QACZC,IAAI,EAAE,qBADM;QAEZC,QAAQ,EAAE;MAFE,CAAd;MAKA,KAAKN,aAAL,CAAmBO,EAAnB,CACEC,kCAAA,CAAGb,iBAAH,CAAqBC,YADvB,EAEE,UAACa,KAAD,EAAwBC,GAAxB,EAAyC;QACvCC,oBAAA,CAAYC,MAAZ,CAAmBC,GAAnB,iFAC2E,MAAI,CAACX,EADhF,yBACiG,MAAI,CAACH,SADtG,mBACwHW,GADxH,qBACsID,KADtI;;QAGA,0CAAI,aAAaC,GAAG,GAAG,MAAI,CAACT,oBAAL,CAA0BS,GAA1B,CAAH,GAAoCI,SAApD,CAAJ;QACA,0CAAI,QAAQJ,GAAR,CAAJ;QACA,0CAAI,gBAAgBD,KAAhB,CAAJ;;QAEA,MAAI,CAACM,IAAL,CAAUX,KAAV,EAAiBT,iBAAiB,CAACC,YAAnC,EAAiD;UAC/Ca,KAAK,sCAAE,MAAF,eAD0C;UAE/CC,GAAG,sCAAE,MAAF,OAF4C;UAG/CM,QAAQ,sCAAE,MAAF;QAHuC,CAAjD;MAKD,CAfH;IAiBD;IAED;AACF;AACA;AACA;AACA;;;;SACE,eAA0B;MACxB,OAAO,KAAKhB,aAAL,CAAmBiB,MAA1B;IACD;IAED;AACF;AACA;;;;SACE,eAAsC;MACpC,OAAO,KAAKjB,aAAZ;IACD;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;;;WACE,4BAA0B;MACxB,wDAAoB,WAApB;MACA,gDAAYc,SAAZ;MACA,qDAAiBA,SAAjB;IACD;;;EArH8BI,oB"}
1
+ {"version":3,"names":["ReceiveSlotEvents","SourceUpdate","MaxFsUpdate","receiveSlotCounter","ReceiveSlot","mediaType","mcReceiveSlot","findMemberIdCallback","id","setupEventListeners","newFs","emit","file","function","maxFs","scope","on","WcmeReceiveSlotEvents","state","csi","LoggerProxy","logger","log","undefined","memberId","stream","EventsScope"],"sources":["receiveSlot.ts"],"sourcesContent":["/* eslint-disable valid-jsdoc */\nimport {\n MediaType,\n ReceiveSlot as WcmeReceiveSlot,\n ReceiveSlotEvents as WcmeReceiveSlotEvents,\n StreamState,\n} from '@webex/internal-media-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport EventsScope from '../common/events/events-scope';\n\nexport const ReceiveSlotEvents = {\n SourceUpdate: 'sourceUpdate',\n MaxFsUpdate: 'maxFsUpdate',\n};\n\nexport type {StreamState} from '@webex/internal-media-core';\nexport type CSI = number;\nexport type MemberId = string;\nexport type ReceiveSlotId = string;\n\nlet receiveSlotCounter = 0;\n\nexport type FindMemberIdCallback = (csi: CSI) => MemberId | undefined;\n\n/**\n * Class representing a receive slot. A single receive slot is able to receive a single track\n * for example some participant's main video or audio\n */\nexport class ReceiveSlot extends EventsScope {\n private readonly mcReceiveSlot: WcmeReceiveSlot;\n\n private readonly findMemberIdCallback: FindMemberIdCallback;\n\n public readonly id: ReceiveSlotId;\n\n public readonly mediaType: MediaType;\n\n #memberId?: MemberId;\n\n #csi?: CSI;\n\n #sourceState: StreamState;\n\n /**\n * constructor - don't use it directly, you should always use meeting.receiveSlotManager.allocateSlot()\n * to create any receive slots\n *\n * @param {MediaType} mediaType\n * @param {ReceiveSlot} mcReceiveSlot\n * @param {FindMemberIdCallback} findMemberIdCallback callback for finding memberId for given CSI\n */\n constructor(\n mediaType: MediaType,\n mcReceiveSlot: WcmeReceiveSlot,\n findMemberIdCallback: FindMemberIdCallback\n ) {\n super();\n\n receiveSlotCounter += 1;\n\n this.findMemberIdCallback = findMemberIdCallback;\n this.mediaType = mediaType;\n this.mcReceiveSlot = mcReceiveSlot;\n this.#sourceState = 'no source';\n this.id = `r${receiveSlotCounter}`;\n\n this.setupEventListeners();\n }\n\n /**\n * Getter for memberId\n */\n public get memberId() {\n return this.#memberId;\n }\n\n /**\n * Getter for csi\n */\n public get csi() {\n return this.#csi;\n }\n\n /**\n * Set the max frame size for this slot\n * @param newFs frame size\n */\n public setMaxFs(newFs) {\n // emit event for media request manager to listen to\n\n this.emit(\n {\n file: 'meeting/receiveSlot',\n function: 'findMemberId',\n },\n ReceiveSlotEvents.MaxFsUpdate,\n {\n maxFs: newFs,\n }\n );\n }\n\n /**\n * Getter for sourceState\n */\n public get sourceState() {\n return this.#sourceState;\n }\n\n /**\n * registers event handlers with the underlying ReceiveSlot\n */\n private setupEventListeners() {\n const scope = {\n file: 'meeting/receiveSlot',\n function: 'setupEventListeners',\n };\n\n this.mcReceiveSlot.on(\n WcmeReceiveSlotEvents.SourceUpdate,\n (state: StreamState, csi?: number) => {\n LoggerProxy.logger.log(\n `ReceiveSlot#setupEventListeners --> got source update on receive slot ${this.id}, mediaType=${this.mediaType}, csi=${csi}, state=${state}`\n );\n this.#memberId = csi ? this.findMemberIdCallback(csi) : undefined;\n this.#csi = csi;\n this.#sourceState = state;\n\n this.emit(scope, ReceiveSlotEvents.SourceUpdate, {\n state: this.#sourceState,\n csi: this.#csi,\n memberId: this.#memberId,\n });\n }\n );\n }\n\n /** Tries to find the member id for this receive slot if it hasn't got one */\n public findMemberId() {\n if (this.#memberId === undefined && this.#csi) {\n this.#memberId = this.findMemberIdCallback(this.#csi);\n\n if (this.#memberId) {\n // if we found the memberId, simulate source update so that the client app knows that something's changed\n this.emit(\n {\n file: 'meeting/receiveSlot',\n function: 'findMemberId',\n },\n ReceiveSlotEvents.SourceUpdate,\n {\n state: this.#sourceState,\n csi: this.#csi,\n memberId: this.#memberId,\n }\n );\n }\n }\n }\n\n /**\n * @returns {string} a log message used to identify the receive slot\n */\n public get logString() {\n return `ReceiveSlot - ${this.id}: ${JSON.stringify(this.mcReceiveSlot.id)}`;\n }\n\n /**\n * The MediaStream object associated with this slot.\n *\n * @returns {MediaStream} The MediaStreamTrack.\n */\n get stream(): MediaStream {\n return this.mcReceiveSlot.stream;\n }\n\n /**\n * The underlying WCME receive slot\n */\n get wcmeReceiveSlot(): WcmeReceiveSlot {\n return this.mcReceiveSlot;\n }\n}\n"],"mappings":"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"}
@@ -1,37 +1,23 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
-
7
5
  _Object$defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
-
11
8
  exports.ReceiveSlotManager = void 0;
12
-
13
- var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
14
-
15
- var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
16
-
17
9
  var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
18
-
10
+ var _values = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/values"));
11
+ var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
19
12
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
20
-
21
13
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
22
-
23
14
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
24
-
25
15
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
26
-
27
16
  var _internalMediaCore = require("@webex/internal-media-core");
28
-
29
17
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
30
-
31
18
  var _receiveSlot = require("./receiveSlot");
32
-
19
+ /* eslint-disable valid-jsdoc */
33
20
  /* eslint-disable import/prefer-default-export */
34
-
35
21
  /**
36
22
  * Manages all receive slots used by a meeting. WMCE receive slots cannot be ever deleted,
37
23
  * so this manager has a pool in order to re-use the slots that were released earlier.
@@ -41,145 +27,111 @@ var ReceiveSlotManager = /*#__PURE__*/function () {
41
27
  * Constructor
42
28
  * @param {Meeting} meeting
43
29
  */
44
- function ReceiveSlotManager(meeting) {
30
+ function ReceiveSlotManager(createSlotCallback, findMemberIdByCsiCallback) {
45
31
  var _this$allocatedSlots, _this$freeSlots;
46
-
47
32
  (0, _classCallCheck2.default)(this, ReceiveSlotManager);
48
33
  (0, _defineProperty2.default)(this, "allocatedSlots", void 0);
49
34
  (0, _defineProperty2.default)(this, "freeSlots", void 0);
50
- (0, _defineProperty2.default)(this, "meeting", void 0);
51
- this.allocatedSlots = (_this$allocatedSlots = {}, (0, _defineProperty2.default)(_this$allocatedSlots, _internalMediaCore.MediaConnection.MediaType.AudioMain, []), (0, _defineProperty2.default)(_this$allocatedSlots, _internalMediaCore.MediaConnection.MediaType.VideoMain, []), (0, _defineProperty2.default)(_this$allocatedSlots, _internalMediaCore.MediaConnection.MediaType.AudioSlides, []), (0, _defineProperty2.default)(_this$allocatedSlots, _internalMediaCore.MediaConnection.MediaType.VideoSlides, []), _this$allocatedSlots);
52
- this.freeSlots = (_this$freeSlots = {}, (0, _defineProperty2.default)(_this$freeSlots, _internalMediaCore.MediaConnection.MediaType.AudioMain, []), (0, _defineProperty2.default)(_this$freeSlots, _internalMediaCore.MediaConnection.MediaType.VideoMain, []), (0, _defineProperty2.default)(_this$freeSlots, _internalMediaCore.MediaConnection.MediaType.AudioSlides, []), (0, _defineProperty2.default)(_this$freeSlots, _internalMediaCore.MediaConnection.MediaType.VideoSlides, []), _this$freeSlots);
53
- this.meeting = meeting;
35
+ (0, _defineProperty2.default)(this, "createSlotCallback", void 0);
36
+ (0, _defineProperty2.default)(this, "findMemberIdByCsiCallback", void 0);
37
+ this.allocatedSlots = (_this$allocatedSlots = {}, (0, _defineProperty2.default)(_this$allocatedSlots, _internalMediaCore.MediaType.AudioMain, []), (0, _defineProperty2.default)(_this$allocatedSlots, _internalMediaCore.MediaType.VideoMain, []), (0, _defineProperty2.default)(_this$allocatedSlots, _internalMediaCore.MediaType.AudioSlides, []), (0, _defineProperty2.default)(_this$allocatedSlots, _internalMediaCore.MediaType.VideoSlides, []), _this$allocatedSlots);
38
+ this.freeSlots = (_this$freeSlots = {}, (0, _defineProperty2.default)(_this$freeSlots, _internalMediaCore.MediaType.AudioMain, []), (0, _defineProperty2.default)(_this$freeSlots, _internalMediaCore.MediaType.VideoMain, []), (0, _defineProperty2.default)(_this$freeSlots, _internalMediaCore.MediaType.AudioSlides, []), (0, _defineProperty2.default)(_this$freeSlots, _internalMediaCore.MediaType.VideoSlides, []), _this$freeSlots);
39
+ this.createSlotCallback = createSlotCallback;
40
+ this.findMemberIdByCsiCallback = findMemberIdByCsiCallback;
54
41
  }
42
+
55
43
  /**
56
44
  * Creates a new receive slot or returns one from the existing pool of free slots
57
45
  *
58
- * @param {MC.MediaType} mediaType
46
+ * @param {MediaType} mediaType
59
47
  * @returns {Promise<ReceiveSlot>}
60
48
  */
61
-
62
-
63
49
  (0, _createClass2.default)(ReceiveSlotManager, [{
64
50
  key: "allocateSlot",
65
51
  value: function () {
66
52
  var _allocateSlot = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(mediaType) {
67
- var _this$meeting,
68
- _this$meeting$mediaPr,
69
- _this = this;
70
-
71
53
  var availableSlot, wcmeReceiveSlot, receiveSlot;
72
54
  return _regenerator.default.wrap(function _callee$(_context) {
73
- while (1) {
74
- switch (_context.prev = _context.next) {
75
- case 0:
76
- if ((_this$meeting = this.meeting) !== null && _this$meeting !== void 0 && (_this$meeting$mediaPr = _this$meeting.mediaProperties) !== null && _this$meeting$mediaPr !== void 0 && _this$meeting$mediaPr.webrtcMediaConnection) {
77
- _context.next = 2;
78
- break;
79
- }
80
-
81
- return _context.abrupt("return", _promise.default.reject(new Error('Webrtc media connection is missing')));
82
-
83
- case 2:
84
- // try to use one of the free ones
85
- availableSlot = this.freeSlots[mediaType].pop();
86
-
87
- if (!availableSlot) {
88
- _context.next = 7;
89
- break;
90
- }
91
-
92
- this.allocatedSlots[mediaType].push(availableSlot);
93
-
94
- _loggerProxy.default.logger.log("receive slot re-used: ".concat(availableSlot.id));
95
-
96
- return _context.abrupt("return", availableSlot);
97
-
98
- case 7:
99
- _context.next = 9;
100
- return this.meeting.mediaProperties.webrtcMediaConnection.createReceiveSlot(mediaType);
101
-
102
- case 9:
103
- wcmeReceiveSlot = _context.sent;
104
- receiveSlot = new _receiveSlot.ReceiveSlot(mediaType, wcmeReceiveSlot, function (csi) {
105
- var _this$meeting$members;
106
-
107
- return (_this$meeting$members = _this.meeting.members.findMemberByCsi(csi)) === null || _this$meeting$members === void 0 ? void 0 : _this$meeting$members.id;
108
- });
109
- this.allocatedSlots[mediaType].push(receiveSlot);
110
-
111
- _loggerProxy.default.logger.log("new receive slot allocated: ".concat(receiveSlot.id));
112
-
113
- return _context.abrupt("return", receiveSlot);
114
-
115
- case 14:
116
- case "end":
117
- return _context.stop();
118
- }
55
+ while (1) switch (_context.prev = _context.next) {
56
+ case 0:
57
+ // try to use one of the free ones
58
+ availableSlot = this.freeSlots[mediaType].pop();
59
+ if (!availableSlot) {
60
+ _context.next = 5;
61
+ break;
62
+ }
63
+ this.allocatedSlots[mediaType].push(availableSlot);
64
+ _loggerProxy.default.logger.log("".concat(mediaType, ": receive slot re-used: ").concat(availableSlot.id));
65
+ return _context.abrupt("return", availableSlot);
66
+ case 5:
67
+ _context.next = 7;
68
+ return this.createSlotCallback(mediaType);
69
+ case 7:
70
+ wcmeReceiveSlot = _context.sent;
71
+ receiveSlot = new _receiveSlot.ReceiveSlot(mediaType, wcmeReceiveSlot, this.findMemberIdByCsiCallback);
72
+ this.allocatedSlots[mediaType].push(receiveSlot);
73
+ _loggerProxy.default.logger.log("".concat(mediaType, ": new receive slot allocated: ").concat(receiveSlot.id));
74
+ return _context.abrupt("return", receiveSlot);
75
+ case 12:
76
+ case "end":
77
+ return _context.stop();
119
78
  }
120
79
  }, _callee, this);
121
80
  }));
122
-
123
81
  function allocateSlot(_x) {
124
82
  return _allocateSlot.apply(this, arguments);
125
83
  }
126
-
127
84
  return allocateSlot;
128
85
  }()
129
86
  /**
130
87
  * Releases the slot back to the pool so it can be re-used by others in the future
131
88
  * @param {ReceiveSlot} slot
132
89
  */
133
-
134
90
  }, {
135
91
  key: "releaseSlot",
136
92
  value: function releaseSlot(slot) {
137
93
  var idx = this.allocatedSlots[slot.mediaType].findIndex(function (allocatedSlot) {
138
94
  return allocatedSlot === slot;
139
95
  });
140
-
141
96
  if (idx >= 0) {
142
97
  this.allocatedSlots[slot.mediaType].splice(idx, 1);
143
98
  this.freeSlots[slot.mediaType].push(slot);
144
-
145
- _loggerProxy.default.logger.log("receive slot released: ".concat(slot.id));
99
+ _loggerProxy.default.logger.log("".concat(slot.mediaType, ": receive slot released: ").concat(slot.id));
146
100
  } else {
147
- _loggerProxy.default.logger.warn('ReceiveSlotManager#releaseSlot --> trying to release a slot that is not managed by this ReceiveSlotManager');
101
+ _loggerProxy.default.logger.warn("ReceiveSlotManager#releaseSlot --> trying to release a ".concat(slot.mediaType, "} slot that is not managed by this ReceiveSlotManager"));
148
102
  }
149
103
  }
104
+
150
105
  /**
151
106
  * Resets the slot manager - this method should be called when the media connection is torn down
152
107
  */
153
-
154
108
  }, {
155
109
  key: "reset",
156
110
  value: function reset() {
157
111
  var _this$allocatedSlots2, _this$freeSlots2;
158
-
159
- this.allocatedSlots = (_this$allocatedSlots2 = {}, (0, _defineProperty2.default)(_this$allocatedSlots2, _internalMediaCore.MediaConnection.MediaType.AudioMain, []), (0, _defineProperty2.default)(_this$allocatedSlots2, _internalMediaCore.MediaConnection.MediaType.VideoMain, []), (0, _defineProperty2.default)(_this$allocatedSlots2, _internalMediaCore.MediaConnection.MediaType.AudioSlides, []), (0, _defineProperty2.default)(_this$allocatedSlots2, _internalMediaCore.MediaConnection.MediaType.VideoSlides, []), _this$allocatedSlots2);
160
- this.freeSlots = (_this$freeSlots2 = {}, (0, _defineProperty2.default)(_this$freeSlots2, _internalMediaCore.MediaConnection.MediaType.AudioMain, []), (0, _defineProperty2.default)(_this$freeSlots2, _internalMediaCore.MediaConnection.MediaType.VideoMain, []), (0, _defineProperty2.default)(_this$freeSlots2, _internalMediaCore.MediaConnection.MediaType.AudioSlides, []), (0, _defineProperty2.default)(_this$freeSlots2, _internalMediaCore.MediaConnection.MediaType.VideoSlides, []), _this$freeSlots2);
112
+ this.allocatedSlots = (_this$allocatedSlots2 = {}, (0, _defineProperty2.default)(_this$allocatedSlots2, _internalMediaCore.MediaType.AudioMain, []), (0, _defineProperty2.default)(_this$allocatedSlots2, _internalMediaCore.MediaType.VideoMain, []), (0, _defineProperty2.default)(_this$allocatedSlots2, _internalMediaCore.MediaType.AudioSlides, []), (0, _defineProperty2.default)(_this$allocatedSlots2, _internalMediaCore.MediaType.VideoSlides, []), _this$allocatedSlots2);
113
+ this.freeSlots = (_this$freeSlots2 = {}, (0, _defineProperty2.default)(_this$freeSlots2, _internalMediaCore.MediaType.AudioMain, []), (0, _defineProperty2.default)(_this$freeSlots2, _internalMediaCore.MediaType.VideoMain, []), (0, _defineProperty2.default)(_this$freeSlots2, _internalMediaCore.MediaType.AudioSlides, []), (0, _defineProperty2.default)(_this$freeSlots2, _internalMediaCore.MediaType.VideoSlides, []), _this$freeSlots2);
161
114
  }
115
+
162
116
  /**
163
117
  * Returns statistics about the managed slots
164
118
  *
165
119
  * @returns {Object}
166
120
  */
167
-
168
121
  }, {
169
122
  key: "getStats",
170
123
  value: function getStats() {
171
- var _this2 = this;
172
-
124
+ var _this = this;
173
125
  var numAllocatedSlots = {};
174
126
  var numFreeSlots = {};
175
127
  (0, _keys.default)(this.allocatedSlots).forEach(function (key) {
176
- if (_this2.allocatedSlots[key].length > 0) {
177
- numAllocatedSlots[key] = _this2.allocatedSlots[key].length;
128
+ if (_this.allocatedSlots[key].length > 0) {
129
+ numAllocatedSlots[key] = _this.allocatedSlots[key].length;
178
130
  }
179
131
  });
180
132
  (0, _keys.default)(this.freeSlots).forEach(function (key) {
181
- if (_this2.freeSlots[key].length > 0) {
182
- numFreeSlots[key] = _this2.freeSlots[key].length;
133
+ if (_this.freeSlots[key].length > 0) {
134
+ numFreeSlots[key] = _this.freeSlots[key].length;
183
135
  }
184
136
  });
185
137
  return {
@@ -187,9 +139,38 @@ var ReceiveSlotManager = /*#__PURE__*/function () {
187
139
  numFreeSlots: numFreeSlots
188
140
  };
189
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
+ }, {
148
+ key: "updateMemberIds",
149
+ value: function updateMemberIds() {
150
+ var _this2 = this;
151
+ (0, _keys.default)(this.allocatedSlots).forEach(function (key) {
152
+ _this2.allocatedSlots[key].forEach(function (slot) {
153
+ slot.findMemberId();
154
+ });
155
+ });
156
+ }
157
+
158
+ /**
159
+ * Find a receive slot by a ssrc.
160
+ *
161
+ * @param ssrc - The ssrc of the receive slot to find.
162
+ * @returns - The receive slot with this ssrc, undefined if not found.
163
+ */
164
+ }, {
165
+ key: "findReceiveSlotBySsrc",
166
+ value: function findReceiveSlotBySsrc(ssrc) {
167
+ return (0, _values.default)(this.allocatedSlots).flat().find(function (r) {
168
+ var _r$wcmeReceiveSlot, _r$wcmeReceiveSlot$id;
169
+ return ssrc && ((_r$wcmeReceiveSlot = r.wcmeReceiveSlot) === null || _r$wcmeReceiveSlot === void 0 ? void 0 : (_r$wcmeReceiveSlot$id = _r$wcmeReceiveSlot.id) === null || _r$wcmeReceiveSlot$id === void 0 ? void 0 : _r$wcmeReceiveSlot$id.ssrc) === ssrc;
170
+ });
171
+ }
190
172
  }]);
191
173
  return ReceiveSlotManager;
192
174
  }();
193
-
194
175
  exports.ReceiveSlotManager = ReceiveSlotManager;
195
176
  //# sourceMappingURL=receiveSlotManager.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["ReceiveSlotManager","meeting","allocatedSlots","MC","MediaType","AudioMain","VideoMain","AudioSlides","VideoSlides","freeSlots","mediaType","mediaProperties","webrtcMediaConnection","reject","Error","availableSlot","pop","push","LoggerProxy","logger","log","id","createReceiveSlot","wcmeReceiveSlot","receiveSlot","ReceiveSlot","csi","members","findMemberByCsi","slot","idx","findIndex","allocatedSlot","splice","warn","numAllocatedSlots","numFreeSlots","forEach","key","length"],"sources":["receiveSlotManager.ts"],"sourcesContent":["/* eslint-disable import/prefer-default-export */\nimport {MediaConnection as MC} from '@webex/internal-media-core';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport Meeting from '../meeting';\n\nimport {CSI, ReceiveSlot} from './receiveSlot';\n\n/**\n * Manages all receive slots used by a meeting. WMCE receive slots cannot be ever deleted,\n * so this manager has a pool in order to re-use the slots that were released earlier.\n */\nexport class ReceiveSlotManager {\n private allocatedSlots: {[key in MC.MediaType]: ReceiveSlot[]};\n\n private freeSlots: {[key in MC.MediaType]: ReceiveSlot[]};\n\n private meeting: Meeting;\n\n /**\n * Constructor\n * @param {Meeting} meeting\n */\n constructor(meeting) {\n this.allocatedSlots = {\n [MC.MediaType.AudioMain]: [],\n [MC.MediaType.VideoMain]: [],\n [MC.MediaType.AudioSlides]: [],\n [MC.MediaType.VideoSlides]: [],\n };\n this.freeSlots = {\n [MC.MediaType.AudioMain]: [],\n [MC.MediaType.VideoMain]: [],\n [MC.MediaType.AudioSlides]: [],\n [MC.MediaType.VideoSlides]: [],\n };\n this.meeting = meeting;\n }\n\n /**\n * Creates a new receive slot or returns one from the existing pool of free slots\n *\n * @param {MC.MediaType} mediaType\n * @returns {Promise<ReceiveSlot>}\n */\n async allocateSlot(mediaType: MC.MediaType): Promise<ReceiveSlot> {\n if (!this.meeting?.mediaProperties?.webrtcMediaConnection) {\n return Promise.reject(new Error('Webrtc media connection is missing'));\n }\n\n // try to use one of the free ones\n const availableSlot = this.freeSlots[mediaType].pop();\n\n if (availableSlot) {\n this.allocatedSlots[mediaType].push(availableSlot);\n\n LoggerProxy.logger.log(`receive slot re-used: ${availableSlot.id}`);\n\n return availableSlot;\n }\n\n // we have to create a new one\n const wcmeReceiveSlot =\n await this.meeting.mediaProperties.webrtcMediaConnection.createReceiveSlot(mediaType);\n\n const receiveSlot = new ReceiveSlot(\n mediaType,\n wcmeReceiveSlot,\n (csi: CSI) => this.meeting.members.findMemberByCsi(csi)?.id\n );\n\n this.allocatedSlots[mediaType].push(receiveSlot);\n LoggerProxy.logger.log(`new receive slot allocated: ${receiveSlot.id}`);\n\n return receiveSlot;\n }\n\n /**\n * Releases the slot back to the pool so it can be re-used by others in the future\n * @param {ReceiveSlot} slot\n */\n releaseSlot(slot: ReceiveSlot) {\n const idx = this.allocatedSlots[slot.mediaType].findIndex(\n (allocatedSlot) => allocatedSlot === slot\n );\n\n if (idx >= 0) {\n this.allocatedSlots[slot.mediaType].splice(idx, 1);\n this.freeSlots[slot.mediaType].push(slot);\n LoggerProxy.logger.log(`receive slot released: ${slot.id}`);\n } else {\n LoggerProxy.logger.warn(\n 'ReceiveSlotManager#releaseSlot --> trying to release a slot that is not managed by this ReceiveSlotManager'\n );\n }\n }\n\n /**\n * Resets the slot manager - this method should be called when the media connection is torn down\n */\n reset() {\n this.allocatedSlots = {\n [MC.MediaType.AudioMain]: [],\n [MC.MediaType.VideoMain]: [],\n [MC.MediaType.AudioSlides]: [],\n [MC.MediaType.VideoSlides]: [],\n };\n this.freeSlots = {\n [MC.MediaType.AudioMain]: [],\n [MC.MediaType.VideoMain]: [],\n [MC.MediaType.AudioSlides]: [],\n [MC.MediaType.VideoSlides]: [],\n };\n }\n\n /**\n * Returns statistics about the managed slots\n *\n * @returns {Object}\n */\n getStats() {\n const numAllocatedSlots = {};\n const numFreeSlots = {};\n\n Object.keys(this.allocatedSlots).forEach((key) => {\n if (this.allocatedSlots[key].length > 0) {\n numAllocatedSlots[key] = this.allocatedSlots[key].length;\n }\n });\n\n Object.keys(this.freeSlots).forEach((key) => {\n if (this.freeSlots[key].length > 0) {\n numFreeSlots[key] = this.freeSlots[key].length;\n }\n });\n\n return {\n numAllocatedSlots,\n numFreeSlots,\n };\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["ReceiveSlotManager","createSlotCallback","findMemberIdByCsiCallback","allocatedSlots","MediaType","AudioMain","VideoMain","AudioSlides","VideoSlides","freeSlots","mediaType","availableSlot","pop","push","LoggerProxy","logger","log","id","wcmeReceiveSlot","receiveSlot","ReceiveSlot","slot","idx","findIndex","allocatedSlot","splice","warn","numAllocatedSlots","numFreeSlots","forEach","key","length","findMemberId","ssrc","flat","find","r"],"sources":["receiveSlotManager.ts"],"sourcesContent":["/* eslint-disable valid-jsdoc */\n/* eslint-disable import/prefer-default-export */\nimport {MediaType, ReceiveSlot as WcmeReceiveSlot} from '@webex/internal-media-core';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport {FindMemberIdCallback, ReceiveSlot} from './receiveSlot';\n\nexport type CreateSlotCallback = (mediaType: MediaType) => Promise<WcmeReceiveSlot>;\n\nexport type {CSI, FindMemberIdCallback} from './receiveSlot';\n\n/**\n * Manages all receive slots used by a meeting. WMCE receive slots cannot be ever deleted,\n * so this manager has a pool in order to re-use the slots that were released earlier.\n */\nexport class ReceiveSlotManager {\n private allocatedSlots: {[key in MediaType]: ReceiveSlot[]};\n\n private freeSlots: {[key in MediaType]: ReceiveSlot[]};\n\n private createSlotCallback: CreateSlotCallback;\n\n private findMemberIdByCsiCallback: FindMemberIdCallback;\n\n /**\n * Constructor\n * @param {Meeting} meeting\n */\n constructor(\n createSlotCallback: CreateSlotCallback,\n findMemberIdByCsiCallback: FindMemberIdCallback\n ) {\n this.allocatedSlots = {\n [MediaType.AudioMain]: [],\n [MediaType.VideoMain]: [],\n [MediaType.AudioSlides]: [],\n [MediaType.VideoSlides]: [],\n };\n this.freeSlots = {\n [MediaType.AudioMain]: [],\n [MediaType.VideoMain]: [],\n [MediaType.AudioSlides]: [],\n [MediaType.VideoSlides]: [],\n };\n this.createSlotCallback = createSlotCallback;\n this.findMemberIdByCsiCallback = findMemberIdByCsiCallback;\n }\n\n /**\n * Creates a new receive slot or returns one from the existing pool of free slots\n *\n * @param {MediaType} mediaType\n * @returns {Promise<ReceiveSlot>}\n */\n async allocateSlot(mediaType: MediaType): Promise<ReceiveSlot> {\n // try to use one of the free ones\n const availableSlot = this.freeSlots[mediaType].pop();\n\n if (availableSlot) {\n this.allocatedSlots[mediaType].push(availableSlot);\n\n LoggerProxy.logger.log(`${mediaType}: receive slot re-used: ${availableSlot.id}`);\n\n return availableSlot;\n }\n\n // we have to create a new one\n const wcmeReceiveSlot = await this.createSlotCallback(mediaType);\n\n const receiveSlot = new ReceiveSlot(mediaType, wcmeReceiveSlot, this.findMemberIdByCsiCallback);\n\n this.allocatedSlots[mediaType].push(receiveSlot);\n LoggerProxy.logger.log(`${mediaType}: new receive slot allocated: ${receiveSlot.id}`);\n\n return receiveSlot;\n }\n\n /**\n * Releases the slot back to the pool so it can be re-used by others in the future\n * @param {ReceiveSlot} slot\n */\n releaseSlot(slot: ReceiveSlot) {\n const idx = this.allocatedSlots[slot.mediaType].findIndex(\n (allocatedSlot) => allocatedSlot === slot\n );\n\n if (idx >= 0) {\n this.allocatedSlots[slot.mediaType].splice(idx, 1);\n this.freeSlots[slot.mediaType].push(slot);\n LoggerProxy.logger.log(`${slot.mediaType}: receive slot released: ${slot.id}`);\n } else {\n LoggerProxy.logger.warn(\n `ReceiveSlotManager#releaseSlot --> trying to release a ${slot.mediaType}} slot that is not managed by this ReceiveSlotManager`\n );\n }\n }\n\n /**\n * Resets the slot manager - this method should be called when the media connection is torn down\n */\n reset() {\n this.allocatedSlots = {\n [MediaType.AudioMain]: [],\n [MediaType.VideoMain]: [],\n [MediaType.AudioSlides]: [],\n [MediaType.VideoSlides]: [],\n };\n this.freeSlots = {\n [MediaType.AudioMain]: [],\n [MediaType.VideoMain]: [],\n [MediaType.AudioSlides]: [],\n [MediaType.VideoSlides]: [],\n };\n }\n\n /**\n * Returns statistics about the managed slots\n *\n * @returns {Object}\n */\n getStats() {\n const numAllocatedSlots = {};\n const numFreeSlots = {};\n\n Object.keys(this.allocatedSlots).forEach((key) => {\n if (this.allocatedSlots[key].length > 0) {\n numAllocatedSlots[key] = this.allocatedSlots[key].length;\n }\n });\n\n Object.keys(this.freeSlots).forEach((key) => {\n if (this.freeSlots[key].length > 0) {\n numFreeSlots[key] = this.freeSlots[key].length;\n }\n });\n\n return {\n numAllocatedSlots,\n numFreeSlots,\n };\n }\n\n /**\n * Tries to find the member id on all allocated receive slots\n * This function should be called when new members are added to the meeting.\n */\n updateMemberIds() {\n Object.keys(this.allocatedSlots).forEach((key) => {\n this.allocatedSlots[key].forEach((slot: ReceiveSlot) => {\n slot.findMemberId();\n });\n });\n }\n\n /**\n * Find a receive slot by a ssrc.\n *\n * @param ssrc - The ssrc of the receive slot to find.\n * @returns - The receive slot with this ssrc, undefined if not found.\n */\n findReceiveSlotBySsrc(ssrc: number): ReceiveSlot | undefined {\n return Object.values(this.allocatedSlots)\n .flat()\n .find((r) => ssrc && r.wcmeReceiveSlot?.id?.ssrc === ssrc);\n }\n}\n"],"mappings":"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"}