@webex/plugin-meetings 2.59.8 → 2.60.0-next.1

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 (528) hide show
  1. package/README.md +46 -8
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +41 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +357 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +215 -0
  9. package/dist/breakouts/breakout.js.map +1 -0
  10. package/dist/breakouts/collection.js +22 -0
  11. package/dist/breakouts/collection.js.map +1 -0
  12. package/dist/breakouts/edit-lock-error.js +51 -0
  13. package/dist/breakouts/edit-lock-error.js.map +1 -0
  14. package/dist/breakouts/events.js +44 -0
  15. package/dist/breakouts/events.js.map +1 -0
  16. package/dist/breakouts/index.js +1047 -0
  17. package/dist/breakouts/index.js.map +1 -0
  18. package/dist/breakouts/request.js +77 -0
  19. package/dist/breakouts/request.js.map +1 -0
  20. package/dist/breakouts/utils.js +64 -0
  21. package/dist/breakouts/utils.js.map +1 -0
  22. package/dist/common/browser-detection.js +2 -3
  23. package/dist/common/browser-detection.js.map +1 -1
  24. package/dist/common/collection.js +3 -4
  25. package/dist/common/collection.js.map +1 -1
  26. package/dist/common/config.js +1 -2
  27. package/dist/common/config.js.map +1 -1
  28. package/dist/common/errors/captcha-error.js +1 -2
  29. package/dist/common/errors/captcha-error.js.map +1 -1
  30. package/dist/common/errors/intent-to-join.js +1 -2
  31. package/dist/common/errors/intent-to-join.js.map +1 -1
  32. package/dist/common/errors/join-meeting.js +1 -2
  33. package/dist/common/errors/join-meeting.js.map +1 -1
  34. package/dist/common/errors/media.js +1 -2
  35. package/dist/common/errors/media.js.map +1 -1
  36. package/dist/common/errors/no-meeting-info.js +50 -0
  37. package/dist/common/errors/no-meeting-info.js.map +1 -0
  38. package/dist/common/errors/parameter.js +3 -4
  39. package/dist/common/errors/parameter.js.map +1 -1
  40. package/dist/common/errors/password-error.js +1 -2
  41. package/dist/common/errors/password-error.js.map +1 -1
  42. package/dist/common/errors/permission.js +1 -2
  43. package/dist/common/errors/permission.js.map +1 -1
  44. package/dist/common/errors/reclaim-host-role-errors.js +154 -0
  45. package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
  46. package/dist/common/errors/reconnection-in-progress.js +1 -2
  47. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  48. package/dist/common/errors/reconnection.js +1 -2
  49. package/dist/common/errors/reconnection.js.map +1 -1
  50. package/dist/common/errors/stats.js +1 -2
  51. package/dist/common/errors/stats.js.map +1 -1
  52. package/dist/common/errors/webex-errors.js +48 -28
  53. package/dist/common/errors/webex-errors.js.map +1 -1
  54. package/dist/common/errors/webex-meetings-error.js +1 -2
  55. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  56. package/dist/common/events/events-scope.js +1 -2
  57. package/dist/common/events/events-scope.js.map +1 -1
  58. package/dist/common/events/events.js +1 -2
  59. package/dist/common/events/events.js.map +1 -1
  60. package/dist/common/events/trigger-proxy.js +1 -2
  61. package/dist/common/events/trigger-proxy.js.map +1 -1
  62. package/dist/common/events/util.js +1 -2
  63. package/dist/common/events/util.js.map +1 -1
  64. package/dist/common/logs/logger-config.js +1 -2
  65. package/dist/common/logs/logger-config.js.map +1 -1
  66. package/dist/common/logs/logger-proxy.js +2 -3
  67. package/dist/common/logs/logger-proxy.js.map +1 -1
  68. package/dist/common/logs/request.js +8 -5
  69. package/dist/common/logs/request.js.map +1 -1
  70. package/dist/common/queue.js +22 -9
  71. package/dist/common/queue.js.map +1 -1
  72. package/dist/config.js +8 -11
  73. package/dist/config.js.map +1 -1
  74. package/dist/constants.js +437 -435
  75. package/dist/constants.js.map +1 -1
  76. package/dist/controls-options-manager/constants.js +3 -6
  77. package/dist/controls-options-manager/constants.js.map +1 -1
  78. package/dist/controls-options-manager/enums.js +14 -6
  79. package/dist/controls-options-manager/enums.js.map +1 -1
  80. package/dist/controls-options-manager/index.js +127 -38
  81. package/dist/controls-options-manager/index.js.map +1 -1
  82. package/dist/controls-options-manager/types.js +7 -0
  83. package/dist/controls-options-manager/types.js.map +1 -0
  84. package/dist/controls-options-manager/util.js +309 -19
  85. package/dist/controls-options-manager/util.js.map +1 -1
  86. package/dist/index.js +116 -4
  87. package/dist/index.js.map +1 -1
  88. package/dist/interpretation/collection.js +22 -0
  89. package/dist/interpretation/collection.js.map +1 -0
  90. package/dist/interpretation/index.js +365 -0
  91. package/dist/interpretation/index.js.map +1 -0
  92. package/dist/interpretation/siLanguage.js +24 -0
  93. package/dist/interpretation/siLanguage.js.map +1 -0
  94. package/dist/locus-info/controlsUtils.js +100 -11
  95. package/dist/locus-info/controlsUtils.js.map +1 -1
  96. package/dist/locus-info/embeddedAppsUtils.js +3 -4
  97. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  98. package/dist/locus-info/fullState.js +1 -2
  99. package/dist/locus-info/fullState.js.map +1 -1
  100. package/dist/locus-info/hostUtils.js +1 -2
  101. package/dist/locus-info/hostUtils.js.map +1 -1
  102. package/dist/locus-info/index.js +425 -84
  103. package/dist/locus-info/index.js.map +1 -1
  104. package/dist/locus-info/infoUtils.js +13 -5
  105. package/dist/locus-info/infoUtils.js.map +1 -1
  106. package/dist/locus-info/mediaSharesUtils.js +58 -3
  107. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  108. package/dist/locus-info/parser.js +253 -80
  109. package/dist/locus-info/parser.js.map +1 -1
  110. package/dist/locus-info/selfUtils.js +97 -13
  111. package/dist/locus-info/selfUtils.js.map +1 -1
  112. package/dist/media/index.js +106 -319
  113. package/dist/media/index.js.map +1 -1
  114. package/dist/media/properties.js +96 -153
  115. package/dist/media/properties.js.map +1 -1
  116. package/dist/media/util.js +1 -22
  117. package/dist/media/util.js.map +1 -1
  118. package/dist/mediaQualityMetrics/config.js +498 -493
  119. package/dist/mediaQualityMetrics/config.js.map +1 -1
  120. package/dist/meeting/in-meeting-actions.js +90 -3
  121. package/dist/meeting/in-meeting-actions.js.map +1 -1
  122. package/dist/meeting/index.js +4578 -2973
  123. package/dist/meeting/index.js.map +1 -1
  124. package/dist/meeting/locusMediaRequest.js +291 -0
  125. package/dist/meeting/locusMediaRequest.js.map +1 -0
  126. package/dist/meeting/muteState.js +224 -133
  127. package/dist/meeting/muteState.js.map +1 -1
  128. package/dist/meeting/request.js +297 -199
  129. package/dist/meeting/request.js.map +1 -1
  130. package/dist/meeting/request.type.js +7 -0
  131. package/dist/meeting/request.type.js.map +1 -0
  132. package/dist/meeting/state.js +1 -2
  133. package/dist/meeting/state.js.map +1 -1
  134. package/dist/meeting/util.js +605 -435
  135. package/dist/meeting/util.js.map +1 -1
  136. package/dist/meeting-info/collection.js +3 -4
  137. package/dist/meeting-info/collection.js.map +1 -1
  138. package/dist/meeting-info/index.js +74 -7
  139. package/dist/meeting-info/index.js.map +1 -1
  140. package/dist/meeting-info/meeting-info-v2.js +197 -63
  141. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  142. package/dist/meeting-info/request.js +1 -2
  143. package/dist/meeting-info/request.js.map +1 -1
  144. package/dist/meeting-info/util.js +2 -3
  145. package/dist/meeting-info/util.js.map +1 -1
  146. package/dist/meeting-info/utilv2.js +25 -12
  147. package/dist/meeting-info/utilv2.js.map +1 -1
  148. package/dist/meetings/collection.js +25 -4
  149. package/dist/meetings/collection.js.map +1 -1
  150. package/dist/meetings/index.js +464 -123
  151. package/dist/meetings/index.js.map +1 -1
  152. package/dist/meetings/meetings.types.js +7 -0
  153. package/dist/meetings/meetings.types.js.map +1 -0
  154. package/dist/meetings/request.js +4 -3
  155. package/dist/meetings/request.js.map +1 -1
  156. package/dist/meetings/util.js +107 -6
  157. package/dist/meetings/util.js.map +1 -1
  158. package/dist/member/index.js +54 -2
  159. package/dist/member/index.js.map +1 -1
  160. package/dist/member/member.types.js +3 -4
  161. package/dist/member/member.types.js.map +1 -1
  162. package/dist/member/types.js +23 -0
  163. package/dist/member/types.js.map +1 -0
  164. package/dist/member/util.js +131 -29
  165. package/dist/member/util.js.map +1 -1
  166. package/dist/members/collection.js +11 -2
  167. package/dist/members/collection.js.map +1 -1
  168. package/dist/members/index.js +174 -10
  169. package/dist/members/index.js.map +1 -1
  170. package/dist/members/request.js +108 -41
  171. package/dist/members/request.js.map +1 -1
  172. package/dist/members/types.js +14 -0
  173. package/dist/members/types.js.map +1 -0
  174. package/dist/members/util.js +327 -234
  175. package/dist/members/util.js.map +1 -1
  176. package/dist/metrics/constants.js +14 -9
  177. package/dist/metrics/constants.js.map +1 -1
  178. package/dist/metrics/index.js +4 -452
  179. package/dist/metrics/index.js.map +1 -1
  180. package/dist/multistream/mediaRequestManager.js +344 -0
  181. package/dist/multistream/mediaRequestManager.js.map +1 -0
  182. package/dist/multistream/receiveSlot.js +200 -0
  183. package/dist/multistream/receiveSlot.js.map +1 -0
  184. package/dist/multistream/receiveSlotManager.js +174 -0
  185. package/dist/multistream/receiveSlotManager.js.map +1 -0
  186. package/dist/multistream/remoteMedia.js +268 -0
  187. package/dist/multistream/remoteMedia.js.map +1 -0
  188. package/dist/multistream/remoteMediaGroup.js +267 -0
  189. package/dist/multistream/remoteMediaGroup.js.map +1 -0
  190. package/dist/multistream/remoteMediaManager.js +1211 -0
  191. package/dist/multistream/remoteMediaManager.js.map +1 -0
  192. package/dist/multistream/sendSlotManager.js +236 -0
  193. package/dist/multistream/sendSlotManager.js.map +1 -0
  194. package/dist/networkQualityMonitor/index.js +5 -4
  195. package/dist/networkQualityMonitor/index.js.map +1 -1
  196. package/dist/personal-meeting-room/index.js +2 -3
  197. package/dist/personal-meeting-room/index.js.map +1 -1
  198. package/dist/personal-meeting-room/request.js +2 -3
  199. package/dist/personal-meeting-room/request.js.map +1 -1
  200. package/dist/personal-meeting-room/util.js +1 -2
  201. package/dist/personal-meeting-room/util.js.map +1 -1
  202. package/dist/reachability/index.js +265 -72
  203. package/dist/reachability/index.js.map +1 -1
  204. package/dist/reachability/request.js +18 -10
  205. package/dist/reachability/request.js.map +1 -1
  206. package/dist/reactions/constants.js +12 -0
  207. package/dist/reactions/constants.js.map +1 -0
  208. package/dist/reactions/reactions.js +4 -6
  209. package/dist/reactions/reactions.js.map +1 -1
  210. package/dist/reactions/reactions.type.js +21 -23
  211. package/dist/reactions/reactions.type.js.map +1 -1
  212. package/dist/reconnection-manager/index.js +272 -220
  213. package/dist/reconnection-manager/index.js.map +1 -1
  214. package/dist/recording-controller/enums.js +4 -5
  215. package/dist/recording-controller/enums.js.map +1 -1
  216. package/dist/recording-controller/index.js +57 -46
  217. package/dist/recording-controller/index.js.map +1 -1
  218. package/dist/recording-controller/util.js +10 -10
  219. package/dist/recording-controller/util.js.map +1 -1
  220. package/dist/roap/index.js +101 -235
  221. package/dist/roap/index.js.map +1 -1
  222. package/dist/roap/request.js +126 -180
  223. package/dist/roap/request.js.map +1 -1
  224. package/dist/roap/turnDiscovery.js +115 -105
  225. package/dist/roap/turnDiscovery.js.map +1 -1
  226. package/dist/rtcMetrics/constants.js +11 -0
  227. package/dist/rtcMetrics/constants.js.map +1 -0
  228. package/dist/rtcMetrics/index.js +115 -0
  229. package/dist/rtcMetrics/index.js.map +1 -0
  230. package/dist/statsAnalyzer/global.js +2 -85
  231. package/dist/statsAnalyzer/global.js.map +1 -1
  232. package/dist/statsAnalyzer/index.js +384 -426
  233. package/dist/statsAnalyzer/index.js.map +1 -1
  234. package/dist/statsAnalyzer/mqaUtil.js +114 -80
  235. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  236. package/dist/transcription/index.js +1 -2
  237. package/dist/transcription/index.js.map +1 -1
  238. package/dist/webinar/collection.js +43 -0
  239. package/dist/webinar/collection.js.map +1 -0
  240. package/dist/webinar/index.js +68 -0
  241. package/dist/webinar/index.js.map +1 -0
  242. package/package.json +34 -24
  243. package/src/annotation/annotation.types.ts +50 -0
  244. package/src/annotation/constants.ts +36 -0
  245. package/src/annotation/index.ts +328 -0
  246. package/src/breakouts/README.md +220 -0
  247. package/src/breakouts/breakout.ts +188 -0
  248. package/src/breakouts/collection.ts +19 -0
  249. package/src/breakouts/edit-lock-error.ts +25 -0
  250. package/src/breakouts/events.ts +56 -0
  251. package/src/breakouts/index.ts +925 -0
  252. package/src/breakouts/request.ts +55 -0
  253. package/src/breakouts/utils.ts +57 -0
  254. package/src/common/errors/no-meeting-info.ts +24 -0
  255. package/src/common/errors/reclaim-host-role-errors.ts +134 -0
  256. package/src/common/errors/webex-errors.ts +36 -12
  257. package/src/common/logs/logger-proxy.ts +1 -1
  258. package/src/common/logs/request.ts +5 -1
  259. package/src/common/queue.ts +22 -8
  260. package/src/config.ts +5 -7
  261. package/src/constants.ts +263 -91
  262. package/src/controls-options-manager/enums.ts +11 -1
  263. package/src/controls-options-manager/index.ts +116 -21
  264. package/src/controls-options-manager/types.ts +59 -0
  265. package/src/controls-options-manager/util.ts +294 -14
  266. package/src/index.ts +40 -0
  267. package/src/interpretation/README.md +60 -0
  268. package/src/interpretation/collection.ts +19 -0
  269. package/src/interpretation/index.ts +332 -0
  270. package/src/interpretation/siLanguage.ts +18 -0
  271. package/src/locus-info/controlsUtils.ts +110 -0
  272. package/src/locus-info/index.ts +449 -61
  273. package/src/locus-info/infoUtils.ts +14 -2
  274. package/src/locus-info/mediaSharesUtils.ts +64 -0
  275. package/src/locus-info/parser.ts +258 -47
  276. package/src/locus-info/selfUtils.ts +85 -2
  277. package/src/media/index.ts +153 -370
  278. package/src/media/properties.ts +106 -136
  279. package/src/media/util.ts +0 -21
  280. package/src/mediaQualityMetrics/config.ts +379 -377
  281. package/src/meeting/in-meeting-actions.ts +168 -0
  282. package/src/meeting/index.ts +3800 -2491
  283. package/src/meeting/locusMediaRequest.ts +313 -0
  284. package/src/meeting/muteState.ts +224 -138
  285. package/src/meeting/request.ts +207 -127
  286. package/src/meeting/request.type.ts +13 -0
  287. package/src/meeting/util.ts +590 -423
  288. package/src/meeting-info/index.ts +81 -8
  289. package/src/meeting-info/meeting-info-v2.ts +159 -13
  290. package/src/meeting-info/util.ts +1 -1
  291. package/src/meeting-info/utilv2.ts +22 -9
  292. package/src/meetings/collection.ts +20 -0
  293. package/src/meetings/index.ts +466 -124
  294. package/src/meetings/meetings.types.ts +12 -0
  295. package/src/meetings/request.ts +2 -0
  296. package/src/meetings/util.ts +116 -5
  297. package/src/member/index.ts +52 -1
  298. package/src/member/types.ts +38 -0
  299. package/src/member/util.ts +139 -28
  300. package/src/members/collection.ts +8 -0
  301. package/src/members/index.ts +196 -7
  302. package/src/members/request.ts +97 -17
  303. package/src/members/types.ts +29 -0
  304. package/src/members/util.ts +333 -240
  305. package/src/metrics/constants.ts +12 -6
  306. package/src/metrics/index.ts +1 -471
  307. package/src/multistream/mediaRequestManager.ts +440 -0
  308. package/src/multistream/receiveSlot.ts +184 -0
  309. package/src/multistream/receiveSlotManager.ts +166 -0
  310. package/src/multistream/remoteMedia.ts +254 -0
  311. package/src/multistream/remoteMediaGroup.ts +284 -0
  312. package/src/multistream/remoteMediaManager.ts +1145 -0
  313. package/src/multistream/sendSlotManager.ts +170 -0
  314. package/src/networkQualityMonitor/index.ts +6 -6
  315. package/src/reachability/index.ts +238 -45
  316. package/src/reachability/request.ts +17 -8
  317. package/src/reactions/constants.ts +4 -0
  318. package/src/reactions/reactions.ts +4 -4
  319. package/src/reactions/reactions.type.ts +30 -4
  320. package/src/reconnection-manager/index.ts +124 -107
  321. package/src/recording-controller/index.ts +20 -3
  322. package/src/recording-controller/util.ts +26 -9
  323. package/src/roap/index.ts +98 -241
  324. package/src/roap/request.ts +74 -148
  325. package/src/roap/turnDiscovery.ts +62 -56
  326. package/src/rtcMetrics/constants.ts +3 -0
  327. package/src/rtcMetrics/index.ts +100 -0
  328. package/src/statsAnalyzer/global.ts +1 -84
  329. package/src/statsAnalyzer/index.ts +442 -523
  330. package/src/statsAnalyzer/mqaUtil.ts +105 -103
  331. package/src/webinar/collection.ts +31 -0
  332. package/src/webinar/index.ts +62 -0
  333. package/test/integration/spec/converged-space-meetings.js +233 -0
  334. package/test/integration/spec/journey.js +320 -264
  335. package/test/integration/spec/space-meeting.js +77 -4
  336. package/test/unit/spec/annotation/index.ts +418 -0
  337. package/test/unit/spec/breakouts/breakout.ts +237 -0
  338. package/test/unit/spec/breakouts/collection.ts +15 -0
  339. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  340. package/test/unit/spec/breakouts/events.ts +89 -0
  341. package/test/unit/spec/breakouts/index.ts +1790 -0
  342. package/test/unit/spec/breakouts/request.ts +104 -0
  343. package/test/unit/spec/breakouts/utils.js +72 -0
  344. package/test/unit/spec/common/queue.js +31 -2
  345. package/test/unit/spec/controls-options-manager/index.js +163 -0
  346. package/test/unit/spec/controls-options-manager/util.js +576 -60
  347. package/test/unit/spec/fixture/locus.js +1 -0
  348. package/test/unit/spec/interpretation/collection.ts +15 -0
  349. package/test/unit/spec/interpretation/index.ts +589 -0
  350. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  351. package/test/unit/spec/locus-info/controlsUtils.js +323 -30
  352. package/test/unit/spec/locus-info/index.js +1390 -16
  353. package/test/unit/spec/locus-info/infoUtils.js +54 -16
  354. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  355. package/test/unit/spec/locus-info/lib/selfConstant.js +48 -0
  356. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  357. package/test/unit/spec/locus-info/parser.js +116 -35
  358. package/test/unit/spec/locus-info/selfUtils.js +275 -0
  359. package/test/unit/spec/media/index.ts +274 -0
  360. package/test/unit/spec/media/properties.ts +75 -84
  361. package/test/unit/spec/meeting/in-meeting-actions.ts +82 -0
  362. package/test/unit/spec/meeting/index.js +7395 -3171
  363. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  364. package/test/unit/spec/meeting/muteState.js +407 -212
  365. package/test/unit/spec/meeting/request.js +512 -42
  366. package/test/unit/spec/meeting/utils.js +741 -24
  367. package/test/unit/spec/meeting-info/index.js +300 -0
  368. package/test/unit/spec/meeting-info/meetinginfov2.js +500 -6
  369. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  370. package/test/unit/spec/meetings/collection.js +14 -0
  371. package/test/unit/spec/meetings/index.js +1012 -209
  372. package/test/unit/spec/meetings/utils.js +202 -2
  373. package/test/unit/spec/member/index.js +38 -8
  374. package/test/unit/spec/member/util.js +528 -27
  375. package/test/unit/spec/members/index.js +597 -3
  376. package/test/unit/spec/members/request.js +206 -27
  377. package/test/unit/spec/members/utils.js +210 -0
  378. package/test/unit/spec/metrics/index.js +1 -50
  379. package/test/unit/spec/multistream/mediaRequestManager.ts +1418 -0
  380. package/test/unit/spec/multistream/receiveSlot.ts +163 -0
  381. package/test/unit/spec/multistream/receiveSlotManager.ts +203 -0
  382. package/test/unit/spec/multistream/remoteMedia.ts +255 -0
  383. package/test/unit/spec/multistream/remoteMediaGroup.ts +662 -0
  384. package/test/unit/spec/multistream/remoteMediaManager.ts +1924 -0
  385. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  386. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  387. package/test/unit/spec/reachability/index.ts +598 -24
  388. package/test/unit/spec/reachability/request.js +68 -0
  389. package/test/unit/spec/reconnection-manager/index.js +130 -22
  390. package/test/unit/spec/recording-controller/index.js +293 -218
  391. package/test/unit/spec/recording-controller/util.js +223 -96
  392. package/test/unit/spec/roap/index.ts +200 -76
  393. package/test/unit/spec/roap/request.ts +232 -0
  394. package/test/unit/spec/roap/turnDiscovery.ts +86 -48
  395. package/test/unit/spec/rtcMetrics/index.ts +73 -0
  396. package/test/unit/spec/stats-analyzer/index.js +181 -177
  397. package/test/unit/spec/webinar/collection.ts +13 -0
  398. package/test/unit/spec/webinar/index.ts +60 -0
  399. package/test/utils/constants.js +9 -0
  400. package/test/utils/integrationTestUtils.js +46 -0
  401. package/test/utils/testUtils.js +0 -45
  402. package/test/utils/webex-config.js +4 -0
  403. package/test/utils/webex-test-users.js +7 -3
  404. package/dist/common/browser-detection.d.ts +0 -9
  405. package/dist/common/collection.d.ts +0 -48
  406. package/dist/common/config.d.ts +0 -2
  407. package/dist/common/errors/captcha-error.d.ts +0 -15
  408. package/dist/common/errors/intent-to-join.d.ts +0 -16
  409. package/dist/common/errors/join-meeting.d.ts +0 -17
  410. package/dist/common/errors/media.d.ts +0 -15
  411. package/dist/common/errors/parameter.d.ts +0 -15
  412. package/dist/common/errors/password-error.d.ts +0 -15
  413. package/dist/common/errors/permission.d.ts +0 -14
  414. package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
  415. package/dist/common/errors/reconnection.d.ts +0 -15
  416. package/dist/common/errors/stats.d.ts +0 -15
  417. package/dist/common/errors/webex-errors.d.ts +0 -81
  418. package/dist/common/errors/webex-meetings-error.d.ts +0 -20
  419. package/dist/common/events/events-scope.d.ts +0 -17
  420. package/dist/common/events/events.d.ts +0 -12
  421. package/dist/common/events/trigger-proxy.d.ts +0 -2
  422. package/dist/common/events/util.d.ts +0 -2
  423. package/dist/common/logs/logger-config.d.ts +0 -2
  424. package/dist/common/logs/logger-proxy.d.ts +0 -2
  425. package/dist/common/logs/request.d.ts +0 -34
  426. package/dist/common/queue.d.ts +0 -32
  427. package/dist/config.d.ts +0 -73
  428. package/dist/constants.d.ts +0 -926
  429. package/dist/controls-options-manager/constants.d.ts +0 -4
  430. package/dist/controls-options-manager/enums.d.ts +0 -5
  431. package/dist/controls-options-manager/index.d.ts +0 -120
  432. package/dist/controls-options-manager/util.d.ts +0 -7
  433. package/dist/index.d.ts +0 -4
  434. package/dist/locus-info/controlsUtils.d.ts +0 -2
  435. package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
  436. package/dist/locus-info/fullState.d.ts +0 -2
  437. package/dist/locus-info/hostUtils.d.ts +0 -2
  438. package/dist/locus-info/index.d.ts +0 -269
  439. package/dist/locus-info/infoUtils.d.ts +0 -2
  440. package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
  441. package/dist/locus-info/parser.d.ts +0 -212
  442. package/dist/locus-info/selfUtils.d.ts +0 -2
  443. package/dist/media/index.d.ts +0 -32
  444. package/dist/media/properties.d.ts +0 -108
  445. package/dist/media/util.d.ts +0 -2
  446. package/dist/mediaQualityMetrics/config.d.ts +0 -233
  447. package/dist/meeting/effectsState.d.ts +0 -42
  448. package/dist/meeting/effectsState.js +0 -260
  449. package/dist/meeting/effectsState.js.map +0 -1
  450. package/dist/meeting/in-meeting-actions.d.ts +0 -79
  451. package/dist/meeting/index.d.ts +0 -1622
  452. package/dist/meeting/muteState.d.ts +0 -116
  453. package/dist/meeting/request.d.ts +0 -255
  454. package/dist/meeting/state.d.ts +0 -9
  455. package/dist/meeting/util.d.ts +0 -2
  456. package/dist/meeting-info/collection.d.ts +0 -20
  457. package/dist/meeting-info/index.d.ts +0 -57
  458. package/dist/meeting-info/meeting-info-v2.d.ts +0 -93
  459. package/dist/meeting-info/request.d.ts +0 -22
  460. package/dist/meeting-info/util.d.ts +0 -2
  461. package/dist/meeting-info/utilv2.d.ts +0 -2
  462. package/dist/meetings/collection.d.ts +0 -23
  463. package/dist/meetings/index.d.ts +0 -296
  464. package/dist/meetings/request.d.ts +0 -27
  465. package/dist/meetings/util.d.ts +0 -18
  466. package/dist/member/index.d.ts +0 -147
  467. package/dist/member/member.types.d.ts +0 -11
  468. package/dist/member/util.d.ts +0 -2
  469. package/dist/members/collection.d.ts +0 -24
  470. package/dist/members/index.d.ts +0 -298
  471. package/dist/members/request.d.ts +0 -50
  472. package/dist/members/util.d.ts +0 -2
  473. package/dist/metrics/config.d.ts +0 -169
  474. package/dist/metrics/config.js +0 -289
  475. package/dist/metrics/config.js.map +0 -1
  476. package/dist/metrics/constants.d.ts +0 -59
  477. package/dist/metrics/index.d.ts +0 -152
  478. package/dist/networkQualityMonitor/index.d.ts +0 -70
  479. package/dist/peer-connection-manager/index.d.ts +0 -6
  480. package/dist/peer-connection-manager/index.js +0 -671
  481. package/dist/peer-connection-manager/index.js.map +0 -1
  482. package/dist/peer-connection-manager/util.d.ts +0 -6
  483. package/dist/peer-connection-manager/util.js +0 -110
  484. package/dist/peer-connection-manager/util.js.map +0 -1
  485. package/dist/personal-meeting-room/index.d.ts +0 -47
  486. package/dist/personal-meeting-room/request.d.ts +0 -14
  487. package/dist/personal-meeting-room/util.d.ts +0 -2
  488. package/dist/reachability/index.d.ts +0 -139
  489. package/dist/reachability/request.d.ts +0 -35
  490. package/dist/reactions/reactions.d.ts +0 -4
  491. package/dist/reactions/reactions.type.d.ts +0 -32
  492. package/dist/reconnection-manager/index.d.ts +0 -112
  493. package/dist/recording-controller/enums.d.ts +0 -7
  494. package/dist/recording-controller/index.d.ts +0 -193
  495. package/dist/recording-controller/util.d.ts +0 -13
  496. package/dist/roap/collection.d.ts +0 -10
  497. package/dist/roap/collection.js +0 -63
  498. package/dist/roap/collection.js.map +0 -1
  499. package/dist/roap/handler.d.ts +0 -47
  500. package/dist/roap/handler.js +0 -279
  501. package/dist/roap/handler.js.map +0 -1
  502. package/dist/roap/index.d.ts +0 -116
  503. package/dist/roap/request.d.ts +0 -35
  504. package/dist/roap/state.d.ts +0 -9
  505. package/dist/roap/state.js +0 -127
  506. package/dist/roap/state.js.map +0 -1
  507. package/dist/roap/turnDiscovery.d.ts +0 -81
  508. package/dist/roap/util.d.ts +0 -2
  509. package/dist/roap/util.js +0 -76
  510. package/dist/roap/util.js.map +0 -1
  511. package/dist/statsAnalyzer/global.d.ts +0 -118
  512. package/dist/statsAnalyzer/index.d.ts +0 -193
  513. package/dist/statsAnalyzer/mqaUtil.d.ts +0 -22
  514. package/dist/transcription/index.d.ts +0 -64
  515. package/src/index.js +0 -15
  516. package/src/meeting/effectsState.ts +0 -209
  517. package/src/metrics/config.ts +0 -485
  518. package/src/peer-connection-manager/index.ts +0 -847
  519. package/src/peer-connection-manager/util.ts +0 -119
  520. package/src/roap/collection.ts +0 -62
  521. package/src/roap/handler.ts +0 -294
  522. package/src/roap/state.ts +0 -156
  523. package/src/roap/util.ts +0 -100
  524. package/test/unit/spec/meeting/effectsState.js +0 -281
  525. package/test/unit/spec/peerconnection-manager/index.js +0 -218
  526. package/test/unit/spec/peerconnection-manager/utils.js +0 -49
  527. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -388
  528. package/test/unit/spec/roap/util.js +0 -30
@@ -2,10 +2,12 @@ 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 {ConnectionState} from '@webex/internal-media-core';
5
6
 
6
7
  import {StatsAnalyzer, EVENTS} from '../../../../src/statsAnalyzer';
7
8
  import NetworkQualityMonitor from '../../../../src/networkQualityMonitor';
8
9
  import testUtils from '../../../utils/testUtils';
10
+ import {MEDIA_DEVICES, _UNKNOWN_} from '@webex/plugin-meetings/src/constants';
9
11
 
10
12
  const {assert} = chai;
11
13
 
@@ -23,14 +25,15 @@ describe('plugin-meetings', () => {
23
25
  };
24
26
 
25
27
  const defaultStats = {
28
+ resolutions: {},
26
29
  internal: {
27
- video: {
30
+ 'video-send-1': {
28
31
  send: {
29
32
  totalPacketsLostOnReceiver: 10,
30
33
  },
31
34
  },
32
35
  },
33
- video: {
36
+ 'video-send-1': {
34
37
  send: {
35
38
  packetsSent: 2,
36
39
  meanRemoteJitter: [],
@@ -51,7 +54,12 @@ describe('plugin-meetings', () => {
51
54
  beforeEach(() => {
52
55
  const networkQualityMonitor = new NetworkQualityMonitor(initialConfig);
53
56
 
54
- statsAnalyzer = new StatsAnalyzer(initialConfig, networkQualityMonitor, defaultStats);
57
+ statsAnalyzer = new StatsAnalyzer(
58
+ initialConfig,
59
+ () => ({}),
60
+ networkQualityMonitor,
61
+ defaultStats
62
+ );
55
63
 
56
64
  sandBoxSpy = sandbox.spy(
57
65
  statsAnalyzer.networkQualityMonitor,
@@ -64,12 +72,12 @@ describe('plugin-meetings', () => {
64
72
  });
65
73
 
66
74
  it('should trigger determineUplinkNetworkQuality with specific arguments', async () => {
67
- await statsAnalyzer.parseGetStatsResult(statusResult, 'video');
75
+ await statsAnalyzer.parseGetStatsResult(statusResult, 'video-send-1', true);
68
76
 
69
77
  assert.calledOnce(statsAnalyzer.networkQualityMonitor.determineUplinkNetworkQuality);
70
78
  assert(
71
79
  sandBoxSpy.calledWith({
72
- mediaType: 'video',
80
+ mediaType: 'video-send-1',
73
81
  remoteRtpResults: statusResult,
74
82
  statsAnalyzerCurrentStats: statsAnalyzer.statsResults,
75
83
  })
@@ -82,22 +90,7 @@ describe('plugin-meetings', () => {
82
90
  let pc;
83
91
  let networkQualityMonitor;
84
92
  let statsAnalyzer;
85
- const statusResultOutboundRTP = {
86
- type: 'outbound-rtp',
87
- frameHeight: 720,
88
- frameWidth: 1280,
89
- packetsLost: 11,
90
- framesSent: 105,
91
- hugeFramesSent: 1,
92
- framesEncoded: 102,
93
- rttThreshold: 501,
94
- jitterThreshold: 501,
95
- jitterBufferDelay: 288.131459,
96
- jitterBufferEmittedCount: 4013,
97
- trackIdentifier: '6bbf5506-6a7e-4397-951c-c05b72ab0ace',
98
- bytesSent: 1233,
99
- totalPacketsSent: 100,
100
- };
93
+ let mqeData;
101
94
 
102
95
  let receivedEventsData = {
103
96
  local: {},
@@ -125,61 +118,145 @@ describe('plugin-meetings', () => {
125
118
  // bytesReceived and bytesSent need to be non-zero in order for StatsAnalyzer to parse any other values
126
119
  fakeStats = {
127
120
  audio: {
128
- receiver: {
129
- type: 'inbound-rtp',
130
- packetsReceived: 0,
131
- bytesReceived: 1,
132
- },
133
- sender: {
134
- type: 'outbound-rtp',
135
- packetsSent: 0,
136
- bytesSent: 1,
137
- },
121
+ senders: [
122
+ {
123
+ localTrackLabel: 'fake-microphone',
124
+ report: [
125
+ {
126
+ type: 'outbound-rtp',
127
+ packetsSent: 0,
128
+ bytesSent: 1,
129
+ },
130
+ {
131
+ type: 'candidate-pair',
132
+ state: 'succeeded',
133
+ localCandidateId: 'fake-candidate-id'
134
+ },
135
+ {
136
+ type: 'candidate-pair',
137
+ state: 'failed',
138
+ localCandidateId: 'bad-candidate-id'
139
+ },
140
+ {
141
+ type: 'local-candidate',
142
+ id: 'fake-candidate-id',
143
+ protocol: 'tcp'
144
+ },
145
+ ],
146
+ },
147
+ ],
148
+ receivers: [
149
+ {
150
+ report: [
151
+ {
152
+ type: 'inbound-rtp',
153
+ packetsReceived: 0,
154
+ bytesReceived: 1,
155
+ },
156
+ {
157
+ type: 'candidate-pair',
158
+ state: 'succeeded',
159
+ localCandidateId: 'fake-candidate-id'
160
+ },
161
+ {
162
+ type: 'candidate-pair',
163
+ state: 'failed',
164
+ localCandidateId: 'bad-candidate-id'
165
+ },
166
+ {
167
+ type: 'local-candidate',
168
+ id: 'fake-candidate-id',
169
+ protocol: 'tcp'
170
+ },
171
+ ],
172
+ },
173
+ ],
138
174
  },
139
175
  video: {
140
- receiver: {
141
- type: 'inbound-rtp',
142
- framesDecoded: 0,
143
- bytesReceived: 1,
144
- },
145
- sender: {
146
- type: 'outbound-rtp',
147
- framesSent: 0,
148
- bytesSent: 1,
149
- },
176
+ senders: [
177
+ {
178
+ localTrackLabel: 'fake-camera',
179
+ report: [
180
+ {
181
+ type: 'outbound-rtp',
182
+ framesSent: 0,
183
+ bytesSent: 1,
184
+ },
185
+ {
186
+ type: 'candidate-pair',
187
+ state: 'succeeded',
188
+ localCandidateId: 'fake-candidate-id'
189
+ },
190
+ {
191
+ type: 'candidate-pair',
192
+ state: 'failed',
193
+ localCandidateId: 'bad-candidate-id'
194
+ },
195
+ {
196
+ type: 'local-candidate',
197
+ id: 'fake-candidate-id',
198
+ protocol: 'tcp'
199
+ },
200
+ ],
201
+ },
202
+ ],
203
+ receivers: [
204
+ {
205
+ report: [
206
+ {
207
+ type: 'inbound-rtp',
208
+ framesDecoded: 0,
209
+ bytesReceived: 1,
210
+ frameHeight: 720,
211
+ frameWidth: 1280,
212
+ framesReceived: 1,
213
+ },
214
+ {
215
+ type: 'candidate-pair',
216
+ state: 'succeeded',
217
+ localCandidateId: 'fake-candidate-id'
218
+ },
219
+ {
220
+ type: 'candidate-pair',
221
+ state: 'failed',
222
+ localCandidateId: 'bad-candidate-id'
223
+ },
224
+ {
225
+ type: 'local-candidate',
226
+ id: 'fake-candidate-id',
227
+ protocol: 'tcp'
228
+ },
229
+ ],
230
+ },
231
+ ],
150
232
  },
151
233
  };
152
234
 
153
235
  pc = {
154
- audioTransceiver: {
155
- sender: {
156
- getStats: sinon.stub().resolves([fakeStats.audio.sender]),
236
+ getConnectionState: sinon.stub().returns(ConnectionState.Connected),
237
+ getTransceiverStats: sinon.stub().resolves({
238
+ audio: {
239
+ senders: [fakeStats.audio.senders[0]],
240
+ receivers: [fakeStats.audio.receivers[0]],
157
241
  },
158
- receiver: {
159
- getStats: sinon.stub().resolves([fakeStats.audio.receiver]),
242
+ video: {
243
+ senders: [fakeStats.video.senders[0]],
244
+ receivers: [fakeStats.video.receivers[0]],
160
245
  },
161
- },
162
- videoTransceiver: {
163
- sender: {
164
- getStats: sinon.stub().resolves([fakeStats.video.sender]),
165
- },
166
- receiver: {
167
- getStats: sinon.stub().resolves([fakeStats.video.receiver]),
246
+ screenShareAudio: {
247
+ senders: [],
248
+ receivers: [],
168
249
  },
169
- },
170
- shareTransceiver: {
171
- sender: {
172
- getStats: sinon.stub().resolves([]),
250
+ screenShareVideo: {
251
+ senders: [],
252
+ receivers: [],
173
253
  },
174
- receiver: {
175
- getStats: sinon.stub().resolves([]),
176
- },
177
- },
254
+ }),
178
255
  };
179
256
 
180
257
  networkQualityMonitor = new NetworkQualityMonitor(initialConfig);
181
258
 
182
- statsAnalyzer = new StatsAnalyzer(initialConfig, networkQualityMonitor);
259
+ statsAnalyzer = new StatsAnalyzer(initialConfig, () => ({}), networkQualityMonitor);
183
260
 
184
261
  statsAnalyzer.on(EVENTS.LOCAL_MEDIA_STARTED, (data) => {
185
262
  receivedEventsData.local.started = data;
@@ -193,11 +270,8 @@ describe('plugin-meetings', () => {
193
270
  statsAnalyzer.on(EVENTS.REMOTE_MEDIA_STOPPED, (data) => {
194
271
  receivedEventsData.remote.stopped = data;
195
272
  });
196
- statsAnalyzer.on(EVENTS.NO_FRAMES_SENT, (data) => {
197
- receivedEventsData.noFramesSent = data;
198
- });
199
- statsAnalyzer.on(EVENTS.NO_VIDEO_ENCODED, (data) => {
200
- receivedEventsData.noVideoEncoded = data;
273
+ statsAnalyzer.on(EVENTS.MEDIA_QUALITY, ({data}) => {
274
+ mqeData = data;
201
275
  });
202
276
  });
203
277
 
@@ -225,6 +299,12 @@ describe('plugin-meetings', () => {
225
299
  assert.deepEqual(receivedEventsData.remote.stopped, expected.remote?.stopped);
226
300
  };
227
301
 
302
+ const checkMqeData = () => {
303
+ assert.strictEqual(mqeData.videoReceive[0].streams[0].receivedFrameSize, 3600);
304
+ assert.strictEqual(mqeData.videoReceive[0].streams[0].receivedHeight, 720);
305
+ assert.strictEqual(mqeData.videoReceive[0].streams[0].receivedWidth, 1280);
306
+ };
307
+
228
308
  it('emits LOCAL_MEDIA_STARTED and LOCAL_MEDIA_STOPPED events for audio', async () => {
229
309
  await startStatsAnalyzer({expected: {sendAudio: true}});
230
310
 
@@ -232,7 +312,7 @@ describe('plugin-meetings', () => {
232
312
  checkReceivedEvent({expected: {}});
233
313
 
234
314
  // setup a mock to return some values higher the previous ones
235
- fakeStats.audio.sender.packetsSent += 10;
315
+ fakeStats.audio.senders[0].report[0].packetsSent += 10;
236
316
 
237
317
  await progressTime();
238
318
 
@@ -252,7 +332,7 @@ describe('plugin-meetings', () => {
252
332
  checkReceivedEvent({expected: {}});
253
333
 
254
334
  // setup a mock to return some values higher the previous ones
255
- fakeStats.video.sender.framesSent += 1;
335
+ fakeStats.video.senders[0].report[0].framesSent += 1;
256
336
 
257
337
  await progressTime();
258
338
 
@@ -272,7 +352,7 @@ describe('plugin-meetings', () => {
272
352
  checkReceivedEvent({expected: {}});
273
353
 
274
354
  // setup a mock to return some values higher the previous ones
275
- fakeStats.audio.receiver.packetsReceived += 5;
355
+ fakeStats.audio.receivers[0].report[0].packetsReceived += 5;
276
356
 
277
357
  await progressTime();
278
358
  // check that we got the REMOTE_MEDIA_STARTED event for audio
@@ -292,7 +372,7 @@ describe('plugin-meetings', () => {
292
372
  checkReceivedEvent({expected: {}});
293
373
 
294
374
  // setup a mock to return some values higher the previous ones
295
- fakeStats.video.receiver.framesDecoded += 1;
375
+ fakeStats.video.receivers[0].report[0].framesDecoded += 1;
296
376
 
297
377
  await progressTime();
298
378
  // check that we got the REMOTE_MEDIA_STARTED event for video
@@ -305,133 +385,57 @@ describe('plugin-meetings', () => {
305
385
  checkReceivedEvent({expected: {remote: {stopped: {type: 'video'}}}});
306
386
  });
307
387
 
308
- const checkStats = (type) => {
309
- const statsResult = {
310
- height: 720,
311
- width: 1280,
312
- jitterBufferDelay: 288.131459,
313
- jitterBufferEmittedCount: 4013,
314
- trackIdentifier: '6bbf5506-6a7e-4397-951c-c05b72ab0ace',
315
- avgJitterDelay: 0.07179951632195365,
316
- };
317
- if (type === 'inbound-rtp') {
318
- statsResult.framesDecoded = 4013;
319
- statsResult.framesDropped = 0;
320
- statsResult.framesReceived = 4016;
321
- assert.deepEqual(statsAnalyzer.statsResults.resolutions.video.recv, statsResult);
322
- } else if (type === 'outbound-rtp') {
323
- statsResult.framesSent = 105;
324
- statsResult.hugeFramesSent = 1;
325
- assert.deepEqual(statsAnalyzer.statsResults.resolutions.video.send, statsResult);
326
- }
327
- };
328
-
329
- it('processes track results and populate statsResults.resolutions object when type is inbound-rtp with video', async () => {
330
- await startStatsAnalyzer({expected: {receiveVideo: true}});
331
- const statusResultInboundRTP = {
332
- type: 'inbound-rtp',
333
- frameHeight: 720,
334
- frameWidth: 1280,
335
- packetsLost: 11,
336
- rttThreshold: 501,
337
- jitterThreshold: 501,
338
- framesDecoded: 4013,
339
- framesDropped: 0,
340
- framesReceived: 4016,
341
- jitterBufferDelay: 288.131459,
342
- jitterBufferEmittedCount: 4013,
343
- trackIdentifier: '6bbf5506-6a7e-4397-951c-c05b72ab0ace',
344
- };
345
- await statsAnalyzer.parseGetStatsResult(statusResultInboundRTP, 'video');
346
- checkStats('inbound-rtp');
347
- });
348
- it('processes track results and populate statsResults.resolutions object when type is outbound-rtp with video', async () => {
388
+ it('emits the correct MEDIA_QUALITY events', async () => {
349
389
  await startStatsAnalyzer({expected: {receiveVideo: true}});
350
390
 
351
- await statsAnalyzer.parseGetStatsResult(statusResultOutboundRTP, 'video');
352
- checkStats('outbound-rtp');
353
- });
391
+ await progressTime();
354
392
 
355
- it('doesnot processes track results with audio', async () => {
356
- await startStatsAnalyzer({expected: {receiveAudio: true}});
357
- await statsAnalyzer.parseGetStatsResult(statusResultOutboundRTP, 'audio');
358
- assert.deepEqual(statsAnalyzer.statsResults.resolutions.audio, undefined);
393
+ // Check that the mqe data has been emitted and is correctly computed.
394
+ checkMqeData();
359
395
  });
360
396
 
361
- it('emits NO_FRAMES_ENCODED when frames are not being encoded', async () => {
362
- const expected = {mediaType: 'video'};
363
- await startStatsAnalyzer({expected: {sendVideo: true}});
364
-
365
- statsAnalyzer.lastStatsResults.video.send = {framesEncoded: 102, totalPacketsSent: 106};
397
+ it('emits the correct transportType in MEDIA_QUALITY events', async () => {
398
+ await startStatsAnalyzer({expected: {receiveVideo: true}});
366
399
 
367
- await statsAnalyzer.parseGetStatsResult(statusResultOutboundRTP, 'video');
400
+ await progressTime();
368
401
 
369
- statsAnalyzer.compareLastStatsResult();
370
- assert.deepEqual(receivedEventsData.noVideoEncoded, expected);
402
+ assert.strictEqual(mqeData.audioTransmit[0].common.transportType, 'TCP');
403
+ assert.strictEqual(mqeData.videoReceive[0].common.transportType, 'TCP');
371
404
  });
372
405
 
373
- it('emits NO_FRAMES_SENT when frames are not being sent but frames are being encoded', async () => {
374
- await startStatsAnalyzer({expected: {sendVideo: true}});
406
+ it('emits the correct transportType in MEDIA_QUALITY events when using a TURN server', async () => {
407
+ fakeStats.audio.senders[0].report[3].relayProtocol = 'tls';
408
+ fakeStats.video.senders[0].report[3].relayProtocol = 'tls';
409
+ fakeStats.audio.receivers[0].report[3].relayProtocol = 'tls';
410
+ fakeStats.video.receivers[0].report[3].relayProtocol = 'tls';
375
411
 
376
- const expected = {mediaType: 'video'};
377
-
378
- statsAnalyzer.lastStatsResults.video.send = {
379
- framesEncoded: 10,
380
- framesSent: 105,
381
- totalPacketsSent: 106,
382
- };
383
- await statsAnalyzer.parseGetStatsResult(statusResultOutboundRTP, 'video');
384
-
385
- statsAnalyzer.compareLastStatsResult();
386
- assert.deepEqual(receivedEventsData.noFramesSent, expected);
387
- });
388
-
389
- it('doesnot emits NO_FRAMES_SENT when last emitted event is LOCAL_MEDIA_STOPPED', async () => {
390
- statsAnalyzer.lastEmittedStartStopEvent.video.local = EVENTS.LOCAL_MEDIA_STOPPED;
412
+ await startStatsAnalyzer({expected: {receiveVideo: true}});
391
413
 
392
- await startStatsAnalyzer({expected: {sendVideo: true}});
393
- await statsAnalyzer.parseGetStatsResult(statusResultOutboundRTP, 'video');
414
+ await progressTime();
394
415
 
395
- statsAnalyzer.compareLastStatsResult();
396
- assert.deepEqual(receivedEventsData.noFramesSent, undefined);
416
+ assert.strictEqual(mqeData.audioTransmit[0].common.transportType, 'TLS');
417
+ assert.strictEqual(mqeData.videoReceive[0].common.transportType, 'TLS');
397
418
  });
398
419
 
399
- it('emits NO_FRAMES_ENCODED when frames are not being encoded for share', async () => {
400
- const expected = {mediaType: 'share'};
401
- await startStatsAnalyzer({expected: {sendShare: true}});
402
-
403
- statsAnalyzer.lastStatsResults.share.send = {framesEncoded: 102, totalPacketsSent: 106};
420
+ it('emits the correct peripherals in MEDIA_QUALITY events', async () => {
421
+ await startStatsAnalyzer({expected: {receiveVideo: true}});
404
422
 
405
- await statsAnalyzer.parseGetStatsResult(statusResultOutboundRTP, 'share');
423
+ await progressTime();
406
424
 
407
- statsAnalyzer.compareLastStatsResult();
408
- assert.deepEqual(receivedEventsData.noVideoEncoded, expected);
425
+ assert.strictEqual(mqeData.intervalMetadata.peripherals.find((val) => val.name === MEDIA_DEVICES.MICROPHONE).information, 'fake-microphone');
426
+ assert.strictEqual(mqeData.intervalMetadata.peripherals.find((val) => val.name === MEDIA_DEVICES.CAMERA).information, 'fake-camera');
409
427
  });
410
428
 
411
- it('emits NO_FRAMES_SENT when frames are not being sent but frames are being encoded for share', async () => {
412
- const expected = {mediaType: 'share'};
413
- await startStatsAnalyzer({expected: {sendShare: true}});
414
-
415
- statsAnalyzer.lastStatsResults.share.send = {
416
- framesEncoded: 10,
417
- framesSent: 105,
418
- totalPacketsSent: 106,
419
- };
420
-
421
- await statsAnalyzer.parseGetStatsResult(statusResultOutboundRTP, 'share');
422
-
423
- statsAnalyzer.compareLastStatsResult();
424
- assert.deepEqual(receivedEventsData.noFramesSent, expected);
425
- });
429
+ it('emits the correct peripherals in MEDIA_QUALITY events when localTrackLabel is undefined', async () => {
430
+ fakeStats.audio.senders[0].localTrackLabel = undefined;
431
+ fakeStats.video.senders[0].localTrackLabel = undefined;
426
432
 
427
- it('doesnot emits NO_FRAMES_SENT when last emitted event is LOCAL_MEDIA_STOPPED for share', async () => {
428
- statsAnalyzer.lastEmittedStartStopEvent.video.local = EVENTS.LOCAL_MEDIA_STOPPED;
433
+ await startStatsAnalyzer({expected: {receiveVideo: true}});
429
434
 
430
- await startStatsAnalyzer({expected: {sendShare: true}});
431
- await statsAnalyzer.parseGetStatsResult(statusResultOutboundRTP, 'share');
435
+ await progressTime();
432
436
 
433
- statsAnalyzer.compareLastStatsResult();
434
- assert.deepEqual(receivedEventsData.noFramesSent, undefined);
437
+ assert.strictEqual(mqeData.intervalMetadata.peripherals.find((val) => val.name === MEDIA_DEVICES.MICROPHONE).information, _UNKNOWN_);
438
+ assert.strictEqual(mqeData.intervalMetadata.peripherals.find((val) => val.name === MEDIA_DEVICES.CAMERA).information, _UNKNOWN_);
435
439
  });
436
440
  });
437
441
  });
@@ -0,0 +1,13 @@
1
+ import {assert} from '@webex/test-helper-chai';
2
+ import WebinarCollection from '@webex/plugin-meetings/src/webinar/collection';
3
+
4
+ describe('plugin-meetings', () => {
5
+ describe('WebinarCollection', () => {
6
+ it('the webinar collection is as expected', () => {
7
+ const collection = new WebinarCollection();
8
+
9
+ assert.equal(collection.namespace, 'Meetings');
10
+ assert.equal(collection.mainIndex, 'sessionId');
11
+ });
12
+ });
13
+ });
@@ -0,0 +1,60 @@
1
+ import {assert, expect} from '@webex/test-helper-chai';
2
+ import LoggerProxy from '@webex/plugin-meetings/src/common/logs/logger-proxy';
3
+ import Webinar from '@webex/plugin-meetings/src/webinar';
4
+ import MockWebex from '@webex/test-helper-mock-webex';
5
+ import sinon from 'sinon';
6
+
7
+ describe('plugin-meetings', () => {
8
+ describe('Webinar', () => {
9
+
10
+ let webex;
11
+ let webinar;
12
+
13
+ beforeEach(() => {
14
+ // @ts-ignore
15
+ webex = new MockWebex({});
16
+ webex.internal.mercury.on = sinon.stub();
17
+ webinar = new Webinar({}, {parent: webex});
18
+ webinar.locusUrl = 'locusUrl';
19
+ webex.request = sinon.stub().returns(Promise.resolve('REQUEST_RETURN_VALUE'));
20
+ webex.meetings = {};
21
+ webex.meetings.getMeetingByType = sinon.stub();
22
+ });
23
+
24
+ describe('#locusUrlUpdate', () => {
25
+ it('sets the locus url', () => {
26
+ webinar.locusUrlUpdate('newUrl');
27
+
28
+ assert.equal(webinar.locusUrl, 'newUrl');
29
+ });
30
+ });
31
+
32
+ describe('#webcastUrlUpdate', () => {
33
+ it('sets the webcast url', () => {
34
+ webinar.webcastUrlUpdate('newUrl');
35
+
36
+ assert.equal(webinar.webcastUrl, 'newUrl');
37
+ });
38
+ });
39
+
40
+ describe('#webinarAttendeesSearchingUrlUpdate', () => {
41
+ it('sets the webinarAttendeesSearching url', () => {
42
+ webinar.webinarAttendeesSearchingUrlUpdate('newUrl');
43
+
44
+ assert.equal(webinar.webinarAttendeesSearchingUrl, 'newUrl');
45
+ });
46
+ });
47
+
48
+ describe('#updateCanManageWebcast', () => {
49
+ it('update canManageWebcast', () => {
50
+ webinar.updateCanManageWebcast(true);
51
+
52
+ assert.equal(webinar.canManageWebcast, true);
53
+
54
+ webinar.updateCanManageWebcast(false);
55
+
56
+ assert.equal(webinar.canManageWebcast, false);
57
+ });
58
+ });
59
+ })
60
+ })
@@ -0,0 +1,9 @@
1
+ // MOVE TO TEST CONSTANTS
2
+ export const MEDIA_SERVERS = {
3
+ // The homer media server for converged multistream meetings.
4
+ HOMER: 'homer',
5
+ // The linus media server
6
+ LINUS: 'linus',
7
+ // The calliope media server for transcoded meetings
8
+ CALLIOPE: 'calliope',
9
+ };
@@ -0,0 +1,46 @@
1
+ import {assert} from '@webex/test-helper-chai';
2
+ import {Defer} from '@webex/common';
3
+
4
+ const addMedia = async (user, options = {}) => {
5
+
6
+ const {microphone, camera} = options;
7
+
8
+ if (options.multistream) {
9
+ await user.meeting.addMedia({localStreams: {microphone, camera}});
10
+ } else {
11
+ const mediaReadyPromises = Array.isArray(options.expectedMediaReadyTypes)
12
+ ? options.expectedMediaReadyTypes.reduce((output, expectedMediaReadyType) => {
13
+ if (typeof expectedMediaReadyType !== 'string') {
14
+ return output;
15
+ }
16
+
17
+ output[expectedMediaReadyType] = new Defer();
18
+
19
+ return output;
20
+ }, {})
21
+ : {remoteAudio: new Defer(), remoteVideo: new Defer()};
22
+
23
+ const mediaReady = (media) => {
24
+ if (!media) {
25
+ return;
26
+ }
27
+ if (mediaReadyPromises[media.type]) {
28
+ mediaReadyPromises[media.type].resolve();
29
+ }
30
+ };
31
+
32
+ user.meeting.on('media:ready', mediaReady);
33
+
34
+ await user.meeting.addMedia({localStreams: {microphone, camera}});
35
+ await Promise.all(Object.values(mediaReadyPromises).map((defer) => defer.promise));
36
+ };
37
+
38
+
39
+ assert.exists(user.meeting.mediaProperties.audioStream, 'audioStream not present');
40
+ assert.exists(user.meeting.mediaProperties.videoStream, 'videoStream not present');
41
+
42
+ };
43
+
44
+ export default {
45
+ addMedia
46
+ };