@webex/plugin-meetings 2.60.1-next.9 → 2.60.2

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 (539) hide show
  1. package/README.md +8 -58
  2. package/dist/common/browser-detection.js +3 -2
  3. package/dist/common/browser-detection.js.map +1 -1
  4. package/dist/common/collection.js +4 -3
  5. package/dist/common/collection.js.map +1 -1
  6. package/dist/common/config.js +2 -1
  7. package/dist/common/config.js.map +1 -1
  8. package/dist/common/errors/captcha-error.js +2 -1
  9. package/dist/common/errors/captcha-error.js.map +1 -1
  10. package/dist/common/errors/intent-to-join.js +2 -1
  11. package/dist/common/errors/intent-to-join.js.map +1 -1
  12. package/dist/common/errors/join-meeting.js +2 -1
  13. package/dist/common/errors/join-meeting.js.map +1 -1
  14. package/dist/common/errors/media.js +2 -1
  15. package/dist/common/errors/media.js.map +1 -1
  16. package/dist/common/errors/parameter.js +4 -3
  17. package/dist/common/errors/parameter.js.map +1 -1
  18. package/dist/common/errors/password-error.js +2 -1
  19. package/dist/common/errors/password-error.js.map +1 -1
  20. package/dist/common/errors/permission.js +2 -1
  21. package/dist/common/errors/permission.js.map +1 -1
  22. package/dist/common/errors/{reclaim-host-role-errors.js → reclaim-host-role-error.js} +11 -7
  23. package/dist/common/errors/reclaim-host-role-error.js.map +1 -0
  24. package/dist/common/errors/reconnection-in-progress.js +2 -1
  25. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  26. package/dist/common/errors/reconnection.js +2 -1
  27. package/dist/common/errors/reconnection.js.map +1 -1
  28. package/dist/common/errors/stats.js +2 -1
  29. package/dist/common/errors/stats.js.map +1 -1
  30. package/dist/common/errors/webex-errors.d.ts +8 -20
  31. package/dist/common/errors/webex-errors.js +28 -48
  32. package/dist/common/errors/webex-errors.js.map +1 -1
  33. package/dist/common/errors/webex-meetings-error.js +2 -1
  34. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  35. package/dist/common/events/events-scope.js +2 -1
  36. package/dist/common/events/events-scope.js.map +1 -1
  37. package/dist/common/events/events.js +2 -1
  38. package/dist/common/events/events.js.map +1 -1
  39. package/dist/common/events/trigger-proxy.js +2 -1
  40. package/dist/common/events/trigger-proxy.js.map +1 -1
  41. package/dist/common/events/util.js +2 -1
  42. package/dist/common/events/util.js.map +1 -1
  43. package/dist/common/logs/logger-config.js +2 -1
  44. package/dist/common/logs/logger-config.js.map +1 -1
  45. package/dist/common/logs/logger-proxy.js +3 -2
  46. package/dist/common/logs/logger-proxy.js.map +1 -1
  47. package/dist/common/logs/request.d.ts +1 -3
  48. package/dist/common/logs/request.js +5 -8
  49. package/dist/common/logs/request.js.map +1 -1
  50. package/dist/common/queue.d.ts +7 -9
  51. package/dist/common/queue.js +9 -22
  52. package/dist/common/queue.js.map +1 -1
  53. package/dist/config.d.ts +7 -6
  54. package/dist/config.js +10 -8
  55. package/dist/config.js.map +1 -1
  56. package/dist/constants.d.ts +100 -234
  57. package/dist/constants.js +444 -433
  58. package/dist/constants.js.map +1 -1
  59. package/dist/controls-options-manager/constants.js +6 -3
  60. package/dist/controls-options-manager/constants.js.map +1 -1
  61. package/dist/controls-options-manager/enums.d.ts +1 -11
  62. package/dist/controls-options-manager/enums.js +6 -15
  63. package/dist/controls-options-manager/enums.js.map +1 -1
  64. package/dist/controls-options-manager/index.d.ts +1 -17
  65. package/dist/controls-options-manager/index.js +38 -127
  66. package/dist/controls-options-manager/index.js.map +1 -1
  67. package/dist/controls-options-manager/util.d.ts +7 -1
  68. package/dist/controls-options-manager/util.js +19 -309
  69. package/dist/controls-options-manager/util.js.map +1 -1
  70. package/dist/index.d.ts +3 -6
  71. package/dist/index.js +5 -121
  72. package/dist/index.js.map +1 -1
  73. package/dist/locus-info/controlsUtils.js +11 -100
  74. package/dist/locus-info/controlsUtils.js.map +1 -1
  75. package/dist/locus-info/embeddedAppsUtils.js +4 -3
  76. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  77. package/dist/locus-info/fullState.js +2 -1
  78. package/dist/locus-info/fullState.js.map +1 -1
  79. package/dist/locus-info/hostUtils.js +2 -1
  80. package/dist/locus-info/hostUtils.js.map +1 -1
  81. package/dist/locus-info/index.d.ts +4 -57
  82. package/dist/locus-info/index.js +84 -425
  83. package/dist/locus-info/index.js.map +1 -1
  84. package/dist/locus-info/infoUtils.js +5 -13
  85. package/dist/locus-info/infoUtils.js.map +1 -1
  86. package/dist/locus-info/mediaSharesUtils.js +3 -58
  87. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  88. package/dist/locus-info/parser.d.ts +6 -66
  89. package/dist/locus-info/parser.js +80 -253
  90. package/dist/locus-info/parser.js.map +1 -1
  91. package/dist/locus-info/selfUtils.js +13 -97
  92. package/dist/locus-info/selfUtils.js.map +1 -1
  93. package/dist/media/index.d.ts +0 -2
  94. package/dist/media/index.js +319 -107
  95. package/dist/media/index.js.map +1 -1
  96. package/dist/media/properties.d.ts +53 -38
  97. package/dist/media/properties.js +153 -96
  98. package/dist/media/properties.js.map +1 -1
  99. package/dist/media/util.js +22 -1
  100. package/dist/media/util.js.map +1 -1
  101. package/dist/mediaQualityMetrics/config.d.ts +230 -234
  102. package/dist/mediaQualityMetrics/config.js +498 -302
  103. package/dist/mediaQualityMetrics/config.js.map +1 -1
  104. package/dist/meeting/effectsState.d.ts +42 -0
  105. package/dist/meeting/effectsState.js +260 -0
  106. package/dist/meeting/effectsState.js.map +1 -0
  107. package/dist/meeting/in-meeting-actions.d.ts +0 -88
  108. package/dist/meeting/in-meeting-actions.js +3 -94
  109. package/dist/meeting/in-meeting-actions.js.map +1 -1
  110. package/dist/meeting/index.d.ts +520 -705
  111. package/dist/meeting/index.js +3083 -5041
  112. package/dist/meeting/index.js.map +1 -1
  113. package/dist/meeting/muteState.d.ts +25 -93
  114. package/dist/meeting/muteState.js +133 -224
  115. package/dist/meeting/muteState.js.map +1 -1
  116. package/dist/meeting/request.d.ts +47 -82
  117. package/dist/meeting/request.js +199 -304
  118. package/dist/meeting/request.js.map +1 -1
  119. package/dist/meeting/state.js +2 -1
  120. package/dist/meeting/state.js.map +1 -1
  121. package/dist/meeting/util.d.ts +1 -118
  122. package/dist/meeting/util.js +435 -676
  123. package/dist/meeting/util.js.map +1 -1
  124. package/dist/meeting-info/collection.js +4 -3
  125. package/dist/meeting-info/collection.js.map +1 -1
  126. package/dist/meeting-info/index.d.ts +1 -13
  127. package/dist/meeting-info/index.js +7 -74
  128. package/dist/meeting-info/index.js.map +1 -1
  129. package/dist/meeting-info/meeting-info-v2.d.ts +1 -31
  130. package/dist/meeting-info/meeting-info-v2.js +63 -200
  131. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  132. package/dist/meeting-info/request.js +2 -1
  133. package/dist/meeting-info/request.js.map +1 -1
  134. package/dist/meeting-info/util.js +3 -2
  135. package/dist/meeting-info/util.js.map +1 -1
  136. package/dist/meeting-info/utilv2.js +41 -39
  137. package/dist/meeting-info/utilv2.js.map +1 -1
  138. package/dist/meetings/collection.d.ts +0 -17
  139. package/dist/meetings/collection.js +4 -42
  140. package/dist/meetings/collection.js.map +1 -1
  141. package/dist/meetings/index.d.ts +20 -114
  142. package/dist/meetings/index.js +133 -540
  143. package/dist/meetings/index.js.map +1 -1
  144. package/dist/meetings/request.js +3 -4
  145. package/dist/meetings/request.js.map +1 -1
  146. package/dist/meetings/util.js +6 -107
  147. package/dist/meetings/util.js.map +1 -1
  148. package/dist/member/index.d.ts +1 -13
  149. package/dist/member/index.js +2 -45
  150. package/dist/member/index.js.map +1 -1
  151. package/dist/member/member.types.js +4 -3
  152. package/dist/member/member.types.js.map +1 -1
  153. package/dist/member/util.js +29 -120
  154. package/dist/member/util.js.map +1 -1
  155. package/dist/members/collection.d.ts +0 -5
  156. package/dist/members/collection.js +2 -11
  157. package/dist/members/collection.js.map +1 -1
  158. package/dist/members/index.d.ts +11 -56
  159. package/dist/members/index.js +47 -174
  160. package/dist/members/index.js.map +1 -1
  161. package/dist/members/request.d.ts +11 -67
  162. package/dist/members/request.js +54 -102
  163. package/dist/members/request.js.map +1 -1
  164. package/dist/members/types.js +4 -3
  165. package/dist/members/types.js.map +1 -1
  166. package/dist/members/util.d.ts +1 -214
  167. package/dist/members/util.js +284 -327
  168. package/dist/members/util.js.map +1 -1
  169. package/dist/metrics/config.d.ts +169 -0
  170. package/dist/metrics/config.js +289 -0
  171. package/dist/metrics/config.js.map +1 -0
  172. package/dist/metrics/constants.d.ts +6 -15
  173. package/dist/metrics/constants.js +9 -17
  174. package/dist/metrics/constants.js.map +1 -1
  175. package/dist/metrics/index.d.ts +111 -4
  176. package/dist/metrics/index.js +452 -4
  177. package/dist/metrics/index.js.map +1 -1
  178. package/dist/networkQualityMonitor/index.js +4 -5
  179. package/dist/networkQualityMonitor/index.js.map +1 -1
  180. package/dist/peer-connection-manager/index.d.ts +6 -0
  181. package/dist/peer-connection-manager/index.js +671 -0
  182. package/dist/peer-connection-manager/index.js.map +1 -0
  183. package/dist/peer-connection-manager/util.d.ts +6 -0
  184. package/dist/peer-connection-manager/util.js +110 -0
  185. package/dist/peer-connection-manager/util.js.map +1 -0
  186. package/dist/personal-meeting-room/index.js +3 -2
  187. package/dist/personal-meeting-room/index.js.map +1 -1
  188. package/dist/personal-meeting-room/request.js +3 -2
  189. package/dist/personal-meeting-room/request.js.map +1 -1
  190. package/dist/personal-meeting-room/util.js +2 -1
  191. package/dist/personal-meeting-room/util.js.map +1 -1
  192. package/dist/reachability/index.d.ts +95 -61
  193. package/dist/reachability/index.js +392 -304
  194. package/dist/reachability/index.js.map +1 -1
  195. package/dist/reachability/request.d.ts +3 -7
  196. package/dist/reachability/request.js +10 -18
  197. package/dist/reachability/request.js.map +1 -1
  198. package/dist/reactions/reactions.d.ts +2 -2
  199. package/dist/reactions/reactions.js +6 -4
  200. package/dist/reactions/reactions.js.map +1 -1
  201. package/dist/reactions/reactions.type.d.ts +3 -23
  202. package/dist/reactions/reactions.type.js +23 -21
  203. package/dist/reactions/reactions.type.js.map +1 -1
  204. package/dist/reconnection-manager/index.d.ts +8 -32
  205. package/dist/reconnection-manager/index.js +232 -285
  206. package/dist/reconnection-manager/index.js.map +1 -1
  207. package/dist/recording-controller/enums.js +5 -4
  208. package/dist/recording-controller/enums.js.map +1 -1
  209. package/dist/recording-controller/index.d.ts +1 -15
  210. package/dist/recording-controller/index.js +46 -57
  211. package/dist/recording-controller/index.js.map +1 -1
  212. package/dist/recording-controller/util.d.ts +4 -5
  213. package/dist/recording-controller/util.js +10 -10
  214. package/dist/recording-controller/util.js.map +1 -1
  215. package/dist/roap/collection.d.ts +10 -0
  216. package/dist/roap/collection.js +63 -0
  217. package/dist/roap/collection.js.map +1 -0
  218. package/dist/roap/handler.d.ts +47 -0
  219. package/dist/roap/handler.js +279 -0
  220. package/dist/roap/handler.js.map +1 -0
  221. package/dist/roap/index.d.ts +47 -9
  222. package/dist/roap/index.js +238 -100
  223. package/dist/roap/index.js.map +1 -1
  224. package/dist/roap/request.d.ts +12 -18
  225. package/dist/roap/request.js +180 -126
  226. package/dist/roap/request.js.map +1 -1
  227. package/dist/roap/state.d.ts +9 -0
  228. package/dist/roap/state.js +127 -0
  229. package/dist/roap/state.js.map +1 -0
  230. package/dist/roap/turnDiscovery.d.ts +16 -27
  231. package/dist/roap/turnDiscovery.js +105 -115
  232. package/dist/roap/turnDiscovery.js.map +1 -1
  233. package/dist/roap/util.d.ts +2 -0
  234. package/dist/roap/util.js +76 -0
  235. package/dist/roap/util.js.map +1 -0
  236. package/dist/statsAnalyzer/global.d.ts +83 -1
  237. package/dist/statsAnalyzer/global.js +85 -2
  238. package/dist/statsAnalyzer/global.js.map +1 -1
  239. package/dist/statsAnalyzer/index.d.ts +30 -50
  240. package/dist/statsAnalyzer/index.js +511 -436
  241. package/dist/statsAnalyzer/index.js.map +1 -1
  242. package/dist/statsAnalyzer/mqaUtil.d.ts +6 -8
  243. package/dist/statsAnalyzer/mqaUtil.js +90 -130
  244. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  245. package/dist/transcription/index.js +2 -1
  246. package/dist/transcription/index.js.map +1 -1
  247. package/package.json +26 -39
  248. package/src/common/errors/webex-errors.ts +12 -36
  249. package/src/common/logs/logger-proxy.ts +1 -1
  250. package/src/common/logs/request.ts +1 -5
  251. package/src/common/queue.ts +8 -22
  252. package/src/config.ts +7 -6
  253. package/src/constants.ts +100 -265
  254. package/src/controls-options-manager/enums.ts +0 -12
  255. package/src/controls-options-manager/index.ts +21 -116
  256. package/src/controls-options-manager/util.ts +14 -294
  257. package/src/index.js +15 -0
  258. package/src/locus-info/controlsUtils.ts +0 -110
  259. package/src/locus-info/index.ts +61 -450
  260. package/src/locus-info/infoUtils.ts +2 -14
  261. package/src/locus-info/mediaSharesUtils.ts +0 -64
  262. package/src/locus-info/parser.ts +47 -258
  263. package/src/locus-info/selfUtils.ts +2 -85
  264. package/src/media/index.ts +370 -153
  265. package/src/media/properties.ts +136 -106
  266. package/src/media/util.ts +21 -0
  267. package/src/mediaQualityMetrics/config.ts +377 -244
  268. package/src/meeting/effectsState.ts +209 -0
  269. package/src/meeting/in-meeting-actions.ts +0 -176
  270. package/src/meeting/index.ts +2581 -4306
  271. package/src/meeting/muteState.ts +138 -224
  272. package/src/meeting/request.ts +127 -214
  273. package/src/meeting/util.ts +423 -687
  274. package/src/meeting-info/index.ts +8 -81
  275. package/src/meeting-info/meeting-info-v2.ts +13 -163
  276. package/src/meeting-info/util.ts +1 -1
  277. package/src/meeting-info/utilv2.ts +28 -28
  278. package/src/meetings/collection.ts +0 -33
  279. package/src/meetings/index.ts +136 -531
  280. package/src/meetings/request.ts +0 -2
  281. package/src/meetings/util.ts +5 -116
  282. package/src/member/index.ts +1 -43
  283. package/src/member/util.ts +28 -125
  284. package/src/members/collection.ts +0 -8
  285. package/src/members/index.ts +52 -187
  286. package/src/members/request.ts +27 -87
  287. package/src/members/util.ts +291 -332
  288. package/src/metrics/config.ts +485 -0
  289. package/src/metrics/constants.ts +6 -15
  290. package/src/metrics/index.ts +471 -1
  291. package/src/networkQualityMonitor/index.ts +6 -6
  292. package/src/peer-connection-manager/index.ts +847 -0
  293. package/src/peer-connection-manager/util.ts +119 -0
  294. package/src/reachability/index.ts +347 -246
  295. package/src/reachability/request.ts +8 -17
  296. package/src/reactions/reactions.ts +4 -4
  297. package/src/reactions/reactions.type.ts +4 -30
  298. package/src/reconnection-manager/index.ts +156 -168
  299. package/src/recording-controller/index.ts +3 -20
  300. package/src/recording-controller/util.ts +9 -26
  301. package/src/roap/collection.ts +62 -0
  302. package/src/roap/handler.ts +294 -0
  303. package/src/roap/index.ts +241 -96
  304. package/src/roap/request.ts +148 -74
  305. package/src/roap/state.ts +156 -0
  306. package/src/roap/turnDiscovery.ts +56 -62
  307. package/src/roap/util.ts +100 -0
  308. package/src/statsAnalyzer/global.ts +84 -1
  309. package/src/statsAnalyzer/index.ts +645 -479
  310. package/src/statsAnalyzer/mqaUtil.ts +126 -128
  311. package/test/integration/spec/journey.js +264 -320
  312. package/test/integration/spec/space-meeting.js +4 -77
  313. package/test/unit/spec/common/queue.js +2 -31
  314. package/test/unit/spec/controls-options-manager/index.js +0 -163
  315. package/test/unit/spec/controls-options-manager/util.js +60 -576
  316. package/test/unit/spec/fixture/locus.js +0 -1
  317. package/test/unit/spec/locus-info/controlsUtils.js +30 -323
  318. package/test/unit/spec/locus-info/index.js +15 -1437
  319. package/test/unit/spec/locus-info/infoUtils.js +16 -54
  320. package/test/unit/spec/locus-info/lib/SeqCmp.json +0 -16
  321. package/test/unit/spec/locus-info/lib/selfConstant.js +0 -48
  322. package/test/unit/spec/locus-info/parser.js +35 -116
  323. package/test/unit/spec/locus-info/selfUtils.js +0 -275
  324. package/test/unit/spec/media/properties.ts +84 -75
  325. package/test/unit/spec/meeting/effectsState.js +281 -0
  326. package/test/unit/spec/meeting/in-meeting-actions.ts +0 -86
  327. package/test/unit/spec/meeting/index.js +2313 -8384
  328. package/test/unit/spec/meeting/muteState.js +213 -409
  329. package/test/unit/spec/meeting/request.js +43 -523
  330. package/test/unit/spec/meeting/utils.js +24 -834
  331. package/test/unit/spec/meeting-info/meetinginfov2.js +5 -527
  332. package/test/unit/spec/meeting-info/utilv2.js +0 -21
  333. package/test/unit/spec/meetings/collection.js +0 -26
  334. package/test/unit/spec/meetings/index.js +232 -1445
  335. package/test/unit/spec/meetings/utils.js +2 -202
  336. package/test/unit/spec/member/index.js +9 -32
  337. package/test/unit/spec/member/util.js +61 -499
  338. package/test/unit/spec/members/index.js +5 -394
  339. package/test/unit/spec/members/request.js +27 -206
  340. package/test/unit/spec/members/utils.js +38 -173
  341. package/test/unit/spec/metrics/index.js +50 -1
  342. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  343. package/test/unit/spec/peerconnection-manager/index.js +218 -0
  344. package/test/unit/spec/peerconnection-manager/utils.js +49 -0
  345. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +388 -0
  346. package/test/unit/spec/reachability/index.ts +24 -532
  347. package/test/unit/spec/reconnection-manager/index.js +24 -163
  348. package/test/unit/spec/recording-controller/index.js +218 -293
  349. package/test/unit/spec/recording-controller/util.js +96 -223
  350. package/test/unit/spec/roap/index.ts +77 -187
  351. package/test/unit/spec/roap/turnDiscovery.ts +48 -86
  352. package/test/unit/spec/roap/util.js +30 -0
  353. package/test/unit/spec/stats-analyzer/index.js +165 -644
  354. package/test/utils/testUtils.js +45 -0
  355. package/test/utils/webex-config.js +0 -4
  356. package/test/utils/webex-test-users.js +3 -7
  357. package/dist/annotation/annotation.types.d.ts +0 -42
  358. package/dist/annotation/annotation.types.js +0 -7
  359. package/dist/annotation/annotation.types.js.map +0 -1
  360. package/dist/annotation/constants.d.ts +0 -31
  361. package/dist/annotation/constants.js +0 -41
  362. package/dist/annotation/constants.js.map +0 -1
  363. package/dist/annotation/index.d.ts +0 -117
  364. package/dist/annotation/index.js +0 -357
  365. package/dist/annotation/index.js.map +0 -1
  366. package/dist/breakouts/breakout.d.ts +0 -8
  367. package/dist/breakouts/breakout.js +0 -215
  368. package/dist/breakouts/breakout.js.map +0 -1
  369. package/dist/breakouts/collection.d.ts +0 -5
  370. package/dist/breakouts/collection.js +0 -22
  371. package/dist/breakouts/collection.js.map +0 -1
  372. package/dist/breakouts/edit-lock-error.d.ts +0 -15
  373. package/dist/breakouts/edit-lock-error.js +0 -51
  374. package/dist/breakouts/edit-lock-error.js.map +0 -1
  375. package/dist/breakouts/events.d.ts +0 -8
  376. package/dist/breakouts/events.js +0 -44
  377. package/dist/breakouts/events.js.map +0 -1
  378. package/dist/breakouts/index.d.ts +0 -5
  379. package/dist/breakouts/index.js +0 -1047
  380. package/dist/breakouts/index.js.map +0 -1
  381. package/dist/breakouts/request.d.ts +0 -22
  382. package/dist/breakouts/request.js +0 -77
  383. package/dist/breakouts/request.js.map +0 -1
  384. package/dist/breakouts/utils.d.ts +0 -15
  385. package/dist/breakouts/utils.js +0 -64
  386. package/dist/breakouts/utils.js.map +0 -1
  387. package/dist/common/errors/no-meeting-info.d.ts +0 -14
  388. package/dist/common/errors/no-meeting-info.js +0 -50
  389. package/dist/common/errors/no-meeting-info.js.map +0 -1
  390. package/dist/common/errors/reclaim-host-role-errors.js.map +0 -1
  391. package/dist/controls-options-manager/types.d.ts +0 -43
  392. package/dist/controls-options-manager/types.js +0 -7
  393. package/dist/controls-options-manager/types.js.map +0 -1
  394. package/dist/interceptors/index.d.ts +0 -2
  395. package/dist/interceptors/index.js +0 -15
  396. package/dist/interceptors/index.js.map +0 -1
  397. package/dist/interceptors/locusRetry.d.ts +0 -27
  398. package/dist/interceptors/locusRetry.js +0 -94
  399. package/dist/interceptors/locusRetry.js.map +0 -1
  400. package/dist/interpretation/collection.d.ts +0 -5
  401. package/dist/interpretation/collection.js +0 -22
  402. package/dist/interpretation/collection.js.map +0 -1
  403. package/dist/interpretation/index.d.ts +0 -5
  404. package/dist/interpretation/index.js +0 -365
  405. package/dist/interpretation/index.js.map +0 -1
  406. package/dist/interpretation/siLanguage.d.ts +0 -5
  407. package/dist/interpretation/siLanguage.js +0 -24
  408. package/dist/interpretation/siLanguage.js.map +0 -1
  409. package/dist/meeting/locusMediaRequest.d.ts +0 -74
  410. package/dist/meeting/locusMediaRequest.js +0 -291
  411. package/dist/meeting/locusMediaRequest.js.map +0 -1
  412. package/dist/meeting/request.type.d.ts +0 -11
  413. package/dist/meeting/request.type.js +0 -7
  414. package/dist/meeting/request.type.js.map +0 -1
  415. package/dist/meeting/voicea-meeting.d.ts +0 -20
  416. package/dist/meeting/voicea-meeting.js +0 -201
  417. package/dist/meeting/voicea-meeting.js.map +0 -1
  418. package/dist/meetings/meetings.types.d.ts +0 -4
  419. package/dist/meetings/meetings.types.js +0 -7
  420. package/dist/meetings/meetings.types.js.map +0 -1
  421. package/dist/member/types.d.ts +0 -32
  422. package/dist/member/types.js +0 -23
  423. package/dist/member/types.js.map +0 -1
  424. package/dist/multistream/mediaRequestManager.d.ts +0 -118
  425. package/dist/multistream/mediaRequestManager.js +0 -344
  426. package/dist/multistream/mediaRequestManager.js.map +0 -1
  427. package/dist/multistream/receiveSlot.d.ts +0 -68
  428. package/dist/multistream/receiveSlot.js +0 -200
  429. package/dist/multistream/receiveSlot.js.map +0 -1
  430. package/dist/multistream/receiveSlotManager.d.ts +0 -56
  431. package/dist/multistream/receiveSlotManager.js +0 -174
  432. package/dist/multistream/receiveSlotManager.js.map +0 -1
  433. package/dist/multistream/remoteMedia.d.ts +0 -72
  434. package/dist/multistream/remoteMedia.js +0 -268
  435. package/dist/multistream/remoteMedia.js.map +0 -1
  436. package/dist/multistream/remoteMediaGroup.d.ts +0 -47
  437. package/dist/multistream/remoteMediaGroup.js +0 -267
  438. package/dist/multistream/remoteMediaGroup.js.map +0 -1
  439. package/dist/multistream/remoteMediaManager.d.ts +0 -285
  440. package/dist/multistream/remoteMediaManager.js +0 -1211
  441. package/dist/multistream/remoteMediaManager.js.map +0 -1
  442. package/dist/multistream/sendSlotManager.d.ts +0 -61
  443. package/dist/multistream/sendSlotManager.js +0 -236
  444. package/dist/multistream/sendSlotManager.js.map +0 -1
  445. package/dist/reachability/clusterReachability.d.ts +0 -109
  446. package/dist/reachability/clusterReachability.js +0 -357
  447. package/dist/reachability/clusterReachability.js.map +0 -1
  448. package/dist/reachability/util.d.ts +0 -8
  449. package/dist/reachability/util.js +0 -29
  450. package/dist/reachability/util.js.map +0 -1
  451. package/dist/reactions/constants.d.ts +0 -3
  452. package/dist/reactions/constants.js +0 -12
  453. package/dist/reactions/constants.js.map +0 -1
  454. package/dist/rtcMetrics/constants.d.ts +0 -4
  455. package/dist/rtcMetrics/constants.js +0 -11
  456. package/dist/rtcMetrics/constants.js.map +0 -1
  457. package/dist/rtcMetrics/index.d.ts +0 -54
  458. package/dist/rtcMetrics/index.js +0 -140
  459. package/dist/rtcMetrics/index.js.map +0 -1
  460. package/dist/webinar/collection.d.ts +0 -16
  461. package/dist/webinar/collection.js +0 -43
  462. package/dist/webinar/collection.js.map +0 -1
  463. package/dist/webinar/index.d.ts +0 -5
  464. package/dist/webinar/index.js +0 -68
  465. package/dist/webinar/index.js.map +0 -1
  466. package/src/annotation/annotation.types.ts +0 -50
  467. package/src/annotation/constants.ts +0 -36
  468. package/src/annotation/index.ts +0 -328
  469. package/src/breakouts/README.md +0 -220
  470. package/src/breakouts/breakout.ts +0 -188
  471. package/src/breakouts/collection.ts +0 -19
  472. package/src/breakouts/edit-lock-error.ts +0 -25
  473. package/src/breakouts/events.ts +0 -56
  474. package/src/breakouts/index.ts +0 -925
  475. package/src/breakouts/request.ts +0 -55
  476. package/src/breakouts/utils.ts +0 -57
  477. package/src/common/errors/no-meeting-info.ts +0 -24
  478. package/src/controls-options-manager/types.ts +0 -59
  479. package/src/index.ts +0 -44
  480. package/src/interceptors/index.ts +0 -3
  481. package/src/interceptors/locusRetry.ts +0 -67
  482. package/src/interpretation/README.md +0 -60
  483. package/src/interpretation/collection.ts +0 -19
  484. package/src/interpretation/index.ts +0 -332
  485. package/src/interpretation/siLanguage.ts +0 -18
  486. package/src/meeting/locusMediaRequest.ts +0 -313
  487. package/src/meeting/request.type.ts +0 -13
  488. package/src/meeting/voicea-meeting.ts +0 -161
  489. package/src/meetings/meetings.types.ts +0 -12
  490. package/src/member/types.ts +0 -38
  491. package/src/multistream/mediaRequestManager.ts +0 -440
  492. package/src/multistream/receiveSlot.ts +0 -184
  493. package/src/multistream/receiveSlotManager.ts +0 -166
  494. package/src/multistream/remoteMedia.ts +0 -254
  495. package/src/multistream/remoteMediaGroup.ts +0 -284
  496. package/src/multistream/remoteMediaManager.ts +0 -1145
  497. package/src/multistream/sendSlotManager.ts +0 -170
  498. package/src/reachability/clusterReachability.ts +0 -320
  499. package/src/reachability/util.ts +0 -24
  500. package/src/reactions/constants.ts +0 -4
  501. package/src/rtcMetrics/constants.ts +0 -3
  502. package/src/rtcMetrics/index.ts +0 -124
  503. package/src/webinar/collection.ts +0 -31
  504. package/src/webinar/index.ts +0 -62
  505. package/test/integration/spec/converged-space-meetings.js +0 -233
  506. package/test/unit/spec/annotation/index.ts +0 -418
  507. package/test/unit/spec/breakouts/breakout.ts +0 -237
  508. package/test/unit/spec/breakouts/collection.ts +0 -15
  509. package/test/unit/spec/breakouts/edit-lock-error.ts +0 -30
  510. package/test/unit/spec/breakouts/events.ts +0 -89
  511. package/test/unit/spec/breakouts/index.ts +0 -1790
  512. package/test/unit/spec/breakouts/request.ts +0 -104
  513. package/test/unit/spec/breakouts/utils.js +0 -72
  514. package/test/unit/spec/interceptors/locusRetry.ts +0 -131
  515. package/test/unit/spec/interpretation/collection.ts +0 -15
  516. package/test/unit/spec/interpretation/index.ts +0 -589
  517. package/test/unit/spec/interpretation/siLanguage.ts +0 -28
  518. package/test/unit/spec/locus-info/mediaSharesUtils.ts +0 -32
  519. package/test/unit/spec/media/index.ts +0 -290
  520. package/test/unit/spec/meeting/locusMediaRequest.ts +0 -442
  521. package/test/unit/spec/meeting-info/index.js +0 -300
  522. package/test/unit/spec/multistream/mediaRequestManager.ts +0 -1418
  523. package/test/unit/spec/multistream/receiveSlot.ts +0 -163
  524. package/test/unit/spec/multistream/receiveSlotManager.ts +0 -203
  525. package/test/unit/spec/multistream/remoteMedia.ts +0 -255
  526. package/test/unit/spec/multistream/remoteMediaGroup.ts +0 -662
  527. package/test/unit/spec/multistream/remoteMediaManager.ts +0 -1924
  528. package/test/unit/spec/multistream/sendSlotManager.ts +0 -242
  529. package/test/unit/spec/reachability/clusterReachability.ts +0 -279
  530. package/test/unit/spec/reachability/request.js +0 -68
  531. package/test/unit/spec/reachability/util.ts +0 -40
  532. package/test/unit/spec/roap/request.ts +0 -255
  533. package/test/unit/spec/rtcMetrics/index.ts +0 -93
  534. package/test/unit/spec/webinar/collection.ts +0 -13
  535. package/test/unit/spec/webinar/index.ts +0 -60
  536. package/test/utils/constants.js +0 -9
  537. package/test/utils/integrationTestUtils.js +0 -46
  538. /package/dist/common/errors/{reclaim-host-role-errors.d.ts → reclaim-host-role-error.d.ts} +0 -0
  539. /package/src/common/errors/{reclaim-host-role-errors.ts → reclaim-host-role-error.ts} +0 -0
@@ -1,662 +0,0 @@
1
- import EventEmitter from 'events';
2
-
3
- import {MediaType} from '@webex/internal-media-core';
4
- import {RemoteMediaGroup} from '@webex/plugin-meetings/src/multistream/remoteMediaGroup';
5
- import {RemoteMedia} from '@webex/plugin-meetings/src/multistream/remoteMedia';
6
- import {ReceiveSlot} from '@webex/plugin-meetings/src/multistream/receiveSlot';
7
- import sinon from 'sinon';
8
- import {assert} from '@webex/test-helper-chai';
9
-
10
- class FakeSlot extends EventEmitter {
11
- public mediaType: MediaType;
12
-
13
- public id: string;
14
-
15
- constructor(mediaType: MediaType, id: string) {
16
- super();
17
- this.mediaType = mediaType;
18
- this.id = id;
19
- }
20
- }
21
-
22
- describe('RemoteMediaGroup', () => {
23
- const NUM_SLOTS = 10;
24
-
25
- let fakeMediaRequestManager;
26
- let fakeReceiveSlots;
27
-
28
- let activeSpeakerRequestCounter;
29
- let receiverSelectedRequestCounter;
30
-
31
- beforeEach(() => {
32
- activeSpeakerRequestCounter = 0;
33
- receiverSelectedRequestCounter = 0;
34
-
35
- fakeMediaRequestManager = {
36
- addRequest: sinon.stub().callsFake((mediaRequest) => {
37
- if (mediaRequest.policyInfo.policy === 'active-speaker') {
38
- activeSpeakerRequestCounter += 1;
39
-
40
- return `fake active speaker request ${activeSpeakerRequestCounter}`;
41
- }
42
- receiverSelectedRequestCounter += 1;
43
-
44
- return `fake receiver selected request ${receiverSelectedRequestCounter}`;
45
- }),
46
- cancelRequest: sinon.stub(),
47
- commit: sinon.stub(),
48
- };
49
-
50
- fakeReceiveSlots = Array(NUM_SLOTS)
51
- .fill(null)
52
- .map((_, index) => new FakeSlot(MediaType.VideoMain, `fake receive slot ${index}`));
53
- });
54
-
55
- const getLastActiveSpeakerRequestId = () =>
56
- `fake active speaker request ${activeSpeakerRequestCounter}`;
57
-
58
- const resetHistory = () => {
59
- fakeMediaRequestManager.addRequest.resetHistory();
60
- fakeMediaRequestManager.cancelRequest.resetHistory();
61
- fakeMediaRequestManager.commit.resetHistory();
62
- };
63
-
64
- describe('constructor', () => {
65
- it('creates a list or RemoteMedia objects and sends the active speaker media request', () => {
66
- const group = new RemoteMediaGroup(fakeMediaRequestManager, fakeReceiveSlots, 211, true, {
67
- resolution: 'medium',
68
- preferLiveVideo: true,
69
- });
70
-
71
- assert.strictEqual(group.getRemoteMedia().length, NUM_SLOTS);
72
- assert.strictEqual(group.getRemoteMedia('all').length, NUM_SLOTS);
73
- assert.strictEqual(group.getRemoteMedia('unpinned').length, NUM_SLOTS);
74
- assert.strictEqual(group.getRemoteMedia('pinned').length, 0);
75
-
76
- assert.strictEqual(
77
- group.getRemoteMedia('all').every((item) => item instanceof RemoteMedia),
78
- true
79
- );
80
-
81
- assert.calledOnce(fakeMediaRequestManager.addRequest);
82
- assert.calledWith(
83
- fakeMediaRequestManager.addRequest,
84
- sinon.match({
85
- policyInfo: sinon.match({
86
- policy: 'active-speaker',
87
- priority: 211,
88
- }),
89
- receiveSlots: fakeReceiveSlots,
90
- codecInfo: sinon.match({
91
- codec: 'h264',
92
- maxFs: 3600,
93
- }),
94
- }),
95
- true
96
- );
97
- });
98
- });
99
-
100
- describe('setPreferLiveVideo', () => {
101
- it('updates prefer live video', () => {
102
-
103
- const group = new RemoteMediaGroup(fakeMediaRequestManager, fakeReceiveSlots, 255, true, {
104
- resolution: 'medium',
105
- preferLiveVideo: false,
106
- });
107
- fakeMediaRequestManager.addRequest.resetHistory();
108
- group.setPreferLiveVideo(true, false);
109
-
110
- assert.calledOnce(fakeMediaRequestManager.cancelRequest);
111
-
112
- assert.calledOnce(fakeMediaRequestManager.addRequest);
113
-
114
- assert.calledWith(
115
- fakeMediaRequestManager.addRequest,
116
- sinon.match({
117
- policyInfo: sinon.match({
118
- policy: 'active-speaker',
119
- priority: 255,
120
- preferLiveVideo: true
121
- }),
122
- receiveSlots: fakeReceiveSlots,
123
- codecInfo: sinon.match({
124
- codec: 'h264',
125
- maxFs: 3600,
126
- }),
127
- }),
128
- false,
129
- );
130
- });
131
-
132
- it('does not call add request when prefer live video has not changed', () => {
133
- const group = new RemoteMediaGroup(fakeMediaRequestManager, fakeReceiveSlots, 255, true, {
134
- resolution: 'medium',
135
- preferLiveVideo: true,
136
- });
137
- fakeMediaRequestManager.addRequest.resetHistory();
138
- group.setPreferLiveVideo(true, false);
139
-
140
- assert.notCalled(fakeMediaRequestManager.cancelRequest);
141
-
142
- assert.notCalled(fakeMediaRequestManager.addRequest);
143
- });
144
-
145
- });
146
-
147
- describe('setActiveSpeakerCsis', () => {
148
- it('checks when there is a csi and remote media is not in pinned array', () => {
149
- const PINNED_INDEX = 2;
150
- const CSI = 11111;
151
-
152
- const group = new RemoteMediaGroup(fakeMediaRequestManager, fakeReceiveSlots, 255, true, {
153
- resolution: 'medium',
154
- preferLiveVideo: true,
155
- });
156
-
157
- // initially nothing should be pinned
158
- assert.strictEqual(group.getRemoteMedia().length, NUM_SLOTS); // by default should return 'all'
159
- assert.strictEqual(group.getRemoteMedia('all').length, NUM_SLOTS);
160
- assert.strictEqual(group.getRemoteMedia('unpinned').length, NUM_SLOTS);
161
- assert.strictEqual(group.getRemoteMedia('pinned').length, 0);
162
-
163
- const remoteMedia = group.getRemoteMedia('all')[PINNED_INDEX];
164
-
165
- resetHistory();
166
-
167
- group.setActiveSpeakerCsis([{remoteMedia, csi: CSI}], false);
168
-
169
- assert.strictEqual(group.getRemoteMedia().length, NUM_SLOTS); // by default should return 'all'
170
- assert.strictEqual(group.getRemoteMedia('all').length, NUM_SLOTS);
171
- assert.strictEqual(group.getRemoteMedia('unpinned').length, NUM_SLOTS - 1);
172
- assert.strictEqual(group.getRemoteMedia('pinned').length, 1);
173
-
174
- assert.strictEqual(group.isPinned(remoteMedia), true);
175
- // now check that correct media requests were sent...
176
-
177
- const expectedReceiverSelectedSlots = [fakeReceiveSlots[PINNED_INDEX]];
178
- const expectedActiveSpeakerReceiveSlots = fakeReceiveSlots.filter(
179
- (_, idx) => idx !== PINNED_INDEX
180
- );
181
-
182
- // the previous active speaker media request for the group should have been cancelled
183
- assert.calledOnce(fakeMediaRequestManager.cancelRequest);
184
- assert.calledWith(fakeMediaRequestManager.cancelRequest, 'fake active speaker request 1');
185
- // a new one should be sent for active speaker and for receiver selected
186
- assert.calledTwice(fakeMediaRequestManager.addRequest);
187
- assert.calledWith(
188
- fakeMediaRequestManager.addRequest,
189
- sinon.match({
190
- policyInfo: sinon.match({
191
- policy: 'active-speaker',
192
- priority: 255,
193
- }),
194
- receiveSlots: expectedActiveSpeakerReceiveSlots,
195
- codecInfo: sinon.match({
196
- codec: 'h264',
197
- maxFs: 3600,
198
- }),
199
- })
200
- );
201
- assert.calledWith(
202
- fakeMediaRequestManager.addRequest,
203
- sinon.match({
204
- policyInfo: sinon.match({
205
- policy: 'receiver-selected',
206
- csi: CSI,
207
- }),
208
- receiveSlots: expectedReceiverSelectedSlots,
209
- codecInfo: sinon.match({
210
- codec: 'h264',
211
- maxFs: 3600,
212
- }),
213
- })
214
- );
215
- assert.notCalled(fakeMediaRequestManager.commit);
216
- });
217
-
218
- it('checks when there is csi and remoteMedia is in pinned array', () => {
219
- const PINNED_INDEX = 4;
220
-
221
- const group = new RemoteMediaGroup(fakeMediaRequestManager, fakeReceiveSlots, 255, true, {
222
- resolution: 'medium',
223
- preferLiveVideo: true,
224
- });
225
-
226
- // take one instance of remote media from the group
227
- const remoteMedia = group.getRemoteMedia('all')[PINNED_INDEX];
228
-
229
- resetHistory();
230
-
231
- // pin it so that it is in pinned array
232
- group.setActiveSpeakerCsis([{remoteMedia, csi: 1234}], false);
233
-
234
- assert.strictEqual(group.getRemoteMedia().length, NUM_SLOTS); // by default should return 'all'
235
- assert.strictEqual(group.getRemoteMedia('all').length, NUM_SLOTS);
236
- assert.strictEqual(group.getRemoteMedia('unpinned').length, NUM_SLOTS - 1);
237
- assert.strictEqual(group.getRemoteMedia('pinned').length, 1);
238
-
239
- resetHistory();
240
- // normally this would result in the underlying receive slot csi to be updated, because we're using fake
241
- // receive slots, we have to do that manually:
242
- fakeReceiveSlots[PINNED_INDEX].csi = 1234;
243
- const expectedReceiverSelectedSlots = [fakeReceiveSlots[PINNED_INDEX]];
244
-
245
- // pin again to same CSI
246
- group.setActiveSpeakerCsis([{remoteMedia, csi: 1234}], false);
247
-
248
- assert.strictEqual(group.getRemoteMedia().length, NUM_SLOTS); // by default should return 'all'
249
- assert.strictEqual(group.getRemoteMedia('all').length, NUM_SLOTS);
250
- assert.strictEqual(group.getRemoteMedia('unpinned').length, NUM_SLOTS - 1);
251
- assert.strictEqual(group.getRemoteMedia('pinned').length, 1);
252
-
253
- assert.strictEqual(group.isPinned(remoteMedia), true);
254
-
255
- assert.calledTwice(fakeMediaRequestManager.cancelRequest);
256
- assert.calledWith(fakeMediaRequestManager.cancelRequest, 'fake receiver selected request 1');
257
-
258
- assert.calledWith(
259
- fakeMediaRequestManager.addRequest,
260
- sinon.match({
261
- policyInfo: sinon.match({
262
- policy: 'receiver-selected',
263
- csi: 1234,
264
- }),
265
- receiveSlots: expectedReceiverSelectedSlots,
266
- codecInfo: sinon.match({
267
- codec: 'h264',
268
- maxFs: 3600,
269
- }),
270
- })
271
- );
272
- assert.notCalled(fakeMediaRequestManager.commit);
273
- });
274
-
275
- it('checks setActiveSpeakerCsis with array of remoteMedia to pin and unpin', () => {
276
- const PINNED_INDEX = 2;
277
- const PINNED_INDEX2 = 0;
278
- const CSI = 11111;
279
- const CSI2 = 12345;
280
-
281
- const group = new RemoteMediaGroup(fakeMediaRequestManager, fakeReceiveSlots, 255, true, {
282
- resolution: 'medium',
283
- preferLiveVideo: true,
284
- });
285
-
286
- // initially nothing should be pinned
287
- assert.strictEqual(group.getRemoteMedia().length, NUM_SLOTS); // by default should return 'all'
288
- assert.strictEqual(group.getRemoteMedia('all').length, NUM_SLOTS);
289
- assert.strictEqual(group.getRemoteMedia('unpinned').length, NUM_SLOTS);
290
- assert.strictEqual(group.getRemoteMedia('pinned').length, 0);
291
-
292
- const remoteMedia = group.getRemoteMedia('all')[PINNED_INDEX];
293
-
294
- const remoteMedia2 = group.getRemoteMedia('all')[PINNED_INDEX2];
295
-
296
- const remoteMedisCsis = [{remoteMedia, csi: CSI}, {remoteMedia: remoteMedia2, csi: CSI2}];
297
-
298
- group.setActiveSpeakerCsis(remoteMedisCsis, false);
299
-
300
- assert.strictEqual(group.getRemoteMedia().length, NUM_SLOTS);
301
- assert.strictEqual(group.getRemoteMedia('all').length, NUM_SLOTS);
302
- assert.strictEqual(group.getRemoteMedia('unpinned').length, NUM_SLOTS - 2);
303
- assert.strictEqual(group.getRemoteMedia('pinned').length, 2);
304
-
305
- assert.strictEqual(group.isPinned(remoteMedia), true);
306
- assert.strictEqual(group.isPinned(remoteMedia2), true);
307
-
308
- resetHistory();
309
-
310
- group.setActiveSpeakerCsis([{remoteMedia}], false);
311
-
312
- // one pane should still remain pinned
313
- assert.strictEqual(group.getRemoteMedia().length, NUM_SLOTS);
314
- assert.strictEqual(group.getRemoteMedia('all').length, NUM_SLOTS);
315
- assert.strictEqual(group.getRemoteMedia('unpinned').length, NUM_SLOTS - 1);
316
- assert.strictEqual(group.getRemoteMedia('pinned').length, 1);
317
- assert.strictEqual(group.isPinned(remoteMedia), false);
318
- assert.strictEqual(group.isPinned(remoteMedia2), true);
319
-
320
- assert.calledTwice(fakeMediaRequestManager.cancelRequest);
321
- assert.calledWith(fakeMediaRequestManager.cancelRequest, 'fake receiver selected request 1');
322
- assert.notCalled(fakeMediaRequestManager.commit);
323
- });
324
-
325
- it('check commit is only called once', () => {
326
- const PINNED_INDEX = 2;
327
- const PINNED_INDEX2 = 0;
328
- const CSI = 11111;
329
- const CSI2 = 12345;
330
-
331
- const group = new RemoteMediaGroup(fakeMediaRequestManager, fakeReceiveSlots, 255, true, {
332
- resolution: 'medium',
333
- preferLiveVideo: true,
334
- });
335
-
336
- const remoteMedia = group.getRemoteMedia('all')[PINNED_INDEX];
337
-
338
- resetHistory();
339
-
340
- const remoteMedia2 = group.getRemoteMedia('all')[PINNED_INDEX2];
341
-
342
- const remoteMedisCsis = [{remoteMedia, csi: CSI}, {remoteMedia: remoteMedia2, csi: CSI2}, {remoteMedia}];
343
-
344
- group.setActiveSpeakerCsis(remoteMedisCsis, true);
345
-
346
- assert.calledOnce(fakeMediaRequestManager.commit);
347
- });
348
-
349
- it('throws when remoteMedia id is not in unpinned and pinned array - csi is there', () => {
350
- const group = new RemoteMediaGroup(fakeMediaRequestManager, fakeReceiveSlots, 255, true, {
351
- resolution: 'medium',
352
- preferLiveVideo: true,
353
- });
354
- assert.throws(() => group.setActiveSpeakerCsis([{remoteMedia: {id: 'r1'} as any, csi: 123}], false), 'failed to pin a remote media object r1, because it is not found in this remote media group');
355
- });
356
-
357
- it('throws when remoteMedia id is not in unpinned and pinned array - csi is not there', () => {
358
- const group = new RemoteMediaGroup(fakeMediaRequestManager, fakeReceiveSlots, 255, true, {
359
- resolution: 'medium',
360
- preferLiveVideo: true,
361
- });
362
- assert.throws(() => group.setActiveSpeakerCsis([{remoteMedia: {id: 'r1'} as any}], false), 'failed to unpin a remote media object r1, because it is not found in this remote media group');
363
- });
364
- });
365
-
366
- describe('pinning', () => {
367
- it('works as expected', () => {
368
- const PINNED_INDEX = 2;
369
- const PINNED_INDEX2 = 0;
370
- const CSI = 11111;
371
- const CSI2 = 12345;
372
-
373
- const group = new RemoteMediaGroup(fakeMediaRequestManager, fakeReceiveSlots, 255, true, {
374
- resolution: 'medium',
375
- preferLiveVideo: true,
376
- });
377
-
378
- // initially nothing should be pinned
379
- assert.strictEqual(group.getRemoteMedia().length, NUM_SLOTS); // by default should return 'all'
380
- assert.strictEqual(group.getRemoteMedia('all').length, NUM_SLOTS);
381
- assert.strictEqual(group.getRemoteMedia('unpinned').length, NUM_SLOTS);
382
- assert.strictEqual(group.getRemoteMedia('pinned').length, 0);
383
-
384
- // take one instance of remote media from the group
385
- const remoteMedia = group.getRemoteMedia('all')[PINNED_INDEX];
386
-
387
- resetHistory();
388
-
389
- // pin it
390
- group.pin(remoteMedia, CSI);
391
-
392
- assert.strictEqual(group.getRemoteMedia().length, NUM_SLOTS); // by default should return 'all'
393
- assert.strictEqual(group.getRemoteMedia('all').length, NUM_SLOTS);
394
- assert.strictEqual(group.getRemoteMedia('unpinned').length, NUM_SLOTS - 1);
395
- assert.strictEqual(group.getRemoteMedia('pinned').length, 1);
396
-
397
- assert.strictEqual(group.isPinned(remoteMedia), true);
398
-
399
- // now check that correct media requests were sent...
400
-
401
- const expectedReceiverSelectedSlots = [fakeReceiveSlots[PINNED_INDEX]];
402
- const expectedActiveSpeakerReceiveSlots = fakeReceiveSlots.filter(
403
- (_, idx) => idx !== PINNED_INDEX
404
- );
405
-
406
- // the previous active speaker media request for the group should have been cancelled
407
- assert.calledOnce(fakeMediaRequestManager.cancelRequest);
408
- assert.calledWith(fakeMediaRequestManager.cancelRequest, 'fake active speaker request 1');
409
- // a new one should be sent for active speaker and for receiver selected
410
- assert.calledTwice(fakeMediaRequestManager.addRequest);
411
- assert.calledWith(
412
- fakeMediaRequestManager.addRequest,
413
- sinon.match({
414
- policyInfo: sinon.match({
415
- policy: 'active-speaker',
416
- priority: 255,
417
- }),
418
- receiveSlots: expectedActiveSpeakerReceiveSlots,
419
- codecInfo: sinon.match({
420
- codec: 'h264',
421
- maxFs: 3600,
422
- }),
423
- })
424
- );
425
- assert.calledWith(
426
- fakeMediaRequestManager.addRequest,
427
- sinon.match({
428
- policyInfo: sinon.match({
429
- policy: 'receiver-selected',
430
- csi: CSI,
431
- }),
432
- receiveSlots: expectedReceiverSelectedSlots,
433
- codecInfo: sinon.match({
434
- codec: 'h264',
435
- maxFs: 3600,
436
- }),
437
- })
438
- );
439
-
440
- resetHistory();
441
-
442
- // pin another video
443
- const remoteMedia2 = group.getRemoteMedia('all')[PINNED_INDEX2];
444
-
445
- group.pin(remoteMedia2, CSI2);
446
-
447
- assert.strictEqual(group.getRemoteMedia().length, NUM_SLOTS);
448
- assert.strictEqual(group.getRemoteMedia('all').length, NUM_SLOTS);
449
- assert.strictEqual(group.getRemoteMedia('unpinned').length, NUM_SLOTS - 2);
450
- assert.strictEqual(group.getRemoteMedia('pinned').length, 2);
451
-
452
- assert.strictEqual(group.isPinned(remoteMedia2), true);
453
-
454
- // now check that correct media requests were sent...
455
- const expectedReceiverSelectedSlots2 = [fakeReceiveSlots[PINNED_INDEX2]];
456
- const expectedActiveSpeakerReceiveSlots2 = fakeReceiveSlots.filter(
457
- (_, idx) => idx !== PINNED_INDEX && idx !== PINNED_INDEX2
458
- );
459
-
460
- // the previous active speaker media request for the group should have been cancelled
461
- assert.calledOnce(fakeMediaRequestManager.cancelRequest);
462
- assert.calledWith(fakeMediaRequestManager.cancelRequest, 'fake active speaker request 2');
463
- // a new one should be sent for active speaker and for receiver selected
464
- assert.calledTwice(fakeMediaRequestManager.addRequest);
465
- assert.calledWith(
466
- fakeMediaRequestManager.addRequest,
467
- sinon.match({
468
- policyInfo: sinon.match({
469
- policy: 'active-speaker',
470
- priority: 255,
471
- }),
472
- receiveSlots: expectedActiveSpeakerReceiveSlots2,
473
- codecInfo: sinon.match({
474
- codec: 'h264',
475
- maxFs: 3600,
476
- }),
477
- })
478
- );
479
- assert.calledWith(
480
- fakeMediaRequestManager.addRequest,
481
- sinon.match({
482
- policyInfo: sinon.match({
483
- policy: 'receiver-selected',
484
- csi: CSI2,
485
- }),
486
- receiveSlots: expectedReceiverSelectedSlots2,
487
- codecInfo: sinon.match({
488
- codec: 'h264',
489
- maxFs: 3600,
490
- }),
491
- })
492
- );
493
-
494
- resetHistory();
495
-
496
- // now unpin the video pane that was first pinned
497
- group.unpin(remoteMedia);
498
-
499
- // one pane should still remain pinned
500
- assert.strictEqual(group.getRemoteMedia().length, NUM_SLOTS);
501
- assert.strictEqual(group.getRemoteMedia('all').length, NUM_SLOTS);
502
- assert.strictEqual(group.getRemoteMedia('unpinned').length, NUM_SLOTS - 1);
503
- assert.strictEqual(group.getRemoteMedia('pinned').length, 1);
504
-
505
- assert.strictEqual(group.isPinned(remoteMedia), false);
506
-
507
- // the previous requests for the group and the individual remote media should have been cancelled
508
- assert.calledTwice(fakeMediaRequestManager.cancelRequest);
509
- assert.calledWith(fakeMediaRequestManager.cancelRequest, 'fake active speaker request 3');
510
- assert.calledWith(fakeMediaRequestManager.cancelRequest, 'fake receiver selected request 1');
511
-
512
- // a new one should be sent for active speaker
513
- assert.calledOnce(fakeMediaRequestManager.addRequest);
514
- assert.calledWith(
515
- fakeMediaRequestManager.addRequest,
516
- sinon.match({
517
- policyInfo: sinon.match({
518
- policy: 'active-speaker',
519
- priority: 255,
520
- }),
521
- codecInfo: sinon.match({
522
- codec: 'h264',
523
- maxFs: 3600,
524
- }),
525
- })
526
- );
527
- // checking that the receiveSlots array passed in to addRequest() has the right length without
528
- // being strict on the order of elements in it:
529
- const receiveSlotsArg = fakeMediaRequestManager.addRequest.getCall(0).args[0].receiveSlots;
530
-
531
- assert.strictEqual(receiveSlotsArg.length, fakeReceiveSlots.length - 1);
532
- });
533
-
534
- it('works as expected when pin() is called on already pinned RemoteMedia', () => {
535
- const PINNED_INDEX = 4;
536
-
537
- const group = new RemoteMediaGroup(fakeMediaRequestManager, fakeReceiveSlots, 255, true, {
538
- resolution: 'medium',
539
- preferLiveVideo: true,
540
- });
541
-
542
- // take one instance of remote media from the group
543
- const remoteMedia = group.getRemoteMedia('all')[PINNED_INDEX];
544
-
545
- resetHistory();
546
-
547
- // pin it
548
- group.pin(remoteMedia, 1234);
549
-
550
- resetHistory();
551
- // normally this would result in the underlying receive slot csi to be updated, because we're using fake
552
- // receive slots, we have to do that manually:
553
- fakeReceiveSlots[PINNED_INDEX].csi = 1234;
554
-
555
- // pin again to same CSI
556
- group.pin(remoteMedia, 1234);
557
-
558
- assert.notCalled(fakeMediaRequestManager.addRequest);
559
- assert.notCalled(fakeMediaRequestManager.cancelRequest);
560
- assert.notCalled(fakeMediaRequestManager.commit);
561
-
562
- // again, this time without even specifying the csi
563
- group.pin(remoteMedia);
564
-
565
- assert.notCalled(fakeMediaRequestManager.addRequest);
566
- assert.notCalled(fakeMediaRequestManager.cancelRequest);
567
- assert.notCalled(fakeMediaRequestManager.commit);
568
-
569
- // pin it again but to a different CSI
570
- group.pin(remoteMedia, 2345);
571
-
572
- // it should trigger a new receiver selected media request
573
- assert.calledOnce(fakeMediaRequestManager.addRequest);
574
- assert.calledWith(
575
- fakeMediaRequestManager.addRequest,
576
- sinon.match({
577
- policyInfo: sinon.match({
578
- policy: 'receiver-selected',
579
- csi: 2345,
580
- }),
581
- receiveSlots: [fakeReceiveSlots[PINNED_INDEX]],
582
- codecInfo: sinon.match({
583
- codec: 'h264',
584
- maxFs: 3600,
585
- }),
586
- })
587
- );
588
- });
589
- });
590
-
591
- describe('stop()', () => {
592
- it('stops all RemoteMedia in the group', () => {
593
- const group = new RemoteMediaGroup(fakeMediaRequestManager, fakeReceiveSlots, 255, true, {
594
- resolution: 'medium',
595
- preferLiveVideo: true,
596
- });
597
- const stopStubs: any[] = [];
598
-
599
- group.getRemoteMedia('all').forEach((remoteMedia) => {
600
- stopStubs.push(sinon.stub(remoteMedia, 'stop'));
601
- });
602
-
603
- // pin a few remote media instances
604
- group.pin(group.getRemoteMedia('unpinned')[2], 12345);
605
- group.pin(group.getRemoteMedia('unpinned')[1], 12345);
606
- group.pin(group.getRemoteMedia('unpinned')[0], 12345);
607
-
608
- assert.strictEqual(group.getRemoteMedia('unpinned').length, NUM_SLOTS - 3);
609
- assert.strictEqual(group.getRemoteMedia('pinned').length, 3);
610
-
611
- resetHistory();
612
-
613
- group.stop(true);
614
-
615
- // check that all remote media (including pinned ones) have been stopped
616
- stopStubs.forEach((stub) => {
617
- assert.calledOnce(stub);
618
- assert.calledWith(stub, false);
619
- });
620
-
621
- // and that we've cancelled the media request for this group
622
- assert.calledOnce(fakeMediaRequestManager.cancelRequest);
623
- assert.calledWith(fakeMediaRequestManager.cancelRequest, getLastActiveSpeakerRequestId());
624
- assert.calledOnce(fakeMediaRequestManager.commit);
625
- });
626
- });
627
-
628
- describe('includes()', () => {
629
- it('checks if a given RemoteMedia belongs to the group', () => {
630
- const group = new RemoteMediaGroup(fakeMediaRequestManager, fakeReceiveSlots, 255, true, {
631
- resolution: 'medium',
632
- preferLiveVideo: true,
633
- });
634
-
635
- const unpinnedRemoteMediaFromGroup = group.getRemoteMedia('all')[0];
636
- const otherRemoteMedia = new RemoteMedia(
637
- new FakeSlot(MediaType.VideoMain, 'other slot') as unknown as ReceiveSlot,
638
- fakeMediaRequestManager
639
- );
640
-
641
- group.pin(group.getRemoteMedia('all')[1], 12345);
642
- const pinnedRemoteMedia = group.getRemoteMedia('pinned')[0];
643
-
644
- // by default includes() uses 'all' filter
645
- assert.strictEqual(group.includes(unpinnedRemoteMediaFromGroup), true);
646
- assert.strictEqual(group.includes(otherRemoteMedia), false);
647
- assert.strictEqual(group.includes(pinnedRemoteMedia), true);
648
-
649
- assert.strictEqual(group.includes(unpinnedRemoteMediaFromGroup, 'all'), true);
650
- assert.strictEqual(group.includes(otherRemoteMedia, 'all'), false);
651
- assert.strictEqual(group.includes(pinnedRemoteMedia, 'all'), true);
652
-
653
- assert.strictEqual(group.includes(unpinnedRemoteMediaFromGroup, 'pinned'), false);
654
- assert.strictEqual(group.includes(otherRemoteMedia, 'pinned'), false);
655
- assert.strictEqual(group.includes(pinnedRemoteMedia, 'pinned'), true);
656
-
657
- assert.strictEqual(group.includes(unpinnedRemoteMediaFromGroup, 'unpinned'), true);
658
- assert.strictEqual(group.includes(pinnedRemoteMedia, 'unpinned'), false);
659
- assert.strictEqual(group.includes(otherRemoteMedia, 'unpinned'), false);
660
- });
661
- });
662
- });