@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
@@ -1,6 +1,7 @@
1
+ /* eslint-disable valid-jsdoc */
1
2
  import {cloneDeep, remove} from 'lodash';
2
3
  import {EventMap} from 'typed-emitter';
3
- import {MediaConnection as MC} from '@webex/internal-media-core';
4
+ import {MediaType} from '@webex/internal-media-core';
4
5
 
5
6
  import LoggerProxy from '../common/logs/logger-proxy';
6
7
  import EventsScope from '../common/events/events-scope';
@@ -30,8 +31,8 @@ export interface MemberVideoPane {
30
31
  }
31
32
 
32
33
  export interface VideoLayout {
33
- screenShareVideo: {
34
- size: PaneSize | null; // null if you don't want to receive any screen share video
34
+ screenShareVideo?: {
35
+ size: PaneSize;
35
36
  };
36
37
  activeSpeakerVideoPaneGroups?: ActiveSpeakerVideoPaneGroup[]; // list of active speaker video pane groups
37
38
  memberVideoPanes?: MemberVideoPane[]; // list of video panes for specific members, CSI values can be changed later via setVideoPaneCsi()
@@ -40,6 +41,7 @@ export interface VideoLayout {
40
41
  export interface Configuration {
41
42
  audio: {
42
43
  numOfActiveSpeakerStreams: number; // number of audio streams we want to receive
44
+ numOfScreenShareStreams: number; // 1 should be enough, because in webex only 1 person at a time can be presenting screen share
43
45
  };
44
46
  video: {
45
47
  preferLiveVideo: boolean; // applies to all pane groups with active speaker policy
@@ -47,17 +49,12 @@ export interface Configuration {
47
49
 
48
50
  layouts: {[key: LayoutId]: VideoLayout}; // a map of all available layouts, a layout can be set via setLayout() method
49
51
  };
50
- screenShare: {
51
- audio: boolean; // whether we ever want to receive screen share audio at all
52
- video: boolean; // whether we ever want to receive screen share video at all
53
- };
54
52
  }
55
53
 
56
54
  /* Predefined layouts: */
57
55
 
58
56
  // An "all equal" grid, with size up to 3 x 3 = 9:
59
57
  const AllEqualLayout: VideoLayout = {
60
- screenShareVideo: {size: null},
61
58
  activeSpeakerVideoPaneGroups: [
62
59
  {
63
60
  id: 'main',
@@ -70,7 +67,6 @@ const AllEqualLayout: VideoLayout = {
70
67
 
71
68
  // A layout with just a single remote active speaker video pane:
72
69
  const SingleLayout: VideoLayout = {
73
- screenShareVideo: {size: null},
74
70
  activeSpeakerVideoPaneGroups: [
75
71
  {
76
72
  id: 'main',
@@ -83,7 +79,6 @@ const SingleLayout: VideoLayout = {
83
79
 
84
80
  // A layout with 1 big pane for the highest priority active speaker and 5 small panes for other active speakers:
85
81
  const OnePlusFiveLayout: VideoLayout = {
86
- screenShareVideo: {size: null},
87
82
  activeSpeakerVideoPaneGroups: [
88
83
  {
89
84
  id: 'mainBigOne',
@@ -102,7 +97,6 @@ const OnePlusFiveLayout: VideoLayout = {
102
97
 
103
98
  // A layout with 2 big panes for 2 main active speakers and a strip of 6 small panes for other active speakers:
104
99
  const TwoMainPlusSixSmallLayout: VideoLayout = {
105
- screenShareVideo: {size: null},
106
100
  activeSpeakerVideoPaneGroups: [
107
101
  {
108
102
  id: 'mainGroupWith2BigPanes',
@@ -134,7 +128,6 @@ const RemoteScreenShareWithSmallThumbnailsLayout: VideoLayout = {
134
128
 
135
129
  // A staged layout with 4 pre-selected meeting participants in the main 2x2 grid and 6 small panes for other active speakers at the top:
136
130
  const Stage2x2With6ThumbnailsLayout: VideoLayout = {
137
- screenShareVideo: {size: null},
138
131
  activeSpeakerVideoPaneGroups: [
139
132
  {
140
133
  id: 'thumbnails',
@@ -160,6 +153,7 @@ const Stage2x2With6ThumbnailsLayout: VideoLayout = {
160
153
  export const DefaultConfiguration: Configuration = {
161
154
  audio: {
162
155
  numOfActiveSpeakerStreams: 3,
156
+ numOfScreenShareStreams: 1,
163
157
  },
164
158
  video: {
165
159
  preferLiveVideo: true,
@@ -173,16 +167,12 @@ export const DefaultConfiguration: Configuration = {
173
167
  ScreenShareView: RemoteScreenShareWithSmallThumbnailsLayout,
174
168
  },
175
169
  },
176
- screenShare: {
177
- audio: true,
178
- video: true,
179
- },
180
170
  };
181
171
 
182
172
  export enum Event {
183
173
  // events for audio streams
184
174
  AudioCreated = 'AudioCreated',
185
- ScreenShareAudioCreated = 'ScreenShareCreated',
175
+ ScreenShareAudioCreated = 'ScreenShareAudioCreated',
186
176
 
187
177
  // events for video streams
188
178
  VideoLayoutChanged = 'VideoLayoutChanged',
@@ -199,7 +189,7 @@ export interface VideoLayoutChangedEventData {
199
189
  export interface Events extends EventMap {
200
190
  // audio
201
191
  [Event.AudioCreated]: (audio: RemoteMediaGroup) => void;
202
- [Event.ScreenShareAudioCreated]: (screenShareAudio: RemoteMedia) => void;
192
+ [Event.ScreenShareAudioCreated]: (screenShareAudio: RemoteMediaGroup) => void;
203
193
 
204
194
  // video
205
195
  [Event.VideoLayoutChanged]: (data: VideoLayoutChangedEventData) => void;
@@ -223,14 +213,18 @@ export class RemoteMediaManager extends EventsScope {
223
213
  private mediaRequestManagers: {
224
214
  audio: MediaRequestManager;
225
215
  video: MediaRequestManager;
216
+ screenShareAudio: MediaRequestManager;
217
+ screenShareVideo: MediaRequestManager;
226
218
  };
227
219
 
228
220
  private currentLayout?: VideoLayout;
229
221
 
230
222
  private slots: {
231
223
  audio: ReceiveSlot[];
232
- screenShareAudio?: ReceiveSlot;
233
- screenShareVideo?: ReceiveSlot;
224
+ screenShare: {
225
+ audio: ReceiveSlot[];
226
+ video?: ReceiveSlot;
227
+ };
234
228
  video: {
235
229
  unused: ReceiveSlot[];
236
230
  activeSpeaker: ReceiveSlot[];
@@ -246,6 +240,10 @@ export class RemoteMediaManager extends EventsScope {
246
240
  };
247
241
  memberPanes: {[key: PaneId]: RemoteMedia};
248
242
  };
243
+ screenShare: {
244
+ audio?: RemoteMediaGroup;
245
+ video?: RemoteMediaGroup;
246
+ };
249
247
  };
250
248
 
251
249
  private receiveSlotAllocations: {
@@ -267,6 +265,8 @@ export class RemoteMediaManager extends EventsScope {
267
265
  mediaRequestManagers: {
268
266
  audio: MediaRequestManager;
269
267
  video: MediaRequestManager;
268
+ screenShareAudio: MediaRequestManager;
269
+ screenShareVideo: MediaRequestManager;
270
270
  },
271
271
  config: Configuration = DefaultConfiguration
272
272
  ) {
@@ -281,14 +281,20 @@ export class RemoteMediaManager extends EventsScope {
281
281
  activeSpeakerGroups: {},
282
282
  memberPanes: {},
283
283
  },
284
+ screenShare: {
285
+ audio: undefined,
286
+ video: undefined,
287
+ },
284
288
  };
285
289
 
286
290
  this.checkConfigValidity();
287
291
 
288
292
  this.slots = {
289
293
  audio: [],
290
- screenShareAudio: undefined,
291
- screenShareVideo: undefined,
294
+ screenShare: {
295
+ audio: [],
296
+ video: undefined,
297
+ },
292
298
  video: {
293
299
  unused: [],
294
300
  activeSpeaker: [],
@@ -359,8 +365,8 @@ export class RemoteMediaManager extends EventsScope {
359
365
 
360
366
  await this.createAudioMedia();
361
367
 
362
- // todo: create screen share audio remote media (SPARK-377812)
363
- // todo: create screen share video receive slot (SPARK-377812)
368
+ await this.createScreenShareReceiveSlots();
369
+ this.createScreenShareAudioMedia();
364
370
 
365
371
  await this.preallocateVideoReceiveSlots();
366
372
 
@@ -373,14 +379,27 @@ export class RemoteMediaManager extends EventsScope {
373
379
  */
374
380
  public stop() {
375
381
  // invalidate all remoteMedia objects
376
- this.invalidateCurrentRemoteMedia({audio: true, video: true, commit: true});
382
+ this.invalidateCurrentRemoteMedia({
383
+ audio: true,
384
+ video: true,
385
+ screenShareAudio: true,
386
+ screenShareVideo: true,
387
+ commit: true,
388
+ });
377
389
 
378
390
  // release all audio receive slots
379
391
  this.slots.audio.forEach((slot) => this.receiveSlotManager.releaseSlot(slot));
380
392
  this.slots.audio.length = 0;
381
393
 
382
- // todo: screenshare slots... (SPARK-377812)
394
+ // release screen share slots
395
+ this.slots.screenShare.audio.forEach((slot) => this.receiveSlotManager.releaseSlot(slot));
396
+ this.slots.screenShare.audio.length = 0;
397
+ if (this.slots.screenShare.video) {
398
+ this.receiveSlotManager.releaseSlot(this.slots.screenShare.video);
399
+ this.slots.screenShare.video = undefined;
400
+ }
383
401
 
402
+ // release video slots
384
403
  this.receiveSlotAllocations = {activeSpeaker: {}, receiverSelected: {}};
385
404
 
386
405
  this.slots.video.unused.push(...this.slots.video.activeSpeaker);
@@ -432,7 +451,8 @@ export class RemoteMediaManager extends EventsScope {
432
451
  while (this.slots.video.unused.length < maxNumVideoPanesRequired) {
433
452
  // eslint-disable-next-line no-await-in-loop
434
453
  this.slots.video.unused.push(
435
- await this.receiveSlotManager.allocateSlot(MC.MediaType.VideoMain)
454
+ // eslint-disable-next-line no-await-in-loop
455
+ await this.receiveSlotManager.allocateSlot(MediaType.VideoMain)
436
456
  );
437
457
  }
438
458
  }
@@ -457,6 +477,7 @@ export class RemoteMediaManager extends EventsScope {
457
477
 
458
478
  await this.updateVideoReceiveSlots();
459
479
  this.updateVideoRemoteMediaObjects();
480
+ this.updateScreenShareVideoRemoteMediaObject();
460
481
  this.emitVideoLayoutChangedEvent();
461
482
  }
462
483
 
@@ -476,7 +497,7 @@ export class RemoteMediaManager extends EventsScope {
476
497
  // create the audio receive slots
477
498
  for (let i = 0; i < this.config.audio.numOfActiveSpeakerStreams; i += 1) {
478
499
  // eslint-disable-next-line no-await-in-loop
479
- const slot = await this.receiveSlotManager.allocateSlot(MC.MediaType.AudioMain);
500
+ const slot = await this.receiveSlotManager.allocateSlot(MediaType.AudioMain);
480
501
 
481
502
  this.slots.audio.push(slot);
482
503
  }
@@ -496,6 +517,50 @@ export class RemoteMediaManager extends EventsScope {
496
517
  );
497
518
  }
498
519
 
520
+ /**
521
+ * Creates receive slots required for receiving screen share audio and video
522
+ */
523
+ private async createScreenShareReceiveSlots() {
524
+ // audio
525
+ for (let i = 0; i < this.config.audio.numOfScreenShareStreams; i += 1) {
526
+ // eslint-disable-next-line no-await-in-loop
527
+ const slot = await this.receiveSlotManager.allocateSlot(MediaType.AudioSlides);
528
+
529
+ this.slots.screenShare.audio.push(slot);
530
+ }
531
+
532
+ // video
533
+ const isAnyLayoutContainingScreenShareVideo = Object.values(this.config.video.layouts).some(
534
+ (layout) => !!layout.screenShareVideo
535
+ );
536
+
537
+ if (isAnyLayoutContainingScreenShareVideo) {
538
+ this.slots.screenShare.video = await this.receiveSlotManager.allocateSlot(
539
+ MediaType.VideoSlides
540
+ );
541
+ }
542
+ }
543
+
544
+ /**
545
+ * Creates RemoteMedia objects for screen share
546
+ */
547
+ private createScreenShareAudioMedia() {
548
+ if (this.slots.screenShare.audio.length > 0) {
549
+ this.media.screenShare.audio = new RemoteMediaGroup(
550
+ this.mediaRequestManagers.screenShareAudio,
551
+ this.slots.screenShare.audio,
552
+ 255,
553
+ true
554
+ );
555
+
556
+ this.emit(
557
+ {file: 'multistream/remoteMediaManager', function: 'createScreenShareAudioMedia'},
558
+ Event.ScreenShareAudioCreated,
559
+ this.media.screenShare.audio
560
+ );
561
+ }
562
+ }
563
+
499
564
  /**
500
565
  * Goes over all receiver-selected slots and keeps only the ones that are required by a given layout,
501
566
  * the rest are all moved to the "unused" list
@@ -600,7 +665,8 @@ export class RemoteMediaManager extends EventsScope {
600
665
  while (numSlotsToCreate > 0) {
601
666
  // eslint-disable-next-line no-await-in-loop
602
667
  this.slots.video.unused.push(
603
- await this.receiveSlotManager.allocateSlot(MC.MediaType.VideoMain)
668
+ // eslint-disable-next-line no-await-in-loop
669
+ await this.receiveSlotManager.allocateSlot(MediaType.VideoMain)
604
670
  );
605
671
  numSlotsToCreate -= 1;
606
672
  }
@@ -631,7 +697,13 @@ export class RemoteMediaManager extends EventsScope {
631
697
  */
632
698
  private updateVideoRemoteMediaObjects() {
633
699
  // invalidate all the previous remote media objects and cancel their media requests
634
- this.invalidateCurrentRemoteMedia({audio: false, video: true, commit: false});
700
+ this.invalidateCurrentRemoteMedia({
701
+ audio: false,
702
+ video: true,
703
+ screenShareAudio: false,
704
+ screenShareVideo: false,
705
+ commit: false,
706
+ });
635
707
 
636
708
  // create new remoteMediaGroup objects
637
709
  this.media.video.activeSpeakerGroups = {};
@@ -686,16 +758,53 @@ export class RemoteMediaManager extends EventsScope {
686
758
  );
687
759
  }
688
760
  }
689
- // todo: screenshare (SPARK-377812)
690
761
 
691
762
  this.mediaRequestManagers.video.commit();
692
763
  }
693
764
 
765
+ /**
766
+ * Checks if current layout requires a screen share.
767
+ * If it does, it creates new RemoteMediaGroup object for screen share
768
+ * and sends the media requests for it.
769
+ * If it doesn't, it makes sure we clean up any RemoteMediaGroup objects
770
+ * created earlier for screen share (for previous layout).
771
+ */
772
+ private updateScreenShareVideoRemoteMediaObject() {
773
+ this.invalidateCurrentRemoteMedia({
774
+ audio: false,
775
+ video: false,
776
+ screenShareAudio: false,
777
+ screenShareVideo: true,
778
+ commit: false,
779
+ });
780
+
781
+ this.media.screenShare.video = undefined;
782
+
783
+ if (this.currentLayout?.screenShareVideo) {
784
+ // we create a group of 1, because for screen share we need to use the "active speaker" policy
785
+ this.media.screenShare.video = new RemoteMediaGroup(
786
+ this.mediaRequestManagers.screenShareVideo,
787
+ [this.slots.screenShare.video],
788
+ 255,
789
+ false,
790
+ {resolution: this.currentLayout.screenShareVideo.size}
791
+ );
792
+ }
793
+
794
+ this.mediaRequestManagers.screenShareVideo.commit();
795
+ }
796
+
694
797
  /**
695
798
  * Invalidates all remote media objects belonging to currently selected layout
696
799
  */
697
- private invalidateCurrentRemoteMedia(options: {audio: boolean; video: boolean; commit: boolean}) {
698
- const {audio, video, commit} = options;
800
+ private invalidateCurrentRemoteMedia(options: {
801
+ audio: boolean;
802
+ video: boolean;
803
+ screenShareAudio: boolean;
804
+ screenShareVideo: boolean;
805
+ commit: boolean;
806
+ }) {
807
+ const {audio, video, screenShareAudio, screenShareVideo, commit} = options;
699
808
 
700
809
  if (audio && this.media.audio) {
701
810
  this.media.audio.stop(commit);
@@ -711,12 +820,19 @@ export class RemoteMediaManager extends EventsScope {
711
820
  this.mediaRequestManagers.video.commit();
712
821
  }
713
822
  }
823
+
824
+ if (screenShareAudio && this.media.screenShare.audio) {
825
+ this.media.screenShare.audio.stop(commit);
826
+ }
827
+ if (screenShareVideo && this.media.screenShare.video) {
828
+ this.media.screenShare.video.stop(commit);
829
+ }
714
830
  }
715
831
 
716
832
  /** emits Event.VideoLayoutChanged */
717
833
  private emitVideoLayoutChangedEvent() {
718
834
  // todo: at this point the receive slots might still be showing a participant from previous layout, we should
719
- // wait for our media requests to be fullfilled, but there is no API for that right now (we could wait for source updates
835
+ // wait for our media requests to be fulfilled, but there is no API for that right now (we could wait for source updates
720
836
  // but in some cases they might never come, or would need to always make sure to use a new set of receiver slots)
721
837
  // for now it's fine to have it like this, we will re-evaluate if it needs improving after more testing
722
838
 
@@ -730,7 +846,7 @@ export class RemoteMediaManager extends EventsScope {
730
846
  layoutId: this.currentLayoutId,
731
847
  activeSpeakerVideoPanes: this.media.video.activeSpeakerGroups,
732
848
  memberVideoPanes: this.media.video.memberPanes,
733
- screenShareVideo: undefined, // todo: screen share (SPARK-377812)
849
+ screenShareVideo: this.media.screenShare.video?.getRemoteMedia()[0],
734
850
  }
735
851
  );
736
852
  }
@@ -778,7 +894,7 @@ export class RemoteMediaManager extends EventsScope {
778
894
 
779
895
  this.currentLayout.memberVideoPanes.push(newPane);
780
896
 
781
- const receiveSlot = await this.receiveSlotManager.allocateSlot(MC.MediaType.VideoMain);
897
+ const receiveSlot = await this.receiveSlotManager.allocateSlot(MediaType.VideoMain);
782
898
 
783
899
  this.slots.video.receiverSelected.push(receiveSlot);
784
900
 
@@ -1,16 +1,15 @@
1
1
  import EventsScope from '../common/events/events-scope';
2
- import {EVENT_TRIGGERS, STATS} from '../constants';
3
-
2
+ import {EVENT_TRIGGERS} from '../constants';
4
3
 
5
4
  /**
6
- * Meeting - network quality event
7
- * Emitted on each interval of retrieving stats Analyzer data
8
- * @event network:quality
9
- * @type {Object}
10
- * @property {string} mediaType {video|audio}
11
- * @property {number} networkQualityScore - value determined in determineUplinkNetworkQuality
12
- * @memberof NetworkQualityMonitor
13
- */
5
+ * Meeting - network quality event
6
+ * Emitted on each interval of retrieving stats Analyzer data
7
+ * @event network:quality
8
+ * @type {Object}
9
+ * @property {string} mediaType {video|audio}
10
+ * @property {number} networkQualityScore - value determined in determineUplinkNetworkQuality
11
+ * @memberof NetworkQualityMonitor
12
+ */
14
13
  /**
15
14
  * NetworkQualityMonitor class that will emit events based on detected quality
16
15
  *
@@ -18,6 +17,13 @@ import {EVENT_TRIGGERS, STATS} from '../constants';
18
17
  * @extends {EventsScope}
19
18
  */
20
19
  export default class NetworkQualityMonitor extends EventsScope {
20
+ config: any;
21
+ frequencyTypes: any;
22
+ indicatorTypes: any;
23
+ mediaType: any;
24
+ networkQualityScore: any;
25
+ networkQualityStatus: any;
26
+
21
27
  /**
22
28
  * Creates a new instance of NetworkQualityMonitor
23
29
  * @constructor
@@ -29,25 +35,21 @@ export default class NetworkQualityMonitor extends EventsScope {
29
35
  * @property {Object} networkQualityStatus - hash object based on indicatorTypes and frequencyTypes
30
36
  * @property {string} mediaType - audio|video
31
37
  */
32
- constructor(config) {
38
+ constructor(config: any) {
33
39
  super();
34
40
  this.config = config;
35
41
  this.indicatorTypes = Object.freeze({
36
42
  PACKETLOSS: 'packetLoss',
37
43
  LATENCY: 'latency',
38
- JITTER: 'jitter'
44
+ JITTER: 'jitter',
39
45
  });
40
46
  this.frequencyTypes = Object.freeze({
41
47
  UPLINK: 'uplink',
42
- DOWNLINK: 'downlink'
48
+ DOWNLINK: 'downlink',
43
49
  });
44
50
  this.networkQualityScore = 1;
45
51
  this.networkQualityStatus = {
46
- [this.frequencyTypes.UPLINK]: {
47
- [STATS.VIDEO_CORRELATE]: {},
48
- [STATS.AUDIO_CORRELATE]: {},
49
- [STATS.SHARE_CORRELATE]: {}
50
- }
52
+ [this.frequencyTypes.UPLINK]: {},
51
53
  };
52
54
  this.mediaType = null;
53
55
  }
@@ -62,12 +64,12 @@ export default class NetworkQualityMonitor extends EventsScope {
62
64
  this.emit(
63
65
  {
64
66
  file: 'networkQualityMonitor',
65
- function: 'emitNetworkQuality'
67
+ function: 'emitNetworkQuality',
66
68
  },
67
69
  EVENT_TRIGGERS.NETWORK_QUALITY,
68
70
  {
69
71
  mediaType: this.mediaType,
70
- networkQualityScore: this.networkQualityScore
72
+ networkQualityScore: this.networkQualityScore,
71
73
  }
72
74
  );
73
75
  }
@@ -85,7 +87,6 @@ export default class NetworkQualityMonitor extends EventsScope {
85
87
  this.mediaType = null;
86
88
  }
87
89
 
88
-
89
90
  /**
90
91
  * filter data to determine uplink network quality, invoked on same interval as stats analyzer remote-inbout-rtp
91
92
  * @param {Object} configObj
@@ -96,7 +97,15 @@ export default class NetworkQualityMonitor extends EventsScope {
96
97
  * @public
97
98
  * @memberof NetworkQualityMonitor
98
99
  */
99
- determineUplinkNetworkQuality({mediaType, remoteRtpResults, statsAnalyzerCurrentStats}) {
100
+ public determineUplinkNetworkQuality({
101
+ mediaType,
102
+ remoteRtpResults,
103
+ statsAnalyzerCurrentStats,
104
+ }: {
105
+ mediaType: string;
106
+ remoteRtpResults: any;
107
+ statsAnalyzerCurrentStats: object;
108
+ }) {
100
109
  const roundTripTimeInMilliseconds = remoteRtpResults.roundTripTime * 1000;
101
110
  const jitterInMilliseconds = remoteRtpResults.jitter * 1000;
102
111
  const {currentPacketLossRatio} = statsAnalyzerCurrentStats[mediaType].send;
@@ -112,8 +121,7 @@ export default class NetworkQualityMonitor extends EventsScope {
112
121
  * @returns {boolean}
113
122
  */
114
123
  const determinePacketLoss = () => {
115
- if (currentPacketLossRatio >
116
- this.config.videoPacketLossRatioThreshold) {
124
+ if (currentPacketLossRatio > this.config.videoPacketLossRatioThreshold) {
117
125
  this.networkQualityScore = 0;
118
126
 
119
127
  return false;
@@ -157,7 +165,12 @@ export default class NetworkQualityMonitor extends EventsScope {
157
165
  * @param {(number|undefined)} value
158
166
  * @returns {(number|null)}
159
167
  */
160
- const determineIfUndefined = (value) => (typeof value === 'undefined' ? null : value);
168
+ const determineIfUndefined = (value: number | undefined) =>
169
+ typeof value === 'undefined' ? null : value;
170
+
171
+ if (!this.networkQualityStatus[UPLINK][mediaType]) {
172
+ this.networkQualityStatus[UPLINK][mediaType] = {};
173
+ }
161
174
 
162
175
  /**
163
176
  * Values for some browsers specifically Safari will be undefined we explicitly set to null
@@ -167,20 +180,19 @@ export default class NetworkQualityMonitor extends EventsScope {
167
180
  // PACKET LOSS
168
181
  this.networkQualityStatus[UPLINK][mediaType][PACKETLOSS] = {
169
182
  acceptable: determinePacketLoss(),
170
- value: determineIfUndefined(currentPacketLossRatio)
183
+ value: determineIfUndefined(currentPacketLossRatio),
171
184
  };
172
185
 
173
-
174
186
  // LATENCY measured in Round trip time
175
187
  this.networkQualityStatus[UPLINK][mediaType][LATENCY] = {
176
188
  acceptable: determineLatency(),
177
- value: determineIfUndefined(remoteRtpResults.roundTripTime)
189
+ value: determineIfUndefined(remoteRtpResults.roundTripTime),
178
190
  };
179
191
 
180
192
  // JITTER
181
193
  this.networkQualityStatus[UPLINK][mediaType][JITTER] = {
182
194
  acceptable: deterMineJitter(),
183
- value: determineIfUndefined(remoteRtpResults.jitter)
195
+ value: determineIfUndefined(remoteRtpResults.jitter),
184
196
  };
185
197
 
186
198
  this.updateNetworkQualityStatus();