@webex/plugin-meetings 3.0.0-beta.10 → 3.0.0-beta.104

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 (512) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/annotation/annotation.types.js +7 -0
  4. package/dist/annotation/annotation.types.js.map +1 -0
  5. package/dist/annotation/constants.js +48 -0
  6. package/dist/annotation/constants.js.map +1 -0
  7. package/dist/annotation/index.js +357 -0
  8. package/dist/annotation/index.js.map +1 -0
  9. package/dist/breakouts/breakout.js +176 -0
  10. package/dist/breakouts/breakout.js.map +1 -0
  11. package/dist/breakouts/collection.js +23 -0
  12. package/dist/breakouts/collection.js.map +1 -0
  13. package/dist/breakouts/edit-lock-error.js +52 -0
  14. package/dist/breakouts/edit-lock-error.js.map +1 -0
  15. package/dist/breakouts/events.js +43 -0
  16. package/dist/breakouts/events.js.map +1 -0
  17. package/dist/breakouts/index.js +919 -0
  18. package/dist/breakouts/index.js.map +1 -0
  19. package/dist/breakouts/request.js +78 -0
  20. package/dist/breakouts/request.js.map +1 -0
  21. package/dist/breakouts/utils.js +67 -0
  22. package/dist/breakouts/utils.js.map +1 -0
  23. package/dist/common/browser-detection.js +1 -20
  24. package/dist/common/browser-detection.js.map +1 -1
  25. package/dist/common/collection.js +5 -20
  26. package/dist/common/collection.js.map +1 -1
  27. package/dist/common/config.js +0 -7
  28. package/dist/common/config.js.map +1 -1
  29. package/dist/common/errors/captcha-error.js +5 -26
  30. package/dist/common/errors/captcha-error.js.map +1 -1
  31. package/dist/common/errors/intent-to-join.js +5 -26
  32. package/dist/common/errors/intent-to-join.js.map +1 -1
  33. package/dist/common/errors/join-meeting.js +6 -27
  34. package/dist/common/errors/join-meeting.js.map +1 -1
  35. package/dist/common/errors/media.js +5 -26
  36. package/dist/common/errors/media.js.map +1 -1
  37. package/dist/common/errors/parameter.js +5 -33
  38. package/dist/common/errors/parameter.js.map +1 -1
  39. package/dist/common/errors/password-error.js +5 -26
  40. package/dist/common/errors/password-error.js.map +1 -1
  41. package/dist/common/errors/permission.js +4 -25
  42. package/dist/common/errors/permission.js.map +1 -1
  43. package/dist/common/errors/reconnection-in-progress.js +0 -17
  44. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  45. package/dist/common/errors/reconnection.js +5 -26
  46. package/dist/common/errors/reconnection.js.map +1 -1
  47. package/dist/common/errors/stats.js +5 -26
  48. package/dist/common/errors/stats.js.map +1 -1
  49. package/dist/common/errors/webex-errors.js +6 -41
  50. package/dist/common/errors/webex-errors.js.map +1 -1
  51. package/dist/common/errors/webex-meetings-error.js +1 -24
  52. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  53. package/dist/common/events/events-scope.js +0 -22
  54. package/dist/common/events/events-scope.js.map +1 -1
  55. package/dist/common/events/events.js +0 -23
  56. package/dist/common/events/events.js.map +1 -1
  57. package/dist/common/events/trigger-proxy.js +0 -12
  58. package/dist/common/events/trigger-proxy.js.map +1 -1
  59. package/dist/common/events/util.js +0 -15
  60. package/dist/common/events/util.js.map +1 -1
  61. package/dist/common/logs/logger-config.js +0 -4
  62. package/dist/common/logs/logger-config.js.map +1 -1
  63. package/dist/common/logs/logger-proxy.js +1 -8
  64. package/dist/common/logs/logger-proxy.js.map +1 -1
  65. package/dist/common/logs/request.js +35 -61
  66. package/dist/common/logs/request.js.map +1 -1
  67. package/dist/common/queue.js +4 -14
  68. package/dist/common/queue.js.map +1 -1
  69. package/dist/config.js +6 -6
  70. package/dist/config.js.map +1 -1
  71. package/dist/constants.js +173 -52
  72. package/dist/constants.js.map +1 -1
  73. package/dist/controls-options-manager/constants.js +14 -0
  74. package/dist/controls-options-manager/constants.js.map +1 -0
  75. package/dist/controls-options-manager/enums.js +25 -0
  76. package/dist/controls-options-manager/enums.js.map +1 -0
  77. package/dist/controls-options-manager/index.js +297 -0
  78. package/dist/controls-options-manager/index.js.map +1 -0
  79. package/dist/controls-options-manager/types.js +7 -0
  80. package/dist/controls-options-manager/types.js.map +1 -0
  81. package/dist/controls-options-manager/util.js +250 -0
  82. package/dist/controls-options-manager/util.js.map +1 -0
  83. package/dist/index.js +72 -17
  84. package/dist/index.js.map +1 -1
  85. package/dist/locus-info/controlsUtils.js +56 -29
  86. package/dist/locus-info/controlsUtils.js.map +1 -1
  87. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  88. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  89. package/dist/locus-info/fullState.js +0 -15
  90. package/dist/locus-info/fullState.js.map +1 -1
  91. package/dist/locus-info/hostUtils.js +4 -12
  92. package/dist/locus-info/hostUtils.js.map +1 -1
  93. package/dist/locus-info/index.js +327 -211
  94. package/dist/locus-info/index.js.map +1 -1
  95. package/dist/locus-info/infoUtils.js +0 -38
  96. package/dist/locus-info/infoUtils.js.map +1 -1
  97. package/dist/locus-info/mediaSharesUtils.js +12 -38
  98. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  99. package/dist/locus-info/parser.js +88 -123
  100. package/dist/locus-info/parser.js.map +1 -1
  101. package/dist/locus-info/selfUtils.js +99 -91
  102. package/dist/locus-info/selfUtils.js.map +1 -1
  103. package/dist/media/index.js +62 -147
  104. package/dist/media/index.js.map +1 -1
  105. package/dist/media/properties.js +71 -117
  106. package/dist/media/properties.js.map +1 -1
  107. package/dist/media/util.js +2 -9
  108. package/dist/media/util.js.map +1 -1
  109. package/dist/mediaQualityMetrics/config.js +505 -495
  110. package/dist/mediaQualityMetrics/config.js.map +1 -1
  111. package/dist/meeting/in-meeting-actions.js +59 -14
  112. package/dist/meeting/in-meeting-actions.js.map +1 -1
  113. package/dist/meeting/index.js +2396 -2388
  114. package/dist/meeting/index.js.map +1 -1
  115. package/dist/meeting/muteState.js +252 -113
  116. package/dist/meeting/muteState.js.map +1 -1
  117. package/dist/meeting/request.js +318 -283
  118. package/dist/meeting/request.js.map +1 -1
  119. package/dist/meeting/request.type.js +7 -0
  120. package/dist/meeting/request.type.js.map +1 -0
  121. package/dist/meeting/state.js +21 -31
  122. package/dist/meeting/state.js.map +1 -1
  123. package/dist/meeting/util.js +58 -217
  124. package/dist/meeting/util.js.map +1 -1
  125. package/dist/meeting-info/collection.js +3 -25
  126. package/dist/meeting-info/collection.js.map +1 -1
  127. package/dist/meeting-info/index.js +10 -33
  128. package/dist/meeting-info/index.js.map +1 -1
  129. package/dist/meeting-info/meeting-info-v2.js +263 -282
  130. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  131. package/dist/meeting-info/request.js +1 -16
  132. package/dist/meeting-info/request.js.map +1 -1
  133. package/dist/meeting-info/util.js +98 -183
  134. package/dist/meeting-info/util.js.map +1 -1
  135. package/dist/meeting-info/utilv2.js +155 -232
  136. package/dist/meeting-info/utilv2.js.map +1 -1
  137. package/dist/meetings/collection.js +24 -20
  138. package/dist/meetings/collection.js.map +1 -1
  139. package/dist/meetings/index.js +675 -593
  140. package/dist/meetings/index.js.map +1 -1
  141. package/dist/meetings/request.js +23 -42
  142. package/dist/meetings/request.js.map +1 -1
  143. package/dist/meetings/util.js +177 -155
  144. package/dist/meetings/util.js.map +1 -1
  145. package/dist/member/index.js +80 -88
  146. package/dist/member/index.js.map +1 -1
  147. package/dist/member/types.js +15 -0
  148. package/dist/member/types.js.map +1 -0
  149. package/dist/member/util.js +90 -69
  150. package/dist/member/util.js.map +1 -1
  151. package/dist/members/collection.js +12 -12
  152. package/dist/members/collection.js.map +1 -1
  153. package/dist/members/index.js +162 -204
  154. package/dist/members/index.js.map +1 -1
  155. package/dist/members/request.js +58 -53
  156. package/dist/members/request.js.map +1 -1
  157. package/dist/members/types.js +15 -0
  158. package/dist/members/types.js.map +1 -0
  159. package/dist/members/util.js +107 -44
  160. package/dist/members/util.js.map +1 -1
  161. package/dist/metrics/config.js +5 -14
  162. package/dist/metrics/config.js.map +1 -1
  163. package/dist/metrics/constants.js +3 -7
  164. package/dist/metrics/constants.js.map +1 -1
  165. package/dist/metrics/index.js +61 -161
  166. package/dist/metrics/index.js.map +1 -1
  167. package/dist/multistream/mediaRequestManager.js +167 -50
  168. package/dist/multistream/mediaRequestManager.js.map +1 -1
  169. package/dist/multistream/receiveSlot.js +58 -65
  170. package/dist/multistream/receiveSlot.js.map +1 -1
  171. package/dist/multistream/receiveSlotManager.js +74 -93
  172. package/dist/multistream/receiveSlotManager.js.map +1 -1
  173. package/dist/multistream/remoteMedia.js +55 -74
  174. package/dist/multistream/remoteMedia.js.map +1 -1
  175. package/dist/multistream/remoteMediaGroup.js +6 -40
  176. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  177. package/dist/multistream/remoteMediaManager.js +466 -442
  178. package/dist/multistream/remoteMediaManager.js.map +1 -1
  179. package/dist/networkQualityMonitor/index.js +32 -59
  180. package/dist/networkQualityMonitor/index.js.map +1 -1
  181. package/dist/personal-meeting-room/index.js +10 -45
  182. package/dist/personal-meeting-room/index.js.map +1 -1
  183. package/dist/personal-meeting-room/request.js +2 -33
  184. package/dist/personal-meeting-room/request.js.map +1 -1
  185. package/dist/personal-meeting-room/util.js +0 -13
  186. package/dist/personal-meeting-room/util.js.map +1 -1
  187. package/dist/reachability/index.js +190 -199
  188. package/dist/reachability/index.js.map +1 -1
  189. package/dist/reachability/request.js +14 -23
  190. package/dist/reachability/request.js.map +1 -1
  191. package/dist/reactions/constants.js +13 -0
  192. package/dist/reactions/constants.js.map +1 -0
  193. package/dist/reactions/reactions.js +109 -0
  194. package/dist/reactions/reactions.js.map +1 -0
  195. package/dist/reactions/reactions.type.js +36 -0
  196. package/dist/reactions/reactions.type.js.map +1 -0
  197. package/dist/reconnection-manager/index.js +326 -465
  198. package/dist/reconnection-manager/index.js.map +1 -1
  199. package/dist/recording-controller/enums.js +17 -0
  200. package/dist/recording-controller/enums.js.map +1 -0
  201. package/dist/recording-controller/index.js +343 -0
  202. package/dist/recording-controller/index.js.map +1 -0
  203. package/dist/recording-controller/util.js +63 -0
  204. package/dist/recording-controller/util.js.map +1 -0
  205. package/dist/roap/index.js +38 -67
  206. package/dist/roap/index.js.map +1 -1
  207. package/dist/roap/request.js +143 -134
  208. package/dist/roap/request.js.map +1 -1
  209. package/dist/roap/turnDiscovery.js +149 -101
  210. package/dist/roap/turnDiscovery.js.map +1 -1
  211. package/dist/statsAnalyzer/global.js +1 -95
  212. package/dist/statsAnalyzer/global.js.map +1 -1
  213. package/dist/statsAnalyzer/index.js +369 -461
  214. package/dist/statsAnalyzer/index.js.map +1 -1
  215. package/dist/statsAnalyzer/mqaUtil.js +144 -94
  216. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  217. package/dist/transcription/index.js +13 -45
  218. package/dist/transcription/index.js.map +1 -1
  219. package/dist/types/annotation/annotation.types.d.ts +34 -0
  220. package/dist/types/annotation/constants.d.ts +31 -0
  221. package/dist/types/annotation/index.d.ts +124 -0
  222. package/dist/types/breakouts/breakout.d.ts +8 -0
  223. package/dist/types/breakouts/collection.d.ts +5 -0
  224. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  225. package/dist/types/breakouts/events.d.ts +2 -0
  226. package/dist/types/breakouts/index.d.ts +5 -0
  227. package/dist/types/breakouts/request.d.ts +22 -0
  228. package/dist/types/breakouts/utils.d.ts +15 -0
  229. package/dist/types/common/browser-detection.d.ts +9 -0
  230. package/dist/types/common/collection.d.ts +48 -0
  231. package/dist/types/common/config.d.ts +2 -0
  232. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  233. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  234. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  235. package/dist/types/common/errors/media.d.ts +15 -0
  236. package/dist/types/common/errors/parameter.d.ts +15 -0
  237. package/dist/types/common/errors/password-error.d.ts +15 -0
  238. package/dist/types/common/errors/permission.d.ts +14 -0
  239. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  240. package/dist/types/common/errors/reconnection.d.ts +15 -0
  241. package/dist/types/common/errors/stats.d.ts +15 -0
  242. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  243. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  244. package/dist/types/common/events/events-scope.d.ts +17 -0
  245. package/dist/types/common/events/events.d.ts +12 -0
  246. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  247. package/dist/types/common/events/util.d.ts +2 -0
  248. package/dist/types/common/logs/logger-config.d.ts +2 -0
  249. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  250. package/dist/types/common/logs/request.d.ts +34 -0
  251. package/dist/types/common/queue.d.ts +32 -0
  252. package/dist/types/config.d.ts +78 -0
  253. package/dist/types/constants.d.ts +968 -0
  254. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  255. package/dist/types/controls-options-manager/enums.d.ts +13 -0
  256. package/dist/types/controls-options-manager/index.d.ts +136 -0
  257. package/dist/types/controls-options-manager/types.d.ts +37 -0
  258. package/dist/types/controls-options-manager/util.d.ts +1 -0
  259. package/dist/types/index.d.ts +7 -0
  260. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  261. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  262. package/dist/types/locus-info/fullState.d.ts +2 -0
  263. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  264. package/dist/types/locus-info/index.d.ts +315 -0
  265. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  266. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  267. package/dist/types/locus-info/parser.d.ts +212 -0
  268. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  269. package/dist/types/media/index.d.ts +34 -0
  270. package/dist/types/media/properties.d.ts +108 -0
  271. package/dist/types/media/util.d.ts +2 -0
  272. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  273. package/dist/types/meeting/in-meeting-actions.d.ts +129 -0
  274. package/dist/types/meeting/index.d.ts +1748 -0
  275. package/dist/types/meeting/muteState.d.ts +185 -0
  276. package/dist/types/meeting/request.d.ts +275 -0
  277. package/dist/types/meeting/request.type.d.ts +11 -0
  278. package/dist/types/meeting/state.d.ts +9 -0
  279. package/dist/types/meeting/util.d.ts +2 -0
  280. package/dist/types/meeting-info/collection.d.ts +20 -0
  281. package/dist/types/meeting-info/index.d.ts +57 -0
  282. package/dist/types/meeting-info/meeting-info-v2.d.ts +112 -0
  283. package/dist/types/meeting-info/request.d.ts +22 -0
  284. package/dist/types/meeting-info/util.d.ts +2 -0
  285. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  286. package/dist/types/meetings/collection.d.ts +31 -0
  287. package/dist/types/meetings/index.d.ts +345 -0
  288. package/dist/types/meetings/request.d.ts +27 -0
  289. package/dist/types/meetings/util.d.ts +18 -0
  290. package/dist/types/member/index.d.ts +156 -0
  291. package/dist/types/member/types.d.ts +21 -0
  292. package/dist/types/member/util.d.ts +2 -0
  293. package/dist/types/members/collection.d.ts +29 -0
  294. package/dist/types/members/index.d.ts +353 -0
  295. package/dist/types/members/request.d.ts +69 -0
  296. package/dist/types/members/types.d.ts +24 -0
  297. package/dist/types/members/util.d.ts +2 -0
  298. package/dist/types/metrics/config.d.ts +172 -0
  299. package/dist/types/metrics/constants.d.ts +54 -0
  300. package/dist/types/metrics/index.d.ts +152 -0
  301. package/dist/types/multistream/mediaRequestManager.d.ts +101 -0
  302. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  303. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  304. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  305. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  306. package/dist/types/multistream/remoteMediaManager.d.ts +263 -0
  307. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  308. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  309. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  310. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  311. package/dist/types/reachability/index.d.ts +152 -0
  312. package/dist/types/reachability/request.d.ts +37 -0
  313. package/dist/types/reactions/constants.d.ts +3 -0
  314. package/dist/types/reactions/reactions.d.ts +4 -0
  315. package/dist/types/reactions/reactions.type.d.ts +52 -0
  316. package/dist/types/reconnection-manager/index.d.ts +126 -0
  317. package/dist/types/recording-controller/enums.d.ts +7 -0
  318. package/dist/types/recording-controller/index.d.ts +193 -0
  319. package/dist/types/recording-controller/util.d.ts +13 -0
  320. package/dist/types/roap/index.d.ts +77 -0
  321. package/dist/types/roap/request.d.ts +38 -0
  322. package/dist/types/roap/turnDiscovery.d.ts +88 -0
  323. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  324. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  325. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  326. package/dist/types/transcription/index.d.ts +64 -0
  327. package/internal-README.md +7 -6
  328. package/package.json +28 -21
  329. package/src/annotation/annotation.types.ts +41 -0
  330. package/src/annotation/constants.ts +36 -0
  331. package/src/annotation/index.ts +339 -0
  332. package/src/breakouts/README.md +219 -0
  333. package/src/breakouts/breakout.ts +141 -0
  334. package/src/breakouts/collection.ts +19 -0
  335. package/src/breakouts/edit-lock-error.ts +25 -0
  336. package/src/breakouts/events.ts +37 -0
  337. package/src/breakouts/index.ts +823 -0
  338. package/src/breakouts/request.ts +55 -0
  339. package/src/breakouts/utils.ts +57 -0
  340. package/src/common/browser-detection.ts +9 -6
  341. package/src/common/collection.ts +3 -1
  342. package/src/common/errors/captcha-error.ts +6 -6
  343. package/src/common/errors/intent-to-join.ts +6 -6
  344. package/src/common/errors/join-meeting.ts +12 -8
  345. package/src/common/errors/media.ts +6 -6
  346. package/src/common/errors/parameter.ts +9 -6
  347. package/src/common/errors/password-error.ts +6 -6
  348. package/src/common/errors/permission.ts +5 -5
  349. package/src/common/errors/reconnection.ts +6 -6
  350. package/src/common/errors/stats.ts +6 -6
  351. package/src/common/errors/webex-errors.ts +7 -5
  352. package/src/common/errors/webex-meetings-error.ts +1 -1
  353. package/src/common/events/events-scope.ts +5 -1
  354. package/src/common/events/events.ts +5 -1
  355. package/src/common/events/trigger-proxy.ts +8 -3
  356. package/src/common/events/util.ts +1 -2
  357. package/src/common/logs/logger-proxy.ts +21 -10
  358. package/src/common/logs/request.ts +11 -8
  359. package/src/config.ts +16 -12
  360. package/src/constants.ts +119 -6
  361. package/src/controls-options-manager/constants.ts +5 -0
  362. package/src/controls-options-manager/enums.ts +16 -0
  363. package/src/controls-options-manager/index.ts +278 -0
  364. package/src/controls-options-manager/types.ts +49 -0
  365. package/src/controls-options-manager/util.ts +229 -0
  366. package/src/index.ts +33 -0
  367. package/src/locus-info/controlsUtils.ts +91 -24
  368. package/src/locus-info/fullState.ts +15 -11
  369. package/src/locus-info/hostUtils.ts +4 -3
  370. package/src/locus-info/index.ts +270 -54
  371. package/src/locus-info/infoUtils.ts +12 -4
  372. package/src/locus-info/mediaSharesUtils.ts +4 -4
  373. package/src/locus-info/parser.ts +46 -68
  374. package/src/locus-info/selfUtils.ts +187 -56
  375. package/src/media/index.ts +142 -172
  376. package/src/media/properties.ts +43 -36
  377. package/src/media/util.ts +1 -1
  378. package/src/mediaQualityMetrics/config.ts +380 -378
  379. package/src/meeting/in-meeting-actions.ts +123 -3
  380. package/src/meeting/index.ts +2617 -1545
  381. package/src/meeting/muteState.ts +271 -68
  382. package/src/meeting/request.ts +251 -132
  383. package/src/meeting/request.type.ts +13 -0
  384. package/src/meeting/state.ts +45 -30
  385. package/src/meeting/util.ts +119 -110
  386. package/src/meeting-info/collection.ts +2 -1
  387. package/src/meeting-info/index.ts +32 -30
  388. package/src/meeting-info/meeting-info-v2.ts +181 -109
  389. package/src/meeting-info/request.ts +9 -3
  390. package/src/meeting-info/util.ts +54 -46
  391. package/src/meeting-info/utilv2.ts +70 -55
  392. package/src/meetings/collection.ts +21 -1
  393. package/src/meetings/index.ts +749 -437
  394. package/src/meetings/request.ts +29 -25
  395. package/src/meetings/util.ts +122 -33
  396. package/src/member/index.ts +86 -49
  397. package/src/member/types.ts +24 -0
  398. package/src/member/util.ts +92 -13
  399. package/src/members/collection.ts +8 -1
  400. package/src/members/index.ts +281 -129
  401. package/src/members/request.ts +87 -14
  402. package/src/members/types.ts +28 -0
  403. package/src/members/util.ts +140 -49
  404. package/src/metrics/config.ts +256 -90
  405. package/src/metrics/constants.ts +1 -6
  406. package/src/metrics/index.ts +96 -96
  407. package/src/multistream/mediaRequestManager.ts +203 -45
  408. package/src/multistream/receiveSlot.ts +69 -26
  409. package/src/multistream/receiveSlotManager.ts +62 -38
  410. package/src/multistream/remoteMedia.ts +30 -4
  411. package/src/multistream/remoteMediaGroup.ts +4 -3
  412. package/src/multistream/remoteMediaManager.ts +230 -66
  413. package/src/networkQualityMonitor/index.ts +24 -27
  414. package/src/personal-meeting-room/index.ts +12 -16
  415. package/src/personal-meeting-room/request.ts +10 -3
  416. package/src/personal-meeting-room/util.ts +3 -3
  417. package/src/reachability/index.ts +131 -79
  418. package/src/reachability/request.ts +43 -34
  419. package/src/reactions/constants.ts +4 -0
  420. package/src/reactions/reactions.ts +104 -0
  421. package/src/reactions/reactions.type.ts +62 -0
  422. package/src/reconnection-manager/index.ts +193 -111
  423. package/src/recording-controller/enums.ts +8 -0
  424. package/src/recording-controller/index.ts +315 -0
  425. package/src/recording-controller/util.ts +58 -0
  426. package/src/roap/index.ts +63 -51
  427. package/src/roap/request.ts +86 -53
  428. package/src/roap/turnDiscovery.ts +105 -46
  429. package/src/statsAnalyzer/global.ts +8 -104
  430. package/src/statsAnalyzer/index.ts +624 -376
  431. package/src/statsAnalyzer/mqaUtil.ts +203 -90
  432. package/src/transcription/index.ts +34 -32
  433. package/test/integration/spec/converged-space-meetings.js +177 -0
  434. package/test/integration/spec/journey.js +666 -464
  435. package/test/integration/spec/space-meeting.js +320 -204
  436. package/test/integration/spec/transcription.js +7 -8
  437. package/test/unit/spec/annotation/index.ts +435 -0
  438. package/test/unit/spec/breakouts/breakout.ts +184 -0
  439. package/test/unit/spec/breakouts/collection.ts +15 -0
  440. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  441. package/test/unit/spec/breakouts/events.ts +77 -0
  442. package/test/unit/spec/breakouts/index.ts +1504 -0
  443. package/test/unit/spec/breakouts/request.ts +104 -0
  444. package/test/unit/spec/breakouts/utils.js +72 -0
  445. package/test/unit/spec/common/browser-detection.js +9 -28
  446. package/test/unit/spec/controls-options-manager/index.js +287 -0
  447. package/test/unit/spec/controls-options-manager/util.js +403 -0
  448. package/test/unit/spec/fixture/locus.js +92 -90
  449. package/test/unit/spec/locus-info/controlsUtils.js +177 -32
  450. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  451. package/test/unit/spec/locus-info/index.js +493 -3
  452. package/test/unit/spec/locus-info/infoUtils.js +26 -33
  453. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  454. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  455. package/test/unit/spec/locus-info/parser.js +3 -9
  456. package/test/unit/spec/locus-info/selfConstant.js +110 -103
  457. package/test/unit/spec/locus-info/selfUtils.js +236 -12
  458. package/test/unit/spec/media/index.ts +104 -8
  459. package/test/unit/spec/media/properties.ts +9 -9
  460. package/test/unit/spec/meeting/in-meeting-actions.ts +58 -3
  461. package/test/unit/spec/meeting/index.js +2649 -837
  462. package/test/unit/spec/meeting/muteState.js +368 -70
  463. package/test/unit/spec/meeting/request.js +217 -43
  464. package/test/unit/spec/meeting/utils.js +146 -165
  465. package/test/unit/spec/meeting-info/meetinginfov2.js +268 -74
  466. package/test/unit/spec/meeting-info/request.js +7 -9
  467. package/test/unit/spec/meeting-info/util.js +11 -12
  468. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  469. package/test/unit/spec/meetings/collection.js +15 -1
  470. package/test/unit/spec/meetings/index.js +1052 -329
  471. package/test/unit/spec/meetings/utils.js +163 -14
  472. package/test/unit/spec/member/index.js +24 -1
  473. package/test/unit/spec/member/util.js +359 -32
  474. package/test/unit/spec/members/index.js +402 -54
  475. package/test/unit/spec/members/request.js +76 -20
  476. package/test/unit/spec/members/utils.js +191 -4
  477. package/test/unit/spec/metrics/index.js +46 -20
  478. package/test/unit/spec/multistream/mediaRequestManager.ts +650 -105
  479. package/test/unit/spec/multistream/receiveSlot.ts +76 -17
  480. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  481. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  482. package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
  483. package/test/unit/spec/multistream/remoteMediaManager.ts +549 -65
  484. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  485. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  486. package/test/unit/spec/reachability/index.ts +176 -27
  487. package/test/unit/spec/reachability/request.js +66 -0
  488. package/test/unit/spec/reconnection-manager/index.js +62 -31
  489. package/test/unit/spec/recording-controller/index.js +231 -0
  490. package/test/unit/spec/recording-controller/util.js +102 -0
  491. package/test/unit/spec/roap/index.ts +21 -16
  492. package/test/unit/spec/roap/request.ts +217 -0
  493. package/test/unit/spec/roap/turnDiscovery.ts +93 -49
  494. package/test/unit/spec/stats-analyzer/index.js +116 -60
  495. package/test/utils/cmr.js +44 -42
  496. package/test/utils/constants.js +9 -0
  497. package/test/utils/integrationTestUtils.js +64 -0
  498. package/test/utils/testUtils.js +63 -99
  499. package/test/utils/webex-config.js +22 -18
  500. package/test/utils/webex-test-users.js +57 -50
  501. package/tsconfig.json +6 -0
  502. package/dist/media/internal-media-core-wrapper.js +0 -22
  503. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  504. package/dist/meeting/effectsState.js +0 -334
  505. package/dist/meeting/effectsState.js.map +0 -1
  506. package/dist/multistream/multistreamMedia.js +0 -116
  507. package/dist/multistream/multistreamMedia.js.map +0 -1
  508. package/src/index.js +0 -15
  509. package/src/media/internal-media-core-wrapper.ts +0 -9
  510. package/src/meeting/effectsState.ts +0 -211
  511. package/src/multistream/multistreamMedia.ts +0 -92
  512. package/test/unit/spec/meeting/effectsState.js +0 -291
@@ -3,21 +3,23 @@
3
3
  */
4
4
  /* globals navigator */
5
5
 
6
+ import {RoapMediaConnection, MultistreamRoapMediaConnection} from '@webex/internal-media-core';
7
+ import {LocalCameraTrack, LocalDisplayTrack, LocalMicrophoneTrack} from '@webex/media-helpers';
6
8
  import LoggerProxy from '../common/logs/logger-proxy';
7
- import {
8
- AUDIO_INPUT,
9
- VIDEO_INPUT,
10
- MEDIA_TRACK_CONSTRAINT,
11
- } from '../constants';
9
+ import {AUDIO_INPUT, VIDEO_INPUT, MEDIA_TRACK_CONSTRAINT} from '../constants';
12
10
  import Config from '../config';
13
11
  import StaticConfig from '../common/config';
14
12
  import MediaError from '../common/errors/media';
15
13
  import BrowserDetection from '../common/browser-detection';
16
14
 
17
- import {RoapMediaConnection, MultistreamRoapMediaConnection} from './internal-media-core-wrapper';
18
-
19
15
  const {isBrowser} = BrowserDetection();
20
16
 
17
+ type MultistreamConnectionConfig = ConstructorParameters<typeof MultistreamRoapMediaConnection>[0];
18
+
19
+ export type BundlePolicy = ConstructorParameters<
20
+ typeof MultistreamRoapMediaConnection
21
+ >[0]['bundlePolicy'];
22
+
21
23
  /**
22
24
  * MediaDirection
23
25
  * @typedef {Object} MediaDirection
@@ -48,22 +50,6 @@ const {isBrowser} = BrowserDetection();
48
50
  */
49
51
  const Media: any = {};
50
52
 
51
- /**
52
- * @param {boolean} enabled
53
- * @param {MediaStreamTrack} track
54
- * @returns {Boolean}
55
- * @public
56
- */
57
- Media.setLocalTrack = (enabled: boolean, track: MediaStreamTrack) => {
58
- if (track) {
59
- track.enabled = enabled;
60
-
61
- return true;
62
- }
63
-
64
- return false;
65
- };
66
-
67
53
  /**
68
54
  * format the media array for send
69
55
  * @param {String} mediaId
@@ -77,10 +63,10 @@ Media.generateLocalMedias = (mediaId: string, audioMuted: boolean, videoMuted: b
77
63
  {
78
64
  localSdp: JSON.stringify({
79
65
  audioMuted,
80
- videoMuted
66
+ videoMuted,
81
67
  }),
82
- mediaId
83
- }
68
+ mediaId,
69
+ },
84
70
  ];
85
71
  }
86
72
 
@@ -94,9 +80,7 @@ Media.generateLocalMedias = (mediaId: string, audioMuted: boolean, videoMuted: b
94
80
  * @returns {Promise}
95
81
  */
96
82
  Media.getLocalMedia = (options: any, config: object) => {
97
- const {
98
- sendAudio, sendVideo, sendShare, sharePreferences, isSharing
99
- } = options;
83
+ const {sendAudio, sendVideo, sendShare, sharePreferences, isSharing} = options;
100
84
 
101
85
  if (sendAudio || sendVideo) {
102
86
  return Media.getMedia(sendAudio, sendVideo, config);
@@ -107,7 +91,7 @@ Media.getLocalMedia = (options: any, config: object) => {
107
91
  {
108
92
  sendAudio: false,
109
93
  sendShare: true,
110
- sharePreferences
94
+ sharePreferences,
111
95
  },
112
96
  config
113
97
  );
@@ -122,36 +106,41 @@ Media.getLocalMedia = (options: any, config: object) => {
122
106
  * @param {boolean} isMultistream
123
107
  * @param {string} debugId string useful for debugging (will appear in media connection logs)
124
108
  * @param {Object} options
125
- * @param {Object} [options.mediaProperties] only applicable to non-multistream connections, contains mediaDirection and local tracks:
109
+ * @param {Object} [options.mediaProperties] contains mediaDirection and local tracks:
126
110
  * audioTrack, videoTrack and shareTrack
127
111
  * @param {string} [options.remoteQualityLevel] LOW|MEDIUM|HIGH applicable only to non-multistream connections
128
112
  * @param {boolean} [options.enableRtx] applicable only to non-multistream connections
129
113
  * @param {boolean} [options.enableExtmap] applicable only to non-multistream connections
130
114
  * @param {Object} [options.turnServerInfo]
131
- * @returns {RoapMediaConnection}
115
+ * @param {BundlePolicy} [options.bundlePolicy]
116
+ * @returns {RoapMediaConnection | MultistreamRoapMediaConnection}
132
117
  */
133
118
  Media.createMediaConnection = (
134
119
  isMultistream: boolean,
135
120
  debugId: string,
136
121
  options: {
137
- mediaProperties?: {
122
+ mediaProperties: {
138
123
  mediaDirection?: {
139
- receiveAudio: boolean,
140
- receiveVideo: boolean,
141
- receiveShare: boolean,
142
- },
143
- audioTrack?: MediaStreamTrack,
144
- videoTrack?: MediaStreamTrack,
145
- shareTrack?: MediaStreamTrack
146
- },
147
- remoteQualityLevel?: 'LOW'|'MEDIUM'|'HIGH',
148
- enableRtx?: boolean,
149
- enableExtmap?: boolean,
124
+ receiveAudio: boolean;
125
+ receiveVideo: boolean;
126
+ receiveShare: boolean;
127
+ sendAudio: boolean;
128
+ sendVideo: boolean;
129
+ sendShare: boolean;
130
+ };
131
+ audioTrack?: LocalMicrophoneTrack;
132
+ videoTrack?: LocalCameraTrack;
133
+ shareTrack?: LocalDisplayTrack;
134
+ };
135
+ remoteQualityLevel?: 'LOW' | 'MEDIUM' | 'HIGH';
136
+ enableRtx?: boolean;
137
+ enableExtmap?: boolean;
150
138
  turnServerInfo?: {
151
- url: string,
152
- username: string,
153
- password: string
154
- }
139
+ url: string;
140
+ username: string;
141
+ password: string;
142
+ };
143
+ bundlePolicy?: BundlePolicy;
155
144
  }
156
145
  ) => {
157
146
  const {
@@ -159,7 +148,8 @@ Media.createMediaConnection = (
159
148
  remoteQualityLevel,
160
149
  enableRtx,
161
150
  enableExtmap,
162
- turnServerInfo
151
+ turnServerInfo,
152
+ bundlePolicy,
163
153
  } = options;
164
154
 
165
155
  const iceServers = [];
@@ -168,57 +158,65 @@ Media.createMediaConnection = (
168
158
  iceServers.push({
169
159
  urls: turnServerInfo.url,
170
160
  username: turnServerInfo.username || '',
171
- credential: turnServerInfo.password || ''
161
+ credential: turnServerInfo.password || '',
172
162
  });
173
163
  }
174
164
 
175
165
  if (isMultistream) {
176
- return new MultistreamRoapMediaConnection({
166
+ const config: MultistreamConnectionConfig = {
177
167
  iceServers,
178
- }, debugId);
168
+ enableMainAudio:
169
+ mediaProperties.mediaDirection?.sendAudio || mediaProperties.mediaDirection?.receiveAudio,
170
+ enableMainVideo:
171
+ mediaProperties.mediaDirection?.sendVideo || mediaProperties.mediaDirection?.receiveVideo,
172
+ };
173
+
174
+ if (bundlePolicy) {
175
+ config.bundlePolicy = bundlePolicy;
176
+ }
177
+
178
+ return new MultistreamRoapMediaConnection(config, debugId);
179
179
  }
180
180
 
181
181
  if (!mediaProperties) {
182
182
  throw new Error('mediaProperties have to be provided for non-multistream media connections');
183
183
  }
184
184
 
185
- const {
186
- mediaDirection,
187
- audioTrack,
188
- videoTrack,
189
- shareTrack
190
- } = mediaProperties;
191
-
192
-
193
- return new RoapMediaConnection({
194
- iceServers,
195
- skipInactiveTransceivers: false,
196
- requireH264: true,
197
- sdpMunging: {
198
- convertPort9to0: false,
199
- addContentSlides: true,
200
- bandwidthLimits: {
201
- audio: StaticConfig.meetings.bandwidth.audio,
202
- video: StaticConfig.meetings.bandwidth.video,
185
+ const {mediaDirection, audioTrack, videoTrack, shareTrack} = mediaProperties;
186
+
187
+ return new RoapMediaConnection(
188
+ {
189
+ iceServers,
190
+ skipInactiveTransceivers: false,
191
+ requireH264: true,
192
+ sdpMunging: {
193
+ convertPort9to0: false,
194
+ addContentSlides: true,
195
+ bandwidthLimits: {
196
+ audio: StaticConfig.meetings.bandwidth.audio,
197
+ video: StaticConfig.meetings.bandwidth.video,
198
+ },
199
+ startBitrate: StaticConfig.meetings.bandwidth.startBitrate,
200
+ periodicKeyframes: 20, // it's always been hardcoded in SDK so for now keeping it that way
201
+ disableExtmap: !enableExtmap,
202
+ disableRtx: !enableRtx, // see https://bugs.chromium.org/p/chromium/issues/detail?id=1020642 why we might want to remove RTX from SDP
203
203
  },
204
- startBitrate: StaticConfig.meetings.bandwidth.startBitrate,
205
- periodicKeyframes: 20, // it's always been hardcoded in SDK so for now keeping it that way
206
- disableExtmap: !enableExtmap,
207
- disableRtx: !enableRtx, // see https://bugs.chromium.org/p/chromium/issues/detail?id=1020642 why we might want to remove RTX from SDP
208
- }
209
- }, {
210
- send: {
211
- audio: audioTrack,
212
- video: videoTrack,
213
- screenShareVideo: shareTrack
214
204
  },
215
- receive: {
216
- audio: mediaDirection.receiveAudio,
217
- video: mediaDirection.receiveVideo,
218
- screenShareVideo: mediaDirection.receiveShare,
219
- remoteQualityLevel
220
- }
221
- }, debugId);
205
+ {
206
+ send: {
207
+ audio: audioTrack?.underlyingTrack,
208
+ video: videoTrack?.underlyingTrack,
209
+ screenShareVideo: shareTrack?.underlyingTrack,
210
+ },
211
+ receive: {
212
+ audio: mediaDirection.receiveAudio,
213
+ video: mediaDirection.receiveVideo,
214
+ screenShareVideo: mediaDirection.receiveShare,
215
+ remoteQualityLevel,
216
+ },
217
+ },
218
+ debugId
219
+ );
222
220
  };
223
221
 
224
222
  /**
@@ -252,38 +250,31 @@ Media.getDisplayMedia = (
252
250
  const hasSharePreferences = options.sharePreferences;
253
251
  const hasCustomConstraints = hasSharePreferences && hasSharePreferences.shareConstraints;
254
252
  const hasHighFrameRate = hasSharePreferences && hasSharePreferences.highFrameRate;
255
- const {
256
- screenResolution,
257
- resolution,
258
- videoShareFrameRate,
259
- screenFrameRate,
260
- aspectRatio
261
- } = Config.meetings;
253
+ const {screenResolution, resolution, videoShareFrameRate, screenFrameRate, aspectRatio} =
254
+ Config.meetings;
262
255
 
263
256
  let shareConstraints: any = {
264
257
  cursor: MEDIA_TRACK_CONSTRAINT.CURSOR.AWLAYS,
265
- aspectRatio
258
+ aspectRatio,
266
259
  };
267
260
 
268
261
  if (hasCustomConstraints) {
269
262
  shareConstraints = hasSharePreferences.shareConstraints;
270
- }
271
- else if (hasHighFrameRate) {
263
+ } else if (hasHighFrameRate) {
272
264
  shareConstraints = {
273
265
  ...shareConstraints,
274
266
  frameRate: videoShareFrameRate,
275
267
  height: resolution.idealHeight,
276
268
  width: resolution.idealWidth,
277
- ...config.resolution
269
+ ...config.resolution,
278
270
  };
279
- }
280
- else {
271
+ } else {
281
272
  shareConstraints = {
282
273
  ...shareConstraints,
283
274
  frameRate: customShareFrameRate || screenFrameRate,
284
275
  height: customResolution.idealHeight || screenResolution.idealHeight,
285
276
  width: customResolution.idealWidth || screenResolution.idealWidth,
286
- ...config.screenResolution
277
+ ...config.screenResolution,
287
278
  };
288
279
  }
289
280
 
@@ -294,15 +285,14 @@ Media.getDisplayMedia = (
294
285
  // to have higher quality, and for developers to control the values
295
286
  // eventually we may have to add the same functionality to chrome, OR conversely, get to with firefox
296
287
 
297
-
298
288
  if (isBrowser('firefox')) {
299
289
  const mediaConfig: any = {
300
290
  audio: options.sendAudio,
301
- video: options.sendShare
291
+ video: options.sendShare,
302
292
  };
303
293
 
304
-
305
- return navigator.mediaDevices.getDisplayMedia({audio: options.sendAudio, video: mediaConfig})
294
+ return navigator.mediaDevices
295
+ .getDisplayMedia({audio: options.sendAudio, video: mediaConfig})
306
296
  .then((stream) => {
307
297
  if (options.sendShare && stream.getVideoTracks().length > 0) {
308
298
  // Firefox has a bug with the spec where changing in the height and width only happens
@@ -311,7 +301,6 @@ Media.getDisplayMedia = (
311
301
  stream.getVideoTracks()[0].applyConstraints(shareConstraints);
312
302
  }
313
303
 
314
-
315
304
  return stream;
316
305
  });
317
306
  }
@@ -341,30 +330,32 @@ Media.getMedia = (audio: any | boolean, video: any | boolean, config: any) => {
341
330
  audio,
342
331
  // TODO: Remove temporary workaround once Firefox fixes low constraint issues
343
332
  // eslint-disable-next-line no-nested-ternary
344
- video: video ?
345
- isBrowser('firefox') && video.width && video.width.max === 320 ?
346
- {
347
- deviceId: video.deviceId ? video.deviceId : undefined,
348
- width: 320,
349
- height: 180
350
- } :
351
- {
352
- deviceId: video.deviceId ? video.deviceId : undefined,
353
- width: video.width ? video.width : defaultWidth,
354
- height: video.height ? video.height : defaultHeight
355
- } :
356
- false,
357
- fake: process.env.NODE_ENV === 'test' // Special case to get fake media for Firefox browser for testing
333
+ video: video
334
+ ? isBrowser('firefox') && video.width && video.width.max === 320
335
+ ? {
336
+ deviceId: video.deviceId ? video.deviceId : undefined,
337
+ width: 320,
338
+ height: 180,
339
+ frameRate: video.frameRate ? video.frameRate : undefined,
340
+ facingMode: video.facingMode ? video.facingMode : undefined,
341
+ }
342
+ : {
343
+ deviceId: video.deviceId ? video.deviceId : undefined,
344
+ width: video.width ? video.width : defaultWidth,
345
+ height: video.height ? video.height : defaultHeight,
346
+ frameRate: video.frameRate ? video.frameRate : undefined,
347
+ facingMode: video.facingMode ? video.facingMode : undefined,
348
+ }
349
+ : false,
350
+ fake: process.env.NODE_ENV === 'test', // Special case to get fake media for Firefox browser for testing
358
351
  };
359
352
 
360
- return navigator.mediaDevices
361
- .getUserMedia(mediaConfig)
362
- .catch((err) => {
363
- const logPath = 'Media:index#getMedia --> navigator.mediaDevices.getUserMedia';
353
+ return navigator.mediaDevices.getUserMedia(mediaConfig).catch((err) => {
354
+ const logPath = 'Media:index#getMedia --> navigator.mediaDevices.getUserMedia';
364
355
 
365
- LoggerProxy.logger.error(`${logPath} failed - ${err} (${err.constraint})`);
366
- throw err;
367
- });
356
+ LoggerProxy.logger.error(`${logPath} failed - ${err} (${err.constraint})`);
357
+ throw err;
358
+ });
368
359
  };
369
360
 
370
361
  /**
@@ -379,24 +370,24 @@ Media.getMedia = (audio: any | boolean, video: any | boolean, config: any) => {
379
370
  * sendVideo: true/false
380
371
  *}
381
372
  */
382
- Media.getSupportedDevice = ({ sendAudio, sendVideo }: { sendAudio: boolean; sendVideo: boolean }) =>
373
+ Media.getSupportedDevice = ({sendAudio, sendVideo}: {sendAudio: boolean; sendVideo: boolean}) =>
383
374
  Promise.resolve().then(() => {
384
375
  if (!navigator.mediaDevices || navigator.mediaDevices.enumerateDevices === undefined) {
385
376
  return {
386
377
  sendAudio: false,
387
- sendVideo: false
378
+ sendVideo: false,
388
379
  };
389
380
  }
390
381
 
391
382
  return navigator.mediaDevices.enumerateDevices().then((devices) => {
392
383
  const supported = {
393
384
  audio: devices.filter((device) => device.kind === AUDIO_INPUT).length > 0,
394
- video: devices.filter((device) => device.kind === VIDEO_INPUT).length > 0
385
+ video: devices.filter((device) => device.kind === VIDEO_INPUT).length > 0,
395
386
  };
396
387
 
397
388
  return {
398
389
  sendAudio: supported.audio && sendAudio,
399
- sendVideo: supported.video && sendVideo
390
+ sendVideo: supported.video && sendVideo,
400
391
  };
401
392
  });
402
393
  });
@@ -435,44 +426,15 @@ Media.stopTracks = (track: any) => {
435
426
  if (track && track.stop) {
436
427
  try {
437
428
  track.stop();
438
- }
439
- catch (e) {
440
- LoggerProxy.logger.error(`Media:index#stopTracks --> Unable to stop the track with state ${track.readyState}, error: ${e}`);
429
+ } catch (e) {
430
+ LoggerProxy.logger.error(
431
+ `Media:index#stopTracks --> Unable to stop the track with state ${track.readyState}, error: ${e}`
432
+ );
441
433
  }
442
434
  }
443
435
  });
444
436
  };
445
437
 
446
- /**
447
- *
448
- * Stop input stream
449
- * @param {Stream} stream A media stream
450
- * @returns {null}
451
- * @deprecated after v1.89.3
452
- */
453
- Media.stopStream = (stream: any) => {
454
- LoggerProxy.logger.warn('Media:index#stopStream --> [DEPRECATION WARNING]: stopStream has been deprecated after v1.89.3');
455
- if (!stream) {
456
- return Promise.resolve();
457
- }
458
-
459
- /*
460
- * To release local media
461
- * 1) Chrome requires all tracks to be stopped (stream.stop got deprecated)
462
- * 2) Firefox requires the stream to be stopped
463
- */
464
- return Promise.resolve().then(() => {
465
- if (stream.getTracks) {
466
- stream.getTracks().forEach((track) => {
467
- track.stop();
468
- });
469
- }
470
- else if (stream.stop) {
471
- stream.stop();
472
- }
473
- });
474
- };
475
-
476
438
  /**
477
439
  * generates streams for audio video and share
478
440
  * @param {object} mediaSetting parameter
@@ -506,13 +468,21 @@ Media.getUserMedia = (
506
468
  },
507
469
  config: object
508
470
  ) =>
509
- Media.getLocalMedia({
510
- sendAudio: mediaSetting.sendAudio ? audioVideo.audio || mediaSetting.sendAudio : false,
511
- sendVideo: mediaSetting.sendVideo ? audioVideo.video || mediaSetting.sendVideo : false
512
- }, config).then((localStream) => Media.getLocalMedia({
513
- sendShare: mediaSetting.sendShare,
514
- isSharing: mediaSetting.isSharing,
515
- sharePreferences
516
- }, config).then((shareStream) => [localStream, shareStream]));
471
+ Media.getLocalMedia(
472
+ {
473
+ sendAudio: mediaSetting.sendAudio ? audioVideo.audio || mediaSetting.sendAudio : false,
474
+ sendVideo: mediaSetting.sendVideo ? audioVideo.video || mediaSetting.sendVideo : false,
475
+ },
476
+ config
477
+ ).then((localStream) =>
478
+ Media.getLocalMedia(
479
+ {
480
+ sendShare: mediaSetting.sendShare,
481
+ isSharing: mediaSetting.isSharing,
482
+ sharePreferences,
483
+ },
484
+ config
485
+ ).then((shareStream) => [localStream, shareStream])
486
+ );
517
487
 
518
488
  export default Media;
@@ -1,17 +1,15 @@
1
- import {MediaConnection as MC} from '@webex/internal-media-core';
1
+ import {ConnectionState, Event} from '@webex/internal-media-core';
2
2
 
3
- import {
4
- MEETINGS,
5
- PC_BAIL_TIMEOUT,
6
- QUALITY_LEVELS
7
- } from '../constants';
3
+ import {LocalCameraTrack, LocalMicrophoneTrack, LocalDisplayTrack} from '@webex/media-helpers';
4
+
5
+ import {MEETINGS, PC_BAIL_TIMEOUT, QUALITY_LEVELS} from '../constants';
8
6
  import LoggerProxy from '../common/logs/logger-proxy';
9
7
 
10
8
  /**
11
9
  * @class MediaProperties
12
10
  */
13
11
  export default class MediaProperties {
14
- audioTrack: any;
12
+ audioTrack: LocalMicrophoneTrack | null;
15
13
  localQualityLevel: any;
16
14
  mediaDirection: any;
17
15
  mediaSettings: any;
@@ -20,9 +18,9 @@ export default class MediaProperties {
20
18
  remoteQualityLevel: any;
21
19
  remoteShare: any;
22
20
  remoteVideoTrack: any;
23
- shareTrack: any;
21
+ shareTrack: LocalDisplayTrack | null;
24
22
  videoDeviceId: any;
25
- videoTrack: any;
23
+ videoTrack: LocalCameraTrack | null;
26
24
  namespace = MEETINGS;
27
25
 
28
26
  /**
@@ -32,9 +30,9 @@ export default class MediaProperties {
32
30
  constructor(options: any = {}) {
33
31
  this.webrtcMediaConnection = null;
34
32
  this.mediaDirection = options.mediaDirection;
35
- this.videoTrack = options.videoTrack;
36
- this.audioTrack = options.audioTrack;
37
- this.shareTrack = options.shareTrack;
33
+ this.videoTrack = options.videoTrack || null;
34
+ this.audioTrack = options.audioTrack || null;
35
+ this.shareTrack = options.shareTrack || null;
38
36
  this.remoteShare = options.remoteShare;
39
37
  this.remoteAudioTrack = options.remoteAudioTrack;
40
38
  this.remoteVideoTrack = options.remoteVideoTrack;
@@ -64,11 +62,11 @@ export default class MediaProperties {
64
62
  this.webrtcMediaConnection = mediaPeerConnection;
65
63
  }
66
64
 
67
- setLocalVideoTrack(videoTrack) {
65
+ setLocalVideoTrack(videoTrack: LocalCameraTrack | null) {
68
66
  this.videoTrack = videoTrack;
69
67
  }
70
68
 
71
- setLocalAudioTrack(audioTrack) {
69
+ setLocalAudioTrack(audioTrack: LocalMicrophoneTrack | null) {
72
70
  this.audioTrack = audioTrack;
73
71
  }
74
72
 
@@ -76,7 +74,7 @@ export default class MediaProperties {
76
74
  this.localQualityLevel = localQualityLevel;
77
75
  }
78
76
 
79
- setLocalShareTrack(shareTrack) {
77
+ setLocalShareTrack(shareTrack: LocalDisplayTrack | null) {
80
78
  this.shareTrack = shareTrack;
81
79
  }
82
80
 
@@ -137,7 +135,9 @@ export default class MediaProperties {
137
135
  * @returns {void}
138
136
  */
139
137
  unsetRemoteStream() {
140
- LoggerProxy.logger.warn('Media:properties#unsetRemoteStream --> [DEPRECATION WARNING]: unsetRemoteStream has been deprecated after v1.89.3 (use unsetRemoteTracks instead)');
138
+ LoggerProxy.logger.warn(
139
+ 'Media:properties#unsetRemoteStream --> [DEPRECATION WARNING]: unsetRemoteStream has been deprecated after v1.89.3 (use unsetRemoteTracks instead)'
140
+ );
141
141
  // unsets audio and video only
142
142
  this.unsetRemoteMedia();
143
143
  }
@@ -166,7 +166,9 @@ export default class MediaProperties {
166
166
  * @returns {void}
167
167
  */
168
168
  unsetRemoteStreams() {
169
- LoggerProxy.logger.warn('Media:properties#unsetRemoteStreams --> [DEPRECATION WARNING]: unsetRemoteStreams has been deprecated after v1.89.3 (use unsetRemoteTracks instead)');
169
+ LoggerProxy.logger.warn(
170
+ 'Media:properties#unsetRemoteStreams --> [DEPRECATION WARNING]: unsetRemoteStreams has been deprecated after v1.89.3 (use unsetRemoteTracks instead)'
171
+ );
170
172
  this.unsetRemoteStream();
171
173
  this.unsetRemoteShare();
172
174
  }
@@ -191,7 +193,9 @@ export default class MediaProperties {
191
193
  * @returns {void}
192
194
  */
193
195
  unsetMediaStreams() {
194
- LoggerProxy.logger.warn('Media:properties#unsetMediaStreams --> [DEPRECATION WARNING]: unsetMediaStreams has been deprecated after v1.89.3 (use unsetMediaTracks instead)');
196
+ LoggerProxy.logger.warn(
197
+ 'Media:properties#unsetMediaStreams --> [DEPRECATION WARNING]: unsetMediaStreams has been deprecated after v1.89.3 (use unsetMediaTracks instead)'
198
+ );
195
199
  this.unsetLocalVideoTrack();
196
200
  this.unsetRemoteStream();
197
201
  }
@@ -210,34 +214,35 @@ export default class MediaProperties {
210
214
  *
211
215
  * @returns {Promise<void>}
212
216
  */
213
- waitForMediaConnectionConnected() {
214
- const isConnected = () => (
215
- this.webrtcMediaConnection.getConnectionState() === MC.ConnectionState.Connected
216
- );
217
+ waitForMediaConnectionConnected(): Promise<void> {
218
+ const isConnected = () =>
219
+ this.webrtcMediaConnection.getConnectionState() === ConnectionState.Connected;
217
220
 
218
221
  if (isConnected()) {
219
222
  return Promise.resolve();
220
223
  }
221
224
 
222
- return new Promise((resolve, reject) => {
225
+ return new Promise<void>((resolve, reject) => {
223
226
  let timer;
224
227
 
225
228
  const connectionStateListener = () => {
226
- LoggerProxy.logger.log(`Media:properties#waitForMediaConnectionConnected --> connection state: ${this.webrtcMediaConnection.getConnectionState()}`);
229
+ LoggerProxy.logger.log(
230
+ `Media:properties#waitForMediaConnectionConnected --> connection state: ${this.webrtcMediaConnection.getConnectionState()}`
231
+ );
227
232
 
228
233
  if (isConnected()) {
229
234
  clearTimeout(timer);
230
- this.webrtcMediaConnection.off(MC.Event.CONNECTION_STATE_CHANGED, connectionStateListener);
235
+ this.webrtcMediaConnection.off(Event.CONNECTION_STATE_CHANGED, connectionStateListener);
231
236
  resolve();
232
237
  }
233
238
  };
234
239
 
235
240
  timer = setTimeout(() => {
236
- this.webrtcMediaConnection.off(MC.Event.CONNECTION_STATE_CHANGED, connectionStateListener);
241
+ this.webrtcMediaConnection.off(Event.CONNECTION_STATE_CHANGED, connectionStateListener);
237
242
  reject();
238
243
  }, PC_BAIL_TIMEOUT);
239
244
 
240
- this.webrtcMediaConnection.on(MC.Event.CONNECTION_STATE_CHANGED, connectionStateListener);
245
+ this.webrtcMediaConnection.on(Event.CONNECTION_STATE_CHANGED, connectionStateListener);
241
246
  });
242
247
  }
243
248
 
@@ -253,13 +258,12 @@ export default class MediaProperties {
253
258
  const allStatsReports = [];
254
259
 
255
260
  try {
256
- // eslint-disable-next-line no-await-in-loop
257
261
  const statsResult = await this.webrtcMediaConnection.getStats();
258
-
259
262
  statsResult.forEach((report) => allStatsReports.push(report));
260
- }
261
- catch (error) {
262
- LoggerProxy.logger.warn(`Media:properties#getCurrentConnectionType --> getStats() failed: ${error}`);
263
+ } catch (error) {
264
+ LoggerProxy.logger.warn(
265
+ `Media:properties#getCurrentConnectionType --> getStats() failed: ${error}`
266
+ );
263
267
  }
264
268
 
265
269
  const successfulCandidatePairs = allStatsReports.filter(
@@ -270,10 +274,14 @@ export default class MediaProperties {
270
274
 
271
275
  // all of the successful pairs should have the same connection type, so just return the type for the first one
272
276
  successfulCandidatePairs.some((pair) => {
273
- const localCandidate = allStatsReports.find((report) => report.type === 'local-candidate' && report.id === pair.localCandidateId);
277
+ const localCandidate = allStatsReports.find(
278
+ (report) => report.type === 'local-candidate' && report.id === pair.localCandidateId
279
+ );
274
280
 
275
281
  if (localCandidate === undefined) {
276
- LoggerProxy.logger.warn(`Media:properties#getCurrentConnectionType --> failed to find local candidate "${pair.localCandidateId}" in getStats() results`);
282
+ LoggerProxy.logger.warn(
283
+ `Media:properties#getCurrentConnectionType --> failed to find local candidate "${pair.localCandidateId}" in getStats() results`
284
+ );
277
285
 
278
286
  return false;
279
287
  }
@@ -282,8 +290,7 @@ export default class MediaProperties {
282
290
 
283
291
  if (localCandidate.relayProtocol) {
284
292
  connectionType = `TURN-${localCandidate.relayProtocol.toUpperCase()}`;
285
- }
286
- else {
293
+ } else {
287
294
  connectionType = localCandidate.protocol?.toUpperCase(); // it will be UDP or TCP
288
295
  }
289
296