@webex/plugin-meetings 3.0.0-beta.1 → 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 (548) 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 +10 -24
  30. package/dist/common/errors/captcha-error.js.map +1 -1
  31. package/dist/common/errors/intent-to-join.js +11 -24
  32. package/dist/common/errors/intent-to-join.js.map +1 -1
  33. package/dist/common/errors/join-meeting.js +12 -25
  34. package/dist/common/errors/join-meeting.js.map +1 -1
  35. package/dist/common/errors/media.js +10 -24
  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 +10 -24
  40. package/dist/common/errors/password-error.js.map +1 -1
  41. package/dist/common/errors/permission.js +9 -23
  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 +10 -24
  46. package/dist/common/errors/reconnection.js.map +1 -1
  47. package/dist/common/errors/stats.js +10 -24
  48. package/dist/common/errors/stats.js.map +1 -1
  49. package/dist/common/errors/webex-errors.js +10 -69
  50. package/dist/common/errors/webex-errors.js.map +1 -1
  51. package/dist/common/errors/webex-meetings-error.js +5 -25
  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 +37 -60
  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 +7 -6
  70. package/dist/config.js.map +1 -1
  71. package/dist/constants.js +184 -122
  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 +362 -208
  94. package/dist/locus-info/index.js.map +1 -1
  95. package/dist/locus-info/infoUtils.js +3 -37
  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 +92 -118
  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 +113 -337
  104. package/dist/media/index.js.map +1 -1
  105. package/dist/media/properties.js +96 -135
  106. package/dist/media/properties.js.map +1 -1
  107. package/dist/media/util.js +1 -35
  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 +2909 -2398
  114. package/dist/meeting/index.js.map +1 -1
  115. package/dist/meeting/muteState.js +257 -112
  116. package/dist/meeting/muteState.js.map +1 -1
  117. package/dist/meeting/request.js +330 -264
  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 +63 -261
  124. package/dist/meeting/util.js.map +1 -1
  125. package/dist/meeting-info/collection.js +6 -25
  126. package/dist/meeting-info/collection.js.map +1 -1
  127. package/dist/meeting-info/index.js +14 -32
  128. package/dist/meeting-info/index.js.map +1 -1
  129. package/dist/meeting-info/meeting-info-v2.js +273 -280
  130. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  131. package/dist/meeting-info/request.js +3 -15
  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 +26 -19
  138. package/dist/meetings/collection.js.map +1 -1
  139. package/dist/meetings/index.js +741 -548
  140. package/dist/meetings/index.js.map +1 -1
  141. package/dist/meetings/request.js +26 -41
  142. package/dist/meetings/request.js.map +1 -1
  143. package/dist/meetings/util.js +194 -149
  144. package/dist/meetings/util.js.map +1 -1
  145. package/dist/member/index.js +100 -85
  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 -68
  150. package/dist/member/util.js.map +1 -1
  151. package/dist/members/collection.js +13 -12
  152. package/dist/members/collection.js.map +1 -1
  153. package/dist/members/index.js +227 -188
  154. package/dist/members/index.js.map +1 -1
  155. package/dist/members/request.js +54 -39
  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 +67 -159
  166. package/dist/metrics/index.js.map +1 -1
  167. package/dist/multistream/mediaRequestManager.js +250 -0
  168. package/dist/multistream/mediaRequestManager.js.map +1 -0
  169. package/dist/multistream/receiveSlot.js +202 -0
  170. package/dist/multistream/receiveSlot.js.map +1 -0
  171. package/dist/multistream/receiveSlotManager.js +176 -0
  172. package/dist/multistream/receiveSlotManager.js.map +1 -0
  173. package/dist/multistream/remoteMedia.js +270 -0
  174. package/dist/multistream/remoteMedia.js.map +1 -0
  175. package/dist/multistream/remoteMediaGroup.js +209 -0
  176. package/dist/multistream/remoteMediaGroup.js.map +1 -0
  177. package/dist/multistream/remoteMediaManager.js +1137 -0
  178. package/dist/multistream/remoteMediaManager.js.map +1 -0
  179. package/dist/networkQualityMonitor/index.js +40 -59
  180. package/dist/networkQualityMonitor/index.js.map +1 -1
  181. package/dist/personal-meeting-room/index.js +21 -45
  182. package/dist/personal-meeting-room/index.js.map +1 -1
  183. package/dist/personal-meeting-room/request.js +1 -31
  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 +192 -191
  188. package/dist/reachability/index.js.map +1 -1
  189. package/dist/reachability/request.js +15 -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 +386 -527
  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 +84 -286
  206. package/dist/roap/index.js.map +1 -1
  207. package/dist/roap/request.js +138 -238
  208. package/dist/roap/request.js.map +1 -1
  209. package/dist/roap/turnDiscovery.js +164 -102
  210. package/dist/roap/turnDiscovery.js.map +1 -1
  211. package/dist/statsAnalyzer/global.js +1 -93
  212. package/dist/statsAnalyzer/global.js.map +1 -1
  213. package/dist/statsAnalyzer/index.js +399 -470
  214. package/dist/statsAnalyzer/index.js.map +1 -1
  215. package/dist/statsAnalyzer/mqaUtil.js +143 -87
  216. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  217. package/dist/transcription/index.js +22 -47
  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 +29 -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.js → browser-detection.ts} +9 -6
  341. package/src/common/collection.ts +9 -7
  342. package/src/common/{config.js → config.ts} +1 -1
  343. package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
  344. package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
  345. package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
  346. package/src/common/errors/{media.js → media.ts} +11 -7
  347. package/src/common/errors/parameter.ts +11 -7
  348. package/src/common/errors/{password-error.js → password-error.ts} +11 -7
  349. package/src/common/errors/{permission.js → permission.ts} +10 -6
  350. package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
  351. package/src/common/errors/{stats.js → stats.ts} +11 -7
  352. package/src/common/errors/{webex-errors.js → webex-errors.ts} +8 -25
  353. package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
  354. package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
  355. package/src/common/events/{events.js → events.ts} +5 -1
  356. package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
  357. package/src/common/events/{util.js → util.ts} +2 -3
  358. package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
  359. package/src/common/logs/logger-proxy.ts +44 -0
  360. package/src/common/logs/{request.js → request.ts} +22 -9
  361. package/src/common/queue.ts +1 -2
  362. package/src/{config.js → config.ts} +18 -12
  363. package/src/constants.ts +256 -183
  364. package/src/controls-options-manager/constants.ts +5 -0
  365. package/src/controls-options-manager/enums.ts +16 -0
  366. package/src/controls-options-manager/index.ts +278 -0
  367. package/src/controls-options-manager/types.ts +49 -0
  368. package/src/controls-options-manager/util.ts +229 -0
  369. package/src/index.ts +33 -0
  370. package/src/locus-info/controlsUtils.ts +169 -0
  371. package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
  372. package/src/locus-info/{fullState.js → fullState.ts} +16 -12
  373. package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
  374. package/src/locus-info/{index.js → index.ts} +331 -80
  375. package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
  376. package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +17 -17
  377. package/src/locus-info/{parser.js → parser.ts} +67 -79
  378. package/src/locus-info/{selfUtils.js → selfUtils.ts} +196 -67
  379. package/src/media/index.ts +488 -0
  380. package/src/media/{properties.js → properties.ts} +67 -54
  381. package/src/media/util.ts +16 -0
  382. package/src/mediaQualityMetrics/config.ts +384 -0
  383. package/src/meeting/in-meeting-actions.ts +123 -3
  384. package/src/meeting/{index.js → index.ts} +3334 -1775
  385. package/src/meeting/muteState.ts +526 -0
  386. package/src/meeting/{request.js → request.ts} +350 -142
  387. package/src/meeting/request.type.ts +13 -0
  388. package/src/meeting/{state.js → state.ts} +50 -35
  389. package/src/meeting/{util.js → util.ts} +126 -159
  390. package/src/meeting-info/{collection.js → collection.ts} +6 -2
  391. package/src/meeting-info/{index.js → index.ts} +42 -36
  392. package/src/meeting-info/meeting-info-v2.ts +345 -0
  393. package/src/meeting-info/{request.js → request.ts} +14 -4
  394. package/src/meeting-info/{util.js → util.ts} +60 -51
  395. package/src/meeting-info/{utilv2.js → utilv2.ts} +76 -60
  396. package/src/meetings/{collection.js → collection.ts} +26 -3
  397. package/src/meetings/index.ts +1394 -0
  398. package/src/meetings/{request.js → request.ts} +34 -25
  399. package/src/meetings/util.ts +288 -0
  400. package/src/member/{index.js → index.ts} +124 -56
  401. package/src/member/types.ts +24 -0
  402. package/src/member/{util.js → util.ts} +105 -25
  403. package/src/members/{collection.js → collection.ts} +10 -2
  404. package/src/members/{index.js → index.ts} +359 -139
  405. package/src/members/request.ts +215 -0
  406. package/src/members/types.ts +28 -0
  407. package/src/members/{util.js → util.ts} +145 -54
  408. package/src/metrics/{config.js → config.ts} +256 -92
  409. package/src/metrics/{constants.js → constants.ts} +1 -6
  410. package/src/metrics/{index.js → index.ts} +116 -97
  411. package/src/multistream/mediaRequestManager.ts +324 -0
  412. package/src/multistream/receiveSlot.ts +184 -0
  413. package/src/multistream/receiveSlotManager.ts +166 -0
  414. package/src/multistream/remoteMedia.ts +254 -0
  415. package/src/multistream/remoteMediaGroup.ts +225 -0
  416. package/src/multistream/remoteMediaManager.ts +1075 -0
  417. package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
  418. package/src/personal-meeting-room/{index.js → index.ts} +28 -19
  419. package/src/personal-meeting-room/{request.js → request.ts} +13 -4
  420. package/src/personal-meeting-room/{util.js → util.ts} +4 -4
  421. package/src/reachability/{index.js → index.ts} +157 -94
  422. package/src/reachability/request.ts +46 -35
  423. package/src/reactions/constants.ts +4 -0
  424. package/src/reactions/reactions.ts +104 -0
  425. package/src/reactions/reactions.type.ts +62 -0
  426. package/src/reconnection-manager/{index.js → index.ts} +261 -163
  427. package/src/recording-controller/enums.ts +8 -0
  428. package/src/recording-controller/index.ts +315 -0
  429. package/src/recording-controller/util.ts +58 -0
  430. package/src/roap/index.ts +241 -0
  431. package/src/roap/request.ts +172 -0
  432. package/src/roap/turnDiscovery.ts +127 -53
  433. package/src/statsAnalyzer/global.ts +37 -0
  434. package/src/statsAnalyzer/index.ts +1273 -0
  435. package/src/statsAnalyzer/mqaUtil.ts +291 -0
  436. package/src/transcription/{index.js → index.ts} +46 -39
  437. package/test/integration/spec/converged-space-meetings.js +177 -0
  438. package/test/integration/spec/journey.js +666 -464
  439. package/test/integration/spec/space-meeting.js +321 -206
  440. package/test/integration/spec/transcription.js +7 -8
  441. package/test/unit/spec/annotation/index.ts +435 -0
  442. package/test/unit/spec/breakouts/breakout.ts +184 -0
  443. package/test/unit/spec/breakouts/collection.ts +15 -0
  444. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  445. package/test/unit/spec/breakouts/events.ts +77 -0
  446. package/test/unit/spec/breakouts/index.ts +1504 -0
  447. package/test/unit/spec/breakouts/request.ts +104 -0
  448. package/test/unit/spec/breakouts/utils.js +72 -0
  449. package/test/unit/spec/common/browser-detection.js +9 -28
  450. package/test/unit/spec/controls-options-manager/index.js +287 -0
  451. package/test/unit/spec/controls-options-manager/util.js +403 -0
  452. package/test/unit/spec/fixture/locus.js +92 -90
  453. package/test/unit/spec/locus-info/controlsUtils.js +177 -32
  454. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  455. package/test/unit/spec/locus-info/index.js +493 -3
  456. package/test/unit/spec/locus-info/infoUtils.js +41 -32
  457. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  458. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  459. package/test/unit/spec/locus-info/parser.js +3 -9
  460. package/test/unit/spec/locus-info/selfConstant.js +110 -103
  461. package/test/unit/spec/locus-info/selfUtils.js +236 -12
  462. package/test/unit/spec/media/index.ts +303 -0
  463. package/test/unit/spec/media/properties.ts +73 -82
  464. package/test/unit/spec/meeting/in-meeting-actions.ts +58 -3
  465. package/test/unit/spec/meeting/index.js +3127 -975
  466. package/test/unit/spec/meeting/muteState.js +375 -70
  467. package/test/unit/spec/meeting/request.js +217 -43
  468. package/test/unit/spec/meeting/utils.js +205 -163
  469. package/test/unit/spec/meeting-info/meetinginfov2.js +268 -74
  470. package/test/unit/spec/meeting-info/request.js +7 -9
  471. package/test/unit/spec/meeting-info/util.js +11 -12
  472. package/test/unit/spec/meeting-info/utilv2.js +131 -74
  473. package/test/unit/spec/meetings/collection.js +15 -1
  474. package/test/unit/spec/meetings/index.js +1052 -333
  475. package/test/unit/spec/meetings/utils.js +163 -14
  476. package/test/unit/spec/member/index.js +24 -1
  477. package/test/unit/spec/member/util.js +359 -32
  478. package/test/unit/spec/members/index.js +547 -37
  479. package/test/unit/spec/members/request.js +76 -20
  480. package/test/unit/spec/members/utils.js +191 -4
  481. package/test/unit/spec/metrics/index.js +46 -20
  482. package/test/unit/spec/multistream/mediaRequestManager.ts +1060 -0
  483. package/test/unit/spec/multistream/receiveSlot.ts +163 -0
  484. package/test/unit/spec/multistream/receiveSlotManager.ts +203 -0
  485. package/test/unit/spec/multistream/remoteMedia.ts +255 -0
  486. package/test/unit/spec/multistream/remoteMediaGroup.ts +396 -0
  487. package/test/unit/spec/multistream/remoteMediaManager.ts +1793 -0
  488. package/test/unit/spec/networkQualityMonitor/index.js +24 -18
  489. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  490. package/test/unit/spec/reachability/index.ts +176 -27
  491. package/test/unit/spec/reachability/request.js +66 -0
  492. package/test/unit/spec/reconnection-manager/index.js +106 -9
  493. package/test/unit/spec/recording-controller/index.js +231 -0
  494. package/test/unit/spec/recording-controller/util.js +102 -0
  495. package/test/unit/spec/roap/index.ts +78 -45
  496. package/test/unit/spec/roap/request.ts +217 -0
  497. package/test/unit/spec/roap/turnDiscovery.ts +93 -49
  498. package/test/unit/spec/stats-analyzer/index.js +118 -65
  499. package/test/utils/cmr.js +44 -42
  500. package/test/utils/constants.js +9 -0
  501. package/test/utils/integrationTestUtils.js +64 -0
  502. package/test/utils/testUtils.js +63 -99
  503. package/test/utils/webex-config.js +22 -18
  504. package/test/utils/webex-test-users.js +57 -50
  505. package/tsconfig.json +6 -0
  506. package/dist/meeting/effectsState.js +0 -327
  507. package/dist/meeting/effectsState.js.map +0 -1
  508. package/dist/peer-connection-manager/index.js +0 -794
  509. package/dist/peer-connection-manager/index.js.map +0 -1
  510. package/dist/peer-connection-manager/util.js +0 -124
  511. package/dist/peer-connection-manager/util.js.map +0 -1
  512. package/dist/roap/collection.js +0 -73
  513. package/dist/roap/collection.js.map +0 -1
  514. package/dist/roap/handler.js +0 -337
  515. package/dist/roap/handler.js.map +0 -1
  516. package/dist/roap/state.js +0 -164
  517. package/dist/roap/state.js.map +0 -1
  518. package/dist/roap/util.js +0 -102
  519. package/dist/roap/util.js.map +0 -1
  520. package/src/common/logs/logger-proxy.js +0 -33
  521. package/src/index.js +0 -15
  522. package/src/locus-info/controlsUtils.js +0 -102
  523. package/src/media/index.js +0 -593
  524. package/src/media/util.js +0 -38
  525. package/src/mediaQualityMetrics/config.js +0 -382
  526. package/src/meeting/effectsState.js +0 -205
  527. package/src/meeting/muteState.js +0 -318
  528. package/src/meeting-info/meeting-info-v2.js +0 -255
  529. package/src/meetings/index.js +0 -986
  530. package/src/meetings/util.js +0 -176
  531. package/src/members/request.js +0 -131
  532. package/src/peer-connection-manager/index.js +0 -723
  533. package/src/peer-connection-manager/util.ts +0 -117
  534. package/src/roap/collection.js +0 -63
  535. package/src/roap/handler.js +0 -252
  536. package/src/roap/index.js +0 -380
  537. package/src/roap/request.js +0 -198
  538. package/src/roap/state.js +0 -149
  539. package/src/roap/util.js +0 -93
  540. package/src/statsAnalyzer/global.js +0 -131
  541. package/src/statsAnalyzer/index.js +0 -1020
  542. package/src/statsAnalyzer/mqaUtil.js +0 -173
  543. package/test/unit/spec/meeting/effectsState.js +0 -293
  544. package/test/unit/spec/peerconnection-manager/index.js +0 -188
  545. package/test/unit/spec/peerconnection-manager/utils.js +0 -48
  546. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
  547. package/test/unit/spec/roap/util.js +0 -30
  548. /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
@@ -0,0 +1,488 @@
1
+ /*!
2
+ * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
3
+ */
4
+ /* globals navigator */
5
+
6
+ import {RoapMediaConnection, MultistreamRoapMediaConnection} from '@webex/internal-media-core';
7
+ import {LocalCameraTrack, LocalDisplayTrack, LocalMicrophoneTrack} from '@webex/media-helpers';
8
+ import LoggerProxy from '../common/logs/logger-proxy';
9
+ import {AUDIO_INPUT, VIDEO_INPUT, MEDIA_TRACK_CONSTRAINT} from '../constants';
10
+ import Config from '../config';
11
+ import StaticConfig from '../common/config';
12
+ import MediaError from '../common/errors/media';
13
+ import BrowserDetection from '../common/browser-detection';
14
+
15
+ const {isBrowser} = BrowserDetection();
16
+
17
+ type MultistreamConnectionConfig = ConstructorParameters<typeof MultistreamRoapMediaConnection>[0];
18
+
19
+ export type BundlePolicy = ConstructorParameters<
20
+ typeof MultistreamRoapMediaConnection
21
+ >[0]['bundlePolicy'];
22
+
23
+ /**
24
+ * MediaDirection
25
+ * @typedef {Object} MediaDirection
26
+ * @property {boolean} sendAudio
27
+ * @property {boolean} receiveAudio
28
+ * @property {boolean} sendVideo
29
+ * @property {boolean} receiveVideo
30
+ * @property {boolean} sendShare
31
+ * @property {boolean} receiveShare
32
+ */
33
+
34
+ /**
35
+ * SendOptions
36
+ * @typedef {Object} SendOptions
37
+ * @property sendAudio
38
+ * @property sendVideo
39
+ * @property sendShare
40
+ * @property isSharing
41
+ * @property {Object} sharePreferences
42
+ */
43
+ /**
44
+ *
45
+ * @public
46
+ * @export
47
+ * Mimic browser APIs as "the ultimate browser".
48
+ * Handles the quirks of each browser.
49
+ * Extends and enhances adapter.js, i.e., the "media" file from the web client.
50
+ */
51
+ const Media: any = {};
52
+
53
+ /**
54
+ * format the media array for send
55
+ * @param {String} mediaId
56
+ * @param {Boolean} audioMuted
57
+ * @param {Boolean} videoMuted
58
+ * @returns {Array} medias
59
+ */
60
+ Media.generateLocalMedias = (mediaId: string, audioMuted: boolean, videoMuted: boolean) => {
61
+ if (mediaId) {
62
+ return [
63
+ {
64
+ localSdp: JSON.stringify({
65
+ audioMuted,
66
+ videoMuted,
67
+ }),
68
+ mediaId,
69
+ },
70
+ ];
71
+ }
72
+
73
+ return [];
74
+ };
75
+
76
+ /**
77
+ * make a browser call to get the media
78
+ * @param {SendOptions} options
79
+ * @param {Object} config SDK Configuration for meetings plugin
80
+ * @returns {Promise}
81
+ */
82
+ Media.getLocalMedia = (options: any, config: object) => {
83
+ const {sendAudio, sendVideo, sendShare, sharePreferences, isSharing} = options;
84
+
85
+ if (sendAudio || sendVideo) {
86
+ return Media.getMedia(sendAudio, sendVideo, config);
87
+ }
88
+
89
+ if (sendShare && !isSharing) {
90
+ return Media.getDisplayMedia(
91
+ {
92
+ sendAudio: false,
93
+ sendShare: true,
94
+ sharePreferences,
95
+ },
96
+ config
97
+ );
98
+ }
99
+
100
+ return Promise.resolve(undefined);
101
+ };
102
+
103
+ /**
104
+ * creates a webrtc media connection with provided tracks and mediaDirection configuration
105
+ *
106
+ * @param {boolean} isMultistream
107
+ * @param {string} debugId string useful for debugging (will appear in media connection logs)
108
+ * @param {Object} options
109
+ * @param {Object} [options.mediaProperties] contains mediaDirection and local tracks:
110
+ * audioTrack, videoTrack and shareTrack
111
+ * @param {string} [options.remoteQualityLevel] LOW|MEDIUM|HIGH applicable only to non-multistream connections
112
+ * @param {boolean} [options.enableRtx] applicable only to non-multistream connections
113
+ * @param {boolean} [options.enableExtmap] applicable only to non-multistream connections
114
+ * @param {Object} [options.turnServerInfo]
115
+ * @param {BundlePolicy} [options.bundlePolicy]
116
+ * @returns {RoapMediaConnection | MultistreamRoapMediaConnection}
117
+ */
118
+ Media.createMediaConnection = (
119
+ isMultistream: boolean,
120
+ debugId: string,
121
+ options: {
122
+ mediaProperties: {
123
+ mediaDirection?: {
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;
138
+ turnServerInfo?: {
139
+ url: string;
140
+ username: string;
141
+ password: string;
142
+ };
143
+ bundlePolicy?: BundlePolicy;
144
+ }
145
+ ) => {
146
+ const {
147
+ mediaProperties,
148
+ remoteQualityLevel,
149
+ enableRtx,
150
+ enableExtmap,
151
+ turnServerInfo,
152
+ bundlePolicy,
153
+ } = options;
154
+
155
+ const iceServers = [];
156
+
157
+ if (turnServerInfo) {
158
+ iceServers.push({
159
+ urls: turnServerInfo.url,
160
+ username: turnServerInfo.username || '',
161
+ credential: turnServerInfo.password || '',
162
+ });
163
+ }
164
+
165
+ if (isMultistream) {
166
+ const config: MultistreamConnectionConfig = {
167
+ iceServers,
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
+ }
180
+
181
+ if (!mediaProperties) {
182
+ throw new Error('mediaProperties have to be provided for non-multistream media connections');
183
+ }
184
+
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
+ },
204
+ },
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
+ );
220
+ };
221
+
222
+ /**
223
+ * generates share streams
224
+ * @param {Object} options parameter
225
+ * @param {Boolean} options.sendAudio send audio from the display share
226
+ * @param {Boolean} options.sendShare send video from the display share
227
+ * @param {Object} options.sharePreferences
228
+ * @param {MediaTrackConstraints} options.sharePreferences.shareConstraints constraints to apply to video
229
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints}
230
+ * @param {Boolean} options.sharePreferences.highFrameRate if shareConstraints isn't provided, set default values based off of this boolean
231
+ * @param {Object} config SDK Configuration for meetings plugin
232
+ * @returns {Promise.<MediaStream>}
233
+ */
234
+ Media.getDisplayMedia = (
235
+ options: {
236
+ sendAudio: boolean;
237
+ sendShare: boolean;
238
+ sharePreferences: {
239
+ shareConstraints: MediaTrackConstraints;
240
+ highFrameRate: any;
241
+ };
242
+ },
243
+ config: any = {}
244
+ ) => {
245
+ // SDK screen share resolution settings from Webex.init
246
+ const customResolution = config.screenResolution || {};
247
+ // user defined screen share frame rate
248
+ const customShareFrameRate = config.screenFrameRate || null;
249
+ // user defined share preferences
250
+ const hasSharePreferences = options.sharePreferences;
251
+ const hasCustomConstraints = hasSharePreferences && hasSharePreferences.shareConstraints;
252
+ const hasHighFrameRate = hasSharePreferences && hasSharePreferences.highFrameRate;
253
+ const {screenResolution, resolution, videoShareFrameRate, screenFrameRate, aspectRatio} =
254
+ Config.meetings;
255
+
256
+ let shareConstraints: any = {
257
+ cursor: MEDIA_TRACK_CONSTRAINT.CURSOR.AWLAYS,
258
+ aspectRatio,
259
+ };
260
+
261
+ if (hasCustomConstraints) {
262
+ shareConstraints = hasSharePreferences.shareConstraints;
263
+ } else if (hasHighFrameRate) {
264
+ shareConstraints = {
265
+ ...shareConstraints,
266
+ frameRate: videoShareFrameRate,
267
+ height: resolution.idealHeight,
268
+ width: resolution.idealWidth,
269
+ ...config.resolution,
270
+ };
271
+ } else {
272
+ shareConstraints = {
273
+ ...shareConstraints,
274
+ frameRate: customShareFrameRate || screenFrameRate,
275
+ height: customResolution.idealHeight || screenResolution.idealHeight,
276
+ width: customResolution.idealWidth || screenResolution.idealWidth,
277
+ ...config.screenResolution,
278
+ };
279
+ }
280
+
281
+ // chrome and webkit based browsers (edge, safari) automatically adjust everything
282
+ // and we have noticed higher quality with those browser types
283
+ // firefox specifically has some issues with resolution and frame rate decision making
284
+ // so we are making it optional and configurable (with defaults) for firefox
285
+ // to have higher quality, and for developers to control the values
286
+ // eventually we may have to add the same functionality to chrome, OR conversely, get to with firefox
287
+
288
+ if (isBrowser('firefox')) {
289
+ const mediaConfig: any = {
290
+ audio: options.sendAudio,
291
+ video: options.sendShare,
292
+ };
293
+
294
+ return navigator.mediaDevices
295
+ .getDisplayMedia({audio: options.sendAudio, video: mediaConfig})
296
+ .then((stream) => {
297
+ if (options.sendShare && stream.getVideoTracks().length > 0) {
298
+ // Firefox has a bug with the spec where changing in the height and width only happens
299
+ // after we get the inital tracks
300
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=1321221
301
+ stream.getVideoTracks()[0].applyConstraints(shareConstraints);
302
+ }
303
+
304
+ return stream;
305
+ });
306
+ }
307
+
308
+ const getDisplayMediaParams: any = {video: options.sendShare ? shareConstraints : false};
309
+
310
+ // safari doesn't support sending screen share audio
311
+ // https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia
312
+ if (options.sendAudio && isBrowser('safari')) {
313
+ getDisplayMediaParams.audio = options.sendAudio;
314
+ }
315
+
316
+ return navigator.mediaDevices.getDisplayMedia(getDisplayMediaParams);
317
+ };
318
+
319
+ /**
320
+ * generates audio and video using constraints (often called after getSupportedDevices)
321
+ * @param {Object|Boolean} audio gum constraints
322
+ * @param {Object|Boolean} video gum constraints
323
+ * @param {Object} config SDK Configuration for meetings plugin
324
+ * @returns {Object} {streams}
325
+ */
326
+ Media.getMedia = (audio: any | boolean, video: any | boolean, config: any) => {
327
+ const defaultWidth = {ideal: config.resolution.idealWidth, max: config.resolution.maxWidth};
328
+ const defaultHeight = {ideal: config.resolution.idealHeight, max: config.resolution.maxHeight};
329
+ const mediaConfig = {
330
+ audio,
331
+ // TODO: Remove temporary workaround once Firefox fixes low constraint issues
332
+ // eslint-disable-next-line no-nested-ternary
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
351
+ };
352
+
353
+ return navigator.mediaDevices.getUserMedia(mediaConfig).catch((err) => {
354
+ const logPath = 'Media:index#getMedia --> navigator.mediaDevices.getUserMedia';
355
+
356
+ LoggerProxy.logger.error(`${logPath} failed - ${err} (${err.constraint})`);
357
+ throw err;
358
+ });
359
+ };
360
+
361
+ /**
362
+ * Checks if the machine has at least one audio or video device (Dont use this for screen share)
363
+ * @param {object} [options]
364
+ * {
365
+ * sendAudio: true/false,
366
+ * sendVideo: true/false
367
+ * }
368
+ * @returns {Object} {
369
+ * sendAudio: true/false,
370
+ * sendVideo: true/false
371
+ *}
372
+ */
373
+ Media.getSupportedDevice = ({sendAudio, sendVideo}: {sendAudio: boolean; sendVideo: boolean}) =>
374
+ Promise.resolve().then(() => {
375
+ if (!navigator.mediaDevices || navigator.mediaDevices.enumerateDevices === undefined) {
376
+ return {
377
+ sendAudio: false,
378
+ sendVideo: false,
379
+ };
380
+ }
381
+
382
+ return navigator.mediaDevices.enumerateDevices().then((devices) => {
383
+ const supported = {
384
+ audio: devices.filter((device) => device.kind === AUDIO_INPUT).length > 0,
385
+ video: devices.filter((device) => device.kind === VIDEO_INPUT).length > 0,
386
+ };
387
+
388
+ return {
389
+ sendAudio: supported.audio && sendAudio,
390
+ sendVideo: supported.video && sendVideo,
391
+ };
392
+ });
393
+ });
394
+
395
+ /**
396
+ * proxy to browser navigator.mediaDevices.enumerateDevices()
397
+ * @returns {Promise}
398
+ */
399
+ Media.getDevices = () => {
400
+ if (navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {
401
+ return navigator.mediaDevices.enumerateDevices();
402
+ }
403
+
404
+ return Promise.reject(new MediaError('enumerateDevices not supported.'));
405
+ };
406
+
407
+ /**
408
+ *
409
+ * Toggle a specific stream
410
+ * noop as of now, does nothing
411
+ * @returns {null}
412
+ */
413
+ Media.toggleStream = () => {};
414
+
415
+ /**
416
+ * Stop input stream
417
+ * @param {MediaTrack} track A media stream
418
+ * @returns {null}
419
+ */
420
+ Media.stopTracks = (track: any) => {
421
+ if (!track) {
422
+ return Promise.resolve();
423
+ }
424
+
425
+ return Promise.resolve().then(() => {
426
+ if (track && track.stop) {
427
+ try {
428
+ track.stop();
429
+ } catch (e) {
430
+ LoggerProxy.logger.error(
431
+ `Media:index#stopTracks --> Unable to stop the track with state ${track.readyState}, error: ${e}`
432
+ );
433
+ }
434
+ }
435
+ });
436
+ };
437
+
438
+ /**
439
+ * generates streams for audio video and share
440
+ * @param {object} mediaSetting parameter
441
+ * @param {Object} mediaSetting.sendAudio sendAudio: {Boolean} sendAudio constraints
442
+ * @param {Object} mediaSetting.sendVideo sendVideo: {Boolean} sendVideo constraints
443
+ * @param {Object} mediaSetting.sendShare sendShare: {Boolean} sendShare constraints
444
+ * @param {Object} mediaSetting.isSharing isSharing: {Boolean} isSharing constraints
445
+ * @param {Object} audioVideo parameter
446
+ * @param {Object} audioVideo.audio {deviceId: {String}}
447
+ * @param {Object} audioVideo.video {deviceId: {String}}
448
+ * @param {Object} sharePreferences parameter
449
+ * @param {Object} sharePreferences.shareConstraints parameter
450
+ * @param {Boolean} sharePreferences.highFrameRate parameter
451
+ * @param {Object} config SDK Config
452
+ * @returns {Array} [localStream, shareStream]
453
+ */
454
+ Media.getUserMedia = (
455
+ mediaSetting: {
456
+ sendAudio: object;
457
+ sendVideo: object;
458
+ sendShare: object;
459
+ isSharing: object;
460
+ },
461
+ audioVideo: {
462
+ audio: object;
463
+ video: object;
464
+ },
465
+ sharePreferences: {
466
+ shareConstraints: object;
467
+ highFrameRate: boolean;
468
+ },
469
+ config: object
470
+ ) =>
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
+ );
487
+
488
+ export default Media;