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

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 (493) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/breakouts/breakout.js +137 -0
  4. package/dist/breakouts/breakout.js.map +1 -0
  5. package/dist/breakouts/collection.js +23 -0
  6. package/dist/breakouts/collection.js.map +1 -0
  7. package/dist/breakouts/index.js +374 -0
  8. package/dist/breakouts/index.js.map +1 -0
  9. package/dist/breakouts/request.js +78 -0
  10. package/dist/breakouts/request.js.map +1 -0
  11. package/dist/breakouts/utils.js +23 -0
  12. package/dist/breakouts/utils.js.map +1 -0
  13. package/dist/common/browser-detection.js +1 -20
  14. package/dist/common/browser-detection.js.map +1 -1
  15. package/dist/common/collection.js +5 -20
  16. package/dist/common/collection.js.map +1 -1
  17. package/dist/common/config.js +0 -7
  18. package/dist/common/config.js.map +1 -1
  19. package/dist/common/errors/captcha-error.js +10 -24
  20. package/dist/common/errors/captcha-error.js.map +1 -1
  21. package/dist/common/errors/intent-to-join.js +11 -24
  22. package/dist/common/errors/intent-to-join.js.map +1 -1
  23. package/dist/common/errors/join-meeting.js +12 -25
  24. package/dist/common/errors/join-meeting.js.map +1 -1
  25. package/dist/common/errors/media.js +10 -24
  26. package/dist/common/errors/media.js.map +1 -1
  27. package/dist/common/errors/parameter.js +5 -33
  28. package/dist/common/errors/parameter.js.map +1 -1
  29. package/dist/common/errors/password-error.js +10 -24
  30. package/dist/common/errors/password-error.js.map +1 -1
  31. package/dist/common/errors/permission.js +9 -23
  32. package/dist/common/errors/permission.js.map +1 -1
  33. package/dist/common/errors/reconnection-in-progress.js +0 -17
  34. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  35. package/dist/common/errors/reconnection.js +10 -24
  36. package/dist/common/errors/reconnection.js.map +1 -1
  37. package/dist/common/errors/stats.js +10 -24
  38. package/dist/common/errors/stats.js.map +1 -1
  39. package/dist/common/errors/webex-errors.js +6 -41
  40. package/dist/common/errors/webex-errors.js.map +1 -1
  41. package/dist/common/errors/webex-meetings-error.js +5 -25
  42. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  43. package/dist/common/events/events-scope.js +0 -22
  44. package/dist/common/events/events-scope.js.map +1 -1
  45. package/dist/common/events/events.js +0 -23
  46. package/dist/common/events/events.js.map +1 -1
  47. package/dist/common/events/trigger-proxy.js +0 -12
  48. package/dist/common/events/trigger-proxy.js.map +1 -1
  49. package/dist/common/events/util.js +0 -15
  50. package/dist/common/events/util.js.map +1 -1
  51. package/dist/common/logs/logger-config.js +0 -4
  52. package/dist/common/logs/logger-config.js.map +1 -1
  53. package/dist/common/logs/logger-proxy.js +1 -8
  54. package/dist/common/logs/logger-proxy.js.map +1 -1
  55. package/dist/common/logs/request.js +37 -60
  56. package/dist/common/logs/request.js.map +1 -1
  57. package/dist/common/queue.js +4 -14
  58. package/dist/common/queue.js.map +1 -1
  59. package/dist/config.js +6 -6
  60. package/dist/config.js.map +1 -1
  61. package/dist/constants.js +92 -49
  62. package/dist/constants.js.map +1 -1
  63. package/dist/controls-options-manager/constants.js +14 -0
  64. package/dist/controls-options-manager/constants.js.map +1 -0
  65. package/dist/controls-options-manager/enums.js +15 -0
  66. package/dist/controls-options-manager/enums.js.map +1 -0
  67. package/dist/controls-options-manager/index.js +203 -0
  68. package/dist/controls-options-manager/index.js.map +1 -0
  69. package/dist/controls-options-manager/util.js +28 -0
  70. package/dist/controls-options-manager/util.js.map +1 -0
  71. package/dist/index.js +4 -18
  72. package/dist/index.js.map +1 -1
  73. package/dist/locus-info/controlsUtils.js +12 -29
  74. package/dist/locus-info/controlsUtils.js.map +1 -1
  75. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  76. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  77. package/dist/locus-info/fullState.js +0 -15
  78. package/dist/locus-info/fullState.js.map +1 -1
  79. package/dist/locus-info/hostUtils.js +4 -12
  80. package/dist/locus-info/hostUtils.js.map +1 -1
  81. package/dist/locus-info/index.js +186 -192
  82. package/dist/locus-info/index.js.map +1 -1
  83. package/dist/locus-info/infoUtils.js +3 -37
  84. package/dist/locus-info/infoUtils.js.map +1 -1
  85. package/dist/locus-info/mediaSharesUtils.js +12 -38
  86. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  87. package/dist/locus-info/parser.js +92 -118
  88. package/dist/locus-info/parser.js.map +1 -1
  89. package/dist/locus-info/selfUtils.js +34 -91
  90. package/dist/locus-info/selfUtils.js.map +1 -1
  91. package/dist/media/index.js +64 -137
  92. package/dist/media/index.js.map +1 -1
  93. package/dist/media/properties.js +80 -114
  94. package/dist/media/properties.js.map +1 -1
  95. package/dist/media/util.js +2 -9
  96. package/dist/media/util.js.map +1 -1
  97. package/dist/mediaQualityMetrics/config.js +505 -495
  98. package/dist/mediaQualityMetrics/config.js.map +1 -1
  99. package/dist/meeting/effectsState.js +125 -190
  100. package/dist/meeting/effectsState.js.map +1 -1
  101. package/dist/meeting/in-meeting-actions.js +13 -14
  102. package/dist/meeting/in-meeting-actions.js.map +1 -1
  103. package/dist/meeting/index.js +2142 -2101
  104. package/dist/meeting/index.js.map +1 -1
  105. package/dist/meeting/muteState.js +39 -80
  106. package/dist/meeting/muteState.js.map +1 -1
  107. package/dist/meeting/request.js +224 -230
  108. package/dist/meeting/request.js.map +1 -1
  109. package/dist/meeting/request.type.js +7 -0
  110. package/dist/meeting/request.type.js.map +1 -0
  111. package/dist/meeting/state.js +21 -31
  112. package/dist/meeting/state.js.map +1 -1
  113. package/dist/meeting/util.js +43 -215
  114. package/dist/meeting/util.js.map +1 -1
  115. package/dist/meeting-info/collection.js +6 -25
  116. package/dist/meeting-info/collection.js.map +1 -1
  117. package/dist/meeting-info/index.js +14 -32
  118. package/dist/meeting-info/index.js.map +1 -1
  119. package/dist/meeting-info/meeting-info-v2.js +193 -268
  120. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  121. package/dist/meeting-info/request.js +3 -15
  122. package/dist/meeting-info/request.js.map +1 -1
  123. package/dist/meeting-info/util.js +98 -183
  124. package/dist/meeting-info/util.js.map +1 -1
  125. package/dist/meeting-info/utilv2.js +137 -228
  126. package/dist/meeting-info/utilv2.js.map +1 -1
  127. package/dist/meetings/collection.js +5 -20
  128. package/dist/meetings/collection.js.map +1 -1
  129. package/dist/meetings/index.js +490 -560
  130. package/dist/meetings/index.js.map +1 -1
  131. package/dist/meetings/request.js +24 -41
  132. package/dist/meetings/request.js.map +1 -1
  133. package/dist/meetings/util.js +116 -155
  134. package/dist/meetings/util.js.map +1 -1
  135. package/dist/member/index.js +78 -86
  136. package/dist/member/index.js.map +1 -1
  137. package/dist/member/util.js +31 -68
  138. package/dist/member/util.js.map +1 -1
  139. package/dist/members/collection.js +3 -12
  140. package/dist/members/collection.js.map +1 -1
  141. package/dist/members/index.js +94 -200
  142. package/dist/members/index.js.map +1 -1
  143. package/dist/members/request.js +16 -39
  144. package/dist/members/request.js.map +1 -1
  145. package/dist/members/util.js +9 -38
  146. package/dist/members/util.js.map +1 -1
  147. package/dist/metrics/config.js +0 -2
  148. package/dist/metrics/config.js.map +1 -1
  149. package/dist/metrics/constants.js +1 -2
  150. package/dist/metrics/constants.js.map +1 -1
  151. package/dist/metrics/index.js +55 -135
  152. package/dist/metrics/index.js.map +1 -1
  153. package/dist/multistream/mediaRequestManager.js +57 -33
  154. package/dist/multistream/mediaRequestManager.js.map +1 -1
  155. package/dist/multistream/receiveSlot.js +30 -50
  156. package/dist/multistream/receiveSlot.js.map +1 -1
  157. package/dist/multistream/receiveSlotManager.js +60 -82
  158. package/dist/multistream/receiveSlotManager.js.map +1 -1
  159. package/dist/multistream/remoteMedia.js +18 -58
  160. package/dist/multistream/remoteMedia.js.map +1 -1
  161. package/dist/multistream/remoteMediaGroup.js +6 -40
  162. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  163. package/dist/multistream/remoteMediaManager.js +360 -413
  164. package/dist/multistream/remoteMediaManager.js.map +1 -1
  165. package/dist/networkQualityMonitor/index.js +40 -59
  166. package/dist/networkQualityMonitor/index.js.map +1 -1
  167. package/dist/personal-meeting-room/index.js +21 -45
  168. package/dist/personal-meeting-room/index.js.map +1 -1
  169. package/dist/personal-meeting-room/request.js +1 -31
  170. package/dist/personal-meeting-room/request.js.map +1 -1
  171. package/dist/personal-meeting-room/util.js +0 -13
  172. package/dist/personal-meeting-room/util.js.map +1 -1
  173. package/dist/reachability/index.js +138 -182
  174. package/dist/reachability/index.js.map +1 -1
  175. package/dist/reachability/request.js +3 -18
  176. package/dist/reachability/request.js.map +1 -1
  177. package/dist/reactions/constants.js +13 -0
  178. package/dist/reactions/constants.js.map +1 -0
  179. package/dist/reactions/reactions.js +109 -0
  180. package/dist/reactions/reactions.js.map +1 -0
  181. package/dist/reactions/reactions.type.js +36 -0
  182. package/dist/reactions/reactions.type.js.map +1 -0
  183. package/dist/reconnection-manager/index.js +322 -455
  184. package/dist/reconnection-manager/index.js.map +1 -1
  185. package/dist/recording-controller/enums.js +17 -0
  186. package/dist/recording-controller/enums.js.map +1 -0
  187. package/dist/recording-controller/index.js +343 -0
  188. package/dist/recording-controller/index.js.map +1 -0
  189. package/dist/recording-controller/util.js +63 -0
  190. package/dist/recording-controller/util.js.map +1 -0
  191. package/dist/roap/index.js +39 -64
  192. package/dist/roap/index.js.map +1 -1
  193. package/dist/roap/request.js +94 -113
  194. package/dist/roap/request.js.map +1 -1
  195. package/dist/roap/turnDiscovery.js +85 -94
  196. package/dist/roap/turnDiscovery.js.map +1 -1
  197. package/dist/statsAnalyzer/global.js +1 -95
  198. package/dist/statsAnalyzer/global.js.map +1 -1
  199. package/dist/statsAnalyzer/index.js +357 -449
  200. package/dist/statsAnalyzer/index.js.map +1 -1
  201. package/dist/statsAnalyzer/mqaUtil.js +137 -81
  202. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  203. package/dist/transcription/index.js +22 -47
  204. package/dist/transcription/index.js.map +1 -1
  205. package/dist/types/breakouts/breakout.d.ts +8 -0
  206. package/dist/types/breakouts/collection.d.ts +5 -0
  207. package/dist/types/breakouts/index.d.ts +5 -0
  208. package/dist/types/breakouts/request.d.ts +22 -0
  209. package/dist/types/breakouts/utils.d.ts +1 -0
  210. package/dist/types/common/browser-detection.d.ts +9 -0
  211. package/dist/types/common/collection.d.ts +48 -0
  212. package/dist/types/common/config.d.ts +2 -0
  213. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  214. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  215. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  216. package/dist/types/common/errors/media.d.ts +15 -0
  217. package/dist/types/common/errors/parameter.d.ts +15 -0
  218. package/dist/types/common/errors/password-error.d.ts +15 -0
  219. package/dist/types/common/errors/permission.d.ts +14 -0
  220. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  221. package/dist/types/common/errors/reconnection.d.ts +15 -0
  222. package/dist/types/common/errors/stats.d.ts +15 -0
  223. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  224. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  225. package/dist/types/common/events/events-scope.d.ts +17 -0
  226. package/dist/types/common/events/events.d.ts +12 -0
  227. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  228. package/dist/types/common/events/util.d.ts +2 -0
  229. package/dist/types/common/logs/logger-config.d.ts +2 -0
  230. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  231. package/dist/types/common/logs/request.d.ts +34 -0
  232. package/dist/types/common/queue.d.ts +32 -0
  233. package/dist/types/config.d.ts +77 -0
  234. package/dist/types/constants.d.ts +899 -0
  235. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  236. package/dist/types/controls-options-manager/enums.d.ts +5 -0
  237. package/dist/types/controls-options-manager/index.d.ts +120 -0
  238. package/dist/types/controls-options-manager/util.d.ts +7 -0
  239. package/dist/types/index.d.ts +5 -0
  240. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  241. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  242. package/dist/types/locus-info/fullState.d.ts +2 -0
  243. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  244. package/dist/types/locus-info/index.d.ts +269 -0
  245. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  246. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  247. package/dist/types/locus-info/parser.d.ts +212 -0
  248. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  249. package/dist/types/media/index.d.ts +32 -0
  250. package/dist/types/media/properties.d.ts +107 -0
  251. package/dist/types/media/util.d.ts +2 -0
  252. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  253. package/dist/types/meeting/effectsState.d.ts +42 -0
  254. package/dist/types/meeting/in-meeting-actions.d.ts +83 -0
  255. package/dist/types/meeting/index.d.ts +1724 -0
  256. package/dist/types/meeting/muteState.d.ts +108 -0
  257. package/dist/types/meeting/request.d.ts +261 -0
  258. package/dist/types/meeting/request.type.d.ts +11 -0
  259. package/dist/types/meeting/state.d.ts +9 -0
  260. package/dist/types/meeting/util.d.ts +2 -0
  261. package/dist/types/meeting-info/collection.d.ts +20 -0
  262. package/dist/types/meeting-info/index.d.ts +57 -0
  263. package/dist/types/meeting-info/meeting-info-v2.d.ts +93 -0
  264. package/dist/types/meeting-info/request.d.ts +22 -0
  265. package/dist/types/meeting-info/util.d.ts +2 -0
  266. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  267. package/dist/types/meetings/collection.d.ts +23 -0
  268. package/dist/types/meetings/index.d.ts +297 -0
  269. package/dist/types/meetings/request.d.ts +27 -0
  270. package/dist/types/meetings/util.d.ts +18 -0
  271. package/dist/types/member/index.d.ts +146 -0
  272. package/dist/types/member/util.d.ts +2 -0
  273. package/dist/types/members/collection.d.ts +24 -0
  274. package/dist/types/members/index.d.ts +320 -0
  275. package/dist/types/members/request.d.ts +50 -0
  276. package/dist/types/members/util.d.ts +2 -0
  277. package/dist/types/metrics/config.d.ts +178 -0
  278. package/dist/types/metrics/constants.d.ts +57 -0
  279. package/dist/types/metrics/index.d.ts +160 -0
  280. package/dist/types/multistream/mediaRequestManager.d.ts +50 -0
  281. package/dist/types/multistream/receiveSlot.d.ts +66 -0
  282. package/dist/types/multistream/receiveSlotManager.d.ts +46 -0
  283. package/dist/types/multistream/remoteMedia.d.ts +93 -0
  284. package/dist/types/multistream/remoteMediaGroup.d.ts +56 -0
  285. package/dist/types/multistream/remoteMediaManager.d.ts +241 -0
  286. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  287. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  288. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  289. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  290. package/dist/types/reachability/index.d.ts +140 -0
  291. package/dist/types/reachability/request.d.ts +35 -0
  292. package/dist/types/reactions/constants.d.ts +3 -0
  293. package/dist/types/reactions/reactions.d.ts +4 -0
  294. package/dist/types/reactions/reactions.type.d.ts +52 -0
  295. package/dist/types/reconnection-manager/index.d.ts +117 -0
  296. package/dist/types/recording-controller/enums.d.ts +7 -0
  297. package/dist/types/recording-controller/index.d.ts +193 -0
  298. package/dist/types/recording-controller/util.d.ts +13 -0
  299. package/dist/types/roap/index.d.ts +77 -0
  300. package/dist/types/roap/request.d.ts +35 -0
  301. package/dist/types/roap/turnDiscovery.d.ts +74 -0
  302. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  303. package/dist/types/statsAnalyzer/index.d.ts +195 -0
  304. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  305. package/dist/types/transcription/index.d.ts +64 -0
  306. package/internal-README.md +7 -6
  307. package/package.json +25 -20
  308. package/src/breakouts/README.md +190 -0
  309. package/src/breakouts/breakout.ts +130 -0
  310. package/src/breakouts/collection.ts +19 -0
  311. package/src/breakouts/index.ts +353 -0
  312. package/src/breakouts/request.ts +55 -0
  313. package/src/breakouts/utils.ts +15 -0
  314. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  315. package/src/common/collection.ts +9 -7
  316. package/src/common/{config.js → config.ts} +1 -1
  317. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  318. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  319. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  320. package/src/common/errors/{media.js → media.ts} +11 -7
  321. package/src/common/errors/parameter.ts +11 -7
  322. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  323. package/src/common/errors/{permission.js → permission.ts} +10 -6
  324. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  325. package/src/common/errors/{stats.js → stats.ts} +11 -7
  326. package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -7
  327. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  328. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  329. package/src/common/events/{events.js → events.ts} +5 -1
  330. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  331. package/src/common/events/{util.js → util.ts} +2 -3
  332. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  333. package/src/common/logs/logger-proxy.ts +44 -0
  334. package/src/common/logs/{request.js → request.ts} +22 -9
  335. package/src/common/queue.ts +1 -2
  336. package/src/{config.js → config.ts} +17 -12
  337. package/src/constants.ts +44 -4
  338. package/src/controls-options-manager/constants.ts +5 -0
  339. package/src/controls-options-manager/enums.ts +6 -0
  340. package/src/controls-options-manager/index.ts +183 -0
  341. package/src/controls-options-manager/util.ts +20 -0
  342. package/src/index.js +2 -1
  343. package/src/locus-info/controlsUtils.ts +114 -0
  344. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  345. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  346. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  347. package/src/locus-info/{index.js → index.ts} +150 -66
  348. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  349. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
  350. package/src/locus-info/{parser.js → parser.ts} +67 -79
  351. package/src/locus-info/{selfUtils.js → selfUtils.ts} +123 -68
  352. package/src/media/{index.js → index.ts} +176 -157
  353. package/src/media/{properties.js → properties.ts} +48 -31
  354. package/src/media/{util.js → util.ts} +2 -2
  355. package/src/mediaQualityMetrics/config.ts +384 -0
  356. package/src/meeting/{effectsState.js → effectsState.ts} +47 -41
  357. package/src/meeting/in-meeting-actions.ts +31 -3
  358. package/src/meeting/{index.js → index.ts} +2479 -1466
  359. package/src/meeting/{muteState.js → muteState.ts} +80 -45
  360. package/src/meeting/{request.js → request.ts} +292 -142
  361. package/src/meeting/request.type.ts +13 -0
  362. package/src/meeting/{state.js → state.ts} +50 -35
  363. package/src/meeting/{util.js → util.ts} +112 -115
  364. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  365. package/src/meeting-info/{index.js → index.ts} +42 -36
  366. package/src/meeting-info/meeting-info-v2.ts +273 -0
  367. package/src/meeting-info/{request.js → request.ts} +14 -4
  368. package/src/meeting-info/{util.js → util.ts} +60 -51
  369. package/src/meeting-info/{utilv2.js → utilv2.ts} +65 -58
  370. package/src/meetings/{collection.js → collection.ts} +6 -3
  371. package/src/meetings/index.ts +1159 -0
  372. package/src/meetings/{request.js → request.ts} +32 -25
  373. package/src/meetings/{util.js → util.ts} +58 -32
  374. package/src/member/{index.js → index.ts} +102 -56
  375. package/src/member/{util.js → util.ts} +52 -25
  376. package/src/members/{collection.js → collection.ts} +2 -2
  377. package/src/members/{index.js → index.ts} +221 -142
  378. package/src/members/{request.js → request.ts} +60 -16
  379. package/src/members/{util.js → util.ts} +50 -48
  380. package/src/metrics/{config.js → config.ts} +254 -83
  381. package/src/metrics/{constants.js → constants.ts} +0 -2
  382. package/src/metrics/{index.js → index.ts} +106 -74
  383. package/src/multistream/mediaRequestManager.ts +79 -15
  384. package/src/multistream/receiveSlot.ts +42 -13
  385. package/src/multistream/receiveSlotManager.ts +35 -21
  386. package/src/multistream/remoteMedia.ts +15 -5
  387. package/src/multistream/remoteMediaGroup.ts +4 -3
  388. package/src/multistream/remoteMediaManager.ts +152 -36
  389. package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
  390. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  391. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  392. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  393. package/src/reachability/{index.js → index.ts} +99 -83
  394. package/src/reachability/request.ts +39 -33
  395. package/src/reactions/constants.ts +4 -0
  396. package/src/reactions/reactions.ts +104 -0
  397. package/src/reactions/reactions.type.ts +62 -0
  398. package/src/reconnection-manager/{index.js → index.ts} +195 -102
  399. package/src/recording-controller/enums.ts +8 -0
  400. package/src/recording-controller/index.ts +315 -0
  401. package/src/recording-controller/util.ts +58 -0
  402. package/src/roap/{index.js → index.ts} +73 -56
  403. package/src/roap/request.ts +157 -0
  404. package/src/roap/turnDiscovery.ts +77 -37
  405. package/src/statsAnalyzer/global.ts +37 -0
  406. package/src/statsAnalyzer/index.ts +1234 -0
  407. package/src/statsAnalyzer/mqaUtil.ts +293 -0
  408. package/src/transcription/{index.js → index.ts} +46 -39
  409. package/test/integration/spec/converged-space-meetings.js +176 -0
  410. package/test/integration/spec/journey.js +664 -463
  411. package/test/integration/spec/space-meeting.js +320 -206
  412. package/test/integration/spec/transcription.js +7 -8
  413. package/test/unit/spec/breakouts/breakout.ts +147 -0
  414. package/test/unit/spec/breakouts/collection.ts +15 -0
  415. package/test/unit/spec/breakouts/index.ts +464 -0
  416. package/test/unit/spec/breakouts/request.ts +104 -0
  417. package/test/unit/spec/breakouts/utils.js +21 -0
  418. package/test/unit/spec/common/browser-detection.js +9 -28
  419. package/test/unit/spec/controls-options-manager/index.js +124 -0
  420. package/test/unit/spec/controls-options-manager/util.js +66 -0
  421. package/test/unit/spec/fixture/locus.js +92 -90
  422. package/test/unit/spec/locus-info/controlsUtils.js +25 -5
  423. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  424. package/test/unit/spec/locus-info/index.js +104 -2
  425. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  426. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  427. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  428. package/test/unit/spec/locus-info/parser.js +3 -9
  429. package/test/unit/spec/locus-info/selfConstant.js +97 -103
  430. package/test/unit/spec/locus-info/selfUtils.js +105 -12
  431. package/test/unit/spec/media/index.ts +31 -47
  432. package/test/unit/spec/media/properties.ts +9 -9
  433. package/test/unit/spec/meeting/effectsState.js +39 -45
  434. package/test/unit/spec/meeting/in-meeting-actions.ts +13 -2
  435. package/test/unit/spec/meeting/index.js +2214 -746
  436. package/test/unit/spec/meeting/muteState.js +43 -34
  437. package/test/unit/spec/meeting/request.js +115 -44
  438. package/test/unit/spec/meeting/utils.js +104 -171
  439. package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
  440. package/test/unit/spec/meeting-info/request.js +7 -9
  441. package/test/unit/spec/meeting-info/util.js +11 -12
  442. package/test/unit/spec/meeting-info/utilv2.js +110 -74
  443. package/test/unit/spec/meetings/collection.js +1 -1
  444. package/test/unit/spec/meetings/index.js +439 -257
  445. package/test/unit/spec/meetings/utils.js +14 -12
  446. package/test/unit/spec/member/index.js +0 -1
  447. package/test/unit/spec/member/util.js +31 -7
  448. package/test/unit/spec/members/index.js +104 -54
  449. package/test/unit/spec/members/request.js +29 -20
  450. package/test/unit/spec/members/utils.js +8 -5
  451. package/test/unit/spec/metrics/index.js +16 -21
  452. package/test/unit/spec/multistream/mediaRequestManager.ts +312 -50
  453. package/test/unit/spec/multistream/receiveSlot.ts +57 -6
  454. package/test/unit/spec/multistream/receiveSlotManager.ts +41 -13
  455. package/test/unit/spec/multistream/remoteMedia.ts +10 -2
  456. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  457. package/test/unit/spec/multistream/remoteMediaManager.ts +412 -65
  458. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  459. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  460. package/test/unit/spec/reachability/index.ts +58 -26
  461. package/test/unit/spec/reconnection-manager/index.js +102 -9
  462. package/test/unit/spec/recording-controller/index.js +231 -0
  463. package/test/unit/spec/recording-controller/util.js +102 -0
  464. package/test/unit/spec/roap/index.ts +2 -1
  465. package/test/unit/spec/roap/request.ts +114 -0
  466. package/test/unit/spec/roap/turnDiscovery.ts +64 -45
  467. package/test/unit/spec/stats-analyzer/index.js +86 -57
  468. package/test/utils/cmr.js +44 -42
  469. package/test/utils/constants.js +9 -0
  470. package/test/utils/testUtils.js +96 -80
  471. package/test/utils/webex-config.js +22 -18
  472. package/test/utils/webex-test-users.js +57 -50
  473. package/tsconfig.json +6 -0
  474. package/dist/media/internal-media-core-wrapper.js +0 -22
  475. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  476. package/dist/multistream/multistreamMedia.js +0 -116
  477. package/dist/multistream/multistreamMedia.js.map +0 -1
  478. package/dist/peer-connection-manager/util.js +0 -124
  479. package/dist/peer-connection-manager/util.js.map +0 -1
  480. package/src/common/logs/logger-proxy.js +0 -33
  481. package/src/locus-info/controlsUtils.js +0 -102
  482. package/src/media/internal-media-core-wrapper.ts +0 -9
  483. package/src/mediaQualityMetrics/config.js +0 -382
  484. package/src/meeting-info/meeting-info-v2.js +0 -255
  485. package/src/meetings/index.js +0 -1015
  486. package/src/multistream/multistreamMedia.ts +0 -92
  487. package/src/peer-connection-manager/util.ts +0 -117
  488. package/src/roap/request.js +0 -127
  489. package/src/statsAnalyzer/global.js +0 -133
  490. package/src/statsAnalyzer/index.js +0 -1006
  491. package/src/statsAnalyzer/mqaUtil.js +0 -173
  492. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
  493. /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
@@ -10,7 +10,6 @@ import {assert} from '@webex/test-helper-chai';
10
10
 
11
11
  import metrics from '@webex/plugin-meetings/src/metrics';
12
12
 
13
-
14
13
  /**
15
14
  * Meeting can only run in a browser, so we can only send metrics for
16
15
  * browser usage.
@@ -23,7 +22,7 @@ browserOnly(describe)('Meeting metrics', () => {
23
22
  clientRegion: 'US-WEST',
24
23
  countryCode: 'US',
25
24
  regionCode: 'US-WEST',
26
- timezone: 'America/Los_Angeles'
25
+ timezone: 'America/Los_Angeles',
27
26
  };
28
27
 
29
28
  beforeEach(() => {
@@ -31,16 +30,16 @@ browserOnly(describe)('Meeting metrics', () => {
31
30
  mockSubmitMetric = sandbox.stub();
32
31
  webex = new MockWebex({
33
32
  children: {
34
- metrics: Metrics
35
- }
33
+ metrics: Metrics,
34
+ },
36
35
  });
37
36
 
38
37
  webex.version = '1.2.3';
39
38
  webex.credentials.getOrgId = sinon.fake.returns('7890');
40
39
  webex.credentials.config = {
41
40
  _values: {
42
- clientId: 'mock-client-id'
43
- }
41
+ clientId: 'mock-client-id',
42
+ },
44
43
  };
45
44
  webex.config.metrics.type = ['behavioral'];
46
45
  webex.internal.metrics.submitClientMetrics = mockSubmitMetric;
@@ -55,7 +54,7 @@ browserOnly(describe)('Meeting metrics', () => {
55
54
  it('should create payload with masked IPv4', () => {
56
55
  geoHintInfo.clientAddress = '128.0.0.1';
57
56
  webex.meetings = {
58
- geoHintInfo
57
+ geoHintInfo,
59
58
  };
60
59
  metrics.initialSetup({}, webex);
61
60
  const payload = metrics.initPayload('myMetric', {}, {clientType: 'TEAMS_CLIENT'});
@@ -71,7 +70,7 @@ browserOnly(describe)('Meeting metrics', () => {
71
70
  it('should create payload with masked IPv6', () => {
72
71
  geoHintInfo.clientAddress = '2001:0db8:0000:08d3:0000:0000:0070:0000';
73
72
  webex.meetings = {
74
- geoHintInfo
73
+ geoHintInfo,
75
74
  };
76
75
  metrics.initialSetup({}, webex);
77
76
  const payload = metrics.initPayload('myIPv6Metric', {}, {clientType: 'TEAMS_CLIENT'});
@@ -98,19 +97,15 @@ browserOnly(describe)('Meeting metrics', () => {
98
97
 
99
98
  metrics.sendBehavioralMetric('myMetric', fields, metricTags);
100
99
 
101
- assert.calledWithMatch(
102
- mockSubmitMetric,
103
- 'myMetric',
104
- {
105
- type: ['behavioral'],
106
- fields: {
107
- value: 567
108
- },
109
- tags: {
110
- test: true
111
- }
112
- }
113
- );
100
+ assert.calledWithMatch(mockSubmitMetric, 'myMetric', {
101
+ type: ['behavioral'],
102
+ fields: {
103
+ value: 567,
104
+ },
105
+ tags: {
106
+ test: true,
107
+ },
108
+ });
114
109
  });
115
110
  });
116
111
  });
@@ -2,21 +2,28 @@ import {MediaRequestManager} from '@webex/plugin-meetings/src/multistream/mediaR
2
2
  import {ReceiveSlot} from '@webex/plugin-meetings/src/multistream/receiveSlot';
3
3
  import sinon from 'sinon';
4
4
  import {assert} from '@webex/test-helper-chai';
5
+ import {getMaxFs} from '@webex/plugin-meetings/src/multistream/remoteMedia';
5
6
 
6
7
  type ExpectedActiveSpeaker = {
7
8
  policy: 'active-speaker';
8
9
  priority: number;
9
10
  receiveSlots: Array<ReceiveSlot>;
11
+ maxFs: number;
10
12
  };
11
13
  type ExpectedReceiverSelected = {
12
14
  policy: 'receiver-selected';
13
15
  csi: number;
14
16
  receiveSlot: ReceiveSlot;
17
+ maxFs: number;
15
18
  };
16
19
  type ExpectedRequest = ExpectedActiveSpeaker | ExpectedReceiverSelected;
17
20
 
18
21
  const maxPayloadBitsPerSecond = 10 * 1000 * 1000; // for now we always send this fixed constant
19
22
 
23
+ const degradationPreferences = {
24
+ maxMacroblocksLimit: Infinity, // no limit
25
+ };
26
+
20
27
  describe('MediaRequestManager', () => {
21
28
  const CROSS_PRIORITY_DUPLICATION = true;
22
29
  const CROSS_POLICY_DUPLICATION = true;
@@ -33,7 +40,10 @@ describe('MediaRequestManager', () => {
33
40
 
34
41
  beforeEach(() => {
35
42
  sendMediaRequestsCallback = sinon.stub();
36
- mediaRequestManager = new MediaRequestManager(sendMediaRequestsCallback);
43
+ mediaRequestManager = new MediaRequestManager(
44
+ degradationPreferences,
45
+ sendMediaRequestsCallback
46
+ );
37
47
 
38
48
  // create some fake receive slots used by the tests
39
49
  fakeWcmeSlots = Array(NUM_SLOTS)
@@ -55,7 +65,7 @@ describe('MediaRequestManager', () => {
55
65
  });
56
66
 
57
67
  // helper function for adding an active speaker request
58
- const addActiveSpeakerRequest = (priority, receiveSlots, commit = false) =>
68
+ const addActiveSpeakerRequest = (priority, receiveSlots, maxFs, commit = false) =>
59
69
  mediaRequestManager.addRequest(
60
70
  {
61
71
  policyInfo: {
@@ -68,14 +78,14 @@ describe('MediaRequestManager', () => {
68
78
  receiveSlots,
69
79
  codecInfo: {
70
80
  codec: 'h264',
71
- maxFs: ACTIVE_SPEAKER_MAX_FS,
81
+ maxFs: maxFs,
72
82
  },
73
83
  },
74
84
  commit
75
85
  );
76
86
 
77
87
  // helper function for adding a receiver selected request
78
- const addReceiverSelectedRequest = (csi, receiveSlot, commit = false) =>
88
+ const addReceiverSelectedRequest = (csi, receiveSlot, maxFs, commit = false) =>
79
89
  mediaRequestManager.addRequest(
80
90
  {
81
91
  policyInfo: {
@@ -85,7 +95,7 @@ describe('MediaRequestManager', () => {
85
95
  receiveSlots: [receiveSlot],
86
96
  codecInfo: {
87
97
  codec: 'h264',
88
- maxFs: RECEIVER_SELECTED_MAX_FS,
98
+ maxFs: maxFs,
89
99
  },
90
100
  },
91
101
  commit
@@ -116,7 +126,7 @@ describe('MediaRequestManager', () => {
116
126
  sinon.match({
117
127
  payloadType: 0x80,
118
128
  h264: sinon.match({
119
- maxFs: ACTIVE_SPEAKER_MAX_FS,
129
+ maxFs: expectedRequest.maxFs,
120
130
  }),
121
131
  }),
122
132
  ],
@@ -134,7 +144,7 @@ describe('MediaRequestManager', () => {
134
144
  sinon.match({
135
145
  payloadType: 0x80,
136
146
  h264: sinon.match({
137
- maxFs: RECEIVER_SELECTED_MAX_FS,
147
+ maxFs: expectedRequest.maxFs,
138
148
  }),
139
149
  }),
140
150
  ],
@@ -274,44 +284,79 @@ describe('MediaRequestManager', () => {
274
284
 
275
285
  it('keeps adding requests with every call to addRequest()', () => {
276
286
  // start with 1 request
277
- addReceiverSelectedRequest(100, fakeReceiveSlots[0], true);
287
+ addReceiverSelectedRequest(100, fakeReceiveSlots[0], RECEIVER_SELECTED_MAX_FS, true);
278
288
 
279
289
  checkMediaRequestsSent([
280
- {policy: 'receiver-selected', csi: 100, receiveSlot: fakeWcmeSlots[0]},
290
+ {
291
+ policy: 'receiver-selected',
292
+ csi: 100,
293
+ receiveSlot: fakeWcmeSlots[0],
294
+ maxFs: RECEIVER_SELECTED_MAX_FS,
295
+ },
281
296
  ]);
282
297
 
283
298
  // now add another one
284
- addReceiverSelectedRequest(101, fakeReceiveSlots[1], true);
299
+ addReceiverSelectedRequest(101, fakeReceiveSlots[1], RECEIVER_SELECTED_MAX_FS, true);
285
300
 
286
301
  checkMediaRequestsSent([
287
- {policy: 'receiver-selected', csi: 100, receiveSlot: fakeWcmeSlots[0]},
288
- {policy: 'receiver-selected', csi: 101, receiveSlot: fakeWcmeSlots[1]},
302
+ {
303
+ policy: 'receiver-selected',
304
+ csi: 100,
305
+ receiveSlot: fakeWcmeSlots[0],
306
+ maxFs: RECEIVER_SELECTED_MAX_FS,
307
+ },
308
+ {
309
+ policy: 'receiver-selected',
310
+ csi: 101,
311
+ receiveSlot: fakeWcmeSlots[1],
312
+ maxFs: RECEIVER_SELECTED_MAX_FS,
313
+ },
289
314
  ]);
290
315
 
291
316
  // and one more
292
317
  addActiveSpeakerRequest(
293
318
  1,
294
319
  [fakeReceiveSlots[2], fakeReceiveSlots[3], fakeReceiveSlots[4]],
320
+ ACTIVE_SPEAKER_MAX_FS,
295
321
  true
296
322
  );
297
323
 
298
324
  checkMediaRequestsSent([
299
- {policy: 'receiver-selected', csi: 100, receiveSlot: fakeWcmeSlots[0]},
300
- {policy: 'receiver-selected', csi: 101, receiveSlot: fakeWcmeSlots[1]},
325
+ {
326
+ policy: 'receiver-selected',
327
+ csi: 100,
328
+ receiveSlot: fakeWcmeSlots[0],
329
+ maxFs: RECEIVER_SELECTED_MAX_FS,
330
+ },
331
+ {
332
+ policy: 'receiver-selected',
333
+ csi: 101,
334
+ receiveSlot: fakeWcmeSlots[1],
335
+ maxFs: RECEIVER_SELECTED_MAX_FS,
336
+ },
301
337
  {
302
338
  policy: 'active-speaker',
303
339
  priority: 1,
304
340
  receiveSlots: [fakeWcmeSlots[2], fakeWcmeSlots[3], fakeWcmeSlots[4]],
341
+ maxFs: ACTIVE_SPEAKER_MAX_FS,
305
342
  },
306
343
  ]);
307
344
  });
308
345
 
309
346
  it('cancels the requests correctly when cancelRequest() is called with commit=true', () => {
310
347
  const requestIds = [
311
- addActiveSpeakerRequest(255, [fakeReceiveSlots[0], fakeReceiveSlots[1]]),
312
- addActiveSpeakerRequest(255, [fakeReceiveSlots[2], fakeReceiveSlots[3]]),
313
- addReceiverSelectedRequest(100, fakeReceiveSlots[4]),
314
- addReceiverSelectedRequest(200, fakeReceiveSlots[5]),
348
+ addActiveSpeakerRequest(
349
+ 255,
350
+ [fakeReceiveSlots[0], fakeReceiveSlots[1]],
351
+ ACTIVE_SPEAKER_MAX_FS
352
+ ),
353
+ addActiveSpeakerRequest(
354
+ 255,
355
+ [fakeReceiveSlots[2], fakeReceiveSlots[3]],
356
+ ACTIVE_SPEAKER_MAX_FS
357
+ ),
358
+ addReceiverSelectedRequest(100, fakeReceiveSlots[4], RECEIVER_SELECTED_MAX_FS),
359
+ addReceiverSelectedRequest(200, fakeReceiveSlots[5], RECEIVER_SELECTED_MAX_FS),
315
360
  ];
316
361
 
317
362
  // cancel one of the active speaker requests
@@ -319,9 +364,24 @@ describe('MediaRequestManager', () => {
319
364
 
320
365
  // expect only the 3 remaining requests to be sent out
321
366
  checkMediaRequestsSent([
322
- {policy: 'active-speaker', priority: 255, receiveSlots: [fakeWcmeSlots[0], fakeWcmeSlots[1]]},
323
- {policy: 'receiver-selected', csi: 100, receiveSlot: fakeWcmeSlots[4]},
324
- {policy: 'receiver-selected', csi: 200, receiveSlot: fakeWcmeSlots[5]},
367
+ {
368
+ policy: 'active-speaker',
369
+ priority: 255,
370
+ receiveSlots: [fakeWcmeSlots[0], fakeWcmeSlots[1]],
371
+ maxFs: ACTIVE_SPEAKER_MAX_FS,
372
+ },
373
+ {
374
+ policy: 'receiver-selected',
375
+ csi: 100,
376
+ receiveSlot: fakeWcmeSlots[4],
377
+ maxFs: RECEIVER_SELECTED_MAX_FS,
378
+ },
379
+ {
380
+ policy: 'receiver-selected',
381
+ csi: 200,
382
+ receiveSlot: fakeWcmeSlots[5],
383
+ maxFs: RECEIVER_SELECTED_MAX_FS,
384
+ },
325
385
  ]);
326
386
 
327
387
  // cancel one of the receiver selected requests
@@ -329,8 +389,18 @@ describe('MediaRequestManager', () => {
329
389
 
330
390
  // expect only the 2 remaining requests to be sent out
331
391
  checkMediaRequestsSent([
332
- {policy: 'active-speaker', priority: 255, receiveSlots: [fakeWcmeSlots[0], fakeWcmeSlots[1]]},
333
- {policy: 'receiver-selected', csi: 100, receiveSlot: fakeWcmeSlots[4]},
392
+ {
393
+ policy: 'active-speaker',
394
+ priority: 255,
395
+ receiveSlots: [fakeWcmeSlots[0], fakeWcmeSlots[1]],
396
+ maxFs: ACTIVE_SPEAKER_MAX_FS,
397
+ },
398
+ {
399
+ policy: 'receiver-selected',
400
+ csi: 100,
401
+ receiveSlot: fakeWcmeSlots[4],
402
+ maxFs: RECEIVER_SELECTED_MAX_FS,
403
+ },
334
404
  ]);
335
405
  });
336
406
 
@@ -338,9 +408,10 @@ describe('MediaRequestManager', () => {
338
408
  addActiveSpeakerRequest(
339
409
  10,
340
410
  [fakeReceiveSlots[0], fakeReceiveSlots[1], fakeReceiveSlots[2]],
411
+ ACTIVE_SPEAKER_MAX_FS,
341
412
  false
342
413
  );
343
- addReceiverSelectedRequest(123, fakeReceiveSlots[3], false);
414
+ addReceiverSelectedRequest(123, fakeReceiveSlots[3], RECEIVER_SELECTED_MAX_FS, false);
344
415
 
345
416
  // nothing should be sent out as we didn't commit the requests
346
417
  assert.notCalled(sendMediaRequestsCallback);
@@ -354,8 +425,14 @@ describe('MediaRequestManager', () => {
354
425
  policy: 'active-speaker',
355
426
  priority: 10,
356
427
  receiveSlots: [fakeWcmeSlots[0], fakeWcmeSlots[1], fakeWcmeSlots[2]],
428
+ maxFs: ACTIVE_SPEAKER_MAX_FS,
429
+ },
430
+ {
431
+ policy: 'receiver-selected',
432
+ csi: 123,
433
+ receiveSlot: fakeWcmeSlots[3],
434
+ maxFs: RECEIVER_SELECTED_MAX_FS,
357
435
  },
358
- {policy: 'receiver-selected', csi: 123, receiveSlot: fakeWcmeSlots[3]},
359
436
  ]);
360
437
  });
361
438
 
@@ -365,11 +442,12 @@ describe('MediaRequestManager', () => {
365
442
  addActiveSpeakerRequest(
366
443
  250,
367
444
  [fakeReceiveSlots[0], fakeReceiveSlots[1], fakeReceiveSlots[2]],
445
+ ACTIVE_SPEAKER_MAX_FS,
368
446
  false
369
447
  ),
370
- addReceiverSelectedRequest(98765, fakeReceiveSlots[3], false),
371
- addReceiverSelectedRequest(99999, fakeReceiveSlots[4], false),
372
- addReceiverSelectedRequest(88888, fakeReceiveSlots[5], true),
448
+ addReceiverSelectedRequest(98765, fakeReceiveSlots[3], RECEIVER_SELECTED_MAX_FS, false),
449
+ addReceiverSelectedRequest(99999, fakeReceiveSlots[4], RECEIVER_SELECTED_MAX_FS, false),
450
+ addReceiverSelectedRequest(88888, fakeReceiveSlots[5], RECEIVER_SELECTED_MAX_FS, true),
373
451
  ];
374
452
 
375
453
  checkMediaRequestsSent([
@@ -377,10 +455,26 @@ describe('MediaRequestManager', () => {
377
455
  policy: 'active-speaker',
378
456
  priority: 250,
379
457
  receiveSlots: [fakeWcmeSlots[0], fakeWcmeSlots[1], fakeWcmeSlots[2]],
458
+ maxFs: ACTIVE_SPEAKER_MAX_FS,
459
+ },
460
+ {
461
+ policy: 'receiver-selected',
462
+ csi: 98765,
463
+ receiveSlot: fakeWcmeSlots[3],
464
+ maxFs: RECEIVER_SELECTED_MAX_FS,
465
+ },
466
+ {
467
+ policy: 'receiver-selected',
468
+ csi: 99999,
469
+ receiveSlot: fakeWcmeSlots[4],
470
+ maxFs: RECEIVER_SELECTED_MAX_FS,
471
+ },
472
+ {
473
+ policy: 'receiver-selected',
474
+ csi: 88888,
475
+ receiveSlot: fakeWcmeSlots[5],
476
+ maxFs: RECEIVER_SELECTED_MAX_FS,
380
477
  },
381
- {policy: 'receiver-selected', csi: 98765, receiveSlot: fakeWcmeSlots[3]},
382
- {policy: 'receiver-selected', csi: 99999, receiveSlot: fakeWcmeSlots[4]},
383
- {policy: 'receiver-selected', csi: 88888, receiveSlot: fakeWcmeSlots[5]},
384
478
  ]);
385
479
 
386
480
  // now cancel 3 of them, but with commit=false => nothing should happen
@@ -394,22 +488,29 @@ describe('MediaRequestManager', () => {
394
488
  mediaRequestManager.commit();
395
489
 
396
490
  checkMediaRequestsSent([
397
- {policy: 'receiver-selected', csi: 98765, receiveSlot: fakeWcmeSlots[3]},
491
+ {
492
+ policy: 'receiver-selected',
493
+ csi: 98765,
494
+ receiveSlot: fakeWcmeSlots[3],
495
+ maxFs: RECEIVER_SELECTED_MAX_FS,
496
+ },
398
497
  ]);
399
498
  });
400
499
 
401
500
  it('sends the wcme media requests when commit() is called', () => {
402
501
  // send some requests, all of them with commit=false
403
- addReceiverSelectedRequest(123000, fakeReceiveSlots[0], false);
404
- addReceiverSelectedRequest(456000, fakeReceiveSlots[1], false);
502
+ addReceiverSelectedRequest(123000, fakeReceiveSlots[0], RECEIVER_SELECTED_MAX_FS, false);
503
+ addReceiverSelectedRequest(456000, fakeReceiveSlots[1], RECEIVER_SELECTED_MAX_FS, false);
405
504
  addActiveSpeakerRequest(
406
505
  255,
407
506
  [fakeReceiveSlots[2], fakeReceiveSlots[3], fakeReceiveSlots[4]],
507
+ ACTIVE_SPEAKER_MAX_FS,
408
508
  false
409
509
  );
410
510
  addActiveSpeakerRequest(
411
511
  254,
412
512
  [fakeReceiveSlots[5], fakeReceiveSlots[6], fakeReceiveSlots[7]],
513
+ ACTIVE_SPEAKER_MAX_FS,
413
514
  false
414
515
  );
415
516
 
@@ -421,33 +522,47 @@ describe('MediaRequestManager', () => {
421
522
 
422
523
  // check that all requests have been sent out
423
524
  checkMediaRequestsSent([
424
- {policy: 'receiver-selected', csi: 123000, receiveSlot: fakeWcmeSlots[0]},
425
- {policy: 'receiver-selected', csi: 456000, receiveSlot: fakeWcmeSlots[1]},
525
+ {
526
+ policy: 'receiver-selected',
527
+ csi: 123000,
528
+ receiveSlot: fakeWcmeSlots[0],
529
+ maxFs: RECEIVER_SELECTED_MAX_FS,
530
+ },
531
+ {
532
+ policy: 'receiver-selected',
533
+ csi: 456000,
534
+ receiveSlot: fakeWcmeSlots[1],
535
+ maxFs: RECEIVER_SELECTED_MAX_FS,
536
+ },
426
537
  {
427
538
  policy: 'active-speaker',
428
539
  priority: 255,
429
540
  receiveSlots: [fakeWcmeSlots[2], fakeWcmeSlots[3], fakeWcmeSlots[4]],
541
+ maxFs: ACTIVE_SPEAKER_MAX_FS,
430
542
  },
431
543
  {
432
544
  policy: 'active-speaker',
433
545
  priority: 254,
434
546
  receiveSlots: [fakeWcmeSlots[5], fakeWcmeSlots[6], fakeWcmeSlots[7]],
547
+ maxFs: ACTIVE_SPEAKER_MAX_FS,
435
548
  },
436
549
  ]);
437
550
  });
438
551
 
439
552
  it('clears all the requests on reset()', () => {
440
553
  // send some requests and commit them one by one
441
- addReceiverSelectedRequest(1500, fakeReceiveSlots[0], true);
442
- addReceiverSelectedRequest(1501, fakeReceiveSlots[1], true);
554
+ addReceiverSelectedRequest(1500, fakeReceiveSlots[0], RECEIVER_SELECTED_MAX_FS, true);
555
+ addReceiverSelectedRequest(1501, fakeReceiveSlots[1], RECEIVER_SELECTED_MAX_FS, true);
443
556
  addActiveSpeakerRequest(
444
557
  255,
445
558
  [fakeReceiveSlots[2], fakeReceiveSlots[3], fakeReceiveSlots[4]],
559
+ ACTIVE_SPEAKER_MAX_FS,
446
560
  true
447
561
  );
448
562
  addActiveSpeakerRequest(
449
563
  254,
450
564
  [fakeReceiveSlots[5], fakeReceiveSlots[6], fakeReceiveSlots[7]],
565
+ ACTIVE_SPEAKER_MAX_FS,
451
566
  true
452
567
  );
453
568
 
@@ -457,17 +572,29 @@ describe('MediaRequestManager', () => {
457
572
  mediaRequestManager.commit();
458
573
 
459
574
  checkMediaRequestsSent([
460
- {policy: 'receiver-selected', csi: 1500, receiveSlot: fakeWcmeSlots[0]},
461
- {policy: 'receiver-selected', csi: 1501, receiveSlot: fakeWcmeSlots[1]},
575
+ {
576
+ policy: 'receiver-selected',
577
+ csi: 1500,
578
+ receiveSlot: fakeWcmeSlots[0],
579
+ maxFs: RECEIVER_SELECTED_MAX_FS,
580
+ },
581
+ {
582
+ policy: 'receiver-selected',
583
+ csi: 1501,
584
+ receiveSlot: fakeWcmeSlots[1],
585
+ maxFs: RECEIVER_SELECTED_MAX_FS,
586
+ },
462
587
  {
463
588
  policy: 'active-speaker',
464
589
  priority: 255,
465
590
  receiveSlots: [fakeWcmeSlots[2], fakeWcmeSlots[3], fakeWcmeSlots[4]],
591
+ maxFs: ACTIVE_SPEAKER_MAX_FS,
466
592
  },
467
593
  {
468
594
  policy: 'active-speaker',
469
595
  priority: 254,
470
596
  receiveSlots: [fakeWcmeSlots[5], fakeWcmeSlots[6], fakeWcmeSlots[7]],
597
+ maxFs: ACTIVE_SPEAKER_MAX_FS,
471
598
  },
472
599
  ]);
473
600
 
@@ -481,18 +608,46 @@ describe('MediaRequestManager', () => {
481
608
 
482
609
  it('calls resetSourceState() on slots that are stopped being used', () => {
483
610
  const requestIds = [
484
- addActiveSpeakerRequest(255, [fakeReceiveSlots[0], fakeReceiveSlots[1]]),
485
- addActiveSpeakerRequest(255, [fakeReceiveSlots[2], fakeReceiveSlots[3]]),
486
- addReceiverSelectedRequest(100, fakeReceiveSlots[4]),
487
- addReceiverSelectedRequest(200, fakeReceiveSlots[5]),
611
+ addActiveSpeakerRequest(
612
+ 255,
613
+ [fakeReceiveSlots[0], fakeReceiveSlots[1]],
614
+ ACTIVE_SPEAKER_MAX_FS
615
+ ),
616
+ addActiveSpeakerRequest(
617
+ 255,
618
+ [fakeReceiveSlots[2], fakeReceiveSlots[3]],
619
+ ACTIVE_SPEAKER_MAX_FS
620
+ ),
621
+ addReceiverSelectedRequest(100, fakeReceiveSlots[4], RECEIVER_SELECTED_MAX_FS),
622
+ addReceiverSelectedRequest(200, fakeReceiveSlots[5], RECEIVER_SELECTED_MAX_FS),
488
623
  ];
489
624
 
490
625
  mediaRequestManager.commit();
491
626
  checkMediaRequestsSent([
492
- {policy: 'active-speaker', priority: 255, receiveSlots: [fakeWcmeSlots[0], fakeWcmeSlots[1]]},
493
- {policy: 'active-speaker', priority: 255, receiveSlots: [fakeWcmeSlots[2], fakeWcmeSlots[3]]},
494
- {policy: 'receiver-selected', csi: 100, receiveSlot: fakeWcmeSlots[4]},
495
- {policy: 'receiver-selected', csi: 200, receiveSlot: fakeWcmeSlots[5]},
627
+ {
628
+ policy: 'active-speaker',
629
+ priority: 255,
630
+ receiveSlots: [fakeWcmeSlots[0], fakeWcmeSlots[1]],
631
+ maxFs: ACTIVE_SPEAKER_MAX_FS,
632
+ },
633
+ {
634
+ policy: 'active-speaker',
635
+ priority: 255,
636
+ receiveSlots: [fakeWcmeSlots[2], fakeWcmeSlots[3]],
637
+ maxFs: ACTIVE_SPEAKER_MAX_FS,
638
+ },
639
+ {
640
+ policy: 'receiver-selected',
641
+ csi: 100,
642
+ receiveSlot: fakeWcmeSlots[4],
643
+ maxFs: RECEIVER_SELECTED_MAX_FS,
644
+ },
645
+ {
646
+ policy: 'receiver-selected',
647
+ csi: 200,
648
+ receiveSlot: fakeWcmeSlots[5],
649
+ maxFs: RECEIVER_SELECTED_MAX_FS,
650
+ },
496
651
  ]);
497
652
 
498
653
  // cancel 2 of the requests
@@ -503,8 +658,18 @@ describe('MediaRequestManager', () => {
503
658
 
504
659
  // expect only the 2 remaining requests to be sent out
505
660
  checkMediaRequestsSent([
506
- {policy: 'active-speaker', priority: 255, receiveSlots: [fakeWcmeSlots[0], fakeWcmeSlots[1]]},
507
- {policy: 'receiver-selected', csi: 100, receiveSlot: fakeWcmeSlots[4]},
661
+ {
662
+ policy: 'active-speaker',
663
+ priority: 255,
664
+ receiveSlots: [fakeWcmeSlots[0], fakeWcmeSlots[1]],
665
+ maxFs: ACTIVE_SPEAKER_MAX_FS,
666
+ },
667
+ {
668
+ policy: 'receiver-selected',
669
+ csi: 100,
670
+ receiveSlot: fakeWcmeSlots[4],
671
+ maxFs: RECEIVER_SELECTED_MAX_FS,
672
+ },
508
673
  ]);
509
674
 
510
675
  // and that the receive slots of the 2 cancelled ones had resetSourceState() called
@@ -512,4 +677,101 @@ describe('MediaRequestManager', () => {
512
677
  assert.calledOnce(fakeReceiveSlots[3].resetSourceState);
513
678
  assert.calledOnce(fakeReceiveSlots[5].resetSourceState);
514
679
  });
680
+
681
+ it('re-sends media requests after degradation preferences are set', () => {
682
+ // set max macroblocks limit
683
+ mediaRequestManager.setDegradationPreferences({maxMacroblocksLimit: 32400});
684
+ assert.calledOnce(sendMediaRequestsCallback);
685
+ });
686
+
687
+ it('can degrade max-fs once when request exceeds max macroblocks limit', () => {
688
+ // set max macroblocks limit
689
+ mediaRequestManager.setDegradationPreferences({maxMacroblocksLimit: 32400});
690
+ sendMediaRequestsCallback.resetHistory();
691
+
692
+ // request 3 "large" 1080p streams
693
+ addActiveSpeakerRequest(255, fakeReceiveSlots.slice(0, 3), getMaxFs('large'), false);
694
+
695
+ // request additional "large" 1080p stream to exceed max macroblocks limit
696
+ const additionalRequestId = addReceiverSelectedRequest(
697
+ 123,
698
+ fakeReceiveSlots[3],
699
+ getMaxFs('large'),
700
+ true
701
+ );
702
+
703
+ // check that resulting requests are 4 "medium" 720p streams
704
+ checkMediaRequestsSent([
705
+ {
706
+ policy: 'active-speaker',
707
+ priority: 255,
708
+ receiveSlots: fakeWcmeSlots.slice(0, 3),
709
+ maxFs: getMaxFs('medium'),
710
+ },
711
+ {
712
+ policy: 'receiver-selected',
713
+ csi: 123,
714
+ receiveSlot: fakeWcmeSlots[3],
715
+ maxFs: getMaxFs('medium'),
716
+ },
717
+ ]);
718
+
719
+ // cancel additional request
720
+ mediaRequestManager.cancelRequest(additionalRequestId);
721
+
722
+ // check that resulting requests are 3 "large" 1080p streams
723
+ checkMediaRequestsSent([
724
+ {
725
+ policy: 'active-speaker',
726
+ priority: 255,
727
+ receiveSlots: fakeWcmeSlots.slice(0, 3),
728
+ maxFs: getMaxFs('large'),
729
+ },
730
+ ]);
731
+ });
732
+
733
+ it('can degrade max-fs multiple times when request exceeds max macroblocks limit', () => {
734
+ // set max macroblocks limit
735
+ mediaRequestManager.setDegradationPreferences({maxMacroblocksLimit: 32400});
736
+ sendMediaRequestsCallback.resetHistory();
737
+
738
+ // request 10 "large" 1080p streams
739
+ addActiveSpeakerRequest(255, fakeReceiveSlots.slice(0, 10), getMaxFs('large'), true);
740
+
741
+ // check that resulting requests are 10 "small" 360p streams
742
+ checkMediaRequestsSent([
743
+ {
744
+ policy: 'active-speaker',
745
+ priority: 255,
746
+ receiveSlots: fakeWcmeSlots.slice(0, 10),
747
+ maxFs: getMaxFs('small'),
748
+ },
749
+ ]);
750
+ });
751
+
752
+ it('can degrade only the largest max-fs when request exceeds max macroblocks limit', () => {
753
+ // set max macroblocks limit
754
+ mediaRequestManager.setDegradationPreferences({maxMacroblocksLimit: 32400});
755
+ sendMediaRequestsCallback.resetHistory();
756
+
757
+ // request 5 "large" 1080p streams and 5 "small" 360p streams
758
+ addActiveSpeakerRequest(255, fakeReceiveSlots.slice(0, 5), getMaxFs('large'), false);
759
+ addActiveSpeakerRequest(254, fakeReceiveSlots.slice(5, 10), getMaxFs('small'), true);
760
+
761
+ // check that resulting requests are 5 "medium" 720p streams and 5 "small" 360p streams
762
+ checkMediaRequestsSent([
763
+ {
764
+ policy: 'active-speaker',
765
+ priority: 255,
766
+ receiveSlots: fakeWcmeSlots.slice(0, 5),
767
+ maxFs: getMaxFs('medium'),
768
+ },
769
+ {
770
+ policy: 'active-speaker',
771
+ priority: 254,
772
+ receiveSlots: fakeWcmeSlots.slice(5, 10),
773
+ maxFs: getMaxFs('small'),
774
+ },
775
+ ]);
776
+ });
515
777
  });