@webex/plugin-meetings 2.36.1 → 2.37.1

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 (308) 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 +7 -46
  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 +46 -42
  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 -37
  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 +74 -137
  74. package/dist/media/index.js.map +1 -1
  75. package/dist/media/properties.js +64 -110
  76. package/dist/media/properties.js.map +1 -1
  77. package/dist/media/util.js +3 -17
  78. package/dist/media/util.js.map +1 -1
  79. package/dist/mediaQualityMetrics/config.js +10 -12
  80. package/dist/mediaQualityMetrics/config.js.map +1 -1
  81. package/dist/meeting/effectsState.js +120 -192
  82. package/dist/meeting/effectsState.js.map +1 -1
  83. package/dist/meeting/in-meeting-actions.js +0 -13
  84. package/dist/meeting/in-meeting-actions.js.map +1 -1
  85. package/dist/meeting/index.js +812 -1487
  86. package/dist/meeting/index.js.map +1 -1
  87. package/dist/meeting/muteState.js +31 -78
  88. package/dist/meeting/muteState.js.map +1 -1
  89. package/dist/meeting/request.js +157 -227
  90. package/dist/meeting/request.js.map +1 -1
  91. package/dist/meeting/state.js +21 -31
  92. package/dist/meeting/state.js.map +1 -1
  93. package/dist/meeting/util.js +25 -169
  94. package/dist/meeting/util.js.map +1 -1
  95. package/dist/meeting-info/collection.js +3 -25
  96. package/dist/meeting-info/collection.js.map +1 -1
  97. package/dist/meeting-info/index.js +10 -33
  98. package/dist/meeting-info/index.js.map +1 -1
  99. package/dist/meeting-info/meeting-info-v2.js +179 -268
  100. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  101. package/dist/meeting-info/request.js +1 -16
  102. package/dist/meeting-info/request.js.map +1 -1
  103. package/dist/meeting-info/util.js +98 -183
  104. package/dist/meeting-info/util.js.map +1 -1
  105. package/dist/meeting-info/utilv2.js +137 -228
  106. package/dist/meeting-info/utilv2.js.map +1 -1
  107. package/dist/meetings/collection.js +3 -21
  108. package/dist/meetings/collection.js.map +1 -1
  109. package/dist/meetings/index.js +451 -570
  110. package/dist/meetings/index.js.map +1 -1
  111. package/dist/meetings/request.js +7 -30
  112. package/dist/meetings/request.js.map +1 -1
  113. package/dist/meetings/util.js +94 -148
  114. package/dist/meetings/util.js.map +1 -1
  115. package/dist/member/index.js +49 -89
  116. package/dist/member/index.js.map +1 -1
  117. package/dist/member/util.js +17 -68
  118. package/dist/member/util.js.map +1 -1
  119. package/dist/members/collection.js +2 -12
  120. package/dist/members/collection.js.map +1 -1
  121. package/dist/members/index.js +68 -184
  122. package/dist/members/index.js.map +1 -1
  123. package/dist/members/request.js +21 -56
  124. package/dist/members/request.js.map +1 -1
  125. package/dist/members/util.js +9 -38
  126. package/dist/members/util.js.map +1 -1
  127. package/dist/metrics/config.js +0 -2
  128. package/dist/metrics/config.js.map +1 -1
  129. package/dist/metrics/constants.js +1 -2
  130. package/dist/metrics/constants.js.map +1 -1
  131. package/dist/metrics/index.js +48 -136
  132. package/dist/metrics/index.js.map +1 -1
  133. package/dist/networkQualityMonitor/index.js +28 -57
  134. package/dist/networkQualityMonitor/index.js.map +1 -1
  135. package/dist/peer-connection-manager/index.js +60 -190
  136. package/dist/peer-connection-manager/index.js.map +1 -1
  137. package/dist/peer-connection-manager/util.js +10 -24
  138. package/dist/peer-connection-manager/util.js.map +1 -1
  139. package/dist/personal-meeting-room/index.js +10 -45
  140. package/dist/personal-meeting-room/index.js.map +1 -1
  141. package/dist/personal-meeting-room/request.js +2 -33
  142. package/dist/personal-meeting-room/request.js.map +1 -1
  143. package/dist/personal-meeting-room/util.js +0 -13
  144. package/dist/personal-meeting-room/util.js.map +1 -1
  145. package/dist/reachability/index.js +100 -166
  146. package/dist/reachability/index.js.map +1 -1
  147. package/dist/reachability/request.js +2 -18
  148. package/dist/reachability/request.js.map +1 -1
  149. package/dist/reactions/reactions.js +0 -2
  150. package/dist/reactions/reactions.js.map +1 -1
  151. package/dist/reactions/reactions.type.js +0 -5
  152. package/dist/reactions/reactions.type.js.map +1 -1
  153. package/dist/reconnection-manager/index.js +294 -468
  154. package/dist/reconnection-manager/index.js.map +1 -1
  155. package/dist/roap/collection.js +1 -12
  156. package/dist/roap/collection.js.map +1 -1
  157. package/dist/roap/handler.js +15 -85
  158. package/dist/roap/handler.js.map +1 -1
  159. package/dist/roap/index.js +42 -94
  160. package/dist/roap/index.js.map +1 -1
  161. package/dist/roap/request.js +81 -148
  162. package/dist/roap/request.js.map +1 -1
  163. package/dist/roap/state.js +2 -39
  164. package/dist/roap/state.js.map +1 -1
  165. package/dist/roap/turnDiscovery.js +8 -52
  166. package/dist/roap/turnDiscovery.js.map +1 -1
  167. package/dist/roap/util.js +0 -26
  168. package/dist/roap/util.js.map +1 -1
  169. package/dist/statsAnalyzer/global.js +0 -2
  170. package/dist/statsAnalyzer/global.js.map +1 -1
  171. package/dist/statsAnalyzer/index.js +68 -168
  172. package/dist/statsAnalyzer/index.js.map +1 -1
  173. package/dist/statsAnalyzer/mqaUtil.js +54 -53
  174. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  175. package/dist/transcription/index.js +13 -45
  176. package/dist/transcription/index.js.map +1 -1
  177. package/internal-README.md +7 -6
  178. package/package.json +17 -17
  179. package/src/common/browser-detection.ts +9 -6
  180. package/src/common/collection.ts +3 -1
  181. package/src/common/errors/captcha-error.ts +6 -6
  182. package/src/common/errors/intent-to-join.ts +6 -6
  183. package/src/common/errors/join-meeting.ts +12 -8
  184. package/src/common/errors/media.ts +6 -6
  185. package/src/common/errors/parameter.ts +9 -6
  186. package/src/common/errors/password-error.ts +6 -6
  187. package/src/common/errors/permission.ts +5 -5
  188. package/src/common/errors/reconnection.ts +6 -6
  189. package/src/common/errors/stats.ts +6 -6
  190. package/src/common/errors/webex-errors.ts +7 -5
  191. package/src/common/errors/webex-meetings-error.ts +1 -1
  192. package/src/common/events/events-scope.ts +5 -1
  193. package/src/common/events/events.ts +5 -1
  194. package/src/common/events/trigger-proxy.ts +8 -3
  195. package/src/common/events/util.ts +1 -2
  196. package/src/common/logs/logger-proxy.ts +21 -10
  197. package/src/common/logs/request.ts +11 -8
  198. package/src/config.ts +11 -11
  199. package/src/constants.ts +138 -119
  200. package/src/index.js +1 -1
  201. package/src/locus-info/controlsUtils.ts +34 -24
  202. package/src/locus-info/fullState.ts +15 -11
  203. package/src/locus-info/hostUtils.ts +4 -3
  204. package/src/locus-info/index.ts +25 -34
  205. package/src/locus-info/infoUtils.ts +12 -4
  206. package/src/locus-info/mediaSharesUtils.ts +4 -4
  207. package/src/locus-info/parser.ts +45 -68
  208. package/src/locus-info/selfUtils.ts +106 -57
  209. package/src/media/index.ts +118 -109
  210. package/src/media/properties.ts +26 -20
  211. package/src/media/util.ts +2 -2
  212. package/src/mediaQualityMetrics/config.ts +46 -46
  213. package/src/meeting/effectsState.ts +35 -35
  214. package/src/meeting/in-meeting-actions.ts +7 -3
  215. package/src/meeting/index.ts +1435 -1210
  216. package/src/meeting/muteState.ts +62 -31
  217. package/src/meeting/request.ts +160 -113
  218. package/src/meeting/state.ts +45 -30
  219. package/src/meeting/util.ts +131 -90
  220. package/src/meeting-info/collection.ts +2 -1
  221. package/src/meeting-info/index.ts +32 -30
  222. package/src/meeting-info/meeting-info-v2.ts +106 -108
  223. package/src/meeting-info/request.ts +9 -3
  224. package/src/meeting-info/util.ts +54 -46
  225. package/src/meeting-info/utilv2.ts +59 -53
  226. package/src/meetings/collection.ts +1 -1
  227. package/src/meetings/index.ts +513 -441
  228. package/src/meetings/request.ts +26 -24
  229. package/src/meetings/util.ts +26 -23
  230. package/src/member/index.ts +55 -49
  231. package/src/member/util.ts +26 -13
  232. package/src/members/collection.ts +0 -1
  233. package/src/members/index.ts +172 -121
  234. package/src/members/request.ts +46 -14
  235. package/src/members/util.ts +44 -42
  236. package/src/metrics/config.ts +254 -81
  237. package/src/metrics/constants.ts +0 -2
  238. package/src/metrics/index.ts +84 -71
  239. package/src/networkQualityMonitor/index.ts +20 -23
  240. package/src/peer-connection-manager/index.ts +321 -241
  241. package/src/peer-connection-manager/util.ts +4 -2
  242. package/src/personal-meeting-room/index.ts +12 -16
  243. package/src/personal-meeting-room/request.ts +10 -3
  244. package/src/personal-meeting-room/util.ts +3 -3
  245. package/src/reachability/index.ts +61 -59
  246. package/src/reachability/request.ts +36 -32
  247. package/src/reactions/reactions.ts +4 -4
  248. package/src/reactions/reactions.type.ts +2 -3
  249. package/src/reconnection-manager/index.ts +159 -98
  250. package/src/roap/collection.ts +2 -4
  251. package/src/roap/handler.ts +63 -32
  252. package/src/roap/index.ts +78 -58
  253. package/src/roap/request.ts +69 -54
  254. package/src/roap/state.ts +17 -11
  255. package/src/roap/turnDiscovery.ts +60 -31
  256. package/src/roap/util.ts +39 -31
  257. package/src/statsAnalyzer/global.ts +30 -33
  258. package/src/statsAnalyzer/index.ts +397 -169
  259. package/src/statsAnalyzer/mqaUtil.ts +178 -72
  260. package/src/transcription/index.ts +34 -32
  261. package/test/integration/spec/journey.js +666 -462
  262. package/test/integration/spec/space-meeting.js +318 -203
  263. package/test/integration/spec/transcription.js +6 -7
  264. package/test/unit/spec/common/browser-detection.js +9 -28
  265. package/test/unit/spec/fixture/locus.js +92 -90
  266. package/test/unit/spec/locus-info/controlsUtils.js +5 -5
  267. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  268. package/test/unit/spec/locus-info/index.js +1 -2
  269. package/test/unit/spec/locus-info/infoUtils.js +24 -31
  270. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  271. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  272. package/test/unit/spec/locus-info/parser.js +3 -9
  273. package/test/unit/spec/locus-info/selfConstant.js +72 -103
  274. package/test/unit/spec/locus-info/selfUtils.js +21 -12
  275. package/test/unit/spec/meeting/effectsState.js +33 -45
  276. package/test/unit/spec/meeting/in-meeting-actions.ts +2 -3
  277. package/test/unit/spec/meeting/index.js +1141 -649
  278. package/test/unit/spec/meeting/muteState.js +42 -33
  279. package/test/unit/spec/meeting/request.js +56 -45
  280. package/test/unit/spec/meeting/utils.js +66 -49
  281. package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
  282. package/test/unit/spec/meeting-info/request.js +7 -9
  283. package/test/unit/spec/meeting-info/util.js +11 -12
  284. package/test/unit/spec/meeting-info/utilv2.js +110 -74
  285. package/test/unit/spec/meetings/collection.js +1 -1
  286. package/test/unit/spec/meetings/index.js +438 -257
  287. package/test/unit/spec/meetings/utils.js +14 -12
  288. package/test/unit/spec/member/index.js +0 -1
  289. package/test/unit/spec/member/util.js +5 -6
  290. package/test/unit/spec/members/index.js +84 -35
  291. package/test/unit/spec/members/request.js +29 -20
  292. package/test/unit/spec/members/utils.js +8 -5
  293. package/test/unit/spec/metrics/index.js +16 -21
  294. package/test/unit/spec/networkQualityMonitor/index.js +21 -15
  295. package/test/unit/spec/peerconnection-manager/index.js +88 -58
  296. package/test/unit/spec/peerconnection-manager/utils.js +5 -4
  297. package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +7 -8
  298. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  299. package/test/unit/spec/reachability/index.ts +9 -11
  300. package/test/unit/spec/reconnection-manager/index.js +14 -17
  301. package/test/unit/spec/roap/index.ts +18 -8
  302. package/test/unit/spec/roap/turnDiscovery.ts +22 -19
  303. package/test/unit/spec/roap/util.js +3 -3
  304. package/test/unit/spec/stats-analyzer/index.js +29 -24
  305. package/test/utils/cmr.js +44 -42
  306. package/test/utils/testUtils.js +83 -74
  307. package/test/utils/webex-config.js +18 -18
  308. package/test/utils/webex-test-users.js +53 -50
@@ -1 +1 @@
1
- {"version":3,"names":["BrowserDetection","isBrowser","Media","setLocalTrack","enabled","track","reconnectMedia","peerConnection","meetingId","remoteQualityLevel","enableRtx","enableExtmap","connectionState","PEER_CONNECTION_STATE","CLOSED","FAILED","reject","ReconnectionError","PeerConnectionManager","createOffer","generateLocalMedias","mediaId","audioMuted","videoMuted","localSdp","getLocalMedia","options","config","sendAudio","sendVideo","sendShare","sharePreferences","isSharing","getMedia","getDisplayMedia","resolve","undefined","checkTracks","trackType","receiveTracks","getDirection","sendTracks","direction","attachMedia","mediaProperties","mediaDirection","audioTrack","videoTrack","shareTrack","result","receiveAudio","audioTransceiver","addTransceiver","receiveVideo","videoTransceiver","receiveShare","shareTransceiver","onnegotiationneeded","event","LoggerProxy","logger","info","updateMedia","setTrackOnTransceiver","type","sendTrack","receiveTrack","transceiver","sender","replaceTrack","e","error","updateTransceiver","customResolution","screenResolution","customShareFrameRate","screenFrameRate","hasSharePreferences","hasCustomConstraints","shareConstraints","hasHighFrameRate","highFrameRate","Config","meetings","resolution","videoShareFrameRate","aspectRatio","cursor","MEDIA_TRACK_CONSTRAINT","CURSOR","AWLAYS","frameRate","height","idealHeight","width","idealWidth","mediaConfig","audio","video","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","constraint","getSupportedDevice","enumerateDevices","devices","supported","filter","device","kind","AUDIO_INPUT","VIDEO_INPUT","getDevices","MediaError","toggleStream","stopTracks","stop","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 PEER_CONNECTION_STATE,\n MEDIA_TRACK_CONSTRAINT\n} from '../constants';\nimport Config from '../config';\nimport PeerConnectionManager from '../peer-connection-manager';\nimport ReconnectionError from '../common/errors/reconnection';\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 * @param {RTCPeerConnection} peerConnection\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Promise}\n */\nMedia.reconnectMedia = (\n peerConnection: RTCPeerConnection,\n {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n }: {\n meetingId: string;\n remoteQualityLevel: string;\n enableRtx: any;\n enableExtmap: any\n }\n) => {\n if (peerConnection.connectionState === PEER_CONNECTION_STATE.CLOSED ||\n peerConnection.connectionState === PEER_CONNECTION_STATE.FAILED) {\n return Promise.reject(new ReconnectionError('Reinitiate peerconnection'));\n }\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n });\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 * Returns the direction and tracks\n * @param {string} trackType type of track (audio/video)\n * @param {object} track tracks passed\n * @param {boolean} receiveTracks do you want to receive tracks from the remote side\n * @returns {Object} returns direction tracks to be added in transceiver\n */\nMedia.checkTracks = (trackType: string, track: object, receiveTracks: boolean) => {\n const getDirection = (sendTracks, receiveTracks) => {\n if (sendTracks && receiveTracks) {\n return 'sendrecv';\n } if (sendTracks && !receiveTracks) {\n return 'sendonly';\n } if (!sendTracks && receiveTracks) {\n return 'recvonly';\n }\n\n return 'inactive';\n };\n\n if (track) {\n return {track, direction: getDirection(!!track, receiveTracks)};\n }\n\n return {track: trackType, direction: getDirection(!!track, receiveTracks)};\n};\n/**\n * creates peerconnection and attaches streams\n * @param {MediaDirection} mediaProperties\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Array} [peerConnection, ]\n */\nMedia.attachMedia = (\n mediaProperties: any,\n {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n }: {\n meetingId: string;\n remoteQualityLevel: string;\n enableRtx: any;\n enableExtmap: any;\n }\n) => {\n const {\n mediaDirection,\n audioTrack,\n videoTrack,\n shareTrack,\n peerConnection\n } = mediaProperties;\n\n let result = null;\n\n // Add Transceiver for audio\n result = Media.checkTracks('audio', mediaDirection.sendAudio && audioTrack, mediaDirection.receiveAudio);\n peerConnection.audioTransceiver = peerConnection.addTransceiver(result.track, {direction: result.direction});\n\n // Add Transceiver for video\n result = Media.checkTracks('video', mediaDirection.sendVideo && videoTrack, mediaDirection.receiveVideo);\n peerConnection.videoTransceiver = peerConnection.addTransceiver(result.track, {direction: result.direction});\n\n // Add Transceiver for share\n result = Media.checkTracks('video', mediaDirection.sendShare && shareTrack, mediaDirection.receiveShare);\n peerConnection.shareTransceiver = peerConnection.addTransceiver(result.track, {direction: result.direction});\n\n peerConnection.onnegotiationneeded = (event) => {\n LoggerProxy.logger.info(`Media:index#attachMedia --> onnegotiationneeded#PeerConnection: ${event}`);\n };\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n });\n};\n\n/**\n * updates all the media streams and creates a new media offer\n * @param {MediaDirection} mediaProperties\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Promise}\n */\nMedia.updateMedia = (\n mediaProperties: any,\n {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n }: {\n meetingId: string;\n remoteQualityLevel: string;\n enableRtx: any;\n enableExtmap: any;\n }\n) => {\n const {\n mediaDirection,\n audioTrack,\n videoTrack,\n shareTrack,\n peerConnection\n } = mediaProperties;\n\n // update audio transceiver\n Media.setTrackOnTransceiver(peerConnection.audioTransceiver, {\n type: 'audio',\n track: audioTrack,\n sendTrack: mediaDirection.sendAudio && audioTrack,\n receiveTrack: mediaDirection.receiveAudio\n });\n\n // update video transceiver\n Media.setTrackOnTransceiver(peerConnection.videoTransceiver, {\n type: 'video',\n track: videoTrack,\n sendTrack: mediaDirection.sendVideo && videoTrack,\n receiveTrack: mediaDirection.receiveVideo\n });\n\n // update content transceiver\n Media.setTrackOnTransceiver(peerConnection.shareTransceiver, {\n type: 'video',\n track: shareTrack,\n sendTrack: mediaDirection.sendShare && shareTrack,\n receiveTrack: mediaDirection.receiveShare\n });\n peerConnection.onnegotiationneeded = (event) => {\n LoggerProxy.logger.info(`Media:index#updateMedia --> onnegotiationneeded#PeerConnection: ${event}`);\n };\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\n });\n};\n\n/**\n * @param {RTCRtpTransceiver} transceiver\n * @param {Object} options\n * @param {MediaStreamTrack} options.track\n * @returns {undefined}\n */\nMedia.setTrackOnTransceiver = (\n transceiver: RTCRtpTransceiver,\n options: {\n track: MediaStreamTrack;\n type: any;\n sendTrack: any;\n receiveTrack: any;\n }\n) => {\n const {\n type, track, sendTrack, receiveTrack\n } = options;\n\n try {\n const result = Media.checkTracks(type, sendTrack && track, receiveTrack);\n\n transceiver.direction = result.direction;\n if (options.track) {\n transceiver.sender.replaceTrack(track);\n }\n }\n catch (e) {\n LoggerProxy.logger.error(`Media:index#setTrackOnTransceiver --> ${e}`);\n throw e;\n }\n};\n\n/**\n * creates a new offer\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @param {RTCPeerConnection} peerConnection\n * @param {RTCRtpTransceiver} transceiver\n * @param {Object} options see #Media.setTrackOnTransceiver\n * @returns {Promise}\n */\nMedia.updateTransceiver = (\n {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n }: {\n meetingId: string;\n remoteQualityLevel: string;\n enableRtx: any;\n enableExtmap: any;\n },\n peerConnection: RTCPeerConnection,\n transceiver: RTCRtpTransceiver,\n options: object\n) => {\n Media.setTrackOnTransceiver(transceiver, options);\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap\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 {\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","reconnectMedia","peerConnection","meetingId","remoteQualityLevel","enableRtx","enableExtmap","connectionState","PEER_CONNECTION_STATE","CLOSED","FAILED","reject","ReconnectionError","PeerConnectionManager","createOffer","generateLocalMedias","mediaId","audioMuted","videoMuted","localSdp","getLocalMedia","options","config","sendAudio","sendVideo","sendShare","sharePreferences","isSharing","getMedia","getDisplayMedia","resolve","undefined","checkTracks","trackType","receiveTracks","getDirection","sendTracks","direction","attachMedia","mediaProperties","mediaDirection","audioTrack","videoTrack","shareTrack","result","receiveAudio","audioTransceiver","addTransceiver","receiveVideo","videoTransceiver","receiveShare","shareTransceiver","onnegotiationneeded","event","LoggerProxy","logger","info","updateMedia","setTrackOnTransceiver","type","sendTrack","receiveTrack","transceiver","sender","replaceTrack","e","error","updateTransceiver","customResolution","screenResolution","customShareFrameRate","screenFrameRate","hasSharePreferences","hasCustomConstraints","shareConstraints","hasHighFrameRate","highFrameRate","Config","meetings","resolution","videoShareFrameRate","aspectRatio","cursor","MEDIA_TRACK_CONSTRAINT","CURSOR","AWLAYS","frameRate","height","idealHeight","width","idealWidth","mediaConfig","audio","video","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","constraint","getSupportedDevice","enumerateDevices","devices","supported","filter","device","kind","AUDIO_INPUT","VIDEO_INPUT","getDevices","MediaError","toggleStream","stopTracks","stop","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 PEER_CONNECTION_STATE,\n MEDIA_TRACK_CONSTRAINT,\n} from '../constants';\nimport Config from '../config';\nimport PeerConnectionManager from '../peer-connection-manager';\nimport ReconnectionError from '../common/errors/reconnection';\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 * @param {RTCPeerConnection} peerConnection\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Promise}\n */\nMedia.reconnectMedia = (\n peerConnection: RTCPeerConnection,\n {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n }: {\n meetingId: string;\n remoteQualityLevel: string;\n enableRtx: any;\n enableExtmap: any;\n }\n) => {\n if (\n peerConnection.connectionState === PEER_CONNECTION_STATE.CLOSED ||\n peerConnection.connectionState === PEER_CONNECTION_STATE.FAILED\n ) {\n return Promise.reject(new ReconnectionError('Reinitiate peerconnection'));\n }\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n });\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 * Returns the direction and tracks\n * @param {string} trackType type of track (audio/video)\n * @param {object} track tracks passed\n * @param {boolean} receiveTracks do you want to receive tracks from the remote side\n * @returns {Object} returns direction tracks to be added in transceiver\n */\nMedia.checkTracks = (trackType: string, track: object, receiveTracks: boolean) => {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const getDirection = (sendTracks, receiveTracks) => {\n if (sendTracks && receiveTracks) {\n return 'sendrecv';\n }\n if (sendTracks && !receiveTracks) {\n return 'sendonly';\n }\n if (!sendTracks && receiveTracks) {\n return 'recvonly';\n }\n\n return 'inactive';\n };\n\n if (track) {\n return {track, direction: getDirection(!!track, receiveTracks)};\n }\n\n return {track: trackType, direction: getDirection(!!track, receiveTracks)};\n};\n/**\n * creates peerconnection and attaches streams\n * @param {MediaDirection} mediaProperties\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Array} [peerConnection, ]\n */\nMedia.attachMedia = (\n mediaProperties: any,\n {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n }: {\n meetingId: string;\n remoteQualityLevel: string;\n enableRtx: any;\n enableExtmap: any;\n }\n) => {\n const {mediaDirection, audioTrack, videoTrack, shareTrack, peerConnection} = mediaProperties;\n\n let result = null;\n\n // Add Transceiver for audio\n result = Media.checkTracks(\n 'audio',\n mediaDirection.sendAudio && audioTrack,\n mediaDirection.receiveAudio\n );\n peerConnection.audioTransceiver = peerConnection.addTransceiver(result.track, {\n direction: result.direction,\n });\n\n // Add Transceiver for video\n result = Media.checkTracks(\n 'video',\n mediaDirection.sendVideo && videoTrack,\n mediaDirection.receiveVideo\n );\n peerConnection.videoTransceiver = peerConnection.addTransceiver(result.track, {\n direction: result.direction,\n });\n\n // Add Transceiver for share\n result = Media.checkTracks(\n 'video',\n mediaDirection.sendShare && shareTrack,\n mediaDirection.receiveShare\n );\n peerConnection.shareTransceiver = peerConnection.addTransceiver(result.track, {\n direction: result.direction,\n });\n\n peerConnection.onnegotiationneeded = (event) => {\n LoggerProxy.logger.info(\n `Media:index#attachMedia --> onnegotiationneeded#PeerConnection: ${event}`\n );\n };\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n });\n};\n\n/**\n * updates all the media streams and creates a new media offer\n * @param {MediaDirection} mediaProperties\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Promise}\n */\nMedia.updateMedia = (\n mediaProperties: any,\n {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n }: {\n meetingId: string;\n remoteQualityLevel: string;\n enableRtx: any;\n enableExtmap: any;\n }\n) => {\n const {mediaDirection, audioTrack, videoTrack, shareTrack, peerConnection} = mediaProperties;\n\n // update audio transceiver\n Media.setTrackOnTransceiver(peerConnection.audioTransceiver, {\n type: 'audio',\n track: audioTrack,\n sendTrack: mediaDirection.sendAudio && audioTrack,\n receiveTrack: mediaDirection.receiveAudio,\n });\n\n // update video transceiver\n Media.setTrackOnTransceiver(peerConnection.videoTransceiver, {\n type: 'video',\n track: videoTrack,\n sendTrack: mediaDirection.sendVideo && videoTrack,\n receiveTrack: mediaDirection.receiveVideo,\n });\n\n // update content transceiver\n Media.setTrackOnTransceiver(peerConnection.shareTransceiver, {\n type: 'video',\n track: shareTrack,\n sendTrack: mediaDirection.sendShare && shareTrack,\n receiveTrack: mediaDirection.receiveShare,\n });\n peerConnection.onnegotiationneeded = (event) => {\n LoggerProxy.logger.info(\n `Media:index#updateMedia --> onnegotiationneeded#PeerConnection: ${event}`\n );\n };\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n });\n};\n\n/**\n * @param {RTCRtpTransceiver} transceiver\n * @param {Object} options\n * @param {MediaStreamTrack} options.track\n * @returns {undefined}\n */\nMedia.setTrackOnTransceiver = (\n transceiver: RTCRtpTransceiver,\n options: {\n track: MediaStreamTrack;\n type: any;\n sendTrack: any;\n receiveTrack: any;\n }\n) => {\n const {type, track, sendTrack, receiveTrack} = options;\n\n try {\n const result = Media.checkTracks(type, sendTrack && track, receiveTrack);\n\n transceiver.direction = result.direction;\n if (options.track) {\n transceiver.sender.replaceTrack(track);\n }\n } catch (e) {\n LoggerProxy.logger.error(`Media:index#setTrackOnTransceiver --> ${e}`);\n throw e;\n }\n};\n\n/**\n * creates a new offer\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @param {RTCPeerConnection} peerConnection\n * @param {RTCRtpTransceiver} transceiver\n * @param {Object} options see #Media.setTrackOnTransceiver\n * @returns {Promise}\n */\nMedia.updateTransceiver = (\n {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n }: {\n meetingId: string;\n remoteQualityLevel: string;\n enableRtx: any;\n enableExtmap: any;\n },\n peerConnection: RTCPeerConnection,\n transceiver: RTCRtpTransceiver,\n options: object\n) => {\n Media.setTrackOnTransceiver(transceiver, options);\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\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,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 _constants = require("../constants");
26
-
27
16
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
28
-
29
17
  var _util = _interopRequireDefault(require("./util"));
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) {
@@ -179,25 +165,24 @@ var MediaProperties = /*#__PURE__*/function () {
179
165
  value: function unsetLocalAudioTrack() {
180
166
  this.audioTrack = null;
181
167
  }
168
+
182
169
  /**
183
170
  * Removes remote stream from class instance
184
171
  * @deprecated after v1.89.3
185
172
  * @returns {void}
186
173
  */
187
-
188
174
  }, {
189
175
  key: "unsetRemoteStream",
190
176
  value: function unsetRemoteStream() {
191
- _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
192
-
193
-
177
+ _loggerProxy.default.logger.warn('Media:properties#unsetRemoteStream --> [DEPRECATION WARNING]: unsetRemoteStream has been deprecated after v1.89.3 (use unsetRemoteTracks instead)');
178
+ // unsets audio and video only
194
179
  this.unsetRemoteMedia();
195
180
  }
181
+
196
182
  /**
197
183
  * Removes both remote audio and video from class instance
198
184
  * @returns {void}
199
185
  */
200
-
201
186
  }, {
202
187
  key: "unsetRemoteMedia",
203
188
  value: function unsetRemoteMedia() {
@@ -215,25 +200,24 @@ var MediaProperties = /*#__PURE__*/function () {
215
200
  this.unsetLocalVideoTrack();
216
201
  this.unsetLocalShareTrack();
217
202
  }
203
+
218
204
  /**
219
205
  * Removes remote stream and remote share from class instance
220
206
  * @deprecated after v1.89.3
221
207
  * @returns {void}
222
208
  */
223
-
224
209
  }, {
225
210
  key: "unsetRemoteStreams",
226
211
  value: function unsetRemoteStreams() {
227
212
  _loggerProxy.default.logger.warn('Media:properties#unsetRemoteStreams --> [DEPRECATION WARNING]: unsetRemoteStreams has been deprecated after v1.89.3 (use unsetRemoteTracks instead)');
228
-
229
213
  this.unsetRemoteStream();
230
214
  this.unsetRemoteShare();
231
215
  }
216
+
232
217
  /**
233
218
  * Unsets all remote tracks
234
219
  * @returns {void}
235
220
  */
236
-
237
221
  }, {
238
222
  key: "unsetRemoteTracks",
239
223
  value: function unsetRemoteTracks() {
@@ -246,167 +230,137 @@ var MediaProperties = /*#__PURE__*/function () {
246
230
  this.unsetLocalShareTrack();
247
231
  this.unsetRemoteShare();
248
232
  }
233
+
249
234
  /**
250
235
  * Removes both local and remote video stream from class instance
251
236
  * @deprecated after v1.89.3
252
237
  * @returns {void}
253
238
  */
254
-
255
239
  }, {
256
240
  key: "unsetMediaStreams",
257
241
  value: function unsetMediaStreams() {
258
242
  _loggerProxy.default.logger.warn('Media:properties#unsetMediaStreams --> [DEPRECATION WARNING]: unsetMediaStreams has been deprecated after v1.89.3 (use unsetMediaTracks instead)');
259
-
260
243
  this.unsetLocalVideoTrack();
261
244
  this.unsetRemoteStream();
262
245
  }
246
+
263
247
  /**
264
248
  * Removes both local and remote video stream from class instance
265
249
  * @returns {void}
266
250
  */
267
-
268
251
  }, {
269
252
  key: "unsetMediaTracks",
270
253
  value: function unsetMediaTracks() {
271
254
  this.unsetLocalVideoTrack();
272
255
  this.unsetRemoteMedia();
273
256
  }
257
+
274
258
  /**
275
259
  * Waits until ice connection is established
276
260
  *
277
261
  * @returns {Promise<void>}
278
262
  */
279
-
280
263
  }, {
281
264
  key: "waitForIceConnectedState",
282
265
  value: function waitForIceConnectedState() {
283
266
  var _this = this;
284
-
285
267
  var isIceConnected = function isIceConnected() {
286
268
  return _this.peerConnection.iceConnectionState === _constants.ICE_STATE.CONNECTED || _this.peerConnection.iceConnectionState === _constants.ICE_STATE.COMPLETED;
287
269
  };
288
-
289
270
  if (isIceConnected()) {
290
271
  return _promise.default.resolve();
291
272
  }
292
-
293
273
  return new _promise.default(function (resolve, reject) {
294
274
  var timer;
295
-
296
275
  var iceListener = function iceListener() {
297
276
  _loggerProxy.default.logger.log("Media:properties#waitForIceConnectedState --> ice state: ".concat(_this.peerConnection.iceConnectionState, ", conn state: ").concat(_this.peerConnection.connectionState));
298
-
299
277
  if (isIceConnected()) {
300
278
  clearTimeout(timer);
301
-
302
279
  _this.peerConnection.removeEventListener('iceconnectionstatechange', iceListener);
303
-
304
280
  resolve();
305
281
  }
306
282
  };
307
-
308
283
  timer = setTimeout(function () {
309
284
  _this.peerConnection.removeEventListener('iceconnectionstatechange', iceListener);
310
-
311
285
  reject();
312
286
  }, _constants.PC_BAIL_TIMEOUT);
313
-
314
287
  _this.peerConnection.addEventListener('iceconnectionstatechange', iceListener);
315
288
  });
316
289
  }
290
+
317
291
  /**
318
292
  * Returns the type of a connection that has been established
319
293
  *
320
294
  * @returns {Promise<'UDP' | 'TCP' | 'TURN-TLS' | 'TURN-TCP' | 'TURN-UDP' | 'unknown'>}
321
295
  */
322
-
323
296
  }, {
324
297
  key: "getCurrentConnectionType",
325
298
  value: function () {
326
299
  var _getCurrentConnectionType = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
327
300
  var allStatsReports, statsResult, successfulCandidatePairs, foundConnectionType;
328
301
  return _regenerator.default.wrap(function _callee$(_context) {
329
- while (1) {
330
- switch (_context.prev = _context.next) {
331
- case 0:
332
- _context.next = 2;
333
- return this.waitForIceConnectedState();
334
-
335
- case 2:
336
- allStatsReports = [];
337
- _context.prev = 3;
338
- _context.next = 6;
339
- return this.peerConnection.getStats();
340
-
341
- case 6:
342
- statsResult = _context.sent;
343
- statsResult.forEach(function (report) {
344
- return allStatsReports.push(report);
302
+ while (1) switch (_context.prev = _context.next) {
303
+ case 0:
304
+ _context.next = 2;
305
+ return this.waitForIceConnectedState();
306
+ case 2:
307
+ allStatsReports = [];
308
+ _context.prev = 3;
309
+ _context.next = 6;
310
+ return this.peerConnection.getStats();
311
+ case 6:
312
+ statsResult = _context.sent;
313
+ statsResult.forEach(function (report) {
314
+ return allStatsReports.push(report);
315
+ });
316
+ _context.next = 13;
317
+ break;
318
+ case 10:
319
+ _context.prev = 10;
320
+ _context.t0 = _context["catch"](3);
321
+ _loggerProxy.default.logger.warn("Media:properties#getCurrentConnectionType --> getStats() failed: ".concat(_context.t0));
322
+ case 13:
323
+ successfulCandidatePairs = allStatsReports.filter(function (report) {
324
+ var _report$state;
325
+ return report.type === 'candidate-pair' && ((_report$state = report.state) === null || _report$state === void 0 ? void 0 : _report$state.toLowerCase()) === 'succeeded';
326
+ });
327
+ foundConnectionType = 'unknown'; // all of the successful pairs should have the same connection type, so just return the type for the first one
328
+ successfulCandidatePairs.some(function (pair) {
329
+ var localCandidate = allStatsReports.find(function (report) {
330
+ return report.type === 'local-candidate' && report.id === pair.localCandidateId;
345
331
  });
346
- _context.next = 13;
347
- break;
348
-
349
- case 10:
350
- _context.prev = 10;
351
- _context.t0 = _context["catch"](3);
352
-
353
- _loggerProxy.default.logger.warn("Media:properties#getCurrentConnectionType --> getStats() failed: ".concat(_context.t0));
354
-
355
- case 13:
356
- successfulCandidatePairs = allStatsReports.filter(function (report) {
357
- var _report$state;
358
-
359
- return report.type === 'candidate-pair' && ((_report$state = report.state) === null || _report$state === void 0 ? void 0 : _report$state.toLowerCase()) === 'succeeded';
360
- });
361
- foundConnectionType = 'unknown'; // all of the successful pairs should have the same connection type, so just return the type for the first one
362
-
363
- successfulCandidatePairs.some(function (pair) {
364
- var localCandidate = allStatsReports.find(function (report) {
365
- return report.type === 'local-candidate' && report.id === pair.localCandidateId;
366
- });
367
-
368
- if (localCandidate === undefined) {
369
- _loggerProxy.default.logger.warn("Media:properties#getCurrentConnectionType --> failed to find local candidate \"".concat(pair.localCandidateId, "\" in getStats() results"));
370
-
371
- return false;
372
- }
373
-
374
- var connectionType;
375
-
376
- if (localCandidate.relayProtocol) {
377
- connectionType = "TURN-".concat(localCandidate.relayProtocol.toUpperCase());
378
- } else {
379
- var _localCandidate$proto;
380
-
381
- connectionType = (_localCandidate$proto = localCandidate.protocol) === null || _localCandidate$proto === void 0 ? void 0 : _localCandidate$proto.toUpperCase(); // it will be UDP or TCP
382
- }
383
-
384
- if (connectionType) {
385
- foundConnectionType = connectionType;
386
- return true;
387
- }
388
-
332
+ if (localCandidate === undefined) {
333
+ _loggerProxy.default.logger.warn("Media:properties#getCurrentConnectionType --> failed to find local candidate \"".concat(pair.localCandidateId, "\" in getStats() results"));
389
334
  return false;
390
- });
391
- return _context.abrupt("return", foundConnectionType);
392
-
393
- case 17:
394
- case "end":
395
- return _context.stop();
396
- }
335
+ }
336
+ var connectionType;
337
+ if (localCandidate.relayProtocol) {
338
+ connectionType = "TURN-".concat(localCandidate.relayProtocol.toUpperCase());
339
+ } else {
340
+ var _localCandidate$proto;
341
+ connectionType = (_localCandidate$proto = localCandidate.protocol) === null || _localCandidate$proto === void 0 ? void 0 : _localCandidate$proto.toUpperCase(); // it will be UDP or TCP
342
+ }
343
+
344
+ if (connectionType) {
345
+ foundConnectionType = connectionType;
346
+ return true;
347
+ }
348
+ return false;
349
+ });
350
+ return _context.abrupt("return", foundConnectionType);
351
+ case 17:
352
+ case "end":
353
+ return _context.stop();
397
354
  }
398
355
  }, _callee, this, [[3, 10]]);
399
356
  }));
400
-
401
357
  function getCurrentConnectionType() {
402
358
  return _getCurrentConnectionType.apply(this, arguments);
403
359
  }
404
-
405
360
  return getCurrentConnectionType;
406
361
  }()
407
362
  }]);
408
363
  return MediaProperties;
409
364
  }();
410
-
411
365
  exports.default = MediaProperties;
412
366
  //# sourceMappingURL=properties.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["MediaProperties","options","MEETINGS","peerConnection","MediaUtil","createPeerConnection","mediaDirection","videoTrack","audioTrack","shareTrack","remoteShare","remoteAudioTrack","remoteVideoTrack","localQualityLevel","QUALITY_LEVELS","remoteQualityLevel","HIGH","mediaSettings","videoDeviceId","type","values","deviceId","turnServerInfo","LoggerProxy","logger","warn","unsetRemoteMedia","unsetLocalVideoTrack","unsetLocalShareTrack","unsetRemoteStream","unsetRemoteShare","isIceConnected","iceConnectionState","ICE_STATE","CONNECTED","COMPLETED","resolve","reject","timer","iceListener","log","connectionState","clearTimeout","removeEventListener","setTimeout","PC_BAIL_TIMEOUT","addEventListener","waitForIceConnectedState","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 {\n ICE_STATE,\n MEETINGS,\n PC_BAIL_TIMEOUT,\n QUALITY_LEVELS\n} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport MediaUtil from './util';\n\n/**\n * @class MediaProperties\n */\nexport default class MediaProperties {\n audioTrack: any;\n localQualityLevel: any;\n mediaDirection: any;\n mediaSettings: any;\n peerConnection: 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.peerConnection = MediaUtil.createPeerConnection();\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(peerConnection) {\n this.peerConnection = peerConnection;\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.peerConnection = null;\n }\n\n reInitiatePeerconnection(turnServerInfo) {\n this.peerConnection = MediaUtil.createPeerConnection(turnServerInfo);\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 until ice connection is established\n *\n * @returns {Promise<void>}\n */\n waitForIceConnectedState() {\n const isIceConnected = () => (\n this.peerConnection.iceConnectionState === ICE_STATE.CONNECTED ||\n this.peerConnection.iceConnectionState === ICE_STATE.COMPLETED\n );\n\n if (isIceConnected()) {\n return Promise.resolve();\n }\n\n return new Promise((resolve, reject) => {\n let timer;\n\n const iceListener = () => {\n LoggerProxy.logger.log(`Media:properties#waitForIceConnectedState --> ice state: ${this.peerConnection.iceConnectionState}, conn state: ${this.peerConnection.connectionState}`);\n\n if (isIceConnected()) {\n clearTimeout(timer);\n this.peerConnection.removeEventListener('iceconnectionstatechange', iceListener);\n resolve();\n }\n };\n\n timer = setTimeout(() => {\n this.peerConnection.removeEventListener('iceconnectionstatechange', iceListener);\n reject();\n }, PC_BAIL_TIMEOUT);\n\n this.peerConnection.addEventListener('iceconnectionstatechange', iceListener);\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.waitForIceConnectedState();\n\n const allStatsReports = [];\n\n try {\n // eslint-disable-next-line no-await-in-loop\n const statsResult = await this.peerConnection.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","peerConnection","MediaUtil","createPeerConnection","mediaDirection","videoTrack","audioTrack","shareTrack","remoteShare","remoteAudioTrack","remoteVideoTrack","localQualityLevel","QUALITY_LEVELS","remoteQualityLevel","HIGH","mediaSettings","videoDeviceId","type","values","deviceId","turnServerInfo","LoggerProxy","logger","warn","unsetRemoteMedia","unsetLocalVideoTrack","unsetLocalShareTrack","unsetRemoteStream","unsetRemoteShare","isIceConnected","iceConnectionState","ICE_STATE","CONNECTED","COMPLETED","resolve","reject","timer","iceListener","log","connectionState","clearTimeout","removeEventListener","setTimeout","PC_BAIL_TIMEOUT","addEventListener","waitForIceConnectedState","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 {ICE_STATE, MEETINGS, PC_BAIL_TIMEOUT, QUALITY_LEVELS} from '../constants';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport MediaUtil from './util';\n\n/**\n * @class MediaProperties\n */\nexport default class MediaProperties {\n audioTrack: any;\n localQualityLevel: any;\n mediaDirection: any;\n mediaSettings: any;\n peerConnection: 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.peerConnection = MediaUtil.createPeerConnection();\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(peerConnection) {\n this.peerConnection = peerConnection;\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.peerConnection = null;\n }\n\n reInitiatePeerconnection(turnServerInfo) {\n this.peerConnection = MediaUtil.createPeerConnection(turnServerInfo);\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 until ice connection is established\n *\n * @returns {Promise<void>}\n */\n waitForIceConnectedState() {\n const isIceConnected = () =>\n this.peerConnection.iceConnectionState === ICE_STATE.CONNECTED ||\n this.peerConnection.iceConnectionState === ICE_STATE.COMPLETED;\n\n if (isIceConnected()) {\n return Promise.resolve();\n }\n\n return new Promise((resolve, reject) => {\n let timer;\n\n const iceListener = () => {\n LoggerProxy.logger.log(\n `Media:properties#waitForIceConnectedState --> ice state: ${this.peerConnection.iceConnectionState}, conn state: ${this.peerConnection.connectionState}`\n );\n\n if (isIceConnected()) {\n clearTimeout(timer);\n this.peerConnection.removeEventListener('iceconnectionstatechange', iceListener);\n resolve();\n }\n };\n\n timer = setTimeout(() => {\n this.peerConnection.removeEventListener('iceconnectionstatechange', iceListener);\n reject();\n }, PC_BAIL_TIMEOUT);\n\n this.peerConnection.addEventListener('iceconnectionstatechange', iceListener);\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.waitForIceConnectedState();\n\n const allStatsReports = [];\n\n try {\n // eslint-disable-next-line no-await-in-loop\n const statsResult = await this.peerConnection.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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"}