@webex/plugin-meetings 3.0.0-beta.22 → 3.0.0-beta.221

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 (419) hide show
  1. package/README.md +46 -8
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +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 +188 -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 +357 -62
  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 +49 -106
  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 +2587 -2560
  69. package/dist/meeting/index.js.map +1 -1
  70. package/dist/meeting/locusMediaRequest.js +292 -0
  71. package/dist/meeting/locusMediaRequest.js.map +1 -0
  72. package/dist/meeting/muteState.js +228 -123
  73. package/dist/meeting/muteState.js.map +1 -1
  74. package/dist/meeting/request.js +244 -194
  75. package/dist/meeting/request.js.map +1 -1
  76. package/dist/meeting/util.js +568 -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 +361 -84
  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 +90 -30
  129. package/dist/reachability/index.js.map +1 -1
  130. package/dist/reachability/request.js +16 -7
  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 +25 -29
  139. package/dist/roap/index.js.map +1 -1
  140. package/dist/roap/request.js +111 -89
  141. package/dist/roap/request.js.map +1 -1
  142. package/dist/roap/turnDiscovery.js +97 -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 +1028 -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 +1512 -0
  213. package/dist/types/meeting/locusMediaRequest.d.ts +75 -0
  214. package/dist/types/meeting/muteState.d.ts +184 -0
  215. package/dist/types/meeting/request.d.ts +289 -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 +94 -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 +361 -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 +158 -0
  251. package/dist/types/reachability/request.d.ts +39 -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 +38 -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 +47 -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 +175 -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 +381 -59
  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 +89 -109
  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 +2062 -2137
  305. package/src/meeting/locusMediaRequest.ts +314 -0
  306. package/src/meeting/muteState.ts +227 -130
  307. package/src/meeting/request.ts +157 -116
  308. package/src/meeting/util.ts +555 -396
  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 +397 -102
  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 +76 -18
  335. package/src/reachability/request.ts +16 -7
  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 +25 -30
  340. package/src/roap/request.ts +103 -95
  341. package/src/roap/turnDiscovery.ts +51 -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 +3510 -1747
  374. package/test/unit/spec/meeting/locusMediaRequest.ts +443 -0
  375. package/test/unit/spec/meeting/muteState.js +370 -208
  376. package/test/unit/spec/meeting/request.js +417 -45
  377. package/test/unit/spec/meeting/utils.js +601 -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 +874 -150
  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 +185 -7
  398. package/test/unit/spec/reachability/request.js +68 -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 +27 -51
  403. package/test/unit/spec/roap/request.ts +202 -85
  404. package/test/unit/spec/roap/turnDiscovery.ts +36 -8
  405. package/test/unit/spec/rtcMetrics/index.ts +68 -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/src/index.js +0 -16
  417. package/src/meeting/effectsState.ts +0 -211
  418. package/src/metrics/config.ts +0 -495
  419. 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,60 @@ 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
108
+ * @param {string} correlationId id used in requests to correlate to this session
117
109
  * @param {Object} options
118
- * @param {Object} [options.mediaProperties] only applicable to non-multistream connections, contains mediaDirection and local tracks:
119
- * audioTrack, videoTrack and shareTrack
110
+ * @param {Object} [options.mediaProperties] contains mediaDirection and local tracks:
111
+ * audioTrack, videoTrack, shareVideoTrack, and shareAudioTrack
120
112
  * @param {string} [options.remoteQualityLevel] LOW|MEDIUM|HIGH applicable only to non-multistream connections
121
113
  * @param {boolean} [options.enableRtx] applicable only to non-multistream connections
122
114
  * @param {boolean} [options.enableExtmap] applicable only to non-multistream connections
123
115
  * @param {Object} [options.turnServerInfo]
124
- * @returns {RoapMediaConnection}
116
+ * @param {BundlePolicy} [options.bundlePolicy]
117
+ * @returns {RoapMediaConnection | MultistreamRoapMediaConnection}
125
118
  */
126
119
  Media.createMediaConnection = (
127
120
  isMultistream: boolean,
128
121
  debugId: string,
122
+ webex: object,
123
+ meetingId: string,
124
+ correlationId: string,
129
125
  options: {
130
- mediaProperties?: {
126
+ mediaProperties: {
131
127
  mediaDirection?: {
132
128
  receiveAudio: boolean;
133
129
  receiveVideo: boolean;
134
130
  receiveShare: boolean;
131
+ sendAudio: boolean;
132
+ sendVideo: boolean;
133
+ sendShare: boolean;
135
134
  };
136
- audioTrack?: MediaStreamTrack;
137
- videoTrack?: MediaStreamTrack;
138
- shareTrack?: MediaStreamTrack;
135
+ audioTrack?: LocalMicrophoneTrack;
136
+ videoTrack?: LocalCameraTrack;
137
+ shareVideoTrack?: LocalDisplayTrack;
138
+ shareAudioTrack?: LocalSystemAudioTrack;
139
139
  };
140
140
  remoteQualityLevel?: 'LOW' | 'MEDIUM' | 'HIGH';
141
141
  enableRtx?: boolean;
@@ -145,9 +145,17 @@ Media.createMediaConnection = (
145
145
  username: string;
146
146
  password: string;
147
147
  };
148
+ bundlePolicy?: BundlePolicy;
148
149
  }
149
150
  ) => {
150
- const {mediaProperties, remoteQualityLevel, enableRtx, enableExtmap, turnServerInfo} = options;
151
+ const {
152
+ mediaProperties,
153
+ remoteQualityLevel,
154
+ enableRtx,
155
+ enableExtmap,
156
+ turnServerInfo,
157
+ bundlePolicy,
158
+ } = options;
151
159
 
152
160
  const iceServers = [];
153
161
 
@@ -160,11 +168,25 @@ Media.createMediaConnection = (
160
168
  }
161
169
 
162
170
  if (isMultistream) {
171
+ const config: MultistreamConnectionConfig = {
172
+ iceServers,
173
+ enableMainAudio:
174
+ mediaProperties.mediaDirection?.sendAudio || mediaProperties.mediaDirection?.receiveAudio,
175
+ enableMainVideo:
176
+ mediaProperties.mediaDirection?.sendVideo || mediaProperties.mediaDirection?.receiveVideo,
177
+ };
178
+
179
+ if (bundlePolicy) {
180
+ config.bundlePolicy = bundlePolicy;
181
+ }
182
+
183
+ const rtcMetrics = new RtcMetrics(webex, meetingId, correlationId);
184
+
163
185
  return new MultistreamRoapMediaConnection(
164
- {
165
- iceServers,
166
- },
167
- debugId
186
+ config,
187
+ meetingId,
188
+ (data) => rtcMetrics.addMetrics(data),
189
+ () => rtcMetrics.closeMetrics()
168
190
  );
169
191
  }
170
192
 
@@ -172,7 +194,7 @@ Media.createMediaConnection = (
172
194
  throw new Error('mediaProperties have to be provided for non-multistream media connections');
173
195
  }
174
196
 
175
- const {mediaDirection, audioTrack, videoTrack, shareTrack} = mediaProperties;
197
+ const {mediaDirection, audioTrack, videoTrack, shareVideoTrack} = mediaProperties;
176
198
 
177
199
  return new RoapMediaConnection(
178
200
  {
@@ -193,17 +215,21 @@ Media.createMediaConnection = (
193
215
  },
194
216
  },
195
217
  {
196
- send: {
197
- audio: audioTrack,
198
- video: videoTrack,
199
- screenShareVideo: shareTrack,
218
+ localTracks: {
219
+ audio: audioTrack?.underlyingTrack,
220
+ video: videoTrack?.underlyingTrack,
221
+ screenShareVideo: shareVideoTrack?.underlyingTrack,
200
222
  },
201
- receive: {
202
- audio: mediaDirection.receiveAudio,
203
- video: mediaDirection.receiveVideo,
204
- screenShareVideo: mediaDirection.receiveShare,
205
- remoteQualityLevel,
223
+ direction: {
224
+ audio: Media.getDirection(true, mediaDirection.receiveAudio, mediaDirection.sendAudio),
225
+ video: Media.getDirection(true, mediaDirection.receiveVideo, mediaDirection.sendVideo),
226
+ screenShareVideo: Media.getDirection(
227
+ false,
228
+ mediaDirection.receiveShare,
229
+ mediaDirection.sendShare
230
+ ),
206
231
  },
232
+ remoteQualityLevel,
207
233
  },
208
234
  debugId
209
235
  );
@@ -348,52 +374,6 @@ Media.getMedia = (audio: any | boolean, video: any | boolean, config: any) => {
348
374
  });
349
375
  };
350
376
 
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
377
  /**
398
378
  *
399
379
  * Toggle a specific stream
@@ -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(