@webex/plugin-meetings 3.0.0-beta.3 → 3.0.0-beta.300

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