moodle/lib/amd/build/adapter.min.js.map
2023-03-09 09:53:19 +08:00

1 line
188 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"file":"adapter.min.js","sources":["../src/adapter.js"],"sourcesContent":["/**\n * Description of import/upgrade into Moodle:\n *\n * 1. Visit https://github.com/webrtc/adapter/releases.\n * 2. Check if the version has been updated from what is listed in lib/thirdpartylibs.xml in the Moodle wwwroot.\n * 3. If it has -\n * 1. Download the source code.\n * 2. Copy the content of the file release/adapter.js from the archive (ignore the first line).\n * 3. Replace the content below \"return (function e(t,n,r) ..\" in this file with the content you copied.\n * 4. Ensure to update lib/thirdpartylibs.xml with any changes.\n */\n\n// ESLint directives.\n/* eslint-disable */\n\n// JSHint directives.\n/* jshint ignore:start */\n\ndefine([], function() {\nreturn (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n\n'use strict';\n\nvar _adapter_factory = require('./adapter_factory.js');\n\nvar adapter = (0, _adapter_factory.adapterFactory)({ window: typeof window === 'undefined' ? undefined : window });\nmodule.exports = adapter; // this is the difference from adapter_core.\n\n},{\"./adapter_factory.js\":2}],2:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.adapterFactory = adapterFactory;\n\nvar _utils = require('./utils');\n\nvar utils = _interopRequireWildcard(_utils);\n\nvar _chrome_shim = require('./chrome/chrome_shim');\n\nvar chromeShim = _interopRequireWildcard(_chrome_shim);\n\nvar _firefox_shim = require('./firefox/firefox_shim');\n\nvar firefoxShim = _interopRequireWildcard(_firefox_shim);\n\nvar _safari_shim = require('./safari/safari_shim');\n\nvar safariShim = _interopRequireWildcard(_safari_shim);\n\nvar _common_shim = require('./common_shim');\n\nvar commonShim = _interopRequireWildcard(_common_shim);\n\nvar _sdp = require('sdp');\n\nvar sdp = _interopRequireWildcard(_sdp);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\n// Shimming starts here.\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\nfunction adapterFactory() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n window = _ref.window;\n\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n shimChrome: true,\n shimFirefox: true,\n shimSafari: true\n };\n\n // Utils.\n var logging = utils.log;\n var browserDetails = utils.detectBrowser(window);\n\n var adapter = {\n browserDetails: browserDetails,\n commonShim: commonShim,\n extractVersion: utils.extractVersion,\n disableLog: utils.disableLog,\n disableWarnings: utils.disableWarnings,\n // Expose sdp as a convenience. For production apps include directly.\n sdp: sdp\n };\n\n // Shim browser if found.\n switch (browserDetails.browser) {\n case 'chrome':\n if (!chromeShim || !chromeShim.shimPeerConnection || !options.shimChrome) {\n logging('Chrome shim is not included in this adapter release.');\n return adapter;\n }\n if (browserDetails.version === null) {\n logging('Chrome shim can not determine version, not shimming.');\n return adapter;\n }\n logging('adapter.js shimming chrome.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = chromeShim;\n\n // Must be called before shimPeerConnection.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n\n chromeShim.shimGetUserMedia(window, browserDetails);\n chromeShim.shimMediaStream(window, browserDetails);\n chromeShim.shimPeerConnection(window, browserDetails);\n chromeShim.shimOnTrack(window, browserDetails);\n chromeShim.shimAddTrackRemoveTrack(window, browserDetails);\n chromeShim.shimGetSendersWithDtmf(window, browserDetails);\n chromeShim.shimGetStats(window, browserDetails);\n chromeShim.shimSenderReceiverGetStats(window, browserDetails);\n chromeShim.fixNegotiationNeeded(window, browserDetails);\n\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimConnectionState(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n commonShim.removeExtmapAllowMixed(window, browserDetails);\n break;\n case 'firefox':\n if (!firefoxShim || !firefoxShim.shimPeerConnection || !options.shimFirefox) {\n logging('Firefox shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming firefox.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = firefoxShim;\n\n // Must be called before shimPeerConnection.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n\n firefoxShim.shimGetUserMedia(window, browserDetails);\n firefoxShim.shimPeerConnection(window, browserDetails);\n firefoxShim.shimOnTrack(window, browserDetails);\n firefoxShim.shimRemoveStream(window, browserDetails);\n firefoxShim.shimSenderGetStats(window, browserDetails);\n firefoxShim.shimReceiverGetStats(window, browserDetails);\n firefoxShim.shimRTCDataChannel(window, browserDetails);\n firefoxShim.shimAddTransceiver(window, browserDetails);\n firefoxShim.shimGetParameters(window, browserDetails);\n firefoxShim.shimCreateOffer(window, browserDetails);\n firefoxShim.shimCreateAnswer(window, browserDetails);\n\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimConnectionState(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n break;\n case 'safari':\n if (!safariShim || !options.shimSafari) {\n logging('Safari shim is not included in this adapter release.');\n return adapter;\n }\n logging('adapter.js shimming safari.');\n // Export to the adapter global object visible in the browser.\n adapter.browserShim = safariShim;\n\n // Must be called before shimCallbackAPI.\n commonShim.shimAddIceCandidateNullOrEmpty(window, browserDetails);\n\n safariShim.shimRTCIceServerUrls(window, browserDetails);\n safariShim.shimCreateOfferLegacy(window, browserDetails);\n safariShim.shimCallbacksAPI(window, browserDetails);\n safariShim.shimLocalStreamsAPI(window, browserDetails);\n safariShim.shimRemoteStreamsAPI(window, browserDetails);\n safariShim.shimTrackEventTransceiver(window, browserDetails);\n safariShim.shimGetUserMedia(window, browserDetails);\n safariShim.shimAudioContext(window, browserDetails);\n\n commonShim.shimRTCIceCandidate(window, browserDetails);\n commonShim.shimMaxMessageSize(window, browserDetails);\n commonShim.shimSendThrowTypeError(window, browserDetails);\n commonShim.removeExtmapAllowMixed(window, browserDetails);\n break;\n default:\n logging('Unsupported browser!');\n break;\n }\n\n return adapter;\n}\n\n// Browser shims.\n\n},{\"./chrome/chrome_shim\":3,\"./common_shim\":6,\"./firefox/firefox_shim\":7,\"./safari/safari_shim\":10,\"./utils\":11,\"sdp\":12}],3:[function(require,module,exports){\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.shimGetDisplayMedia = exports.shimGetUserMedia = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _getusermedia = require('./getusermedia');\n\nObject.defineProperty(exports, 'shimGetUserMedia', {\n enumerable: true,\n get: function get() {\n return _getusermedia.shimGetUserMedia;\n }\n});\n\nvar _getdisplaymedia = require('./getdisplaymedia');\n\nObject.defineProperty(exports, 'shimGetDisplayMedia', {\n enumerable: true,\n get: function get() {\n return _getdisplaymedia.shimGetDisplayMedia;\n }\n});\nexports.shimMediaStream = shimMediaStream;\nexports.shimOnTrack = shimOnTrack;\nexports.shimGetSendersWithDtmf = shimGetSendersWithDtmf;\nexports.shimGetStats = shimGetStats;\nexports.shimSenderReceiverGetStats = shimSenderReceiverGetStats;\nexports.shimAddTrackRemoveTrackWithNative = shimAddTrackRemoveTrackWithNative;\nexports.shimAddTrackRemoveTrack = shimAddTrackRemoveTrack;\nexports.shimPeerConnection = shimPeerConnection;\nexports.fixNegotiationNeeded = fixNegotiationNeeded;\n\nvar _utils = require('../utils.js');\n\nvar utils = _interopRequireWildcard(_utils);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction shimMediaStream(window) {\n window.MediaStream = window.MediaStream || window.webkitMediaStream;\n}\n\nfunction shimOnTrack(window) {\n if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && !('ontrack' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', {\n get: function get() {\n return this._ontrack;\n },\n set: function set(f) {\n if (this._ontrack) {\n this.removeEventListener('track', this._ontrack);\n }\n this.addEventListener('track', this._ontrack = f);\n },\n\n enumerable: true,\n configurable: true\n });\n var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n var _this = this;\n\n if (!this._ontrackpoly) {\n this._ontrackpoly = function (e) {\n // onaddstream does not fire when a track is added to an existing\n // stream. But stream.onaddtrack is implemented so we use that.\n e.stream.addEventListener('addtrack', function (te) {\n var receiver = void 0;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = _this.getReceivers().find(function (r) {\n return r.track && r.track.id === te.track.id;\n });\n } else {\n receiver = { track: te.track };\n }\n\n var event = new Event('track');\n event.track = te.track;\n event.receiver = receiver;\n event.transceiver = { receiver: receiver };\n event.streams = [e.stream];\n _this.dispatchEvent(event);\n });\n e.stream.getTracks().forEach(function (track) {\n var receiver = void 0;\n if (window.RTCPeerConnection.prototype.getReceivers) {\n receiver = _this.getReceivers().find(function (r) {\n return r.track && r.track.id === track.id;\n });\n } else {\n receiver = { track: track };\n }\n var event = new Event('track');\n event.track = track;\n event.receiver = receiver;\n event.transceiver = { receiver: receiver };\n event.streams = [e.stream];\n _this.dispatchEvent(event);\n });\n };\n this.addEventListener('addstream', this._ontrackpoly);\n }\n return origSetRemoteDescription.apply(this, arguments);\n };\n } else {\n // even if RTCRtpTransceiver is in window, it is only used and\n // emitted in unified-plan. Unfortunately this means we need\n // to unconditionally wrap the event.\n utils.wrapPeerConnectionEvent(window, 'track', function (e) {\n if (!e.transceiver) {\n Object.defineProperty(e, 'transceiver', { value: { receiver: e.receiver } });\n }\n return e;\n });\n }\n}\n\nfunction shimGetSendersWithDtmf(window) {\n // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack.\n if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && !('getSenders' in window.RTCPeerConnection.prototype) && 'createDTMFSender' in window.RTCPeerConnection.prototype) {\n var shimSenderWithDtmf = function shimSenderWithDtmf(pc, track) {\n return {\n track: track,\n get dtmf() {\n if (this._dtmf === undefined) {\n if (track.kind === 'audio') {\n this._dtmf = pc.createDTMFSender(track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n },\n _pc: pc\n };\n };\n\n // augment addTrack when getSenders is not available.\n if (!window.RTCPeerConnection.prototype.getSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n this._senders = this._senders || [];\n return this._senders.slice(); // return a copy of the internal state.\n };\n var origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n var sender = origAddTrack.apply(this, arguments);\n if (!sender) {\n sender = shimSenderWithDtmf(this, track);\n this._senders.push(sender);\n }\n return sender;\n };\n\n var origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n origRemoveTrack.apply(this, arguments);\n var idx = this._senders.indexOf(sender);\n if (idx !== -1) {\n this._senders.splice(idx, 1);\n }\n };\n }\n var origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n var _this2 = this;\n\n this._senders = this._senders || [];\n origAddStream.apply(this, [stream]);\n stream.getTracks().forEach(function (track) {\n _this2._senders.push(shimSenderWithDtmf(_this2, track));\n });\n };\n\n var origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n var _this3 = this;\n\n this._senders = this._senders || [];\n origRemoveStream.apply(this, [stream]);\n\n stream.getTracks().forEach(function (track) {\n var sender = _this3._senders.find(function (s) {\n return s.track === track;\n });\n if (sender) {\n // remove sender\n _this3._senders.splice(_this3._senders.indexOf(sender), 1);\n }\n });\n };\n } else if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && 'getSenders' in window.RTCPeerConnection.prototype && 'createDTMFSender' in window.RTCPeerConnection.prototype && window.RTCRtpSender && !('dtmf' in window.RTCRtpSender.prototype)) {\n var origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n var _this4 = this;\n\n var senders = origGetSenders.apply(this, []);\n senders.forEach(function (sender) {\n return sender._pc = _this4;\n });\n return senders;\n };\n\n Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', {\n get: function get() {\n if (this._dtmf === undefined) {\n if (this.track.kind === 'audio') {\n this._dtmf = this._pc.createDTMFSender(this.track);\n } else {\n this._dtmf = null;\n }\n }\n return this._dtmf;\n }\n });\n }\n}\n\nfunction shimGetStats(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n\n var origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n var _this5 = this;\n\n var _arguments = Array.prototype.slice.call(arguments),\n selector = _arguments[0],\n onSucc = _arguments[1],\n onErr = _arguments[2];\n\n // If selector is a function then we are in the old style stats so just\n // pass back the original getStats format to avoid breaking old users.\n\n\n if (arguments.length > 0 && typeof selector === 'function') {\n return origGetStats.apply(this, arguments);\n }\n\n // When spec-style getStats is supported, return those when called with\n // either no arguments or the selector argument is null.\n if (origGetStats.length === 0 && (arguments.length === 0 || typeof selector !== 'function')) {\n return origGetStats.apply(this, []);\n }\n\n var fixChromeStats_ = function fixChromeStats_(response) {\n var standardReport = {};\n var reports = response.result();\n reports.forEach(function (report) {\n var standardStats = {\n id: report.id,\n timestamp: report.timestamp,\n type: {\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n }[report.type] || report.type\n };\n report.names().forEach(function (name) {\n standardStats[name] = report.stat(name);\n });\n standardReport[standardStats.id] = standardStats;\n });\n\n return standardReport;\n };\n\n // shim getStats with maplike support\n var makeMapStats = function makeMapStats(stats) {\n return new Map(Object.keys(stats).map(function (key) {\n return [key, stats[key]];\n }));\n };\n\n if (arguments.length >= 2) {\n var successCallbackWrapper_ = function successCallbackWrapper_(response) {\n onSucc(makeMapStats(fixChromeStats_(response)));\n };\n\n return origGetStats.apply(this, [successCallbackWrapper_, selector]);\n }\n\n // promise-support\n return new Promise(function (resolve, reject) {\n origGetStats.apply(_this5, [function (response) {\n resolve(makeMapStats(fixChromeStats_(response)));\n }, reject]);\n }).then(onSucc, onErr);\n };\n}\n\nfunction shimSenderReceiverGetStats(window) {\n if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && window.RTCRtpSender && window.RTCRtpReceiver)) {\n return;\n }\n\n // shim sender stats.\n if (!('getStats' in window.RTCRtpSender.prototype)) {\n var origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n var _this6 = this;\n\n var senders = origGetSenders.apply(this, []);\n senders.forEach(function (sender) {\n return sender._pc = _this6;\n });\n return senders;\n };\n }\n\n var origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n var sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n var sender = this;\n return this._pc.getStats().then(function (result) {\n return (\n /* Note: this will include stats of all senders that\n * send a track with the same id as sender.track as\n * it is not possible to identify the RTCRtpSender.\n */\n utils.filterStats(result, sender.track, true)\n );\n });\n };\n }\n\n // shim receiver stats.\n if (!('getStats' in window.RTCRtpReceiver.prototype)) {\n var origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n var _this7 = this;\n\n var receivers = origGetReceivers.apply(this, []);\n receivers.forEach(function (receiver) {\n return receiver._pc = _this7;\n });\n return receivers;\n };\n }\n utils.wrapPeerConnectionEvent(window, 'track', function (e) {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n var receiver = this;\n return this._pc.getStats().then(function (result) {\n return utils.filterStats(result, receiver.track, false);\n });\n };\n }\n\n if (!('getStats' in window.RTCRtpSender.prototype && 'getStats' in window.RTCRtpReceiver.prototype)) {\n return;\n }\n\n // shim RTCPeerConnection.getStats(track).\n var origGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n if (arguments.length > 0 && arguments[0] instanceof window.MediaStreamTrack) {\n var track = arguments[0];\n var sender = void 0;\n var receiver = void 0;\n var err = void 0;\n this.getSenders().forEach(function (s) {\n if (s.track === track) {\n if (sender) {\n err = true;\n } else {\n sender = s;\n }\n }\n });\n this.getReceivers().forEach(function (r) {\n if (r.track === track) {\n if (receiver) {\n err = true;\n } else {\n receiver = r;\n }\n }\n return r.track === track;\n });\n if (err || sender && receiver) {\n return Promise.reject(new DOMException('There are more than one sender or receiver for the track.', 'InvalidAccessError'));\n } else if (sender) {\n return sender.getStats();\n } else if (receiver) {\n return receiver.getStats();\n }\n return Promise.reject(new DOMException('There is no sender or receiver for the track.', 'InvalidAccessError'));\n }\n return origGetStats.apply(this, arguments);\n };\n}\n\nfunction shimAddTrackRemoveTrackWithNative(window) {\n // shim addTrack/removeTrack with native variants in order to make\n // the interactions with legacy getLocalStreams behave as in other browsers.\n // Keeps a mapping stream.id => [stream, rtpsenders...]\n window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n var _this8 = this;\n\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n return Object.keys(this._shimmedLocalStreams).map(function (streamId) {\n return _this8._shimmedLocalStreams[streamId][0];\n });\n };\n\n var origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n if (!stream) {\n return origAddTrack.apply(this, arguments);\n }\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n\n var sender = origAddTrack.apply(this, arguments);\n if (!this._shimmedLocalStreams[stream.id]) {\n this._shimmedLocalStreams[stream.id] = [stream, sender];\n } else if (this._shimmedLocalStreams[stream.id].indexOf(sender) === -1) {\n this._shimmedLocalStreams[stream.id].push(sender);\n }\n return sender;\n };\n\n var origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n var _this9 = this;\n\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n\n stream.getTracks().forEach(function (track) {\n var alreadyExists = _this9.getSenders().find(function (s) {\n return s.track === track;\n });\n if (alreadyExists) {\n throw new DOMException('Track already exists.', 'InvalidAccessError');\n }\n });\n var existingSenders = this.getSenders();\n origAddStream.apply(this, arguments);\n var newSenders = this.getSenders().filter(function (newSender) {\n return existingSenders.indexOf(newSender) === -1;\n });\n this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders);\n };\n\n var origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n delete this._shimmedLocalStreams[stream.id];\n return origRemoveStream.apply(this, arguments);\n };\n\n var origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n var _this10 = this;\n\n this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n if (sender) {\n Object.keys(this._shimmedLocalStreams).forEach(function (streamId) {\n var idx = _this10._shimmedLocalStreams[streamId].indexOf(sender);\n if (idx !== -1) {\n _this10._shimmedLocalStreams[streamId].splice(idx, 1);\n }\n if (_this10._shimmedLocalStreams[streamId].length === 1) {\n delete _this10._shimmedLocalStreams[streamId];\n }\n });\n }\n return origRemoveTrack.apply(this, arguments);\n };\n}\n\nfunction shimAddTrackRemoveTrack(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // shim addTrack and removeTrack.\n if (window.RTCPeerConnection.prototype.addTrack && browserDetails.version >= 65) {\n return shimAddTrackRemoveTrackWithNative(window);\n }\n\n // also shim pc.getLocalStreams when addTrack is shimmed\n // to return the original streams.\n var origGetLocalStreams = window.RTCPeerConnection.prototype.getLocalStreams;\n window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n var _this11 = this;\n\n var nativeStreams = origGetLocalStreams.apply(this);\n this._reverseStreams = this._reverseStreams || {};\n return nativeStreams.map(function (stream) {\n return _this11._reverseStreams[stream.id];\n });\n };\n\n var origAddStream = window.RTCPeerConnection.prototype.addStream;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n var _this12 = this;\n\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n\n stream.getTracks().forEach(function (track) {\n var alreadyExists = _this12.getSenders().find(function (s) {\n return s.track === track;\n });\n if (alreadyExists) {\n throw new DOMException('Track already exists.', 'InvalidAccessError');\n }\n });\n // Add identity mapping for consistency with addTrack.\n // Unless this is being used with a stream from addTrack.\n if (!this._reverseStreams[stream.id]) {\n var newStream = new window.MediaStream(stream.getTracks());\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n stream = newStream;\n }\n origAddStream.apply(this, [stream]);\n };\n\n var origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n\n origRemoveStream.apply(this, [this._streams[stream.id] || stream]);\n delete this._reverseStreams[this._streams[stream.id] ? this._streams[stream.id].id : stream.id];\n delete this._streams[stream.id];\n };\n\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n var _this13 = this;\n\n if (this.signalingState === 'closed') {\n throw new DOMException('The RTCPeerConnection\\'s signalingState is \\'closed\\'.', 'InvalidStateError');\n }\n var streams = [].slice.call(arguments, 1);\n if (streams.length !== 1 || !streams[0].getTracks().find(function (t) {\n return t === track;\n })) {\n // this is not fully correct but all we can manage without\n // [[associated MediaStreams]] internal slot.\n throw new DOMException('The adapter.js addTrack polyfill only supports a single ' + ' stream which is associated with the specified track.', 'NotSupportedError');\n }\n\n var alreadyExists = this.getSenders().find(function (s) {\n return s.track === track;\n });\n if (alreadyExists) {\n throw new DOMException('Track already exists.', 'InvalidAccessError');\n }\n\n this._streams = this._streams || {};\n this._reverseStreams = this._reverseStreams || {};\n var oldStream = this._streams[stream.id];\n if (oldStream) {\n // this is using odd Chrome behaviour, use with caution:\n // https://bugs.chromium.org/p/webrtc/issues/detail?id=7815\n // Note: we rely on the high-level addTrack/dtmf shim to\n // create the sender with a dtmf sender.\n oldStream.addTrack(track);\n\n // Trigger ONN async.\n Promise.resolve().then(function () {\n _this13.dispatchEvent(new Event('negotiationneeded'));\n });\n } else {\n var newStream = new window.MediaStream([track]);\n this._streams[stream.id] = newStream;\n this._reverseStreams[newStream.id] = stream;\n this.addStream(newStream);\n }\n return this.getSenders().find(function (s) {\n return s.track === track;\n });\n };\n\n // replace the internal stream id with the external one and\n // vice versa.\n function replaceInternalStreamId(pc, description) {\n var sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(function (internalId) {\n var externalStream = pc._reverseStreams[internalId];\n var internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(internalStream.id, 'g'), externalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp: sdp\n });\n }\n function replaceExternalStreamId(pc, description) {\n var sdp = description.sdp;\n Object.keys(pc._reverseStreams || []).forEach(function (internalId) {\n var externalStream = pc._reverseStreams[internalId];\n var internalStream = pc._streams[externalStream.id];\n sdp = sdp.replace(new RegExp(externalStream.id, 'g'), internalStream.id);\n });\n return new RTCSessionDescription({\n type: description.type,\n sdp: sdp\n });\n }\n ['createOffer', 'createAnswer'].forEach(function (method) {\n var nativeMethod = window.RTCPeerConnection.prototype[method];\n var methodObj = _defineProperty({}, method, function () {\n var _this14 = this;\n\n var args = arguments;\n var isLegacyCall = arguments.length && typeof arguments[0] === 'function';\n if (isLegacyCall) {\n return nativeMethod.apply(this, [function (description) {\n var desc = replaceInternalStreamId(_this14, description);\n args[0].apply(null, [desc]);\n }, function (err) {\n if (args[1]) {\n args[1].apply(null, err);\n }\n }, arguments[2]]);\n }\n return nativeMethod.apply(this, arguments).then(function (description) {\n return replaceInternalStreamId(_this14, description);\n });\n });\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n\n var origSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription;\n window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() {\n if (!arguments.length || !arguments[0].type) {\n return origSetLocalDescription.apply(this, arguments);\n }\n arguments[0] = replaceExternalStreamId(this, arguments[0]);\n return origSetLocalDescription.apply(this, arguments);\n };\n\n // TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier\n\n var origLocalDescription = Object.getOwnPropertyDescriptor(window.RTCPeerConnection.prototype, 'localDescription');\n Object.defineProperty(window.RTCPeerConnection.prototype, 'localDescription', {\n get: function get() {\n var description = origLocalDescription.get.apply(this);\n if (description.type === '') {\n return description;\n }\n return replaceInternalStreamId(this, description);\n }\n });\n\n window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n var _this15 = this;\n\n if (this.signalingState === 'closed') {\n throw new DOMException('The RTCPeerConnection\\'s signalingState is \\'closed\\'.', 'InvalidStateError');\n }\n // We can not yet check for sender instanceof RTCRtpSender\n // since we shim RTPSender. So we check if sender._pc is set.\n if (!sender._pc) {\n throw new DOMException('Argument 1 of RTCPeerConnection.removeTrack ' + 'does not implement interface RTCRtpSender.', 'TypeError');\n }\n var isLocal = sender._pc === this;\n if (!isLocal) {\n throw new DOMException('Sender was not created by this connection.', 'InvalidAccessError');\n }\n\n // Search for the native stream the senders track belongs to.\n this._streams = this._streams || {};\n var stream = void 0;\n Object.keys(this._streams).forEach(function (streamid) {\n var hasTrack = _this15._streams[streamid].getTracks().find(function (track) {\n return sender.track === track;\n });\n if (hasTrack) {\n stream = _this15._streams[streamid];\n }\n });\n\n if (stream) {\n if (stream.getTracks().length === 1) {\n // if this is the last track of the stream, remove the stream. This\n // takes care of any shimmed _senders.\n this.removeStream(this._reverseStreams[stream.id]);\n } else {\n // relying on the same odd chrome behaviour as above.\n stream.removeTrack(sender.track);\n }\n this.dispatchEvent(new Event('negotiationneeded'));\n }\n };\n}\n\nfunction shimPeerConnection(window, browserDetails) {\n if (!window.RTCPeerConnection && window.webkitRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.webkitRTCPeerConnection;\n }\n if (!window.RTCPeerConnection) {\n return;\n }\n\n // shim implicit creation of RTCSessionDescription/RTCIceCandidate\n if (browserDetails.version < 53) {\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) {\n var nativeMethod = window.RTCPeerConnection.prototype[method];\n var methodObj = _defineProperty({}, method, function () {\n arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n });\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n}\n\n// Attempt to fix ONN in plan-b mode.\nfunction fixNegotiationNeeded(window, browserDetails) {\n utils.wrapPeerConnectionEvent(window, 'negotiationneeded', function (e) {\n var pc = e.target;\n if (browserDetails.version < 72 || pc.getConfiguration && pc.getConfiguration().sdpSemantics === 'plan-b') {\n if (pc.signalingState !== 'stable') {\n return;\n }\n }\n return e;\n });\n}\n\n},{\"../utils.js\":11,\"./getdisplaymedia\":4,\"./getusermedia\":5}],4:[function(require,module,exports){\n/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.shimGetDisplayMedia = shimGetDisplayMedia;\nfunction shimGetDisplayMedia(window, getSourceId) {\n if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n if (!window.navigator.mediaDevices) {\n return;\n }\n // getSourceId is a function that returns a promise resolving with\n // the sourceId of the screen/window/tab to be shared.\n if (typeof getSourceId !== 'function') {\n console.error('shimGetDisplayMedia: getSourceId argument is not ' + 'a function');\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) {\n return getSourceId(constraints).then(function (sourceId) {\n var widthSpecified = constraints.video && constraints.video.width;\n var heightSpecified = constraints.video && constraints.video.height;\n var frameRateSpecified = constraints.video && constraints.video.frameRate;\n constraints.video = {\n mandatory: {\n chromeMediaSource: 'desktop',\n chromeMediaSourceId: sourceId,\n maxFrameRate: frameRateSpecified || 3\n }\n };\n if (widthSpecified) {\n constraints.video.mandatory.maxWidth = widthSpecified;\n }\n if (heightSpecified) {\n constraints.video.mandatory.maxHeight = heightSpecified;\n }\n return window.navigator.mediaDevices.getUserMedia(constraints);\n });\n };\n}\n\n},{}],5:[function(require,module,exports){\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.shimGetUserMedia = shimGetUserMedia;\n\nvar _utils = require('../utils.js');\n\nvar utils = _interopRequireWildcard(_utils);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar logging = utils.log;\n\nfunction shimGetUserMedia(window, browserDetails) {\n var navigator = window && window.navigator;\n\n if (!navigator.mediaDevices) {\n return;\n }\n\n var constraintsToChrome_ = function constraintsToChrome_(c) {\n if ((typeof c === 'undefined' ? 'undefined' : _typeof(c)) !== 'object' || c.mandatory || c.optional) {\n return c;\n }\n var cc = {};\n Object.keys(c).forEach(function (key) {\n if (key === 'require' || key === 'advanced' || key === 'mediaSource') {\n return;\n }\n var r = _typeof(c[key]) === 'object' ? c[key] : { ideal: c[key] };\n if (r.exact !== undefined && typeof r.exact === 'number') {\n r.min = r.max = r.exact;\n }\n var oldname_ = function oldname_(prefix, name) {\n if (prefix) {\n return prefix + name.charAt(0).toUpperCase() + name.slice(1);\n }\n return name === 'deviceId' ? 'sourceId' : name;\n };\n if (r.ideal !== undefined) {\n cc.optional = cc.optional || [];\n var oc = {};\n if (typeof r.ideal === 'number') {\n oc[oldname_('min', key)] = r.ideal;\n cc.optional.push(oc);\n oc = {};\n oc[oldname_('max', key)] = r.ideal;\n cc.optional.push(oc);\n } else {\n oc[oldname_('', key)] = r.ideal;\n cc.optional.push(oc);\n }\n }\n if (r.exact !== undefined && typeof r.exact !== 'number') {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_('', key)] = r.exact;\n } else {\n ['min', 'max'].forEach(function (mix) {\n if (r[mix] !== undefined) {\n cc.mandatory = cc.mandatory || {};\n cc.mandatory[oldname_(mix, key)] = r[mix];\n }\n });\n }\n });\n if (c.advanced) {\n cc.optional = (cc.optional || []).concat(c.advanced);\n }\n return cc;\n };\n\n var shimConstraints_ = function shimConstraints_(constraints, func) {\n if (browserDetails.version >= 61) {\n return func(constraints);\n }\n constraints = JSON.parse(JSON.stringify(constraints));\n if (constraints && _typeof(constraints.audio) === 'object') {\n var remap = function remap(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n constraints = JSON.parse(JSON.stringify(constraints));\n remap(constraints.audio, 'autoGainControl', 'googAutoGainControl');\n remap(constraints.audio, 'noiseSuppression', 'googNoiseSuppression');\n constraints.audio = constraintsToChrome_(constraints.audio);\n }\n if (constraints && _typeof(constraints.video) === 'object') {\n // Shim facingMode for mobile & surface pro.\n var face = constraints.video.facingMode;\n face = face && ((typeof face === 'undefined' ? 'undefined' : _typeof(face)) === 'object' ? face : { ideal: face });\n var getSupportedFacingModeLies = browserDetails.version < 66;\n\n if (face && (face.exact === 'user' || face.exact === 'environment' || face.ideal === 'user' || face.ideal === 'environment') && !(navigator.mediaDevices.getSupportedConstraints && navigator.mediaDevices.getSupportedConstraints().facingMode && !getSupportedFacingModeLies)) {\n delete constraints.video.facingMode;\n var matches = void 0;\n if (face.exact === 'environment' || face.ideal === 'environment') {\n matches = ['back', 'rear'];\n } else if (face.exact === 'user' || face.ideal === 'user') {\n matches = ['front'];\n }\n if (matches) {\n // Look for matches in label, or use last cam for back (typical).\n return navigator.mediaDevices.enumerateDevices().then(function (devices) {\n devices = devices.filter(function (d) {\n return d.kind === 'videoinput';\n });\n var dev = devices.find(function (d) {\n return matches.some(function (match) {\n return d.label.toLowerCase().includes(match);\n });\n });\n if (!dev && devices.length && matches.includes('back')) {\n dev = devices[devices.length - 1]; // more likely the back cam\n }\n if (dev) {\n constraints.video.deviceId = face.exact ? { exact: dev.deviceId } : { ideal: dev.deviceId };\n }\n constraints.video = constraintsToChrome_(constraints.video);\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n });\n }\n }\n constraints.video = constraintsToChrome_(constraints.video);\n }\n logging('chrome: ' + JSON.stringify(constraints));\n return func(constraints);\n };\n\n var shimError_ = function shimError_(e) {\n if (browserDetails.version >= 64) {\n return e;\n }\n return {\n name: {\n PermissionDeniedError: 'NotAllowedError',\n PermissionDismissedError: 'NotAllowedError',\n InvalidStateError: 'NotAllowedError',\n DevicesNotFoundError: 'NotFoundError',\n ConstraintNotSatisfiedError: 'OverconstrainedError',\n TrackStartError: 'NotReadableError',\n MediaDeviceFailedDueToShutdown: 'NotAllowedError',\n MediaDeviceKillSwitchOn: 'NotAllowedError',\n TabCaptureError: 'AbortError',\n ScreenCaptureError: 'AbortError',\n DeviceCaptureError: 'AbortError'\n }[e.name] || e.name,\n message: e.message,\n constraint: e.constraint || e.constraintName,\n toString: function toString() {\n return this.name + (this.message && ': ') + this.message;\n }\n };\n };\n\n var getUserMedia_ = function getUserMedia_(constraints, onSuccess, onError) {\n shimConstraints_(constraints, function (c) {\n navigator.webkitGetUserMedia(c, onSuccess, function (e) {\n if (onError) {\n onError(shimError_(e));\n }\n });\n });\n };\n navigator.getUserMedia = getUserMedia_.bind(navigator);\n\n // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia\n // function which returns a Promise, it does not accept spec-style\n // constraints.\n if (navigator.mediaDevices.getUserMedia) {\n var origGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function (cs) {\n return shimConstraints_(cs, function (c) {\n return origGetUserMedia(c).then(function (stream) {\n if (c.audio && !stream.getAudioTracks().length || c.video && !stream.getVideoTracks().length) {\n stream.getTracks().forEach(function (track) {\n track.stop();\n });\n throw new DOMException('', 'NotFoundError');\n }\n return stream;\n }, function (e) {\n return Promise.reject(shimError_(e));\n });\n });\n };\n }\n}\n\n},{\"../utils.js\":11}],6:[function(require,module,exports){\n/*\n * Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.shimRTCIceCandidate = shimRTCIceCandidate;\nexports.shimMaxMessageSize = shimMaxMessageSize;\nexports.shimSendThrowTypeError = shimSendThrowTypeError;\nexports.shimConnectionState = shimConnectionState;\nexports.removeExtmapAllowMixed = removeExtmapAllowMixed;\nexports.shimAddIceCandidateNullOrEmpty = shimAddIceCandidateNullOrEmpty;\n\nvar _sdp = require('sdp');\n\nvar _sdp2 = _interopRequireDefault(_sdp);\n\nvar _utils = require('./utils');\n\nvar utils = _interopRequireWildcard(_utils);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction shimRTCIceCandidate(window) {\n // foundation is arbitrarily chosen as an indicator for full support for\n // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface\n if (!window.RTCIceCandidate || window.RTCIceCandidate && 'foundation' in window.RTCIceCandidate.prototype) {\n return;\n }\n\n var NativeRTCIceCandidate = window.RTCIceCandidate;\n window.RTCIceCandidate = function RTCIceCandidate(args) {\n // Remove the a= which shouldn't be part of the candidate string.\n if ((typeof args === 'undefined' ? 'undefined' : _typeof(args)) === 'object' && args.candidate && args.candidate.indexOf('a=') === 0) {\n args = JSON.parse(JSON.stringify(args));\n args.candidate = args.candidate.substr(2);\n }\n\n if (args.candidate && args.candidate.length) {\n // Augment the native candidate with the parsed fields.\n var nativeCandidate = new NativeRTCIceCandidate(args);\n var parsedCandidate = _sdp2.default.parseCandidate(args.candidate);\n var augmentedCandidate = Object.assign(nativeCandidate, parsedCandidate);\n\n // Add a serializer that does not serialize the extra attributes.\n augmentedCandidate.toJSON = function toJSON() {\n return {\n candidate: augmentedCandidate.candidate,\n sdpMid: augmentedCandidate.sdpMid,\n sdpMLineIndex: augmentedCandidate.sdpMLineIndex,\n usernameFragment: augmentedCandidate.usernameFragment\n };\n };\n return augmentedCandidate;\n }\n return new NativeRTCIceCandidate(args);\n };\n window.RTCIceCandidate.prototype = NativeRTCIceCandidate.prototype;\n\n // Hook up the augmented candidate in onicecandidate and\n // addEventListener('icecandidate', ...)\n utils.wrapPeerConnectionEvent(window, 'icecandidate', function (e) {\n if (e.candidate) {\n Object.defineProperty(e, 'candidate', {\n value: new window.RTCIceCandidate(e.candidate),\n writable: 'false'\n });\n }\n return e;\n });\n}\n\nfunction shimMaxMessageSize(window, browserDetails) {\n if (!window.RTCPeerConnection) {\n return;\n }\n\n if (!('sctp' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'sctp', {\n get: function get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n }\n });\n }\n\n var sctpInDescription = function sctpInDescription(description) {\n if (!description || !description.sdp) {\n return false;\n }\n var sections = _sdp2.default.splitSections(description.sdp);\n sections.shift();\n return sections.some(function (mediaSection) {\n var mLine = _sdp2.default.parseMLine(mediaSection);\n return mLine && mLine.kind === 'application' && mLine.protocol.indexOf('SCTP') !== -1;\n });\n };\n\n var getRemoteFirefoxVersion = function getRemoteFirefoxVersion(description) {\n // TODO: Is there a better solution for detecting Firefox?\n var match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\\d+)/);\n if (match === null || match.length < 2) {\n return -1;\n }\n var version = parseInt(match[1], 10);\n // Test for NaN (yes, this is ugly)\n return version !== version ? -1 : version;\n };\n\n var getCanSendMaxMessageSize = function getCanSendMaxMessageSize(remoteIsFirefox) {\n // Every implementation we know can send at least 64 KiB.\n // Note: Although Chrome is technically able to send up to 256 KiB, the\n // data does not reach the other peer reliably.\n // See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419\n var canSendMaxMessageSize = 65536;\n if (browserDetails.browser === 'firefox') {\n if (browserDetails.version < 57) {\n if (remoteIsFirefox === -1) {\n // FF < 57 will send in 16 KiB chunks using the deprecated PPID\n // fragmentation.\n canSendMaxMessageSize = 16384;\n } else {\n // However, other FF (and RAWRTC) can reassemble PPID-fragmented\n // messages. Thus, supporting ~2 GiB when sending.\n canSendMaxMessageSize = 2147483637;\n }\n } else if (browserDetails.version < 60) {\n // Currently, all FF >= 57 will reset the remote maximum message size\n // to the default value when a data channel is created at a later\n // stage. :(\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n canSendMaxMessageSize = browserDetails.version === 57 ? 65535 : 65536;\n } else {\n // FF >= 60 supports sending ~2 GiB\n canSendMaxMessageSize = 2147483637;\n }\n }\n return canSendMaxMessageSize;\n };\n\n var getMaxMessageSize = function getMaxMessageSize(description, remoteIsFirefox) {\n // Note: 65536 bytes is the default value from the SDP spec. Also,\n // every implementation we know supports receiving 65536 bytes.\n var maxMessageSize = 65536;\n\n // FF 57 has a slightly incorrect default remote max message size, so\n // we need to adjust it here to avoid a failure when sending.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697\n if (browserDetails.browser === 'firefox' && browserDetails.version === 57) {\n maxMessageSize = 65535;\n }\n\n var match = _sdp2.default.matchPrefix(description.sdp, 'a=max-message-size:');\n if (match.length > 0) {\n maxMessageSize = parseInt(match[0].substr(19), 10);\n } else if (browserDetails.browser === 'firefox' && remoteIsFirefox !== -1) {\n // If the maximum message size is not present in the remote SDP and\n // both local and remote are Firefox, the remote peer can receive\n // ~2 GiB.\n maxMessageSize = 2147483637;\n }\n return maxMessageSize;\n };\n\n var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n this._sctp = null;\n // Chrome decided to not expose .sctp in plan-b mode.\n // As usual, adapter.js has to do an 'ugly worakaround'\n // to cover up the mess.\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 76) {\n var _getConfiguration = this.getConfiguration(),\n sdpSemantics = _getConfiguration.sdpSemantics;\n\n if (sdpSemantics === 'plan-b') {\n Object.defineProperty(this, 'sctp', {\n get: function get() {\n return typeof this._sctp === 'undefined' ? null : this._sctp;\n },\n\n enumerable: true,\n configurable: true\n });\n }\n }\n\n if (sctpInDescription(arguments[0])) {\n // Check if the remote is FF.\n var isFirefox = getRemoteFirefoxVersion(arguments[0]);\n\n // Get the maximum message size the local peer is capable of sending\n var canSendMMS = getCanSendMaxMessageSize(isFirefox);\n\n // Get the maximum message size of the remote peer.\n var remoteMMS = getMaxMessageSize(arguments[0], isFirefox);\n\n // Determine final maximum message size\n var maxMessageSize = void 0;\n if (canSendMMS === 0 && remoteMMS === 0) {\n maxMessageSize = Number.POSITIVE_INFINITY;\n } else if (canSendMMS === 0 || remoteMMS === 0) {\n maxMessageSize = Math.max(canSendMMS, remoteMMS);\n } else {\n maxMessageSize = Math.min(canSendMMS, remoteMMS);\n }\n\n // Create a dummy RTCSctpTransport object and the 'maxMessageSize'\n // attribute.\n var sctp = {};\n Object.defineProperty(sctp, 'maxMessageSize', {\n get: function get() {\n return maxMessageSize;\n }\n });\n this._sctp = sctp;\n }\n\n return origSetRemoteDescription.apply(this, arguments);\n };\n}\n\nfunction shimSendThrowTypeError(window) {\n if (!(window.RTCPeerConnection && 'createDataChannel' in window.RTCPeerConnection.prototype)) {\n return;\n }\n\n // Note: Although Firefox >= 57 has a native implementation, the maximum\n // message size can be reset for all data channels at a later stage.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n\n function wrapDcSend(dc, pc) {\n var origDataChannelSend = dc.send;\n dc.send = function send() {\n var data = arguments[0];\n var length = data.length || data.size || data.byteLength;\n if (dc.readyState === 'open' && pc.sctp && length > pc.sctp.maxMessageSize) {\n throw new TypeError('Message too large (can send a maximum of ' + pc.sctp.maxMessageSize + ' bytes)');\n }\n return origDataChannelSend.apply(dc, arguments);\n };\n }\n var origCreateDataChannel = window.RTCPeerConnection.prototype.createDataChannel;\n window.RTCPeerConnection.prototype.createDataChannel = function createDataChannel() {\n var dataChannel = origCreateDataChannel.apply(this, arguments);\n wrapDcSend(dataChannel, this);\n return dataChannel;\n };\n utils.wrapPeerConnectionEvent(window, 'datachannel', function (e) {\n wrapDcSend(e.channel, e.target);\n return e;\n });\n}\n\n/* shims RTCConnectionState by pretending it is the same as iceConnectionState.\n * See https://bugs.chromium.org/p/webrtc/issues/detail?id=6145#c12\n * for why this is a valid hack in Chrome. In Firefox it is slightly incorrect\n * since DTLS failures would be hidden. See\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1265827\n * for the Firefox tracking bug.\n */\nfunction shimConnectionState(window) {\n if (!window.RTCPeerConnection || 'connectionState' in window.RTCPeerConnection.prototype) {\n return;\n }\n var proto = window.RTCPeerConnection.prototype;\n Object.defineProperty(proto, 'connectionState', {\n get: function get() {\n return {\n completed: 'connected',\n checking: 'connecting'\n }[this.iceConnectionState] || this.iceConnectionState;\n },\n\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(proto, 'onconnectionstatechange', {\n get: function get() {\n return this._onconnectionstatechange || null;\n },\n set: function set(cb) {\n if (this._onconnectionstatechange) {\n this.removeEventListener('connectionstatechange', this._onconnectionstatechange);\n delete this._onconnectionstatechange;\n }\n if (cb) {\n this.addEventListener('connectionstatechange', this._onconnectionstatechange = cb);\n }\n },\n\n enumerable: true,\n configurable: true\n });\n\n ['setLocalDescription', 'setRemoteDescription'].forEach(function (method) {\n var origMethod = proto[method];\n proto[method] = function () {\n if (!this._connectionstatechangepoly) {\n this._connectionstatechangepoly = function (e) {\n var pc = e.target;\n if (pc._lastConnectionState !== pc.connectionState) {\n pc._lastConnectionState = pc.connectionState;\n var newEvent = new Event('connectionstatechange', e);\n pc.dispatchEvent(newEvent);\n }\n return e;\n };\n this.addEventListener('iceconnectionstatechange', this._connectionstatechangepoly);\n }\n return origMethod.apply(this, arguments);\n };\n });\n}\n\nfunction removeExtmapAllowMixed(window, browserDetails) {\n /* remove a=extmap-allow-mixed for webrtc.org < M71 */\n if (!window.RTCPeerConnection) {\n return;\n }\n if (browserDetails.browser === 'chrome' && browserDetails.version >= 71) {\n return;\n }\n if (browserDetails.browser === 'safari' && browserDetails.version >= 605) {\n return;\n }\n var nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription(desc) {\n if (desc && desc.sdp && desc.sdp.indexOf('\\na=extmap-allow-mixed') !== -1) {\n var sdp = desc.sdp.split('\\n').filter(function (line) {\n return line.trim() !== 'a=extmap-allow-mixed';\n }).join('\\n');\n // Safari enforces read-only-ness of RTCSessionDescription fields.\n if (window.RTCSessionDescription && desc instanceof window.RTCSessionDescription) {\n arguments[0] = new window.RTCSessionDescription({\n type: desc.type,\n sdp: sdp\n });\n } else {\n desc.sdp = sdp;\n }\n }\n return nativeSRD.apply(this, arguments);\n };\n}\n\nfunction shimAddIceCandidateNullOrEmpty(window, browserDetails) {\n // Support for addIceCandidate(null or undefined)\n // as well as addIceCandidate({candidate: \"\", ...})\n // https://bugs.chromium.org/p/chromium/issues/detail?id=978582\n // Note: must be called before other polyfills which change the signature.\n if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n return;\n }\n var nativeAddIceCandidate = window.RTCPeerConnection.prototype.addIceCandidate;\n if (!nativeAddIceCandidate || nativeAddIceCandidate.length === 0) {\n return;\n }\n window.RTCPeerConnection.prototype.addIceCandidate = function addIceCandidate() {\n if (!arguments[0]) {\n if (arguments[1]) {\n arguments[1].apply(null);\n }\n return Promise.resolve();\n }\n // Firefox 68+ emits and processes {candidate: \"\", ...}, ignore\n // in older versions.\n // Native support for ignoring exists for Chrome M77+.\n // Safari ignores as well, exact version unknown but works in the same\n // version that also ignores addIceCandidate(null).\n if ((browserDetails.browser === 'chrome' && browserDetails.version < 78 || browserDetails.browser === 'firefox' && browserDetails.version < 68 || browserDetails.browser === 'safari') && arguments[0] && arguments[0].candidate === '') {\n return Promise.resolve();\n }\n return nativeAddIceCandidate.apply(this, arguments);\n };\n}\n\n},{\"./utils\":11,\"sdp\":12}],7:[function(require,module,exports){\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.shimGetDisplayMedia = exports.shimGetUserMedia = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _getusermedia = require('./getusermedia');\n\nObject.defineProperty(exports, 'shimGetUserMedia', {\n enumerable: true,\n get: function get() {\n return _getusermedia.shimGetUserMedia;\n }\n});\n\nvar _getdisplaymedia = require('./getdisplaymedia');\n\nObject.defineProperty(exports, 'shimGetDisplayMedia', {\n enumerable: true,\n get: function get() {\n return _getdisplaymedia.shimGetDisplayMedia;\n }\n});\nexports.shimOnTrack = shimOnTrack;\nexports.shimPeerConnection = shimPeerConnection;\nexports.shimSenderGetStats = shimSenderGetStats;\nexports.shimReceiverGetStats = shimReceiverGetStats;\nexports.shimRemoveStream = shimRemoveStream;\nexports.shimRTCDataChannel = shimRTCDataChannel;\nexports.shimAddTransceiver = shimAddTransceiver;\nexports.shimGetParameters = shimGetParameters;\nexports.shimCreateOffer = shimCreateOffer;\nexports.shimCreateAnswer = shimCreateAnswer;\n\nvar _utils = require('../utils');\n\nvar utils = _interopRequireWildcard(_utils);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction shimOnTrack(window) {\n if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get: function get() {\n return { receiver: this.receiver };\n }\n });\n }\n}\n\nfunction shimPeerConnection(window, browserDetails) {\n if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !(window.RTCPeerConnection || window.mozRTCPeerConnection)) {\n return; // probably media.peerconnection.enabled=false in about:config\n }\n if (!window.RTCPeerConnection && window.mozRTCPeerConnection) {\n // very basic support for old versions.\n window.RTCPeerConnection = window.mozRTCPeerConnection;\n }\n\n if (browserDetails.version < 53) {\n // shim away need for obsolete RTCIceCandidate/RTCSessionDescription.\n ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) {\n var nativeMethod = window.RTCPeerConnection.prototype[method];\n var methodObj = _defineProperty({}, method, function () {\n arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]);\n return nativeMethod.apply(this, arguments);\n });\n window.RTCPeerConnection.prototype[method] = methodObj[method];\n });\n }\n\n var modernStatsTypes = {\n inboundrtp: 'inbound-rtp',\n outboundrtp: 'outbound-rtp',\n candidatepair: 'candidate-pair',\n localcandidate: 'local-candidate',\n remotecandidate: 'remote-candidate'\n };\n\n var nativeGetStats = window.RTCPeerConnection.prototype.getStats;\n window.RTCPeerConnection.prototype.getStats = function getStats() {\n var _arguments = Array.prototype.slice.call(arguments),\n selector = _arguments[0],\n onSucc = _arguments[1],\n onErr = _arguments[2];\n\n return nativeGetStats.apply(this, [selector || null]).then(function (stats) {\n if (browserDetails.version < 53 && !onSucc) {\n // Shim only promise getStats with spec-hyphens in type names\n // Leave callback version alone; misc old uses of forEach before Map\n try {\n stats.forEach(function (stat) {\n stat.type = modernStatsTypes[stat.type] || stat.type;\n });\n } catch (e) {\n if (e.name !== 'TypeError') {\n throw e;\n }\n // Avoid TypeError: \"type\" is read-only, in old versions. 34-43ish\n stats.forEach(function (stat, i) {\n stats.set(i, Object.assign({}, stat, {\n type: modernStatsTypes[stat.type] || stat.type\n }));\n });\n }\n }\n return stats;\n }).then(onSucc, onErr);\n };\n}\n\nfunction shimSenderGetStats(window) {\n if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) {\n return;\n }\n var origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n if (origGetSenders) {\n window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n var _this = this;\n\n var senders = origGetSenders.apply(this, []);\n senders.forEach(function (sender) {\n return sender._pc = _this;\n });\n return senders;\n };\n }\n\n var origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n if (origAddTrack) {\n window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n var sender = origAddTrack.apply(this, arguments);\n sender._pc = this;\n return sender;\n };\n }\n window.RTCRtpSender.prototype.getStats = function getStats() {\n return this.track ? this._pc.getStats(this.track) : Promise.resolve(new Map());\n };\n}\n\nfunction shimReceiverGetStats(window) {\n if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) {\n return;\n }\n if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) {\n return;\n }\n var origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n if (origGetReceivers) {\n window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n var _this2 = this;\n\n var receivers = origGetReceivers.apply(this, []);\n receivers.forEach(function (receiver) {\n return receiver._pc = _this2;\n });\n return receivers;\n };\n }\n utils.wrapPeerConnectionEvent(window, 'track', function (e) {\n e.receiver._pc = e.srcElement;\n return e;\n });\n window.RTCRtpReceiver.prototype.getStats = function getStats() {\n return this._pc.getStats(this.track);\n };\n}\n\nfunction shimRemoveStream(window) {\n if (!window.RTCPeerConnection || 'removeStream' in window.RTCPeerConnection.prototype) {\n return;\n }\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n var _this3 = this;\n\n utils.deprecated('removeStream', 'removeTrack');\n this.getSenders().forEach(function (sender) {\n if (sender.track && stream.getTracks().includes(sender.track)) {\n _this3.removeTrack(sender);\n }\n });\n };\n}\n\nfunction shimRTCDataChannel(window) {\n // rename DataChannel to RTCDataChannel (native fix in FF60):\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1173851\n if (window.DataChannel && !window.RTCDataChannel) {\n window.RTCDataChannel = window.DataChannel;\n }\n}\n\nfunction shimAddTransceiver(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection)) {\n return;\n }\n var origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver;\n if (origAddTransceiver) {\n window.RTCPeerConnection.prototype.addTransceiver = function addTransceiver() {\n this.setParametersPromises = [];\n var initParameters = arguments[1];\n var shouldPerformCheck = initParameters && 'sendEncodings' in initParameters;\n if (shouldPerformCheck) {\n // If sendEncodings params are provided, validate grammar\n initParameters.sendEncodings.forEach(function (encodingParam) {\n if ('rid' in encodingParam) {\n var ridRegex = /^[a-z0-9]{0,16}$/i;\n if (!ridRegex.test(encodingParam.rid)) {\n throw new TypeError('Invalid RID value provided.');\n }\n }\n if ('scaleResolutionDownBy' in encodingParam) {\n if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) {\n throw new RangeError('scale_resolution_down_by must be >= 1.0');\n }\n }\n if ('maxFramerate' in encodingParam) {\n if (!(parseFloat(encodingParam.maxFramerate) >= 0)) {\n throw new RangeError('max_framerate must be >= 0.0');\n }\n }\n });\n }\n var transceiver = origAddTransceiver.apply(this, arguments);\n if (shouldPerformCheck) {\n // Check if the init options were applied. If not we do this in an\n // asynchronous way and save the promise reference in a global object.\n // This is an ugly hack, but at the same time is way more robust than\n // checking the sender parameters before and after the createOffer\n // Also note that after the createoffer we are not 100% sure that\n // the params were asynchronously applied so we might miss the\n // opportunity to recreate offer.\n var sender = transceiver.sender;\n\n var params = sender.getParameters();\n if (!('encodings' in params) ||\n // Avoid being fooled by patched getParameters() below.\n params.encodings.length === 1 && Object.keys(params.encodings[0]).length === 0) {\n params.encodings = initParameters.sendEncodings;\n sender.sendEncodings = initParameters.sendEncodings;\n this.setParametersPromises.push(sender.setParameters(params).then(function () {\n delete sender.sendEncodings;\n }).catch(function () {\n delete sender.sendEncodings;\n }));\n }\n }\n return transceiver;\n };\n }\n}\n\nfunction shimGetParameters(window) {\n if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCRtpSender)) {\n return;\n }\n var origGetParameters = window.RTCRtpSender.prototype.getParameters;\n if (origGetParameters) {\n window.RTCRtpSender.prototype.getParameters = function getParameters() {\n var params = origGetParameters.apply(this, arguments);\n if (!('encodings' in params)) {\n params.encodings = [].concat(this.sendEncodings || [{}]);\n }\n return params;\n };\n }\n}\n\nfunction shimCreateOffer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection)) {\n return;\n }\n var origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer = function createOffer() {\n var _this4 = this,\n _arguments2 = arguments;\n\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises).then(function () {\n return origCreateOffer.apply(_this4, _arguments2);\n }).finally(function () {\n _this4.setParametersPromises = [];\n });\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\n\nfunction shimCreateAnswer(window) {\n // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n // Firefox ignores the init sendEncodings options passed to addTransceiver\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n if (!((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCPeerConnection)) {\n return;\n }\n var origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer;\n window.RTCPeerConnection.prototype.createAnswer = function createAnswer() {\n var _this5 = this,\n _arguments3 = arguments;\n\n if (this.setParametersPromises && this.setParametersPromises.length) {\n return Promise.all(this.setParametersPromises).then(function () {\n return origCreateAnswer.apply(_this5, _arguments3);\n }).finally(function () {\n _this5.setParametersPromises = [];\n });\n }\n return origCreateAnswer.apply(this, arguments);\n };\n}\n\n},{\"../utils\":11,\"./getdisplaymedia\":8,\"./getusermedia\":9}],8:[function(require,module,exports){\n/*\n * Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.shimGetDisplayMedia = shimGetDisplayMedia;\nfunction shimGetDisplayMedia(window, preferredMediaSource) {\n if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) {\n return;\n }\n if (!window.navigator.mediaDevices) {\n return;\n }\n window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) {\n if (!(constraints && constraints.video)) {\n var err = new DOMException('getDisplayMedia without video ' + 'constraints is undefined');\n err.name = 'NotFoundError';\n // from https://heycam.github.io/webidl/#idl-DOMException-error-names\n err.code = 8;\n return Promise.reject(err);\n }\n if (constraints.video === true) {\n constraints.video = { mediaSource: preferredMediaSource };\n } else {\n constraints.video.mediaSource = preferredMediaSource;\n }\n return window.navigator.mediaDevices.getUserMedia(constraints);\n };\n}\n\n},{}],9:[function(require,module,exports){\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.shimGetUserMedia = shimGetUserMedia;\n\nvar _utils = require('../utils');\n\nvar utils = _interopRequireWildcard(_utils);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction shimGetUserMedia(window, browserDetails) {\n var navigator = window && window.navigator;\n var MediaStreamTrack = window && window.MediaStreamTrack;\n\n navigator.getUserMedia = function (constraints, onSuccess, onError) {\n // Replace Firefox 44+'s deprecation warning with unprefixed version.\n utils.deprecated('navigator.getUserMedia', 'navigator.mediaDevices.getUserMedia');\n navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError);\n };\n\n if (!(browserDetails.version > 55 && 'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) {\n var remap = function remap(obj, a, b) {\n if (a in obj && !(b in obj)) {\n obj[b] = obj[a];\n delete obj[a];\n }\n };\n\n var nativeGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);\n navigator.mediaDevices.getUserMedia = function (c) {\n if ((typeof c === 'undefined' ? 'undefined' : _typeof(c)) === 'object' && _typeof(c.audio) === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c.audio, 'autoGainControl', 'mozAutoGainControl');\n remap(c.audio, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeGetUserMedia(c);\n };\n\n if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) {\n var nativeGetSettings = MediaStreamTrack.prototype.getSettings;\n MediaStreamTrack.prototype.getSettings = function () {\n var obj = nativeGetSettings.apply(this, arguments);\n remap(obj, 'mozAutoGainControl', 'autoGainControl');\n remap(obj, 'mozNoiseSuppression', 'noiseSuppression');\n return obj;\n };\n }\n\n if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) {\n var nativeApplyConstraints = MediaStreamTrack.prototype.applyConstraints;\n MediaStreamTrack.prototype.applyConstraints = function (c) {\n if (this.kind === 'audio' && (typeof c === 'undefined' ? 'undefined' : _typeof(c)) === 'object') {\n c = JSON.parse(JSON.stringify(c));\n remap(c, 'autoGainControl', 'mozAutoGainControl');\n remap(c, 'noiseSuppression', 'mozNoiseSuppression');\n }\n return nativeApplyConstraints.apply(this, [c]);\n };\n }\n }\n}\n\n},{\"../utils\":11}],10:[function(require,module,exports){\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.shimLocalStreamsAPI = shimLocalStreamsAPI;\nexports.shimRemoteStreamsAPI = shimRemoteStreamsAPI;\nexports.shimCallbacksAPI = shimCallbacksAPI;\nexports.shimGetUserMedia = shimGetUserMedia;\nexports.shimConstraints = shimConstraints;\nexports.shimRTCIceServerUrls = shimRTCIceServerUrls;\nexports.shimTrackEventTransceiver = shimTrackEventTransceiver;\nexports.shimCreateOfferLegacy = shimCreateOfferLegacy;\nexports.shimAudioContext = shimAudioContext;\n\nvar _utils = require('../utils');\n\nvar utils = _interopRequireWildcard(_utils);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction shimLocalStreamsAPI(window) {\n if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getLocalStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n if (!this._localStreams) {\n this._localStreams = [];\n }\n return this._localStreams;\n };\n }\n if (!('addStream' in window.RTCPeerConnection.prototype)) {\n var _addTrack = window.RTCPeerConnection.prototype.addTrack;\n window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n var _this = this;\n\n if (!this._localStreams) {\n this._localStreams = [];\n }\n if (!this._localStreams.includes(stream)) {\n this._localStreams.push(stream);\n }\n // Try to emulate Chrome's behaviour of adding in audio-video order.\n // Safari orders by track id.\n stream.getAudioTracks().forEach(function (track) {\n return _addTrack.call(_this, track, stream);\n });\n stream.getVideoTracks().forEach(function (track) {\n return _addTrack.call(_this, track, stream);\n });\n };\n\n window.RTCPeerConnection.prototype.addTrack = function addTrack(track) {\n var _this2 = this;\n\n for (var _len = arguments.length, streams = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n streams[_key - 1] = arguments[_key];\n }\n\n if (streams) {\n streams.forEach(function (stream) {\n if (!_this2._localStreams) {\n _this2._localStreams = [stream];\n } else if (!_this2._localStreams.includes(stream)) {\n _this2._localStreams.push(stream);\n }\n });\n }\n return _addTrack.apply(this, arguments);\n };\n }\n if (!('removeStream' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n var _this3 = this;\n\n if (!this._localStreams) {\n this._localStreams = [];\n }\n var index = this._localStreams.indexOf(stream);\n if (index === -1) {\n return;\n }\n this._localStreams.splice(index, 1);\n var tracks = stream.getTracks();\n this.getSenders().forEach(function (sender) {\n if (tracks.includes(sender.track)) {\n _this3.removeTrack(sender);\n }\n });\n };\n }\n}\n\nfunction shimRemoteStreamsAPI(window) {\n if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n if (!('getRemoteStreams' in window.RTCPeerConnection.prototype)) {\n window.RTCPeerConnection.prototype.getRemoteStreams = function getRemoteStreams() {\n return this._remoteStreams ? this._remoteStreams : [];\n };\n }\n if (!('onaddstream' in window.RTCPeerConnection.prototype)) {\n Object.defineProperty(window.RTCPeerConnection.prototype, 'onaddstream', {\n get: function get() {\n return this._onaddstream;\n },\n set: function set(f) {\n var _this4 = this;\n\n if (this._onaddstream) {\n this.removeEventListener('addstream', this._onaddstream);\n this.removeEventListener('track', this._onaddstreampoly);\n }\n this.addEventListener('addstream', this._onaddstream = f);\n this.addEventListener('track', this._onaddstreampoly = function (e) {\n e.streams.forEach(function (stream) {\n if (!_this4._remoteStreams) {\n _this4._remoteStreams = [];\n }\n if (_this4._remoteStreams.includes(stream)) {\n return;\n }\n _this4._remoteStreams.push(stream);\n var event = new Event('addstream');\n event.stream = stream;\n _this4.dispatchEvent(event);\n });\n });\n }\n });\n var origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n var pc = this;\n if (!this._onaddstreampoly) {\n this.addEventListener('track', this._onaddstreampoly = function (e) {\n e.streams.forEach(function (stream) {\n if (!pc._remoteStreams) {\n pc._remoteStreams = [];\n }\n if (pc._remoteStreams.indexOf(stream) >= 0) {\n return;\n }\n pc._remoteStreams.push(stream);\n var event = new Event('addstream');\n event.stream = stream;\n pc.dispatchEvent(event);\n });\n });\n }\n return origSetRemoteDescription.apply(pc, arguments);\n };\n }\n}\n\nfunction shimCallbacksAPI(window) {\n if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || !window.RTCPeerConnection) {\n return;\n }\n var prototype = window.RTCPeerConnection.prototype;\n var origCreateOffer = prototype.createOffer;\n var origCreateAnswer = prototype.createAnswer;\n var setLocalDescription = prototype.setLocalDescription;\n var setRemoteDescription = prototype.setRemoteDescription;\n var addIceCandidate = prototype.addIceCandidate;\n\n prototype.createOffer = function createOffer(successCallback, failureCallback) {\n var options = arguments.length >= 2 ? arguments[2] : arguments[0];\n var promise = origCreateOffer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n\n prototype.createAnswer = function createAnswer(successCallback, failureCallback) {\n var options = arguments.length >= 2 ? arguments[2] : arguments[0];\n var promise = origCreateAnswer.apply(this, [options]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n\n var withCallback = function withCallback(description, successCallback, failureCallback) {\n var promise = setLocalDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setLocalDescription = withCallback;\n\n withCallback = function withCallback(description, successCallback, failureCallback) {\n var promise = setRemoteDescription.apply(this, [description]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.setRemoteDescription = withCallback;\n\n withCallback = function withCallback(candidate, successCallback, failureCallback) {\n var promise = addIceCandidate.apply(this, [candidate]);\n if (!failureCallback) {\n return promise;\n }\n promise.then(successCallback, failureCallback);\n return Promise.resolve();\n };\n prototype.addIceCandidate = withCallback;\n}\n\nfunction shimGetUserMedia(window) {\n var navigator = window && window.navigator;\n\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n // shim not needed in Safari 12.1\n var mediaDevices = navigator.mediaDevices;\n var _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices);\n navigator.mediaDevices.getUserMedia = function (constraints) {\n return _getUserMedia(shimConstraints(constraints));\n };\n }\n\n if (!navigator.getUserMedia && navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n navigator.getUserMedia = function getUserMedia(constraints, cb, errcb) {\n navigator.mediaDevices.getUserMedia(constraints).then(cb, errcb);\n }.bind(navigator);\n }\n}\n\nfunction shimConstraints(constraints) {\n if (constraints && constraints.video !== undefined) {\n return Object.assign({}, constraints, { video: utils.compactObject(constraints.video) });\n }\n\n return constraints;\n}\n\nfunction shimRTCIceServerUrls(window) {\n if (!window.RTCPeerConnection) {\n return;\n }\n // migrate from non-spec RTCIceServer.url to RTCIceServer.urls\n var OrigPeerConnection = window.RTCPeerConnection;\n window.RTCPeerConnection = function RTCPeerConnection(pcConfig, pcConstraints) {\n if (pcConfig && pcConfig.iceServers) {\n var newIceServers = [];\n for (var i = 0; i < pcConfig.iceServers.length; i++) {\n var server = pcConfig.iceServers[i];\n if (!server.hasOwnProperty('urls') && server.hasOwnProperty('url')) {\n utils.deprecated('RTCIceServer.url', 'RTCIceServer.urls');\n server = JSON.parse(JSON.stringify(server));\n server.urls = server.url;\n delete server.url;\n newIceServers.push(server);\n } else {\n newIceServers.push(pcConfig.iceServers[i]);\n }\n }\n pcConfig.iceServers = newIceServers;\n }\n return new OrigPeerConnection(pcConfig, pcConstraints);\n };\n window.RTCPeerConnection.prototype = OrigPeerConnection.prototype;\n // wrap static methods. Currently just generateCertificate.\n if ('generateCertificate' in OrigPeerConnection) {\n Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', {\n get: function get() {\n return OrigPeerConnection.generateCertificate;\n }\n });\n }\n}\n\nfunction shimTrackEventTransceiver(window) {\n // Add event.transceiver member over deprecated event.receiver\n if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) {\n Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n get: function get() {\n return { receiver: this.receiver };\n }\n });\n }\n}\n\nfunction shimCreateOfferLegacy(window) {\n var origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n window.RTCPeerConnection.prototype.createOffer = function createOffer(offerOptions) {\n if (offerOptions) {\n if (typeof offerOptions.offerToReceiveAudio !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveAudio = !!offerOptions.offerToReceiveAudio;\n }\n var audioTransceiver = this.getTransceivers().find(function (transceiver) {\n return transceiver.receiver.track.kind === 'audio';\n });\n if (offerOptions.offerToReceiveAudio === false && audioTransceiver) {\n if (audioTransceiver.direction === 'sendrecv') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('sendonly');\n } else {\n audioTransceiver.direction = 'sendonly';\n }\n } else if (audioTransceiver.direction === 'recvonly') {\n if (audioTransceiver.setDirection) {\n audioTransceiver.setDirection('inactive');\n } else {\n audioTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveAudio === true && !audioTransceiver) {\n this.addTransceiver('audio');\n }\n\n if (typeof offerOptions.offerToReceiveVideo !== 'undefined') {\n // support bit values\n offerOptions.offerToReceiveVideo = !!offerOptions.offerToReceiveVideo;\n }\n var videoTransceiver = this.getTransceivers().find(function (transceiver) {\n return transceiver.receiver.track.kind === 'video';\n });\n if (offerOptions.offerToReceiveVideo === false && videoTransceiver) {\n if (videoTransceiver.direction === 'sendrecv') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('sendonly');\n } else {\n videoTransceiver.direction = 'sendonly';\n }\n } else if (videoTransceiver.direction === 'recvonly') {\n if (videoTransceiver.setDirection) {\n videoTransceiver.setDirection('inactive');\n } else {\n videoTransceiver.direction = 'inactive';\n }\n }\n } else if (offerOptions.offerToReceiveVideo === true && !videoTransceiver) {\n this.addTransceiver('video');\n }\n }\n return origCreateOffer.apply(this, arguments);\n };\n}\n\nfunction shimAudioContext(window) {\n if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object' || window.AudioContext) {\n return;\n }\n window.AudioContext = window.webkitAudioContext;\n}\n\n},{\"../utils\":11}],11:[function(require,module,exports){\n/*\n * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n * Use of this source code is governed by a BSD-style license\n * that can be found in the LICENSE file in the root of the source\n * tree.\n */\n/* eslint-env node */\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.extractVersion = extractVersion;\nexports.wrapPeerConnectionEvent = wrapPeerConnectionEvent;\nexports.disableLog = disableLog;\nexports.disableWarnings = disableWarnings;\nexports.log = log;\nexports.deprecated = deprecated;\nexports.detectBrowser = detectBrowser;\nexports.compactObject = compactObject;\nexports.walkStats = walkStats;\nexports.filterStats = filterStats;\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar logDisabled_ = true;\nvar deprecationWarnings_ = true;\n\n/**\n * Extract browser version out of the provided user agent string.\n *\n * @param {!string} uastring userAgent string.\n * @param {!string} expr Regular expression used as match criteria.\n * @param {!number} pos position in the version string to be returned.\n * @return {!number} browser version.\n */\nfunction extractVersion(uastring, expr, pos) {\n var match = uastring.match(expr);\n return match && match.length >= pos && parseInt(match[pos], 10);\n}\n\n// Wraps the peerconnection event eventNameToWrap in a function\n// which returns the modified event object (or false to prevent\n// the event).\nfunction wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) {\n if (!window.RTCPeerConnection) {\n return;\n }\n var proto = window.RTCPeerConnection.prototype;\n var nativeAddEventListener = proto.addEventListener;\n proto.addEventListener = function (nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap) {\n return nativeAddEventListener.apply(this, arguments);\n }\n var wrappedCallback = function wrappedCallback(e) {\n var modifiedEvent = wrapper(e);\n if (modifiedEvent) {\n if (cb.handleEvent) {\n cb.handleEvent(modifiedEvent);\n } else {\n cb(modifiedEvent);\n }\n }\n };\n this._eventMap = this._eventMap || {};\n if (!this._eventMap[eventNameToWrap]) {\n this._eventMap[eventNameToWrap] = new Map();\n }\n this._eventMap[eventNameToWrap].set(cb, wrappedCallback);\n return nativeAddEventListener.apply(this, [nativeEventName, wrappedCallback]);\n };\n\n var nativeRemoveEventListener = proto.removeEventListener;\n proto.removeEventListener = function (nativeEventName, cb) {\n if (nativeEventName !== eventNameToWrap || !this._eventMap || !this._eventMap[eventNameToWrap]) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n if (!this._eventMap[eventNameToWrap].has(cb)) {\n return nativeRemoveEventListener.apply(this, arguments);\n }\n var unwrappedCb = this._eventMap[eventNameToWrap].get(cb);\n this._eventMap[eventNameToWrap].delete(cb);\n if (this._eventMap[eventNameToWrap].size === 0) {\n delete this._eventMap[eventNameToWrap];\n }\n if (Object.keys(this._eventMap).length === 0) {\n delete this._eventMap;\n }\n return nativeRemoveEventListener.apply(this, [nativeEventName, unwrappedCb]);\n };\n\n Object.defineProperty(proto, 'on' + eventNameToWrap, {\n get: function get() {\n return this['_on' + eventNameToWrap];\n },\n set: function set(cb) {\n if (this['_on' + eventNameToWrap]) {\n this.removeEventListener(eventNameToWrap, this['_on' + eventNameToWrap]);\n delete this['_on' + eventNameToWrap];\n }\n if (cb) {\n this.addEventListener(eventNameToWrap, this['_on' + eventNameToWrap] = cb);\n }\n },\n\n enumerable: true,\n configurable: true\n });\n}\n\nfunction disableLog(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + (typeof bool === 'undefined' ? 'undefined' : _typeof(bool)) + '. Please use a boolean.');\n }\n logDisabled_ = bool;\n return bool ? 'adapter.js logging disabled' : 'adapter.js logging enabled';\n}\n\n/**\n * Disable or enable deprecation warnings\n * @param {!boolean} bool set to true to disable warnings.\n */\nfunction disableWarnings(bool) {\n if (typeof bool !== 'boolean') {\n return new Error('Argument type: ' + (typeof bool === 'undefined' ? 'undefined' : _typeof(bool)) + '. Please use a boolean.');\n }\n deprecationWarnings_ = !bool;\n return 'adapter.js deprecation warnings ' + (bool ? 'disabled' : 'enabled');\n}\n\nfunction log() {\n if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object') {\n if (logDisabled_) {\n return;\n }\n if (typeof console !== 'undefined' && typeof console.log === 'function') {\n console.log.apply(console, arguments);\n }\n }\n}\n\n/**\n * Shows a deprecation warning suggesting the modern and spec-compatible API.\n */\nfunction deprecated(oldMethod, newMethod) {\n if (!deprecationWarnings_) {\n return;\n }\n console.warn(oldMethod + ' is deprecated, please use ' + newMethod + ' instead.');\n}\n\n/**\n * Browser detector.\n *\n * @return {object} result containing browser and version\n * properties.\n */\nfunction detectBrowser(window) {\n // Returned result object.\n var result = { browser: null, version: null };\n\n // Fail early if it's not a browser\n if (typeof window === 'undefined' || !window.navigator) {\n result.browser = 'Not a browser.';\n return result;\n }\n\n var navigator = window.navigator;\n\n\n if (navigator.mozGetUserMedia) {\n // Firefox.\n result.browser = 'firefox';\n result.version = extractVersion(navigator.userAgent, /Firefox\\/(\\d+)\\./, 1);\n } else if (navigator.webkitGetUserMedia || window.isSecureContext === false && window.webkitRTCPeerConnection && !window.RTCIceGatherer) {\n // Chrome, Chromium, Webview, Opera.\n // Version matches Chrome/WebRTC version.\n // Chrome 74 removed webkitGetUserMedia on http as well so we need the\n // more complicated fallback to webkitRTCPeerConnection.\n result.browser = 'chrome';\n result.version = extractVersion(navigator.userAgent, /Chrom(e|ium)\\/(\\d+)\\./, 2);\n } else if (window.RTCPeerConnection && navigator.userAgent.match(/AppleWebKit\\/(\\d+)\\./)) {\n // Safari.\n result.browser = 'safari';\n result.version = extractVersion(navigator.userAgent, /AppleWebKit\\/(\\d+)\\./, 1);\n result.supportsUnifiedPlan = window.RTCRtpTransceiver && 'currentDirection' in window.RTCRtpTransceiver.prototype;\n } else {\n // Default fallthrough: not supported.\n result.browser = 'Not a supported browser.';\n return result;\n }\n\n return result;\n}\n\n/**\n * Checks if something is an object.\n *\n * @param {*} val The something you want to check.\n * @return true if val is an object, false otherwise.\n */\nfunction isObject(val) {\n return Object.prototype.toString.call(val) === '[object Object]';\n}\n\n/**\n * Remove all empty objects and undefined values\n * from a nested object -- an enhanced and vanilla version\n * of Lodash's `compact`.\n */\nfunction compactObject(data) {\n if (!isObject(data)) {\n return data;\n }\n\n return Object.keys(data).reduce(function (accumulator, key) {\n var isObj = isObject(data[key]);\n var value = isObj ? compactObject(data[key]) : data[key];\n var isEmptyObject = isObj && !Object.keys(value).length;\n if (value === undefined || isEmptyObject) {\n return accumulator;\n }\n return Object.assign(accumulator, _defineProperty({}, key, value));\n }, {});\n}\n\n/* iterates the stats graph recursively. */\nfunction walkStats(stats, base, resultSet) {\n if (!base || resultSet.has(base.id)) {\n return;\n }\n resultSet.set(base.id, base);\n Object.keys(base).forEach(function (name) {\n if (name.endsWith('Id')) {\n walkStats(stats, stats.get(base[name]), resultSet);\n } else if (name.endsWith('Ids')) {\n base[name].forEach(function (id) {\n walkStats(stats, stats.get(id), resultSet);\n });\n }\n });\n}\n\n/* filter getStats for a sender/receiver track. */\nfunction filterStats(result, track, outbound) {\n var streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp';\n var filteredResult = new Map();\n if (track === null) {\n return filteredResult;\n }\n var trackStats = [];\n result.forEach(function (value) {\n if (value.type === 'track' && value.trackIdentifier === track.id) {\n trackStats.push(value);\n }\n });\n trackStats.forEach(function (trackStat) {\n result.forEach(function (stats) {\n if (stats.type === streamStatsType && stats.trackId === trackStat.id) {\n walkStats(result, stats, filteredResult);\n }\n });\n });\n return filteredResult;\n}\n\n},{}],12:[function(require,module,exports){\n/* eslint-env node */\n'use strict';\n\n// SDP helpers.\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar SDPUtils = {};\n\n// Generate an alphanumeric identifier for cname or mids.\n// TODO: use UUIDs instead? https://gist.github.com/jed/982883\nSDPUtils.generateIdentifier = function () {\n return Math.random().toString(36).substr(2, 10);\n};\n\n// The RTCP CNAME used by all peerconnections from the same JS.\nSDPUtils.localCName = SDPUtils.generateIdentifier();\n\n// Splits SDP into lines, dealing with both CRLF and LF.\nSDPUtils.splitLines = function (blob) {\n return blob.trim().split('\\n').map(function (line) {\n return line.trim();\n });\n};\n// Splits SDP into sessionpart and mediasections. Ensures CRLF.\nSDPUtils.splitSections = function (blob) {\n var parts = blob.split('\\nm=');\n return parts.map(function (part, index) {\n return (index > 0 ? 'm=' + part : part).trim() + '\\r\\n';\n });\n};\n\n// returns the session description.\nSDPUtils.getDescription = function (blob) {\n var sections = SDPUtils.splitSections(blob);\n return sections && sections[0];\n};\n\n// returns the individual media sections.\nSDPUtils.getMediaSections = function (blob) {\n var sections = SDPUtils.splitSections(blob);\n sections.shift();\n return sections;\n};\n\n// Returns lines that start with a certain prefix.\nSDPUtils.matchPrefix = function (blob, prefix) {\n return SDPUtils.splitLines(blob).filter(function (line) {\n return line.indexOf(prefix) === 0;\n });\n};\n\n// Parses an ICE candidate line. Sample input:\n// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8\n// rport 55996\"\nSDPUtils.parseCandidate = function (line) {\n var parts = void 0;\n // Parse both variants.\n if (line.indexOf('a=candidate:') === 0) {\n parts = line.substring(12).split(' ');\n } else {\n parts = line.substring(10).split(' ');\n }\n\n var candidate = {\n foundation: parts[0],\n component: { 1: 'rtp', 2: 'rtcp' }[parts[1]],\n protocol: parts[2].toLowerCase(),\n priority: parseInt(parts[3], 10),\n ip: parts[4],\n address: parts[4], // address is an alias for ip.\n port: parseInt(parts[5], 10),\n // skip parts[6] == 'typ'\n type: parts[7]\n };\n\n for (var i = 8; i < parts.length; i += 2) {\n switch (parts[i]) {\n case 'raddr':\n candidate.relatedAddress = parts[i + 1];\n break;\n case 'rport':\n candidate.relatedPort = parseInt(parts[i + 1], 10);\n break;\n case 'tcptype':\n candidate.tcpType = parts[i + 1];\n break;\n case 'ufrag':\n candidate.ufrag = parts[i + 1]; // for backward compatibility.\n candidate.usernameFragment = parts[i + 1];\n break;\n default:\n // extension handling, in particular ufrag. Don't overwrite.\n if (candidate[parts[i]] === undefined) {\n candidate[parts[i]] = parts[i + 1];\n }\n break;\n }\n }\n return candidate;\n};\n\n// Translates a candidate object into SDP candidate attribute.\nSDPUtils.writeCandidate = function (candidate) {\n var sdp = [];\n sdp.push(candidate.foundation);\n\n var component = candidate.component;\n if (component === 'rtp') {\n sdp.push(1);\n } else if (component === 'rtcp') {\n sdp.push(2);\n } else {\n sdp.push(component);\n }\n sdp.push(candidate.protocol.toUpperCase());\n sdp.push(candidate.priority);\n sdp.push(candidate.address || candidate.ip);\n sdp.push(candidate.port);\n\n var type = candidate.type;\n sdp.push('typ');\n sdp.push(type);\n if (type !== 'host' && candidate.relatedAddress && candidate.relatedPort) {\n sdp.push('raddr');\n sdp.push(candidate.relatedAddress);\n sdp.push('rport');\n sdp.push(candidate.relatedPort);\n }\n if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') {\n sdp.push('tcptype');\n sdp.push(candidate.tcpType);\n }\n if (candidate.usernameFragment || candidate.ufrag) {\n sdp.push('ufrag');\n sdp.push(candidate.usernameFragment || candidate.ufrag);\n }\n return 'candidate:' + sdp.join(' ');\n};\n\n// Parses an ice-options line, returns an array of option tags.\n// a=ice-options:foo bar\nSDPUtils.parseIceOptions = function (line) {\n return line.substr(14).split(' ');\n};\n\n// Parses an rtpmap line, returns RTCRtpCoddecParameters. Sample input:\n// a=rtpmap:111 opus/48000/2\nSDPUtils.parseRtpMap = function (line) {\n var parts = line.substr(9).split(' ');\n var parsed = {\n payloadType: parseInt(parts.shift(), 10) // was: id\n };\n\n parts = parts[0].split('/');\n\n parsed.name = parts[0];\n parsed.clockRate = parseInt(parts[1], 10); // was: clockrate\n parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1;\n // legacy alias, got renamed back to channels in ORTC.\n parsed.numChannels = parsed.channels;\n return parsed;\n};\n\n// Generate an a=rtpmap line from RTCRtpCodecCapability or\n// RTCRtpCodecParameters.\nSDPUtils.writeRtpMap = function (codec) {\n var pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n var channels = codec.channels || codec.numChannels || 1;\n return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate + (channels !== 1 ? '/' + channels : '') + '\\r\\n';\n};\n\n// Parses an a=extmap line (headerextension from RFC 5285). Sample input:\n// a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n// a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset\nSDPUtils.parseExtmap = function (line) {\n var parts = line.substr(9).split(' ');\n return {\n id: parseInt(parts[0], 10),\n direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv',\n uri: parts[1]\n };\n};\n\n// Generates a=extmap line from RTCRtpHeaderExtensionParameters or\n// RTCRtpHeaderExtension.\nSDPUtils.writeExtmap = function (headerExtension) {\n return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) + (headerExtension.direction && headerExtension.direction !== 'sendrecv' ? '/' + headerExtension.direction : '') + ' ' + headerExtension.uri + '\\r\\n';\n};\n\n// Parses an ftmp line, returns dictionary. Sample input:\n// a=fmtp:96 vbr=on;cng=on\n// Also deals with vbr=on; cng=on\nSDPUtils.parseFmtp = function (line) {\n var parsed = {};\n var kv = void 0;\n var parts = line.substr(line.indexOf(' ') + 1).split(';');\n for (var j = 0; j < parts.length; j++) {\n kv = parts[j].trim().split('=');\n parsed[kv[0].trim()] = kv[1];\n }\n return parsed;\n};\n\n// Generates an a=ftmp line from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeFmtp = function (codec) {\n var line = '';\n var pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.parameters && Object.keys(codec.parameters).length) {\n var params = [];\n Object.keys(codec.parameters).forEach(function (param) {\n if (codec.parameters[param]) {\n params.push(param + '=' + codec.parameters[param]);\n } else {\n params.push(param);\n }\n });\n line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\\r\\n';\n }\n return line;\n};\n\n// Parses an rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n// a=rtcp-fb:98 nack rpsi\nSDPUtils.parseRtcpFb = function (line) {\n var parts = line.substr(line.indexOf(' ') + 1).split(' ');\n return {\n type: parts.shift(),\n parameter: parts.join(' ')\n };\n};\n// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeRtcpFb = function (codec) {\n var lines = '';\n var pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.rtcpFeedback && codec.rtcpFeedback.length) {\n // FIXME: special handling for trr-int?\n codec.rtcpFeedback.forEach(function (fb) {\n lines += 'a=rtcp-fb:' + pt + ' ' + fb.type + (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') + '\\r\\n';\n });\n }\n return lines;\n};\n\n// Parses an RFC 5576 ssrc media attribute. Sample input:\n// a=ssrc:3735928559 cname:something\nSDPUtils.parseSsrcMedia = function (line) {\n var sp = line.indexOf(' ');\n var parts = {\n ssrc: parseInt(line.substr(7, sp - 7), 10)\n };\n var colon = line.indexOf(':', sp);\n if (colon > -1) {\n parts.attribute = line.substr(sp + 1, colon - sp - 1);\n parts.value = line.substr(colon + 1);\n } else {\n parts.attribute = line.substr(sp + 1);\n }\n return parts;\n};\n\nSDPUtils.parseSsrcGroup = function (line) {\n var parts = line.substr(13).split(' ');\n return {\n semantics: parts.shift(),\n ssrcs: parts.map(function (ssrc) {\n return parseInt(ssrc, 10);\n })\n };\n};\n\n// Extracts the MID (RFC 5888) from a media section.\n// returns the MID or undefined if no mid line was found.\nSDPUtils.getMid = function (mediaSection) {\n var mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0];\n if (mid) {\n return mid.substr(6);\n }\n};\n\nSDPUtils.parseFingerprint = function (line) {\n var parts = line.substr(14).split(' ');\n return {\n algorithm: parts[0].toLowerCase(), // algorithm is case-sensitive in Edge.\n value: parts[1]\n };\n};\n\n// Extracts DTLS parameters from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the fingerprint line as input. See also getIceParameters.\nSDPUtils.getDtlsParameters = function (mediaSection, sessionpart) {\n var lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=fingerprint:');\n // Note: a=setup line is ignored since we use the 'auto' role.\n // Note2: 'algorithm' is not case sensitive except in Edge.\n return {\n role: 'auto',\n fingerprints: lines.map(SDPUtils.parseFingerprint)\n };\n};\n\n// Serializes DTLS parameters to SDP.\nSDPUtils.writeDtlsParameters = function (params, setupType) {\n var sdp = 'a=setup:' + setupType + '\\r\\n';\n params.fingerprints.forEach(function (fp) {\n sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\\r\\n';\n });\n return sdp;\n};\n\n// Parses a=crypto lines into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members\nSDPUtils.parseCryptoLine = function (line) {\n var parts = line.substr(9).split(' ');\n return {\n tag: parseInt(parts[0], 10),\n cryptoSuite: parts[1],\n keyParams: parts[2],\n sessionParams: parts.slice(3)\n };\n};\n\nSDPUtils.writeCryptoLine = function (parameters) {\n return 'a=crypto:' + parameters.tag + ' ' + parameters.cryptoSuite + ' ' + (_typeof(parameters.keyParams) === 'object' ? SDPUtils.writeCryptoKeyParams(parameters.keyParams) : parameters.keyParams) + (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') + '\\r\\n';\n};\n\n// Parses the crypto key parameters into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam*\nSDPUtils.parseCryptoKeyParams = function (keyParams) {\n if (keyParams.indexOf('inline:') !== 0) {\n return null;\n }\n var parts = keyParams.substr(7).split('|');\n return {\n keyMethod: 'inline',\n keySalt: parts[0],\n lifeTime: parts[1],\n mkiValue: parts[2] ? parts[2].split(':')[0] : undefined,\n mkiLength: parts[2] ? parts[2].split(':')[1] : undefined\n };\n};\n\nSDPUtils.writeCryptoKeyParams = function (keyParams) {\n return keyParams.keyMethod + ':' + keyParams.keySalt + (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') + (keyParams.mkiValue && keyParams.mkiLength ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength : '');\n};\n\n// Extracts all SDES parameters.\nSDPUtils.getCryptoParameters = function (mediaSection, sessionpart) {\n var lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=crypto:');\n return lines.map(SDPUtils.parseCryptoLine);\n};\n\n// Parses ICE information from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the ice-ufrag and ice-pwd lines as input.\nSDPUtils.getIceParameters = function (mediaSection, sessionpart) {\n var ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=ice-ufrag:')[0];\n var pwd = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=ice-pwd:')[0];\n if (!(ufrag && pwd)) {\n return null;\n }\n return {\n usernameFragment: ufrag.substr(12),\n password: pwd.substr(10)\n };\n};\n\n// Serializes ICE parameters to SDP.\nSDPUtils.writeIceParameters = function (params) {\n var sdp = 'a=ice-ufrag:' + params.usernameFragment + '\\r\\n' + 'a=ice-pwd:' + params.password + '\\r\\n';\n if (params.iceLite) {\n sdp += 'a=ice-lite\\r\\n';\n }\n return sdp;\n};\n\n// Parses the SDP media section and returns RTCRtpParameters.\nSDPUtils.parseRtpParameters = function (mediaSection) {\n var description = {\n codecs: [],\n headerExtensions: [],\n fecMechanisms: [],\n rtcp: []\n };\n var lines = SDPUtils.splitLines(mediaSection);\n var mline = lines[0].split(' ');\n for (var i = 3; i < mline.length; i++) {\n // find all codecs from mline[3..]\n var pt = mline[i];\n var rtpmapline = SDPUtils.matchPrefix(mediaSection, 'a=rtpmap:' + pt + ' ')[0];\n if (rtpmapline) {\n var codec = SDPUtils.parseRtpMap(rtpmapline);\n var fmtps = SDPUtils.matchPrefix(mediaSection, 'a=fmtp:' + pt + ' ');\n // Only the first a=fmtp:<pt> is considered.\n codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {};\n codec.rtcpFeedback = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-fb:' + pt + ' ').map(SDPUtils.parseRtcpFb);\n description.codecs.push(codec);\n // parse FEC mechanisms from rtpmap lines.\n switch (codec.name.toUpperCase()) {\n case 'RED':\n case 'ULPFEC':\n description.fecMechanisms.push(codec.name.toUpperCase());\n break;\n default:\n // only RED and ULPFEC are recognized as FEC mechanisms.\n break;\n }\n }\n }\n SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(function (line) {\n description.headerExtensions.push(SDPUtils.parseExtmap(line));\n });\n // FIXME: parse rtcp.\n return description;\n};\n\n// Generates parts of the SDP media section describing the capabilities /\n// parameters.\nSDPUtils.writeRtpDescription = function (kind, caps) {\n var sdp = '';\n\n // Build the mline.\n sdp += 'm=' + kind + ' ';\n sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs.\n sdp += ' UDP/TLS/RTP/SAVPF ';\n sdp += caps.codecs.map(function (codec) {\n if (codec.preferredPayloadType !== undefined) {\n return codec.preferredPayloadType;\n }\n return codec.payloadType;\n }).join(' ') + '\\r\\n';\n\n sdp += 'c=IN IP4 0.0.0.0\\r\\n';\n sdp += 'a=rtcp:9 IN IP4 0.0.0.0\\r\\n';\n\n // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.\n caps.codecs.forEach(function (codec) {\n sdp += SDPUtils.writeRtpMap(codec);\n sdp += SDPUtils.writeFmtp(codec);\n sdp += SDPUtils.writeRtcpFb(codec);\n });\n var maxptime = 0;\n caps.codecs.forEach(function (codec) {\n if (codec.maxptime > maxptime) {\n maxptime = codec.maxptime;\n }\n });\n if (maxptime > 0) {\n sdp += 'a=maxptime:' + maxptime + '\\r\\n';\n }\n\n if (caps.headerExtensions) {\n caps.headerExtensions.forEach(function (extension) {\n sdp += SDPUtils.writeExtmap(extension);\n });\n }\n // FIXME: write fecMechanisms.\n return sdp;\n};\n\n// Parses the SDP media section and returns an array of\n// RTCRtpEncodingParameters.\nSDPUtils.parseRtpEncodingParameters = function (mediaSection) {\n var encodingParameters = [];\n var description = SDPUtils.parseRtpParameters(mediaSection);\n var hasRed = description.fecMechanisms.indexOf('RED') !== -1;\n var hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1;\n\n // filter a=ssrc:... cname:, ignore PlanB-msid\n var ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(function (line) {\n return SDPUtils.parseSsrcMedia(line);\n }).filter(function (parts) {\n return parts.attribute === 'cname';\n });\n var primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;\n var secondarySsrc = void 0;\n\n var flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID').map(function (line) {\n var parts = line.substr(17).split(' ');\n return parts.map(function (part) {\n return parseInt(part, 10);\n });\n });\n if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) {\n secondarySsrc = flows[0][1];\n }\n\n description.codecs.forEach(function (codec) {\n if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) {\n var encParam = {\n ssrc: primarySsrc,\n codecPayloadType: parseInt(codec.parameters.apt, 10)\n };\n if (primarySsrc && secondarySsrc) {\n encParam.rtx = { ssrc: secondarySsrc };\n }\n encodingParameters.push(encParam);\n if (hasRed) {\n encParam = JSON.parse(JSON.stringify(encParam));\n encParam.fec = {\n ssrc: primarySsrc,\n mechanism: hasUlpfec ? 'red+ulpfec' : 'red'\n };\n encodingParameters.push(encParam);\n }\n }\n });\n if (encodingParameters.length === 0 && primarySsrc) {\n encodingParameters.push({\n ssrc: primarySsrc\n });\n }\n\n // we support both b=AS and b=TIAS but interpret AS as TIAS.\n var bandwidth = SDPUtils.matchPrefix(mediaSection, 'b=');\n if (bandwidth.length) {\n if (bandwidth[0].indexOf('b=TIAS:') === 0) {\n bandwidth = parseInt(bandwidth[0].substr(7), 10);\n } else if (bandwidth[0].indexOf('b=AS:') === 0) {\n // use formula from JSEP to convert b=AS to TIAS value.\n bandwidth = parseInt(bandwidth[0].substr(5), 10) * 1000 * 0.95 - 50 * 40 * 8;\n } else {\n bandwidth = undefined;\n }\n encodingParameters.forEach(function (params) {\n params.maxBitrate = bandwidth;\n });\n }\n return encodingParameters;\n};\n\n// parses http://draft.ortc.org/#rtcrtcpparameters*\nSDPUtils.parseRtcpParameters = function (mediaSection) {\n var rtcpParameters = {};\n\n // Gets the first SSRC. Note that with RTX there might be multiple\n // SSRCs.\n var remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(function (line) {\n return SDPUtils.parseSsrcMedia(line);\n }).filter(function (obj) {\n return obj.attribute === 'cname';\n })[0];\n if (remoteSsrc) {\n rtcpParameters.cname = remoteSsrc.value;\n rtcpParameters.ssrc = remoteSsrc.ssrc;\n }\n\n // Edge uses the compound attribute instead of reducedSize\n // compound is !reducedSize\n var rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize');\n rtcpParameters.reducedSize = rsize.length > 0;\n rtcpParameters.compound = rsize.length === 0;\n\n // parses the rtcp-mux attrіbute.\n // Note that Edge does not support unmuxed RTCP.\n var mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux');\n rtcpParameters.mux = mux.length > 0;\n\n return rtcpParameters;\n};\n\nSDPUtils.writeRtcpParameters = function (rtcpParameters) {\n var sdp = '';\n if (rtcpParameters.reducedSize) {\n sdp += 'a=rtcp-rsize\\r\\n';\n }\n if (rtcpParameters.mux) {\n sdp += 'a=rtcp-mux\\r\\n';\n }\n if (rtcpParameters.ssrc !== undefined && rtcpParameters.cname) {\n sdp += 'a=ssrc:' + rtcpParameters.ssrc + ' cname:' + rtcpParameters.cname + '\\r\\n';\n }\n return sdp;\n};\n\n// parses either a=msid: or a=ssrc:... msid lines and returns\n// the id of the MediaStream and MediaStreamTrack.\nSDPUtils.parseMsid = function (mediaSection) {\n var parts = void 0;\n var spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:');\n if (spec.length === 1) {\n parts = spec[0].substr(7).split(' ');\n return { stream: parts[0], track: parts[1] };\n }\n var planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(function (line) {\n return SDPUtils.parseSsrcMedia(line);\n }).filter(function (msidParts) {\n return msidParts.attribute === 'msid';\n });\n if (planB.length > 0) {\n parts = planB[0].value.split(' ');\n return { stream: parts[0], track: parts[1] };\n }\n};\n\n// SCTP\n// parses draft-ietf-mmusic-sctp-sdp-26 first and falls back\n// to draft-ietf-mmusic-sctp-sdp-05\nSDPUtils.parseSctpDescription = function (mediaSection) {\n var mline = SDPUtils.parseMLine(mediaSection);\n var maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:');\n var maxMessageSize = void 0;\n if (maxSizeLine.length > 0) {\n maxMessageSize = parseInt(maxSizeLine[0].substr(19), 10);\n }\n if (isNaN(maxMessageSize)) {\n maxMessageSize = 65536;\n }\n var sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:');\n if (sctpPort.length > 0) {\n return {\n port: parseInt(sctpPort[0].substr(12), 10),\n protocol: mline.fmt,\n maxMessageSize: maxMessageSize\n };\n }\n var sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:');\n if (sctpMapLines.length > 0) {\n var parts = sctpMapLines[0].substr(10).split(' ');\n return {\n port: parseInt(parts[0], 10),\n protocol: parts[1],\n maxMessageSize: maxMessageSize\n };\n }\n};\n\n// SCTP\n// outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers\n// support by now receiving in this format, unless we originally parsed\n// as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line\n// protocol of DTLS/SCTP -- without UDP/ or TCP/)\nSDPUtils.writeSctpDescription = function (media, sctp) {\n var output = [];\n if (media.protocol !== 'DTLS/SCTP') {\n output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\\r\\n', 'c=IN IP4 0.0.0.0\\r\\n', 'a=sctp-port:' + sctp.port + '\\r\\n'];\n } else {\n output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\\r\\n', 'c=IN IP4 0.0.0.0\\r\\n', 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\\r\\n'];\n }\n if (sctp.maxMessageSize !== undefined) {\n output.push('a=max-message-size:' + sctp.maxMessageSize + '\\r\\n');\n }\n return output.join('');\n};\n\n// Generate a session ID for SDP.\n// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1\n// recommends using a cryptographically random +ve 64-bit value\n// but right now this should be acceptable and within the right range\nSDPUtils.generateSessionId = function () {\n return Math.random().toString().substr(2, 21);\n};\n\n// Write boiler plate for start of SDP\n// sessId argument is optional - if not supplied it will\n// be generated randomly\n// sessVersion is optional and defaults to 2\n// sessUser is optional and defaults to 'thisisadapterortc'\nSDPUtils.writeSessionBoilerplate = function (sessId, sessVer, sessUser) {\n var sessionId = void 0;\n var version = sessVer !== undefined ? sessVer : 2;\n if (sessId) {\n sessionId = sessId;\n } else {\n sessionId = SDPUtils.generateSessionId();\n }\n var user = sessUser || 'thisisadapterortc';\n // FIXME: sess-id should be an NTP timestamp.\n return 'v=0\\r\\n' + 'o=' + user + ' ' + sessionId + ' ' + version + ' IN IP4 127.0.0.1\\r\\n' + 's=-\\r\\n' + 't=0 0\\r\\n';\n};\n\n// Gets the direction from the mediaSection or the sessionpart.\nSDPUtils.getDirection = function (mediaSection, sessionpart) {\n // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.\n var lines = SDPUtils.splitLines(mediaSection);\n for (var i = 0; i < lines.length; i++) {\n switch (lines[i]) {\n case 'a=sendrecv':\n case 'a=sendonly':\n case 'a=recvonly':\n case 'a=inactive':\n return lines[i].substr(2);\n default:\n // FIXME: What should happen here?\n }\n }\n if (sessionpart) {\n return SDPUtils.getDirection(sessionpart);\n }\n return 'sendrecv';\n};\n\nSDPUtils.getKind = function (mediaSection) {\n var lines = SDPUtils.splitLines(mediaSection);\n var mline = lines[0].split(' ');\n return mline[0].substr(2);\n};\n\nSDPUtils.isRejected = function (mediaSection) {\n return mediaSection.split(' ', 2)[1] === '0';\n};\n\nSDPUtils.parseMLine = function (mediaSection) {\n var lines = SDPUtils.splitLines(mediaSection);\n var parts = lines[0].substr(2).split(' ');\n return {\n kind: parts[0],\n port: parseInt(parts[1], 10),\n protocol: parts[2],\n fmt: parts.slice(3).join(' ')\n };\n};\n\nSDPUtils.parseOLine = function (mediaSection) {\n var line = SDPUtils.matchPrefix(mediaSection, 'o=')[0];\n var parts = line.substr(2).split(' ');\n return {\n username: parts[0],\n sessionId: parts[1],\n sessionVersion: parseInt(parts[2], 10),\n netType: parts[3],\n addressType: parts[4],\n address: parts[5]\n };\n};\n\n// a very naive interpretation of a valid SDP.\nSDPUtils.isValidSDP = function (blob) {\n if (typeof blob !== 'string' || blob.length === 0) {\n return false;\n }\n var lines = SDPUtils.splitLines(blob);\n for (var i = 0; i < lines.length; i++) {\n if (lines[i].length < 2 || lines[i].charAt(1) !== '=') {\n return false;\n }\n // TODO: check the modifier a bit more.\n }\n return true;\n};\n\n// Expose public methods.\nif ((typeof module === 'undefined' ? 'undefined' : _typeof(module)) === 'object') {\n module.exports = SDPUtils;\n}\n},{}]},{},[1])(1)\n});\n"],"names":["define","e","t","n","r","s","o","u","a","require","i","f","Error","code","l","exports","call","length","module","adapter","adapterFactory","window","undefined","Object","defineProperty","value","_ref","arguments","options","shimChrome","shimFirefox","shimSafari","logging","utils","log","browserDetails","detectBrowser","commonShim","extractVersion","disableLog","disableWarnings","sdp","browser","chromeShim","shimPeerConnection","version","browserShim","shimAddIceCandidateNullOrEmpty","shimGetUserMedia","shimMediaStream","shimOnTrack","shimAddTrackRemoveTrack","shimGetSendersWithDtmf","shimGetStats","shimSenderReceiverGetStats","fixNegotiationNeeded","shimRTCIceCandidate","shimConnectionState","shimMaxMessageSize","shimSendThrowTypeError","removeExtmapAllowMixed","firefoxShim","shimRemoveStream","shimSenderGetStats","shimReceiverGetStats","shimRTCDataChannel","shimAddTransceiver","shimGetParameters","shimCreateOffer","shimCreateAnswer","safariShim","shimRTCIceServerUrls","shimCreateOfferLegacy","shimCallbacksAPI","shimLocalStreamsAPI","shimRemoteStreamsAPI","shimTrackEventTransceiver","shimAudioContext","_interopRequireWildcard","obj","__esModule","newObj","key","prototype","hasOwnProperty","default","shimGetDisplayMedia","_typeof","Symbol","iterator","constructor","_getusermedia","enumerable","get","_getdisplaymedia","MediaStream","webkitMediaStream","RTCPeerConnection","this","_ontrack","set","removeEventListener","addEventListener","configurable","origSetRemoteDescription","setRemoteDescription","_this","_ontrackpoly","stream","te","receiver","getReceivers","find","track","id","event","Event","transceiver","streams","dispatchEvent","getTracks","forEach","apply","wrapPeerConnectionEvent","shimSenderWithDtmf","pc","dtmf","_dtmf","kind","createDTMFSender","_pc","getSenders","_senders","slice","origAddTrack","addTrack","sender","push","origRemoveTrack","removeTrack","idx","indexOf","splice","origAddStream","addStream","_this2","origRemoveStream","removeStream","_this3","RTCRtpSender","origGetSenders","_this4","senders","origGetStats","getStats","_this5","_arguments","Array","selector","onSucc","onErr","fixChromeStats_","response","standardReport","result","report","standardStats","timestamp","type","localcandidate","remotecandidate","names","name","stat","makeMapStats","stats","Map","keys","map","successCallbackWrapper_","Promise","resolve","reject","then","RTCRtpReceiver","_this6","filterStats","origGetReceivers","_this7","receivers","srcElement","MediaStreamTrack","err","DOMException","shimAddTrackRemoveTrackWithNative","origGetLocalStreams","getLocalStreams","_this11","nativeStreams","_reverseStreams","_this12","_streams","newStream","replaceInternalStreamId","description","internalId","externalStream","internalStream","replace","RegExp","RTCSessionDescription","replaceExternalStreamId","_this13","signalingState","alreadyExists","oldStream","method","nativeMethod","methodObj","_defineProperty","_this14","args","isLegacyCall","desc","origSetLocalDescription","setLocalDescription","origLocalDescription","getOwnPropertyDescriptor","_this15","streamid","webkitRTCPeerConnection","RTCIceCandidate","target","getConfiguration","sdpSemantics","writable","_this8","_shimmedLocalStreams","streamId","_this9","existingSenders","newSenders","filter","newSender","concat","_this10","getSourceId","navigator","mediaDevices","console","error","getDisplayMedia","constraints","sourceId","widthSpecified","video","width","heightSpecified","height","frameRateSpecified","frameRate","mandatory","chromeMediaSource","chromeMediaSourceId","maxFrameRate","maxWidth","maxHeight","getUserMedia","constraintsToChrome_","c","optional","cc","ideal","exact","min","max","oldname_","prefix","charAt","toUpperCase","oc","mix","advanced","shimConstraints_","func","JSON","parse","stringify","audio","remap","b","face","facingMode","getSupportedFacingModeLies","getSupportedConstraints","matches","enumerateDevices","devices","dev","d","some","match","label","toLowerCase","includes","deviceId","shimError_","PermissionDeniedError","PermissionDismissedError","InvalidStateError","DevicesNotFoundError","ConstraintNotSatisfiedError","TrackStartError","MediaDeviceFailedDueToShutdown","MediaDeviceKillSwitchOn","TabCaptureError","ScreenCaptureError","DeviceCaptureError","message","constraint","constraintName","toString","onSuccess","onError","webkitGetUserMedia","bind","origGetUserMedia","cs","getAudioTracks","getVideoTracks","stop","NativeRTCIceCandidate","candidate","substr","nativeCandidate","parsedCandidate","_sdp2","parseCandidate","augmentedCandidate","assign","toJSON","sdpMid","sdpMLineIndex","usernameFragment","_sctp","sctpInDescription","sections","splitSections","shift","mediaSection","mLine","parseMLine","protocol","getRemoteFirefoxVersion","parseInt","getCanSendMaxMessageSize","remoteIsFirefox","canSendMaxMessageSize","getMaxMessageSize","maxMessageSize","matchPrefix","_getConfiguration","isFirefox","canSendMMS","remoteMMS","Number","POSITIVE_INFINITY","Math","sctp","wrapDcSend","dc","origDataChannelSend","send","data","size","byteLength","readyState","TypeError","origCreateDataChannel","createDataChannel","dataChannel","channel","proto","completed","checking","iceConnectionState","_onconnectionstatechange","cb","origMethod","_connectionstatechangepoly","_lastConnectionState","connectionState","newEvent","nativeSRD","split","line","trim","join","nativeAddIceCandidate","addIceCandidate","_sdp","RTCTrackEvent","mozRTCPeerConnection","modernStatsTypes","inboundrtp","outboundrtp","candidatepair","nativeGetStats","deprecated","DataChannel","RTCDataChannel","origAddTransceiver","addTransceiver","setParametersPromises","initParameters","shouldPerformCheck","sendEncodings","encodingParam","test","rid","parseFloat","scaleResolutionDownBy","RangeError","maxFramerate","params","getParameters","encodings","setParameters","catch","origGetParameters","origCreateOffer","createOffer","_arguments2","all","finally","origCreateAnswer","createAnswer","_arguments3","preferredMediaSource","mediaSource","nativeGetUserMedia","getSettings","nativeGetSettings","applyConstraints","nativeApplyConstraints","_localStreams","_addTrack","_len","_key","index","tracks","getRemoteStreams","_remoteStreams","_onaddstream","_onaddstreampoly","successCallback","failureCallback","promise","withCallback","_getUserMedia","shimConstraints","errcb","OrigPeerConnection","pcConfig","pcConstraints","iceServers","newIceServers","server","urls","url","generateCertificate","offerOptions","offerToReceiveAudio","audioTransceiver","getTransceivers","direction","setDirection","offerToReceiveVideo","videoTransceiver","AudioContext","webkitAudioContext","compactObject","eventNameToWrap","wrapper","nativeAddEventListener","nativeEventName","wrappedCallback","modifiedEvent","handleEvent","_eventMap","nativeRemoveEventListener","has","unwrappedCb","delete","bool","logDisabled_","deprecationWarnings_","oldMethod","newMethod","warn","mozGetUserMedia","userAgent","isSecureContext","RTCIceGatherer","supportsUnifiedPlan","RTCRtpTransceiver","isObject","reduce","accumulator","isObj","isEmptyObject","walkStats","outbound","streamStatsType","filteredResult","trackStats","trackIdentifier","trackStat","trackId","uastring","expr","pos","val","base","resultSet","endsWith","SDPUtils","random","localCName","generateIdentifier","splitLines","blob","part","getDescription","getMediaSections","parts","foundation","substring","component","priority","ip","address","port","relatedAddress","relatedPort","tcpType","ufrag","writeCandidate","parseIceOptions","parseRtpMap","parsed","payloadType","clockRate","channels","numChannels","writeRtpMap","codec","pt","preferredPayloadType","parseExtmap","uri","writeExtmap","headerExtension","preferredId","parseFmtp","kv","j","writeFmtp","parameters","param","parseRtcpFb","parameter","writeRtcpFb","lines","rtcpFeedback","fb","parseSsrcMedia","sp","ssrc","colon","attribute","parseSsrcGroup","semantics","ssrcs","getMid","mid","parseFingerprint","algorithm","getDtlsParameters","sessionpart","role","fingerprints","writeDtlsParameters","setupType","fp","parseCryptoLine","tag","cryptoSuite","keyParams","sessionParams","writeCryptoLine","writeCryptoKeyParams","parseCryptoKeyParams","keyMethod","keySalt","lifeTime","mkiValue","mkiLength","getCryptoParameters","getIceParameters","pwd","password","writeIceParameters","iceLite","parseRtpParameters","codecs","headerExtensions","fecMechanisms","rtcp","mline","rtpmapline","fmtps","writeRtpDescription","caps","maxptime","extension","parseRtpEncodingParameters","encodingParameters","hasRed","hasUlpfec","primarySsrc","secondarySsrc","flows","apt","encParam","codecPayloadType","rtx","fec","mechanism","bandwidth","maxBitrate","parseRtcpParameters","rtcpParameters","remoteSsrc","cname","rsize","reducedSize","compound","mux","writeRtcpParameters","parseMsid","spec","planB","msidParts","parseSctpDescription","maxSizeLine","isNaN","sctpPort","fmt","sctpMapLines","writeSctpDescription","media","output","generateSessionId","writeSessionBoilerplate","sessId","sessVer","sessUser","getDirection","getKind","isRejected","parseOLine","username","sessionId","sessionVersion","netType","addressType","isValidSDP"],"mappings":"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"}