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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (512) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/annotation/annotation.types.js +7 -0
  4. package/dist/annotation/annotation.types.js.map +1 -0
  5. package/dist/annotation/constants.js +48 -0
  6. package/dist/annotation/constants.js.map +1 -0
  7. package/dist/annotation/index.js +357 -0
  8. package/dist/annotation/index.js.map +1 -0
  9. package/dist/breakouts/breakout.js +176 -0
  10. package/dist/breakouts/breakout.js.map +1 -0
  11. package/dist/breakouts/collection.js +23 -0
  12. package/dist/breakouts/collection.js.map +1 -0
  13. package/dist/breakouts/edit-lock-error.js +52 -0
  14. package/dist/breakouts/edit-lock-error.js.map +1 -0
  15. package/dist/breakouts/events.js +43 -0
  16. package/dist/breakouts/events.js.map +1 -0
  17. package/dist/breakouts/index.js +944 -0
  18. package/dist/breakouts/index.js.map +1 -0
  19. package/dist/breakouts/request.js +78 -0
  20. package/dist/breakouts/request.js.map +1 -0
  21. package/dist/breakouts/utils.js +67 -0
  22. package/dist/breakouts/utils.js.map +1 -0
  23. package/dist/common/browser-detection.js +1 -20
  24. package/dist/common/browser-detection.js.map +1 -1
  25. package/dist/common/collection.js +5 -20
  26. package/dist/common/collection.js.map +1 -1
  27. package/dist/common/config.js +0 -7
  28. package/dist/common/config.js.map +1 -1
  29. package/dist/common/errors/captcha-error.js +5 -26
  30. package/dist/common/errors/captcha-error.js.map +1 -1
  31. package/dist/common/errors/intent-to-join.js +5 -26
  32. package/dist/common/errors/intent-to-join.js.map +1 -1
  33. package/dist/common/errors/join-meeting.js +6 -27
  34. package/dist/common/errors/join-meeting.js.map +1 -1
  35. package/dist/common/errors/media.js +5 -26
  36. package/dist/common/errors/media.js.map +1 -1
  37. package/dist/common/errors/parameter.js +5 -33
  38. package/dist/common/errors/parameter.js.map +1 -1
  39. package/dist/common/errors/password-error.js +5 -26
  40. package/dist/common/errors/password-error.js.map +1 -1
  41. package/dist/common/errors/permission.js +4 -25
  42. package/dist/common/errors/permission.js.map +1 -1
  43. package/dist/common/errors/reconnection-in-progress.js +0 -17
  44. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  45. package/dist/common/errors/reconnection.js +5 -26
  46. package/dist/common/errors/reconnection.js.map +1 -1
  47. package/dist/common/errors/stats.js +5 -26
  48. package/dist/common/errors/stats.js.map +1 -1
  49. package/dist/common/errors/webex-errors.js +6 -41
  50. package/dist/common/errors/webex-errors.js.map +1 -1
  51. package/dist/common/errors/webex-meetings-error.js +1 -24
  52. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  53. package/dist/common/events/events-scope.js +0 -22
  54. package/dist/common/events/events-scope.js.map +1 -1
  55. package/dist/common/events/events.js +0 -23
  56. package/dist/common/events/events.js.map +1 -1
  57. package/dist/common/events/trigger-proxy.js +0 -12
  58. package/dist/common/events/trigger-proxy.js.map +1 -1
  59. package/dist/common/events/util.js +0 -15
  60. package/dist/common/events/util.js.map +1 -1
  61. package/dist/common/logs/logger-config.js +0 -4
  62. package/dist/common/logs/logger-config.js.map +1 -1
  63. package/dist/common/logs/logger-proxy.js +1 -8
  64. package/dist/common/logs/logger-proxy.js.map +1 -1
  65. package/dist/common/logs/request.js +35 -61
  66. package/dist/common/logs/request.js.map +1 -1
  67. package/dist/common/queue.js +4 -14
  68. package/dist/common/queue.js.map +1 -1
  69. package/dist/config.js +6 -6
  70. package/dist/config.js.map +1 -1
  71. package/dist/constants.js +193 -53
  72. package/dist/constants.js.map +1 -1
  73. package/dist/controls-options-manager/constants.js +14 -0
  74. package/dist/controls-options-manager/constants.js.map +1 -0
  75. package/dist/controls-options-manager/enums.js +27 -0
  76. package/dist/controls-options-manager/enums.js.map +1 -0
  77. package/dist/controls-options-manager/index.js +297 -0
  78. package/dist/controls-options-manager/index.js.map +1 -0
  79. package/dist/controls-options-manager/types.js +7 -0
  80. package/dist/controls-options-manager/types.js.map +1 -0
  81. package/dist/controls-options-manager/util.js +286 -0
  82. package/dist/controls-options-manager/util.js.map +1 -0
  83. package/dist/index.js +72 -17
  84. package/dist/index.js.map +1 -1
  85. package/dist/locus-info/controlsUtils.js +94 -29
  86. package/dist/locus-info/controlsUtils.js.map +1 -1
  87. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  88. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  89. package/dist/locus-info/fullState.js +0 -15
  90. package/dist/locus-info/fullState.js.map +1 -1
  91. package/dist/locus-info/hostUtils.js +4 -12
  92. package/dist/locus-info/hostUtils.js.map +1 -1
  93. package/dist/locus-info/index.js +383 -212
  94. package/dist/locus-info/index.js.map +1 -1
  95. package/dist/locus-info/infoUtils.js +0 -38
  96. package/dist/locus-info/infoUtils.js.map +1 -1
  97. package/dist/locus-info/mediaSharesUtils.js +12 -38
  98. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  99. package/dist/locus-info/parser.js +88 -123
  100. package/dist/locus-info/parser.js.map +1 -1
  101. package/dist/locus-info/selfUtils.js +99 -91
  102. package/dist/locus-info/selfUtils.js.map +1 -1
  103. package/dist/media/index.js +62 -147
  104. package/dist/media/index.js.map +1 -1
  105. package/dist/media/properties.js +71 -117
  106. package/dist/media/properties.js.map +1 -1
  107. package/dist/media/util.js +2 -9
  108. package/dist/media/util.js.map +1 -1
  109. package/dist/mediaQualityMetrics/config.js +505 -495
  110. package/dist/mediaQualityMetrics/config.js.map +1 -1
  111. package/dist/meeting/in-meeting-actions.js +67 -14
  112. package/dist/meeting/in-meeting-actions.js.map +1 -1
  113. package/dist/meeting/index.js +2477 -2417
  114. package/dist/meeting/index.js.map +1 -1
  115. package/dist/meeting/muteState.js +252 -113
  116. package/dist/meeting/muteState.js.map +1 -1
  117. package/dist/meeting/request.js +296 -289
  118. package/dist/meeting/request.js.map +1 -1
  119. package/dist/meeting/request.type.js +7 -0
  120. package/dist/meeting/request.type.js.map +1 -0
  121. package/dist/meeting/state.js +21 -31
  122. package/dist/meeting/state.js.map +1 -1
  123. package/dist/meeting/util.js +58 -217
  124. package/dist/meeting/util.js.map +1 -1
  125. package/dist/meeting-info/collection.js +3 -25
  126. package/dist/meeting-info/collection.js.map +1 -1
  127. package/dist/meeting-info/index.js +10 -33
  128. package/dist/meeting-info/index.js.map +1 -1
  129. package/dist/meeting-info/meeting-info-v2.js +278 -281
  130. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  131. package/dist/meeting-info/request.js +1 -16
  132. package/dist/meeting-info/request.js.map +1 -1
  133. package/dist/meeting-info/util.js +98 -183
  134. package/dist/meeting-info/util.js.map +1 -1
  135. package/dist/meeting-info/utilv2.js +155 -232
  136. package/dist/meeting-info/utilv2.js.map +1 -1
  137. package/dist/meetings/collection.js +24 -20
  138. package/dist/meetings/collection.js.map +1 -1
  139. package/dist/meetings/index.js +675 -593
  140. package/dist/meetings/index.js.map +1 -1
  141. package/dist/meetings/request.js +23 -42
  142. package/dist/meetings/request.js.map +1 -1
  143. package/dist/meetings/util.js +177 -155
  144. package/dist/meetings/util.js.map +1 -1
  145. package/dist/member/index.js +89 -88
  146. package/dist/member/index.js.map +1 -1
  147. package/dist/member/types.js +15 -0
  148. package/dist/member/types.js.map +1 -0
  149. package/dist/member/util.js +101 -69
  150. package/dist/member/util.js.map +1 -1
  151. package/dist/members/collection.js +12 -12
  152. package/dist/members/collection.js.map +1 -1
  153. package/dist/members/index.js +162 -204
  154. package/dist/members/index.js.map +1 -1
  155. package/dist/members/request.js +58 -53
  156. package/dist/members/request.js.map +1 -1
  157. package/dist/members/types.js +15 -0
  158. package/dist/members/types.js.map +1 -0
  159. package/dist/members/util.js +107 -44
  160. package/dist/members/util.js.map +1 -1
  161. package/dist/metrics/config.js +50 -16
  162. package/dist/metrics/config.js.map +1 -1
  163. package/dist/metrics/constants.js +3 -7
  164. package/dist/metrics/constants.js.map +1 -1
  165. package/dist/metrics/index.js +93 -162
  166. package/dist/metrics/index.js.map +1 -1
  167. package/dist/multistream/mediaRequestManager.js +167 -50
  168. package/dist/multistream/mediaRequestManager.js.map +1 -1
  169. package/dist/multistream/receiveSlot.js +58 -65
  170. package/dist/multistream/receiveSlot.js.map +1 -1
  171. package/dist/multistream/receiveSlotManager.js +74 -93
  172. package/dist/multistream/receiveSlotManager.js.map +1 -1
  173. package/dist/multistream/remoteMedia.js +55 -74
  174. package/dist/multistream/remoteMedia.js.map +1 -1
  175. package/dist/multistream/remoteMediaGroup.js +6 -40
  176. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  177. package/dist/multistream/remoteMediaManager.js +466 -442
  178. package/dist/multistream/remoteMediaManager.js.map +1 -1
  179. package/dist/networkQualityMonitor/index.js +32 -59
  180. package/dist/networkQualityMonitor/index.js.map +1 -1
  181. package/dist/personal-meeting-room/index.js +10 -45
  182. package/dist/personal-meeting-room/index.js.map +1 -1
  183. package/dist/personal-meeting-room/request.js +2 -33
  184. package/dist/personal-meeting-room/request.js.map +1 -1
  185. package/dist/personal-meeting-room/util.js +0 -13
  186. package/dist/personal-meeting-room/util.js.map +1 -1
  187. package/dist/reachability/index.js +190 -199
  188. package/dist/reachability/index.js.map +1 -1
  189. package/dist/reachability/request.js +14 -23
  190. package/dist/reachability/request.js.map +1 -1
  191. package/dist/reactions/constants.js +13 -0
  192. package/dist/reactions/constants.js.map +1 -0
  193. package/dist/reactions/reactions.js +2 -4
  194. package/dist/reactions/reactions.js.map +1 -1
  195. package/dist/reactions/reactions.type.js +19 -23
  196. package/dist/reactions/reactions.type.js.map +1 -1
  197. package/dist/reconnection-manager/index.js +326 -465
  198. package/dist/reconnection-manager/index.js.map +1 -1
  199. package/dist/recording-controller/enums.js +17 -0
  200. package/dist/recording-controller/enums.js.map +1 -0
  201. package/dist/recording-controller/index.js +343 -0
  202. package/dist/recording-controller/index.js.map +1 -0
  203. package/dist/recording-controller/util.js +63 -0
  204. package/dist/recording-controller/util.js.map +1 -0
  205. package/dist/roap/index.js +38 -67
  206. package/dist/roap/index.js.map +1 -1
  207. package/dist/roap/request.js +143 -134
  208. package/dist/roap/request.js.map +1 -1
  209. package/dist/roap/turnDiscovery.js +149 -101
  210. package/dist/roap/turnDiscovery.js.map +1 -1
  211. package/dist/statsAnalyzer/global.js +1 -95
  212. package/dist/statsAnalyzer/global.js.map +1 -1
  213. package/dist/statsAnalyzer/index.js +369 -461
  214. package/dist/statsAnalyzer/index.js.map +1 -1
  215. package/dist/statsAnalyzer/mqaUtil.js +144 -94
  216. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  217. package/dist/transcription/index.js +13 -45
  218. package/dist/transcription/index.js.map +1 -1
  219. package/dist/types/annotation/annotation.types.d.ts +34 -0
  220. package/dist/types/annotation/constants.d.ts +31 -0
  221. package/dist/types/annotation/index.d.ts +124 -0
  222. package/dist/types/breakouts/breakout.d.ts +8 -0
  223. package/dist/types/breakouts/collection.d.ts +5 -0
  224. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  225. package/dist/types/breakouts/events.d.ts +2 -0
  226. package/dist/types/breakouts/index.d.ts +5 -0
  227. package/dist/types/breakouts/request.d.ts +22 -0
  228. package/dist/types/breakouts/utils.d.ts +15 -0
  229. package/dist/types/common/browser-detection.d.ts +9 -0
  230. package/dist/types/common/collection.d.ts +48 -0
  231. package/dist/types/common/config.d.ts +2 -0
  232. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  233. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  234. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  235. package/dist/types/common/errors/media.d.ts +15 -0
  236. package/dist/types/common/errors/parameter.d.ts +15 -0
  237. package/dist/types/common/errors/password-error.d.ts +15 -0
  238. package/dist/types/common/errors/permission.d.ts +14 -0
  239. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  240. package/dist/types/common/errors/reconnection.d.ts +15 -0
  241. package/dist/types/common/errors/stats.d.ts +15 -0
  242. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  243. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  244. package/dist/types/common/events/events-scope.d.ts +17 -0
  245. package/dist/types/common/events/events.d.ts +12 -0
  246. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  247. package/dist/types/common/events/util.d.ts +2 -0
  248. package/dist/types/common/logs/logger-config.d.ts +2 -0
  249. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  250. package/dist/types/common/logs/request.d.ts +34 -0
  251. package/dist/types/common/queue.d.ts +32 -0
  252. package/dist/types/config.d.ts +78 -0
  253. package/dist/types/constants.d.ts +984 -0
  254. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  255. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  256. package/dist/types/controls-options-manager/index.d.ts +136 -0
  257. package/dist/types/controls-options-manager/types.d.ts +43 -0
  258. package/dist/types/controls-options-manager/util.d.ts +1 -0
  259. package/dist/types/index.d.ts +7 -0
  260. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  261. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  262. package/dist/types/locus-info/fullState.d.ts +2 -0
  263. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  264. package/dist/types/locus-info/index.d.ts +315 -0
  265. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  266. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  267. package/dist/types/locus-info/parser.d.ts +212 -0
  268. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  269. package/dist/types/media/index.d.ts +34 -0
  270. package/dist/types/media/properties.d.ts +108 -0
  271. package/dist/types/media/util.d.ts +2 -0
  272. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  273. package/dist/types/meeting/in-meeting-actions.d.ts +137 -0
  274. package/dist/types/meeting/index.d.ts +1753 -0
  275. package/dist/types/meeting/muteState.d.ts +185 -0
  276. package/dist/types/meeting/request.d.ts +275 -0
  277. package/dist/types/meeting/request.type.d.ts +11 -0
  278. package/dist/types/meeting/state.d.ts +9 -0
  279. package/dist/types/meeting/util.d.ts +2 -0
  280. package/dist/types/meeting-info/collection.d.ts +20 -0
  281. package/dist/types/meeting-info/index.d.ts +57 -0
  282. package/dist/types/meeting-info/meeting-info-v2.d.ts +115 -0
  283. package/dist/types/meeting-info/request.d.ts +22 -0
  284. package/dist/types/meeting-info/util.d.ts +2 -0
  285. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  286. package/dist/types/meetings/collection.d.ts +31 -0
  287. package/dist/types/meetings/index.d.ts +345 -0
  288. package/dist/types/meetings/request.d.ts +27 -0
  289. package/dist/types/meetings/util.d.ts +18 -0
  290. package/dist/types/member/index.d.ts +157 -0
  291. package/dist/types/member/types.d.ts +21 -0
  292. package/dist/types/member/util.d.ts +2 -0
  293. package/dist/types/members/collection.d.ts +29 -0
  294. package/dist/types/members/index.d.ts +353 -0
  295. package/dist/types/members/request.d.ts +69 -0
  296. package/dist/types/members/types.d.ts +24 -0
  297. package/dist/types/members/util.d.ts +2 -0
  298. package/dist/types/metrics/config.d.ts +195 -0
  299. package/dist/types/metrics/constants.d.ts +54 -0
  300. package/dist/types/metrics/index.d.ts +169 -0
  301. package/dist/types/multistream/mediaRequestManager.d.ts +101 -0
  302. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  303. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  304. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  305. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  306. package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
  307. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  308. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  309. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  310. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  311. package/dist/types/reachability/index.d.ts +152 -0
  312. package/dist/types/reachability/request.d.ts +37 -0
  313. package/dist/types/reactions/constants.d.ts +3 -0
  314. package/dist/types/reactions/reactions.d.ts +4 -0
  315. package/dist/types/reactions/reactions.type.d.ts +52 -0
  316. package/dist/types/reconnection-manager/index.d.ts +126 -0
  317. package/dist/types/recording-controller/enums.d.ts +7 -0
  318. package/dist/types/recording-controller/index.d.ts +193 -0
  319. package/dist/types/recording-controller/util.d.ts +13 -0
  320. package/dist/types/roap/index.d.ts +77 -0
  321. package/dist/types/roap/request.d.ts +38 -0
  322. package/dist/types/roap/turnDiscovery.d.ts +88 -0
  323. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  324. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  325. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  326. package/dist/types/transcription/index.d.ts +64 -0
  327. package/internal-README.md +7 -6
  328. package/package.json +28 -21
  329. package/src/annotation/annotation.types.ts +41 -0
  330. package/src/annotation/constants.ts +36 -0
  331. package/src/annotation/index.ts +339 -0
  332. package/src/breakouts/README.md +220 -0
  333. package/src/breakouts/breakout.ts +141 -0
  334. package/src/breakouts/collection.ts +19 -0
  335. package/src/breakouts/edit-lock-error.ts +25 -0
  336. package/src/breakouts/events.ts +37 -0
  337. package/src/breakouts/index.ts +835 -0
  338. package/src/breakouts/request.ts +55 -0
  339. package/src/breakouts/utils.ts +57 -0
  340. package/src/common/browser-detection.ts +9 -6
  341. package/src/common/collection.ts +3 -1
  342. package/src/common/errors/captcha-error.ts +6 -6
  343. package/src/common/errors/intent-to-join.ts +6 -6
  344. package/src/common/errors/join-meeting.ts +12 -8
  345. package/src/common/errors/media.ts +6 -6
  346. package/src/common/errors/parameter.ts +9 -6
  347. package/src/common/errors/password-error.ts +6 -6
  348. package/src/common/errors/permission.ts +5 -5
  349. package/src/common/errors/reconnection.ts +6 -6
  350. package/src/common/errors/stats.ts +6 -6
  351. package/src/common/errors/webex-errors.ts +7 -5
  352. package/src/common/errors/webex-meetings-error.ts +1 -1
  353. package/src/common/events/events-scope.ts +5 -1
  354. package/src/common/events/events.ts +5 -1
  355. package/src/common/events/trigger-proxy.ts +8 -3
  356. package/src/common/events/util.ts +1 -2
  357. package/src/common/logs/logger-proxy.ts +21 -10
  358. package/src/common/logs/request.ts +11 -8
  359. package/src/config.ts +16 -12
  360. package/src/constants.ts +141 -6
  361. package/src/controls-options-manager/constants.ts +5 -0
  362. package/src/controls-options-manager/enums.ts +18 -0
  363. package/src/controls-options-manager/index.ts +278 -0
  364. package/src/controls-options-manager/types.ts +59 -0
  365. package/src/controls-options-manager/util.ts +274 -0
  366. package/src/index.ts +33 -0
  367. package/src/locus-info/controlsUtils.ts +145 -24
  368. package/src/locus-info/fullState.ts +15 -11
  369. package/src/locus-info/hostUtils.ts +4 -3
  370. package/src/locus-info/index.ts +326 -55
  371. package/src/locus-info/infoUtils.ts +12 -4
  372. package/src/locus-info/mediaSharesUtils.ts +4 -4
  373. package/src/locus-info/parser.ts +46 -68
  374. package/src/locus-info/selfUtils.ts +187 -56
  375. package/src/media/index.ts +142 -172
  376. package/src/media/properties.ts +43 -36
  377. package/src/media/util.ts +1 -1
  378. package/src/mediaQualityMetrics/config.ts +380 -378
  379. package/src/meeting/in-meeting-actions.ts +139 -3
  380. package/src/meeting/index.ts +2674 -1543
  381. package/src/meeting/muteState.ts +271 -68
  382. package/src/meeting/request.ts +231 -135
  383. package/src/meeting/request.type.ts +13 -0
  384. package/src/meeting/state.ts +45 -30
  385. package/src/meeting/util.ts +119 -110
  386. package/src/meeting-info/collection.ts +2 -1
  387. package/src/meeting-info/index.ts +32 -30
  388. package/src/meeting-info/meeting-info-v2.ts +201 -113
  389. package/src/meeting-info/request.ts +9 -3
  390. package/src/meeting-info/util.ts +54 -46
  391. package/src/meeting-info/utilv2.ts +70 -55
  392. package/src/meetings/collection.ts +21 -1
  393. package/src/meetings/index.ts +749 -437
  394. package/src/meetings/request.ts +29 -25
  395. package/src/meetings/util.ts +122 -33
  396. package/src/member/index.ts +95 -49
  397. package/src/member/types.ts +24 -0
  398. package/src/member/util.ts +106 -13
  399. package/src/members/collection.ts +8 -1
  400. package/src/members/index.ts +281 -129
  401. package/src/members/request.ts +87 -14
  402. package/src/members/types.ts +28 -0
  403. package/src/members/util.ts +140 -49
  404. package/src/metrics/config.ts +302 -90
  405. package/src/metrics/constants.ts +1 -6
  406. package/src/metrics/index.ts +124 -95
  407. package/src/multistream/mediaRequestManager.ts +203 -45
  408. package/src/multistream/receiveSlot.ts +69 -26
  409. package/src/multistream/receiveSlotManager.ts +62 -38
  410. package/src/multistream/remoteMedia.ts +30 -4
  411. package/src/multistream/remoteMediaGroup.ts +4 -3
  412. package/src/multistream/remoteMediaManager.ts +230 -66
  413. package/src/networkQualityMonitor/index.ts +24 -27
  414. package/src/personal-meeting-room/index.ts +12 -16
  415. package/src/personal-meeting-room/request.ts +10 -3
  416. package/src/personal-meeting-room/util.ts +3 -3
  417. package/src/reachability/index.ts +131 -79
  418. package/src/reachability/request.ts +43 -34
  419. package/src/reactions/constants.ts +4 -0
  420. package/src/reactions/reactions.ts +8 -8
  421. package/src/reactions/reactions.type.ts +31 -5
  422. package/src/reconnection-manager/index.ts +193 -111
  423. package/src/recording-controller/enums.ts +8 -0
  424. package/src/recording-controller/index.ts +315 -0
  425. package/src/recording-controller/util.ts +58 -0
  426. package/src/roap/index.ts +63 -51
  427. package/src/roap/request.ts +86 -53
  428. package/src/roap/turnDiscovery.ts +105 -46
  429. package/src/statsAnalyzer/global.ts +8 -104
  430. package/src/statsAnalyzer/index.ts +624 -376
  431. package/src/statsAnalyzer/mqaUtil.ts +203 -90
  432. package/src/transcription/index.ts +34 -32
  433. package/test/integration/spec/converged-space-meetings.js +177 -0
  434. package/test/integration/spec/journey.js +670 -466
  435. package/test/integration/spec/space-meeting.js +320 -204
  436. package/test/integration/spec/transcription.js +7 -8
  437. package/test/unit/spec/annotation/index.ts +435 -0
  438. package/test/unit/spec/breakouts/breakout.ts +184 -0
  439. package/test/unit/spec/breakouts/collection.ts +15 -0
  440. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  441. package/test/unit/spec/breakouts/events.ts +77 -0
  442. package/test/unit/spec/breakouts/index.ts +1542 -0
  443. package/test/unit/spec/breakouts/request.ts +104 -0
  444. package/test/unit/spec/breakouts/utils.js +72 -0
  445. package/test/unit/spec/common/browser-detection.js +9 -28
  446. package/test/unit/spec/controls-options-manager/index.js +287 -0
  447. package/test/unit/spec/controls-options-manager/util.js +504 -0
  448. package/test/unit/spec/fixture/locus.js +93 -90
  449. package/test/unit/spec/locus-info/controlsUtils.js +289 -32
  450. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  451. package/test/unit/spec/locus-info/index.js +585 -5
  452. package/test/unit/spec/locus-info/infoUtils.js +26 -33
  453. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  454. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  455. package/test/unit/spec/locus-info/parser.js +3 -9
  456. package/test/unit/spec/locus-info/selfConstant.js +110 -103
  457. package/test/unit/spec/locus-info/selfUtils.js +236 -12
  458. package/test/unit/spec/media/index.ts +104 -8
  459. package/test/unit/spec/media/properties.ts +9 -9
  460. package/test/unit/spec/meeting/in-meeting-actions.ts +66 -3
  461. package/test/unit/spec/meeting/index.js +2934 -946
  462. package/test/unit/spec/meeting/muteState.js +368 -70
  463. package/test/unit/spec/meeting/request.js +194 -44
  464. package/test/unit/spec/meeting/utils.js +146 -165
  465. package/test/unit/spec/meeting-info/meetinginfov2.js +333 -74
  466. package/test/unit/spec/meeting-info/request.js +7 -9
  467. package/test/unit/spec/meeting-info/util.js +11 -12
  468. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  469. package/test/unit/spec/meetings/collection.js +15 -1
  470. package/test/unit/spec/meetings/index.js +1052 -329
  471. package/test/unit/spec/meetings/utils.js +163 -14
  472. package/test/unit/spec/member/index.js +24 -1
  473. package/test/unit/spec/member/util.js +383 -32
  474. package/test/unit/spec/members/index.js +402 -54
  475. package/test/unit/spec/members/request.js +76 -20
  476. package/test/unit/spec/members/utils.js +191 -4
  477. package/test/unit/spec/metrics/index.js +104 -20
  478. package/test/unit/spec/multistream/mediaRequestManager.ts +650 -105
  479. package/test/unit/spec/multistream/receiveSlot.ts +76 -17
  480. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  481. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  482. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  483. package/test/unit/spec/multistream/remoteMediaManager.ts +549 -65
  484. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  485. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  486. package/test/unit/spec/reachability/index.ts +176 -27
  487. package/test/unit/spec/reachability/request.js +66 -0
  488. package/test/unit/spec/reconnection-manager/index.js +62 -31
  489. package/test/unit/spec/recording-controller/index.js +231 -0
  490. package/test/unit/spec/recording-controller/util.js +102 -0
  491. package/test/unit/spec/roap/index.ts +21 -16
  492. package/test/unit/spec/roap/request.ts +217 -0
  493. package/test/unit/spec/roap/turnDiscovery.ts +93 -49
  494. package/test/unit/spec/stats-analyzer/index.js +116 -60
  495. package/test/utils/cmr.js +44 -42
  496. package/test/utils/constants.js +9 -0
  497. package/test/utils/integrationTestUtils.js +64 -0
  498. package/test/utils/testUtils.js +63 -99
  499. package/test/utils/webex-config.js +22 -18
  500. package/test/utils/webex-test-users.js +57 -50
  501. package/tsconfig.json +6 -0
  502. package/dist/media/internal-media-core-wrapper.js +0 -22
  503. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  504. package/dist/meeting/effectsState.js +0 -334
  505. package/dist/meeting/effectsState.js.map +0 -1
  506. package/dist/multistream/multistreamMedia.js +0 -116
  507. package/dist/multistream/multistreamMedia.js.map +0 -1
  508. package/src/index.js +0 -15
  509. package/src/media/internal-media-core-wrapper.ts +0 -9
  510. package/src/meeting/effectsState.ts +0 -211
  511. package/src/multistream/multistreamMedia.ts +0 -92
  512. package/test/unit/spec/meeting/effectsState.js +0 -291
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable require-jsdoc */
2
2
  import EventEmitter from 'events';
3
3
 
4
- import {MediaConnection as MC} from '@webex/internal-media-core';
4
+ import {MediaType, ReceiveSlotEvents as WcmeReceiveSlotEvents} from '@webex/internal-media-core';
5
5
  import {ReceiveSlot, ReceiveSlotEvents} from '@webex/plugin-meetings/src/multistream/receiveSlot';
6
6
  import sinon from 'sinon';
7
7
  import {assert} from '@webex/test-helper-chai';
@@ -9,6 +9,8 @@ import {assert} from '@webex/test-helper-chai';
9
9
  class FakeWcmeSlot extends EventEmitter {
10
10
  public stream;
11
11
 
12
+ public id = 'fake id';
13
+
12
14
  constructor(stream) {
13
15
  super();
14
16
  this.stream = stream;
@@ -25,9 +27,15 @@ describe('ReceiveSlot', () => {
25
27
  fakeStream = {id: 'fake stream'};
26
28
  fakeWcmeSlot = new FakeWcmeSlot(fakeStream);
27
29
  findMemberIdCallbackStub = sinon.stub();
28
- receiveSlot = new ReceiveSlot(MC.MediaType.VideoMain, fakeWcmeSlot, findMemberIdCallbackStub);
30
+ receiveSlot = new ReceiveSlot(MediaType.VideoMain, fakeWcmeSlot, findMemberIdCallbackStub);
29
31
  });
30
32
 
33
+ describe('logString', () => {
34
+ it('has a log string', () => {
35
+ assert.equal(receiveSlot.logString, `ReceiveSlot - ${receiveSlot.id}: "fake id"`);
36
+ });
37
+ })
38
+
31
39
  describe('forwards events from underlying wcme receive slot', () => {
32
40
  it('forwards SourceUpdate', () => {
33
41
  let eventEmitted = false;
@@ -43,7 +51,7 @@ describe('ReceiveSlot', () => {
43
51
  eventData = data;
44
52
  });
45
53
 
46
- fakeWcmeSlot.emit(MC.ReceiveSlotEvents.SourceUpdate, 'live', csi);
54
+ fakeWcmeSlot.emit(WcmeReceiveSlotEvents.SourceUpdate, 'live', csi);
47
55
 
48
56
  assert.strictEqual(eventEmitted, true);
49
57
  assert.deepEqual(eventData, {
@@ -58,7 +66,7 @@ describe('ReceiveSlot', () => {
58
66
 
59
67
  it('has public properties', () => {
60
68
  assert.strictEqual(receiveSlot.id, 'r1');
61
- assert.strictEqual(receiveSlot.mediaType, MC.MediaType.VideoMain);
69
+ assert.strictEqual(receiveSlot.mediaType, MediaType.VideoMain);
62
70
  });
63
71
 
64
72
  it("exposes underlying wcme receive slot's properties", () => {
@@ -76,29 +84,80 @@ describe('ReceiveSlot', () => {
76
84
 
77
85
  findMemberIdCallbackStub.returns(fakeMemberId);
78
86
 
79
- fakeWcmeSlot.emit(MC.ReceiveSlotEvents.SourceUpdate, 'live', csi);
87
+ fakeWcmeSlot.emit(WcmeReceiveSlotEvents.SourceUpdate, 'live', csi);
80
88
 
81
89
  assert.strictEqual(receiveSlot.memberId, fakeMemberId);
82
90
  assert.strictEqual(receiveSlot.csi, csi);
83
91
  assert.strictEqual(receiveSlot.sourceState, 'live');
84
92
  });
85
93
 
86
- it('resets source related properties when resetSourceState() is called', () => {
87
- const csi = 123456;
88
- const fakeMemberId = '00000001-5555-6666-9012-345678901234';
94
+ describe('findMemberId()', () => {
95
+ it('doesn\'t do anything if csi is not set', () => {
96
+ // by default the receiveSlot does not have any csi or member id
97
+ receiveSlot.findMemberId();
89
98
 
90
- findMemberIdCallbackStub.returns(fakeMemberId);
99
+ assert.notCalled(findMemberIdCallbackStub);
100
+ });
91
101
 
92
- fakeWcmeSlot.emit(MC.ReceiveSlotEvents.SourceUpdate, 'live', csi);
102
+ it('finds a member id if member id is undefined and CSI is known', () => {
103
+ let emittedSourceUpdateEvent = null;
93
104
 
94
- assert.strictEqual(receiveSlot.memberId, fakeMemberId);
95
- assert.strictEqual(receiveSlot.csi, csi);
96
- assert.strictEqual(receiveSlot.sourceState, 'live');
105
+ // setup receiveSlot to have a csi without a member id
106
+ const csi = 12345;
107
+ const fakeMemberId = 'aaa-bbb-ccc-ddd';
108
+ fakeWcmeSlot.emit(WcmeReceiveSlotEvents.SourceUpdate, 'live', csi);
109
+ findMemberIdCallbackStub.reset();
110
+ findMemberIdCallbackStub.returns(fakeMemberId);
97
111
 
98
- receiveSlot.resetSourceState();
112
+ receiveSlot.on(ReceiveSlotEvents.SourceUpdate, (data) => {
113
+ emittedSourceUpdateEvent = data;
114
+ });
99
115
 
100
- assert.strictEqual(receiveSlot.memberId, undefined);
101
- assert.strictEqual(receiveSlot.csi, undefined);
102
- assert.strictEqual(receiveSlot.sourceState, 'no source');
116
+ receiveSlot.findMemberId();
117
+
118
+ assert.calledOnce(findMemberIdCallbackStub);
119
+ assert.calledWith(findMemberIdCallbackStub, csi);
120
+
121
+ assert.deepEqual(emittedSourceUpdateEvent, {
122
+ state: 'live',
123
+ csi,
124
+ memberId: fakeMemberId,
125
+ });
126
+
127
+ });
128
+
129
+ it('doesn\'t do anything if member id already set', () => {
130
+ // setup receiveSlot to have a csi and a member id
131
+ const csi = 12345;
132
+ const memberId = '12345678-1234-5678-9012-345678901234';
133
+
134
+ findMemberIdCallbackStub.returns(memberId);
135
+
136
+ fakeWcmeSlot.emit(WcmeReceiveSlotEvents.SourceUpdate, 'live', csi);
137
+ findMemberIdCallbackStub.reset();
138
+
139
+ receiveSlot.findMemberId();
140
+
141
+ assert.notCalled(findMemberIdCallbackStub);
142
+ });
143
+ });
144
+
145
+ describe('setMaxFs()', () => {
146
+ it('emits the correct event', () => {
147
+ sinon.stub(receiveSlot, 'emit');
148
+ receiveSlot.setMaxFs(100);
149
+
150
+ assert.calledOnceWithExactly(
151
+ receiveSlot.emit,
152
+ {
153
+ file: 'meeting/receiveSlot',
154
+ function: 'findMemberId',
155
+ },
156
+ ReceiveSlotEvents.MaxFsUpdate,
157
+ {
158
+ maxFs: 100,
159
+ }
160
+ );
161
+ })
103
162
  });
104
163
  });
@@ -1,35 +1,29 @@
1
1
  import sinon from 'sinon';
2
2
  import {assert} from '@webex/test-helper-chai';
3
- import {MediaConnection as MC} from '@webex/internal-media-core';
3
+ import {MediaType} from '@webex/internal-media-core';
4
+ import {ReceiveSlot} from '@webex/plugin-meetings/src/multistream/receiveSlot';
4
5
  import {ReceiveSlotManager} from '@webex/plugin-meetings/src/multistream/receiveSlotManager';
5
6
  import * as ReceiveSlotModule from '@webex/plugin-meetings/src/multistream/receiveSlot';
6
7
 
7
8
  describe('ReceiveSlotManager', () => {
8
- let fakeMeeting;
9
9
  let fakeWcmeSlot;
10
10
  let fakeReceiveSlots;
11
11
  let mockReceiveSlotCtor;
12
12
  let receiveSlotManager;
13
+ let createSlotCallbackStub;
14
+ let findMemberIdCallbackStub;
13
15
 
14
16
  beforeEach(() => {
15
17
  fakeWcmeSlot = {
16
- id: 'fake wcme slot',
17
- };
18
- fakeMeeting = {
19
- mediaProperties: {
20
- webrtcMediaConnection: {
21
- createReceiveSlot: sinon.stub().resolves(fakeWcmeSlot),
22
- },
23
- },
24
- members: {
25
- findMemberByCsi: sinon.stub(),
26
- },
18
+ id: {ssrc: 1},
27
19
  };
28
20
  fakeReceiveSlots = [];
29
21
  mockReceiveSlotCtor = sinon.stub(ReceiveSlotModule, 'ReceiveSlot').callsFake((mediaType) => {
30
22
  const fakeReceiveSlot = {
31
23
  id: `fake sdk receive slot ${fakeReceiveSlots.length + 1}`,
32
24
  mediaType,
25
+ findMemberId: sinon.stub(),
26
+ wcmeReceiveSlot: fakeWcmeSlot,
33
27
  };
34
28
 
35
29
  fakeReceiveSlots.push(fakeReceiveSlot);
@@ -37,7 +31,10 @@ describe('ReceiveSlotManager', () => {
37
31
  return fakeReceiveSlot;
38
32
  });
39
33
 
40
- receiveSlotManager = new ReceiveSlotManager(fakeMeeting);
34
+ createSlotCallbackStub = sinon.stub().resolves(fakeWcmeSlot);
35
+ findMemberIdCallbackStub = sinon.stub();
36
+
37
+ receiveSlotManager = new ReceiveSlotManager(createSlotCallbackStub, findMemberIdCallbackStub);
41
38
  });
42
39
 
43
40
  afterEach(() => {
@@ -45,10 +42,10 @@ describe('ReceiveSlotManager', () => {
45
42
  });
46
43
 
47
44
  it('rejects if there is no media connection', async () => {
48
- fakeMeeting.mediaProperties.webrtcMediaConnection = null;
45
+ createSlotCallbackStub.rejects(new Error('Webrtc media connection is missing'));
49
46
 
50
47
  assert.isRejected(
51
- receiveSlotManager.allocateSlot(MC.MediaType.VideoMain),
48
+ receiveSlotManager.allocateSlot(MediaType.VideoMain),
52
49
  'Webrtc media connection is missing'
53
50
  );
54
51
  });
@@ -56,16 +53,16 @@ describe('ReceiveSlotManager', () => {
56
53
  it('allocates a slot when allocateSlot() is called and there are no free slots', async () => {
57
54
  assert.deepEqual(receiveSlotManager.getStats(), {numAllocatedSlots: {}, numFreeSlots: {}});
58
55
 
59
- const slot = await receiveSlotManager.allocateSlot(MC.MediaType.VideoMain);
56
+ const slot = await receiveSlotManager.allocateSlot(MediaType.VideoMain);
60
57
 
61
- assert.calledOnce(fakeMeeting.mediaProperties.webrtcMediaConnection.createReceiveSlot);
58
+ assert.calledOnce(createSlotCallbackStub);
62
59
  assert.calledWith(
63
- fakeMeeting.mediaProperties.webrtcMediaConnection.createReceiveSlot,
64
- MC.MediaType.VideoMain
60
+ createSlotCallbackStub,
61
+ MediaType.VideoMain
65
62
  );
66
63
 
67
64
  assert.calledOnce(mockReceiveSlotCtor);
68
- assert.calledWith(mockReceiveSlotCtor, MC.MediaType.VideoMain, fakeWcmeSlot, sinon.match.func);
65
+ assert.calledWith(mockReceiveSlotCtor, MediaType.VideoMain, fakeWcmeSlot, findMemberIdCallbackStub);
69
66
  assert.strictEqual(slot, fakeReceiveSlots[0]);
70
67
 
71
68
  assert.deepEqual(receiveSlotManager.getStats(), {
@@ -75,9 +72,9 @@ describe('ReceiveSlotManager', () => {
75
72
  });
76
73
 
77
74
  it('reuses previously freed slot when allocateSlot() is called and a free slot is available', async () => {
78
- const slot1 = await receiveSlotManager.allocateSlot(MC.MediaType.VideoMain);
75
+ const slot1 = await receiveSlotManager.allocateSlot(MediaType.VideoMain);
79
76
 
80
- assert.calledOnce(fakeMeeting.mediaProperties.webrtcMediaConnection.createReceiveSlot);
77
+ assert.calledOnce(createSlotCallbackStub);
81
78
  assert.calledOnce(mockReceiveSlotCtor);
82
79
  assert.strictEqual(slot1, fakeReceiveSlots[0]);
83
80
 
@@ -89,13 +86,13 @@ describe('ReceiveSlotManager', () => {
89
86
  numFreeSlots: {'VIDEO-MAIN': 1},
90
87
  });
91
88
 
92
- fakeMeeting.mediaProperties.webrtcMediaConnection.createReceiveSlot.resetHistory();
89
+ createSlotCallbackStub.resetHistory();
93
90
  mockReceiveSlotCtor.resetHistory();
94
91
 
95
92
  // allocate another slot, this time the previous one should be returned instead of allocating any new ones
96
- const slot2 = await receiveSlotManager.allocateSlot(MC.MediaType.VideoMain);
93
+ const slot2 = await receiveSlotManager.allocateSlot(MediaType.VideoMain);
97
94
 
98
- assert.notCalled(fakeMeeting.mediaProperties.webrtcMediaConnection.createReceiveSlot);
95
+ assert.notCalled(createSlotCallbackStub);
99
96
  assert.notCalled(mockReceiveSlotCtor);
100
97
 
101
98
  // verify that in fact we got the same slot again
@@ -108,9 +105,9 @@ describe('ReceiveSlotManager', () => {
108
105
  });
109
106
 
110
107
  it('does not reuse any slots after reset() is called', async () => {
111
- const slot1 = await receiveSlotManager.allocateSlot(MC.MediaType.VideoMain);
108
+ const slot1 = await receiveSlotManager.allocateSlot(MediaType.VideoMain);
112
109
 
113
- assert.calledOnce(fakeMeeting.mediaProperties.webrtcMediaConnection.createReceiveSlot);
110
+ assert.calledOnce(createSlotCallbackStub);
114
111
  assert.calledOnce(mockReceiveSlotCtor);
115
112
  assert.strictEqual(slot1, fakeReceiveSlots[0]);
116
113
 
@@ -119,15 +116,15 @@ describe('ReceiveSlotManager', () => {
119
116
  receiveSlotManager.reset();
120
117
 
121
118
  // reset the mocks and set the ReceiveSlot constructor to return a different slot
122
- fakeMeeting.mediaProperties.webrtcMediaConnection.createReceiveSlot.resetHistory();
119
+ createSlotCallbackStub.resetHistory();
123
120
  mockReceiveSlotCtor.resetHistory();
124
121
 
125
122
  assert.deepEqual(receiveSlotManager.getStats(), {numAllocatedSlots: {}, numFreeSlots: {}});
126
123
 
127
124
  // allocate another slot, because we called reset(), the old free slot should not be reused
128
- const slot2 = await receiveSlotManager.allocateSlot(MC.MediaType.VideoMain);
125
+ const slot2 = await receiveSlotManager.allocateSlot(MediaType.VideoMain);
129
126
 
130
- assert.calledOnce(fakeMeeting.mediaProperties.webrtcMediaConnection.createReceiveSlot);
127
+ assert.calledOnce(createSlotCallbackStub);
131
128
  assert.calledOnce(mockReceiveSlotCtor);
132
129
 
133
130
  // verify that in fact we got a brand new slot
@@ -140,27 +137,27 @@ describe('ReceiveSlotManager', () => {
140
137
  });
141
138
 
142
139
  it('does not reuse slots if they have different media type', async () => {
143
- const slot1 = await receiveSlotManager.allocateSlot(MC.MediaType.VideoMain);
140
+ const slot1 = await receiveSlotManager.allocateSlot(MediaType.VideoMain);
144
141
 
145
- assert.calledOnce(fakeMeeting.mediaProperties.webrtcMediaConnection.createReceiveSlot);
142
+ assert.calledOnce(createSlotCallbackStub);
146
143
  assert.calledOnce(mockReceiveSlotCtor);
147
144
 
148
145
  receiveSlotManager.releaseSlot(slot1);
149
146
 
150
- fakeMeeting.mediaProperties.webrtcMediaConnection.createReceiveSlot.resetHistory();
147
+ createSlotCallbackStub.resetHistory();
151
148
  mockReceiveSlotCtor.resetHistory();
152
149
 
153
150
  // allocate another slot, this time for main audio, so it should be a completely new slot
154
- const slot2 = await receiveSlotManager.allocateSlot(MC.MediaType.AudioMain);
151
+ const slot2 = await receiveSlotManager.allocateSlot(MediaType.AudioMain);
155
152
 
156
- assert.calledOnce(fakeMeeting.mediaProperties.webrtcMediaConnection.createReceiveSlot);
153
+ assert.calledOnce(createSlotCallbackStub);
157
154
  assert.calledWith(
158
- fakeMeeting.mediaProperties.webrtcMediaConnection.createReceiveSlot,
159
- MC.MediaType.AudioMain
155
+ createSlotCallbackStub,
156
+ MediaType.AudioMain
160
157
  );
161
158
 
162
159
  assert.calledOnce(mockReceiveSlotCtor);
163
- assert.calledWith(mockReceiveSlotCtor, MC.MediaType.AudioMain, fakeWcmeSlot, sinon.match.func);
160
+ assert.calledWith(mockReceiveSlotCtor, MediaType.AudioMain, fakeWcmeSlot, findMemberIdCallbackStub);
164
161
 
165
162
  // verify that in fact we got a brand new slot
166
163
  assert.strictEqual(slot2, fakeReceiveSlots[1]);
@@ -170,4 +167,37 @@ describe('ReceiveSlotManager', () => {
170
167
  numFreeSlots: {'VIDEO-MAIN': 1},
171
168
  });
172
169
  });
170
+
171
+ describe('updateMemberIds', () => {
172
+ it('calls findMemberId() on all allocated receive slots', async () => {
173
+ const audioSlots: ReceiveSlot[] = [];
174
+ const videoSlots: ReceiveSlot[] = [];
175
+
176
+ // allocate a bunch of receive slots
177
+ audioSlots.push(await receiveSlotManager.allocateSlot(MediaType.AudioMain));
178
+ audioSlots.push(await receiveSlotManager.allocateSlot(MediaType.AudioMain));
179
+ videoSlots.push(await receiveSlotManager.allocateSlot(MediaType.VideoMain));
180
+ videoSlots.push(await receiveSlotManager.allocateSlot(MediaType.VideoMain));
181
+ videoSlots.push(await receiveSlotManager.allocateSlot(MediaType.VideoMain));
182
+
183
+ receiveSlotManager.updateMemberIds();
184
+
185
+ assert.strictEqual(audioSlots.length, 2);
186
+ assert.strictEqual(videoSlots.length, 3);
187
+
188
+ assert.strictEqual(fakeReceiveSlots.length, audioSlots.length + videoSlots.length);
189
+
190
+ fakeReceiveSlots.forEach((slot) => {
191
+ assert.calledOnce(slot.findMemberId);
192
+ });
193
+ });
194
+ });
195
+
196
+ describe('findReceiveSlotBySsrc', () => {
197
+ it('finds a receive slot with a specific id', async () => {
198
+ await receiveSlotManager.allocateSlot(MediaType.VideoMain);
199
+ assert.exists(receiveSlotManager.findReceiveSlotBySsrc(1));
200
+ assert.strictEqual(receiveSlotManager.findReceiveSlotBySsrc(2), undefined);
201
+ });
202
+ });
173
203
  });
@@ -1,11 +1,12 @@
1
1
  /* eslint-disable require-jsdoc */
2
2
  import EventEmitter from 'events';
3
3
 
4
- import {MediaConnection as MC} from '@webex/internal-media-core';
4
+ import {MediaType} from '@webex/internal-media-core';
5
5
  import {RemoteMedia, RemoteMediaEvents} from '@webex/plugin-meetings/src/multistream/remoteMedia';
6
6
  import {ReceiveSlotEvents} from '@webex/plugin-meetings/src/multistream/receiveSlot';
7
7
  import sinon from 'sinon';
8
8
  import {assert} from '@webex/test-helper-chai';
9
+ import { forEach } from 'lodash';
9
10
 
10
11
  describe('RemoteMedia', () => {
11
12
  let remoteMedia;
@@ -16,11 +17,12 @@ describe('RemoteMedia', () => {
16
17
  beforeEach(() => {
17
18
  fakeStream = {id: 'fake stream'};
18
19
  fakeReceiveSlot = new EventEmitter();
19
- fakeReceiveSlot.mediaType = MC.MediaType.AudioMain;
20
+ fakeReceiveSlot.mediaType = MediaType.AudioMain;
20
21
  fakeReceiveSlot.memberId = '12345678';
21
22
  fakeReceiveSlot.csi = 999;
22
23
  fakeReceiveSlot.sourceState = 'avatar';
23
24
  fakeReceiveSlot.stream = fakeStream;
25
+ fakeReceiveSlot.setMaxFs = sinon.stub();
24
26
 
25
27
  fakeMediaRequestManager = {
26
28
  addRequest: sinon.stub(),
@@ -222,4 +224,32 @@ describe('RemoteMedia', () => {
222
224
  });
223
225
  });
224
226
  });
227
+
228
+ describe('setSizeHint()', () => {
229
+
230
+ it('works if the receive slot is undefined', () => {
231
+ remoteMedia.receiveSlot = undefined;
232
+ remoteMedia.setSizeHint(100, 100);
233
+ });
234
+
235
+ forEach(
236
+ [
237
+ {height: 134, fs: 60},
238
+ {height: 135, fs: 240},
239
+ {height: 269, fs: 240},
240
+ {height: 270, fs: 920},
241
+ {height: 539, fs: 920},
242
+ {height: 540, fs: 3600},
243
+ {height: 720, fs: 3600},
244
+ {height: 721, fs: 8192},
245
+ ],
246
+ ({height, fs}) => {
247
+ it(`sets the max fs to ${fs} correctly when height is ${height}`, () => {
248
+ remoteMedia.setSizeHint(100, height);
249
+
250
+ assert.calledOnceWithExactly(fakeReceiveSlot.setMaxFs, fs);
251
+ });
252
+ }
253
+ );
254
+ });
225
255
  });
@@ -1,6 +1,6 @@
1
1
  import EventEmitter from 'events';
2
2
 
3
- import {MediaConnection as MC} from '@webex/internal-media-core';
3
+ import {MediaType} from '@webex/internal-media-core';
4
4
  import {RemoteMediaGroup} from '@webex/plugin-meetings/src/multistream/remoteMediaGroup';
5
5
  import {RemoteMedia} from '@webex/plugin-meetings/src/multistream/remoteMedia';
6
6
  import {ReceiveSlot} from '@webex/plugin-meetings/src/multistream/receiveSlot';
@@ -8,11 +8,11 @@ import sinon from 'sinon';
8
8
  import {assert} from '@webex/test-helper-chai';
9
9
 
10
10
  class FakeSlot extends EventEmitter {
11
- public mediaType: MC.MediaType;
11
+ public mediaType: MediaType;
12
12
 
13
13
  public id: string;
14
14
 
15
- constructor(mediaType: MC.MediaType, id: string) {
15
+ constructor(mediaType: MediaType, id: string) {
16
16
  super();
17
17
  this.mediaType = mediaType;
18
18
  this.id = id;
@@ -49,7 +49,7 @@ describe('RemoteMediaGroup', () => {
49
49
 
50
50
  fakeReceiveSlots = Array(NUM_SLOTS)
51
51
  .fill(null)
52
- .map((_, index) => new FakeSlot(MC.MediaType.VideoMain, `fake receive slot ${index}`));
52
+ .map((_, index) => new FakeSlot(MediaType.VideoMain, `fake receive slot ${index}`));
53
53
  });
54
54
 
55
55
  const getLastActiveSpeakerRequestId = () =>
@@ -368,7 +368,7 @@ describe('RemoteMediaGroup', () => {
368
368
 
369
369
  const unpinnedRemoteMediaFromGroup = group.getRemoteMedia('all')[0];
370
370
  const otherRemoteMedia = new RemoteMedia(
371
- new FakeSlot(MC.MediaType.VideoMain, 'other slot') as unknown as ReceiveSlot,
371
+ new FakeSlot(MediaType.VideoMain, 'other slot') as unknown as ReceiveSlot,
372
372
  fakeMediaRequestManager
373
373
  );
374
374