@webex/plugin-meetings 3.0.0-beta.28 → 3.0.0-beta.280

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 (363) hide show
  1. package/README.md +46 -8
  2. package/dist/annotation/annotation.types.js +7 -0
  3. package/dist/annotation/annotation.types.js.map +1 -0
  4. package/dist/annotation/constants.js +49 -0
  5. package/dist/annotation/constants.js.map +1 -0
  6. package/dist/annotation/index.js +342 -0
  7. package/dist/annotation/index.js.map +1 -0
  8. package/dist/breakouts/breakout.js +114 -14
  9. package/dist/breakouts/breakout.js.map +1 -1
  10. package/dist/breakouts/edit-lock-error.js +52 -0
  11. package/dist/breakouts/edit-lock-error.js.map +1 -0
  12. package/dist/breakouts/events.js +45 -0
  13. package/dist/breakouts/events.js.map +1 -0
  14. package/dist/breakouts/index.js +763 -31
  15. package/dist/breakouts/index.js.map +1 -1
  16. package/dist/breakouts/request.js +78 -0
  17. package/dist/breakouts/request.js.map +1 -0
  18. package/dist/breakouts/utils.js +67 -0
  19. package/dist/breakouts/utils.js.map +1 -0
  20. package/dist/common/errors/no-meeting-info.js +51 -0
  21. package/dist/common/errors/no-meeting-info.js.map +1 -0
  22. package/dist/common/errors/webex-errors.js +28 -7
  23. package/dist/common/errors/webex-errors.js.map +1 -1
  24. package/dist/common/logs/logger-proxy.js +1 -1
  25. package/dist/common/logs/logger-proxy.js.map +1 -1
  26. package/dist/common/queue.js +24 -9
  27. package/dist/common/queue.js.map +1 -1
  28. package/dist/config.js +5 -10
  29. package/dist/config.js.map +1 -1
  30. package/dist/constants.js +203 -28
  31. package/dist/constants.js.map +1 -1
  32. package/dist/controls-options-manager/enums.js +14 -2
  33. package/dist/controls-options-manager/enums.js.map +1 -1
  34. package/dist/controls-options-manager/index.js +109 -15
  35. package/dist/controls-options-manager/index.js.map +1 -1
  36. package/dist/controls-options-manager/types.js +7 -0
  37. package/dist/controls-options-manager/types.js.map +1 -0
  38. package/dist/controls-options-manager/util.js +309 -18
  39. package/dist/controls-options-manager/util.js.map +1 -1
  40. package/dist/index.js +112 -1
  41. package/dist/index.js.map +1 -1
  42. package/dist/interpretation/collection.js +23 -0
  43. package/dist/interpretation/collection.js.map +1 -0
  44. package/dist/interpretation/index.js +366 -0
  45. package/dist/interpretation/index.js.map +1 -0
  46. package/dist/interpretation/siLanguage.js +25 -0
  47. package/dist/interpretation/siLanguage.js.map +1 -0
  48. package/dist/locus-info/controlsUtils.js +91 -2
  49. package/dist/locus-info/controlsUtils.js.map +1 -1
  50. package/dist/locus-info/index.js +383 -62
  51. package/dist/locus-info/index.js.map +1 -1
  52. package/dist/locus-info/infoUtils.js +7 -1
  53. package/dist/locus-info/infoUtils.js.map +1 -1
  54. package/dist/locus-info/mediaSharesUtils.js +57 -1
  55. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  56. package/dist/locus-info/parser.js +249 -72
  57. package/dist/locus-info/parser.js.map +1 -1
  58. package/dist/locus-info/selfUtils.js +89 -14
  59. package/dist/locus-info/selfUtils.js.map +1 -1
  60. package/dist/media/index.js +58 -116
  61. package/dist/media/index.js.map +1 -1
  62. package/dist/media/properties.js +72 -123
  63. package/dist/media/properties.js.map +1 -1
  64. package/dist/meeting/in-meeting-actions.js +82 -2
  65. package/dist/meeting/in-meeting-actions.js.map +1 -1
  66. package/dist/meeting/index.js +3123 -2814
  67. package/dist/meeting/index.js.map +1 -1
  68. package/dist/meeting/locusMediaRequest.js +292 -0
  69. package/dist/meeting/locusMediaRequest.js.map +1 -0
  70. package/dist/meeting/muteState.js +230 -124
  71. package/dist/meeting/muteState.js.map +1 -1
  72. package/dist/meeting/request.js +256 -196
  73. package/dist/meeting/request.js.map +1 -1
  74. package/dist/meeting/util.js +601 -417
  75. package/dist/meeting/util.js.map +1 -1
  76. package/dist/meeting-info/index.js +73 -7
  77. package/dist/meeting-info/index.js.map +1 -1
  78. package/dist/meeting-info/meeting-info-v2.js +192 -51
  79. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  80. package/dist/meeting-info/util.js +1 -1
  81. package/dist/meeting-info/util.js.map +1 -1
  82. package/dist/meeting-info/utilv2.js +36 -36
  83. package/dist/meeting-info/utilv2.js.map +1 -1
  84. package/dist/meetings/collection.js +22 -0
  85. package/dist/meetings/collection.js.map +1 -1
  86. package/dist/meetings/index.js +394 -94
  87. package/dist/meetings/index.js.map +1 -1
  88. package/dist/meetings/meetings.types.js +7 -0
  89. package/dist/meetings/meetings.types.js.map +1 -0
  90. package/dist/meetings/request.js +2 -0
  91. package/dist/meetings/request.js.map +1 -1
  92. package/dist/meetings/util.js +71 -1
  93. package/dist/meetings/util.js.map +1 -1
  94. package/dist/member/index.js +49 -0
  95. package/dist/member/index.js.map +1 -1
  96. package/dist/member/types.js +25 -0
  97. package/dist/member/types.js.map +1 -0
  98. package/dist/member/util.js +121 -25
  99. package/dist/member/util.js.map +1 -1
  100. package/dist/members/collection.js +10 -0
  101. package/dist/members/collection.js.map +1 -1
  102. package/dist/members/index.js +86 -6
  103. package/dist/members/index.js.map +1 -1
  104. package/dist/members/request.js +106 -38
  105. package/dist/members/request.js.map +1 -1
  106. package/dist/members/types.js +15 -0
  107. package/dist/members/types.js.map +1 -0
  108. package/dist/members/util.js +316 -233
  109. package/dist/members/util.js.map +1 -1
  110. package/dist/metrics/constants.js +12 -5
  111. package/dist/metrics/constants.js.map +1 -1
  112. package/dist/metrics/index.js +1 -468
  113. package/dist/metrics/index.js.map +1 -1
  114. package/dist/multistream/mediaRequestManager.js +238 -49
  115. package/dist/multistream/mediaRequestManager.js.map +1 -1
  116. package/dist/multistream/receiveSlot.js +40 -16
  117. package/dist/multistream/receiveSlot.js.map +1 -1
  118. package/dist/multistream/receiveSlotManager.js +39 -36
  119. package/dist/multistream/receiveSlotManager.js.map +1 -1
  120. package/dist/multistream/remoteMedia.js +44 -18
  121. package/dist/multistream/remoteMedia.js.map +1 -1
  122. package/dist/multistream/remoteMediaGroup.js +60 -3
  123. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  124. package/dist/multistream/remoteMediaManager.js +209 -59
  125. package/dist/multistream/remoteMediaManager.js.map +1 -1
  126. package/dist/multistream/sendSlotManager.js +233 -0
  127. package/dist/multistream/sendSlotManager.js.map +1 -0
  128. package/dist/reachability/index.js +225 -59
  129. package/dist/reachability/index.js.map +1 -1
  130. package/dist/reachability/request.js +17 -8
  131. package/dist/reachability/request.js.map +1 -1
  132. package/dist/reconnection-manager/index.js +199 -154
  133. package/dist/reconnection-manager/index.js.map +1 -1
  134. package/dist/recording-controller/index.js +21 -2
  135. package/dist/recording-controller/index.js.map +1 -1
  136. package/dist/recording-controller/util.js +9 -8
  137. package/dist/recording-controller/util.js.map +1 -1
  138. package/dist/roap/index.js +23 -29
  139. package/dist/roap/index.js.map +1 -1
  140. package/dist/roap/request.js +112 -97
  141. package/dist/roap/request.js.map +1 -1
  142. package/dist/roap/turnDiscovery.js +96 -36
  143. package/dist/roap/turnDiscovery.js.map +1 -1
  144. package/dist/rtcMetrics/constants.js +12 -0
  145. package/dist/rtcMetrics/constants.js.map +1 -0
  146. package/dist/rtcMetrics/index.js +117 -0
  147. package/dist/rtcMetrics/index.js.map +1 -0
  148. package/dist/statsAnalyzer/index.js +67 -73
  149. package/dist/statsAnalyzer/index.js.map +1 -1
  150. package/dist/statsAnalyzer/mqaUtil.js +11 -10
  151. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  152. package/dist/types/annotation/annotation.types.d.ts +42 -0
  153. package/dist/types/annotation/constants.d.ts +31 -0
  154. package/dist/types/annotation/index.d.ts +117 -0
  155. package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
  156. package/dist/types/breakouts/events.d.ts +8 -0
  157. package/dist/types/breakouts/request.d.ts +22 -0
  158. package/dist/types/breakouts/utils.d.ts +15 -0
  159. package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
  160. package/dist/types/common/errors/webex-errors.d.ts +13 -1
  161. package/dist/types/common/queue.d.ts +9 -7
  162. package/dist/types/config.d.ts +1 -6
  163. package/dist/types/constants.d.ts +161 -21
  164. package/dist/types/controls-options-manager/enums.d.ts +11 -1
  165. package/dist/types/controls-options-manager/index.d.ts +17 -1
  166. package/dist/types/controls-options-manager/types.d.ts +43 -0
  167. package/dist/types/controls-options-manager/util.d.ts +1 -7
  168. package/dist/types/index.d.ts +6 -4
  169. package/dist/types/interpretation/collection.d.ts +5 -0
  170. package/dist/types/interpretation/index.d.ts +5 -0
  171. package/dist/types/interpretation/siLanguage.d.ts +5 -0
  172. package/dist/types/locus-info/index.d.ts +57 -4
  173. package/dist/types/locus-info/parser.d.ts +67 -6
  174. package/dist/types/media/index.d.ts +2 -0
  175. package/dist/types/media/properties.d.ts +34 -48
  176. package/dist/types/meeting/in-meeting-actions.d.ts +82 -2
  177. package/dist/types/meeting/index.d.ts +345 -507
  178. package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
  179. package/dist/types/meeting/muteState.d.ts +99 -23
  180. package/dist/types/meeting/request.d.ts +72 -43
  181. package/dist/types/meeting/util.d.ts +101 -1
  182. package/dist/types/meeting-info/index.d.ts +13 -1
  183. package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
  184. package/dist/types/meetings/collection.d.ts +8 -0
  185. package/dist/types/meetings/index.d.ts +88 -12
  186. package/dist/types/meetings/meetings.types.d.ts +4 -0
  187. package/dist/types/member/index.d.ts +13 -0
  188. package/dist/types/member/types.d.ts +32 -0
  189. package/dist/types/members/collection.d.ts +5 -0
  190. package/dist/types/members/index.d.ts +35 -2
  191. package/dist/types/members/request.d.ts +73 -9
  192. package/dist/types/members/types.d.ts +24 -0
  193. package/dist/types/members/util.d.ts +209 -1
  194. package/dist/types/metrics/constants.d.ts +11 -4
  195. package/dist/types/metrics/index.d.ts +4 -119
  196. package/dist/types/multistream/mediaRequestManager.d.ts +73 -5
  197. package/dist/types/multistream/receiveSlot.d.ts +13 -11
  198. package/dist/types/multistream/receiveSlotManager.d.ts +14 -4
  199. package/dist/types/multistream/remoteMedia.d.ts +8 -29
  200. package/dist/types/multistream/remoteMediaGroup.d.ts +0 -9
  201. package/dist/types/multistream/remoteMediaManager.d.ts +46 -2
  202. package/dist/types/multistream/sendSlotManager.d.ts +61 -0
  203. package/dist/types/reachability/index.d.ts +61 -7
  204. package/dist/types/reachability/request.d.ts +7 -3
  205. package/dist/types/reconnection-manager/index.d.ts +9 -0
  206. package/dist/types/recording-controller/index.d.ts +15 -1
  207. package/dist/types/recording-controller/util.d.ts +5 -4
  208. package/dist/types/roap/request.d.ts +15 -11
  209. package/dist/types/roap/turnDiscovery.d.ts +18 -1
  210. package/dist/types/rtcMetrics/constants.d.ts +4 -0
  211. package/dist/types/rtcMetrics/index.d.ts +47 -0
  212. package/dist/types/statsAnalyzer/index.d.ts +6 -1
  213. package/package.json +23 -20
  214. package/src/annotation/annotation.types.ts +50 -0
  215. package/src/annotation/constants.ts +36 -0
  216. package/src/annotation/index.ts +328 -0
  217. package/src/breakouts/README.md +44 -14
  218. package/src/breakouts/breakout.ts +87 -9
  219. package/src/breakouts/edit-lock-error.ts +25 -0
  220. package/src/breakouts/events.ts +56 -0
  221. package/src/breakouts/index.ts +646 -18
  222. package/src/breakouts/request.ts +55 -0
  223. package/src/breakouts/utils.ts +57 -0
  224. package/src/common/errors/no-meeting-info.ts +24 -0
  225. package/src/common/errors/webex-errors.ts +27 -2
  226. package/src/common/logs/logger-proxy.ts +1 -1
  227. package/src/common/queue.ts +22 -8
  228. package/src/config.ts +4 -9
  229. package/src/constants.ts +184 -18
  230. package/src/controls-options-manager/enums.ts +12 -0
  231. package/src/controls-options-manager/index.ts +116 -21
  232. package/src/controls-options-manager/types.ts +59 -0
  233. package/src/controls-options-manager/util.ts +294 -14
  234. package/src/index.ts +40 -0
  235. package/src/interpretation/README.md +60 -0
  236. package/src/interpretation/collection.ts +19 -0
  237. package/src/interpretation/index.ts +332 -0
  238. package/src/interpretation/siLanguage.ts +18 -0
  239. package/src/locus-info/controlsUtils.ts +108 -0
  240. package/src/locus-info/index.ts +413 -59
  241. package/src/locus-info/infoUtils.ts +10 -2
  242. package/src/locus-info/mediaSharesUtils.ts +64 -0
  243. package/src/locus-info/parser.ts +258 -47
  244. package/src/locus-info/selfUtils.ts +81 -5
  245. package/src/media/index.ts +100 -122
  246. package/src/media/properties.ts +85 -108
  247. package/src/meeting/in-meeting-actions.ts +163 -3
  248. package/src/meeting/index.ts +2541 -2309
  249. package/src/meeting/locusMediaRequest.ts +313 -0
  250. package/src/meeting/muteState.ts +229 -131
  251. package/src/meeting/request.ts +172 -121
  252. package/src/meeting/util.ts +588 -394
  253. package/src/meeting-info/index.ts +81 -8
  254. package/src/meeting-info/meeting-info-v2.ts +170 -14
  255. package/src/meeting-info/util.ts +1 -1
  256. package/src/meeting-info/utilv2.ts +23 -23
  257. package/src/meetings/collection.ts +20 -0
  258. package/src/meetings/index.ts +428 -108
  259. package/src/meetings/meetings.types.ts +12 -0
  260. package/src/meetings/request.ts +2 -0
  261. package/src/meetings/util.ts +79 -4
  262. package/src/member/index.ts +49 -0
  263. package/src/member/types.ts +38 -0
  264. package/src/member/util.ts +127 -25
  265. package/src/members/collection.ts +8 -0
  266. package/src/members/index.ts +106 -7
  267. package/src/members/request.ts +97 -17
  268. package/src/members/types.ts +28 -0
  269. package/src/members/util.ts +319 -240
  270. package/src/metrics/constants.ts +11 -4
  271. package/src/metrics/index.ts +1 -490
  272. package/src/multistream/mediaRequestManager.ts +289 -79
  273. package/src/multistream/receiveSlot.ts +47 -17
  274. package/src/multistream/receiveSlotManager.ts +34 -24
  275. package/src/multistream/remoteMedia.ts +27 -2
  276. package/src/multistream/remoteMediaGroup.ts +59 -0
  277. package/src/multistream/remoteMediaManager.ts +148 -30
  278. package/src/multistream/sendSlotManager.ts +170 -0
  279. package/src/reachability/index.ts +228 -37
  280. package/src/reachability/request.ts +17 -8
  281. package/src/reconnection-manager/index.ts +81 -54
  282. package/src/recording-controller/index.ts +20 -3
  283. package/src/recording-controller/util.ts +26 -9
  284. package/src/roap/index.ts +23 -30
  285. package/src/roap/request.ts +100 -104
  286. package/src/roap/turnDiscovery.ts +51 -25
  287. package/src/rtcMetrics/constants.ts +3 -0
  288. package/src/rtcMetrics/index.ts +100 -0
  289. package/src/statsAnalyzer/index.ts +88 -88
  290. package/src/statsAnalyzer/mqaUtil.ts +13 -14
  291. package/test/integration/spec/converged-space-meetings.js +60 -3
  292. package/test/integration/spec/journey.js +320 -261
  293. package/test/integration/spec/space-meeting.js +76 -3
  294. package/test/unit/spec/annotation/index.ts +418 -0
  295. package/test/unit/spec/breakouts/breakout.ts +142 -24
  296. package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
  297. package/test/unit/spec/breakouts/events.ts +89 -0
  298. package/test/unit/spec/breakouts/index.ts +1488 -67
  299. package/test/unit/spec/breakouts/request.ts +104 -0
  300. package/test/unit/spec/breakouts/utils.js +72 -0
  301. package/test/unit/spec/common/queue.js +31 -2
  302. package/test/unit/spec/controls-options-manager/index.js +163 -0
  303. package/test/unit/spec/controls-options-manager/util.js +576 -60
  304. package/test/unit/spec/fixture/locus.js +1 -0
  305. package/test/unit/spec/interpretation/collection.ts +15 -0
  306. package/test/unit/spec/interpretation/index.ts +589 -0
  307. package/test/unit/spec/interpretation/siLanguage.ts +28 -0
  308. package/test/unit/spec/locus-info/controlsUtils.js +316 -43
  309. package/test/unit/spec/locus-info/index.js +1304 -33
  310. package/test/unit/spec/locus-info/infoUtils.js +37 -15
  311. package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
  312. package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
  313. package/test/unit/spec/locus-info/parser.js +116 -35
  314. package/test/unit/spec/locus-info/selfConstant.js +27 -4
  315. package/test/unit/spec/locus-info/selfUtils.js +208 -17
  316. package/test/unit/spec/media/index.ts +104 -37
  317. package/test/unit/spec/meeting/in-meeting-actions.ts +81 -3
  318. package/test/unit/spec/meeting/index.js +4515 -1932
  319. package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
  320. package/test/unit/spec/meeting/muteState.js +408 -208
  321. package/test/unit/spec/meeting/request.js +440 -45
  322. package/test/unit/spec/meeting/utils.js +679 -64
  323. package/test/unit/spec/meeting-info/index.js +295 -0
  324. package/test/unit/spec/meeting-info/meetinginfov2.js +521 -5
  325. package/test/unit/spec/meeting-info/utilv2.js +21 -0
  326. package/test/unit/spec/meetings/collection.js +14 -0
  327. package/test/unit/spec/meetings/index.js +1007 -177
  328. package/test/unit/spec/meetings/utils.js +206 -2
  329. package/test/unit/spec/member/index.js +58 -4
  330. package/test/unit/spec/member/util.js +479 -35
  331. package/test/unit/spec/members/index.js +319 -1
  332. package/test/unit/spec/members/request.js +206 -27
  333. package/test/unit/spec/members/utils.js +184 -0
  334. package/test/unit/spec/metrics/index.js +1 -50
  335. package/test/unit/spec/multistream/mediaRequestManager.ts +803 -162
  336. package/test/unit/spec/multistream/receiveSlot.ts +43 -20
  337. package/test/unit/spec/multistream/receiveSlotManager.ts +32 -30
  338. package/test/unit/spec/multistream/remoteMedia.ts +30 -0
  339. package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
  340. package/test/unit/spec/multistream/remoteMediaManager.ts +326 -0
  341. package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
  342. package/test/unit/spec/reachability/index.ts +549 -9
  343. package/test/unit/spec/reachability/request.js +68 -0
  344. package/test/unit/spec/reconnection-manager/index.js +84 -9
  345. package/test/unit/spec/recording-controller/index.js +294 -218
  346. package/test/unit/spec/recording-controller/util.js +223 -96
  347. package/test/unit/spec/roap/index.ts +31 -51
  348. package/test/unit/spec/roap/request.ts +203 -85
  349. package/test/unit/spec/roap/turnDiscovery.ts +48 -13
  350. package/test/unit/spec/rtcMetrics/index.ts +68 -0
  351. package/test/unit/spec/stats-analyzer/index.js +64 -2
  352. package/test/utils/integrationTestUtils.js +46 -0
  353. package/test/utils/testUtils.js +0 -52
  354. package/dist/meeting/effectsState.js +0 -262
  355. package/dist/meeting/effectsState.js.map +0 -1
  356. package/dist/metrics/config.js +0 -299
  357. package/dist/metrics/config.js.map +0 -1
  358. package/dist/types/meeting/effectsState.d.ts +0 -42
  359. package/dist/types/metrics/config.d.ts +0 -178
  360. package/src/index.js +0 -16
  361. package/src/meeting/effectsState.ts +0 -211
  362. package/src/metrics/config.ts +0 -495
  363. package/test/unit/spec/meeting/effectsState.js +0 -285
@@ -12,20 +12,18 @@ _Object$defineProperty(exports, "__esModule", {
12
12
  });
13
13
  exports.default = void 0;
14
14
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
15
- var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
16
15
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
17
16
  var _internalMediaCore = require("@webex/internal-media-core");
18
17
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
19
18
  var _constants = require("../constants");
20
19
  var _config = _interopRequireDefault(require("../config"));
21
20
  var _config2 = _interopRequireDefault(require("../common/config"));
22
- var _media = _interopRequireDefault(require("../common/errors/media"));
23
21
  var _browserDetection = _interopRequireDefault(require("../common/browser-detection"));
22
+ var _rtcMetrics = _interopRequireDefault(require("../rtcMetrics"));
24
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; }
25
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; }
26
25
  var _BrowserDetection = (0, _browserDetection.default)(),
27
26
  isBrowser = _BrowserDetection.isBrowser;
28
-
29
27
  /**
30
28
  * MediaDirection
31
29
  * @typedef {Object} MediaDirection
@@ -56,40 +54,6 @@ var _BrowserDetection = (0, _browserDetection.default)(),
56
54
  */
57
55
  var Media = {};
58
56
 
59
- /**
60
- * @param {boolean} enabled
61
- * @param {MediaStreamTrack} track
62
- * @returns {Boolean}
63
- * @public
64
- */
65
- Media.setLocalTrack = function (enabled, track) {
66
- if (track) {
67
- track.enabled = enabled;
68
- return true;
69
- }
70
- return false;
71
- };
72
-
73
- /**
74
- * format the media array for send
75
- * @param {String} mediaId
76
- * @param {Boolean} audioMuted
77
- * @param {Boolean} videoMuted
78
- * @returns {Array} medias
79
- */
80
- Media.generateLocalMedias = function (mediaId, audioMuted, videoMuted) {
81
- if (mediaId) {
82
- return [{
83
- localSdp: (0, _stringify.default)({
84
- audioMuted: audioMuted,
85
- videoMuted: videoMuted
86
- }),
87
- mediaId: mediaId
88
- }];
89
- }
90
- return [];
91
- };
92
-
93
57
  /**
94
58
  * make a browser call to get the media
95
59
  * @param {SendOptions} options
@@ -114,27 +78,44 @@ Media.getLocalMedia = function (options, config) {
114
78
  }
115
79
  return _promise.default.resolve(undefined);
116
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
+ };
117
93
 
118
94
  /**
119
95
  * creates a webrtc media connection with provided tracks and mediaDirection configuration
120
96
  *
121
97
  * @param {boolean} isMultistream
122
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
123
102
  * @param {Object} options
124
- * @param {Object} [options.mediaProperties] only applicable to non-multistream connections, contains mediaDirection and local tracks:
125
- * audioTrack, videoTrack and shareTrack
103
+ * @param {Object} [options.mediaProperties] contains mediaDirection and local tracks:
104
+ * audioTrack, videoTrack, shareVideoTrack, and shareAudioTrack
126
105
  * @param {string} [options.remoteQualityLevel] LOW|MEDIUM|HIGH applicable only to non-multistream connections
127
106
  * @param {boolean} [options.enableRtx] applicable only to non-multistream connections
128
107
  * @param {boolean} [options.enableExtmap] applicable only to non-multistream connections
129
108
  * @param {Object} [options.turnServerInfo]
130
- * @returns {RoapMediaConnection}
109
+ * @param {BundlePolicy} [options.bundlePolicy]
110
+ * @returns {RoapMediaConnection | MultistreamRoapMediaConnection}
131
111
  */
132
- Media.createMediaConnection = function (isMultistream, debugId, options) {
112
+ Media.createMediaConnection = function (isMultistream, debugId, webex, meetingId, correlationId, options) {
133
113
  var mediaProperties = options.mediaProperties,
134
114
  remoteQualityLevel = options.remoteQualityLevel,
135
115
  enableRtx = options.enableRtx,
136
116
  enableExtmap = options.enableExtmap,
137
- turnServerInfo = options.turnServerInfo;
117
+ turnServerInfo = options.turnServerInfo,
118
+ bundlePolicy = options.bundlePolicy;
138
119
  var iceServers = [];
139
120
  if (turnServerInfo) {
140
121
  iceServers.push({
@@ -144,17 +125,27 @@ Media.createMediaConnection = function (isMultistream, debugId, options) {
144
125
  });
145
126
  }
146
127
  if (isMultistream) {
147
- return new _internalMediaCore.MultistreamRoapMediaConnection({
128
+ var config = {
148
129
  iceServers: iceServers
149
- }, debugId);
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, function (data) {
136
+ return rtcMetrics.addMetrics(data);
137
+ }, function () {
138
+ return rtcMetrics.closeMetrics();
139
+ });
150
140
  }
151
141
  if (!mediaProperties) {
152
142
  throw new Error('mediaProperties have to be provided for non-multistream media connections');
153
143
  }
154
144
  var mediaDirection = mediaProperties.mediaDirection,
155
- audioTrack = mediaProperties.audioTrack,
156
- videoTrack = mediaProperties.videoTrack,
157
- shareTrack = mediaProperties.shareTrack;
145
+ audioStream = mediaProperties.audioStream,
146
+ videoStream = mediaProperties.videoStream,
147
+ shareVideoStream = mediaProperties.shareVideoStream,
148
+ shareAudioStream = mediaProperties.shareAudioStream;
158
149
  return new _internalMediaCore.RoapMediaConnection({
159
150
  iceServers: iceServers,
160
151
  skipInactiveTransceivers: false,
@@ -173,17 +164,20 @@ Media.createMediaConnection = function (isMultistream, debugId, options) {
173
164
  disableRtx: !enableRtx // see https://bugs.chromium.org/p/chromium/issues/detail?id=1020642 why we might want to remove RTX from SDP
174
165
  }
175
166
  }, {
176
- send: {
177
- audio: audioTrack,
178
- video: videoTrack,
179
- screenShareVideo: shareTrack
167
+ // TODO: RoapMediaConnection is not ready to use stream classes yet, so we pass the raw MediaStreamTrack for now SPARK-460530
168
+ localTracks: {
169
+ audio: audioStream === null || audioStream === void 0 ? void 0 : audioStream.outputTrack,
170
+ video: videoStream === null || videoStream === void 0 ? void 0 : videoStream.outputTrack,
171
+ screenShareVideo: shareVideoStream === null || shareVideoStream === void 0 ? void 0 : shareVideoStream.outputTrack,
172
+ screenShareAudio: shareAudioStream === null || shareAudioStream === void 0 ? void 0 : shareAudioStream.outputTrack // TODO: add type for screenShareAudio in internal-media-core SPARK-446923
180
173
  },
181
- receive: {
182
- audio: mediaDirection.receiveAudio,
183
- video: mediaDirection.receiveVideo,
184
- screenShareVideo: mediaDirection.receiveShare,
185
- remoteQualityLevel: remoteQualityLevel
186
- }
174
+
175
+ direction: {
176
+ audio: Media.getDirection(true, mediaDirection.receiveAudio, mediaDirection.sendAudio),
177
+ video: Media.getDirection(true, mediaDirection.receiveVideo, mediaDirection.sendVideo),
178
+ screenShareVideo: Media.getDirection(false, mediaDirection.receiveShare, mediaDirection.sendShare)
179
+ },
180
+ remoteQualityLevel: remoteQualityLevel
187
181
  }, debugId);
188
182
  };
189
183
 
@@ -315,56 +309,6 @@ Media.getMedia = function (audio, video, config) {
315
309
  });
316
310
  };
317
311
 
318
- /**
319
- * Checks if the machine has at least one audio or video device (Dont use this for screen share)
320
- * @param {object} [options]
321
- * {
322
- * sendAudio: true/false,
323
- * sendVideo: true/false
324
- * }
325
- * @returns {Object} {
326
- * sendAudio: true/false,
327
- * sendVideo: true/false
328
- *}
329
- */
330
- Media.getSupportedDevice = function (_ref) {
331
- var sendAudio = _ref.sendAudio,
332
- sendVideo = _ref.sendVideo;
333
- return _promise.default.resolve().then(function () {
334
- if (!navigator.mediaDevices || navigator.mediaDevices.enumerateDevices === undefined) {
335
- return {
336
- sendAudio: false,
337
- sendVideo: false
338
- };
339
- }
340
- return navigator.mediaDevices.enumerateDevices().then(function (devices) {
341
- var supported = {
342
- audio: devices.filter(function (device) {
343
- return device.kind === _constants.AUDIO_INPUT;
344
- }).length > 0,
345
- video: devices.filter(function (device) {
346
- return device.kind === _constants.VIDEO_INPUT;
347
- }).length > 0
348
- };
349
- return {
350
- sendAudio: supported.audio && sendAudio,
351
- sendVideo: supported.video && sendVideo
352
- };
353
- });
354
- });
355
- };
356
-
357
- /**
358
- * proxy to browser navigator.mediaDevices.enumerateDevices()
359
- * @returns {Promise}
360
- */
361
- Media.getDevices = function () {
362
- if (navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {
363
- return navigator.mediaDevices.enumerateDevices();
364
- }
365
- return _promise.default.reject(new _media.default('enumerateDevices not supported.'));
366
- };
367
-
368
312
  /**
369
313
  *
370
314
  * Toggle a specific stream
@@ -375,20 +319,18 @@ Media.toggleStream = function () {};
375
319
 
376
320
  /**
377
321
  * Stop input stream
378
- * @param {MediaTrack} track A media stream
322
+ * @param {LocalStream} stream A local stream
379
323
  * @returns {null}
380
324
  */
381
- Media.stopTracks = function (track) {
382
- if (!track) {
325
+ Media.stopStream = function (stream) {
326
+ if (!stream) {
383
327
  return _promise.default.resolve();
384
328
  }
385
329
  return _promise.default.resolve().then(function () {
386
- if (track && track.stop) {
387
- try {
388
- track.stop();
389
- } catch (e) {
390
- _loggerProxy.default.logger.error("Media:index#stopTracks --> Unable to stop the track with state ".concat(track.readyState, ", error: ").concat(e));
391
- }
330
+ try {
331
+ stream.stop();
332
+ } catch (e) {
333
+ _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));
392
334
  }
393
335
  });
394
336
  };
@@ -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","isMultistream","debugId","mediaProperties","remoteQualityLevel","enableRtx","enableExtmap","turnServerInfo","iceServers","push","urls","url","username","credential","password","MultistreamRoapMediaConnection","Error","mediaDirection","audioTrack","videoTrack","shareTrack","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","facingMode","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","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 {RoapMediaConnection, MultistreamRoapMediaConnection} from '@webex/internal-media-core';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {AUDIO_INPUT, VIDEO_INPUT, MEDIA_TRACK_CONSTRAINT} from '../constants';\nimport Config from '../config';\nimport StaticConfig from '../common/config';\nimport MediaError from '../common/errors/media';\nimport BrowserDetection from '../common/browser-detection';\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: any = {};\n\n/**\n * @param {boolean} enabled\n * @param {MediaStreamTrack} track\n * @returns {Boolean}\n * @public\n */\nMedia.setLocalTrack = (enabled: boolean, track: MediaStreamTrack) => {\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: string, audioMuted: boolean, videoMuted: boolean) => {\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: 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\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} options\n * @param {Object} [options.mediaProperties] only applicable to non-multistream connections, contains mediaDirection and local tracks:\n * audioTrack, videoTrack and shareTrack\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 = (\n isMultistream: boolean,\n debugId: string,\n options: {\n mediaProperties?: {\n mediaDirection?: {\n receiveAudio: boolean;\n receiveVideo: boolean;\n receiveShare: boolean;\n };\n audioTrack?: MediaStreamTrack;\n videoTrack?: MediaStreamTrack;\n shareTrack?: MediaStreamTrack;\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 }\n) => {\n const {mediaProperties, remoteQualityLevel, enableRtx, enableExtmap, turnServerInfo} = 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 return new MultistreamRoapMediaConnection(\n {\n iceServers,\n },\n debugId\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, audioTrack, videoTrack, shareTrack} = 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 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 },\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 * 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}: {sendAudio: boolean; sendVideo: boolean}) =>\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: any) => {\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 } catch (e) {\n LoggerProxy.logger.error(\n `Media:index#stopTracks --> Unable to stop the track with state ${track.readyState}, error: ${e}`\n );\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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"}
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","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 (data) => rtcMetrics.addMetrics(data),\n () => rtcMetrics.closeMetrics()\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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"}