@webex/plugin-meetings 3.0.0-beta.21 → 3.0.0-beta.211

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 (422) hide show
  1. package/README.md +45 -7
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +49 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +342 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +114 -14
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/edit-lock-error.js +52 -0
  11. package/dist/breakouts/edit-lock-error.js.map +1 -0
  12. package/dist/breakouts/events.js +45 -0
  13. package/dist/breakouts/events.js.map +1 -0
  14. package/dist/breakouts/index.js +841 -19
  15. package/dist/breakouts/index.js.map +1 -1
  16. package/dist/breakouts/request.js +78 -0
  17. package/dist/breakouts/request.js.map +1 -0
  18. package/dist/breakouts/utils.js +67 -0
  19. package/dist/breakouts/utils.js.map +1 -0
  20. package/dist/common/errors/webex-errors.js +3 -2
  21. package/dist/common/errors/webex-errors.js.map +1 -1
  22. package/dist/common/logs/logger-proxy.js +1 -1
  23. package/dist/common/logs/logger-proxy.js.map +1 -1
  24. package/dist/common/queue.js +24 -9
  25. package/dist/common/queue.js.map +1 -1
  26. package/dist/config.js +3 -8
  27. package/dist/config.js.map +1 -1
  28. package/dist/constants.js +179 -30
  29. package/dist/constants.js.map +1 -1
  30. package/dist/controls-options-manager/constants.js +14 -0
  31. package/dist/controls-options-manager/constants.js.map +1 -0
  32. package/dist/controls-options-manager/enums.js +27 -0
  33. package/dist/controls-options-manager/enums.js.map +1 -0
  34. package/dist/controls-options-manager/index.js +297 -0
  35. package/dist/controls-options-manager/index.js.map +1 -0
  36. package/dist/controls-options-manager/types.js +7 -0
  37. package/dist/controls-options-manager/types.js.map +1 -0
  38. package/dist/controls-options-manager/util.js +319 -0
  39. package/dist/controls-options-manager/util.js.map +1 -0
  40. package/dist/index.js +106 -1
  41. package/dist/index.js.map +1 -1
  42. package/dist/interpretation/collection.js +23 -0
  43. package/dist/interpretation/collection.js.map +1 -0
  44. package/dist/interpretation/index.js +366 -0
  45. package/dist/interpretation/index.js.map +1 -0
  46. package/dist/interpretation/siLanguage.js +25 -0
  47. package/dist/interpretation/siLanguage.js.map +1 -0
  48. package/dist/locus-info/controlsUtils.js +91 -2
  49. package/dist/locus-info/controlsUtils.js.map +1 -1
  50. package/dist/locus-info/index.js +359 -64
  51. package/dist/locus-info/index.js.map +1 -1
  52. package/dist/locus-info/infoUtils.js +7 -1
  53. package/dist/locus-info/infoUtils.js.map +1 -1
  54. package/dist/locus-info/mediaSharesUtils.js +43 -1
  55. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  56. package/dist/locus-info/parser.js +219 -63
  57. package/dist/locus-info/parser.js.map +1 -1
  58. package/dist/locus-info/selfUtils.js +89 -14
  59. package/dist/locus-info/selfUtils.js.map +1 -1
  60. package/dist/media/index.js +48 -135
  61. package/dist/media/index.js.map +1 -1
  62. package/dist/media/properties.js +29 -90
  63. package/dist/media/properties.js.map +1 -1
  64. package/dist/mediaQualityMetrics/config.js +505 -493
  65. package/dist/mediaQualityMetrics/config.js.map +1 -1
  66. package/dist/meeting/in-meeting-actions.js +90 -2
  67. package/dist/meeting/in-meeting-actions.js.map +1 -1
  68. package/dist/meeting/index.js +2770 -2547
  69. package/dist/meeting/index.js.map +1 -1
  70. package/dist/meeting/locusMediaRequest.js +291 -0
  71. package/dist/meeting/locusMediaRequest.js.map +1 -0
  72. package/dist/meeting/muteState.js +229 -124
  73. package/dist/meeting/muteState.js.map +1 -1
  74. package/dist/meeting/request.js +199 -193
  75. package/dist/meeting/request.js.map +1 -1
  76. package/dist/meeting/util.js +532 -414
  77. package/dist/meeting/util.js.map +1 -1
  78. package/dist/meeting-info/index.js +48 -7
  79. package/dist/meeting-info/index.js.map +1 -1
  80. package/dist/meeting-info/meeting-info-v2.js +171 -51
  81. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  82. package/dist/meeting-info/utilv2.js +20 -5
  83. package/dist/meeting-info/utilv2.js.map +1 -1
  84. package/dist/meetings/collection.js +22 -0
  85. package/dist/meetings/collection.js.map +1 -1
  86. package/dist/meetings/index.js +357 -66
  87. package/dist/meetings/index.js.map +1 -1
  88. package/dist/meetings/meetings.types.js +7 -0
  89. package/dist/meetings/meetings.types.js.map +1 -0
  90. package/dist/meetings/request.js +2 -0
  91. package/dist/meetings/request.js.map +1 -1
  92. package/dist/meetings/util.js +88 -1
  93. package/dist/meetings/util.js.map +1 -1
  94. package/dist/member/index.js +49 -0
  95. package/dist/member/index.js.map +1 -1
  96. package/dist/member/types.js +25 -0
  97. package/dist/member/types.js.map +1 -0
  98. package/dist/member/util.js +121 -25
  99. package/dist/member/util.js.map +1 -1
  100. package/dist/members/collection.js +10 -0
  101. package/dist/members/collection.js.map +1 -1
  102. package/dist/members/index.js +86 -5
  103. package/dist/members/index.js.map +1 -1
  104. package/dist/members/request.js +106 -38
  105. package/dist/members/request.js.map +1 -1
  106. package/dist/members/types.js +15 -0
  107. package/dist/members/types.js.map +1 -0
  108. package/dist/members/util.js +316 -233
  109. package/dist/members/util.js.map +1 -1
  110. package/dist/metrics/constants.js +3 -5
  111. package/dist/metrics/constants.js.map +1 -1
  112. package/dist/metrics/index.js +1 -468
  113. package/dist/metrics/index.js.map +1 -1
  114. package/dist/multistream/mediaRequestManager.js +238 -49
  115. package/dist/multistream/mediaRequestManager.js.map +1 -1
  116. package/dist/multistream/receiveSlot.js +49 -16
  117. package/dist/multistream/receiveSlot.js.map +1 -1
  118. package/dist/multistream/receiveSlotManager.js +52 -34
  119. package/dist/multistream/receiveSlotManager.js.map +1 -1
  120. package/dist/multistream/remoteMedia.js +44 -18
  121. package/dist/multistream/remoteMedia.js.map +1 -1
  122. package/dist/multistream/remoteMediaGroup.js +60 -3
  123. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  124. package/dist/multistream/remoteMediaManager.js +173 -59
  125. package/dist/multistream/remoteMediaManager.js.map +1 -1
  126. package/dist/networkQualityMonitor/index.js +4 -2
  127. package/dist/networkQualityMonitor/index.js.map +1 -1
  128. package/dist/reachability/index.js +72 -27
  129. package/dist/reachability/index.js.map +1 -1
  130. package/dist/reachability/request.js +12 -5
  131. package/dist/reachability/request.js.map +1 -1
  132. package/dist/reconnection-manager/index.js +196 -155
  133. package/dist/reconnection-manager/index.js.map +1 -1
  134. package/dist/recording-controller/index.js +21 -2
  135. package/dist/recording-controller/index.js.map +1 -1
  136. package/dist/recording-controller/util.js +9 -8
  137. package/dist/recording-controller/util.js.map +1 -1
  138. package/dist/roap/index.js +21 -29
  139. package/dist/roap/index.js.map +1 -1
  140. package/dist/roap/request.js +110 -89
  141. package/dist/roap/request.js.map +1 -1
  142. package/dist/roap/turnDiscovery.js +93 -36
  143. package/dist/roap/turnDiscovery.js.map +1 -1
  144. package/dist/rtcMetrics/constants.js +12 -0
  145. package/dist/rtcMetrics/constants.js.map +1 -0
  146. package/dist/rtcMetrics/index.js +117 -0
  147. package/dist/rtcMetrics/index.js.map +1 -0
  148. package/dist/statsAnalyzer/global.js +1 -93
  149. package/dist/statsAnalyzer/global.js.map +1 -1
  150. package/dist/statsAnalyzer/index.js +326 -311
  151. package/dist/statsAnalyzer/index.js.map +1 -1
  152. package/dist/statsAnalyzer/mqaUtil.js +90 -53
  153. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  154. package/dist/types/annotation/annotation.types.d.ts +42 -0
  155. package/dist/types/annotation/constants.d.ts +31 -0
  156. package/dist/types/annotation/index.d.ts +117 -0
  157. package/dist/types/breakouts/breakout.d.ts +8 -0
  158. package/dist/types/breakouts/collection.d.ts +5 -0
  159. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  160. package/dist/types/breakouts/events.d.ts +8 -0
  161. package/dist/types/breakouts/index.d.ts +5 -0
  162. package/dist/types/breakouts/request.d.ts +22 -0
  163. package/dist/types/breakouts/utils.d.ts +15 -0
  164. package/dist/types/common/browser-detection.d.ts +9 -0
  165. package/dist/types/common/collection.d.ts +48 -0
  166. package/dist/types/common/config.d.ts +2 -0
  167. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  168. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  169. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  170. package/dist/types/common/errors/media.d.ts +15 -0
  171. package/dist/types/common/errors/parameter.d.ts +15 -0
  172. package/dist/types/common/errors/password-error.d.ts +15 -0
  173. package/dist/types/common/errors/permission.d.ts +14 -0
  174. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  175. package/dist/types/common/errors/reconnection.d.ts +15 -0
  176. package/dist/types/common/errors/stats.d.ts +15 -0
  177. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  178. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  179. package/dist/types/common/events/events-scope.d.ts +17 -0
  180. package/dist/types/common/events/events.d.ts +12 -0
  181. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  182. package/dist/types/common/events/util.d.ts +2 -0
  183. package/dist/types/common/logs/logger-config.d.ts +2 -0
  184. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  185. package/dist/types/common/logs/request.d.ts +34 -0
  186. package/dist/types/common/queue.d.ts +34 -0
  187. package/dist/types/config.d.ts +72 -0
  188. package/dist/types/constants.d.ts +1020 -0
  189. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  190. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  191. package/dist/types/controls-options-manager/index.d.ts +136 -0
  192. package/dist/types/controls-options-manager/types.d.ts +43 -0
  193. package/dist/types/controls-options-manager/util.d.ts +1 -0
  194. package/dist/types/index.d.ts +7 -0
  195. package/dist/types/interpretation/collection.d.ts +5 -0
  196. package/dist/types/interpretation/index.d.ts +5 -0
  197. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  198. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  199. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  200. package/dist/types/locus-info/fullState.d.ts +2 -0
  201. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  202. package/dist/types/locus-info/index.d.ts +322 -0
  203. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  204. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  205. package/dist/types/locus-info/parser.d.ts +271 -0
  206. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  207. package/dist/types/media/index.d.ts +34 -0
  208. package/dist/types/media/properties.d.ts +93 -0
  209. package/dist/types/media/util.d.ts +2 -0
  210. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  211. package/dist/types/meeting/in-meeting-actions.d.ts +163 -0
  212. package/dist/types/meeting/index.d.ts +1482 -0
  213. package/dist/types/meeting/locusMediaRequest.d.ts +72 -0
  214. package/dist/types/meeting/muteState.d.ts +184 -0
  215. package/dist/types/meeting/request.d.ts +257 -0
  216. package/dist/types/meeting/request.type.d.ts +11 -0
  217. package/dist/types/meeting/state.d.ts +9 -0
  218. package/dist/types/meeting/util.d.ts +79 -0
  219. package/dist/types/meeting-info/collection.d.ts +20 -0
  220. package/dist/types/meeting-info/index.d.ts +62 -0
  221. package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
  222. package/dist/types/meeting-info/request.d.ts +22 -0
  223. package/dist/types/meeting-info/util.d.ts +2 -0
  224. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  225. package/dist/types/meetings/collection.d.ts +31 -0
  226. package/dist/types/meetings/index.d.ts +367 -0
  227. package/dist/types/meetings/meetings.types.d.ts +4 -0
  228. package/dist/types/meetings/request.d.ts +27 -0
  229. package/dist/types/meetings/util.d.ts +18 -0
  230. package/dist/types/member/index.d.ts +159 -0
  231. package/dist/types/member/types.d.ts +32 -0
  232. package/dist/types/member/util.d.ts +2 -0
  233. package/dist/types/members/collection.d.ts +29 -0
  234. package/dist/types/members/index.d.ts +353 -0
  235. package/dist/types/members/request.d.ts +114 -0
  236. package/dist/types/members/types.d.ts +24 -0
  237. package/dist/types/members/util.d.ts +210 -0
  238. package/dist/types/metrics/constants.d.ts +55 -0
  239. package/dist/types/metrics/index.d.ts +45 -0
  240. package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
  241. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  242. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  243. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  244. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  245. package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
  246. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  247. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  248. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  249. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  250. package/dist/types/reachability/index.d.ts +152 -0
  251. package/dist/types/reachability/request.d.ts +37 -0
  252. package/dist/types/reactions/constants.d.ts +3 -0
  253. package/dist/types/reactions/reactions.d.ts +4 -0
  254. package/dist/types/reactions/reactions.type.d.ts +52 -0
  255. package/dist/types/reconnection-manager/index.d.ts +126 -0
  256. package/dist/types/recording-controller/enums.d.ts +7 -0
  257. package/dist/types/recording-controller/index.d.ts +207 -0
  258. package/dist/types/recording-controller/util.d.ts +14 -0
  259. package/dist/types/roap/index.d.ts +77 -0
  260. package/dist/types/roap/request.d.ts +36 -0
  261. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  262. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  263. package/dist/types/rtcMetrics/index.d.ts +46 -0
  264. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  265. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  266. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  267. package/dist/types/transcription/index.d.ts +64 -0
  268. package/package.json +23 -20
  269. package/src/annotation/annotation.types.ts +50 -0
  270. package/src/annotation/constants.ts +36 -0
  271. package/src/annotation/index.ts +328 -0
  272. package/src/breakouts/README.md +44 -14
  273. package/src/breakouts/breakout.ts +87 -9
  274. package/src/breakouts/edit-lock-error.ts +25 -0
  275. package/src/breakouts/events.ts +56 -0
  276. package/src/breakouts/index.ts +710 -10
  277. package/src/breakouts/request.ts +55 -0
  278. package/src/breakouts/utils.ts +57 -0
  279. package/src/common/errors/webex-errors.ts +6 -2
  280. package/src/common/logs/logger-proxy.ts +1 -1
  281. package/src/common/queue.ts +22 -8
  282. package/src/config.ts +2 -7
  283. package/src/constants.ts +165 -21
  284. package/src/controls-options-manager/constants.ts +5 -0
  285. package/src/controls-options-manager/enums.ts +18 -0
  286. package/src/controls-options-manager/index.ts +278 -0
  287. package/src/controls-options-manager/types.ts +59 -0
  288. package/src/controls-options-manager/util.ts +300 -0
  289. package/src/index.ts +39 -0
  290. package/src/interpretation/README.md +60 -0
  291. package/src/interpretation/collection.ts +19 -0
  292. package/src/interpretation/index.ts +332 -0
  293. package/src/interpretation/siLanguage.ts +18 -0
  294. package/src/locus-info/controlsUtils.ts +108 -0
  295. package/src/locus-info/index.ts +383 -61
  296. package/src/locus-info/infoUtils.ts +10 -2
  297. package/src/locus-info/mediaSharesUtils.ts +48 -0
  298. package/src/locus-info/parser.ts +224 -39
  299. package/src/locus-info/selfUtils.ts +81 -5
  300. package/src/media/index.ts +87 -140
  301. package/src/media/properties.ts +49 -90
  302. package/src/mediaQualityMetrics/config.ts +379 -377
  303. package/src/meeting/in-meeting-actions.ts +179 -3
  304. package/src/meeting/index.ts +2099 -2083
  305. package/src/meeting/locusMediaRequest.ts +311 -0
  306. package/src/meeting/muteState.ts +228 -132
  307. package/src/meeting/request.ts +105 -115
  308. package/src/meeting/util.ts +511 -397
  309. package/src/meeting-info/index.ts +54 -8
  310. package/src/meeting-info/meeting-info-v2.ts +148 -14
  311. package/src/meeting-info/utilv2.ts +13 -3
  312. package/src/meetings/collection.ts +20 -0
  313. package/src/meetings/index.ts +392 -84
  314. package/src/meetings/meetings.types.ts +12 -0
  315. package/src/meetings/request.ts +2 -0
  316. package/src/meetings/util.ts +103 -4
  317. package/src/member/index.ts +49 -0
  318. package/src/member/types.ts +38 -0
  319. package/src/member/util.ts +127 -25
  320. package/src/members/collection.ts +8 -0
  321. package/src/members/index.ts +107 -6
  322. package/src/members/request.ts +97 -17
  323. package/src/members/types.ts +28 -0
  324. package/src/members/util.ts +319 -240
  325. package/src/metrics/constants.ts +2 -4
  326. package/src/metrics/index.ts +1 -490
  327. package/src/multistream/mediaRequestManager.ts +289 -79
  328. package/src/multistream/receiveSlot.ts +55 -18
  329. package/src/multistream/receiveSlotManager.ts +46 -24
  330. package/src/multistream/remoteMedia.ts +27 -2
  331. package/src/multistream/remoteMediaGroup.ts +59 -0
  332. package/src/multistream/remoteMediaManager.ts +113 -32
  333. package/src/networkQualityMonitor/index.ts +6 -6
  334. package/src/reachability/index.ts +62 -15
  335. package/src/reachability/request.ts +10 -5
  336. package/src/reconnection-manager/index.ts +68 -43
  337. package/src/recording-controller/index.ts +20 -3
  338. package/src/recording-controller/util.ts +26 -9
  339. package/src/roap/index.ts +21 -30
  340. package/src/roap/request.ts +101 -95
  341. package/src/roap/turnDiscovery.ts +47 -25
  342. package/src/rtcMetrics/constants.ts +3 -0
  343. package/src/rtcMetrics/index.ts +100 -0
  344. package/src/statsAnalyzer/global.ts +1 -94
  345. package/src/statsAnalyzer/index.ts +376 -386
  346. package/src/statsAnalyzer/mqaUtil.ts +100 -99
  347. package/test/integration/spec/converged-space-meetings.js +233 -0
  348. package/test/integration/spec/journey.js +336 -259
  349. package/test/integration/spec/space-meeting.js +77 -4
  350. package/test/unit/spec/annotation/index.ts +418 -0
  351. package/test/unit/spec/breakouts/breakout.ts +142 -24
  352. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  353. package/test/unit/spec/breakouts/events.ts +89 -0
  354. package/test/unit/spec/breakouts/index.ts +1545 -48
  355. package/test/unit/spec/breakouts/request.ts +104 -0
  356. package/test/unit/spec/breakouts/utils.js +72 -0
  357. package/test/unit/spec/common/queue.js +31 -2
  358. package/test/unit/spec/controls-options-manager/index.js +287 -0
  359. package/test/unit/spec/controls-options-manager/util.js +582 -0
  360. package/test/unit/spec/fixture/locus.js +1 -0
  361. package/test/unit/spec/interpretation/collection.ts +15 -0
  362. package/test/unit/spec/interpretation/index.ts +589 -0
  363. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  364. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  365. package/test/unit/spec/locus-info/index.js +1169 -36
  366. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  367. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  368. package/test/unit/spec/locus-info/parser.js +62 -22
  369. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  370. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  371. package/test/unit/spec/media/index.ts +138 -28
  372. package/test/unit/spec/meeting/in-meeting-actions.ts +89 -3
  373. package/test/unit/spec/meeting/index.js +3573 -1663
  374. package/test/unit/spec/meeting/locusMediaRequest.ts +438 -0
  375. package/test/unit/spec/meeting/muteState.js +370 -208
  376. package/test/unit/spec/meeting/request.js +339 -44
  377. package/test/unit/spec/meeting/utils.js +456 -53
  378. package/test/unit/spec/meeting-info/index.js +181 -0
  379. package/test/unit/spec/meeting-info/meetinginfov2.js +383 -5
  380. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  381. package/test/unit/spec/meetings/collection.js +14 -0
  382. package/test/unit/spec/meetings/index.js +867 -125
  383. package/test/unit/spec/meetings/utils.js +206 -2
  384. package/test/unit/spec/member/index.js +58 -4
  385. package/test/unit/spec/member/util.js +479 -35
  386. package/test/unit/spec/members/index.js +319 -1
  387. package/test/unit/spec/members/request.js +206 -27
  388. package/test/unit/spec/members/utils.js +184 -0
  389. package/test/unit/spec/metrics/index.js +1 -50
  390. package/test/unit/spec/multistream/mediaRequestManager.ts +803 -162
  391. package/test/unit/spec/multistream/receiveSlot.ts +72 -13
  392. package/test/unit/spec/multistream/receiveSlotManager.ts +58 -28
  393. package/test/unit/spec/multistream/remoteMedia.ts +30 -0
  394. package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
  395. package/test/unit/spec/multistream/remoteMediaManager.ts +318 -0
  396. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  397. package/test/unit/spec/reachability/index.ts +125 -8
  398. package/test/unit/spec/reachability/request.js +66 -0
  399. package/test/unit/spec/reconnection-manager/index.js +59 -6
  400. package/test/unit/spec/recording-controller/index.js +294 -218
  401. package/test/unit/spec/recording-controller/util.js +223 -96
  402. package/test/unit/spec/roap/index.ts +26 -51
  403. package/test/unit/spec/roap/request.ts +196 -85
  404. package/test/unit/spec/roap/turnDiscovery.ts +30 -7
  405. package/test/unit/spec/rtcMetrics/index.ts +60 -0
  406. package/test/unit/spec/stats-analyzer/index.js +92 -41
  407. package/test/utils/constants.js +9 -0
  408. package/test/utils/integrationTestUtils.js +46 -0
  409. package/test/utils/testUtils.js +0 -45
  410. package/test/utils/webex-config.js +4 -0
  411. package/test/utils/webex-test-users.js +6 -3
  412. package/dist/meeting/effectsState.js +0 -262
  413. package/dist/meeting/effectsState.js.map +0 -1
  414. package/dist/metrics/config.js +0 -299
  415. package/dist/metrics/config.js.map +0 -1
  416. package/dist/multistream/multistreamMedia.js +0 -110
  417. package/dist/multistream/multistreamMedia.js.map +0 -1
  418. package/src/index.js +0 -16
  419. package/src/meeting/effectsState.ts +0 -211
  420. package/src/metrics/config.ts +0 -495
  421. package/src/multistream/multistreamMedia.ts +0 -97
  422. package/test/unit/spec/meeting/effectsState.js +0 -285
@@ -4,15 +4,27 @@
4
4
  /* globals navigator */
5
5
 
6
6
  import {RoapMediaConnection, MultistreamRoapMediaConnection} from '@webex/internal-media-core';
7
+ import {
8
+ LocalCameraTrack,
9
+ LocalDisplayTrack,
10
+ LocalSystemAudioTrack,
11
+ LocalMicrophoneTrack,
12
+ } from '@webex/media-helpers';
7
13
  import LoggerProxy from '../common/logs/logger-proxy';
8
- import {AUDIO_INPUT, VIDEO_INPUT, MEDIA_TRACK_CONSTRAINT} from '../constants';
14
+ import {MEDIA_TRACK_CONSTRAINT} from '../constants';
9
15
  import Config from '../config';
10
16
  import StaticConfig from '../common/config';
11
- import MediaError from '../common/errors/media';
12
17
  import BrowserDetection from '../common/browser-detection';
18
+ import RtcMetrics from '../rtcMetrics';
13
19
 
14
20
  const {isBrowser} = BrowserDetection();
15
21
 
22
+ type MultistreamConnectionConfig = ConstructorParameters<typeof MultistreamRoapMediaConnection>[0];
23
+
24
+ export type BundlePolicy = ConstructorParameters<
25
+ typeof MultistreamRoapMediaConnection
26
+ >[0]['bundlePolicy'];
27
+
16
28
  /**
17
29
  * MediaDirection
18
30
  * @typedef {Object} MediaDirection
@@ -43,45 +55,6 @@ const {isBrowser} = BrowserDetection();
43
55
  */
44
56
  const Media: any = {};
45
57
 
46
- /**
47
- * @param {boolean} enabled
48
- * @param {MediaStreamTrack} track
49
- * @returns {Boolean}
50
- * @public
51
- */
52
- Media.setLocalTrack = (enabled: boolean, track: MediaStreamTrack) => {
53
- if (track) {
54
- track.enabled = enabled;
55
-
56
- return true;
57
- }
58
-
59
- return false;
60
- };
61
-
62
- /**
63
- * format the media array for send
64
- * @param {String} mediaId
65
- * @param {Boolean} audioMuted
66
- * @param {Boolean} videoMuted
67
- * @returns {Array} medias
68
- */
69
- Media.generateLocalMedias = (mediaId: string, audioMuted: boolean, videoMuted: boolean) => {
70
- if (mediaId) {
71
- return [
72
- {
73
- localSdp: JSON.stringify({
74
- audioMuted,
75
- videoMuted,
76
- }),
77
- mediaId,
78
- },
79
- ];
80
- }
81
-
82
- return [];
83
- };
84
-
85
58
  /**
86
59
  * make a browser call to get the media
87
60
  * @param {SendOptions} options
@@ -109,33 +82,58 @@ Media.getLocalMedia = (options: any, config: object) => {
109
82
  return Promise.resolve(undefined);
110
83
  };
111
84
 
85
+ Media.getDirection = (forceSendRecv: boolean, receive: boolean, send: boolean) => {
86
+ if (!receive && !send) {
87
+ return 'inactive';
88
+ }
89
+
90
+ if (forceSendRecv || (receive && send)) {
91
+ return 'sendrecv';
92
+ }
93
+
94
+ if (receive) {
95
+ return 'recvonly';
96
+ }
97
+
98
+ return 'sendonly';
99
+ };
100
+
112
101
  /**
113
102
  * creates a webrtc media connection with provided tracks and mediaDirection configuration
114
103
  *
115
104
  * @param {boolean} isMultistream
116
105
  * @param {string} debugId string useful for debugging (will appear in media connection logs)
106
+ * @param {object} webex main `webex` object.
107
+ * @param {string} meetingId id for the meeting using this connection
117
108
  * @param {Object} options
118
- * @param {Object} [options.mediaProperties] only applicable to non-multistream connections, contains mediaDirection and local tracks:
119
- * audioTrack, videoTrack and shareTrack
109
+ * @param {Object} [options.mediaProperties] contains mediaDirection and local tracks:
110
+ * audioTrack, videoTrack, shareVideoTrack, and shareAudioTrack
120
111
  * @param {string} [options.remoteQualityLevel] LOW|MEDIUM|HIGH applicable only to non-multistream connections
121
112
  * @param {boolean} [options.enableRtx] applicable only to non-multistream connections
122
113
  * @param {boolean} [options.enableExtmap] applicable only to non-multistream connections
123
114
  * @param {Object} [options.turnServerInfo]
124
- * @returns {RoapMediaConnection}
115
+ * @param {BundlePolicy} [options.bundlePolicy]
116
+ * @returns {RoapMediaConnection | MultistreamRoapMediaConnection}
125
117
  */
126
118
  Media.createMediaConnection = (
127
119
  isMultistream: boolean,
128
120
  debugId: string,
121
+ webex: object,
122
+ meetingId: string,
129
123
  options: {
130
- mediaProperties?: {
124
+ mediaProperties: {
131
125
  mediaDirection?: {
132
126
  receiveAudio: boolean;
133
127
  receiveVideo: boolean;
134
128
  receiveShare: boolean;
129
+ sendAudio: boolean;
130
+ sendVideo: boolean;
131
+ sendShare: boolean;
135
132
  };
136
- audioTrack?: MediaStreamTrack;
137
- videoTrack?: MediaStreamTrack;
138
- shareTrack?: MediaStreamTrack;
133
+ audioTrack?: LocalMicrophoneTrack;
134
+ videoTrack?: LocalCameraTrack;
135
+ shareVideoTrack?: LocalDisplayTrack;
136
+ shareAudioTrack?: LocalSystemAudioTrack;
139
137
  };
140
138
  remoteQualityLevel?: 'LOW' | 'MEDIUM' | 'HIGH';
141
139
  enableRtx?: boolean;
@@ -145,9 +143,17 @@ Media.createMediaConnection = (
145
143
  username: string;
146
144
  password: string;
147
145
  };
146
+ bundlePolicy?: BundlePolicy;
148
147
  }
149
148
  ) => {
150
- const {mediaProperties, remoteQualityLevel, enableRtx, enableExtmap, turnServerInfo} = options;
149
+ const {
150
+ mediaProperties,
151
+ remoteQualityLevel,
152
+ enableRtx,
153
+ enableExtmap,
154
+ turnServerInfo,
155
+ bundlePolicy,
156
+ } = options;
151
157
 
152
158
  const iceServers = [];
153
159
 
@@ -160,11 +166,25 @@ Media.createMediaConnection = (
160
166
  }
161
167
 
162
168
  if (isMultistream) {
169
+ const config: MultistreamConnectionConfig = {
170
+ iceServers,
171
+ enableMainAudio:
172
+ mediaProperties.mediaDirection?.sendAudio || mediaProperties.mediaDirection?.receiveAudio,
173
+ enableMainVideo:
174
+ mediaProperties.mediaDirection?.sendVideo || mediaProperties.mediaDirection?.receiveVideo,
175
+ };
176
+
177
+ if (bundlePolicy) {
178
+ config.bundlePolicy = bundlePolicy;
179
+ }
180
+
181
+ const rtcMetrics = new RtcMetrics(webex, meetingId);
182
+
163
183
  return new MultistreamRoapMediaConnection(
164
- {
165
- iceServers,
166
- },
167
- debugId
184
+ config,
185
+ meetingId,
186
+ (data) => rtcMetrics.addMetrics(data),
187
+ () => rtcMetrics.closeMetrics()
168
188
  );
169
189
  }
170
190
 
@@ -172,7 +192,7 @@ Media.createMediaConnection = (
172
192
  throw new Error('mediaProperties have to be provided for non-multistream media connections');
173
193
  }
174
194
 
175
- const {mediaDirection, audioTrack, videoTrack, shareTrack} = mediaProperties;
195
+ const {mediaDirection, audioTrack, videoTrack, shareVideoTrack} = mediaProperties;
176
196
 
177
197
  return new RoapMediaConnection(
178
198
  {
@@ -193,17 +213,21 @@ Media.createMediaConnection = (
193
213
  },
194
214
  },
195
215
  {
196
- send: {
197
- audio: audioTrack,
198
- video: videoTrack,
199
- screenShareVideo: shareTrack,
216
+ localTracks: {
217
+ audio: audioTrack?.underlyingTrack,
218
+ video: videoTrack?.underlyingTrack,
219
+ screenShareVideo: shareVideoTrack?.underlyingTrack,
200
220
  },
201
- receive: {
202
- audio: mediaDirection.receiveAudio,
203
- video: mediaDirection.receiveVideo,
204
- screenShareVideo: mediaDirection.receiveShare,
205
- remoteQualityLevel,
221
+ direction: {
222
+ audio: Media.getDirection(true, mediaDirection.receiveAudio, mediaDirection.sendAudio),
223
+ video: Media.getDirection(true, mediaDirection.receiveVideo, mediaDirection.sendVideo),
224
+ screenShareVideo: Media.getDirection(
225
+ false,
226
+ mediaDirection.receiveShare,
227
+ mediaDirection.sendShare
228
+ ),
206
229
  },
230
+ remoteQualityLevel,
207
231
  },
208
232
  debugId
209
233
  );
@@ -348,52 +372,6 @@ Media.getMedia = (audio: any | boolean, video: any | boolean, config: any) => {
348
372
  });
349
373
  };
350
374
 
351
- /**
352
- * Checks if the machine has at least one audio or video device (Dont use this for screen share)
353
- * @param {object} [options]
354
- * {
355
- * sendAudio: true/false,
356
- * sendVideo: true/false
357
- * }
358
- * @returns {Object} {
359
- * sendAudio: true/false,
360
- * sendVideo: true/false
361
- *}
362
- */
363
- Media.getSupportedDevice = ({sendAudio, sendVideo}: {sendAudio: boolean; sendVideo: boolean}) =>
364
- Promise.resolve().then(() => {
365
- if (!navigator.mediaDevices || navigator.mediaDevices.enumerateDevices === undefined) {
366
- return {
367
- sendAudio: false,
368
- sendVideo: false,
369
- };
370
- }
371
-
372
- return navigator.mediaDevices.enumerateDevices().then((devices) => {
373
- const supported = {
374
- audio: devices.filter((device) => device.kind === AUDIO_INPUT).length > 0,
375
- video: devices.filter((device) => device.kind === VIDEO_INPUT).length > 0,
376
- };
377
-
378
- return {
379
- sendAudio: supported.audio && sendAudio,
380
- sendVideo: supported.video && sendVideo,
381
- };
382
- });
383
- });
384
-
385
- /**
386
- * proxy to browser navigator.mediaDevices.enumerateDevices()
387
- * @returns {Promise}
388
- */
389
- Media.getDevices = () => {
390
- if (navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {
391
- return navigator.mediaDevices.enumerateDevices();
392
- }
393
-
394
- return Promise.reject(new MediaError('enumerateDevices not supported.'));
395
- };
396
-
397
375
  /**
398
376
  *
399
377
  * Toggle a specific stream
@@ -425,37 +403,6 @@ Media.stopTracks = (track: any) => {
425
403
  });
426
404
  };
427
405
 
428
- /**
429
- *
430
- * Stop input stream
431
- * @param {Stream} stream A media stream
432
- * @returns {null}
433
- * @deprecated after v1.89.3
434
- */
435
- Media.stopStream = (stream: any) => {
436
- LoggerProxy.logger.warn(
437
- 'Media:index#stopStream --> [DEPRECATION WARNING]: stopStream has been deprecated after v1.89.3'
438
- );
439
- if (!stream) {
440
- return Promise.resolve();
441
- }
442
-
443
- /*
444
- * To release local media
445
- * 1) Chrome requires all tracks to be stopped (stream.stop got deprecated)
446
- * 2) Firefox requires the stream to be stopped
447
- */
448
- return Promise.resolve().then(() => {
449
- if (stream.getTracks) {
450
- stream.getTracks().forEach((track) => {
451
- track.stop();
452
- });
453
- } else if (stream.stop) {
454
- stream.stop();
455
- }
456
- });
457
- };
458
-
459
406
  /**
460
407
  * generates streams for audio video and share
461
408
  * @param {object} mediaSetting parameter
@@ -1,41 +1,64 @@
1
1
  import {ConnectionState, Event} from '@webex/internal-media-core';
2
2
 
3
+ import {
4
+ LocalCameraTrack,
5
+ LocalMicrophoneTrack,
6
+ LocalDisplayTrack,
7
+ LocalSystemAudioTrack,
8
+ } from '@webex/media-helpers';
9
+
3
10
  import {MEETINGS, PC_BAIL_TIMEOUT, QUALITY_LEVELS} from '../constants';
4
11
  import LoggerProxy from '../common/logs/logger-proxy';
5
12
 
13
+ export type MediaDirection = {
14
+ sendAudio: boolean;
15
+ sendVideo: boolean;
16
+ sendShare: boolean;
17
+ receiveAudio: boolean;
18
+ receiveVideo: boolean;
19
+ receiveShare: boolean;
20
+ };
21
+
6
22
  /**
7
23
  * @class MediaProperties
8
24
  */
9
25
  export default class MediaProperties {
10
- audioTrack: any;
11
- localQualityLevel: any;
12
- mediaDirection: any;
26
+ audioTrack?: LocalMicrophoneTrack;
27
+ mediaDirection: MediaDirection;
13
28
  mediaSettings: any;
14
29
  webrtcMediaConnection: any;
15
30
  remoteAudioTrack: any;
16
31
  remoteQualityLevel: any;
17
32
  remoteShare: any;
18
33
  remoteVideoTrack: any;
19
- shareTrack: any;
34
+ shareVideoTrack?: LocalDisplayTrack;
35
+ shareAudioTrack?: LocalSystemAudioTrack;
20
36
  videoDeviceId: any;
21
- videoTrack: any;
37
+ videoTrack?: LocalCameraTrack;
22
38
  namespace = MEETINGS;
23
39
 
24
40
  /**
25
41
  * @param {Object} [options] -- to auto construct
26
42
  * @returns {MediaProperties}
27
43
  */
28
- constructor(options: any = {}) {
44
+ constructor() {
29
45
  this.webrtcMediaConnection = null;
30
- this.mediaDirection = options.mediaDirection;
31
- this.videoTrack = options.videoTrack;
32
- this.audioTrack = options.audioTrack;
33
- this.shareTrack = options.shareTrack;
34
- this.remoteShare = options.remoteShare;
35
- this.remoteAudioTrack = options.remoteAudioTrack;
36
- this.remoteVideoTrack = options.remoteVideoTrack;
37
- this.localQualityLevel = options.localQualityLevel || QUALITY_LEVELS['720p'];
38
- this.remoteQualityLevel = options.remoteQualityLevel || QUALITY_LEVELS.HIGH;
46
+ this.mediaDirection = {
47
+ receiveAudio: false,
48
+ receiveVideo: false,
49
+ receiveShare: false,
50
+ sendAudio: false,
51
+ sendVideo: false,
52
+ sendShare: false,
53
+ };
54
+ this.videoTrack = null;
55
+ this.audioTrack = null;
56
+ this.shareVideoTrack = null;
57
+ this.shareAudioTrack = null;
58
+ this.remoteShare = undefined;
59
+ this.remoteAudioTrack = undefined;
60
+ this.remoteVideoTrack = undefined;
61
+ this.remoteQualityLevel = QUALITY_LEVELS.HIGH;
39
62
  this.mediaSettings = {};
40
63
  this.videoDeviceId = null;
41
64
  }
@@ -60,20 +83,20 @@ export default class MediaProperties {
60
83
  this.webrtcMediaConnection = mediaPeerConnection;
61
84
  }
62
85
 
63
- setLocalVideoTrack(videoTrack) {
86
+ setLocalVideoTrack(videoTrack?: LocalCameraTrack) {
64
87
  this.videoTrack = videoTrack;
65
88
  }
66
89
 
67
- setLocalAudioTrack(audioTrack) {
90
+ setLocalAudioTrack(audioTrack?: LocalMicrophoneTrack) {
68
91
  this.audioTrack = audioTrack;
69
92
  }
70
93
 
71
- setLocalQualityLevel(localQualityLevel) {
72
- this.localQualityLevel = localQualityLevel;
94
+ setLocalShareVideoTrack(shareVideoTrack?: LocalDisplayTrack) {
95
+ this.shareVideoTrack = shareVideoTrack;
73
96
  }
74
97
 
75
- setLocalShareTrack(shareTrack) {
76
- this.shareTrack = shareTrack;
98
+ setLocalShareAudioTrack(shareAudioTrack?: LocalSystemAudioTrack) {
99
+ this.shareAudioTrack = shareAudioTrack;
77
100
  }
78
101
 
79
102
  setRemoteQualityLevel(remoteQualityLevel) {
@@ -115,31 +138,6 @@ export default class MediaProperties {
115
138
  this.webrtcMediaConnection = null;
116
139
  }
117
140
 
118
- unsetLocalVideoTrack() {
119
- this.videoTrack = null;
120
- }
121
-
122
- unsetLocalShareTrack() {
123
- this.shareTrack = null;
124
- }
125
-
126
- unsetLocalAudioTrack() {
127
- this.audioTrack = null;
128
- }
129
-
130
- /**
131
- * Removes remote stream from class instance
132
- * @deprecated after v1.89.3
133
- * @returns {void}
134
- */
135
- unsetRemoteStream() {
136
- LoggerProxy.logger.warn(
137
- 'Media:properties#unsetRemoteStream --> [DEPRECATION WARNING]: unsetRemoteStream has been deprecated after v1.89.3 (use unsetRemoteTracks instead)'
138
- );
139
- // unsets audio and video only
140
- this.unsetRemoteMedia();
141
- }
142
-
143
141
  /**
144
142
  * Removes both remote audio and video from class instance
145
143
  * @returns {void}
@@ -153,24 +151,6 @@ export default class MediaProperties {
153
151
  this.remoteShare = null;
154
152
  }
155
153
 
156
- unsetLocalVideoTracks() {
157
- this.unsetLocalVideoTrack();
158
- this.unsetLocalShareTrack();
159
- }
160
-
161
- /**
162
- * Removes remote stream and remote share from class instance
163
- * @deprecated after v1.89.3
164
- * @returns {void}
165
- */
166
- unsetRemoteStreams() {
167
- LoggerProxy.logger.warn(
168
- 'Media:properties#unsetRemoteStreams --> [DEPRECATION WARNING]: unsetRemoteStreams has been deprecated after v1.89.3 (use unsetRemoteTracks instead)'
169
- );
170
- this.unsetRemoteStream();
171
- this.unsetRemoteShare();
172
- }
173
-
174
154
  /**
175
155
  * Unsets all remote tracks
176
156
  * @returns {void}
@@ -180,31 +160,12 @@ export default class MediaProperties {
180
160
  this.unsetRemoteShare();
181
161
  }
182
162
 
183
- unsetShareStreams() {
184
- this.unsetLocalShareTrack();
185
- this.unsetRemoteShare();
186
- }
187
-
188
- /**
189
- * Removes both local and remote video stream from class instance
190
- * @deprecated after v1.89.3
191
- * @returns {void}
192
- */
193
- unsetMediaStreams() {
194
- LoggerProxy.logger.warn(
195
- 'Media:properties#unsetMediaStreams --> [DEPRECATION WARNING]: unsetMediaStreams has been deprecated after v1.89.3 (use unsetMediaTracks instead)'
196
- );
197
- this.unsetLocalVideoTrack();
198
- this.unsetRemoteStream();
199
- }
200
-
201
163
  /**
202
- * Removes both local and remote video stream from class instance
203
- * @returns {void}
164
+ * Returns if we have at least one local share track or not.
165
+ * @returns {Boolean}
204
166
  */
205
- unsetMediaTracks() {
206
- this.unsetLocalVideoTrack();
207
- this.unsetRemoteMedia();
167
+ hasLocalShareTrack() {
168
+ return !!(this.shareAudioTrack || this.shareVideoTrack);
208
169
  }
209
170
 
210
171
  /**
@@ -212,7 +173,7 @@ export default class MediaProperties {
212
173
  *
213
174
  * @returns {Promise<void>}
214
175
  */
215
- waitForMediaConnectionConnected() {
176
+ waitForMediaConnectionConnected(): Promise<void> {
216
177
  const isConnected = () =>
217
178
  this.webrtcMediaConnection.getConnectionState() === ConnectionState.Connected;
218
179
 
@@ -256,9 +217,7 @@ export default class MediaProperties {
256
217
  const allStatsReports = [];
257
218
 
258
219
  try {
259
- // eslint-disable-next-line no-await-in-loop
260
220
  const statsResult = await this.webrtcMediaConnection.getStats();
261
-
262
221
  statsResult.forEach((report) => allStatsReports.push(report));
263
222
  } catch (error) {
264
223
  LoggerProxy.logger.warn(