@webex/plugin-meetings 3.0.0-beta.16 → 3.0.0-beta.160

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 (408) hide show
  1. package/README.md +45 -1
  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 +359 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +212 -0
  9. package/dist/breakouts/breakout.js.map +1 -0
  10. package/dist/breakouts/collection.js +23 -0
  11. package/dist/breakouts/collection.js.map +1 -0
  12. package/dist/breakouts/edit-lock-error.js +52 -0
  13. package/dist/breakouts/edit-lock-error.js.map +1 -0
  14. package/dist/breakouts/events.js +43 -0
  15. package/dist/breakouts/events.js.map +1 -0
  16. package/dist/breakouts/index.js +1046 -0
  17. package/dist/breakouts/index.js.map +1 -0
  18. package/dist/breakouts/request.js +78 -0
  19. package/dist/breakouts/request.js.map +1 -0
  20. package/dist/breakouts/utils.js +67 -0
  21. package/dist/breakouts/utils.js.map +1 -0
  22. package/dist/common/errors/webex-errors.js +3 -2
  23. package/dist/common/errors/webex-errors.js.map +1 -1
  24. package/dist/common/logs/logger-proxy.js +1 -1
  25. package/dist/common/logs/logger-proxy.js.map +1 -1
  26. package/dist/config.js +6 -8
  27. package/dist/config.js.map +1 -1
  28. package/dist/constants.js +165 -26
  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 +300 -0
  39. package/dist/controls-options-manager/util.js.map +1 -0
  40. package/dist/index.js +77 -0
  41. package/dist/index.js.map +1 -1
  42. package/dist/locus-info/controlsUtils.js +91 -2
  43. package/dist/locus-info/controlsUtils.js.map +1 -1
  44. package/dist/locus-info/index.js +298 -24
  45. package/dist/locus-info/index.js.map +1 -1
  46. package/dist/locus-info/mediaSharesUtils.js +43 -1
  47. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  48. package/dist/locus-info/parser.js +2 -1
  49. package/dist/locus-info/parser.js.map +1 -1
  50. package/dist/locus-info/selfUtils.js +88 -14
  51. package/dist/locus-info/selfUtils.js.map +1 -1
  52. package/dist/media/index.js +39 -134
  53. package/dist/media/index.js.map +1 -1
  54. package/dist/media/properties.js +19 -97
  55. package/dist/media/properties.js.map +1 -1
  56. package/dist/mediaQualityMetrics/config.js +505 -493
  57. package/dist/mediaQualityMetrics/config.js.map +1 -1
  58. package/dist/meeting/in-meeting-actions.js +79 -1
  59. package/dist/meeting/in-meeting-actions.js.map +1 -1
  60. package/dist/meeting/index.js +2275 -2152
  61. package/dist/meeting/index.js.map +1 -1
  62. package/dist/meeting/locusMediaRequest.js +291 -0
  63. package/dist/meeting/locusMediaRequest.js.map +1 -0
  64. package/dist/meeting/muteState.js +229 -124
  65. package/dist/meeting/muteState.js.map +1 -1
  66. package/dist/meeting/request.js +191 -167
  67. package/dist/meeting/request.js.map +1 -1
  68. package/dist/meeting/request.type.js.map +1 -1
  69. package/dist/meeting/util.js +443 -443
  70. package/dist/meeting/util.js.map +1 -1
  71. package/dist/meeting-info/meeting-info-v2.js +157 -49
  72. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  73. package/dist/meeting-info/utilv2.js +20 -5
  74. package/dist/meeting-info/utilv2.js.map +1 -1
  75. package/dist/meetings/collection.js +22 -0
  76. package/dist/meetings/collection.js.map +1 -1
  77. package/dist/meetings/index.js +365 -73
  78. package/dist/meetings/index.js.map +1 -1
  79. package/dist/meetings/meetings.types.js +7 -0
  80. package/dist/meetings/meetings.types.js.map +1 -0
  81. package/dist/meetings/request.js +16 -12
  82. package/dist/meetings/request.js.map +1 -1
  83. package/dist/meetings/util.js +88 -1
  84. package/dist/meetings/util.js.map +1 -1
  85. package/dist/member/index.js +41 -0
  86. package/dist/member/index.js.map +1 -1
  87. package/dist/member/types.js +15 -0
  88. package/dist/member/types.js.map +1 -0
  89. package/dist/member/util.js +86 -3
  90. package/dist/member/util.js.map +1 -1
  91. package/dist/members/collection.js +10 -0
  92. package/dist/members/collection.js.map +1 -1
  93. package/dist/members/index.js +94 -11
  94. package/dist/members/index.js.map +1 -1
  95. package/dist/members/request.js +109 -39
  96. package/dist/members/request.js.map +1 -1
  97. package/dist/members/types.js +15 -0
  98. package/dist/members/types.js.map +1 -0
  99. package/dist/members/util.js +316 -233
  100. package/dist/members/util.js.map +1 -1
  101. package/dist/metrics/config.js +50 -14
  102. package/dist/metrics/config.js.map +1 -1
  103. package/dist/metrics/constants.js +3 -5
  104. package/dist/metrics/constants.js.map +1 -1
  105. package/dist/metrics/index.js +48 -29
  106. package/dist/metrics/index.js.map +1 -1
  107. package/dist/multistream/mediaRequestManager.js +265 -36
  108. package/dist/multistream/mediaRequestManager.js.map +1 -1
  109. package/dist/multistream/receiveSlot.js +52 -19
  110. package/dist/multistream/receiveSlot.js.map +1 -1
  111. package/dist/multistream/receiveSlotManager.js +53 -33
  112. package/dist/multistream/receiveSlotManager.js.map +1 -1
  113. package/dist/multistream/remoteMedia.js +44 -18
  114. package/dist/multistream/remoteMedia.js.map +1 -1
  115. package/dist/multistream/remoteMediaGroup.js +60 -3
  116. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  117. package/dist/multistream/remoteMediaManager.js +322 -103
  118. package/dist/multistream/remoteMediaManager.js.map +1 -1
  119. package/dist/networkQualityMonitor/index.js +4 -2
  120. package/dist/networkQualityMonitor/index.js.map +1 -1
  121. package/dist/reachability/index.js +117 -60
  122. package/dist/reachability/index.js.map +1 -1
  123. package/dist/reachability/request.js +12 -5
  124. package/dist/reachability/request.js.map +1 -1
  125. package/dist/reactions/constants.js +13 -0
  126. package/dist/reactions/constants.js.map +1 -0
  127. package/dist/reactions/reactions.js +2 -2
  128. package/dist/reactions/reactions.js.map +1 -1
  129. package/dist/reactions/reactions.type.js +18 -18
  130. package/dist/reactions/reactions.type.js.map +1 -1
  131. package/dist/reconnection-manager/index.js +190 -145
  132. package/dist/reconnection-manager/index.js.map +1 -1
  133. package/dist/recording-controller/enums.js +17 -0
  134. package/dist/recording-controller/enums.js.map +1 -0
  135. package/dist/recording-controller/index.js +343 -0
  136. package/dist/recording-controller/index.js.map +1 -0
  137. package/dist/recording-controller/util.js +63 -0
  138. package/dist/recording-controller/util.js.map +1 -0
  139. package/dist/roap/index.js +21 -29
  140. package/dist/roap/index.js.map +1 -1
  141. package/dist/roap/request.js +127 -92
  142. package/dist/roap/request.js.map +1 -1
  143. package/dist/roap/turnDiscovery.js +135 -53
  144. package/dist/roap/turnDiscovery.js.map +1 -1
  145. package/dist/statsAnalyzer/global.js +1 -93
  146. package/dist/statsAnalyzer/global.js.map +1 -1
  147. package/dist/statsAnalyzer/index.js +329 -314
  148. package/dist/statsAnalyzer/index.js.map +1 -1
  149. package/dist/statsAnalyzer/mqaUtil.js +103 -54
  150. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  151. package/dist/types/annotation/annotation.types.d.ts +43 -0
  152. package/dist/types/annotation/constants.d.ts +31 -0
  153. package/dist/types/annotation/index.d.ts +124 -0
  154. package/dist/types/breakouts/breakout.d.ts +8 -0
  155. package/dist/types/breakouts/collection.d.ts +5 -0
  156. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  157. package/dist/types/breakouts/events.d.ts +2 -0
  158. package/dist/types/breakouts/index.d.ts +5 -0
  159. package/dist/types/breakouts/request.d.ts +22 -0
  160. package/dist/types/breakouts/utils.d.ts +15 -0
  161. package/dist/types/common/browser-detection.d.ts +9 -0
  162. package/dist/types/common/collection.d.ts +48 -0
  163. package/dist/types/common/config.d.ts +2 -0
  164. package/dist/types/common/errors/captcha-error.d.ts +15 -0
  165. package/dist/types/common/errors/intent-to-join.d.ts +16 -0
  166. package/dist/types/common/errors/join-meeting.d.ts +17 -0
  167. package/dist/types/common/errors/media.d.ts +15 -0
  168. package/dist/types/common/errors/parameter.d.ts +15 -0
  169. package/dist/types/common/errors/password-error.d.ts +15 -0
  170. package/dist/types/common/errors/permission.d.ts +14 -0
  171. package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
  172. package/dist/types/common/errors/reconnection.d.ts +15 -0
  173. package/dist/types/common/errors/stats.d.ts +15 -0
  174. package/dist/types/common/errors/webex-errors.d.ts +69 -0
  175. package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
  176. package/dist/types/common/events/events-scope.d.ts +17 -0
  177. package/dist/types/common/events/events.d.ts +12 -0
  178. package/dist/types/common/events/trigger-proxy.d.ts +2 -0
  179. package/dist/types/common/events/util.d.ts +2 -0
  180. package/dist/types/common/logs/logger-config.d.ts +2 -0
  181. package/dist/types/common/logs/logger-proxy.d.ts +2 -0
  182. package/dist/types/common/logs/request.d.ts +34 -0
  183. package/dist/types/common/queue.d.ts +32 -0
  184. package/dist/types/config.d.ts +72 -0
  185. package/dist/types/constants.d.ts +978 -0
  186. package/dist/types/controls-options-manager/constants.d.ts +4 -0
  187. package/dist/types/controls-options-manager/enums.d.ts +15 -0
  188. package/dist/types/controls-options-manager/index.d.ts +136 -0
  189. package/dist/types/controls-options-manager/types.d.ts +43 -0
  190. package/dist/types/controls-options-manager/util.d.ts +1 -0
  191. package/dist/types/index.d.ts +7 -0
  192. package/dist/types/locus-info/controlsUtils.d.ts +2 -0
  193. package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
  194. package/dist/types/locus-info/fullState.d.ts +2 -0
  195. package/dist/types/locus-info/hostUtils.d.ts +2 -0
  196. package/dist/types/locus-info/index.d.ts +315 -0
  197. package/dist/types/locus-info/infoUtils.d.ts +2 -0
  198. package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
  199. package/dist/types/locus-info/parser.d.ts +212 -0
  200. package/dist/types/locus-info/selfUtils.d.ts +2 -0
  201. package/dist/types/media/index.d.ts +34 -0
  202. package/dist/types/media/properties.d.ts +86 -0
  203. package/dist/types/media/util.d.ts +2 -0
  204. package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
  205. package/dist/types/meeting/in-meeting-actions.d.ts +149 -0
  206. package/dist/types/meeting/index.d.ts +1516 -0
  207. package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
  208. package/dist/types/meeting/muteState.d.ts +184 -0
  209. package/dist/types/meeting/request.d.ts +270 -0
  210. package/dist/types/meeting/request.type.d.ts +11 -0
  211. package/dist/types/meeting/state.d.ts +9 -0
  212. package/dist/types/meeting/util.d.ts +75 -0
  213. package/dist/types/meeting-info/collection.d.ts +20 -0
  214. package/dist/types/meeting-info/index.d.ts +57 -0
  215. package/dist/types/meeting-info/meeting-info-v2.d.ts +122 -0
  216. package/dist/types/meeting-info/request.d.ts +22 -0
  217. package/dist/types/meeting-info/util.d.ts +2 -0
  218. package/dist/types/meeting-info/utilv2.d.ts +2 -0
  219. package/dist/types/meetings/collection.d.ts +31 -0
  220. package/dist/types/meetings/index.d.ts +364 -0
  221. package/dist/types/meetings/meetings.types.d.ts +4 -0
  222. package/dist/types/meetings/request.d.ts +27 -0
  223. package/dist/types/meetings/util.d.ts +18 -0
  224. package/dist/types/member/index.d.ts +157 -0
  225. package/dist/types/member/types.d.ts +21 -0
  226. package/dist/types/member/util.d.ts +2 -0
  227. package/dist/types/members/collection.d.ts +29 -0
  228. package/dist/types/members/index.d.ts +353 -0
  229. package/dist/types/members/request.d.ts +114 -0
  230. package/dist/types/members/types.d.ts +24 -0
  231. package/dist/types/members/util.d.ts +210 -0
  232. package/dist/types/metrics/config.d.ts +195 -0
  233. package/dist/types/metrics/constants.d.ts +55 -0
  234. package/dist/types/metrics/index.d.ts +169 -0
  235. package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
  236. package/dist/types/multistream/receiveSlot.d.ts +68 -0
  237. package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
  238. package/dist/types/multistream/remoteMedia.d.ts +72 -0
  239. package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
  240. package/dist/types/multistream/remoteMediaManager.d.ts +277 -0
  241. package/dist/types/networkQualityMonitor/index.d.ts +70 -0
  242. package/dist/types/personal-meeting-room/index.d.ts +47 -0
  243. package/dist/types/personal-meeting-room/request.d.ts +14 -0
  244. package/dist/types/personal-meeting-room/util.d.ts +2 -0
  245. package/dist/types/reachability/index.d.ts +152 -0
  246. package/dist/types/reachability/request.d.ts +37 -0
  247. package/dist/types/reactions/constants.d.ts +3 -0
  248. package/dist/types/reactions/reactions.d.ts +4 -0
  249. package/dist/types/reactions/reactions.type.d.ts +52 -0
  250. package/dist/types/reconnection-manager/index.d.ts +126 -0
  251. package/dist/types/recording-controller/enums.d.ts +7 -0
  252. package/dist/types/recording-controller/index.d.ts +193 -0
  253. package/dist/types/recording-controller/util.d.ts +13 -0
  254. package/dist/types/roap/index.d.ts +77 -0
  255. package/dist/types/roap/request.d.ts +36 -0
  256. package/dist/types/roap/turnDiscovery.d.ts +91 -0
  257. package/dist/types/statsAnalyzer/global.d.ts +36 -0
  258. package/dist/types/statsAnalyzer/index.d.ts +200 -0
  259. package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
  260. package/dist/types/transcription/index.d.ts +64 -0
  261. package/package.json +28 -21
  262. package/src/annotation/annotation.types.ts +52 -0
  263. package/src/annotation/constants.ts +36 -0
  264. package/src/annotation/index.ts +343 -0
  265. package/src/breakouts/README.md +220 -0
  266. package/src/breakouts/breakout.ts +180 -0
  267. package/src/breakouts/collection.ts +19 -0
  268. package/src/breakouts/edit-lock-error.ts +25 -0
  269. package/src/breakouts/events.ts +37 -0
  270. package/src/breakouts/index.ts +921 -0
  271. package/src/breakouts/request.ts +55 -0
  272. package/src/breakouts/utils.ts +57 -0
  273. package/src/common/errors/webex-errors.ts +6 -2
  274. package/src/common/logs/logger-proxy.ts +1 -1
  275. package/src/config.ts +5 -7
  276. package/src/constants.ts +155 -20
  277. package/src/controls-options-manager/constants.ts +5 -0
  278. package/src/controls-options-manager/enums.ts +18 -0
  279. package/src/controls-options-manager/index.ts +278 -0
  280. package/src/controls-options-manager/types.ts +59 -0
  281. package/src/controls-options-manager/util.ts +286 -0
  282. package/src/index.ts +34 -0
  283. package/src/locus-info/controlsUtils.ts +108 -0
  284. package/src/locus-info/index.ts +310 -21
  285. package/src/locus-info/mediaSharesUtils.ts +48 -0
  286. package/src/locus-info/parser.ts +2 -1
  287. package/src/locus-info/selfUtils.ts +80 -2
  288. package/src/media/index.ts +70 -142
  289. package/src/media/properties.ts +41 -104
  290. package/src/mediaQualityMetrics/config.ts +379 -377
  291. package/src/meeting/in-meeting-actions.ts +156 -0
  292. package/src/meeting/index.ts +1744 -1767
  293. package/src/meeting/locusMediaRequest.ts +309 -0
  294. package/src/meeting/muteState.ts +228 -132
  295. package/src/meeting/request.ts +100 -91
  296. package/src/meeting/request.type.ts +2 -0
  297. package/src/meeting/util.ts +421 -421
  298. package/src/meeting-info/meeting-info-v2.ts +134 -13
  299. package/src/meeting-info/utilv2.ts +13 -3
  300. package/src/meetings/collection.ts +20 -0
  301. package/src/meetings/index.ts +385 -83
  302. package/src/meetings/meetings.types.ts +12 -0
  303. package/src/meetings/request.ts +3 -1
  304. package/src/meetings/util.ts +103 -4
  305. package/src/member/index.ts +40 -0
  306. package/src/member/types.ts +24 -0
  307. package/src/member/util.ts +81 -1
  308. package/src/members/collection.ts +8 -0
  309. package/src/members/index.ts +108 -6
  310. package/src/members/request.ts +98 -17
  311. package/src/members/types.ts +28 -0
  312. package/src/members/util.ts +319 -240
  313. package/src/metrics/config.ts +49 -10
  314. package/src/metrics/constants.ts +2 -4
  315. package/src/metrics/index.ts +43 -27
  316. package/src/multistream/mediaRequestManager.ts +337 -63
  317. package/src/multistream/receiveSlot.ts +68 -26
  318. package/src/multistream/receiveSlotManager.ts +61 -38
  319. package/src/multistream/remoteMedia.ts +29 -3
  320. package/src/multistream/remoteMediaGroup.ts +61 -2
  321. package/src/multistream/remoteMediaManager.ts +260 -66
  322. package/src/networkQualityMonitor/index.ts +6 -6
  323. package/src/reachability/index.ts +75 -25
  324. package/src/reachability/request.ts +10 -5
  325. package/src/reactions/constants.ts +4 -0
  326. package/src/reactions/reactions.ts +4 -4
  327. package/src/reactions/reactions.type.ts +28 -3
  328. package/src/reconnection-manager/index.ts +53 -32
  329. package/src/recording-controller/enums.ts +8 -0
  330. package/src/recording-controller/index.ts +315 -0
  331. package/src/recording-controller/util.ts +58 -0
  332. package/src/roap/index.ts +21 -30
  333. package/src/roap/request.ts +51 -52
  334. package/src/roap/turnDiscovery.ts +51 -27
  335. package/src/statsAnalyzer/global.ts +1 -94
  336. package/src/statsAnalyzer/index.ts +380 -390
  337. package/src/statsAnalyzer/mqaUtil.ts +106 -99
  338. package/test/integration/spec/converged-space-meetings.js +233 -0
  339. package/test/integration/spec/journey.js +331 -254
  340. package/test/integration/spec/space-meeting.js +77 -4
  341. package/test/unit/spec/annotation/index.ts +436 -0
  342. package/test/unit/spec/breakouts/breakout.ts +233 -0
  343. package/test/unit/spec/breakouts/collection.ts +15 -0
  344. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  345. package/test/unit/spec/breakouts/events.ts +77 -0
  346. package/test/unit/spec/breakouts/index.ts +1790 -0
  347. package/test/unit/spec/breakouts/request.ts +104 -0
  348. package/test/unit/spec/breakouts/utils.js +72 -0
  349. package/test/unit/spec/controls-options-manager/index.js +287 -0
  350. package/test/unit/spec/controls-options-manager/util.js +518 -0
  351. package/test/unit/spec/fixture/locus.js +1 -0
  352. package/test/unit/spec/locus-info/controlsUtils.js +303 -30
  353. package/test/unit/spec/locus-info/index.js +616 -4
  354. package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
  355. package/test/unit/spec/locus-info/selfConstant.js +38 -0
  356. package/test/unit/spec/locus-info/selfUtils.js +249 -0
  357. package/test/unit/spec/media/index.ts +118 -22
  358. package/test/unit/spec/media/properties.ts +9 -9
  359. package/test/unit/spec/meeting/in-meeting-actions.ts +76 -0
  360. package/test/unit/spec/meeting/index.js +2496 -1375
  361. package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
  362. package/test/unit/spec/meeting/muteState.js +370 -208
  363. package/test/unit/spec/meeting/request.js +354 -42
  364. package/test/unit/spec/meeting/utils.js +268 -156
  365. package/test/unit/spec/meeting-info/meetinginfov2.js +383 -5
  366. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  367. package/test/unit/spec/meetings/collection.js +14 -0
  368. package/test/unit/spec/meetings/index.js +866 -120
  369. package/test/unit/spec/meetings/utils.js +206 -2
  370. package/test/unit/spec/member/index.js +24 -0
  371. package/test/unit/spec/member/util.js +384 -32
  372. package/test/unit/spec/members/index.js +320 -1
  373. package/test/unit/spec/members/request.js +206 -27
  374. package/test/unit/spec/members/utils.js +184 -0
  375. package/test/unit/spec/metrics/index.js +98 -0
  376. package/test/unit/spec/multistream/mediaRequestManager.ts +1012 -109
  377. package/test/unit/spec/multistream/receiveSlot.ts +77 -18
  378. package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
  379. package/test/unit/spec/multistream/remoteMedia.ts +32 -2
  380. package/test/unit/spec/multistream/remoteMediaGroup.ts +271 -5
  381. package/test/unit/spec/multistream/remoteMediaManager.ts +672 -65
  382. package/test/unit/spec/networkQualityMonitor/index.js +4 -4
  383. package/test/unit/spec/reachability/index.ts +176 -25
  384. package/test/unit/spec/reachability/request.js +66 -0
  385. package/test/unit/spec/reconnection-manager/index.js +46 -13
  386. package/test/unit/spec/recording-controller/index.js +231 -0
  387. package/test/unit/spec/recording-controller/util.js +102 -0
  388. package/test/unit/spec/roap/index.ts +21 -51
  389. package/test/unit/spec/roap/request.ts +187 -0
  390. package/test/unit/spec/roap/turnDiscovery.ts +73 -34
  391. package/test/unit/spec/stats-analyzer/index.js +94 -43
  392. package/test/utils/constants.js +9 -0
  393. package/test/utils/integrationTestUtils.js +46 -0
  394. package/test/utils/testUtils.js +0 -45
  395. package/test/utils/webex-config.js +4 -0
  396. package/test/utils/webex-test-users.js +7 -3
  397. package/tsconfig.json +6 -0
  398. package/dist/media/internal-media-core-wrapper.js +0 -18
  399. package/dist/media/internal-media-core-wrapper.js.map +0 -1
  400. package/dist/meeting/effectsState.js +0 -262
  401. package/dist/meeting/effectsState.js.map +0 -1
  402. package/dist/multistream/multistreamMedia.js +0 -106
  403. package/dist/multistream/multistreamMedia.js.map +0 -1
  404. package/src/index.js +0 -15
  405. package/src/media/internal-media-core-wrapper.ts +0 -9
  406. package/src/meeting/effectsState.ts +0 -211
  407. package/src/multistream/multistreamMedia.ts +0 -93
  408. package/test/unit/spec/meeting/effectsState.js +0 -281
@@ -13,6 +13,9 @@ MediaSharesUtils.parse = (mediaShares: object) => {
13
13
  content: {
14
14
  beneficiaryId: MediaSharesUtils.getContentBeneficiaryId(mediaShares),
15
15
  disposition: MediaSharesUtils.getContentDisposition(mediaShares),
16
+ annotation: MediaSharesUtils.getContentAnnotation(mediaShares),
17
+ url: MediaSharesUtils.getContentUrl(mediaShares),
18
+ shareInstanceId: MediaSharesUtils.getShareInstanceId(mediaShares),
16
19
  },
17
20
  whiteboard: {
18
21
  beneficiaryId: MediaSharesUtils.getWhiteboardBeneficiaryId(mediaShares),
@@ -140,6 +143,51 @@ MediaSharesUtils.getContentBeneficiaryId = (mediaShares: object) => {
140
143
  return contentFloor.beneficiary.id;
141
144
  };
142
145
 
146
+ /**
147
+ * get live annotation is sharing from media shares (content)
148
+ * @param {Object} mediaShares
149
+ * @returns {Object}
150
+ */
151
+ MediaSharesUtils.getContentAnnotation = (mediaShares: object) => {
152
+ const extractContent = MediaSharesUtils.extractContent(mediaShares);
153
+
154
+ if (!extractContent || !extractContent.annotation) {
155
+ return undefined;
156
+ }
157
+
158
+ return extractContent.annotation;
159
+ };
160
+
161
+ /**
162
+ * get url is sharing from media shares (content)
163
+ * @param {Object} mediaShares
164
+ * @returns {Object}
165
+ */
166
+ MediaSharesUtils.getContentUrl = (mediaShares: object) => {
167
+ const extractContent = MediaSharesUtils.extractContent(mediaShares);
168
+
169
+ if (!extractContent || !extractContent.url) {
170
+ return undefined;
171
+ }
172
+
173
+ return extractContent.url;
174
+ };
175
+
176
+ /**
177
+ * get shareInstanceId is sharing from media shares (content)
178
+ * @param {Object} mediaShares
179
+ * @returns {Object}
180
+ */
181
+ MediaSharesUtils.getShareInstanceId = (mediaShares: object) => {
182
+ const extractContent = MediaSharesUtils.extractContent(mediaShares);
183
+
184
+ if (!extractContent || !extractContent.floor || !extractContent.floor.shareInstanceId) {
185
+ return undefined;
186
+ }
187
+
188
+ return extractContent.floor.shareInstanceId;
189
+ };
190
+
143
191
  /**
144
192
  * get who is sharing from media shares (whiteboard)
145
193
  * @param {Object} mediaShares
@@ -397,6 +397,7 @@ export default class Parser {
397
397
  const {isLoci} = Parser;
398
398
  // @ts-ignore
399
399
  const setStatus = (status) => {
400
+ // @ts-ignore
400
401
  this.status = status;
401
402
  };
402
403
 
@@ -477,7 +478,7 @@ export default class Parser {
477
478
  * @param {Types~Locus} locus Locus delta
478
479
  * @returns {undefined}
479
480
  */
480
- // eslint-disable-next-line no-unused-vars
481
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
481
482
  onDeltaAction(action: string, locus) {}
482
483
 
483
484
  /**
@@ -1,5 +1,6 @@
1
1
  /* eslint-disable default-param-last */
2
2
 
3
+ import {isEqual} from 'lodash';
3
4
  import {
4
5
  _IDLE_,
5
6
  _JOINED_,
@@ -31,9 +32,11 @@ SelfUtils.parse = (self: any, deviceId: string) => {
31
32
  const pstnDevices = self.devices.filter((device) => PSTN_DEVICE_TYPE === device.deviceType);
32
33
 
33
34
  return {
35
+ remoteVideoMuted: SelfUtils.getRemoteVideoMuted(self),
34
36
  remoteMuted: SelfUtils.getRemoteMuted(self),
35
37
  unmuteAllowed: SelfUtils.getUnmuteAllowed(self),
36
38
  localAudioUnmuteRequested: SelfUtils.getLocalAudioUnmuteRequested(self),
39
+ localAudioUnmuteRequestedTimeStamp: SelfUtils.getLocalAudioUnmuteRequestedTimeStamp(self),
37
40
  localAudioUnmuteRequired: SelfUtils.getLocalAudioUnmuteRequired(self),
38
41
  lastModified: SelfUtils.getLastModified(self),
39
42
  modifiedBy: SelfUtils.getModifiedBy(self),
@@ -60,12 +63,17 @@ SelfUtils.parse = (self: any, deviceId: string) => {
60
63
  layout: SelfUtils.getLayout(self),
61
64
  canNotViewTheParticipantList: SelfUtils.canNotViewTheParticipantList(self),
62
65
  isSharingBlocked: SelfUtils.isSharingBlocked(self),
66
+ breakoutSessions: SelfUtils.getBreakoutSessions(self),
67
+ breakout: SelfUtils.getBreakout(self),
63
68
  };
64
69
  }
65
70
 
66
71
  return null;
67
72
  };
68
73
 
74
+ SelfUtils.getBreakoutSessions = (self) => self?.controls?.breakout?.sessions;
75
+ SelfUtils.getBreakout = (self) => self?.controls?.breakout;
76
+
69
77
  SelfUtils.getLayout = (self) =>
70
78
  Array.isArray(self?.controls?.layouts) ? self.controls.layouts[0].type : undefined;
71
79
 
@@ -89,6 +97,7 @@ SelfUtils.getSelves = (oldSelf, newSelf, deviceId) => {
89
97
 
90
98
  updates.isUserUnadmitted = SelfUtils.isUserUnadmitted(current);
91
99
  updates.isUserAdmitted = SelfUtils.isUserAdmitted(previous, current);
100
+ updates.isVideoMutedByOthersChanged = SelfUtils.videoMutedByOthersChanged(previous, current);
92
101
  updates.isMutedByOthersChanged = SelfUtils.mutedByOthersChanged(previous, current);
93
102
  updates.localAudioUnmuteRequestedByServer = SelfUtils.localAudioUnmuteRequestedByServer(
94
103
  previous,
@@ -99,6 +108,7 @@ SelfUtils.getSelves = (oldSelf, newSelf, deviceId) => {
99
108
  current
100
109
  );
101
110
  updates.moderatorChanged = SelfUtils.moderatorChanged(previous, current);
111
+ updates.isRolesChanged = SelfUtils.isRolesChanged(previous, current);
102
112
  updates.isMediaInactiveOrReleased = SelfUtils.wasMediaInactiveOrReleased(previous, current);
103
113
  updates.isUserObserving = SelfUtils.isDeviceObserving(previous, current);
104
114
  updates.layoutChanged = SelfUtils.layoutChanged(previous, current);
@@ -114,6 +124,7 @@ SelfUtils.getSelves = (oldSelf, newSelf, deviceId) => {
114
124
  updates.canNotViewTheParticipantListChanged =
115
125
  previous?.canNotViewTheParticipantList !== current.canNotViewTheParticipantList;
116
126
  updates.isSharingBlockedChanged = previous?.isSharingBlocked !== current.isSharingBlocked;
127
+ updates.breakoutsChanged = SelfUtils.breakoutsChanged(previous, current);
117
128
 
118
129
  return {
119
130
  previous,
@@ -134,11 +145,14 @@ SelfUtils.isJoined = (self: any) => self?.state === _JOINED_;
134
145
  *
135
146
  * @param {Self} previous - Previous self state
136
147
  * @param {Self} current - Current self state [per event]
137
- * @returns {boolean} - If the MEeting Layout Controls Layout has changed.
148
+ * @returns {boolean} - If the Meeting Layout Controls Layout has changed.
138
149
  */
139
150
  SelfUtils.layoutChanged = (previous: any, current: any) =>
140
151
  current?.layout && previous?.layout !== current?.layout;
141
152
 
153
+ SelfUtils.breakoutsChanged = (previous, current) =>
154
+ !isEqual(previous?.breakoutSessions, current?.breakoutSessions) && !!current?.breakout;
155
+
142
156
  SelfUtils.isMediaInactive = (previous, current) => {
143
157
  if (
144
158
  previous &&
@@ -228,6 +242,19 @@ SelfUtils.getSelfIdentity = (self: any) => {
228
242
  return self.person.id;
229
243
  };
230
244
 
245
+ /**
246
+ * get the "remote video mute" property from the self object
247
+ * @param {Object} self
248
+ * @returns {Boolean}
249
+ */
250
+ SelfUtils.getRemoteVideoMuted = (self: any) => {
251
+ if (!self || !self.controls || !self.controls.video) {
252
+ return null;
253
+ }
254
+
255
+ return self.controls.video.muted;
256
+ };
257
+
231
258
  /**
232
259
  * get the "remote mute" property from the self object
233
260
  * @param {Object} self
@@ -243,6 +270,10 @@ SelfUtils.getRemoteMuted = (self: any) => {
243
270
 
244
271
  SelfUtils.getLocalAudioUnmuteRequested = (self) => !!self?.controls?.audio?.requestedToUnmute;
245
272
 
273
+ // requestedToUnmute timestamp
274
+ SelfUtils.getLocalAudioUnmuteRequestedTimeStamp = (self) =>
275
+ Date.parse(self?.controls?.audio?.lastModifiedRequestedToUnmute) || 0;
276
+
246
277
  SelfUtils.getUnmuteAllowed = (self) => {
247
278
  if (!self || !self.controls || !self.controls.audio) {
248
279
  return null;
@@ -267,6 +298,7 @@ SelfUtils.getStatus = (status) => ({
267
298
  SelfUtils.wasMediaInactiveOrReleased = (oldSelf: any = {}, changedSelf: any) =>
268
299
  oldSelf.joinedWith &&
269
300
  oldSelf.joinedWith.state === _JOINED_ &&
301
+ changedSelf.joinedWith &&
270
302
  changedSelf.joinedWith.state === _LEFT_ &&
271
303
  (changedSelf.joinedWith.reason === MEETING_END_REASON.INACTIVE ||
272
304
  changedSelf.joinedWith.reason === MEETING_END_REASON.MEDIA_RELEASED);
@@ -311,6 +343,20 @@ SelfUtils.moderatorChanged = (oldSelf, changedSelf) => {
311
343
  return oldSelf.moderator !== changedSelf.moderator;
312
344
  };
313
345
 
346
+ /**
347
+ * determine whether the roles of self is changed or not
348
+ * @param {Object} oldSelf
349
+ * @param {Object} changedSelf
350
+ * @returns {Boolean}
351
+ */
352
+ SelfUtils.isRolesChanged = (oldSelf, changedSelf) => {
353
+ if (!changedSelf) {
354
+ // no new self means no change
355
+ return false;
356
+ }
357
+
358
+ return !isEqual(oldSelf?.roles, changedSelf?.roles);
359
+ };
314
360
  /**
315
361
  * @param {Object} oldSelf
316
362
  * @param {Object} changedSelf
@@ -343,6 +389,25 @@ SelfUtils.isUserAdmitted = (oldSelf: object, changedSelf: object) => {
343
389
  return SelfUtils.isLocusUserUnadmitted(oldSelf) && SelfUtils.isLocusUserAdmitted(changedSelf);
344
390
  };
345
391
 
392
+ SelfUtils.videoMutedByOthersChanged = (oldSelf, changedSelf) => {
393
+ if (!changedSelf) {
394
+ throw new ParameterError(
395
+ 'New self must be defined to determine if self was video muted by others.'
396
+ );
397
+ }
398
+
399
+ if (!oldSelf || oldSelf.remoteVideoMuted === null) {
400
+ if (changedSelf.remoteVideoMuted) {
401
+ return true; // this happens when host disables "Allow start video"
402
+ }
403
+
404
+ // we don't want to be sending the 'meeting:self:videoUnmutedByOthers' notification on meeting join
405
+ return false;
406
+ }
407
+
408
+ return oldSelf.remoteVideoMuted !== changedSelf.remoteVideoMuted;
409
+ };
410
+
346
411
  SelfUtils.mutedByOthersChanged = (oldSelf, changedSelf) => {
347
412
  if (!changedSelf) {
348
413
  throw new ParameterError('New self must be defined to determine if self was muted by others.');
@@ -371,7 +436,10 @@ SelfUtils.localAudioUnmuteRequestedByServer = (oldSelf: any = {}, changedSelf: a
371
436
  );
372
437
  }
373
438
 
374
- return changedSelf.localAudioUnmuteRequested && !oldSelf.localAudioUnmuteRequested;
439
+ return (
440
+ changedSelf.localAudioUnmuteRequested &&
441
+ changedSelf.localAudioUnmuteRequestedTimeStamp > oldSelf.localAudioUnmuteRequestedTimeStamp
442
+ );
375
443
  };
376
444
 
377
445
  SelfUtils.localAudioUnmuteRequiredByServer = (oldSelf: any = {}, changedSelf: any) => {
@@ -424,4 +492,14 @@ SelfUtils.getMediaStatus = (mediaSessions = []) => {
424
492
  return mediaStatus;
425
493
  };
426
494
 
495
+ SelfUtils.getReplacedBreakoutMoveId = (self: any, deviceId: string) => {
496
+ if (self && Array.isArray(self.devices)) {
497
+ const joinedDevice = self.devices.find((device) => deviceId === device.url);
498
+ if (Array.isArray(joinedDevice?.replaces)) {
499
+ return joinedDevice.replaces[0]?.breakoutMoveId;
500
+ }
501
+ }
502
+
503
+ return null;
504
+ };
427
505
  export default SelfUtils;
@@ -3,17 +3,22 @@
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 {AUDIO_INPUT, VIDEO_INPUT, MEDIA_TRACK_CONSTRAINT} from '../constants';
9
+ import {MEDIA_TRACK_CONSTRAINT} from '../constants';
8
10
  import Config from '../config';
9
11
  import StaticConfig from '../common/config';
10
- import MediaError from '../common/errors/media';
11
12
  import BrowserDetection from '../common/browser-detection';
12
13
 
13
- import {RoapMediaConnection, MultistreamRoapMediaConnection} from './internal-media-core-wrapper';
14
-
15
14
  const {isBrowser} = BrowserDetection();
16
15
 
16
+ type MultistreamConnectionConfig = ConstructorParameters<typeof MultistreamRoapMediaConnection>[0];
17
+
18
+ export type BundlePolicy = ConstructorParameters<
19
+ typeof MultistreamRoapMediaConnection
20
+ >[0]['bundlePolicy'];
21
+
17
22
  /**
18
23
  * MediaDirection
19
24
  * @typedef {Object} MediaDirection
@@ -44,45 +49,6 @@ const {isBrowser} = BrowserDetection();
44
49
  */
45
50
  const Media: any = {};
46
51
 
47
- /**
48
- * @param {boolean} enabled
49
- * @param {MediaStreamTrack} track
50
- * @returns {Boolean}
51
- * @public
52
- */
53
- Media.setLocalTrack = (enabled: boolean, track: MediaStreamTrack) => {
54
- if (track) {
55
- track.enabled = enabled;
56
-
57
- return true;
58
- }
59
-
60
- return false;
61
- };
62
-
63
- /**
64
- * format the media array for send
65
- * @param {String} mediaId
66
- * @param {Boolean} audioMuted
67
- * @param {Boolean} videoMuted
68
- * @returns {Array} medias
69
- */
70
- Media.generateLocalMedias = (mediaId: string, audioMuted: boolean, videoMuted: boolean) => {
71
- if (mediaId) {
72
- return [
73
- {
74
- localSdp: JSON.stringify({
75
- audioMuted,
76
- videoMuted,
77
- }),
78
- mediaId,
79
- },
80
- ];
81
- }
82
-
83
- return [];
84
- };
85
-
86
52
  /**
87
53
  * make a browser call to get the media
88
54
  * @param {SendOptions} options
@@ -110,33 +76,53 @@ Media.getLocalMedia = (options: any, config: object) => {
110
76
  return Promise.resolve(undefined);
111
77
  };
112
78
 
79
+ Media.getDirection = (forceSendRecv: boolean, receive: boolean, send: boolean) => {
80
+ if (!receive && !send) {
81
+ return 'inactive';
82
+ }
83
+
84
+ if (forceSendRecv || (receive && send)) {
85
+ return 'sendrecv';
86
+ }
87
+
88
+ if (receive) {
89
+ return 'recvonly';
90
+ }
91
+
92
+ return 'sendonly';
93
+ };
94
+
113
95
  /**
114
96
  * creates a webrtc media connection with provided tracks and mediaDirection configuration
115
97
  *
116
98
  * @param {boolean} isMultistream
117
99
  * @param {string} debugId string useful for debugging (will appear in media connection logs)
118
100
  * @param {Object} options
119
- * @param {Object} [options.mediaProperties] only applicable to non-multistream connections, contains mediaDirection and local tracks:
101
+ * @param {Object} [options.mediaProperties] contains mediaDirection and local tracks:
120
102
  * audioTrack, videoTrack and shareTrack
121
103
  * @param {string} [options.remoteQualityLevel] LOW|MEDIUM|HIGH applicable only to non-multistream connections
122
104
  * @param {boolean} [options.enableRtx] applicable only to non-multistream connections
123
105
  * @param {boolean} [options.enableExtmap] applicable only to non-multistream connections
124
106
  * @param {Object} [options.turnServerInfo]
125
- * @returns {RoapMediaConnection}
107
+ * @param {BundlePolicy} [options.bundlePolicy]
108
+ * @returns {RoapMediaConnection | MultistreamRoapMediaConnection}
126
109
  */
127
110
  Media.createMediaConnection = (
128
111
  isMultistream: boolean,
129
112
  debugId: string,
130
113
  options: {
131
- mediaProperties?: {
114
+ mediaProperties: {
132
115
  mediaDirection?: {
133
116
  receiveAudio: boolean;
134
117
  receiveVideo: boolean;
135
118
  receiveShare: boolean;
119
+ sendAudio: boolean;
120
+ sendVideo: boolean;
121
+ sendShare: boolean;
136
122
  };
137
- audioTrack?: MediaStreamTrack;
138
- videoTrack?: MediaStreamTrack;
139
- shareTrack?: MediaStreamTrack;
123
+ audioTrack?: LocalMicrophoneTrack;
124
+ videoTrack?: LocalCameraTrack;
125
+ shareTrack?: LocalDisplayTrack;
140
126
  };
141
127
  remoteQualityLevel?: 'LOW' | 'MEDIUM' | 'HIGH';
142
128
  enableRtx?: boolean;
@@ -146,9 +132,17 @@ Media.createMediaConnection = (
146
132
  username: string;
147
133
  password: string;
148
134
  };
135
+ bundlePolicy?: BundlePolicy;
149
136
  }
150
137
  ) => {
151
- const {mediaProperties, remoteQualityLevel, enableRtx, enableExtmap, turnServerInfo} = options;
138
+ const {
139
+ mediaProperties,
140
+ remoteQualityLevel,
141
+ enableRtx,
142
+ enableExtmap,
143
+ turnServerInfo,
144
+ bundlePolicy,
145
+ } = options;
152
146
 
153
147
  const iceServers = [];
154
148
 
@@ -161,12 +155,19 @@ Media.createMediaConnection = (
161
155
  }
162
156
 
163
157
  if (isMultistream) {
164
- return new MultistreamRoapMediaConnection(
165
- {
166
- iceServers,
167
- },
168
- debugId
169
- );
158
+ const config: MultistreamConnectionConfig = {
159
+ iceServers,
160
+ enableMainAudio:
161
+ mediaProperties.mediaDirection?.sendAudio || mediaProperties.mediaDirection?.receiveAudio,
162
+ enableMainVideo:
163
+ mediaProperties.mediaDirection?.sendVideo || mediaProperties.mediaDirection?.receiveVideo,
164
+ };
165
+
166
+ if (bundlePolicy) {
167
+ config.bundlePolicy = bundlePolicy;
168
+ }
169
+
170
+ return new MultistreamRoapMediaConnection(config, debugId);
170
171
  }
171
172
 
172
173
  if (!mediaProperties) {
@@ -194,17 +195,21 @@ Media.createMediaConnection = (
194
195
  },
195
196
  },
196
197
  {
197
- send: {
198
- audio: audioTrack,
199
- video: videoTrack,
200
- screenShareVideo: shareTrack,
198
+ localTracks: {
199
+ audio: audioTrack?.underlyingTrack,
200
+ video: videoTrack?.underlyingTrack,
201
+ screenShareVideo: shareTrack?.underlyingTrack,
201
202
  },
202
- receive: {
203
- audio: mediaDirection.receiveAudio,
204
- video: mediaDirection.receiveVideo,
205
- screenShareVideo: mediaDirection.receiveShare,
206
- remoteQualityLevel,
203
+ direction: {
204
+ audio: Media.getDirection(true, mediaDirection.receiveAudio, mediaDirection.sendAudio),
205
+ video: Media.getDirection(true, mediaDirection.receiveVideo, mediaDirection.sendVideo),
206
+ screenShareVideo: Media.getDirection(
207
+ false,
208
+ mediaDirection.receiveShare,
209
+ mediaDirection.sendShare
210
+ ),
207
211
  },
212
+ remoteQualityLevel,
208
213
  },
209
214
  debugId
210
215
  );
@@ -349,52 +354,6 @@ Media.getMedia = (audio: any | boolean, video: any | boolean, config: any) => {
349
354
  });
350
355
  };
351
356
 
352
- /**
353
- * Checks if the machine has at least one audio or video device (Dont use this for screen share)
354
- * @param {object} [options]
355
- * {
356
- * sendAudio: true/false,
357
- * sendVideo: true/false
358
- * }
359
- * @returns {Object} {
360
- * sendAudio: true/false,
361
- * sendVideo: true/false
362
- *}
363
- */
364
- Media.getSupportedDevice = ({sendAudio, sendVideo}: {sendAudio: boolean; sendVideo: boolean}) =>
365
- Promise.resolve().then(() => {
366
- if (!navigator.mediaDevices || navigator.mediaDevices.enumerateDevices === undefined) {
367
- return {
368
- sendAudio: false,
369
- sendVideo: false,
370
- };
371
- }
372
-
373
- return navigator.mediaDevices.enumerateDevices().then((devices) => {
374
- const supported = {
375
- audio: devices.filter((device) => device.kind === AUDIO_INPUT).length > 0,
376
- video: devices.filter((device) => device.kind === VIDEO_INPUT).length > 0,
377
- };
378
-
379
- return {
380
- sendAudio: supported.audio && sendAudio,
381
- sendVideo: supported.video && sendVideo,
382
- };
383
- });
384
- });
385
-
386
- /**
387
- * proxy to browser navigator.mediaDevices.enumerateDevices()
388
- * @returns {Promise}
389
- */
390
- Media.getDevices = () => {
391
- if (navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {
392
- return navigator.mediaDevices.enumerateDevices();
393
- }
394
-
395
- return Promise.reject(new MediaError('enumerateDevices not supported.'));
396
- };
397
-
398
357
  /**
399
358
  *
400
359
  * Toggle a specific stream
@@ -426,37 +385,6 @@ Media.stopTracks = (track: any) => {
426
385
  });
427
386
  };
428
387
 
429
- /**
430
- *
431
- * Stop input stream
432
- * @param {Stream} stream A media stream
433
- * @returns {null}
434
- * @deprecated after v1.89.3
435
- */
436
- Media.stopStream = (stream: any) => {
437
- LoggerProxy.logger.warn(
438
- 'Media:index#stopStream --> [DEPRECATION WARNING]: stopStream has been deprecated after v1.89.3'
439
- );
440
- if (!stream) {
441
- return Promise.resolve();
442
- }
443
-
444
- /*
445
- * To release local media
446
- * 1) Chrome requires all tracks to be stopped (stream.stop got deprecated)
447
- * 2) Firefox requires the stream to be stopped
448
- */
449
- return Promise.resolve().then(() => {
450
- if (stream.getTracks) {
451
- stream.getTracks().forEach((track) => {
452
- track.stop();
453
- });
454
- } else if (stream.stop) {
455
- stream.stop();
456
- }
457
- });
458
- };
459
-
460
388
  /**
461
389
  * generates streams for audio video and share
462
390
  * @param {object} mediaSetting parameter