@webex/plugin-meetings 3.0.0-beta.2 → 3.0.0-beta.200

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