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

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
@@ -4,12 +4,13 @@ import TurnDiscovery from '@webex/plugin-meetings/src/roap/turnDiscovery';
4
4
 
5
5
  import RoapRequest from '@webex/plugin-meetings/src/roap/request';
6
6
  import Roap from '@webex/plugin-meetings/src/roap/';
7
+ import Meeting from '@webex/plugin-meetings/src/meeting';
7
8
 
8
9
  describe('Roap', () => {
9
10
  describe('doTurnDiscovery', () => {
10
11
  it('calls this.turnDiscovery.doTurnDiscovery() and forwards all the arguments', async () => {
11
12
  const RESULT = {something: 'some value'};
12
- const meeting = {id: 'some meeting id'};
13
+ const meeting = {id: 'some meeting id'} as Meeting;
13
14
 
14
15
  const doTurnDiscoveryStub = sinon
15
16
  .stub(TurnDiscovery.prototype, 'doTurnDiscovery')
@@ -0,0 +1,114 @@
1
+ import {assert} from '@webex/test-helper-chai';
2
+ import sinon from 'sinon';
3
+ import MockWebex from '@webex/test-helper-mock-webex';
4
+ import Metrics from '@webex/plugin-meetings/src/metrics';
5
+
6
+ import RoapRequest from '@webex/plugin-meetings/src/roap/request';
7
+
8
+
9
+ describe('RoapRequest', () => {
10
+ describe('attachRechabilityData', () => {
11
+ let webex;
12
+
13
+ beforeEach(() => {
14
+ webex = new MockWebex();
15
+ });
16
+
17
+ it('attaches the reachability data when it exists', async () => {
18
+ // @ts-ignore
19
+ const roapRequest = new RoapRequest({}, {parent: webex});
20
+
21
+ const sdp = {some: 'attribute'};
22
+
23
+ const reachabilitData = {reachability: 'data'};
24
+
25
+ await webex.boundedStorage.put(
26
+ 'Reachability',
27
+ 'reachability.result',
28
+ JSON.stringify(reachabilitData)
29
+ );
30
+
31
+ const newSdp = await roapRequest.attachRechabilityData(sdp);
32
+
33
+ assert.deepEqual(newSdp, {
34
+ some: 'attribute',
35
+ reachability: reachabilitData
36
+ })
37
+ });
38
+
39
+ it('handles the case when realiability data does not exist', async () => {
40
+ // @ts-ignore
41
+ const roapRequest = new RoapRequest({}, {parent: webex});
42
+
43
+ const sdp = {some: 'attribute'};
44
+
45
+ const newSdp = await roapRequest.attachRechabilityData(sdp);
46
+
47
+ assert.deepEqual(newSdp, sdp);
48
+ });
49
+ });
50
+
51
+ describe('sendRoap', () => {
52
+ let webex;
53
+
54
+ beforeEach(() => {
55
+ webex = new MockWebex();
56
+ });
57
+
58
+ it('calls attachReliabilityData', async () => {
59
+ Metrics.postEvent = sinon.stub();
60
+
61
+ // @ts-ignore
62
+ const roapRequest = new RoapRequest({}, {parent: webex});
63
+
64
+ const newSdp = {new: 'sdp'}
65
+
66
+ roapRequest.attachRechabilityData = sinon.stub().returns(Promise.resolve(newSdp));
67
+ webex.request.returns(Promise.resolve({
68
+ body: {
69
+ locus: {}
70
+ }
71
+ }))
72
+
73
+ const result = await roapRequest.sendRoap({
74
+ roapMessage: {seq: 1},
75
+ locusSelfUrl: 'locusSelfUrl',
76
+ mediaId: 'mediaId',
77
+ correlationId: 'correlationId',
78
+ audioMuted: true,
79
+ videoMuted: true,
80
+ meetingId: 'meetingId',
81
+ preferTranscoding: true
82
+ });
83
+
84
+ assert.calledOnceWithExactly(webex.request, {
85
+ uri: 'locusSelfUrl/media',
86
+ method: 'PUT',
87
+ body: {
88
+ device: {
89
+ url: undefined,
90
+ deviceType: undefined,
91
+ },
92
+ correlationId: 'correlationId',
93
+ localMedias: [{
94
+ localSdp: JSON.stringify(newSdp),
95
+ mediaId: 'mediaId'
96
+ }],
97
+ clientMediaPreferences: {preferTranscoding: true}
98
+ },
99
+ });
100
+
101
+ assert.calledOnceWithExactly(roapRequest.attachRechabilityData, {
102
+ roapMessage: {seq: 1},
103
+ audioMuted: true,
104
+ videoMuted: true
105
+ })
106
+
107
+ assert.deepEqual(result, {
108
+ locus: {
109
+ roapSeq: 1
110
+ }
111
+ });
112
+ });
113
+ })
114
+ });
@@ -25,15 +25,15 @@ describe('TurnDiscovery', () => {
25
25
  sinon.stub(Metrics, 'sendBehavioralMetric');
26
26
 
27
27
  mockRoapRequest = {
28
- sendRoap: sinon.fake.resolves({mediaConnections: FAKE_MEDIA_CONNECTIONS_FROM_LOCUS})
28
+ sendRoap: sinon.fake.resolves({mediaConnections: FAKE_MEDIA_CONNECTIONS_FROM_LOCUS}),
29
29
  } as unknown as RoapRequest;
30
30
 
31
31
  testMeeting = {
32
32
  id: 'fake meeting id',
33
33
  config: {
34
34
  experimental: {
35
- enableTurnDiscovery: true
36
- }
35
+ enableTurnDiscovery: true,
36
+ },
37
37
  },
38
38
  correlationId: 'fake correlation id',
39
39
  selfUrl: 'fake self url',
@@ -46,7 +46,8 @@ describe('TurnDiscovery', () => {
46
46
  testMeeting.roapSeq = newSeq;
47
47
  }),
48
48
  updateMediaConnections: sinon.stub(),
49
- webex: {meetings: {reachability: {isAnyClusterReachable: () => false}}}
49
+ webex: {meetings: {reachability: {isAnyClusterReachable: () => Promise.resolve(false)}}},
50
+ isMultistream: false
50
51
  };
51
52
  });
52
53
 
@@ -55,7 +56,11 @@ describe('TurnDiscovery', () => {
55
56
  sinon.restore();
56
57
  });
57
58
 
58
- const checkRoapMessageSent = async (messageType, expectedSeq, expectedMediaId = testMeeting.mediaId) => {
59
+ const checkRoapMessageSent = async (
60
+ messageType,
61
+ expectedSeq,
62
+ expectedMediaId = testMeeting.mediaId
63
+ ) => {
59
64
  await testUtils.flushPromises();
60
65
 
61
66
  assert.calledOnce(mockRoapRequest.sendRoap);
@@ -70,7 +75,8 @@ describe('TurnDiscovery', () => {
70
75
  mediaId: expectedMediaId,
71
76
  audioMuted: testMeeting.isAudioMuted(),
72
77
  videoMuted: testMeeting.isVideoMuted(),
73
- meetingId: testMeeting.id
78
+ meetingId: testMeeting.id,
79
+ preferTranscoding: !testMeeting.isMultistream
74
80
  });
75
81
 
76
82
  if (messageType === 'TURN_DISCOVERY_REQUEST') {
@@ -93,39 +99,44 @@ describe('TurnDiscovery', () => {
93
99
  };
94
100
 
95
101
  describe('doTurnDiscovery', () => {
96
- it('sends TURN_DISCOVERY_REQUEST, waits for response and sends OK', async () => {
97
- const td = new TurnDiscovery(mockRoapRequest);
102
+ [false, true].forEach(function (enabledMultistream ) {
103
+ it('sends TURN_DISCOVERY_REQUEST'+ (enabledMultistream ? ' when enable Multistream':'') + ', waits for response and sends OK', async () => {
104
+ testMeeting.isMultistream = enabledMultistream;
98
105
 
99
- const result = td.doTurnDiscovery(testMeeting, false);
106
+ const td = new TurnDiscovery(mockRoapRequest);
100
107
 
101
- // check that TURN_DISCOVERY_REQUEST was sent
102
- await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0);
108
+ const result = td.doTurnDiscovery(testMeeting, false);
103
109
 
104
- mockRoapRequest.sendRoap.resetHistory();
110
+ // check that TURN_DISCOVERY_REQUEST was sent
111
+ await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0);
105
112
 
106
- // simulate the response
107
- td.handleTurnDiscoveryResponse({
108
- headers: [
109
- `x-cisco-turn-url=${FAKE_TURN_URL}`,
110
- `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
111
- `x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
112
- ]
113
- });
113
+ // @ts-ignore
114
+ mockRoapRequest.sendRoap.resetHistory();
114
115
 
115
- await testUtils.flushPromises();
116
+ // simulate the response
117
+ td.handleTurnDiscoveryResponse({
118
+ headers: [
119
+ `x-cisco-turn-url=${FAKE_TURN_URL}`,
120
+ `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
121
+ `x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
122
+ ]
123
+ });
116
124
 
117
- // check that we've sent OK
118
- await checkRoapMessageSent('OK', 0);
125
+ await testUtils.flushPromises();
119
126
 
120
- const {turnServerInfo, turnDiscoverySkippedReason} = await result;
127
+ // check that we've sent OK
128
+ await checkRoapMessageSent('OK', 0);
121
129
 
122
- assert.deepEqual(turnServerInfo, {
123
- url: FAKE_TURN_URL,
124
- username: FAKE_TURN_USERNAME,
125
- password: FAKE_TURN_PASSWORD
126
- });
130
+ const {turnServerInfo, turnDiscoverySkippedReason} = await result;
127
131
 
128
- assert.isUndefined(turnDiscoverySkippedReason);
132
+ assert.deepEqual(turnServerInfo, {
133
+ url: FAKE_TURN_URL,
134
+ username: FAKE_TURN_USERNAME,
135
+ password: FAKE_TURN_PASSWORD
136
+ });
137
+
138
+ assert.isUndefined(turnDiscoverySkippedReason);
139
+ });
129
140
  });
130
141
 
131
142
  it('sends TURN_DISCOVERY_REQUEST with empty mediaId when isReconnecting is true', async () => {
@@ -137,6 +148,7 @@ describe('TurnDiscovery', () => {
137
148
  await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0, '');
138
149
 
139
150
  // the main part of the test is complete now, checking the remaining part of the flow just for completeness
151
+ // @ts-ignore
140
152
  mockRoapRequest.sendRoap.resetHistory();
141
153
 
142
154
  // simulate the response
@@ -145,7 +157,7 @@ describe('TurnDiscovery', () => {
145
157
  `x-cisco-turn-url=${FAKE_TURN_URL}`,
146
158
  `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
147
159
  `x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
148
- ]
160
+ ],
149
161
  });
150
162
 
151
163
  await testUtils.flushPromises();
@@ -158,7 +170,7 @@ describe('TurnDiscovery', () => {
158
170
  assert.deepEqual(turnServerInfo, {
159
171
  url: FAKE_TURN_URL,
160
172
  username: FAKE_TURN_USERNAME,
161
- password: FAKE_TURN_PASSWORD
173
+ password: FAKE_TURN_PASSWORD,
162
174
  });
163
175
  assert.isUndefined(turnDiscoverySkippedReason);
164
176
  });
@@ -169,7 +181,7 @@ describe('TurnDiscovery', () => {
169
181
 
170
182
  // check that TURN_DISCOVERY_REQUEST was sent
171
183
  await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0);
172
-
184
+ // @ts-ignore
173
185
  mockRoapRequest.sendRoap.resetHistory();
174
186
 
175
187
  // simulate the response with some extra headers
@@ -181,7 +193,7 @@ describe('TurnDiscovery', () => {
181
193
  `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
182
194
  `x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
183
195
  'another-header-at-the-end=12345',
184
- ]
196
+ ],
185
197
  });
186
198
 
187
199
  await testUtils.flushPromises();
@@ -193,7 +205,7 @@ describe('TurnDiscovery', () => {
193
205
  assert.deepEqual(turnServerInfo, {
194
206
  url: FAKE_TURN_URL,
195
207
  username: FAKE_TURN_USERNAME,
196
- password: FAKE_TURN_PASSWORD
208
+ password: FAKE_TURN_PASSWORD,
197
209
  });
198
210
  assert.isUndefined(turnDiscoverySkippedReason);
199
211
  });
@@ -202,7 +214,7 @@ describe('TurnDiscovery', () => {
202
214
  const prevConfigValue = testMeeting.config.experimental.enableTurnDiscovery;
203
215
 
204
216
  testMeeting.config.experimental.enableTurnDiscovery = false;
205
-
217
+ // @ts-ignore
206
218
  const result = await new TurnDiscovery(mockRoapRequest).doTurnDiscovery(testMeeting);
207
219
 
208
220
  const {turnServerInfo, turnDiscoverySkippedReason} = result;
@@ -232,7 +244,7 @@ describe('TurnDiscovery', () => {
232
244
 
233
245
  it('resolves with undefined when cluster is reachable', async () => {
234
246
  const prev = testMeeting.webex.meetings.reachability.isAnyClusterReachable;
235
- testMeeting.webex.meetings.reachability.isAnyClusterReachable = () => true;
247
+ testMeeting.webex.meetings.reachability.isAnyClusterReachable = () => Promise.resolve(true);
236
248
  const result = await new TurnDiscovery(mockRoapRequest).doTurnDiscovery(testMeeting);
237
249
 
238
250
  const {turnServerInfo, turnDiscoverySkippedReason} = result;
@@ -242,10 +254,9 @@ describe('TurnDiscovery', () => {
242
254
  assert.notCalled(mockRoapRequest.sendRoap);
243
255
  assert.notCalled(Metrics.sendBehavioralMetric);
244
256
  testMeeting.webex.meetings.reachability.isAnyClusterReachable = prev;
245
-
246
257
  });
247
258
 
248
- it('resolves with undefined if we don\'t get a response within 10s', async () => {
259
+ it("resolves with undefined if we don't get a response within 10s", async () => {
249
260
  const td = new TurnDiscovery(mockRoapRequest);
250
261
 
251
262
  const promise = td.doTurnDiscovery(testMeeting, false);
@@ -264,12 +275,14 @@ describe('TurnDiscovery', () => {
264
275
  const td = new TurnDiscovery(mockRoapRequest);
265
276
  const turnDiscoveryPromise = td.doTurnDiscovery(testMeeting, false);
266
277
 
278
+ await testUtils.flushPromises();
279
+
267
280
  // simulate the response without the password
268
281
  td.handleTurnDiscoveryResponse({
269
282
  headers: [
270
283
  `x-cisco-turn-url=${FAKE_TURN_URL}`,
271
284
  `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
272
- ]
285
+ ],
273
286
  });
274
287
  await testUtils.flushPromises();
275
288
  const {turnServerInfo, turnDiscoverySkippedReason} = await turnDiscoveryPromise;
@@ -283,6 +296,8 @@ describe('TurnDiscovery', () => {
283
296
  const td = new TurnDiscovery(mockRoapRequest);
284
297
  const turnDiscoveryPromise = td.doTurnDiscovery(testMeeting, false);
285
298
 
299
+ await testUtils.flushPromises();
300
+
286
301
  // simulate the response without the headers
287
302
  td.handleTurnDiscoveryResponse({});
288
303
 
@@ -298,11 +313,13 @@ describe('TurnDiscovery', () => {
298
313
  const td = new TurnDiscovery(mockRoapRequest);
299
314
  const turnDiscoveryPromise = td.doTurnDiscovery(testMeeting, false);
300
315
 
316
+ await testUtils.flushPromises();
317
+
301
318
  // simulate the response without the headers
302
319
  td.handleTurnDiscoveryResponse({headers: []});
303
320
 
304
321
  await testUtils.flushPromises();
305
- const {turnServerInfo, turnDiscoverySkippedReason}= await turnDiscoveryPromise;
322
+ const {turnServerInfo, turnDiscoverySkippedReason} = await turnDiscoveryPromise;
306
323
 
307
324
  assert.isUndefined(turnServerInfo);
308
325
  assert.isUndefined(turnDiscoverySkippedReason);
@@ -314,9 +331,11 @@ describe('TurnDiscovery', () => {
314
331
 
315
332
  const turnDiscoveryPromise = td.doTurnDiscovery(testMeeting, false);
316
333
 
334
+ await testUtils.flushPromises();
335
+
317
336
  // check that TURN_DISCOVERY_REQUEST was sent
318
337
  await checkRoapMessageSent('TURN_DISCOVERY_REQUEST', 0);
319
-
338
+ // @ts-ignore
320
339
  mockRoapRequest.sendRoap.resetHistory();
321
340
 
322
341
  // setup the mock so that sending of OK fails
@@ -328,7 +347,7 @@ describe('TurnDiscovery', () => {
328
347
  `x-cisco-turn-url=${FAKE_TURN_URL}`,
329
348
  `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
330
349
  `x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
331
- ]
350
+ ],
332
351
  });
333
352
 
334
353
  await testUtils.flushPromises();
@@ -345,7 +364,7 @@ describe('TurnDiscovery', () => {
345
364
  });
346
365
 
347
366
  describe('handleTurnDiscoveryResponse', () => {
348
- it('doesn\'t do anything if turn discovery was not started', () => {
367
+ it("doesn't do anything if turn discovery was not started", () => {
349
368
  const td = new TurnDiscovery(mockRoapRequest);
350
369
 
351
370
  // there is not much we can check, but we mainly want to make
@@ -355,7 +374,7 @@ describe('TurnDiscovery', () => {
355
374
  `x-cisco-turn-url=${FAKE_TURN_URL}`,
356
375
  `x-cisco-turn-username=${FAKE_TURN_USERNAME}`,
357
376
  `x-cisco-turn-password=${FAKE_TURN_PASSWORD}`,
358
- ]
377
+ ],
359
378
  });
360
379
 
361
380
  assert.notCalled(mockRoapRequest.sendRoap);
@@ -2,7 +2,7 @@ import 'jsdom-global/register';
2
2
  import chai from 'chai';
3
3
  import chaiAsPromised from 'chai-as-promised';
4
4
  import sinon from 'sinon';
5
- import {MediaConnection as MC} from '@webex/internal-media-core';
5
+ import {ConnectionState} from '@webex/internal-media-core';
6
6
 
7
7
  import {StatsAnalyzer, EVENTS} from '../../../../src/statsAnalyzer';
8
8
  import NetworkQualityMonitor from '../../../../src/networkQualityMonitor';
@@ -20,31 +20,32 @@ describe('plugin-meetings', () => {
20
20
  let sandBoxSpy;
21
21
 
22
22
  const initialConfig = {
23
- videoPacketLossRatioThreshold: 9
23
+ videoPacketLossRatioThreshold: 9,
24
24
  };
25
25
 
26
26
  const defaultStats = {
27
+ resolutions: {},
27
28
  internal: {
28
- video: {
29
+ 'video-send-1': {
29
30
  send: {
30
- totalPacketsLostOnReceiver: 10
31
- }
32
- }
31
+ totalPacketsLostOnReceiver: 10,
32
+ },
33
+ },
33
34
  },
34
- video: {
35
+ 'video-send-1': {
35
36
  send: {
36
37
  packetsSent: 2,
37
38
  meanRemoteJitter: [],
38
- meanRoundTripTime: []
39
- }
40
- }
39
+ meanRoundTripTime: [],
40
+ },
41
+ },
41
42
  };
42
43
 
43
44
  const statusResult = {
44
45
  type: 'remote-inbound-rtp',
45
46
  packetsLost: 11,
46
47
  rttThreshold: 501,
47
- jitterThreshold: 501
48
+ jitterThreshold: 501,
48
49
  };
49
50
 
50
51
  const sandbox = sinon.createSandbox();
@@ -54,7 +55,10 @@ describe('plugin-meetings', () => {
54
55
 
55
56
  statsAnalyzer = new StatsAnalyzer(initialConfig, networkQualityMonitor, defaultStats);
56
57
 
57
- sandBoxSpy = sandbox.spy(statsAnalyzer.networkQualityMonitor, 'determineUplinkNetworkQuality');
58
+ sandBoxSpy = sandbox.spy(
59
+ statsAnalyzer.networkQualityMonitor,
60
+ 'determineUplinkNetworkQuality'
61
+ );
58
62
  });
59
63
 
60
64
  afterEach(() => {
@@ -62,14 +66,16 @@ describe('plugin-meetings', () => {
62
66
  });
63
67
 
64
68
  it('should trigger determineUplinkNetworkQuality with specific arguments', async () => {
65
- await statsAnalyzer.parseGetStatsResult(statusResult, 'video');
69
+ await statsAnalyzer.parseGetStatsResult(statusResult, 'video-send-1', true);
66
70
 
67
71
  assert.calledOnce(statsAnalyzer.networkQualityMonitor.determineUplinkNetworkQuality);
68
- assert(sandBoxSpy.calledWith({
69
- mediaType: 'video',
70
- remoteRtpResults: statusResult,
71
- statsAnalyzerCurrentStats: statsAnalyzer.statsResults
72
- }));
72
+ assert(
73
+ sandBoxSpy.calledWith({
74
+ mediaType: 'video-send-1',
75
+ remoteRtpResults: statusResult,
76
+ statsAnalyzerCurrentStats: statsAnalyzer.statsResults,
77
+ })
78
+ );
73
79
  });
74
80
  });
75
81
 
@@ -105,52 +111,75 @@ describe('plugin-meetings', () => {
105
111
  // bytesReceived and bytesSent need to be non-zero in order for StatsAnalyzer to parse any other values
106
112
  fakeStats = {
107
113
  audio: {
108
- receiver: {
109
- type: 'inbound-rtp',
110
- packetsReceived: 0,
111
- bytesReceived: 1,
112
- },
113
- sender: {
114
- type: 'outbound-rtp',
115
- packetsSent: 0,
116
- bytesSent: 1,
117
- }
114
+ senders: [
115
+ {
116
+ report: [
117
+ {
118
+ type: 'outbound-rtp',
119
+ packetsSent: 0,
120
+ bytesSent: 1,
121
+ },
122
+ ],
123
+ },
124
+ ],
125
+ receivers: [
126
+ {
127
+ report: [
128
+ {
129
+ type: 'inbound-rtp',
130
+ packetsReceived: 0,
131
+ bytesReceived: 1,
132
+ },
133
+ ],
134
+ },
135
+ ],
118
136
  },
119
137
  video: {
120
- receiver: {
121
- type: 'inbound-rtp',
122
- framesDecoded: 0,
123
- bytesReceived: 1,
124
- },
125
- sender: {
126
- type: 'outbound-rtp',
127
- framesSent: 0,
128
- bytesSent: 1,
129
- }
130
- }
138
+ senders: [
139
+ {
140
+ report: [
141
+ {
142
+ type: 'outbound-rtp',
143
+ framesSent: 0,
144
+ bytesSent: 1,
145
+ },
146
+ ],
147
+ },
148
+ ],
149
+ receivers: [
150
+ {
151
+ report: [
152
+ {
153
+ type: 'inbound-rtp',
154
+ framesDecoded: 0,
155
+ bytesReceived: 1,
156
+ },
157
+ ],
158
+ },
159
+ ],
160
+ },
131
161
  };
132
162
 
133
163
  pc = {
134
- getConnectionState: sinon.stub().returns(MC.ConnectionState.Connected),
164
+ getConnectionState: sinon.stub().returns(ConnectionState.Connected),
135
165
  getTransceiverStats: sinon.stub().resolves({
136
166
  audio: {
137
- sender: [fakeStats.audio.sender],
138
- receiver: [fakeStats.audio.receiver],
139
- currentDirection: 'sendrecv',
140
- localTrackLabel: 'fake mic',
167
+ senders: [fakeStats.audio.senders[0]],
168
+ receivers: [fakeStats.audio.receivers[0]],
141
169
  },
142
170
  video: {
143
- sender: [fakeStats.video.sender],
144
- receiver: [fakeStats.video.receiver],
145
- currentDirection: 'sendrecv',
146
- localTrackLabel: 'fake camera',
171
+ senders: [fakeStats.video.senders[0]],
172
+ receivers: [fakeStats.video.receivers[0]],
173
+ },
174
+ screenShareAudio: {
175
+ senders: [],
176
+ receivers: [],
147
177
  },
148
178
  screenShareVideo: {
149
- sender: [],
150
- receiver: [],
151
- currentDirection: 'sendrecv'
152
- }
153
- })
179
+ senders: [],
180
+ receivers: [],
181
+ },
182
+ }),
154
183
  };
155
184
 
156
185
  networkQualityMonitor = new NetworkQualityMonitor(initialConfig);
@@ -202,7 +231,7 @@ describe('plugin-meetings', () => {
202
231
  checkReceivedEvent({expected: {}});
203
232
 
204
233
  // setup a mock to return some values higher the previous ones
205
- fakeStats.audio.sender.packetsSent += 10;
234
+ fakeStats.audio.senders[0].report[0].packetsSent += 10;
206
235
 
207
236
  await progressTime();
208
237
 
@@ -222,7 +251,7 @@ describe('plugin-meetings', () => {
222
251
  checkReceivedEvent({expected: {}});
223
252
 
224
253
  // setup a mock to return some values higher the previous ones
225
- fakeStats.video.sender.framesSent += 1;
254
+ fakeStats.video.senders[0].report[0].framesSent += 1;
226
255
 
227
256
  await progressTime();
228
257
 
@@ -242,7 +271,7 @@ describe('plugin-meetings', () => {
242
271
  checkReceivedEvent({expected: {}});
243
272
 
244
273
  // setup a mock to return some values higher the previous ones
245
- fakeStats.audio.receiver.packetsReceived += 5;
274
+ fakeStats.audio.receivers[0].report[0].packetsReceived += 5;
246
275
 
247
276
  await progressTime();
248
277
  // check that we got the REMOTE_MEDIA_STARTED event for audio
@@ -262,7 +291,7 @@ describe('plugin-meetings', () => {
262
291
  checkReceivedEvent({expected: {}});
263
292
 
264
293
  // setup a mock to return some values higher the previous ones
265
- fakeStats.video.receiver.framesDecoded += 1;
294
+ fakeStats.video.receivers[0].report[0].framesDecoded += 1;
266
295
 
267
296
  await progressTime();
268
297
  // check that we got the REMOTE_MEDIA_STARTED event for video