@webex/plugin-meetings 3.0.0-beta.4 → 3.0.0-beta.40

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 (498) 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/edit-lock-error.js +52 -0
  8. package/dist/breakouts/edit-lock-error.js.map +1 -0
  9. package/dist/breakouts/index.js +546 -0
  10. package/dist/breakouts/index.js.map +1 -0
  11. package/dist/breakouts/request.js +78 -0
  12. package/dist/breakouts/request.js.map +1 -0
  13. package/dist/breakouts/utils.js +48 -0
  14. package/dist/breakouts/utils.js.map +1 -0
  15. package/dist/common/browser-detection.js +1 -20
  16. package/dist/common/browser-detection.js.map +1 -1
  17. package/dist/common/collection.js +5 -20
  18. package/dist/common/collection.js.map +1 -1
  19. package/dist/common/config.js +0 -7
  20. package/dist/common/config.js.map +1 -1
  21. package/dist/common/errors/captcha-error.js +10 -24
  22. package/dist/common/errors/captcha-error.js.map +1 -1
  23. package/dist/common/errors/intent-to-join.js +11 -24
  24. package/dist/common/errors/intent-to-join.js.map +1 -1
  25. package/dist/common/errors/join-meeting.js +12 -25
  26. package/dist/common/errors/join-meeting.js.map +1 -1
  27. package/dist/common/errors/media.js +10 -24
  28. package/dist/common/errors/media.js.map +1 -1
  29. package/dist/common/errors/parameter.js +5 -33
  30. package/dist/common/errors/parameter.js.map +1 -1
  31. package/dist/common/errors/password-error.js +10 -24
  32. package/dist/common/errors/password-error.js.map +1 -1
  33. package/dist/common/errors/permission.js +9 -23
  34. package/dist/common/errors/permission.js.map +1 -1
  35. package/dist/common/errors/reconnection-in-progress.js +0 -17
  36. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  37. package/dist/common/errors/reconnection.js +10 -24
  38. package/dist/common/errors/reconnection.js.map +1 -1
  39. package/dist/common/errors/stats.js +10 -24
  40. package/dist/common/errors/stats.js.map +1 -1
  41. package/dist/common/errors/webex-errors.js +6 -41
  42. package/dist/common/errors/webex-errors.js.map +1 -1
  43. package/dist/common/errors/webex-meetings-error.js +5 -25
  44. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  45. package/dist/common/events/events-scope.js +0 -22
  46. package/dist/common/events/events-scope.js.map +1 -1
  47. package/dist/common/events/events.js +0 -23
  48. package/dist/common/events/events.js.map +1 -1
  49. package/dist/common/events/trigger-proxy.js +0 -12
  50. package/dist/common/events/trigger-proxy.js.map +1 -1
  51. package/dist/common/events/util.js +0 -15
  52. package/dist/common/events/util.js.map +1 -1
  53. package/dist/common/logs/logger-config.js +0 -4
  54. package/dist/common/logs/logger-config.js.map +1 -1
  55. package/dist/common/logs/logger-proxy.js +1 -8
  56. package/dist/common/logs/logger-proxy.js.map +1 -1
  57. package/dist/common/logs/request.js +37 -60
  58. package/dist/common/logs/request.js.map +1 -1
  59. package/dist/common/queue.js +4 -14
  60. package/dist/common/queue.js.map +1 -1
  61. package/dist/config.js +6 -6
  62. package/dist/config.js.map +1 -1
  63. package/dist/constants.js +109 -49
  64. package/dist/constants.js.map +1 -1
  65. package/dist/controls-options-manager/constants.js +14 -0
  66. package/dist/controls-options-manager/constants.js.map +1 -0
  67. package/dist/controls-options-manager/enums.js +15 -0
  68. package/dist/controls-options-manager/enums.js.map +1 -0
  69. package/dist/controls-options-manager/index.js +203 -0
  70. package/dist/controls-options-manager/index.js.map +1 -0
  71. package/dist/controls-options-manager/util.js +28 -0
  72. package/dist/controls-options-manager/util.js.map +1 -0
  73. package/dist/index.js +11 -18
  74. package/dist/index.js.map +1 -1
  75. package/dist/locus-info/controlsUtils.js +12 -29
  76. package/dist/locus-info/controlsUtils.js.map +1 -1
  77. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  78. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  79. package/dist/locus-info/fullState.js +0 -15
  80. package/dist/locus-info/fullState.js.map +1 -1
  81. package/dist/locus-info/hostUtils.js +4 -12
  82. package/dist/locus-info/hostUtils.js.map +1 -1
  83. package/dist/locus-info/index.js +186 -192
  84. package/dist/locus-info/index.js.map +1 -1
  85. package/dist/locus-info/infoUtils.js +3 -37
  86. package/dist/locus-info/infoUtils.js.map +1 -1
  87. package/dist/locus-info/mediaSharesUtils.js +12 -38
  88. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  89. package/dist/locus-info/parser.js +92 -118
  90. package/dist/locus-info/parser.js.map +1 -1
  91. package/dist/locus-info/selfUtils.js +34 -91
  92. package/dist/locus-info/selfUtils.js.map +1 -1
  93. package/dist/media/index.js +66 -153
  94. package/dist/media/index.js.map +1 -1
  95. package/dist/media/properties.js +83 -117
  96. package/dist/media/properties.js.map +1 -1
  97. package/dist/media/util.js +2 -9
  98. package/dist/media/util.js.map +1 -1
  99. package/dist/mediaQualityMetrics/config.js +505 -495
  100. package/dist/mediaQualityMetrics/config.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 +2141 -2210
  104. package/dist/meeting/index.js.map +1 -1
  105. package/dist/meeting/muteState.js +59 -82
  106. package/dist/meeting/muteState.js.map +1 -1
  107. package/dist/meeting/request.js +308 -264
  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 +45 -217
  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 +95 -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 +1 -13
  148. package/dist/metrics/config.js.map +1 -1
  149. package/dist/metrics/constants.js +1 -6
  150. package/dist/metrics/constants.js.map +1 -1
  151. package/dist/metrics/index.js +54 -156
  152. package/dist/metrics/index.js.map +1 -1
  153. package/dist/multistream/mediaRequestManager.js +74 -52
  154. package/dist/multistream/mediaRequestManager.js.map +1 -1
  155. package/dist/multistream/receiveSlot.js +48 -65
  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 +60 -76
  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 +147 -183
  174. package/dist/reachability/index.js.map +1 -1
  175. package/dist/reachability/request.js +15 -23
  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 -456
  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 +48 -70
  192. package/dist/roap/index.js.map +1 -1
  193. package/dist/roap/request.js +143 -131
  194. package/dist/roap/request.js.map +1 -1
  195. package/dist/roap/turnDiscovery.js +91 -98
  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 +361 -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/edit-lock-error.d.ts +15 -0
  208. package/dist/types/breakouts/index.d.ts +5 -0
  209. package/dist/types/breakouts/request.d.ts +22 -0
  210. package/dist/types/breakouts/utils.d.ts +8 -0
  211. package/dist/types/common/browser-detection.d.ts +9 -0
  212. package/dist/types/common/collection.d.ts +48 -0
  213. package/dist/types/common/config.d.ts +2 -0
  214. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  215. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  216. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  217. package/dist/types/common/errors/media.d.ts +15 -0
  218. package/dist/types/common/errors/parameter.d.ts +15 -0
  219. package/dist/types/common/errors/password-error.d.ts +15 -0
  220. package/dist/types/common/errors/permission.d.ts +14 -0
  221. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  222. package/dist/types/common/errors/reconnection.d.ts +15 -0
  223. package/dist/types/common/errors/stats.d.ts +15 -0
  224. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  225. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  226. package/dist/types/common/events/events-scope.d.ts +17 -0
  227. package/dist/types/common/events/events.d.ts +12 -0
  228. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  229. package/dist/types/common/events/util.d.ts +2 -0
  230. package/dist/types/common/logs/logger-config.d.ts +2 -0
  231. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  232. package/dist/types/common/logs/request.d.ts +34 -0
  233. package/dist/types/common/queue.d.ts +32 -0
  234. package/dist/types/config.d.ts +77 -0
  235. package/dist/types/constants.d.ts +916 -0
  236. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  237. package/dist/types/controls-options-manager/enums.d.ts +5 -0
  238. package/dist/types/controls-options-manager/index.d.ts +120 -0
  239. package/dist/types/controls-options-manager/util.d.ts +7 -0
  240. package/dist/types/index.d.ts +6 -0
  241. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  242. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  243. package/dist/types/locus-info/fullState.d.ts +2 -0
  244. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  245. package/dist/types/locus-info/index.d.ts +269 -0
  246. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  247. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  248. package/dist/types/locus-info/parser.d.ts +212 -0
  249. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  250. package/dist/types/media/index.d.ts +32 -0
  251. package/dist/types/media/properties.d.ts +108 -0
  252. package/dist/types/media/util.d.ts +2 -0
  253. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  254. package/dist/types/meeting/in-meeting-actions.d.ts +83 -0
  255. package/dist/types/meeting/index.d.ts +1699 -0
  256. package/dist/types/meeting/muteState.d.ts +116 -0
  257. package/dist/types/meeting/request.d.ts +271 -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 +169 -0
  278. package/dist/types/metrics/constants.d.ts +53 -0
  279. package/dist/types/metrics/index.d.ts +152 -0
  280. package/dist/types/multistream/mediaRequestManager.d.ts +51 -0
  281. package/dist/types/multistream/receiveSlot.d.ts +64 -0
  282. package/dist/types/multistream/receiveSlotManager.d.ts +46 -0
  283. package/dist/types/multistream/remoteMedia.d.ts +100 -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 +37 -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 +38 -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 +27 -21
  308. package/src/breakouts/README.md +199 -0
  309. package/src/breakouts/breakout.ts +130 -0
  310. package/src/breakouts/collection.ts +19 -0
  311. package/src/breakouts/edit-lock-error.ts +25 -0
  312. package/src/breakouts/index.ts +504 -0
  313. package/src/breakouts/request.ts +55 -0
  314. package/src/breakouts/utils.ts +39 -0
  315. package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
  316. package/src/common/collection.ts +9 -7
  317. package/src/common/{config.js → config.ts} +1 -1
  318. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  319. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  320. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  321. package/src/common/errors/{media.js → media.ts} +11 -7
  322. package/src/common/errors/parameter.ts +11 -7
  323. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  324. package/src/common/errors/{permission.js → permission.ts} +10 -6
  325. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  326. package/src/common/errors/{stats.js → stats.ts} +11 -7
  327. package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -7
  328. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  329. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  330. package/src/common/events/{events.js → events.ts} +5 -1
  331. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  332. package/src/common/events/{util.js → util.ts} +2 -3
  333. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  334. package/src/common/logs/logger-proxy.ts +44 -0
  335. package/src/common/logs/{request.js → request.ts} +22 -9
  336. package/src/common/queue.ts +1 -2
  337. package/src/{config.js → config.ts} +17 -12
  338. package/src/constants.ts +62 -5
  339. package/src/controls-options-manager/constants.ts +5 -0
  340. package/src/controls-options-manager/enums.ts +6 -0
  341. package/src/controls-options-manager/index.ts +183 -0
  342. package/src/controls-options-manager/util.ts +20 -0
  343. package/src/index.js +4 -1
  344. package/src/locus-info/controlsUtils.ts +114 -0
  345. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  346. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  347. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  348. package/src/locus-info/{index.js → index.ts} +150 -66
  349. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  350. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
  351. package/src/locus-info/{parser.js → parser.ts} +67 -79
  352. package/src/locus-info/{selfUtils.js → selfUtils.ts} +123 -68
  353. package/src/media/{index.js → index.ts} +182 -173
  354. package/src/media/{properties.js → properties.ts} +60 -37
  355. package/src/media/{util.js → util.ts} +2 -2
  356. package/src/mediaQualityMetrics/config.ts +384 -0
  357. package/src/meeting/in-meeting-actions.ts +31 -3
  358. package/src/meeting/{index.js → index.ts} +2512 -1579
  359. package/src/meeting/{muteState.js → muteState.ts} +95 -49
  360. package/src/meeting/{request.js → request.ts} +326 -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} +117 -119
  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} +253 -92
  381. package/src/metrics/{constants.js → constants.ts} +0 -6
  382. package/src/metrics/{index.js → index.ts} +105 -94
  383. package/src/multistream/mediaRequestManager.ts +101 -39
  384. package/src/multistream/receiveSlot.ts +62 -26
  385. package/src/multistream/receiveSlotManager.ts +35 -21
  386. package/src/multistream/remoteMedia.ts +38 -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} +109 -85
  394. package/src/reachability/request.ts +46 -35
  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} +196 -103
  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} +77 -60
  403. package/src/roap/request.ts +172 -0
  404. package/src/roap/turnDiscovery.ts +81 -41
  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 +665 -464
  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/edit-lock-error.ts +30 -0
  416. package/test/unit/spec/breakouts/index.ts +707 -0
  417. package/test/unit/spec/breakouts/request.ts +104 -0
  418. package/test/unit/spec/breakouts/utils.js +47 -0
  419. package/test/unit/spec/common/browser-detection.js +9 -28
  420. package/test/unit/spec/controls-options-manager/index.js +124 -0
  421. package/test/unit/spec/controls-options-manager/util.js +66 -0
  422. package/test/unit/spec/fixture/locus.js +92 -90
  423. package/test/unit/spec/locus-info/controlsUtils.js +25 -5
  424. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  425. package/test/unit/spec/locus-info/index.js +104 -2
  426. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  427. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  428. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  429. package/test/unit/spec/locus-info/parser.js +3 -9
  430. package/test/unit/spec/locus-info/selfConstant.js +97 -103
  431. package/test/unit/spec/locus-info/selfUtils.js +105 -12
  432. package/test/unit/spec/media/index.ts +39 -53
  433. package/test/unit/spec/media/properties.ts +9 -9
  434. package/test/unit/spec/meeting/in-meeting-actions.ts +13 -2
  435. package/test/unit/spec/meeting/index.js +2253 -811
  436. package/test/unit/spec/meeting/muteState.js +74 -55
  437. package/test/unit/spec/meeting/request.js +141 -43
  438. package/test/unit/spec/meeting/utils.js +106 -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 +318 -64
  453. package/test/unit/spec/multistream/receiveSlot.ts +68 -17
  454. package/test/unit/spec/multistream/receiveSlotManager.ts +41 -13
  455. package/test/unit/spec/multistream/remoteMedia.ts +38 -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 +70 -27
  461. package/test/unit/spec/reachability/request.js +66 -0
  462. package/test/unit/spec/reconnection-manager/index.js +58 -30
  463. package/test/unit/spec/recording-controller/index.js +231 -0
  464. package/test/unit/spec/recording-controller/util.js +102 -0
  465. package/test/unit/spec/roap/index.ts +12 -8
  466. package/test/unit/spec/roap/request.ts +217 -0
  467. package/test/unit/spec/roap/turnDiscovery.ts +72 -49
  468. package/test/unit/spec/stats-analyzer/index.js +86 -57
  469. package/test/utils/cmr.js +44 -42
  470. package/test/utils/constants.js +9 -0
  471. package/test/utils/testUtils.js +98 -77
  472. package/test/utils/webex-config.js +22 -18
  473. package/test/utils/webex-test-users.js +57 -50
  474. package/tsconfig.json +6 -0
  475. package/dist/media/internal-media-core-wrapper.js +0 -22
  476. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  477. package/dist/meeting/effectsState.js +0 -327
  478. package/dist/meeting/effectsState.js.map +0 -1
  479. package/dist/multistream/multistreamMedia.js +0 -116
  480. package/dist/multistream/multistreamMedia.js.map +0 -1
  481. package/dist/peer-connection-manager/util.js +0 -124
  482. package/dist/peer-connection-manager/util.js.map +0 -1
  483. package/src/common/logs/logger-proxy.js +0 -33
  484. package/src/locus-info/controlsUtils.js +0 -102
  485. package/src/media/internal-media-core-wrapper.ts +0 -9
  486. package/src/mediaQualityMetrics/config.js +0 -382
  487. package/src/meeting/effectsState.js +0 -205
  488. package/src/meeting-info/meeting-info-v2.js +0 -255
  489. package/src/meetings/index.js +0 -1015
  490. package/src/multistream/multistreamMedia.ts +0 -92
  491. package/src/peer-connection-manager/util.ts +0 -117
  492. package/src/roap/request.js +0 -127
  493. package/src/statsAnalyzer/global.js +0 -133
  494. package/src/statsAnalyzer/index.js +0 -1006
  495. package/src/statsAnalyzer/mqaUtil.js +0 -173
  496. package/test/unit/spec/meeting/effectsState.js +0 -291
  497. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
  498. /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
@@ -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
package/test/utils/cmr.js CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  import uuid from 'uuid';
3
2
  import retry from '@webex/test-helper-retry';
4
3
 
@@ -23,16 +22,16 @@ CMR.reserve = (webex, claimed) => {
23
22
  authorization: `Bearer ${webex.credentials.supertoken.access_token}`,
24
23
  'cisco-no-http-redirect': null,
25
24
  'spark-user-agent': null,
26
- trackingid: `ITCLIENT_${uuid.v4()}_0_imi:true`
25
+ trackingid: `ITCLIENT_${uuid.v4()}_0_imi:true`,
27
26
  },
28
27
  body: {
29
28
  resourceType,
30
29
  requestMetaData: {
31
30
  emailAddress: `test${uuid.v4()}@wx2.example.com`,
32
- loginType: 'loginGuest'
31
+ loginType: 'loginGuest',
33
32
  },
34
- reservedBy: 'Webex JavaScript SDK Test Suite'
35
- }
33
+ reservedBy: 'Webex JavaScript SDK Test Suite',
34
+ },
36
35
  };
37
36
 
38
37
  if (claimed) {
@@ -40,7 +39,8 @@ CMR.reserve = (webex, claimed) => {
40
39
  }
41
40
  console.log('USER ID ', webex.internal.device.userId);
42
41
 
43
- return webex.request(requestBody)
42
+ return webex
43
+ .request(requestBody)
44
44
  .then((response) => {
45
45
  const cmr = response.body;
46
46
 
@@ -56,47 +56,49 @@ CMR.reserve = (webex, claimed) => {
56
56
  CMR.release = (webex, reservationUrl) => {
57
57
  console.log('releasing cmr');
58
58
 
59
- return webex.request({
60
- method: 'DELETE',
61
- uri: reservationUrl,
62
- headers: {
63
- authorization: `Bearer ${webex.credentials.supertoken.access_token}`,
64
- 'cisco-no-http-redirect': null,
65
- 'spark-user-agent': null
66
- }
67
- })
59
+ return webex
60
+ .request({
61
+ method: 'DELETE',
62
+ uri: reservationUrl,
63
+ headers: {
64
+ authorization: `Bearer ${webex.credentials.supertoken.access_token}`,
65
+ 'cisco-no-http-redirect': null,
66
+ 'spark-user-agent': null,
67
+ },
68
+ })
68
69
  .then(() => console.log('released cmr'));
69
70
  };
70
71
 
71
- CMR.waitForHostToJoin = (webex, resourceUrl) => retry(() => {
72
- console.log('checking if the host has joined');
73
-
74
- return webex.request({
75
- method: 'GET',
76
- uri: resourceUrl,
77
- headers: {
78
- authorization: `Bearer ${webex.credentials.supertoken.access_token}`,
79
- 'cisco-no-http-redirect': null,
80
- 'spark-user-agent': null
81
- }
72
+ CMR.waitForHostToJoin = (webex, resourceUrl) =>
73
+ retry(() => {
74
+ console.log('checking if the host has joined');
75
+
76
+ return webex
77
+ .request({
78
+ method: 'GET',
79
+ uri: resourceUrl,
80
+ headers: {
81
+ authorization: `Bearer ${webex.credentials.supertoken.access_token}`,
82
+ 'cisco-no-http-redirect': null,
83
+ 'spark-user-agent': null,
84
+ },
85
+ })
86
+ .then((res) => {
87
+ if (res.body && res.body.meeting.hostPresent) {
88
+ console.log('the host has joined');
89
+
90
+ return;
91
+ }
92
+
93
+ console.log('the host has not joined');
94
+ throw new Error('Meeting host has not yet joined');
95
+ });
82
96
  })
83
- .then((res) => {
84
- if (res.body && res.body.meeting.hostPresent) {
85
- console.log('the host has joined');
97
+ .then(() => true)
98
+ .catch((reason) => {
99
+ console.warn(reason);
86
100
 
87
- return;
88
- }
89
-
90
- console.log('the host has not joined');
91
- throw new Error('Meeting host has not yet joined');
101
+ return false;
92
102
  });
93
- })
94
- .then(() => true)
95
- .catch((reason) => {
96
- console.warn(reason);
97
-
98
- return false;
99
- });
100
-
101
103
 
102
104
  export default CMR;
@@ -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
+ };
@@ -19,7 +19,7 @@ const waitForSpy = (spy, event) => {
19
19
  resolve(spy.args[0][0]);
20
20
  }
21
21
  }, 1000);
22
- })
22
+ }),
23
23
  ]);
24
24
  };
25
25
 
@@ -40,7 +40,7 @@ const waitForStateChange = (meeting, state) => {
40
40
  resolve(meeting.locusInfo.parsedLocus.states);
41
41
  }
42
42
  }, 1000);
43
- })
43
+ }),
44
44
  ]);
45
45
  };
46
46
 
@@ -59,44 +59,46 @@ const waitForCallEnded = (user, email) => {
59
59
  clearTimeout(timer);
60
60
  clearInterval(interval);
61
61
  resolve();
62
- }
63
- else {
62
+ } else {
64
63
  console.log('MEETING STILL EXISTS!', user.webex.meetings.getAllMeetings());
65
64
  }
66
65
  }, 3000);
67
- })
66
+ }),
68
67
  ]);
69
68
  };
70
69
 
71
- const syncAndEndMeeting = (user) => user.webex.meetings.syncMeetings()
72
- .then(() => {
73
- const promise = [];
74
- const meetings = user.webex.meetings.getAllMeetings();
70
+ const syncAndEndMeeting = (user) =>
71
+ user.webex.meetings
72
+ .syncMeetings()
73
+ .then(() => {
74
+ const promise = [];
75
+ const meetings = user.webex.meetings.getAllMeetings();
75
76
 
76
- if (Object.keys(meetings).length === 0) {
77
- return Promise.resolve();
78
- }
79
- Object.keys(meetings)
80
- .forEach((key) => {
77
+ if (Object.keys(meetings).length === 0) {
78
+ return Promise.resolve();
79
+ }
80
+ Object.keys(meetings).forEach((key) => {
81
81
  promise.push(meetings[key].leave());
82
82
  });
83
83
 
84
- return Promise.all(promise);
85
- })
86
- .then(() => new Promise((resolve) => {
87
- const interval = setInterval(() => {
88
- if (Object.keys(user.webex.meetings.getAllMeetings()).length === 0) {
89
- clearInterval(interval);
90
- resolve();
91
- }
92
- else {
93
- console.log('End Meetings before test failed');
94
- }
95
- }, 3000);
96
- }))
97
- .catch((e) => {
98
- console.log('ERROR on syncMeeting', e);
99
- });
84
+ return Promise.all(promise);
85
+ })
86
+ .then(
87
+ () =>
88
+ new Promise((resolve) => {
89
+ const interval = setInterval(() => {
90
+ if (Object.keys(user.webex.meetings.getAllMeetings()).length === 0) {
91
+ clearInterval(interval);
92
+ resolve();
93
+ } else {
94
+ console.log('End Meetings before test failed');
95
+ }
96
+ }, 3000);
97
+ })
98
+ )
99
+ .catch((e) => {
100
+ console.log('ERROR on syncMeeting', e);
101
+ });
100
102
 
101
103
  //
102
104
  const waitForEvents = (scopeEvents, timeout = max) => {
@@ -125,11 +127,12 @@ const waitForEvents = (scopeEvents, timeout = max) => {
125
127
  obj.user.memberId = value.meeting.locusInfo.parsedLocus.selfId;
126
128
  }
127
129
  if (obj.event === 'meeting:removed') {
128
- console.log(`MEETING:REMOVED ${obj.user.name} ID ${obj.user.meeting.id} correlationID ${obj.user.meeting.correlationId}`);
130
+ console.log(
131
+ `MEETING:REMOVED ${obj.user.name} ID ${obj.user.meeting.id} correlationID ${obj.user.meeting.correlationId}`
132
+ );
129
133
  if (obj.user.meeting.id === value.meetingId) {
130
134
  obj.user.meeting = null;
131
- }
132
- else {
135
+ } else {
133
136
  console.log('MEETING EXISTING ', obj.user.webex.meetings.getAllMeetings());
134
137
  reject(new Error(`Different Meeting Object ${value}`));
135
138
  }
@@ -142,8 +145,7 @@ const waitForEvents = (scopeEvents, timeout = max) => {
142
145
 
143
146
  resolve(result);
144
147
  }
145
- }
146
- else if (result.length === scopeEvents.length) {
148
+ } else if (result.length === scopeEvents.length) {
147
149
  resolve(result);
148
150
  obj.scope.off(obj.event, handler);
149
151
  clearTimeout(timer);
@@ -152,12 +154,11 @@ const waitForEvents = (scopeEvents, timeout = max) => {
152
154
 
153
155
  obj.scope.on(obj.event, handler);
154
156
  });
155
- }
156
- catch (e) {
157
+ } catch (e) {
157
158
  console.error('waitForEvents', e);
158
159
  reject(e);
159
160
  }
160
- })
161
+ }),
161
162
  ]);
162
163
  };
163
164
 
@@ -172,32 +173,41 @@ const delayedPromise = (promise) => {
172
173
  }),
173
174
  new Promise((resolve, reject) => {
174
175
  setTimeout(() => {
175
- promise.then((res) => {
176
- resolve(res);
177
- clearTimeout(timer);
178
- })
176
+ promise
177
+ .then((res) => {
178
+ resolve(res);
179
+ clearTimeout(timer);
180
+ })
179
181
  .catch((e) => {
180
182
  console.error('delayedPromise', e);
181
183
  reject(e);
182
184
  });
183
185
  }, 2000);
184
- })
186
+ }),
185
187
  ]);
186
188
  };
187
189
 
188
- const delayedTest = (callback, timeout) => new Promise((resolve) => {
189
- setTimeout(() => {
190
- callback();
191
- resolve();
192
- }, timeout);
193
- });
194
-
195
- const addMedia = (user) => {
196
- const mediaReadyPromises = {
197
- local: new Defer(),
198
- remoteAudio: new Defer(),
199
- remoteVideo: new Defer(),
200
- };
190
+ const delayedTest = (callback, timeout) =>
191
+ new Promise((resolve) => {
192
+ setTimeout(() => {
193
+ callback();
194
+ resolve();
195
+ }, timeout);
196
+ });
197
+
198
+ const addMedia = async (user, options = {}) => {
199
+ const mediaReadyPromises = Array.isArray(options.expectedMediaReadyTypes)
200
+ ? options.expectedMediaReadyTypes.reduce((output, expectedMediaReadyType) => {
201
+ if (typeof expectedMediaReadyType !== 'string') {
202
+ return output;
203
+ }
204
+
205
+ output[expectedMediaReadyType] = new Defer();
206
+
207
+ return output;
208
+ }, {})
209
+ : {local: new Defer(), remoteAudio: new Defer(), remoteVideo: new Defer()};
210
+
201
211
  const mediaReady = (media) => {
202
212
  if (!media) {
203
213
  return;
@@ -209,35 +219,44 @@ const addMedia = (user) => {
209
219
 
210
220
  user.meeting.on('media:ready', mediaReady);
211
221
 
212
- return user.meeting.getMediaStreams({
213
- sendAudio: true,
214
- sendVideo: true,
215
- sendShare: false
216
- })
217
- .then(([localStream, localShare]) => user.meeting.addMedia({
222
+ const [localStream, localShare] = await user.meeting
223
+ .getMediaStreams({
224
+ sendAudio: true,
225
+ sendVideo: true,
226
+ sendShare: false,
227
+ });
228
+
229
+ if (options.multistream) {
230
+ await user.meeting.addMedia({});
231
+
232
+ await user.meeting.publishTracks({microphone: localStream.getAudioTracks()[0], camera: localStream.getVideoTracks()[0]})
233
+ } else {
234
+ await user.meeting.addMedia({
218
235
  mediaSettings: {
219
236
  sendAudio: true,
220
237
  sendVideo: true,
221
238
  sendShare: false,
222
239
  receiveShare: true,
223
240
  receiveAudio: true,
224
- receiveVideo: true
241
+ receiveVideo: true,
225
242
  },
226
243
  localShare,
227
- localStream
228
- }))
229
- .then(() => Promise.all(Object.values(mediaReadyPromises).map((defer) => defer.promise)))
230
- .then(() => {
231
- assert.exists(user.meeting.mediaProperties.audioTrack, 'audioTrack not present');
232
- assert.exists(user.meeting.mediaProperties.videoTrack, 'videoTrack not present');
244
+ localStream,
233
245
  });
246
+ }
247
+
248
+ await Promise.all(Object.values(mediaReadyPromises).map((defer) => defer.promise));
249
+
250
+ assert.exists(user.meeting.mediaProperties.audioTrack, 'audioTrack not present');
251
+ assert.exists(user.meeting.mediaProperties.videoTrack, 'videoTrack not present');
234
252
  };
235
253
 
236
- const waitUntil = (waitTime) => new Promise((resolve) => {
237
- setTimeout(() => {
238
- resolve();
239
- }, waitTime);
240
- });
254
+ const waitUntil = (waitTime) =>
255
+ new Promise((resolve) => {
256
+ setTimeout(() => {
257
+ resolve();
258
+ }, waitTime);
259
+ });
241
260
 
242
261
  const flushPromises = () => new Promise(setImmediate);
243
262
 
@@ -259,7 +278,10 @@ const getCircularReplacer = () => {
259
278
 
260
279
  // this function is meant to be used as the "match" callback with waitForEvents()
261
280
  // when you want to wait for a particular users's status to reach a certain value
262
- const checkParticipantUpdatedStatus = (user, expectedStatus) => (event) => !!event.delta.updated.find((member) => user.meeting.members.selfId === member.id && member.status === expectedStatus);
281
+ const checkParticipantUpdatedStatus = (user, expectedStatus) => (event) =>
282
+ !!event.delta.updated.find(
283
+ (member) => user.meeting.members.selfId === member.id && member.status === expectedStatus
284
+ );
263
285
 
264
286
  export default {
265
287
  waitForSpy,
@@ -273,6 +295,5 @@ export default {
273
295
  waitUntil,
274
296
  delayedTest,
275
297
  flushPromises,
276
- getCircularReplacer
298
+ getCircularReplacer,
277
299
  };
278
-