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

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 (311) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/common/browser-detection.js +1 -20
  4. package/dist/common/browser-detection.js.map +1 -1
  5. package/dist/common/collection.js +5 -20
  6. package/dist/common/collection.js.map +1 -1
  7. package/dist/common/config.js +0 -7
  8. package/dist/common/config.js.map +1 -1
  9. package/dist/common/errors/captcha-error.js +5 -26
  10. package/dist/common/errors/captcha-error.js.map +1 -1
  11. package/dist/common/errors/intent-to-join.js +5 -26
  12. package/dist/common/errors/intent-to-join.js.map +1 -1
  13. package/dist/common/errors/join-meeting.js +6 -27
  14. package/dist/common/errors/join-meeting.js.map +1 -1
  15. package/dist/common/errors/media.js +5 -26
  16. package/dist/common/errors/media.js.map +1 -1
  17. package/dist/common/errors/parameter.js +5 -33
  18. package/dist/common/errors/parameter.js.map +1 -1
  19. package/dist/common/errors/password-error.js +5 -26
  20. package/dist/common/errors/password-error.js.map +1 -1
  21. package/dist/common/errors/permission.js +4 -25
  22. package/dist/common/errors/permission.js.map +1 -1
  23. package/dist/common/errors/reconnection-in-progress.js +0 -17
  24. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  25. package/dist/common/errors/reconnection.js +5 -26
  26. package/dist/common/errors/reconnection.js.map +1 -1
  27. package/dist/common/errors/stats.js +5 -26
  28. package/dist/common/errors/stats.js.map +1 -1
  29. package/dist/common/errors/webex-errors.js +6 -41
  30. package/dist/common/errors/webex-errors.js.map +1 -1
  31. package/dist/common/errors/webex-meetings-error.js +1 -24
  32. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  33. package/dist/common/events/events-scope.js +0 -22
  34. package/dist/common/events/events-scope.js.map +1 -1
  35. package/dist/common/events/events.js +0 -23
  36. package/dist/common/events/events.js.map +1 -1
  37. package/dist/common/events/trigger-proxy.js +0 -12
  38. package/dist/common/events/trigger-proxy.js.map +1 -1
  39. package/dist/common/events/util.js +0 -15
  40. package/dist/common/events/util.js.map +1 -1
  41. package/dist/common/logs/logger-config.js +0 -4
  42. package/dist/common/logs/logger-config.js.map +1 -1
  43. package/dist/common/logs/logger-proxy.js +1 -8
  44. package/dist/common/logs/logger-proxy.js.map +1 -1
  45. package/dist/common/logs/request.js +35 -61
  46. package/dist/common/logs/request.js.map +1 -1
  47. package/dist/common/queue.js +4 -14
  48. package/dist/common/queue.js.map +1 -1
  49. package/dist/config.js +1 -5
  50. package/dist/config.js.map +1 -1
  51. package/dist/constants.js +45 -40
  52. package/dist/constants.js.map +1 -1
  53. package/dist/index.js +1 -17
  54. package/dist/index.js.map +1 -1
  55. package/dist/locus-info/controlsUtils.js +10 -28
  56. package/dist/locus-info/controlsUtils.js.map +1 -1
  57. package/dist/locus-info/embeddedAppsUtils.js +3 -26
  58. package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
  59. package/dist/locus-info/fullState.js +0 -15
  60. package/dist/locus-info/fullState.js.map +1 -1
  61. package/dist/locus-info/hostUtils.js +4 -12
  62. package/dist/locus-info/hostUtils.js.map +1 -1
  63. package/dist/locus-info/index.js +101 -193
  64. package/dist/locus-info/index.js.map +1 -1
  65. package/dist/locus-info/infoUtils.js +0 -38
  66. package/dist/locus-info/infoUtils.js.map +1 -1
  67. package/dist/locus-info/mediaSharesUtils.js +12 -38
  68. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  69. package/dist/locus-info/parser.js +87 -123
  70. package/dist/locus-info/parser.js.map +1 -1
  71. package/dist/locus-info/selfUtils.js +16 -81
  72. package/dist/locus-info/selfUtils.js.map +1 -1
  73. package/dist/media/index.js +43 -97
  74. package/dist/media/index.js.map +1 -1
  75. package/dist/media/internal-media-core-wrapper.js +0 -4
  76. package/dist/media/internal-media-core-wrapper.js.map +1 -1
  77. package/dist/media/properties.js +64 -110
  78. package/dist/media/properties.js.map +1 -1
  79. package/dist/media/util.js +2 -9
  80. package/dist/media/util.js.map +1 -1
  81. package/dist/mediaQualityMetrics/config.js +10 -12
  82. package/dist/mediaQualityMetrics/config.js.map +1 -1
  83. package/dist/meeting/effectsState.js +120 -192
  84. package/dist/meeting/effectsState.js.map +1 -1
  85. package/dist/meeting/in-meeting-actions.js +0 -13
  86. package/dist/meeting/in-meeting-actions.js.map +1 -1
  87. package/dist/meeting/index.js +819 -1591
  88. package/dist/meeting/index.js.map +1 -1
  89. package/dist/meeting/muteState.js +31 -78
  90. package/dist/meeting/muteState.js.map +1 -1
  91. package/dist/meeting/request.js +160 -230
  92. package/dist/meeting/request.js.map +1 -1
  93. package/dist/meeting/request.type.js +0 -1
  94. package/dist/meeting/request.type.js.map +1 -1
  95. package/dist/meeting/state.js +21 -31
  96. package/dist/meeting/state.js.map +1 -1
  97. package/dist/meeting/util.js +19 -158
  98. package/dist/meeting/util.js.map +1 -1
  99. package/dist/meeting-info/collection.js +3 -25
  100. package/dist/meeting-info/collection.js.map +1 -1
  101. package/dist/meeting-info/index.js +10 -33
  102. package/dist/meeting-info/index.js.map +1 -1
  103. package/dist/meeting-info/meeting-info-v2.js +179 -268
  104. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  105. package/dist/meeting-info/request.js +1 -16
  106. package/dist/meeting-info/request.js.map +1 -1
  107. package/dist/meeting-info/util.js +98 -183
  108. package/dist/meeting-info/util.js.map +1 -1
  109. package/dist/meeting-info/utilv2.js +137 -228
  110. package/dist/meeting-info/utilv2.js.map +1 -1
  111. package/dist/meetings/collection.js +3 -21
  112. package/dist/meetings/collection.js.map +1 -1
  113. package/dist/meetings/index.js +450 -582
  114. package/dist/meetings/index.js.map +1 -1
  115. package/dist/meetings/request.js +7 -30
  116. package/dist/meetings/request.js.map +1 -1
  117. package/dist/meetings/util.js +99 -155
  118. package/dist/meetings/util.js.map +1 -1
  119. package/dist/member/index.js +49 -89
  120. package/dist/member/index.js.map +1 -1
  121. package/dist/member/util.js +17 -68
  122. package/dist/member/util.js.map +1 -1
  123. package/dist/members/collection.js +2 -12
  124. package/dist/members/collection.js.map +1 -1
  125. package/dist/members/index.js +72 -194
  126. package/dist/members/index.js.map +1 -1
  127. package/dist/members/request.js +21 -56
  128. package/dist/members/request.js.map +1 -1
  129. package/dist/members/util.js +9 -38
  130. package/dist/members/util.js.map +1 -1
  131. package/dist/metrics/config.js +0 -2
  132. package/dist/metrics/config.js.map +1 -1
  133. package/dist/metrics/constants.js +1 -2
  134. package/dist/metrics/constants.js.map +1 -1
  135. package/dist/metrics/index.js +48 -136
  136. package/dist/metrics/index.js.map +1 -1
  137. package/dist/multistream/mediaRequestManager.js +12 -28
  138. package/dist/multistream/mediaRequestManager.js.map +1 -1
  139. package/dist/multistream/multistreamMedia.js +11 -21
  140. package/dist/multistream/multistreamMedia.js.map +1 -1
  141. package/dist/multistream/receiveSlot.js +7 -47
  142. package/dist/multistream/receiveSlot.js.map +1 -1
  143. package/dist/multistream/receiveSlotManager.js +38 -77
  144. package/dist/multistream/receiveSlotManager.js.map +1 -1
  145. package/dist/multistream/remoteMedia.js +11 -56
  146. package/dist/multistream/remoteMedia.js.map +1 -1
  147. package/dist/multistream/remoteMediaGroup.js +6 -40
  148. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  149. package/dist/multistream/remoteMediaManager.js +221 -380
  150. package/dist/multistream/remoteMediaManager.js.map +1 -1
  151. package/dist/networkQualityMonitor/index.js +28 -57
  152. package/dist/networkQualityMonitor/index.js.map +1 -1
  153. package/dist/personal-meeting-room/index.js +10 -45
  154. package/dist/personal-meeting-room/index.js.map +1 -1
  155. package/dist/personal-meeting-room/request.js +2 -33
  156. package/dist/personal-meeting-room/request.js.map +1 -1
  157. package/dist/personal-meeting-room/util.js +0 -13
  158. package/dist/personal-meeting-room/util.js.map +1 -1
  159. package/dist/reachability/index.js +100 -166
  160. package/dist/reachability/index.js.map +1 -1
  161. package/dist/reachability/request.js +2 -18
  162. package/dist/reachability/request.js.map +1 -1
  163. package/dist/reactions/reactions.js +0 -2
  164. package/dist/reactions/reactions.js.map +1 -1
  165. package/dist/reactions/reactions.type.js +2 -6
  166. package/dist/reactions/reactions.type.js.map +1 -1
  167. package/dist/reconnection-manager/index.js +294 -459
  168. package/dist/reconnection-manager/index.js.map +1 -1
  169. package/dist/roap/index.js +18 -53
  170. package/dist/roap/index.js.map +1 -1
  171. package/dist/roap/request.js +13 -55
  172. package/dist/roap/request.js.map +1 -1
  173. package/dist/roap/turnDiscovery.js +10 -52
  174. package/dist/roap/turnDiscovery.js.map +1 -1
  175. package/dist/statsAnalyzer/global.js +0 -2
  176. package/dist/statsAnalyzer/global.js.map +1 -1
  177. package/dist/statsAnalyzer/index.js +66 -174
  178. package/dist/statsAnalyzer/index.js.map +1 -1
  179. package/dist/statsAnalyzer/mqaUtil.js +54 -53
  180. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  181. package/dist/transcription/index.js +13 -45
  182. package/dist/transcription/index.js.map +1 -1
  183. package/internal-README.md +7 -6
  184. package/package.json +18 -18
  185. package/src/common/browser-detection.ts +9 -6
  186. package/src/common/collection.ts +3 -1
  187. package/src/common/errors/captcha-error.ts +6 -6
  188. package/src/common/errors/intent-to-join.ts +6 -6
  189. package/src/common/errors/join-meeting.ts +12 -8
  190. package/src/common/errors/media.ts +6 -6
  191. package/src/common/errors/parameter.ts +9 -6
  192. package/src/common/errors/password-error.ts +6 -6
  193. package/src/common/errors/permission.ts +5 -5
  194. package/src/common/errors/reconnection.ts +6 -6
  195. package/src/common/errors/stats.ts +6 -6
  196. package/src/common/errors/webex-errors.ts +7 -5
  197. package/src/common/errors/webex-meetings-error.ts +1 -1
  198. package/src/common/events/events-scope.ts +5 -1
  199. package/src/common/events/events.ts +5 -1
  200. package/src/common/events/trigger-proxy.ts +8 -3
  201. package/src/common/events/util.ts +1 -2
  202. package/src/common/logs/logger-proxy.ts +21 -10
  203. package/src/common/logs/request.ts +11 -8
  204. package/src/config.ts +11 -11
  205. package/src/constants.ts +1 -1
  206. package/src/index.js +1 -1
  207. package/src/locus-info/controlsUtils.ts +34 -24
  208. package/src/locus-info/fullState.ts +15 -11
  209. package/src/locus-info/hostUtils.ts +4 -3
  210. package/src/locus-info/index.ts +25 -34
  211. package/src/locus-info/infoUtils.ts +12 -4
  212. package/src/locus-info/mediaSharesUtils.ts +4 -4
  213. package/src/locus-info/parser.ts +45 -68
  214. package/src/locus-info/selfUtils.ts +106 -57
  215. package/src/media/index.ts +123 -135
  216. package/src/media/internal-media-core-wrapper.ts +2 -2
  217. package/src/media/properties.ts +30 -20
  218. package/src/media/util.ts +1 -1
  219. package/src/mediaQualityMetrics/config.ts +46 -46
  220. package/src/meeting/effectsState.ts +35 -35
  221. package/src/meeting/in-meeting-actions.ts +7 -3
  222. package/src/meeting/index.ts +1559 -1292
  223. package/src/meeting/muteState.ts +62 -31
  224. package/src/meeting/request.ts +155 -116
  225. package/src/meeting/request.type.ts +8 -8
  226. package/src/meeting/state.ts +45 -30
  227. package/src/meeting/util.ts +101 -70
  228. package/src/meeting-info/collection.ts +2 -1
  229. package/src/meeting-info/index.ts +32 -30
  230. package/src/meeting-info/meeting-info-v2.ts +106 -108
  231. package/src/meeting-info/request.ts +9 -3
  232. package/src/meeting-info/util.ts +54 -46
  233. package/src/meeting-info/utilv2.ts +59 -53
  234. package/src/meetings/collection.ts +1 -1
  235. package/src/meetings/index.ts +512 -440
  236. package/src/meetings/request.ts +26 -24
  237. package/src/meetings/util.ts +29 -29
  238. package/src/member/index.ts +55 -49
  239. package/src/member/util.ts +26 -13
  240. package/src/members/collection.ts +0 -1
  241. package/src/members/index.ts +182 -126
  242. package/src/members/request.ts +46 -14
  243. package/src/members/util.ts +44 -42
  244. package/src/metrics/config.ts +254 -81
  245. package/src/metrics/constants.ts +0 -2
  246. package/src/metrics/index.ts +84 -71
  247. package/src/multistream/multistreamMedia.ts +1 -0
  248. package/src/multistream/receiveSlot.ts +1 -0
  249. package/src/multistream/receiveSlotManager.ts +1 -0
  250. package/src/multistream/remoteMedia.ts +1 -1
  251. package/src/multistream/remoteMediaGroup.ts +2 -1
  252. package/src/multistream/remoteMediaManager.ts +3 -0
  253. package/src/networkQualityMonitor/index.ts +20 -23
  254. package/src/personal-meeting-room/index.ts +12 -16
  255. package/src/personal-meeting-room/request.ts +10 -3
  256. package/src/personal-meeting-room/util.ts +3 -3
  257. package/src/reachability/index.ts +61 -59
  258. package/src/reachability/request.ts +36 -32
  259. package/src/reactions/reactions.ts +4 -4
  260. package/src/reactions/reactions.type.ts +4 -3
  261. package/src/reconnection-manager/index.ts +139 -84
  262. package/src/roap/index.ts +46 -38
  263. package/src/roap/request.ts +44 -31
  264. package/src/roap/turnDiscovery.ts +59 -30
  265. package/src/statsAnalyzer/global.ts +30 -33
  266. package/src/statsAnalyzer/index.ts +432 -175
  267. package/src/statsAnalyzer/mqaUtil.ts +178 -72
  268. package/src/transcription/index.ts +34 -32
  269. package/test/integration/spec/journey.js +664 -463
  270. package/test/integration/spec/space-meeting.js +319 -204
  271. package/test/integration/spec/transcription.js +7 -8
  272. package/test/unit/spec/common/browser-detection.js +9 -28
  273. package/test/unit/spec/fixture/locus.js +92 -90
  274. package/test/unit/spec/locus-info/controlsUtils.js +5 -5
  275. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  276. package/test/unit/spec/locus-info/index.js +1 -2
  277. package/test/unit/spec/locus-info/infoUtils.js +26 -33
  278. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  279. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  280. package/test/unit/spec/locus-info/parser.js +3 -9
  281. package/test/unit/spec/locus-info/selfConstant.js +72 -103
  282. package/test/unit/spec/locus-info/selfUtils.js +21 -12
  283. package/test/unit/spec/meeting/effectsState.js +36 -46
  284. package/test/unit/spec/meeting/in-meeting-actions.ts +2 -3
  285. package/test/unit/spec/meeting/index.js +1279 -685
  286. package/test/unit/spec/meeting/muteState.js +42 -33
  287. package/test/unit/spec/meeting/request.js +57 -46
  288. package/test/unit/spec/meeting/utils.js +78 -53
  289. package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
  290. package/test/unit/spec/meeting-info/request.js +7 -9
  291. package/test/unit/spec/meeting-info/util.js +11 -12
  292. package/test/unit/spec/meeting-info/utilv2.js +110 -74
  293. package/test/unit/spec/meetings/collection.js +1 -1
  294. package/test/unit/spec/meetings/index.js +438 -257
  295. package/test/unit/spec/meetings/utils.js +14 -12
  296. package/test/unit/spec/member/index.js +0 -1
  297. package/test/unit/spec/member/util.js +5 -6
  298. package/test/unit/spec/members/index.js +104 -54
  299. package/test/unit/spec/members/request.js +29 -20
  300. package/test/unit/spec/members/utils.js +8 -5
  301. package/test/unit/spec/metrics/index.js +16 -21
  302. package/test/unit/spec/networkQualityMonitor/index.js +21 -15
  303. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  304. package/test/unit/spec/reachability/index.ts +9 -11
  305. package/test/unit/spec/reconnection-manager/index.js +16 -18
  306. package/test/unit/spec/roap/turnDiscovery.ts +22 -19
  307. package/test/unit/spec/stats-analyzer/index.js +25 -20
  308. package/test/utils/cmr.js +44 -42
  309. package/test/utils/testUtils.js +83 -74
  310. package/test/utils/webex-config.js +18 -18
  311. package/test/utils/webex-test-users.js +53 -50
@@ -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","stopStream","warn","getTracks","forEach","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 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: 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 {\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 *\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 {\n mediaProperties,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n turnServerInfo\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 return new MultistreamRoapMediaConnection({\n iceServers,\n }, debugId);\n }\n\n if (!mediaProperties) {\n throw new Error('mediaProperties have to be provided for non-multistream media connections');\n }\n\n const {\n mediaDirection,\n audioTrack,\n videoTrack,\n shareTrack\n } = mediaProperties;\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 }, debugId);\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 {\n screenResolution,\n resolution,\n videoShareFrameRate,\n screenFrameRate,\n 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 }\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: any = {\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: 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\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 }: { 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 }\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: any) => {\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 = (\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) =>\nMedia.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","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","stopStream","warn","getTracks","forEach","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 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\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: 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 *\n * Stop input stream\n * @param {Stream} stream A media stream\n * @returns {null}\n * @deprecated after v1.89.3\n */\nMedia.stopStream = (stream: any) => {\n LoggerProxy.logger.warn(\n 'Media:index#stopStream --> [DEPRECATION WARNING]: stopStream has been deprecated after v1.89.3'\n );\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 } 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 = (\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,15 +1,11 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  _Object$defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
-
9
7
  exports.RoapMediaConnection = exports.MultistreamRoapMediaConnection = void 0;
10
-
11
8
  var _internalMediaCore = require("@webex/internal-media-core");
12
-
13
9
  /* We have this wrapper just because otherwise it's impossible to mock
14
10
  * RoapMediaConnection and MultistreamRoapMediaConnection constructors in unit tests,
15
11
  * because they are exported by @webex/internal-media-core as non-writable, non-configurable
@@ -1 +1 @@
1
- {"version":3,"names":["RoapMediaConnection","MC","MultistreamRoapMediaConnection"],"sources":["internal-media-core-wrapper.ts"],"sourcesContent":["import {MediaConnection as MC} from '@webex/internal-media-core';\n\n/* We have this wrapper just because otherwise it's impossible to mock\n * RoapMediaConnection and MultistreamRoapMediaConnection constructors in unit tests,\n * because they are exported by @webex/internal-media-core as non-writable, non-configurable\n * properties of MediaConnection and sinon doesn't allow spying on them or stubbing them.\n */\nexport const RoapMediaConnection = MC.RoapMediaConnection;\nexport const MultistreamRoapMediaConnection = MC.MultistreamRoapMediaConnection;\n"],"mappings":";;;;;;;;;;AAAA;;AAEA;AACA;AACA;AACA;AACA;AACO,IAAMA,mBAAmB,GAAGC,kCAAA,CAAGD,mBAA/B;;AACA,IAAME,8BAA8B,GAAGD,kCAAA,CAAGC,8BAA1C"}
1
+ {"version":3,"names":["RoapMediaConnection","MC","MultistreamRoapMediaConnection"],"sources":["internal-media-core-wrapper.ts"],"sourcesContent":["import {MediaConnection as MC} from '@webex/internal-media-core';\n\n/* We have this wrapper just because otherwise it's impossible to mock\n * RoapMediaConnection and MultistreamRoapMediaConnection constructors in unit tests,\n * because they are exported by @webex/internal-media-core as non-writable, non-configurable\n * properties of MediaConnection and sinon doesn't allow spying on them or stubbing them.\n */\nexport const {RoapMediaConnection} = MC;\nexport const {MultistreamRoapMediaConnection} = MC;\n"],"mappings":";;;;;;;AAAA;AAEA;AACA;AACA;AACA;AACA;AACO,IAAOA,mBAAmB,GAAIC,kCAAE,CAAzBD,mBAAmB;AAAO;AACjC,IAAOE,8BAA8B,GAAID,kCAAE,CAApCC,8BAA8B;AAAO"}
@@ -1,33 +1,20 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
-
7
5
  _Object$defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
-
11
8
  exports.default = void 0;
12
-
13
9
  var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));
14
-
15
10
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
16
-
17
11
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));
18
-
19
12
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
20
-
21
13
  var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
22
-
23
14
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
24
-
25
15
  var _internalMediaCore = require("@webex/internal-media-core");
26
-
27
16
  var _constants = require("../constants");
28
-
29
17
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
30
-
31
18
  /**
32
19
  * @class MediaProperties
33
20
  */
@@ -65,12 +52,11 @@ var MediaProperties = /*#__PURE__*/function () {
65
52
  this.mediaSettings = {};
66
53
  this.videoDeviceId = null;
67
54
  }
55
+
68
56
  /**
69
57
  * Retrieves the preferred video input device
70
58
  * @returns {Object|null}
71
59
  */
72
-
73
-
74
60
  (0, _createClass2.default)(MediaProperties, [{
75
61
  key: "getVideoDeviceId",
76
62
  value: function getVideoDeviceId() {
@@ -121,34 +107,34 @@ var MediaProperties = /*#__PURE__*/function () {
121
107
  value: function setRemoteShare(remoteShare) {
122
108
  this.remoteShare = remoteShare;
123
109
  }
110
+
124
111
  /**
125
112
  * Sets the remote audio track
126
113
  * @param {MediaTrack} remoteAudioTrack MediaTrack to save
127
114
  * @returns {void}
128
115
  */
129
-
130
116
  }, {
131
117
  key: "setRemoteAudioTrack",
132
118
  value: function setRemoteAudioTrack(remoteAudioTrack) {
133
119
  this.remoteAudioTrack = remoteAudioTrack;
134
120
  }
121
+
135
122
  /**
136
123
  * Sets the remote video track
137
124
  * @param {MediaTrack} remoteVideoTrack MediaTrack to save
138
125
  * @returns {void}
139
126
  */
140
-
141
127
  }, {
142
128
  key: "setRemoteVideoTrack",
143
129
  value: function setRemoteVideoTrack(remoteVideoTrack) {
144
130
  this.remoteVideoTrack = remoteVideoTrack;
145
131
  }
132
+
146
133
  /**
147
134
  * Stores the preferred video input device
148
135
  * @param {string} deviceId Preferred video input device
149
136
  * @returns {void}
150
137
  */
151
-
152
138
  }, {
153
139
  key: "setVideoDeviceId",
154
140
  value: function setVideoDeviceId(deviceId) {
@@ -174,25 +160,24 @@ var MediaProperties = /*#__PURE__*/function () {
174
160
  value: function unsetLocalAudioTrack() {
175
161
  this.audioTrack = null;
176
162
  }
163
+
177
164
  /**
178
165
  * Removes remote stream from class instance
179
166
  * @deprecated after v1.89.3
180
167
  * @returns {void}
181
168
  */
182
-
183
169
  }, {
184
170
  key: "unsetRemoteStream",
185
171
  value: function unsetRemoteStream() {
186
- _loggerProxy.default.logger.warn('Media:properties#unsetRemoteStream --> [DEPRECATION WARNING]: unsetRemoteStream has been deprecated after v1.89.3 (use unsetRemoteTracks instead)'); // unsets audio and video only
187
-
188
-
172
+ _loggerProxy.default.logger.warn('Media:properties#unsetRemoteStream --> [DEPRECATION WARNING]: unsetRemoteStream has been deprecated after v1.89.3 (use unsetRemoteTracks instead)');
173
+ // unsets audio and video only
189
174
  this.unsetRemoteMedia();
190
175
  }
176
+
191
177
  /**
192
178
  * Removes both remote audio and video from class instance
193
179
  * @returns {void}
194
180
  */
195
-
196
181
  }, {
197
182
  key: "unsetRemoteMedia",
198
183
  value: function unsetRemoteMedia() {
@@ -210,25 +195,24 @@ var MediaProperties = /*#__PURE__*/function () {
210
195
  this.unsetLocalVideoTrack();
211
196
  this.unsetLocalShareTrack();
212
197
  }
198
+
213
199
  /**
214
200
  * Removes remote stream and remote share from class instance
215
201
  * @deprecated after v1.89.3
216
202
  * @returns {void}
217
203
  */
218
-
219
204
  }, {
220
205
  key: "unsetRemoteStreams",
221
206
  value: function unsetRemoteStreams() {
222
207
  _loggerProxy.default.logger.warn('Media:properties#unsetRemoteStreams --> [DEPRECATION WARNING]: unsetRemoteStreams has been deprecated after v1.89.3 (use unsetRemoteTracks instead)');
223
-
224
208
  this.unsetRemoteStream();
225
209
  this.unsetRemoteShare();
226
210
  }
211
+
227
212
  /**
228
213
  * Unsets all remote tracks
229
214
  * @returns {void}
230
215
  */
231
-
232
216
  }, {
233
217
  key: "unsetRemoteTracks",
234
218
  value: function unsetRemoteTracks() {
@@ -241,167 +225,137 @@ var MediaProperties = /*#__PURE__*/function () {
241
225
  this.unsetLocalShareTrack();
242
226
  this.unsetRemoteShare();
243
227
  }
228
+
244
229
  /**
245
230
  * Removes both local and remote video stream from class instance
246
231
  * @deprecated after v1.89.3
247
232
  * @returns {void}
248
233
  */
249
-
250
234
  }, {
251
235
  key: "unsetMediaStreams",
252
236
  value: function unsetMediaStreams() {
253
237
  _loggerProxy.default.logger.warn('Media:properties#unsetMediaStreams --> [DEPRECATION WARNING]: unsetMediaStreams has been deprecated after v1.89.3 (use unsetMediaTracks instead)');
254
-
255
238
  this.unsetLocalVideoTrack();
256
239
  this.unsetRemoteStream();
257
240
  }
241
+
258
242
  /**
259
243
  * Removes both local and remote video stream from class instance
260
244
  * @returns {void}
261
245
  */
262
-
263
246
  }, {
264
247
  key: "unsetMediaTracks",
265
248
  value: function unsetMediaTracks() {
266
249
  this.unsetLocalVideoTrack();
267
250
  this.unsetRemoteMedia();
268
251
  }
252
+
269
253
  /**
270
254
  * Waits for the webrtc media connection to be connected.
271
255
  *
272
256
  * @returns {Promise<void>}
273
257
  */
274
-
275
258
  }, {
276
259
  key: "waitForMediaConnectionConnected",
277
260
  value: function waitForMediaConnectionConnected() {
278
261
  var _this = this;
279
-
280
262
  var isConnected = function isConnected() {
281
263
  return _this.webrtcMediaConnection.getConnectionState() === _internalMediaCore.MediaConnection.ConnectionState.Connected;
282
264
  };
283
-
284
265
  if (isConnected()) {
285
266
  return _promise.default.resolve();
286
267
  }
287
-
288
268
  return new _promise.default(function (resolve, reject) {
289
269
  var timer;
290
-
291
270
  var connectionStateListener = function connectionStateListener() {
292
271
  _loggerProxy.default.logger.log("Media:properties#waitForMediaConnectionConnected --> connection state: ".concat(_this.webrtcMediaConnection.getConnectionState()));
293
-
294
272
  if (isConnected()) {
295
273
  clearTimeout(timer);
296
-
297
274
  _this.webrtcMediaConnection.off(_internalMediaCore.MediaConnection.Event.CONNECTION_STATE_CHANGED, connectionStateListener);
298
-
299
275
  resolve();
300
276
  }
301
277
  };
302
-
303
278
  timer = setTimeout(function () {
304
279
  _this.webrtcMediaConnection.off(_internalMediaCore.MediaConnection.Event.CONNECTION_STATE_CHANGED, connectionStateListener);
305
-
306
280
  reject();
307
281
  }, _constants.PC_BAIL_TIMEOUT);
308
-
309
282
  _this.webrtcMediaConnection.on(_internalMediaCore.MediaConnection.Event.CONNECTION_STATE_CHANGED, connectionStateListener);
310
283
  });
311
284
  }
285
+
312
286
  /**
313
287
  * Returns the type of a connection that has been established
314
288
  *
315
289
  * @returns {Promise<'UDP' | 'TCP' | 'TURN-TLS' | 'TURN-TCP' | 'TURN-UDP' | 'unknown'>}
316
290
  */
317
-
318
291
  }, {
319
292
  key: "getCurrentConnectionType",
320
293
  value: function () {
321
294
  var _getCurrentConnectionType = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
322
295
  var allStatsReports, statsResult, successfulCandidatePairs, foundConnectionType;
323
296
  return _regenerator.default.wrap(function _callee$(_context) {
324
- while (1) {
325
- switch (_context.prev = _context.next) {
326
- case 0:
327
- _context.next = 2;
328
- return this.waitForMediaConnectionConnected();
329
-
330
- case 2:
331
- allStatsReports = [];
332
- _context.prev = 3;
333
- _context.next = 6;
334
- return this.webrtcMediaConnection.getStats();
335
-
336
- case 6:
337
- statsResult = _context.sent;
338
- statsResult.forEach(function (report) {
339
- return allStatsReports.push(report);
297
+ while (1) switch (_context.prev = _context.next) {
298
+ case 0:
299
+ _context.next = 2;
300
+ return this.waitForMediaConnectionConnected();
301
+ case 2:
302
+ allStatsReports = [];
303
+ _context.prev = 3;
304
+ _context.next = 6;
305
+ return this.webrtcMediaConnection.getStats();
306
+ case 6:
307
+ statsResult = _context.sent;
308
+ statsResult.forEach(function (report) {
309
+ return allStatsReports.push(report);
310
+ });
311
+ _context.next = 13;
312
+ break;
313
+ case 10:
314
+ _context.prev = 10;
315
+ _context.t0 = _context["catch"](3);
316
+ _loggerProxy.default.logger.warn("Media:properties#getCurrentConnectionType --> getStats() failed: ".concat(_context.t0));
317
+ case 13:
318
+ successfulCandidatePairs = allStatsReports.filter(function (report) {
319
+ var _report$state;
320
+ return report.type === 'candidate-pair' && ((_report$state = report.state) === null || _report$state === void 0 ? void 0 : _report$state.toLowerCase()) === 'succeeded';
321
+ });
322
+ foundConnectionType = 'unknown'; // all of the successful pairs should have the same connection type, so just return the type for the first one
323
+ successfulCandidatePairs.some(function (pair) {
324
+ var localCandidate = allStatsReports.find(function (report) {
325
+ return report.type === 'local-candidate' && report.id === pair.localCandidateId;
340
326
  });
341
- _context.next = 13;
342
- break;
343
-
344
- case 10:
345
- _context.prev = 10;
346
- _context.t0 = _context["catch"](3);
347
-
348
- _loggerProxy.default.logger.warn("Media:properties#getCurrentConnectionType --> getStats() failed: ".concat(_context.t0));
349
-
350
- case 13:
351
- successfulCandidatePairs = allStatsReports.filter(function (report) {
352
- var _report$state;
353
-
354
- return report.type === 'candidate-pair' && ((_report$state = report.state) === null || _report$state === void 0 ? void 0 : _report$state.toLowerCase()) === 'succeeded';
355
- });
356
- foundConnectionType = 'unknown'; // all of the successful pairs should have the same connection type, so just return the type for the first one
357
-
358
- successfulCandidatePairs.some(function (pair) {
359
- var localCandidate = allStatsReports.find(function (report) {
360
- return report.type === 'local-candidate' && report.id === pair.localCandidateId;
361
- });
362
-
363
- if (localCandidate === undefined) {
364
- _loggerProxy.default.logger.warn("Media:properties#getCurrentConnectionType --> failed to find local candidate \"".concat(pair.localCandidateId, "\" in getStats() results"));
365
-
366
- return false;
367
- }
368
-
369
- var connectionType;
370
-
371
- if (localCandidate.relayProtocol) {
372
- connectionType = "TURN-".concat(localCandidate.relayProtocol.toUpperCase());
373
- } else {
374
- var _localCandidate$proto;
375
-
376
- connectionType = (_localCandidate$proto = localCandidate.protocol) === null || _localCandidate$proto === void 0 ? void 0 : _localCandidate$proto.toUpperCase(); // it will be UDP or TCP
377
- }
378
-
379
- if (connectionType) {
380
- foundConnectionType = connectionType;
381
- return true;
382
- }
383
-
327
+ if (localCandidate === undefined) {
328
+ _loggerProxy.default.logger.warn("Media:properties#getCurrentConnectionType --> failed to find local candidate \"".concat(pair.localCandidateId, "\" in getStats() results"));
384
329
  return false;
385
- });
386
- return _context.abrupt("return", foundConnectionType);
387
-
388
- case 17:
389
- case "end":
390
- return _context.stop();
391
- }
330
+ }
331
+ var connectionType;
332
+ if (localCandidate.relayProtocol) {
333
+ connectionType = "TURN-".concat(localCandidate.relayProtocol.toUpperCase());
334
+ } else {
335
+ var _localCandidate$proto;
336
+ connectionType = (_localCandidate$proto = localCandidate.protocol) === null || _localCandidate$proto === void 0 ? void 0 : _localCandidate$proto.toUpperCase(); // it will be UDP or TCP
337
+ }
338
+
339
+ if (connectionType) {
340
+ foundConnectionType = connectionType;
341
+ return true;
342
+ }
343
+ return false;
344
+ });
345
+ return _context.abrupt("return", foundConnectionType);
346
+ case 17:
347
+ case "end":
348
+ return _context.stop();
392
349
  }
393
350
  }, _callee, this, [[3, 10]]);
394
351
  }));
395
-
396
352
  function getCurrentConnectionType() {
397
353
  return _getCurrentConnectionType.apply(this, arguments);
398
354
  }
399
-
400
355
  return getCurrentConnectionType;
401
356
  }()
402
357
  }]);
403
358
  return MediaProperties;
404
359
  }();
405
-
406
360
  exports.default = MediaProperties;
407
361
  //# sourceMappingURL=properties.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["MediaProperties","options","MEETINGS","webrtcMediaConnection","mediaDirection","videoTrack","audioTrack","shareTrack","remoteShare","remoteAudioTrack","remoteVideoTrack","localQualityLevel","QUALITY_LEVELS","remoteQualityLevel","HIGH","mediaSettings","videoDeviceId","type","values","mediaPeerConnection","deviceId","LoggerProxy","logger","warn","unsetRemoteMedia","unsetLocalVideoTrack","unsetLocalShareTrack","unsetRemoteStream","unsetRemoteShare","isConnected","getConnectionState","MC","ConnectionState","Connected","resolve","reject","timer","connectionStateListener","log","clearTimeout","off","Event","CONNECTION_STATE_CHANGED","setTimeout","PC_BAIL_TIMEOUT","on","waitForMediaConnectionConnected","allStatsReports","getStats","statsResult","forEach","report","push","successfulCandidatePairs","filter","state","toLowerCase","foundConnectionType","some","pair","localCandidate","find","id","localCandidateId","undefined","connectionType","relayProtocol","toUpperCase","protocol"],"sources":["properties.ts"],"sourcesContent":["import {MediaConnection as MC} from '@webex/internal-media-core';\n\nimport {\n MEETINGS,\n PC_BAIL_TIMEOUT,\n QUALITY_LEVELS\n} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\n/**\n * @class MediaProperties\n */\nexport default class MediaProperties {\n audioTrack: any;\n localQualityLevel: any;\n mediaDirection: any;\n mediaSettings: any;\n webrtcMediaConnection: any;\n remoteAudioTrack: any;\n remoteQualityLevel: any;\n remoteShare: any;\n remoteVideoTrack: any;\n shareTrack: any;\n videoDeviceId: any;\n videoTrack: any;\n namespace = MEETINGS;\n\n /**\n * @param {Object} [options] -- to auto construct\n * @returns {MediaProperties}\n */\n constructor(options: any = {}) {\n this.webrtcMediaConnection = null;\n this.mediaDirection = options.mediaDirection;\n this.videoTrack = options.videoTrack;\n this.audioTrack = options.audioTrack;\n this.shareTrack = options.shareTrack;\n this.remoteShare = options.remoteShare;\n this.remoteAudioTrack = options.remoteAudioTrack;\n this.remoteVideoTrack = options.remoteVideoTrack;\n this.localQualityLevel = options.localQualityLevel || QUALITY_LEVELS['720p'];\n this.remoteQualityLevel = options.remoteQualityLevel || QUALITY_LEVELS.HIGH;\n this.mediaSettings = {};\n this.videoDeviceId = null;\n }\n\n /**\n * Retrieves the preferred video input device\n * @returns {Object|null}\n */\n getVideoDeviceId() {\n return this.videoDeviceId || null;\n }\n\n setMediaDirection(mediaDirection) {\n this.mediaDirection = mediaDirection;\n }\n\n setMediaSettings(type, values) {\n this.mediaSettings[type] = values;\n }\n\n setMediaPeerConnection(mediaPeerConnection) {\n this.webrtcMediaConnection = mediaPeerConnection;\n }\n\n setLocalVideoTrack(videoTrack) {\n this.videoTrack = videoTrack;\n }\n\n setLocalAudioTrack(audioTrack) {\n this.audioTrack = audioTrack;\n }\n\n setLocalQualityLevel(localQualityLevel) {\n this.localQualityLevel = localQualityLevel;\n }\n\n setLocalShareTrack(shareTrack) {\n this.shareTrack = shareTrack;\n }\n\n setRemoteQualityLevel(remoteQualityLevel) {\n this.remoteQualityLevel = remoteQualityLevel;\n }\n\n setRemoteShare(remoteShare) {\n this.remoteShare = remoteShare;\n }\n\n /**\n * Sets the remote audio track\n * @param {MediaTrack} remoteAudioTrack MediaTrack to save\n * @returns {void}\n */\n setRemoteAudioTrack(remoteAudioTrack: any) {\n this.remoteAudioTrack = remoteAudioTrack;\n }\n\n /**\n * Sets the remote video track\n * @param {MediaTrack} remoteVideoTrack MediaTrack to save\n * @returns {void}\n */\n setRemoteVideoTrack(remoteVideoTrack: any) {\n this.remoteVideoTrack = remoteVideoTrack;\n }\n\n /**\n * Stores the preferred video input device\n * @param {string} deviceId Preferred video input device\n * @returns {void}\n */\n setVideoDeviceId(deviceId: string) {\n this.videoDeviceId = deviceId;\n }\n\n unsetPeerConnection() {\n this.webrtcMediaConnection = null;\n }\n\n unsetLocalVideoTrack() {\n this.videoTrack = null;\n }\n\n unsetLocalShareTrack() {\n this.shareTrack = null;\n }\n\n unsetLocalAudioTrack() {\n this.audioTrack = null;\n }\n\n /**\n * Removes remote stream from class instance\n * @deprecated after v1.89.3\n * @returns {void}\n */\n unsetRemoteStream() {\n LoggerProxy.logger.warn('Media:properties#unsetRemoteStream --> [DEPRECATION WARNING]: unsetRemoteStream has been deprecated after v1.89.3 (use unsetRemoteTracks instead)');\n // unsets audio and video only\n this.unsetRemoteMedia();\n }\n\n /**\n * Removes both remote audio and video from class instance\n * @returns {void}\n */\n unsetRemoteMedia() {\n this.remoteAudioTrack = null;\n this.remoteVideoTrack = null;\n }\n\n unsetRemoteShare() {\n this.remoteShare = null;\n }\n\n unsetLocalVideoTracks() {\n this.unsetLocalVideoTrack();\n this.unsetLocalShareTrack();\n }\n\n /**\n * Removes remote stream and remote share from class instance\n * @deprecated after v1.89.3\n * @returns {void}\n */\n unsetRemoteStreams() {\n LoggerProxy.logger.warn('Media:properties#unsetRemoteStreams --> [DEPRECATION WARNING]: unsetRemoteStreams has been deprecated after v1.89.3 (use unsetRemoteTracks instead)');\n this.unsetRemoteStream();\n this.unsetRemoteShare();\n }\n\n /**\n * Unsets all remote tracks\n * @returns {void}\n */\n unsetRemoteTracks() {\n this.unsetRemoteMedia();\n this.unsetRemoteShare();\n }\n\n unsetShareStreams() {\n this.unsetLocalShareTrack();\n this.unsetRemoteShare();\n }\n\n /**\n * Removes both local and remote video stream from class instance\n * @deprecated after v1.89.3\n * @returns {void}\n */\n unsetMediaStreams() {\n LoggerProxy.logger.warn('Media:properties#unsetMediaStreams --> [DEPRECATION WARNING]: unsetMediaStreams has been deprecated after v1.89.3 (use unsetMediaTracks instead)');\n this.unsetLocalVideoTrack();\n this.unsetRemoteStream();\n }\n\n /**\n * Removes both local and remote video stream from class instance\n * @returns {void}\n */\n unsetMediaTracks() {\n this.unsetLocalVideoTrack();\n this.unsetRemoteMedia();\n }\n\n /**\n * Waits for the webrtc media connection to be connected.\n *\n * @returns {Promise<void>}\n */\n waitForMediaConnectionConnected() {\n const isConnected = () => (\n this.webrtcMediaConnection.getConnectionState() === MC.ConnectionState.Connected\n );\n\n if (isConnected()) {\n return Promise.resolve();\n }\n\n return new Promise((resolve, reject) => {\n let timer;\n\n const connectionStateListener = () => {\n LoggerProxy.logger.log(`Media:properties#waitForMediaConnectionConnected --> connection state: ${this.webrtcMediaConnection.getConnectionState()}`);\n\n if (isConnected()) {\n clearTimeout(timer);\n this.webrtcMediaConnection.off(MC.Event.CONNECTION_STATE_CHANGED, connectionStateListener);\n resolve();\n }\n };\n\n timer = setTimeout(() => {\n this.webrtcMediaConnection.off(MC.Event.CONNECTION_STATE_CHANGED, connectionStateListener);\n reject();\n }, PC_BAIL_TIMEOUT);\n\n this.webrtcMediaConnection.on(MC.Event.CONNECTION_STATE_CHANGED, connectionStateListener);\n });\n }\n\n /**\n * Returns the type of a connection that has been established\n *\n * @returns {Promise<'UDP' | 'TCP' | 'TURN-TLS' | 'TURN-TCP' | 'TURN-UDP' | 'unknown'>}\n */\n async getCurrentConnectionType() {\n // we can only get the connection type after ICE connection has been established\n await this.waitForMediaConnectionConnected();\n\n const allStatsReports = [];\n\n try {\n // eslint-disable-next-line no-await-in-loop\n const statsResult = await this.webrtcMediaConnection.getStats();\n\n statsResult.forEach((report) => allStatsReports.push(report));\n }\n catch (error) {\n LoggerProxy.logger.warn(`Media:properties#getCurrentConnectionType --> getStats() failed: ${error}`);\n }\n\n const successfulCandidatePairs = allStatsReports.filter(\n (report) => report.type === 'candidate-pair' && report.state?.toLowerCase() === 'succeeded'\n );\n\n let foundConnectionType = 'unknown';\n\n // all of the successful pairs should have the same connection type, so just return the type for the first one\n successfulCandidatePairs.some((pair) => {\n const localCandidate = allStatsReports.find((report) => report.type === 'local-candidate' && report.id === pair.localCandidateId);\n\n if (localCandidate === undefined) {\n LoggerProxy.logger.warn(`Media:properties#getCurrentConnectionType --> failed to find local candidate \"${pair.localCandidateId}\" in getStats() results`);\n\n return false;\n }\n\n let connectionType;\n\n if (localCandidate.relayProtocol) {\n connectionType = `TURN-${localCandidate.relayProtocol.toUpperCase()}`;\n }\n else {\n connectionType = localCandidate.protocol?.toUpperCase(); // it will be UDP or TCP\n }\n\n if (connectionType) {\n foundConnectionType = connectionType;\n\n return true;\n }\n\n return false;\n });\n\n return foundConnectionType;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["MediaProperties","options","MEETINGS","webrtcMediaConnection","mediaDirection","videoTrack","audioTrack","shareTrack","remoteShare","remoteAudioTrack","remoteVideoTrack","localQualityLevel","QUALITY_LEVELS","remoteQualityLevel","HIGH","mediaSettings","videoDeviceId","type","values","mediaPeerConnection","deviceId","LoggerProxy","logger","warn","unsetRemoteMedia","unsetLocalVideoTrack","unsetLocalShareTrack","unsetRemoteStream","unsetRemoteShare","isConnected","getConnectionState","MC","ConnectionState","Connected","resolve","reject","timer","connectionStateListener","log","clearTimeout","off","Event","CONNECTION_STATE_CHANGED","setTimeout","PC_BAIL_TIMEOUT","on","waitForMediaConnectionConnected","allStatsReports","getStats","statsResult","forEach","report","push","successfulCandidatePairs","filter","state","toLowerCase","foundConnectionType","some","pair","localCandidate","find","id","localCandidateId","undefined","connectionType","relayProtocol","toUpperCase","protocol"],"sources":["properties.ts"],"sourcesContent":["import {MediaConnection as MC} from '@webex/internal-media-core';\n\nimport {MEETINGS, PC_BAIL_TIMEOUT, QUALITY_LEVELS} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\n/**\n * @class MediaProperties\n */\nexport default class MediaProperties {\n audioTrack: any;\n localQualityLevel: any;\n mediaDirection: any;\n mediaSettings: any;\n webrtcMediaConnection: any;\n remoteAudioTrack: any;\n remoteQualityLevel: any;\n remoteShare: any;\n remoteVideoTrack: any;\n shareTrack: any;\n videoDeviceId: any;\n videoTrack: any;\n namespace = MEETINGS;\n\n /**\n * @param {Object} [options] -- to auto construct\n * @returns {MediaProperties}\n */\n constructor(options: any = {}) {\n this.webrtcMediaConnection = null;\n this.mediaDirection = options.mediaDirection;\n this.videoTrack = options.videoTrack;\n this.audioTrack = options.audioTrack;\n this.shareTrack = options.shareTrack;\n this.remoteShare = options.remoteShare;\n this.remoteAudioTrack = options.remoteAudioTrack;\n this.remoteVideoTrack = options.remoteVideoTrack;\n this.localQualityLevel = options.localQualityLevel || QUALITY_LEVELS['720p'];\n this.remoteQualityLevel = options.remoteQualityLevel || QUALITY_LEVELS.HIGH;\n this.mediaSettings = {};\n this.videoDeviceId = null;\n }\n\n /**\n * Retrieves the preferred video input device\n * @returns {Object|null}\n */\n getVideoDeviceId() {\n return this.videoDeviceId || null;\n }\n\n setMediaDirection(mediaDirection) {\n this.mediaDirection = mediaDirection;\n }\n\n setMediaSettings(type, values) {\n this.mediaSettings[type] = values;\n }\n\n setMediaPeerConnection(mediaPeerConnection) {\n this.webrtcMediaConnection = mediaPeerConnection;\n }\n\n setLocalVideoTrack(videoTrack) {\n this.videoTrack = videoTrack;\n }\n\n setLocalAudioTrack(audioTrack) {\n this.audioTrack = audioTrack;\n }\n\n setLocalQualityLevel(localQualityLevel) {\n this.localQualityLevel = localQualityLevel;\n }\n\n setLocalShareTrack(shareTrack) {\n this.shareTrack = shareTrack;\n }\n\n setRemoteQualityLevel(remoteQualityLevel) {\n this.remoteQualityLevel = remoteQualityLevel;\n }\n\n setRemoteShare(remoteShare) {\n this.remoteShare = remoteShare;\n }\n\n /**\n * Sets the remote audio track\n * @param {MediaTrack} remoteAudioTrack MediaTrack to save\n * @returns {void}\n */\n setRemoteAudioTrack(remoteAudioTrack: any) {\n this.remoteAudioTrack = remoteAudioTrack;\n }\n\n /**\n * Sets the remote video track\n * @param {MediaTrack} remoteVideoTrack MediaTrack to save\n * @returns {void}\n */\n setRemoteVideoTrack(remoteVideoTrack: any) {\n this.remoteVideoTrack = remoteVideoTrack;\n }\n\n /**\n * Stores the preferred video input device\n * @param {string} deviceId Preferred video input device\n * @returns {void}\n */\n setVideoDeviceId(deviceId: string) {\n this.videoDeviceId = deviceId;\n }\n\n unsetPeerConnection() {\n this.webrtcMediaConnection = null;\n }\n\n unsetLocalVideoTrack() {\n this.videoTrack = null;\n }\n\n unsetLocalShareTrack() {\n this.shareTrack = null;\n }\n\n unsetLocalAudioTrack() {\n this.audioTrack = null;\n }\n\n /**\n * Removes remote stream from class instance\n * @deprecated after v1.89.3\n * @returns {void}\n */\n unsetRemoteStream() {\n LoggerProxy.logger.warn(\n 'Media:properties#unsetRemoteStream --> [DEPRECATION WARNING]: unsetRemoteStream has been deprecated after v1.89.3 (use unsetRemoteTracks instead)'\n );\n // unsets audio and video only\n this.unsetRemoteMedia();\n }\n\n /**\n * Removes both remote audio and video from class instance\n * @returns {void}\n */\n unsetRemoteMedia() {\n this.remoteAudioTrack = null;\n this.remoteVideoTrack = null;\n }\n\n unsetRemoteShare() {\n this.remoteShare = null;\n }\n\n unsetLocalVideoTracks() {\n this.unsetLocalVideoTrack();\n this.unsetLocalShareTrack();\n }\n\n /**\n * Removes remote stream and remote share from class instance\n * @deprecated after v1.89.3\n * @returns {void}\n */\n unsetRemoteStreams() {\n LoggerProxy.logger.warn(\n 'Media:properties#unsetRemoteStreams --> [DEPRECATION WARNING]: unsetRemoteStreams has been deprecated after v1.89.3 (use unsetRemoteTracks instead)'\n );\n this.unsetRemoteStream();\n this.unsetRemoteShare();\n }\n\n /**\n * Unsets all remote tracks\n * @returns {void}\n */\n unsetRemoteTracks() {\n this.unsetRemoteMedia();\n this.unsetRemoteShare();\n }\n\n unsetShareStreams() {\n this.unsetLocalShareTrack();\n this.unsetRemoteShare();\n }\n\n /**\n * Removes both local and remote video stream from class instance\n * @deprecated after v1.89.3\n * @returns {void}\n */\n unsetMediaStreams() {\n LoggerProxy.logger.warn(\n 'Media:properties#unsetMediaStreams --> [DEPRECATION WARNING]: unsetMediaStreams has been deprecated after v1.89.3 (use unsetMediaTracks instead)'\n );\n this.unsetLocalVideoTrack();\n this.unsetRemoteStream();\n }\n\n /**\n * Removes both local and remote video stream from class instance\n * @returns {void}\n */\n unsetMediaTracks() {\n this.unsetLocalVideoTrack();\n this.unsetRemoteMedia();\n }\n\n /**\n * Waits for the webrtc media connection to be connected.\n *\n * @returns {Promise<void>}\n */\n waitForMediaConnectionConnected() {\n const isConnected = () =>\n this.webrtcMediaConnection.getConnectionState() === MC.ConnectionState.Connected;\n\n if (isConnected()) {\n return Promise.resolve();\n }\n\n return new Promise((resolve, reject) => {\n let timer;\n\n const connectionStateListener = () => {\n LoggerProxy.logger.log(\n `Media:properties#waitForMediaConnectionConnected --> connection state: ${this.webrtcMediaConnection.getConnectionState()}`\n );\n\n if (isConnected()) {\n clearTimeout(timer);\n this.webrtcMediaConnection.off(\n MC.Event.CONNECTION_STATE_CHANGED,\n connectionStateListener\n );\n resolve();\n }\n };\n\n timer = setTimeout(() => {\n this.webrtcMediaConnection.off(MC.Event.CONNECTION_STATE_CHANGED, connectionStateListener);\n reject();\n }, PC_BAIL_TIMEOUT);\n\n this.webrtcMediaConnection.on(MC.Event.CONNECTION_STATE_CHANGED, connectionStateListener);\n });\n }\n\n /**\n * Returns the type of a connection that has been established\n *\n * @returns {Promise<'UDP' | 'TCP' | 'TURN-TLS' | 'TURN-TCP' | 'TURN-UDP' | 'unknown'>}\n */\n async getCurrentConnectionType() {\n // we can only get the connection type after ICE connection has been established\n await this.waitForMediaConnectionConnected();\n\n const allStatsReports = [];\n\n try {\n // eslint-disable-next-line no-await-in-loop\n const statsResult = await this.webrtcMediaConnection.getStats();\n\n statsResult.forEach((report) => allStatsReports.push(report));\n } catch (error) {\n LoggerProxy.logger.warn(\n `Media:properties#getCurrentConnectionType --> getStats() failed: ${error}`\n );\n }\n\n const successfulCandidatePairs = allStatsReports.filter(\n (report) => report.type === 'candidate-pair' && report.state?.toLowerCase() === 'succeeded'\n );\n\n let foundConnectionType = 'unknown';\n\n // all of the successful pairs should have the same connection type, so just return the type for the first one\n successfulCandidatePairs.some((pair) => {\n const localCandidate = allStatsReports.find(\n (report) => report.type === 'local-candidate' && report.id === pair.localCandidateId\n );\n\n if (localCandidate === undefined) {\n LoggerProxy.logger.warn(\n `Media:properties#getCurrentConnectionType --> failed to find local candidate \"${pair.localCandidateId}\" in getStats() results`\n );\n\n return false;\n }\n\n let connectionType;\n\n if (localCandidate.relayProtocol) {\n connectionType = `TURN-${localCandidate.relayProtocol.toUpperCase()}`;\n } else {\n connectionType = localCandidate.protocol?.toUpperCase(); // it will be UDP or TCP\n }\n\n if (connectionType) {\n foundConnectionType = connectionType;\n\n return true;\n }\n\n return false;\n });\n\n return foundConnectionType;\n }\n}\n"],"mappings":"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"}
@@ -1,31 +1,24 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
-
7
5
  _Object$defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
-
11
8
  exports.default = void 0;
12
-
13
9
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
14
-
15
10
  /* globals MediaStream */
16
- var MediaUtil = {};
17
11
 
12
+ var MediaUtil = {};
18
13
  MediaUtil.createMediaStream = function (tracks) {
19
14
  if (!tracks) {
20
- _loggerProxy.default.logger.error('Media:util#createMediaStream --> Tracks don\'t exist');
15
+ _loggerProxy.default.logger.error("Media:util#createMediaStream --> Tracks don't exist");
21
16
  }
22
-
23
17
  var filtredTracks = tracks.filter(function (element) {
24
18
  return !!element;
25
19
  });
26
20
  return new MediaStream(filtredTracks);
27
21
  };
28
-
29
22
  var _default = MediaUtil;
30
23
  exports.default = _default;
31
24
  //# sourceMappingURL=util.js.map