ÿØÿàJFIFÿÛ„ ( %"1"%)+...383,7(-.- 404 Not Found
Sh3ll
OdayForums


Server : Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/7.4.20
System : Linux st2.domain.com 3.10.0-1127.10.1.el7.x86_64 #1 SMP Wed Jun 3 14:28:03 UTC 2020 x86_64
User : apache ( 48)
PHP Version : 7.4.20
Disable Function : NONE
Directory :  /proc/self/cwd/usr/local/FlashphonerWebCallServer/client2/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //proc/self/cwd/usr/local/FlashphonerWebCallServer/client2/flashphoner-webrtc-only.min.js
!function(f){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=f();else if("function"==typeof define&&define.amd)define([],f);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).Flashphoner=f()}}((function(){return function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,(function(r){return o(e[i][1][r]||r)}),p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}({1:[function(require,module,exports){},{}],2:[function(require,module,exports){"use strict";function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}
/**
* KalmanFilter
* @class
* @author Wouter Bulten
* @see {@link http://github.com/wouterbulten/kalmanjs}
* @version Version: 1.0.0-beta
* @copyright Copyright 2015-2018 Wouter Bulten
* @license MIT License
* @preserve
*/
var KalmanFilter=function(){function KalmanFilter(){var _ref=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},_ref$R=_ref.R,R=void 0===_ref$R?1:_ref$R,_ref$Q=_ref.Q,Q=void 0===_ref$Q?1:_ref$Q,_ref$A=_ref.A,A=void 0===_ref$A?1:_ref$A,_ref$B=_ref.B,B=void 0===_ref$B?0:_ref$B,_ref$C=_ref.C,C=void 0===_ref$C?1:_ref$C;_classCallCheck(this,KalmanFilter),this.R=R,this.Q=Q,this.A=A,this.C=C,this.B=B,this.cov=NaN,this.x=NaN}var Constructor,protoProps,staticProps;return Constructor=KalmanFilter,(protoProps=[{key:"filter",value:function(z){var u=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(isNaN(this.x))this.x=1/this.C*z,this.cov=1/this.C*this.Q*(1/this.C);else{var predX=this.predict(u),predCov=this.uncertainty(),K=predCov*this.C*(1/(this.C*predCov*this.C+this.Q));this.x=predX+K*(z-this.C*predX),this.cov=predCov-K*this.C*predCov}return this.x}},{key:"predict",value:function(){var u=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return this.A*this.x+this.B*u}},{key:"uncertainty",value:function(){return this.A*this.cov*this.A+this.R}},{key:"lastMeasurement",value:function(){return this.x}},{key:"setMeasurementNoise",value:function(noise){this.Q=noise}},{key:"setProcessNoise",value:function(noise){this.R=noise}}])&&_defineProperties(Constructor.prototype,protoProps),staticProps&&_defineProperties(Constructor,staticProps),KalmanFilter}();module.exports=KalmanFilter},{}],3:[function(require,module,exports){var cachedSetTimeout,cachedClearTimeout,process=module.exports={};function defaultSetTimout(){throw new Error("setTimeout has not been defined")}function defaultClearTimeout(){throw new Error("clearTimeout has not been defined")}function runTimeout(fun){if(cachedSetTimeout===setTimeout)return setTimeout(fun,0);if((cachedSetTimeout===defaultSetTimout||!cachedSetTimeout)&&setTimeout)return cachedSetTimeout=setTimeout,setTimeout(fun,0);try{return cachedSetTimeout(fun,0)}catch(e){try{return cachedSetTimeout.call(null,fun,0)}catch(e){return cachedSetTimeout.call(this,fun,0)}}}!function(){try{cachedSetTimeout="function"==typeof setTimeout?setTimeout:defaultSetTimout}catch(e){cachedSetTimeout=defaultSetTimout}try{cachedClearTimeout="function"==typeof clearTimeout?clearTimeout:defaultClearTimeout}catch(e){cachedClearTimeout=defaultClearTimeout}}();var currentQueue,queue=[],draining=!1,queueIndex=-1;function cleanUpNextTick(){draining&&currentQueue&&(draining=!1,currentQueue.length?queue=currentQueue.concat(queue):queueIndex=-1,queue.length&&drainQueue())}function drainQueue(){if(!draining){var timeout=runTimeout(cleanUpNextTick);draining=!0;for(var len=queue.length;len;){for(currentQueue=queue,queue=[];++queueIndex<len;)currentQueue&&currentQueue[queueIndex].run();queueIndex=-1,len=queue.length}currentQueue=null,draining=!1,function(marker){if(cachedClearTimeout===clearTimeout)return clearTimeout(marker);if((cachedClearTimeout===defaultClearTimeout||!cachedClearTimeout)&&clearTimeout)return cachedClearTimeout=clearTimeout,clearTimeout(marker);try{cachedClearTimeout(marker)}catch(e){try{return cachedClearTimeout.call(null,marker)}catch(e){return cachedClearTimeout.call(this,marker)}}}(timeout)}}function Item(fun,array){this.fun=fun,this.array=array}function noop(){}process.nextTick=function(fun){var args=new Array(arguments.length-1);if(arguments.length>1)for(var i=1;i<arguments.length;i++)args[i-1]=arguments[i];queue.push(new Item(fun,args)),1!==queue.length||draining||runTimeout(drainQueue)},Item.prototype.run=function(){this.fun.apply(null,this.array)},process.title="browser",process.browser=!0,process.env={},process.argv=[],process.version="",process.versions={},process.on=noop,process.addListener=noop,process.once=noop,process.off=noop,process.removeListener=noop,process.removeAllListeners=noop,process.emit=noop,process.prependListener=noop,process.prependOnceListener=noop,process.listeners=function(name){return[]},process.binding=function(name){throw new Error("process.binding is not supported")},process.cwd=function(){return"/"},process.chdir=function(dir){throw new Error("process.chdir is not supported")},process.umask=function(){return 0}},{}],4:[function(require,module,exports){(function(setImmediate){(function(){function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}!function(root){var setTimeoutFunc=setTimeout;function noop(){}function Promise(fn){if(!(this instanceof Promise))throw new TypeError("Promises must be constructed via new");if("function"!=typeof fn)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],doResolve(fn,this)}function handle(self,deferred){for(;3===self._state;)self=self._value;0!==self._state?(self._handled=!0,Promise._immediateFn((function(){var cb=1===self._state?deferred.onFulfilled:deferred.onRejected;if(null!==cb){var ret;try{ret=cb(self._value)}catch(e){return void reject(deferred.promise,e)}resolve(deferred.promise,ret)}else(1===self._state?resolve:reject)(deferred.promise,self._value)}))):self._deferreds.push(deferred)}function resolve(self,newValue){try{if(newValue===self)throw new TypeError("A promise cannot be resolved with itself.");if(newValue&&("object"===_typeof(newValue)||"function"==typeof newValue)){var then=newValue.then;if(newValue instanceof Promise)return self._state=3,self._value=newValue,void finale(self);if("function"==typeof then)return void doResolve((fn=then,thisArg=newValue,function(){fn.apply(thisArg,arguments)}),self)}self._state=1,self._value=newValue,finale(self)}catch(e){reject(self,e)}var fn,thisArg}function reject(self,newValue){self._state=2,self._value=newValue,finale(self)}function finale(self){2===self._state&&0===self._deferreds.length&&Promise._immediateFn((function(){self._handled||Promise._unhandledRejectionFn(self._value)}));for(var i=0,len=self._deferreds.length;i<len;i++)handle(self,self._deferreds[i]);self._deferreds=null}function Handler(onFulfilled,onRejected,promise){this.onFulfilled="function"==typeof onFulfilled?onFulfilled:null,this.onRejected="function"==typeof onRejected?onRejected:null,this.promise=promise}function doResolve(fn,self){var done=!1;try{fn((function(value){done||(done=!0,resolve(self,value))}),(function(reason){done||(done=!0,reject(self,reason))}))}catch(ex){if(done)return;done=!0,reject(self,ex)}}Promise.prototype.catch=function(onRejected){return this.then(null,onRejected)},Promise.prototype.then=function(onFulfilled,onRejected){var prom=new this.constructor(noop);return handle(this,new Handler(onFulfilled,onRejected,prom)),prom},Promise.all=function(arr){return new Promise((function(resolve,reject){if(!arr||"undefined"==typeof arr.length)throw new TypeError("Promise.all accepts an array");var args=Array.prototype.slice.call(arr);if(0===args.length)return resolve([]);var remaining=args.length;function res(i,val){try{if(val&&("object"===_typeof(val)||"function"==typeof val)){var then=val.then;if("function"==typeof then)return void then.call(val,(function(val){res(i,val)}),reject)}args[i]=val,0==--remaining&&resolve(args)}catch(ex){reject(ex)}}for(var i=0;i<args.length;i++)res(i,args[i])}))},Promise.resolve=function(value){return value&&"object"===_typeof(value)&&value.constructor===Promise?value:new Promise((function(resolve){resolve(value)}))},Promise.reject=function(value){return new Promise((function(resolve,reject){reject(value)}))},Promise.race=function(values){return new Promise((function(resolve,reject){for(var i=0,len=values.length;i<len;i++)values[i].then(resolve,reject)}))},Promise._immediateFn="function"==typeof setImmediate&&function(fn){setImmediate(fn)}||function(fn){setTimeoutFunc(fn,0)},Promise._unhandledRejectionFn=function(err){"undefined"!=typeof console&&console&&console.warn("Possible Unhandled Promise Rejection:",err)},Promise._setImmediateFn=function(fn){Promise._immediateFn=fn},Promise._setUnhandledRejectionFn=function(fn){Promise._unhandledRejectionFn=fn},"undefined"!=typeof module&&module.exports?module.exports=Promise:root.Promise||(root.Promise=Promise)}(this)}).call(this)}).call(this,require("timers").setImmediate)},{timers:7}],5:[function(require,module,exports){"use strict";var SDPUtils=require("sdp");function writeMediaSection(transceiver,caps,type,stream,dtlsRole){var sdp=SDPUtils.writeRtpDescription(transceiver.kind,caps);if(sdp+=SDPUtils.writeIceParameters(transceiver.iceGatherer.getLocalParameters()),sdp+=SDPUtils.writeDtlsParameters(transceiver.dtlsTransport.getLocalParameters(),"offer"===type?"actpass":dtlsRole||"active"),sdp+="a=mid:"+transceiver.mid+"\r\n",transceiver.rtpSender&&transceiver.rtpReceiver?sdp+="a=sendrecv\r\n":transceiver.rtpSender?sdp+="a=sendonly\r\n":transceiver.rtpReceiver?sdp+="a=recvonly\r\n":sdp+="a=inactive\r\n",transceiver.rtpSender){var trackId=transceiver.rtpSender._initialTrackId||transceiver.rtpSender.track.id;transceiver.rtpSender._initialTrackId=trackId;var msid="msid:"+(stream?stream.id:"-")+" "+trackId+"\r\n";sdp+="a="+msid,sdp+="a=ssrc:"+transceiver.sendEncodingParameters[0].ssrc+" "+msid,transceiver.sendEncodingParameters[0].rtx&&(sdp+="a=ssrc:"+transceiver.sendEncodingParameters[0].rtx.ssrc+" "+msid,sdp+="a=ssrc-group:FID "+transceiver.sendEncodingParameters[0].ssrc+" "+transceiver.sendEncodingParameters[0].rtx.ssrc+"\r\n")}return sdp+="a=ssrc:"+transceiver.sendEncodingParameters[0].ssrc+" cname:"+SDPUtils.localCName+"\r\n",transceiver.rtpSender&&transceiver.sendEncodingParameters[0].rtx&&(sdp+="a=ssrc:"+transceiver.sendEncodingParameters[0].rtx.ssrc+" cname:"+SDPUtils.localCName+"\r\n"),sdp}function getCommonCapabilities(localCapabilities,remoteCapabilities){var commonCapabilities={codecs:[],headerExtensions:[],fecMechanisms:[]},findCodecByPayloadType=function(pt,codecs){pt=parseInt(pt,10);for(var i=0;i<codecs.length;i++)if(codecs[i].payloadType===pt||codecs[i].preferredPayloadType===pt)return codecs[i]},rtxCapabilityMatches=function(lRtx,rRtx,lCodecs,rCodecs){var lCodec=findCodecByPayloadType(lRtx.parameters.apt,lCodecs),rCodec=findCodecByPayloadType(rRtx.parameters.apt,rCodecs);return lCodec&&rCodec&&lCodec.name.toLowerCase()===rCodec.name.toLowerCase()};return localCapabilities.codecs.forEach((function(lCodec){for(var i=0;i<remoteCapabilities.codecs.length;i++){var rCodec=remoteCapabilities.codecs[i];if(lCodec.name.toLowerCase()===rCodec.name.toLowerCase()&&lCodec.clockRate===rCodec.clockRate){if("rtx"===lCodec.name.toLowerCase()&&lCodec.parameters&&rCodec.parameters.apt&&!rtxCapabilityMatches(lCodec,rCodec,localCapabilities.codecs,remoteCapabilities.codecs))continue;(rCodec=JSON.parse(JSON.stringify(rCodec))).numChannels=Math.min(lCodec.numChannels,rCodec.numChannels),commonCapabilities.codecs.push(rCodec),rCodec.rtcpFeedback=rCodec.rtcpFeedback.filter((function(fb){for(var j=0;j<lCodec.rtcpFeedback.length;j++)if(lCodec.rtcpFeedback[j].type===fb.type&&lCodec.rtcpFeedback[j].parameter===fb.parameter)return!0;return!1}));break}}})),localCapabilities.headerExtensions.forEach((function(lHeaderExtension){for(var i=0;i<remoteCapabilities.headerExtensions.length;i++){var rHeaderExtension=remoteCapabilities.headerExtensions[i];if(lHeaderExtension.uri===rHeaderExtension.uri){commonCapabilities.headerExtensions.push(rHeaderExtension);break}}})),commonCapabilities}function isActionAllowedInSignalingState(action,type,signalingState){return-1!=={offer:{setLocalDescription:["stable","have-local-offer"],setRemoteDescription:["stable","have-remote-offer"]},answer:{setLocalDescription:["have-remote-offer","have-local-pranswer"],setRemoteDescription:["have-local-offer","have-remote-pranswer"]}}[type][action].indexOf(signalingState)}function maybeAddCandidate(iceTransport,candidate){var alreadyAdded=iceTransport.getRemoteCandidates().find((function(remoteCandidate){return candidate.foundation===remoteCandidate.foundation&&candidate.ip===remoteCandidate.ip&&candidate.port===remoteCandidate.port&&candidate.priority===remoteCandidate.priority&&candidate.protocol===remoteCandidate.protocol&&candidate.type===remoteCandidate.type}));return alreadyAdded||iceTransport.addRemoteCandidate(candidate),!alreadyAdded}function makeError(name,description){var e=new Error(description);return e.name=name,e.code={NotSupportedError:9,InvalidStateError:11,InvalidAccessError:15,TypeError:void 0,OperationError:void 0}[name],e}module.exports=function(window,edgeVersion){function addTrackToStreamAndFireEvent(track,stream){stream.addTrack(track),stream.dispatchEvent(new window.MediaStreamTrackEvent("addtrack",{track:track}))}function fireAddTrack(pc,track,receiver,streams){var trackEvent=new Event("track");trackEvent.track=track,trackEvent.receiver=receiver,trackEvent.transceiver={receiver:receiver},trackEvent.streams=streams,window.setTimeout((function(){pc._dispatchEvent("track",trackEvent)}))}var RTCPeerConnection=function(config){var pc=this,_eventTarget=document.createDocumentFragment();if(["addEventListener","removeEventListener","dispatchEvent"].forEach((function(method){pc[method]=_eventTarget[method].bind(_eventTarget)})),this.canTrickleIceCandidates=null,this.needNegotiation=!1,this.localStreams=[],this.remoteStreams=[],this._localDescription=null,this._remoteDescription=null,this.signalingState="stable",this.iceConnectionState="new",this.connectionState="new",this.iceGatheringState="new",config=JSON.parse(JSON.stringify(config||{})),this.usingBundle="max-bundle"===config.bundlePolicy,"negotiate"===config.rtcpMuxPolicy)throw makeError("NotSupportedError","rtcpMuxPolicy 'negotiate' is not supported");switch(config.rtcpMuxPolicy||(config.rtcpMuxPolicy="require"),config.iceTransportPolicy){case"all":case"relay":break;default:config.iceTransportPolicy="all"}switch(config.bundlePolicy){case"balanced":case"max-compat":case"max-bundle":break;default:config.bundlePolicy="balanced"}if(config.iceServers=function(iceServers,edgeVersion){var hasTurn=!1;return(iceServers=JSON.parse(JSON.stringify(iceServers))).filter((function(server){if(server&&(server.urls||server.url)){var urls=server.urls||server.url;server.url&&!server.urls&&console.warn("RTCIceServer.url is deprecated! Use urls instead.");var isString="string"==typeof urls;return isString&&(urls=[urls]),urls=urls.filter((function(url){return 0===url.indexOf("turn:")&&-1!==url.indexOf("transport=udp")&&-1===url.indexOf("turn:[")&&!hasTurn?(hasTurn=!0,!0):0===url.indexOf("stun:")&&edgeVersion>=14393&&-1===url.indexOf("?transport=udp")})),delete server.url,server.urls=isString?urls[0]:urls,!!urls.length}}))}(config.iceServers||[],edgeVersion),this._iceGatherers=[],config.iceCandidatePoolSize)for(var i=config.iceCandidatePoolSize;i>0;i--)this._iceGatherers.push(new window.RTCIceGatherer({iceServers:config.iceServers,gatherPolicy:config.iceTransportPolicy}));else config.iceCandidatePoolSize=0;this._config=config,this.transceivers=[],this._sdpSessionId=SDPUtils.generateSessionId(),this._sdpSessionVersion=0,this._dtlsRole=void 0,this._isClosed=!1};Object.defineProperty(RTCPeerConnection.prototype,"localDescription",{configurable:!0,get:function(){return this._localDescription}}),Object.defineProperty(RTCPeerConnection.prototype,"remoteDescription",{configurable:!0,get:function(){return this._remoteDescription}}),RTCPeerConnection.prototype.onicecandidate=null,RTCPeerConnection.prototype.onaddstream=null,RTCPeerConnection.prototype.ontrack=null,RTCPeerConnection.prototype.onremovestream=null,RTCPeerConnection.prototype.onsignalingstatechange=null,RTCPeerConnection.prototype.oniceconnectionstatechange=null,RTCPeerConnection.prototype.onconnectionstatechange=null,RTCPeerConnection.prototype.onicegatheringstatechange=null,RTCPeerConnection.prototype.onnegotiationneeded=null,RTCPeerConnection.prototype.ondatachannel=null,RTCPeerConnection.prototype._dispatchEvent=function(name,event){this._isClosed||(this.dispatchEvent(event),"function"==typeof this["on"+name]&&this["on"+name](event))},RTCPeerConnection.prototype._emitGatheringStateChange=function(){var event=new Event("icegatheringstatechange");this._dispatchEvent("icegatheringstatechange",event)},RTCPeerConnection.prototype.getConfiguration=function(){return this._config},RTCPeerConnection.prototype.getLocalStreams=function(){return this.localStreams},RTCPeerConnection.prototype.getRemoteStreams=function(){return this.remoteStreams},RTCPeerConnection.prototype._createTransceiver=function(kind,doNotAdd){var hasBundleTransport=this.transceivers.length>0,transceiver={track:null,iceGatherer:null,iceTransport:null,dtlsTransport:null,localCapabilities:null,remoteCapabilities:null,rtpSender:null,rtpReceiver:null,kind:kind,mid:null,sendEncodingParameters:null,recvEncodingParameters:null,stream:null,associatedRemoteMediaStreams:[],wantReceive:!0};if(this.usingBundle&&hasBundleTransport)transceiver.iceTransport=this.transceivers[0].iceTransport,transceiver.dtlsTransport=this.transceivers[0].dtlsTransport;else{var transports=this._createIceAndDtlsTransports();transceiver.iceTransport=transports.iceTransport,transceiver.dtlsTransport=transports.dtlsTransport}return doNotAdd||this.transceivers.push(transceiver),transceiver},RTCPeerConnection.prototype.addTrack=function(track,stream){if(this._isClosed)throw makeError("InvalidStateError","Attempted to call addTrack on a closed peerconnection.");var transceiver;if(this.transceivers.find((function(s){return s.track===track})))throw makeError("InvalidAccessError","Track already exists.");for(var i=0;i<this.transceivers.length;i++)this.transceivers[i].track||this.transceivers[i].kind!==track.kind||(transceiver=this.transceivers[i]);return transceiver||(transceiver=this._createTransceiver(track.kind)),this._maybeFireNegotiationNeeded(),-1===this.localStreams.indexOf(stream)&&this.localStreams.push(stream),transceiver.track=track,transceiver.stream=stream,transceiver.rtpSender=new window.RTCRtpSender(track,transceiver.dtlsTransport),transceiver.rtpSender},RTCPeerConnection.prototype.addStream=function(stream){var pc=this;if(edgeVersion>=15025)stream.getTracks().forEach((function(track){pc.addTrack(track,stream)}));else{var clonedStream=stream.clone();stream.getTracks().forEach((function(track,idx){var clonedTrack=clonedStream.getTracks()[idx];track.addEventListener("enabled",(function(event){clonedTrack.enabled=event.enabled}))})),clonedStream.getTracks().forEach((function(track){pc.addTrack(track,clonedStream)}))}},RTCPeerConnection.prototype.removeTrack=function(sender){if(this._isClosed)throw makeError("InvalidStateError","Attempted to call removeTrack on a closed peerconnection.");if(!(sender instanceof window.RTCRtpSender))throw new TypeError("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.");var transceiver=this.transceivers.find((function(t){return t.rtpSender===sender}));if(!transceiver)throw makeError("InvalidAccessError","Sender was not created by this connection.");var stream=transceiver.stream;transceiver.rtpSender.stop(),transceiver.rtpSender=null,transceiver.track=null,transceiver.stream=null,-1===this.transceivers.map((function(t){return t.stream})).indexOf(stream)&&this.localStreams.indexOf(stream)>-1&&this.localStreams.splice(this.localStreams.indexOf(stream),1),this._maybeFireNegotiationNeeded()},RTCPeerConnection.prototype.removeStream=function(stream){var pc=this;stream.getTracks().forEach((function(track){var sender=pc.getSenders().find((function(s){return s.track===track}));sender&&pc.removeTrack(sender)}))},RTCPeerConnection.prototype.getSenders=function(){return this.transceivers.filter((function(transceiver){return!!transceiver.rtpSender})).map((function(transceiver){return transceiver.rtpSender}))},RTCPeerConnection.prototype.getReceivers=function(){return this.transceivers.filter((function(transceiver){return!!transceiver.rtpReceiver})).map((function(transceiver){return transceiver.rtpReceiver}))},RTCPeerConnection.prototype._createIceGatherer=function(sdpMLineIndex,usingBundle){var pc=this;if(usingBundle&&sdpMLineIndex>0)return this.transceivers[0].iceGatherer;if(this._iceGatherers.length)return this._iceGatherers.shift();var iceGatherer=new window.RTCIceGatherer({iceServers:this._config.iceServers,gatherPolicy:this._config.iceTransportPolicy});return Object.defineProperty(iceGatherer,"state",{value:"new",writable:!0}),this.transceivers[sdpMLineIndex].bufferedCandidateEvents=[],this.transceivers[sdpMLineIndex].bufferCandidates=function(event){var end=!event.candidate||0===Object.keys(event.candidate).length;iceGatherer.state=end?"completed":"gathering",null!==pc.transceivers[sdpMLineIndex].bufferedCandidateEvents&&pc.transceivers[sdpMLineIndex].bufferedCandidateEvents.push(event)},iceGatherer.addEventListener("localcandidate",this.transceivers[sdpMLineIndex].bufferCandidates),iceGatherer},RTCPeerConnection.prototype._gather=function(mid,sdpMLineIndex){var pc=this,iceGatherer=this.transceivers[sdpMLineIndex].iceGatherer;if(!iceGatherer.onlocalcandidate){var bufferedCandidateEvents=this.transceivers[sdpMLineIndex].bufferedCandidateEvents;this.transceivers[sdpMLineIndex].bufferedCandidateEvents=null,iceGatherer.removeEventListener("localcandidate",this.transceivers[sdpMLineIndex].bufferCandidates),iceGatherer.onlocalcandidate=function(evt){if(!(pc.usingBundle&&sdpMLineIndex>0)){var event=new Event("icecandidate");event.candidate={sdpMid:mid,sdpMLineIndex:sdpMLineIndex};var cand=evt.candidate,end=!cand||0===Object.keys(cand).length;if(end)"new"!==iceGatherer.state&&"gathering"!==iceGatherer.state||(iceGatherer.state="completed");else{"new"===iceGatherer.state&&(iceGatherer.state="gathering"),cand.component=1,cand.ufrag=iceGatherer.getLocalParameters().usernameFragment;var serializedCandidate=SDPUtils.writeCandidate(cand);event.candidate=Object.assign(event.candidate,SDPUtils.parseCandidate(serializedCandidate)),event.candidate.candidate=serializedCandidate,event.candidate.toJSON=function(){return{candidate:event.candidate.candidate,sdpMid:event.candidate.sdpMid,sdpMLineIndex:event.candidate.sdpMLineIndex,usernameFragment:event.candidate.usernameFragment}}}var sections=SDPUtils.getMediaSections(pc._localDescription.sdp);sections[event.candidate.sdpMLineIndex]+=end?"a=end-of-candidates\r\n":"a="+event.candidate.candidate+"\r\n",pc._localDescription.sdp=SDPUtils.getDescription(pc._localDescription.sdp)+sections.join("");var complete=pc.transceivers.every((function(transceiver){return transceiver.iceGatherer&&"completed"===transceiver.iceGatherer.state}));"gathering"!==pc.iceGatheringState&&(pc.iceGatheringState="gathering",pc._emitGatheringStateChange()),end||pc._dispatchEvent("icecandidate",event),complete&&(pc._dispatchEvent("icecandidate",new Event("icecandidate")),pc.iceGatheringState="complete",pc._emitGatheringStateChange())}},window.setTimeout((function(){bufferedCandidateEvents.forEach((function(e){iceGatherer.onlocalcandidate(e)}))}),0)}},RTCPeerConnection.prototype._createIceAndDtlsTransports=function(){var pc=this,iceTransport=new window.RTCIceTransport(null);iceTransport.onicestatechange=function(){pc._updateIceConnectionState(),pc._updateConnectionState()};var dtlsTransport=new window.RTCDtlsTransport(iceTransport);return dtlsTransport.ondtlsstatechange=function(){pc._updateConnectionState()},dtlsTransport.onerror=function(){Object.defineProperty(dtlsTransport,"state",{value:"failed",writable:!0}),pc._updateConnectionState()},{iceTransport:iceTransport,dtlsTransport:dtlsTransport}},RTCPeerConnection.prototype._disposeIceAndDtlsTransports=function(sdpMLineIndex){var iceGatherer=this.transceivers[sdpMLineIndex].iceGatherer;iceGatherer&&(delete iceGatherer.onlocalcandidate,delete this.transceivers[sdpMLineIndex].iceGatherer);var iceTransport=this.transceivers[sdpMLineIndex].iceTransport;iceTransport&&(delete iceTransport.onicestatechange,delete this.transceivers[sdpMLineIndex].iceTransport);var dtlsTransport=this.transceivers[sdpMLineIndex].dtlsTransport;dtlsTransport&&(delete dtlsTransport.ondtlsstatechange,delete dtlsTransport.onerror,delete this.transceivers[sdpMLineIndex].dtlsTransport)},RTCPeerConnection.prototype._transceive=function(transceiver,send,recv){var params=getCommonCapabilities(transceiver.localCapabilities,transceiver.remoteCapabilities);send&&transceiver.rtpSender&&(params.encodings=transceiver.sendEncodingParameters,params.rtcp={cname:SDPUtils.localCName,compound:transceiver.rtcpParameters.compound},transceiver.recvEncodingParameters.length&&(params.rtcp.ssrc=transceiver.recvEncodingParameters[0].ssrc),transceiver.rtpSender.send(params)),recv&&transceiver.rtpReceiver&&params.codecs.length>0&&("video"===transceiver.kind&&transceiver.recvEncodingParameters&&edgeVersion<15019&&transceiver.recvEncodingParameters.forEach((function(p){delete p.rtx})),transceiver.recvEncodingParameters.length?params.encodings=transceiver.recvEncodingParameters:params.encodings=[{}],params.rtcp={compound:transceiver.rtcpParameters.compound},transceiver.rtcpParameters.cname&&(params.rtcp.cname=transceiver.rtcpParameters.cname),transceiver.sendEncodingParameters.length&&(params.rtcp.ssrc=transceiver.sendEncodingParameters[0].ssrc),transceiver.rtpReceiver.receive(params))},RTCPeerConnection.prototype.setLocalDescription=function(description){var sections,sessionpart,pc=this;if(-1===["offer","answer"].indexOf(description.type))return Promise.reject(makeError("TypeError",'Unsupported type "'+description.type+'"'));if(!isActionAllowedInSignalingState("setLocalDescription",description.type,pc.signalingState)||pc._isClosed)return Promise.reject(makeError("InvalidStateError","Can not set local "+description.type+" in state "+pc.signalingState));if("offer"===description.type)sections=SDPUtils.splitSections(description.sdp),sessionpart=sections.shift(),sections.forEach((function(mediaSection,sdpMLineIndex){var caps=SDPUtils.parseRtpParameters(mediaSection);pc.transceivers[sdpMLineIndex].localCapabilities=caps})),pc.transceivers.forEach((function(transceiver,sdpMLineIndex){pc._gather(transceiver.mid,sdpMLineIndex)}));else if("answer"===description.type){sections=SDPUtils.splitSections(pc._remoteDescription.sdp),sessionpart=sections.shift();var isIceLite=SDPUtils.matchPrefix(sessionpart,"a=ice-lite").length>0;sections.forEach((function(mediaSection,sdpMLineIndex){var transceiver=pc.transceivers[sdpMLineIndex],iceGatherer=transceiver.iceGatherer,iceTransport=transceiver.iceTransport,dtlsTransport=transceiver.dtlsTransport,localCapabilities=transceiver.localCapabilities,remoteCapabilities=transceiver.remoteCapabilities;if(!(SDPUtils.isRejected(mediaSection)&&0===SDPUtils.matchPrefix(mediaSection,"a=bundle-only").length)&&!transceiver.rejected){var remoteIceParameters=SDPUtils.getIceParameters(mediaSection,sessionpart),remoteDtlsParameters=SDPUtils.getDtlsParameters(mediaSection,sessionpart);isIceLite&&(remoteDtlsParameters.role="server"),pc.usingBundle&&0!==sdpMLineIndex||(pc._gather(transceiver.mid,sdpMLineIndex),"new"===iceTransport.state&&iceTransport.start(iceGatherer,remoteIceParameters,isIceLite?"controlling":"controlled"),"new"===dtlsTransport.state&&dtlsTransport.start(remoteDtlsParameters));var params=getCommonCapabilities(localCapabilities,remoteCapabilities);pc._transceive(transceiver,params.codecs.length>0,!1)}}))}return pc._localDescription={type:description.type,sdp:description.sdp},"offer"===description.type?pc._updateSignalingState("have-local-offer"):pc._updateSignalingState("stable"),Promise.resolve()},RTCPeerConnection.prototype.setRemoteDescription=function(description){var pc=this;if(-1===["offer","answer"].indexOf(description.type))return Promise.reject(makeError("TypeError",'Unsupported type "'+description.type+'"'));if(!isActionAllowedInSignalingState("setRemoteDescription",description.type,pc.signalingState)||pc._isClosed)return Promise.reject(makeError("InvalidStateError","Can not set remote "+description.type+" in state "+pc.signalingState));var streams={};pc.remoteStreams.forEach((function(stream){streams[stream.id]=stream}));var receiverList=[],sections=SDPUtils.splitSections(description.sdp),sessionpart=sections.shift(),isIceLite=SDPUtils.matchPrefix(sessionpart,"a=ice-lite").length>0,usingBundle=SDPUtils.matchPrefix(sessionpart,"a=group:BUNDLE ").length>0;pc.usingBundle=usingBundle;var iceOptions=SDPUtils.matchPrefix(sessionpart,"a=ice-options:")[0];return pc.canTrickleIceCandidates=!!iceOptions&&iceOptions.substr(14).split(" ").indexOf("trickle")>=0,sections.forEach((function(mediaSection,sdpMLineIndex){var lines=SDPUtils.splitLines(mediaSection),kind=SDPUtils.getKind(mediaSection),rejected=SDPUtils.isRejected(mediaSection)&&0===SDPUtils.matchPrefix(mediaSection,"a=bundle-only").length,protocol=lines[0].substr(2).split(" ")[2],direction=SDPUtils.getDirection(mediaSection,sessionpart),remoteMsid=SDPUtils.parseMsid(mediaSection),mid=SDPUtils.getMid(mediaSection)||SDPUtils.generateIdentifier();if(rejected||"application"===kind&&("DTLS/SCTP"===protocol||"UDP/DTLS/SCTP"===protocol))pc.transceivers[sdpMLineIndex]={mid:mid,kind:kind,protocol:protocol,rejected:!0};else{var transceiver,iceGatherer,iceTransport,dtlsTransport,rtpReceiver,sendEncodingParameters,recvEncodingParameters,localCapabilities,track;!rejected&&pc.transceivers[sdpMLineIndex]&&pc.transceivers[sdpMLineIndex].rejected&&(pc.transceivers[sdpMLineIndex]=pc._createTransceiver(kind,!0));var remoteIceParameters,remoteDtlsParameters,remoteCapabilities=SDPUtils.parseRtpParameters(mediaSection);rejected||(remoteIceParameters=SDPUtils.getIceParameters(mediaSection,sessionpart),(remoteDtlsParameters=SDPUtils.getDtlsParameters(mediaSection,sessionpart)).role="client"),recvEncodingParameters=SDPUtils.parseRtpEncodingParameters(mediaSection);var rtcpParameters=SDPUtils.parseRtcpParameters(mediaSection),isComplete=SDPUtils.matchPrefix(mediaSection,"a=end-of-candidates",sessionpart).length>0,cands=SDPUtils.matchPrefix(mediaSection,"a=candidate:").map((function(cand){return SDPUtils.parseCandidate(cand)})).filter((function(cand){return 1===cand.component}));if(("offer"===description.type||"answer"===description.type)&&!rejected&&usingBundle&&sdpMLineIndex>0&&pc.transceivers[sdpMLineIndex]&&(pc._disposeIceAndDtlsTransports(sdpMLineIndex),pc.transceivers[sdpMLineIndex].iceGatherer=pc.transceivers[0].iceGatherer,pc.transceivers[sdpMLineIndex].iceTransport=pc.transceivers[0].iceTransport,pc.transceivers[sdpMLineIndex].dtlsTransport=pc.transceivers[0].dtlsTransport,pc.transceivers[sdpMLineIndex].rtpSender&&pc.transceivers[sdpMLineIndex].rtpSender.setTransport(pc.transceivers[0].dtlsTransport),pc.transceivers[sdpMLineIndex].rtpReceiver&&pc.transceivers[sdpMLineIndex].rtpReceiver.setTransport(pc.transceivers[0].dtlsTransport)),"offer"!==description.type||rejected){if("answer"===description.type&&!rejected){iceGatherer=(transceiver=pc.transceivers[sdpMLineIndex]).iceGatherer,iceTransport=transceiver.iceTransport,dtlsTransport=transceiver.dtlsTransport,rtpReceiver=transceiver.rtpReceiver,sendEncodingParameters=transceiver.sendEncodingParameters,localCapabilities=transceiver.localCapabilities,pc.transceivers[sdpMLineIndex].recvEncodingParameters=recvEncodingParameters,pc.transceivers[sdpMLineIndex].remoteCapabilities=remoteCapabilities,pc.transceivers[sdpMLineIndex].rtcpParameters=rtcpParameters,cands.length&&"new"===iceTransport.state&&(!isIceLite&&!isComplete||usingBundle&&0!==sdpMLineIndex?cands.forEach((function(candidate){maybeAddCandidate(transceiver.iceTransport,candidate)})):iceTransport.setRemoteCandidates(cands)),usingBundle&&0!==sdpMLineIndex||("new"===iceTransport.state&&iceTransport.start(iceGatherer,remoteIceParameters,"controlling"),"new"===dtlsTransport.state&&dtlsTransport.start(remoteDtlsParameters)),!getCommonCapabilities(transceiver.localCapabilities,transceiver.remoteCapabilities).codecs.filter((function(c){return"rtx"===c.name.toLowerCase()})).length&&transceiver.sendEncodingParameters[0].rtx&&delete transceiver.sendEncodingParameters[0].rtx,pc._transceive(transceiver,"sendrecv"===direction||"recvonly"===direction,"sendrecv"===direction||"sendonly"===direction),!rtpReceiver||"sendrecv"!==direction&&"sendonly"!==direction?delete transceiver.rtpReceiver:(track=rtpReceiver.track,remoteMsid?(streams[remoteMsid.stream]||(streams[remoteMsid.stream]=new window.MediaStream),addTrackToStreamAndFireEvent(track,streams[remoteMsid.stream]),receiverList.push([track,rtpReceiver,streams[remoteMsid.stream]])):(streams.default||(streams.default=new window.MediaStream),addTrackToStreamAndFireEvent(track,streams.default),receiverList.push([track,rtpReceiver,streams.default])))}}else{(transceiver=pc.transceivers[sdpMLineIndex]||pc._createTransceiver(kind)).mid=mid,transceiver.iceGatherer||(transceiver.iceGatherer=pc._createIceGatherer(sdpMLineIndex,usingBundle)),cands.length&&"new"===transceiver.iceTransport.state&&(!isComplete||usingBundle&&0!==sdpMLineIndex?cands.forEach((function(candidate){maybeAddCandidate(transceiver.iceTransport,candidate)})):transceiver.iceTransport.setRemoteCandidates(cands)),localCapabilities=window.RTCRtpReceiver.getCapabilities(kind),edgeVersion<15019&&(localCapabilities.codecs=localCapabilities.codecs.filter((function(codec){return"rtx"!==codec.name}))),sendEncodingParameters=transceiver.sendEncodingParameters||[{ssrc:1001*(2*sdpMLineIndex+2)}];var stream,isNewTrack=!1;if("sendrecv"===direction||"sendonly"===direction){if(isNewTrack=!transceiver.rtpReceiver,rtpReceiver=transceiver.rtpReceiver||new window.RTCRtpReceiver(transceiver.dtlsTransport,kind),isNewTrack)track=rtpReceiver.track,remoteMsid&&"-"===remoteMsid.stream||(remoteMsid?(streams[remoteMsid.stream]||(streams[remoteMsid.stream]=new window.MediaStream,Object.defineProperty(streams[remoteMsid.stream],"id",{get:function(){return remoteMsid.stream}})),Object.defineProperty(track,"id",{get:function(){return remoteMsid.track}}),stream=streams[remoteMsid.stream]):(streams.default||(streams.default=new window.MediaStream),stream=streams.default)),stream&&(addTrackToStreamAndFireEvent(track,stream),transceiver.associatedRemoteMediaStreams.push(stream)),receiverList.push([track,rtpReceiver,stream])}else transceiver.rtpReceiver&&transceiver.rtpReceiver.track&&(transceiver.associatedRemoteMediaStreams.forEach((function(s){var nativeTrack=s.getTracks().find((function(t){return t.id===transceiver.rtpReceiver.track.id}));nativeTrack&&function(track,stream){stream.removeTrack(track),stream.dispatchEvent(new window.MediaStreamTrackEvent("removetrack",{track:track}))}(nativeTrack,s)})),transceiver.associatedRemoteMediaStreams=[]);transceiver.localCapabilities=localCapabilities,transceiver.remoteCapabilities=remoteCapabilities,transceiver.rtpReceiver=rtpReceiver,transceiver.rtcpParameters=rtcpParameters,transceiver.sendEncodingParameters=sendEncodingParameters,transceiver.recvEncodingParameters=recvEncodingParameters,pc._transceive(pc.transceivers[sdpMLineIndex],!1,isNewTrack)}}})),void 0===pc._dtlsRole&&(pc._dtlsRole="offer"===description.type?"active":"passive"),pc._remoteDescription={type:description.type,sdp:description.sdp},"offer"===description.type?pc._updateSignalingState("have-remote-offer"):pc._updateSignalingState("stable"),Object.keys(streams).forEach((function(sid){var stream=streams[sid];if(stream.getTracks().length){if(-1===pc.remoteStreams.indexOf(stream)){pc.remoteStreams.push(stream);var event=new Event("addstream");event.stream=stream,window.setTimeout((function(){pc._dispatchEvent("addstream",event)}))}receiverList.forEach((function(item){var track=item[0],receiver=item[1];stream.id===item[2].id&&fireAddTrack(pc,track,receiver,[stream])}))}})),receiverList.forEach((function(item){item[2]||fireAddTrack(pc,item[0],item[1],[])})),window.setTimeout((function(){pc&&pc.transceivers&&pc.transceivers.forEach((function(transceiver){transceiver.iceTransport&&"new"===transceiver.iceTransport.state&&transceiver.iceTransport.getRemoteCandidates().length>0&&(console.warn("Timeout for addRemoteCandidate. Consider sending an end-of-candidates notification"),transceiver.iceTransport.addRemoteCandidate({}))}))}),4e3),Promise.resolve()},RTCPeerConnection.prototype.close=function(){this.transceivers.forEach((function(transceiver){transceiver.iceTransport&&transceiver.iceTransport.stop(),transceiver.dtlsTransport&&transceiver.dtlsTransport.stop(),transceiver.rtpSender&&transceiver.rtpSender.stop(),transceiver.rtpReceiver&&transceiver.rtpReceiver.stop()})),this._isClosed=!0,this._updateSignalingState("closed")},RTCPeerConnection.prototype._updateSignalingState=function(newState){this.signalingState=newState;var event=new Event("signalingstatechange");this._dispatchEvent("signalingstatechange",event)},RTCPeerConnection.prototype._maybeFireNegotiationNeeded=function(){var pc=this;"stable"===this.signalingState&&!0!==this.needNegotiation&&(this.needNegotiation=!0,window.setTimeout((function(){if(pc.needNegotiation){pc.needNegotiation=!1;var event=new Event("negotiationneeded");pc._dispatchEvent("negotiationneeded",event)}}),0))},RTCPeerConnection.prototype._updateIceConnectionState=function(){var newState,states={new:0,closed:0,checking:0,connected:0,completed:0,disconnected:0,failed:0};if(this.transceivers.forEach((function(transceiver){transceiver.iceTransport&&!transceiver.rejected&&states[transceiver.iceTransport.state]++})),newState="new",states.failed>0?newState="failed":states.checking>0?newState="checking":states.disconnected>0?newState="disconnected":states.new>0?newState="new":states.connected>0?newState="connected":states.completed>0&&(newState="completed"),newState!==this.iceConnectionState){this.iceConnectionState=newState;var event=new Event("iceconnectionstatechange");this._dispatchEvent("iceconnectionstatechange",event)}},RTCPeerConnection.prototype._updateConnectionState=function(){var newState,states={new:0,closed:0,connecting:0,connected:0,completed:0,disconnected:0,failed:0};if(this.transceivers.forEach((function(transceiver){transceiver.iceTransport&&transceiver.dtlsTransport&&!transceiver.rejected&&(states[transceiver.iceTransport.state]++,states[transceiver.dtlsTransport.state]++)})),states.connected+=states.completed,newState="new",states.failed>0?newState="failed":states.connecting>0?newState="connecting":states.disconnected>0?newState="disconnected":states.new>0?newState="new":states.connected>0&&(newState="connected"),newState!==this.connectionState){this.connectionState=newState;var event=new Event("connectionstatechange");this._dispatchEvent("connectionstatechange",event)}},RTCPeerConnection.prototype.createOffer=function(){var pc=this;if(pc._isClosed)return Promise.reject(makeError("InvalidStateError","Can not call createOffer after close"));var numAudioTracks=pc.transceivers.filter((function(t){return"audio"===t.kind})).length,numVideoTracks=pc.transceivers.filter((function(t){return"video"===t.kind})).length,offerOptions=arguments[0];if(offerOptions){if(offerOptions.mandatory||offerOptions.optional)throw new TypeError("Legacy mandatory/optional constraints not supported.");void 0!==offerOptions.offerToReceiveAudio&&(numAudioTracks=!0===offerOptions.offerToReceiveAudio?1:!1===offerOptions.offerToReceiveAudio?0:offerOptions.offerToReceiveAudio),void 0!==offerOptions.offerToReceiveVideo&&(numVideoTracks=!0===offerOptions.offerToReceiveVideo?1:!1===offerOptions.offerToReceiveVideo?0:offerOptions.offerToReceiveVideo)}for(pc.transceivers.forEach((function(transceiver){"audio"===transceiver.kind?--numAudioTracks<0&&(transceiver.wantReceive=!1):"video"===transceiver.kind&&--numVideoTracks<0&&(transceiver.wantReceive=!1)}));numAudioTracks>0||numVideoTracks>0;)numAudioTracks>0&&(pc._createTransceiver("audio"),numAudioTracks--),numVideoTracks>0&&(pc._createTransceiver("video"),numVideoTracks--);var sdp=SDPUtils.writeSessionBoilerplate(pc._sdpSessionId,pc._sdpSessionVersion++);pc.transceivers.forEach((function(transceiver,sdpMLineIndex){var track=transceiver.track,kind=transceiver.kind,mid=transceiver.mid||SDPUtils.generateIdentifier();transceiver.mid=mid,transceiver.iceGatherer||(transceiver.iceGatherer=pc._createIceGatherer(sdpMLineIndex,pc.usingBundle));var localCapabilities=window.RTCRtpSender.getCapabilities(kind);edgeVersion<15019&&(localCapabilities.codecs=localCapabilities.codecs.filter((function(codec){return"rtx"!==codec.name}))),localCapabilities.codecs.forEach((function(codec){"H264"===codec.name&&void 0===codec.parameters["level-asymmetry-allowed"]&&(codec.parameters["level-asymmetry-allowed"]="1"),transceiver.remoteCapabilities&&transceiver.remoteCapabilities.codecs&&transceiver.remoteCapabilities.codecs.forEach((function(remoteCodec){codec.name.toLowerCase()===remoteCodec.name.toLowerCase()&&codec.clockRate===remoteCodec.clockRate&&(codec.preferredPayloadType=remoteCodec.payloadType)}))})),localCapabilities.headerExtensions.forEach((function(hdrExt){(transceiver.remoteCapabilities&&transceiver.remoteCapabilities.headerExtensions||[]).forEach((function(rHdrExt){hdrExt.uri===rHdrExt.uri&&(hdrExt.id=rHdrExt.id)}))}));var sendEncodingParameters=transceiver.sendEncodingParameters||[{ssrc:1001*(2*sdpMLineIndex+1)}];track&&edgeVersion>=15019&&"video"===kind&&!sendEncodingParameters[0].rtx&&(sendEncodingParameters[0].rtx={ssrc:sendEncodingParameters[0].ssrc+1}),transceiver.wantReceive&&(transceiver.rtpReceiver=new window.RTCRtpReceiver(transceiver.dtlsTransport,kind)),transceiver.localCapabilities=localCapabilities,transceiver.sendEncodingParameters=sendEncodingParameters})),"max-compat"!==pc._config.bundlePolicy&&(sdp+="a=group:BUNDLE "+pc.transceivers.map((function(t){return t.mid})).join(" ")+"\r\n"),sdp+="a=ice-options:trickle\r\n",pc.transceivers.forEach((function(transceiver,sdpMLineIndex){sdp+=writeMediaSection(transceiver,transceiver.localCapabilities,"offer",transceiver.stream,pc._dtlsRole),sdp+="a=rtcp-rsize\r\n",!transceiver.iceGatherer||"new"===pc.iceGatheringState||0!==sdpMLineIndex&&pc.usingBundle||(transceiver.iceGatherer.getLocalCandidates().forEach((function(cand){cand.component=1,sdp+="a="+SDPUtils.writeCandidate(cand)+"\r\n"})),"completed"===transceiver.iceGatherer.state&&(sdp+="a=end-of-candidates\r\n"))}));var desc=new window.RTCSessionDescription({type:"offer",sdp:sdp});return Promise.resolve(desc)},RTCPeerConnection.prototype.createAnswer=function(){var pc=this;if(pc._isClosed)return Promise.reject(makeError("InvalidStateError","Can not call createAnswer after close"));if("have-remote-offer"!==pc.signalingState&&"have-local-pranswer"!==pc.signalingState)return Promise.reject(makeError("InvalidStateError","Can not call createAnswer in signalingState "+pc.signalingState));var sdp=SDPUtils.writeSessionBoilerplate(pc._sdpSessionId,pc._sdpSessionVersion++);pc.usingBundle&&(sdp+="a=group:BUNDLE "+pc.transceivers.map((function(t){return t.mid})).join(" ")+"\r\n"),sdp+="a=ice-options:trickle\r\n";var mediaSectionsInOffer=SDPUtils.getMediaSections(pc._remoteDescription.sdp).length;pc.transceivers.forEach((function(transceiver,sdpMLineIndex){if(!(sdpMLineIndex+1>mediaSectionsInOffer)){if(transceiver.rejected)return"application"===transceiver.kind?"DTLS/SCTP"===transceiver.protocol?sdp+="m=application 0 DTLS/SCTP 5000\r\n":sdp+="m=application 0 "+transceiver.protocol+" webrtc-datachannel\r\n":"audio"===transceiver.kind?sdp+="m=audio 0 UDP/TLS/RTP/SAVPF 0\r\na=rtpmap:0 PCMU/8000\r\n":"video"===transceiver.kind&&(sdp+="m=video 0 UDP/TLS/RTP/SAVPF 120\r\na=rtpmap:120 VP8/90000\r\n"),void(sdp+="c=IN IP4 0.0.0.0\r\na=inactive\r\na=mid:"+transceiver.mid+"\r\n");var localTrack;if(transceiver.stream)"audio"===transceiver.kind?localTrack=transceiver.stream.getAudioTracks()[0]:"video"===transceiver.kind&&(localTrack=transceiver.stream.getVideoTracks()[0]),localTrack&&edgeVersion>=15019&&"video"===transceiver.kind&&!transceiver.sendEncodingParameters[0].rtx&&(transceiver.sendEncodingParameters[0].rtx={ssrc:transceiver.sendEncodingParameters[0].ssrc+1});var commonCapabilities=getCommonCapabilities(transceiver.localCapabilities,transceiver.remoteCapabilities);!commonCapabilities.codecs.filter((function(c){return"rtx"===c.name.toLowerCase()})).length&&transceiver.sendEncodingParameters[0].rtx&&delete transceiver.sendEncodingParameters[0].rtx,sdp+=writeMediaSection(transceiver,commonCapabilities,"answer",transceiver.stream,pc._dtlsRole),transceiver.rtcpParameters&&transceiver.rtcpParameters.reducedSize&&(sdp+="a=rtcp-rsize\r\n")}}));var desc=new window.RTCSessionDescription({type:"answer",sdp:sdp});return Promise.resolve(desc)},RTCPeerConnection.prototype.addIceCandidate=function(candidate){var sections,pc=this;return candidate&&void 0===candidate.sdpMLineIndex&&!candidate.sdpMid?Promise.reject(new TypeError("sdpMLineIndex or sdpMid required")):new Promise((function(resolve,reject){if(!pc._remoteDescription)return reject(makeError("InvalidStateError","Can not add ICE candidate without a remote description"));if(candidate&&""!==candidate.candidate){var sdpMLineIndex=candidate.sdpMLineIndex;if(candidate.sdpMid)for(var i=0;i<pc.transceivers.length;i++)if(pc.transceivers[i].mid===candidate.sdpMid){sdpMLineIndex=i;break}var transceiver=pc.transceivers[sdpMLineIndex];if(!transceiver)return reject(makeError("OperationError","Can not add ICE candidate"));if(transceiver.rejected)return resolve();var cand=Object.keys(candidate.candidate).length>0?SDPUtils.parseCandidate(candidate.candidate):{};if("tcp"===cand.protocol&&(0===cand.port||9===cand.port))return resolve();if(cand.component&&1!==cand.component)return resolve();if((0===sdpMLineIndex||sdpMLineIndex>0&&transceiver.iceTransport!==pc.transceivers[0].iceTransport)&&!maybeAddCandidate(transceiver.iceTransport,cand))return reject(makeError("OperationError","Can not add ICE candidate"));var candidateString=candidate.candidate.trim();0===candidateString.indexOf("a=")&&(candidateString=candidateString.substr(2)),(sections=SDPUtils.getMediaSections(pc._remoteDescription.sdp))[sdpMLineIndex]+="a="+(cand.type?candidateString:"end-of-candidates")+"\r\n",pc._remoteDescription.sdp=SDPUtils.getDescription(pc._remoteDescription.sdp)+sections.join("")}else for(var j=0;j<pc.transceivers.length&&(pc.transceivers[j].rejected||(pc.transceivers[j].iceTransport.addRemoteCandidate({}),(sections=SDPUtils.getMediaSections(pc._remoteDescription.sdp))[j]+="a=end-of-candidates\r\n",pc._remoteDescription.sdp=SDPUtils.getDescription(pc._remoteDescription.sdp)+sections.join(""),!pc.usingBundle));j++);resolve()}))},RTCPeerConnection.prototype.getStats=function(selector){if(selector&&selector instanceof window.MediaStreamTrack){var senderOrReceiver=null;if(this.transceivers.forEach((function(transceiver){transceiver.rtpSender&&transceiver.rtpSender.track===selector?senderOrReceiver=transceiver.rtpSender:transceiver.rtpReceiver&&transceiver.rtpReceiver.track===selector&&(senderOrReceiver=transceiver.rtpReceiver)})),!senderOrReceiver)throw makeError("InvalidAccessError","Invalid selector.");return senderOrReceiver.getStats()}var promises=[];return this.transceivers.forEach((function(transceiver){["rtpSender","rtpReceiver","iceGatherer","iceTransport","dtlsTransport"].forEach((function(method){transceiver[method]&&promises.push(transceiver[method].getStats())}))})),Promise.all(promises).then((function(allStats){var results=new Map;return allStats.forEach((function(stats){stats.forEach((function(stat){results.set(stat.id,stat)}))})),results}))};["RTCRtpSender","RTCRtpReceiver","RTCIceGatherer","RTCIceTransport","RTCDtlsTransport"].forEach((function(ortcObjectName){var obj=window[ortcObjectName];if(obj&&obj.prototype&&obj.prototype.getStats){var nativeGetstats=obj.prototype.getStats;obj.prototype.getStats=function(){return nativeGetstats.apply(this).then((function(nativeStats){var mapStats=new Map;return Object.keys(nativeStats).forEach((function(id){var stat;nativeStats[id].type={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"}[(stat=nativeStats[id]).type]||stat.type,mapStats.set(id,nativeStats[id])})),mapStats}))}}}));var methods=["createOffer","createAnswer"];return methods.forEach((function(method){var nativeMethod=RTCPeerConnection.prototype[method];RTCPeerConnection.prototype[method]=function(){var args=arguments;return"function"==typeof args[0]||"function"==typeof args[1]?nativeMethod.apply(this,[arguments[2]]).then((function(description){"function"==typeof args[0]&&args[0].apply(null,[description])}),(function(error){"function"==typeof args[1]&&args[1].apply(null,[error])})):nativeMethod.apply(this,arguments)}})),(methods=["setLocalDescription","setRemoteDescription","addIceCandidate"]).forEach((function(method){var nativeMethod=RTCPeerConnection.prototype[method];RTCPeerConnection.prototype[method]=function(){var args=arguments;return"function"==typeof args[1]||"function"==typeof args[2]?nativeMethod.apply(this,arguments).then((function(){"function"==typeof args[1]&&args[1].apply(null)}),(function(error){"function"==typeof args[2]&&args[2].apply(null,[error])})):nativeMethod.apply(this,arguments)}})),["getStats"].forEach((function(method){var nativeMethod=RTCPeerConnection.prototype[method];RTCPeerConnection.prototype[method]=function(){var args=arguments;return"function"==typeof args[1]?nativeMethod.apply(this,arguments).then((function(){"function"==typeof args[1]&&args[1].apply(null)})):nativeMethod.apply(this,arguments)}})),RTCPeerConnection}},{sdp:6}],6:[function(require,module,exports){"use strict";function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}var SDPUtils={generateIdentifier:function(){return Math.random().toString(36).substr(2,10)}};SDPUtils.localCName=SDPUtils.generateIdentifier(),SDPUtils.splitLines=function(blob){return blob.trim().split("\n").map((function(line){return line.trim()}))},SDPUtils.splitSections=function(blob){return blob.split("\nm=").map((function(part,index){return(index>0?"m="+part:part).trim()+"\r\n"}))},SDPUtils.getDescription=function(blob){var sections=SDPUtils.splitSections(blob);return sections&&sections[0]},SDPUtils.getMediaSections=function(blob){var sections=SDPUtils.splitSections(blob);return sections.shift(),sections},SDPUtils.matchPrefix=function(blob,prefix){return SDPUtils.splitLines(blob).filter((function(line){return 0===line.indexOf(prefix)}))},SDPUtils.parseCandidate=function(line){for(var parts,candidate={foundation:(parts=0===line.indexOf("a=candidate:")?line.substring(12).split(" "):line.substring(10).split(" "))[0],component:parseInt(parts[1],10),protocol:parts[2].toLowerCase(),priority:parseInt(parts[3],10),ip:parts[4],address:parts[4],port:parseInt(parts[5],10),type:parts[7]},i=8;i<parts.length;i+=2)switch(parts[i]){case"raddr":candidate.relatedAddress=parts[i+1];break;case"rport":candidate.relatedPort=parseInt(parts[i+1],10);break;case"tcptype":candidate.tcpType=parts[i+1];break;case"ufrag":candidate.ufrag=parts[i+1],candidate.usernameFragment=parts[i+1];break;default:candidate[parts[i]]=parts[i+1]}return candidate},SDPUtils.writeCandidate=function(candidate){var sdp=[];sdp.push(candidate.foundation),sdp.push(candidate.component),sdp.push(candidate.protocol.toUpperCase()),sdp.push(candidate.priority),sdp.push(candidate.address||candidate.ip),sdp.push(candidate.port);var type=candidate.type;return sdp.push("typ"),sdp.push(type),"host"!==type&&candidate.relatedAddress&&candidate.relatedPort&&(sdp.push("raddr"),sdp.push(candidate.relatedAddress),sdp.push("rport"),sdp.push(candidate.relatedPort)),candidate.tcpType&&"tcp"===candidate.protocol.toLowerCase()&&(sdp.push("tcptype"),sdp.push(candidate.tcpType)),(candidate.usernameFragment||candidate.ufrag)&&(sdp.push("ufrag"),sdp.push(candidate.usernameFragment||candidate.ufrag)),"candidate:"+sdp.join(" ")},SDPUtils.parseIceOptions=function(line){return line.substr(14).split(" ")},SDPUtils.parseRtpMap=function(line){var parts=line.substr(9).split(" "),parsed={payloadType:parseInt(parts.shift(),10)};return parts=parts[0].split("/"),parsed.name=parts[0],parsed.clockRate=parseInt(parts[1],10),parsed.channels=3===parts.length?parseInt(parts[2],10):1,parsed.numChannels=parsed.channels,parsed},SDPUtils.writeRtpMap=function(codec){var pt=codec.payloadType;void 0!==codec.preferredPayloadType&&(pt=codec.preferredPayloadType);var channels=codec.channels||codec.numChannels||1;return"a=rtpmap:"+pt+" "+codec.name+"/"+codec.clockRate+(1!==channels?"/"+channels:"")+"\r\n"},SDPUtils.parseExtmap=function(line){var parts=line.substr(9).split(" ");return{id:parseInt(parts[0],10),direction:parts[0].indexOf("/")>0?parts[0].split("/")[1]:"sendrecv",uri:parts[1]}},SDPUtils.writeExtmap=function(headerExtension){return"a=extmap:"+(headerExtension.id||headerExtension.preferredId)+(headerExtension.direction&&"sendrecv"!==headerExtension.direction?"/"+headerExtension.direction:"")+" "+headerExtension.uri+"\r\n"},SDPUtils.parseFmtp=function(line){for(var kv,parsed={},parts=line.substr(line.indexOf(" ")+1).split(";"),j=0;j<parts.length;j++)parsed[(kv=parts[j].trim().split("="))[0].trim()]=kv[1];return parsed},SDPUtils.writeFmtp=function(codec){var line="",pt=codec.payloadType;if(void 0!==codec.preferredPayloadType&&(pt=codec.preferredPayloadType),codec.parameters&&Object.keys(codec.parameters).length){var params=[];Object.keys(codec.parameters).forEach((function(param){codec.parameters[param]?params.push(param+"="+codec.parameters[param]):params.push(param)})),line+="a=fmtp:"+pt+" "+params.join(";")+"\r\n"}return line},SDPUtils.parseRtcpFb=function(line){var parts=line.substr(line.indexOf(" ")+1).split(" ");return{type:parts.shift(),parameter:parts.join(" ")}},SDPUtils.writeRtcpFb=function(codec){var lines="",pt=codec.payloadType;return void 0!==codec.preferredPayloadType&&(pt=codec.preferredPayloadType),codec.rtcpFeedback&&codec.rtcpFeedback.length&&codec.rtcpFeedback.forEach((function(fb){lines+="a=rtcp-fb:"+pt+" "+fb.type+(fb.parameter&&fb.parameter.length?" "+fb.parameter:"")+"\r\n"})),lines},SDPUtils.parseSsrcMedia=function(line){var sp=line.indexOf(" "),parts={ssrc:parseInt(line.substr(7,sp-7),10)},colon=line.indexOf(":",sp);return colon>-1?(parts.attribute=line.substr(sp+1,colon-sp-1),parts.value=line.substr(colon+1)):parts.attribute=line.substr(sp+1),parts},SDPUtils.parseSsrcGroup=function(line){var parts=line.substr(13).split(" ");return{semantics:parts.shift(),ssrcs:parts.map((function(ssrc){return parseInt(ssrc,10)}))}},SDPUtils.getMid=function(mediaSection){var mid=SDPUtils.matchPrefix(mediaSection,"a=mid:")[0];if(mid)return mid.substr(6)},SDPUtils.parseFingerprint=function(line){var parts=line.substr(14).split(" ");return{algorithm:parts[0].toLowerCase(),value:parts[1]}},SDPUtils.getDtlsParameters=function(mediaSection,sessionpart){return{role:"auto",fingerprints:SDPUtils.matchPrefix(mediaSection+sessionpart,"a=fingerprint:").map(SDPUtils.parseFingerprint)}},SDPUtils.writeDtlsParameters=function(params,setupType){var sdp="a=setup:"+setupType+"\r\n";return params.fingerprints.forEach((function(fp){sdp+="a=fingerprint:"+fp.algorithm+" "+fp.value+"\r\n"})),sdp},SDPUtils.parseCryptoLine=function(line){var parts=line.substr(9).split(" ");return{tag:parseInt(parts[0],10),cryptoSuite:parts[1],keyParams:parts[2],sessionParams:parts.slice(3)}},SDPUtils.writeCryptoLine=function(parameters){return"a=crypto:"+parameters.tag+" "+parameters.cryptoSuite+" "+("object"===_typeof(parameters.keyParams)?SDPUtils.writeCryptoKeyParams(parameters.keyParams):parameters.keyParams)+(parameters.sessionParams?" "+parameters.sessionParams.join(" "):"")+"\r\n"},SDPUtils.parseCryptoKeyParams=function(keyParams){if(0!==keyParams.indexOf("inline:"))return null;var parts=keyParams.substr(7).split("|");return{keyMethod:"inline",keySalt:parts[0],lifeTime:parts[1],mkiValue:parts[2]?parts[2].split(":")[0]:void 0,mkiLength:parts[2]?parts[2].split(":")[1]:void 0}},SDPUtils.writeCryptoKeyParams=function(keyParams){return keyParams.keyMethod+":"+keyParams.keySalt+(keyParams.lifeTime?"|"+keyParams.lifeTime:"")+(keyParams.mkiValue&&keyParams.mkiLength?"|"+keyParams.mkiValue+":"+keyParams.mkiLength:"")},SDPUtils.getCryptoParameters=function(mediaSection,sessionpart){return SDPUtils.matchPrefix(mediaSection+sessionpart,"a=crypto:").map(SDPUtils.parseCryptoLine)},SDPUtils.getIceParameters=function(mediaSection,sessionpart){var ufrag=SDPUtils.matchPrefix(mediaSection+sessionpart,"a=ice-ufrag:")[0],pwd=SDPUtils.matchPrefix(mediaSection+sessionpart,"a=ice-pwd:")[0];return ufrag&&pwd?{usernameFragment:ufrag.substr(12),password:pwd.substr(10)}:null},SDPUtils.writeIceParameters=function(params){return"a=ice-ufrag:"+params.usernameFragment+"\r\na=ice-pwd:"+params.password+"\r\n"},SDPUtils.parseRtpParameters=function(mediaSection){for(var description={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},mline=SDPUtils.splitLines(mediaSection)[0].split(" "),i=3;i<mline.length;i++){var pt=mline[i],rtpmapline=SDPUtils.matchPrefix(mediaSection,"a=rtpmap:"+pt+" ")[0];if(rtpmapline){var codec=SDPUtils.parseRtpMap(rtpmapline),fmtps=SDPUtils.matchPrefix(mediaSection,"a=fmtp:"+pt+" ");switch(codec.parameters=fmtps.length?SDPUtils.parseFmtp(fmtps[0]):{},codec.rtcpFeedback=SDPUtils.matchPrefix(mediaSection,"a=rtcp-fb:"+pt+" ").map(SDPUtils.parseRtcpFb),description.codecs.push(codec),codec.name.toUpperCase()){case"RED":case"ULPFEC":description.fecMechanisms.push(codec.name.toUpperCase())}}}return SDPUtils.matchPrefix(mediaSection,"a=extmap:").forEach((function(line){description.headerExtensions.push(SDPUtils.parseExtmap(line))})),description},SDPUtils.writeRtpDescription=function(kind,caps){var sdp="";sdp+="m="+kind+" ",sdp+=caps.codecs.length>0?"9":"0",sdp+=" UDP/TLS/RTP/SAVPF ",sdp+=caps.codecs.map((function(codec){return void 0!==codec.preferredPayloadType?codec.preferredPayloadType:codec.payloadType})).join(" ")+"\r\n",sdp+="c=IN IP4 0.0.0.0\r\n",sdp+="a=rtcp:9 IN IP4 0.0.0.0\r\n",caps.codecs.forEach((function(codec){sdp+=SDPUtils.writeRtpMap(codec),sdp+=SDPUtils.writeFmtp(codec),sdp+=SDPUtils.writeRtcpFb(codec)}));var maxptime=0;return caps.codecs.forEach((function(codec){codec.maxptime>maxptime&&(maxptime=codec.maxptime)})),maxptime>0&&(sdp+="a=maxptime:"+maxptime+"\r\n"),sdp+="a=rtcp-mux\r\n",caps.headerExtensions&&caps.headerExtensions.forEach((function(extension){sdp+=SDPUtils.writeExtmap(extension)})),sdp},SDPUtils.parseRtpEncodingParameters=function(mediaSection){var secondarySsrc,encodingParameters=[],description=SDPUtils.parseRtpParameters(mediaSection),hasRed=-1!==description.fecMechanisms.indexOf("RED"),hasUlpfec=-1!==description.fecMechanisms.indexOf("ULPFEC"),ssrcs=SDPUtils.matchPrefix(mediaSection,"a=ssrc:").map((function(line){return SDPUtils.parseSsrcMedia(line)})).filter((function(parts){return"cname"===parts.attribute})),primarySsrc=ssrcs.length>0&&ssrcs[0].ssrc,flows=SDPUtils.matchPrefix(mediaSection,"a=ssrc-group:FID").map((function(line){return line.substr(17).split(" ").map((function(part){return parseInt(part,10)}))}));flows.length>0&&flows[0].length>1&&flows[0][0]===primarySsrc&&(secondarySsrc=flows[0][1]),description.codecs.forEach((function(codec){if("RTX"===codec.name.toUpperCase()&&codec.parameters.apt){var encParam={ssrc:primarySsrc,codecPayloadType:parseInt(codec.parameters.apt,10)};primarySsrc&&secondarySsrc&&(encParam.rtx={ssrc:secondarySsrc}),encodingParameters.push(encParam),hasRed&&((encParam=JSON.parse(JSON.stringify(encParam))).fec={ssrc:primarySsrc,mechanism:hasUlpfec?"red+ulpfec":"red"},encodingParameters.push(encParam))}})),0===encodingParameters.length&&primarySsrc&&encodingParameters.push({ssrc:primarySsrc});var bandwidth=SDPUtils.matchPrefix(mediaSection,"b=");return bandwidth.length&&(bandwidth=0===bandwidth[0].indexOf("b=TIAS:")?parseInt(bandwidth[0].substr(7),10):0===bandwidth[0].indexOf("b=AS:")?1e3*parseInt(bandwidth[0].substr(5),10)*.95-16e3:void 0,encodingParameters.forEach((function(params){params.maxBitrate=bandwidth}))),encodingParameters},SDPUtils.parseRtcpParameters=function(mediaSection){var rtcpParameters={},remoteSsrc=SDPUtils.matchPrefix(mediaSection,"a=ssrc:").map((function(line){return SDPUtils.parseSsrcMedia(line)})).filter((function(obj){return"cname"===obj.attribute}))[0];remoteSsrc&&(rtcpParameters.cname=remoteSsrc.value,rtcpParameters.ssrc=remoteSsrc.ssrc);var rsize=SDPUtils.matchPrefix(mediaSection,"a=rtcp-rsize");rtcpParameters.reducedSize=rsize.length>0,rtcpParameters.compound=0===rsize.length;var mux=SDPUtils.matchPrefix(mediaSection,"a=rtcp-mux");return rtcpParameters.mux=mux.length>0,rtcpParameters},SDPUtils.parseMsid=function(mediaSection){var parts,spec=SDPUtils.matchPrefix(mediaSection,"a=msid:");if(1===spec.length)return{stream:(parts=spec[0].substr(7).split(" "))[0],track:parts[1]};var planB=SDPUtils.matchPrefix(mediaSection,"a=ssrc:").map((function(line){return SDPUtils.parseSsrcMedia(line)})).filter((function(msidParts){return"msid"===msidParts.attribute}));return planB.length>0?{stream:(parts=planB[0].value.split(" "))[0],track:parts[1]}:void 0},SDPUtils.parseSctpDescription=function(mediaSection){var maxMessageSize,mline=SDPUtils.parseMLine(mediaSection),maxSizeLine=SDPUtils.matchPrefix(mediaSection,"a=max-message-size:");maxSizeLine.length>0&&(maxMessageSize=parseInt(maxSizeLine[0].substr(19),10)),isNaN(maxMessageSize)&&(maxMessageSize=65536);var sctpPort=SDPUtils.matchPrefix(mediaSection,"a=sctp-port:");if(sctpPort.length>0)return{port:parseInt(sctpPort[0].substr(12),10),protocol:mline.fmt,maxMessageSize:maxMessageSize};if(SDPUtils.matchPrefix(mediaSection,"a=sctpmap:").length>0){var parts=SDPUtils.matchPrefix(mediaSection,"a=sctpmap:")[0].substr(10).split(" ");return{port:parseInt(parts[0],10),protocol:parts[1],maxMessageSize:maxMessageSize}}},SDPUtils.writeSctpDescription=function(media,sctp){var output=[];return output="DTLS/SCTP"!==media.protocol?["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"]:["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"],void 0!==sctp.maxMessageSize&&output.push("a=max-message-size:"+sctp.maxMessageSize+"\r\n"),output.join("")},SDPUtils.generateSessionId=function(){return Math.random().toString().substr(2,21)},SDPUtils.writeSessionBoilerplate=function(sessId,sessVer,sessUser){var version=void 0!==sessVer?sessVer:2;return"v=0\r\no="+(sessUser||"thisisadapterortc")+" "+(sessId||SDPUtils.generateSessionId())+" "+version+" IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\n"},SDPUtils.writeMediaSection=function(transceiver,caps,type,stream){var sdp=SDPUtils.writeRtpDescription(transceiver.kind,caps);if(sdp+=SDPUtils.writeIceParameters(transceiver.iceGatherer.getLocalParameters()),sdp+=SDPUtils.writeDtlsParameters(transceiver.dtlsTransport.getLocalParameters(),"offer"===type?"actpass":"active"),sdp+="a=mid:"+transceiver.mid+"\r\n",transceiver.direction?sdp+="a="+transceiver.direction+"\r\n":transceiver.rtpSender&&transceiver.rtpReceiver?sdp+="a=sendrecv\r\n":transceiver.rtpSender?sdp+="a=sendonly\r\n":transceiver.rtpReceiver?sdp+="a=recvonly\r\n":sdp+="a=inactive\r\n",transceiver.rtpSender){var msid="msid:"+stream.id+" "+transceiver.rtpSender.track.id+"\r\n";sdp+="a="+msid,sdp+="a=ssrc:"+transceiver.sendEncodingParameters[0].ssrc+" "+msid,transceiver.sendEncodingParameters[0].rtx&&(sdp+="a=ssrc:"+transceiver.sendEncodingParameters[0].rtx.ssrc+" "+msid,sdp+="a=ssrc-group:FID "+transceiver.sendEncodingParameters[0].ssrc+" "+transceiver.sendEncodingParameters[0].rtx.ssrc+"\r\n")}return sdp+="a=ssrc:"+transceiver.sendEncodingParameters[0].ssrc+" cname:"+SDPUtils.localCName+"\r\n",transceiver.rtpSender&&transceiver.sendEncodingParameters[0].rtx&&(sdp+="a=ssrc:"+transceiver.sendEncodingParameters[0].rtx.ssrc+" cname:"+SDPUtils.localCName+"\r\n"),sdp},SDPUtils.getDirection=function(mediaSection,sessionpart){for(var lines=SDPUtils.splitLines(mediaSection),i=0;i<lines.length;i++)switch(lines[i]){case"a=sendrecv":case"a=sendonly":case"a=recvonly":case"a=inactive":return lines[i].substr(2)}return sessionpart?SDPUtils.getDirection(sessionpart):"sendrecv"},SDPUtils.getKind=function(mediaSection){return SDPUtils.splitLines(mediaSection)[0].split(" ")[0].substr(2)},SDPUtils.isRejected=function(mediaSection){return"0"===mediaSection.split(" ",2)[1]},SDPUtils.parseMLine=function(mediaSection){var parts=SDPUtils.splitLines(mediaSection)[0].substr(2).split(" ");return{kind:parts[0],port:parseInt(parts[1],10),protocol:parts[2],fmt:parts.slice(3).join(" ")}},SDPUtils.parseOLine=function(mediaSection){var parts=SDPUtils.matchPrefix(mediaSection,"o=")[0].substr(2).split(" ");return{username:parts[0],sessionId:parts[1],sessionVersion:parseInt(parts[2],10),netType:parts[3],addressType:parts[4],address:parts[5]}},SDPUtils.isValidSDP=function(blob){if("string"!=typeof blob||0===blob.length)return!1;for(var lines=SDPUtils.splitLines(blob),i=0;i<lines.length;i++)if(lines[i].length<2||"="!==lines[i].charAt(1))return!1;return!0},"object"===("undefined"==typeof module?"undefined":_typeof(module))&&(module.exports=SDPUtils)},{}],7:[function(require,module,exports){(function(setImmediate,clearImmediate){(function(){var nextTick=require("process/browser.js").nextTick,apply=Function.prototype.apply,slice=Array.prototype.slice,immediateIds={},nextImmediateId=0;function Timeout(id,clearFn){this._id=id,this._clearFn=clearFn}exports.setTimeout=function(){return new Timeout(apply.call(setTimeout,window,arguments),clearTimeout)},exports.setInterval=function(){return new Timeout(apply.call(setInterval,window,arguments),clearInterval)},exports.clearTimeout=exports.clearInterval=function(timeout){timeout.close()},Timeout.prototype.unref=Timeout.prototype.ref=function(){},Timeout.prototype.close=function(){this._clearFn.call(window,this._id)},exports.enroll=function(item,msecs){clearTimeout(item._idleTimeoutId),item._idleTimeout=msecs},exports.unenroll=function(item){clearTimeout(item._idleTimeoutId),item._idleTimeout=-1},exports._unrefActive=exports.active=function(item){clearTimeout(item._idleTimeoutId);var msecs=item._idleTimeout;msecs>=0&&(item._idleTimeoutId=setTimeout((function(){item._onTimeout&&item._onTimeout()}),msecs))},exports.setImmediate="function"==typeof setImmediate?setImmediate:function(fn){var id=nextImmediateId++,args=!(arguments.length<2)&&slice.call(arguments,1);return immediateIds[id]=!0,nextTick((function(){immediateIds[id]&&(args?fn.apply(null,args):fn.call(null),exports.clearImmediate(id))})),id},exports.clearImmediate="function"==typeof clearImmediate?clearImmediate:function(id){delete immediateIds[id]}}).call(this)}).call(this,require("timers").setImmediate,require("timers").clearImmediate)},{"process/browser.js":3,timers:7}],8:[function(require,module,exports){for(var byteToHex=[],i=0;i<256;++i)byteToHex[i]=(i+256).toString(16).substr(1);module.exports=function(buf,offset){var i=offset||0,bth=byteToHex;return[bth[buf[i++]],bth[buf[i++]],bth[buf[i++]],bth[buf[i++]],"-",bth[buf[i++]],bth[buf[i++]],"-",bth[buf[i++]],bth[buf[i++]],"-",bth[buf[i++]],bth[buf[i++]],"-",bth[buf[i++]],bth[buf[i++]],bth[buf[i++]],bth[buf[i++]],bth[buf[i++]],bth[buf[i++]]].join("")}},{}],9:[function(require,module,exports){var getRandomValues="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof window.msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto);if(getRandomValues){var rnds8=new Uint8Array(16);module.exports=function(){return getRandomValues(rnds8),rnds8}}else{var rnds=new Array(16);module.exports=function(){for(var r,i=0;i<16;i++)0==(3&i)&&(r=4294967296*Math.random()),rnds[i]=r>>>((3&i)<<3)&255;return rnds}}},{}],10:[function(require,module,exports){var _nodeId,_clockseq,rng=require("./lib/rng"),bytesToUuid=require("./lib/bytesToUuid"),_lastMSecs=0,_lastNSecs=0;module.exports=function(options,buf,offset){var i=buf&&offset||0,b=buf||[],node=(options=options||{}).node||_nodeId,clockseq=void 0!==options.clockseq?options.clockseq:_clockseq;if(null==node||null==clockseq){var seedBytes=rng();null==node&&(node=_nodeId=[1|seedBytes[0],seedBytes[1],seedBytes[2],seedBytes[3],seedBytes[4],seedBytes[5]]),null==clockseq&&(clockseq=_clockseq=16383&(seedBytes[6]<<8|seedBytes[7]))}var msecs=void 0!==options.msecs?options.msecs:(new Date).getTime(),nsecs=void 0!==options.nsecs?options.nsecs:_lastNSecs+1,dt=msecs-_lastMSecs+(nsecs-_lastNSecs)/1e4;if(dt<0&&void 0===options.clockseq&&(clockseq=clockseq+1&16383),(dt<0||msecs>_lastMSecs)&&void 0===options.nsecs&&(nsecs=0),nsecs>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");_lastMSecs=msecs,_lastNSecs=nsecs,_clockseq=clockseq;var tl=(1e4*(268435455&(msecs+=122192928e5))+nsecs)%4294967296;b[i++]=tl>>>24&255,b[i++]=tl>>>16&255,b[i++]=tl>>>8&255,b[i++]=255&tl;var tmh=msecs/4294967296*1e4&268435455;b[i++]=tmh>>>8&255,b[i++]=255&tmh,b[i++]=tmh>>>24&15|16,b[i++]=tmh>>>16&255,b[i++]=clockseq>>>8|128,b[i++]=255&clockseq;for(var n=0;n<6;++n)b[i+n]=node[n];return buf||bytesToUuid(b)}},{"./lib/bytesToUuid":8,"./lib/rng":9}],11:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var adapter=(0,require("./adapter_factory.js").adapterFactory)({window:"undefined"==typeof window?void 0:window});exports.default=adapter},{"./adapter_factory.js":12}],12:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.adapterFactory=function(){var _ref=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},window=_ref.window,options=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{shimChrome:!0,shimFirefox:!0,shimEdge:!0,shimSafari:!0},logging=utils.log,browserDetails=utils.detectBrowser(window),adapter={browserDetails:browserDetails,commonShim:commonShim,extractVersion:utils.extractVersion,disableLog:utils.disableLog,disableWarnings:utils.disableWarnings};switch(browserDetails.browser){case"chrome":if(!chromeShim||!chromeShim.shimPeerConnection||!options.shimChrome)return logging("Chrome shim is not included in this adapter release."),adapter;if(null===browserDetails.version)return logging("Chrome shim can not determine version, not shimming."),adapter;logging("adapter.js shimming chrome."),adapter.browserShim=chromeShim,commonShim.shimAddIceCandidateNullOrEmpty(window,browserDetails),chromeShim.shimGetUserMedia(window,browserDetails),chromeShim.shimMediaStream(window,browserDetails),chromeShim.shimPeerConnection(window,browserDetails),chromeShim.shimOnTrack(window,browserDetails),chromeShim.shimAddTrackRemoveTrack(window,browserDetails),chromeShim.shimGetSendersWithDtmf(window,browserDetails),chromeShim.shimGetStats(window,browserDetails),chromeShim.shimSenderReceiverGetStats(window,browserDetails),chromeShim.fixNegotiationNeeded(window,browserDetails),commonShim.shimRTCIceCandidate(window,browserDetails),commonShim.shimConnectionState(window,browserDetails),commonShim.shimMaxMessageSize(window,browserDetails),commonShim.shimSendThrowTypeError(window,browserDetails),commonShim.removeExtmapAllowMixed(window,browserDetails);break;case"firefox":if(!firefoxShim||!firefoxShim.shimPeerConnection||!options.shimFirefox)return logging("Firefox shim is not included in this adapter release."),adapter;logging("adapter.js shimming firefox."),adapter.browserShim=firefoxShim,commonShim.shimAddIceCandidateNullOrEmpty(window,browserDetails),firefoxShim.shimGetUserMedia(window,browserDetails),firefoxShim.shimPeerConnection(window,browserDetails),firefoxShim.shimOnTrack(window,browserDetails),firefoxShim.shimRemoveStream(window,browserDetails),firefoxShim.shimSenderGetStats(window,browserDetails),firefoxShim.shimReceiverGetStats(window,browserDetails),firefoxShim.shimRTCDataChannel(window,browserDetails),firefoxShim.shimAddTransceiver(window,browserDetails),firefoxShim.shimGetParameters(window,browserDetails),firefoxShim.shimCreateOffer(window,browserDetails),firefoxShim.shimCreateAnswer(window,browserDetails),commonShim.shimRTCIceCandidate(window,browserDetails),commonShim.shimConnectionState(window,browserDetails),commonShim.shimMaxMessageSize(window,browserDetails),commonShim.shimSendThrowTypeError(window,browserDetails);break;case"edge":if(!edgeShim||!edgeShim.shimPeerConnection||!options.shimEdge)return logging("MS edge shim is not included in this adapter release."),adapter;logging("adapter.js shimming edge."),adapter.browserShim=edgeShim,edgeShim.shimGetUserMedia(window,browserDetails),edgeShim.shimGetDisplayMedia(window,browserDetails),edgeShim.shimPeerConnection(window,browserDetails),edgeShim.shimReplaceTrack(window,browserDetails),commonShim.shimMaxMessageSize(window,browserDetails),commonShim.shimSendThrowTypeError(window,browserDetails);break;case"safari":if(!safariShim||!options.shimSafari)return logging("Safari shim is not included in this adapter release."),adapter;logging("adapter.js shimming safari."),adapter.browserShim=safariShim,commonShim.shimAddIceCandidateNullOrEmpty(window,browserDetails),safariShim.shimRTCIceServerUrls(window,browserDetails),safariShim.shimCreateOfferLegacy(window,browserDetails),safariShim.shimCallbacksAPI(window,browserDetails),safariShim.shimLocalStreamsAPI(window,browserDetails),safariShim.shimRemoteStreamsAPI(window,browserDetails),safariShim.shimTrackEventTransceiver(window,browserDetails),safariShim.shimGetUserMedia(window,browserDetails),safariShim.shimAudioContext(window,browserDetails),commonShim.shimRTCIceCandidate(window,browserDetails),commonShim.shimMaxMessageSize(window,browserDetails),commonShim.shimSendThrowTypeError(window,browserDetails),commonShim.removeExtmapAllowMixed(window,browserDetails);break;default:logging("Unsupported browser!")}return adapter};var utils=_interopRequireWildcard(require("./utils")),chromeShim=_interopRequireWildcard(require("./chrome/chrome_shim")),edgeShim=_interopRequireWildcard(require("./edge/edge_shim")),firefoxShim=_interopRequireWildcard(require("./firefox/firefox_shim")),safariShim=_interopRequireWildcard(require("./safari/safari_shim")),commonShim=_interopRequireWildcard(require("./common_shim"));function _interopRequireWildcard(obj){if(obj&&obj.__esModule)return obj;var newObj={};if(null!=obj)for(var key in obj)Object.prototype.hasOwnProperty.call(obj,key)&&(newObj[key]=obj[key]);return newObj.default=obj,newObj}},{"./chrome/chrome_shim":13,"./common_shim":16,"./edge/edge_shim":17,"./firefox/firefox_shim":21,"./safari/safari_shim":24,"./utils":25}],13:[function(require,module,exports){"use strict";function _typeof2(obj){return(_typeof2="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}Object.defineProperty(exports,"__esModule",{value:!0}),exports.shimGetDisplayMedia=exports.shimGetUserMedia=void 0;var _typeof="function"==typeof Symbol&&"symbol"===_typeof2(Symbol.iterator)?function(obj){return _typeof2(obj)}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":_typeof2(obj)},_getusermedia=require("./getusermedia");Object.defineProperty(exports,"shimGetUserMedia",{enumerable:!0,get:function(){return _getusermedia.shimGetUserMedia}});var _getdisplaymedia=require("./getdisplaymedia");Object.defineProperty(exports,"shimGetDisplayMedia",{enumerable:!0,get:function(){return _getdisplaymedia.shimGetDisplayMedia}}),exports.shimMediaStream=function(window){window.MediaStream=window.MediaStream||window.webkitMediaStream},exports.shimOnTrack=function(window){if("object"===("undefined"==typeof window?"undefined":_typeof(window))&&window.RTCPeerConnection&&!("ontrack"in window.RTCPeerConnection.prototype)){Object.defineProperty(window.RTCPeerConnection.prototype,"ontrack",{get:function(){return this._ontrack},set:function(f){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=f)},enumerable:!0,configurable:!0});var origSetRemoteDescription=window.RTCPeerConnection.prototype.setRemoteDescription;window.RTCPeerConnection.prototype.setRemoteDescription=function(){var _this=this;return this._ontrackpoly||(this._ontrackpoly=function(e){e.stream.addEventListener("addtrack",(function(te){var receiver=void 0;receiver=window.RTCPeerConnection.prototype.getReceivers?_this.getReceivers().find((function(r){return r.track&&r.track.id===te.track.id})):{track:te.track};var event=new Event("track");event.track=te.track,event.receiver=receiver,event.transceiver={receiver:receiver},event.streams=[e.stream],_this.dispatchEvent(event)})),e.stream.getTracks().forEach((function(track){var receiver=void 0;receiver=window.RTCPeerConnection.prototype.getReceivers?_this.getReceivers().find((function(r){return r.track&&r.track.id===track.id})):{track:track};var event=new Event("track");event.track=track,event.receiver=receiver,event.transceiver={receiver:receiver},event.streams=[e.stream],_this.dispatchEvent(event)}))},this.addEventListener("addstream",this._ontrackpoly)),origSetRemoteDescription.apply(this,arguments)}}else utils.wrapPeerConnectionEvent(window,"track",(function(e){return e.transceiver||Object.defineProperty(e,"transceiver",{value:{receiver:e.receiver}}),e}))},exports.shimGetSendersWithDtmf=function(window){if("object"===("undefined"==typeof window?"undefined":_typeof(window))&&window.RTCPeerConnection&&!("getSenders"in window.RTCPeerConnection.prototype)&&"createDTMFSender"in window.RTCPeerConnection.prototype){var shimSenderWithDtmf=function(pc,track){return{track:track,get dtmf(){return void 0===this._dtmf&&("audio"===track.kind?this._dtmf=pc.createDTMFSender(track):this._dtmf=null),this._dtmf},_pc:pc}};if(!window.RTCPeerConnection.prototype.getSenders){window.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};var origAddTrack=window.RTCPeerConnection.prototype.addTrack;window.RTCPeerConnection.prototype.addTrack=function(track,stream){var sender=origAddTrack.apply(this,arguments);return sender||(sender=shimSenderWithDtmf(this,track),this._senders.push(sender)),sender};var origRemoveTrack=window.RTCPeerConnection.prototype.removeTrack;window.RTCPeerConnection.prototype.removeTrack=function(sender){origRemoveTrack.apply(this,arguments);var idx=this._senders.indexOf(sender);-1!==idx&&this._senders.splice(idx,1)}}var origAddStream=window.RTCPeerConnection.prototype.addStream;window.RTCPeerConnection.prototype.addStream=function(stream){var _this2=this;this._senders=this._senders||[],origAddStream.apply(this,[stream]),stream.getTracks().forEach((function(track){_this2._senders.push(shimSenderWithDtmf(_this2,track))}))};var origRemoveStream=window.RTCPeerConnection.prototype.removeStream;window.RTCPeerConnection.prototype.removeStream=function(stream){var _this3=this;this._senders=this._senders||[],origRemoveStream.apply(this,[stream]),stream.getTracks().forEach((function(track){var sender=_this3._senders.find((function(s){return s.track===track}));sender&&_this3._senders.splice(_this3._senders.indexOf(sender),1)}))}}else if("object"===("undefined"==typeof window?"undefined":_typeof(window))&&window.RTCPeerConnection&&"getSenders"in window.RTCPeerConnection.prototype&&"createDTMFSender"in window.RTCPeerConnection.prototype&&window.RTCRtpSender&&!("dtmf"in window.RTCRtpSender.prototype)){var origGetSenders=window.RTCPeerConnection.prototype.getSenders;window.RTCPeerConnection.prototype.getSenders=function(){var _this4=this,senders=origGetSenders.apply(this,[]);return senders.forEach((function(sender){return sender._pc=_this4})),senders},Object.defineProperty(window.RTCRtpSender.prototype,"dtmf",{get:function(){return void 0===this._dtmf&&("audio"===this.track.kind?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}},exports.shimGetStats=function(window){if(!window.RTCPeerConnection)return;var origGetStats=window.RTCPeerConnection.prototype.getStats;window.RTCPeerConnection.prototype.getStats=function(){var _this5=this,_arguments=Array.prototype.slice.call(arguments),selector=_arguments[0],onSucc=_arguments[1],onErr=_arguments[2];if(arguments.length>0&&"function"==typeof selector)return origGetStats.apply(this,arguments);if(0===origGetStats.length&&(0===arguments.length||"function"!=typeof selector))return origGetStats.apply(this,[]);var fixChromeStats_=function(response){var standardReport={};return response.result().forEach((function(report){var standardStats={id:report.id,timestamp:report.timestamp,type:{localcandidate:"local-candidate",remotecandidate:"remote-candidate"}[report.type]||report.type};report.names().forEach((function(name){standardStats[name]=report.stat(name)})),standardReport[standardStats.id]=standardStats})),standardReport},makeMapStats=function(stats){return new Map(Object.keys(stats).map((function(key){return[key,stats[key]]})))};if(arguments.length>=2){var successCallbackWrapper_=function(response){onSucc(makeMapStats(fixChromeStats_(response)))};return origGetStats.apply(this,[successCallbackWrapper_,selector])}return new Promise((function(resolve,reject){origGetStats.apply(_this5,[function(response){resolve(makeMapStats(fixChromeStats_(response)))},reject])})).then(onSucc,onErr)}},exports.shimSenderReceiverGetStats=function(window){if(!("object"===("undefined"==typeof window?"undefined":_typeof(window))&&window.RTCPeerConnection&&window.RTCRtpSender&&window.RTCRtpReceiver))return;if(!("getStats"in window.RTCRtpSender.prototype)){var origGetSenders=window.RTCPeerConnection.prototype.getSenders;origGetSenders&&(window.RTCPeerConnection.prototype.getSenders=function(){var _this6=this,senders=origGetSenders.apply(this,[]);return senders.forEach((function(sender){return sender._pc=_this6})),senders});var origAddTrack=window.RTCPeerConnection.prototype.addTrack;origAddTrack&&(window.RTCPeerConnection.prototype.addTrack=function(){var sender=origAddTrack.apply(this,arguments);return sender._pc=this,sender}),window.RTCRtpSender.prototype.getStats=function(){var sender=this;return this._pc.getStats().then((function(result){return utils.filterStats(result,sender.track,!0)}))}}if(!("getStats"in window.RTCRtpReceiver.prototype)){var origGetReceivers=window.RTCPeerConnection.prototype.getReceivers;origGetReceivers&&(window.RTCPeerConnection.prototype.getReceivers=function(){var _this7=this,receivers=origGetReceivers.apply(this,[]);return receivers.forEach((function(receiver){return receiver._pc=_this7})),receivers}),utils.wrapPeerConnectionEvent(window,"track",(function(e){return e.receiver._pc=e.srcElement,e})),window.RTCRtpReceiver.prototype.getStats=function(){var receiver=this;return this._pc.getStats().then((function(result){return utils.filterStats(result,receiver.track,!1)}))}}if(!("getStats"in window.RTCRtpSender.prototype)||!("getStats"in window.RTCRtpReceiver.prototype))return;var origGetStats=window.RTCPeerConnection.prototype.getStats;window.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof window.MediaStreamTrack){var track=arguments[0],sender=void 0,receiver=void 0,err=void 0;return this.getSenders().forEach((function(s){s.track===track&&(sender?err=!0:sender=s)})),this.getReceivers().forEach((function(r){return r.track===track&&(receiver?err=!0:receiver=r),r.track===track})),err||sender&&receiver?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):sender?sender.getStats():receiver?receiver.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return origGetStats.apply(this,arguments)}},exports.shimAddTrackRemoveTrackWithNative=shimAddTrackRemoveTrackWithNative,exports.shimAddTrackRemoveTrack=function(window,browserDetails){if(!window.RTCPeerConnection)return;if(window.RTCPeerConnection.prototype.addTrack&&browserDetails.version>=65)return shimAddTrackRemoveTrackWithNative(window);var origGetLocalStreams=window.RTCPeerConnection.prototype.getLocalStreams;window.RTCPeerConnection.prototype.getLocalStreams=function(){var _this11=this,nativeStreams=origGetLocalStreams.apply(this);return this._reverseStreams=this._reverseStreams||{},nativeStreams.map((function(stream){return _this11._reverseStreams[stream.id]}))};var origAddStream=window.RTCPeerConnection.prototype.addStream;window.RTCPeerConnection.prototype.addStream=function(stream){var _this12=this;if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},stream.getTracks().forEach((function(track){if(_this12.getSenders().find((function(s){return s.track===track})))throw new DOMException("Track already exists.","InvalidAccessError")})),!this._reverseStreams[stream.id]){var newStream=new window.MediaStream(stream.getTracks());this._streams[stream.id]=newStream,this._reverseStreams[newStream.id]=stream,stream=newStream}origAddStream.apply(this,[stream])};var origRemoveStream=window.RTCPeerConnection.prototype.removeStream;function replaceInternalStreamId(pc,description){var sdp=description.sdp;return Object.keys(pc._reverseStreams||[]).forEach((function(internalId){var externalStream=pc._reverseStreams[internalId],internalStream=pc._streams[externalStream.id];sdp=sdp.replace(new RegExp(internalStream.id,"g"),externalStream.id)})),new RTCSessionDescription({type:description.type,sdp:sdp})}function replaceExternalStreamId(pc,description){var sdp=description.sdp;return Object.keys(pc._reverseStreams||[]).forEach((function(internalId){var externalStream=pc._reverseStreams[internalId],internalStream=pc._streams[externalStream.id];sdp=sdp.replace(new RegExp(externalStream.id,"g"),internalStream.id)})),new RTCSessionDescription({type:description.type,sdp:sdp})}window.RTCPeerConnection.prototype.removeStream=function(stream){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},origRemoveStream.apply(this,[this._streams[stream.id]||stream]),delete this._reverseStreams[this._streams[stream.id]?this._streams[stream.id].id:stream.id],delete this._streams[stream.id]},window.RTCPeerConnection.prototype.addTrack=function(track,stream){var _this13=this;if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");var streams=[].slice.call(arguments,1);if(1!==streams.length||!streams[0].getTracks().find((function(t){return t===track})))throw new DOMException("The adapter.js addTrack polyfill only supports a single  stream which is associated with the specified track.","NotSupportedError");var alreadyExists=this.getSenders().find((function(s){return s.track===track}));if(alreadyExists)throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};var oldStream=this._streams[stream.id];if(oldStream)oldStream.addTrack(track),Promise.resolve().then((function(){_this13.dispatchEvent(new Event("negotiationneeded"))}));else{var newStream=new window.MediaStream([track]);this._streams[stream.id]=newStream,this._reverseStreams[newStream.id]=stream,this.addStream(newStream)}return this.getSenders().find((function(s){return s.track===track}))},["createOffer","createAnswer"].forEach((function(method){var nativeMethod=window.RTCPeerConnection.prototype[method],methodObj=_defineProperty({},method,(function(){var _this14=this,args=arguments,isLegacyCall=arguments.length&&"function"==typeof arguments[0];return isLegacyCall?nativeMethod.apply(this,[function(description){var desc=replaceInternalStreamId(_this14,description);args[0].apply(null,[desc])},function(err){args[1]&&args[1].apply(null,err)},arguments[2]]):nativeMethod.apply(this,arguments).then((function(description){return replaceInternalStreamId(_this14,description)}))}));window.RTCPeerConnection.prototype[method]=methodObj[method]}));var origSetLocalDescription=window.RTCPeerConnection.prototype.setLocalDescription;window.RTCPeerConnection.prototype.setLocalDescription=function(){return arguments.length&&arguments[0].type?(arguments[0]=replaceExternalStreamId(this,arguments[0]),origSetLocalDescription.apply(this,arguments)):origSetLocalDescription.apply(this,arguments)};var origLocalDescription=Object.getOwnPropertyDescriptor(window.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(window.RTCPeerConnection.prototype,"localDescription",{get:function(){var description=origLocalDescription.get.apply(this);return""===description.type?description:replaceInternalStreamId(this,description)}}),window.RTCPeerConnection.prototype.removeTrack=function(sender){var _this15=this;if("closed"===this.signalingState)throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!sender._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(!(sender._pc===this))throw new DOMException("Sender was not created by this connection.","InvalidAccessError");this._streams=this._streams||{};var stream=void 0;Object.keys(this._streams).forEach((function(streamid){_this15._streams[streamid].getTracks().find((function(track){return sender.track===track}))&&(stream=_this15._streams[streamid])})),stream&&(1===stream.getTracks().length?this.removeStream(this._reverseStreams[stream.id]):stream.removeTrack(sender.track),this.dispatchEvent(new Event("negotiationneeded")))}},exports.shimPeerConnection=function(window,browserDetails){!window.RTCPeerConnection&&window.webkitRTCPeerConnection&&(window.RTCPeerConnection=window.webkitRTCPeerConnection);if(!window.RTCPeerConnection)return;browserDetails.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach((function(method){var nativeMethod=window.RTCPeerConnection.prototype[method],methodObj=_defineProperty({},method,(function(){return arguments[0]=new("addIceCandidate"===method?window.RTCIceCandidate:window.RTCSessionDescription)(arguments[0]),nativeMethod.apply(this,arguments)}));window.RTCPeerConnection.prototype[method]=methodObj[method]}))},exports.fixNegotiationNeeded=function(window,browserDetails){utils.wrapPeerConnectionEvent(window,"negotiationneeded",(function(e){var pc=e.target;if(!(browserDetails.version<72||pc.getConfiguration&&"plan-b"===pc.getConfiguration().sdpSemantics)||"stable"===pc.signalingState)return e}))};var utils=function(obj){if(obj&&obj.__esModule)return obj;var newObj={};if(null!=obj)for(var key in obj)Object.prototype.hasOwnProperty.call(obj,key)&&(newObj[key]=obj[key]);return newObj.default=obj,newObj}(require("../utils.js"));function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}function shimAddTrackRemoveTrackWithNative(window){window.RTCPeerConnection.prototype.getLocalStreams=function(){var _this8=this;return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map((function(streamId){return _this8._shimmedLocalStreams[streamId][0]}))};var origAddTrack=window.RTCPeerConnection.prototype.addTrack;window.RTCPeerConnection.prototype.addTrack=function(track,stream){if(!stream)return origAddTrack.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};var sender=origAddTrack.apply(this,arguments);return this._shimmedLocalStreams[stream.id]?-1===this._shimmedLocalStreams[stream.id].indexOf(sender)&&this._shimmedLocalStreams[stream.id].push(sender):this._shimmedLocalStreams[stream.id]=[stream,sender],sender};var origAddStream=window.RTCPeerConnection.prototype.addStream;window.RTCPeerConnection.prototype.addStream=function(stream){var _this9=this;this._shimmedLocalStreams=this._shimmedLocalStreams||{},stream.getTracks().forEach((function(track){if(_this9.getSenders().find((function(s){return s.track===track})))throw new DOMException("Track already exists.","InvalidAccessError")}));var existingSenders=this.getSenders();origAddStream.apply(this,arguments);var newSenders=this.getSenders().filter((function(newSender){return-1===existingSenders.indexOf(newSender)}));this._shimmedLocalStreams[stream.id]=[stream].concat(newSenders)};var origRemoveStream=window.RTCPeerConnection.prototype.removeStream;window.RTCPeerConnection.prototype.removeStream=function(stream){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[stream.id],origRemoveStream.apply(this,arguments)};var origRemoveTrack=window.RTCPeerConnection.prototype.removeTrack;window.RTCPeerConnection.prototype.removeTrack=function(sender){var _this10=this;return this._shimmedLocalStreams=this._shimmedLocalStreams||{},sender&&Object.keys(this._shimmedLocalStreams).forEach((function(streamId){var idx=_this10._shimmedLocalStreams[streamId].indexOf(sender);-1!==idx&&_this10._shimmedLocalStreams[streamId].splice(idx,1),1===_this10._shimmedLocalStreams[streamId].length&&delete _this10._shimmedLocalStreams[streamId]})),origRemoveTrack.apply(this,arguments)}}},{"../utils.js":25,"./getdisplaymedia":14,"./getusermedia":15}],14:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.shimGetDisplayMedia=function(window,getSourceId){if(window.navigator.mediaDevices&&"getDisplayMedia"in window.navigator.mediaDevices)return;if(!window.navigator.mediaDevices)return;if("function"!=typeof getSourceId)return void console.error("shimGetDisplayMedia: getSourceId argument is not a function");window.navigator.mediaDevices.getDisplayMedia=function(constraints){return getSourceId(constraints).then((function(sourceId){var widthSpecified=constraints.video&&constraints.video.width,heightSpecified=constraints.video&&constraints.video.height,frameRateSpecified=constraints.video&&constraints.video.frameRate;return constraints.video={mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:sourceId,maxFrameRate:frameRateSpecified||3}},widthSpecified&&(constraints.video.mandatory.maxWidth=widthSpecified),heightSpecified&&(constraints.video.mandatory.maxHeight=heightSpecified),window.navigator.mediaDevices.getUserMedia(constraints)}))}}},{}],15:[function(require,module,exports){"use strict";function _typeof2(obj){return(_typeof2="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}Object.defineProperty(exports,"__esModule",{value:!0});var _typeof="function"==typeof Symbol&&"symbol"===_typeof2(Symbol.iterator)?function(obj){return _typeof2(obj)}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":_typeof2(obj)};exports.shimGetUserMedia=function(window,browserDetails){var navigator=window&&window.navigator;if(!navigator.mediaDevices)return;var constraintsToChrome_=function(c){if("object"!==("undefined"==typeof c?"undefined":_typeof(c))||c.mandatory||c.optional)return c;var cc={};return Object.keys(c).forEach((function(key){if("require"!==key&&"advanced"!==key&&"mediaSource"!==key){var r="object"===_typeof(c[key])?c[key]:{ideal:c[key]};void 0!==r.exact&&"number"==typeof r.exact&&(r.min=r.max=r.exact);var oldname_=function(prefix,name){return prefix?prefix+name.charAt(0).toUpperCase()+name.slice(1):"deviceId"===name?"sourceId":name};if(void 0!==r.ideal){cc.optional=cc.optional||[];var oc={};"number"==typeof r.ideal?(oc[oldname_("min",key)]=r.ideal,cc.optional.push(oc),(oc={})[oldname_("max",key)]=r.ideal,cc.optional.push(oc)):(oc[oldname_("",key)]=r.ideal,cc.optional.push(oc))}void 0!==r.exact&&"number"!=typeof r.exact?(cc.mandatory=cc.mandatory||{},cc.mandatory[oldname_("",key)]=r.exact):["min","max"].forEach((function(mix){void 0!==r[mix]&&(cc.mandatory=cc.mandatory||{},cc.mandatory[oldname_(mix,key)]=r[mix])}))}})),c.advanced&&(cc.optional=(cc.optional||[]).concat(c.advanced)),cc},shimConstraints_=function(constraints,func){if(browserDetails.version>=61)return func(constraints);if((constraints=JSON.parse(JSON.stringify(constraints)))&&"object"===_typeof(constraints.audio)){var remap=function(obj,a,b){a in obj&&!(b in obj)&&(obj[b]=obj[a],delete obj[a])};remap((constraints=JSON.parse(JSON.stringify(constraints))).audio,"autoGainControl","googAutoGainControl"),remap(constraints.audio,"noiseSuppression","googNoiseSuppression"),constraints.audio=constraintsToChrome_(constraints.audio)}if(constraints&&"object"===_typeof(constraints.video)){var face=constraints.video.facingMode;face=face&&("object"===("undefined"==typeof face?"undefined":_typeof(face))?face:{ideal:face});var getSupportedFacingModeLies=browserDetails.version<66;if(face&&("user"===face.exact||"environment"===face.exact||"user"===face.ideal||"environment"===face.ideal)&&(!navigator.mediaDevices.getSupportedConstraints||!navigator.mediaDevices.getSupportedConstraints().facingMode||getSupportedFacingModeLies)){delete constraints.video.facingMode;var matches=void 0;if("environment"===face.exact||"environment"===face.ideal?matches=["back","rear"]:"user"!==face.exact&&"user"!==face.ideal||(matches=["front"]),matches)return navigator.mediaDevices.enumerateDevices().then((function(devices){var dev=(devices=devices.filter((function(d){return"videoinput"===d.kind}))).find((function(d){return matches.some((function(match){return d.label.toLowerCase().includes(match)}))}));return!dev&&devices.length&&matches.includes("back")&&(dev=devices[devices.length-1]),dev&&(constraints.video.deviceId=face.exact?{exact:dev.deviceId}:{ideal:dev.deviceId}),constraints.video=constraintsToChrome_(constraints.video),logging("chrome: "+JSON.stringify(constraints)),func(constraints)}))}constraints.video=constraintsToChrome_(constraints.video)}return logging("chrome: "+JSON.stringify(constraints)),func(constraints)},shimError_=function(e){return browserDetails.version>=64?e:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[e.name]||e.name,message:e.message,constraint:e.constraint||e.constraintName,toString:function(){return this.name+(this.message&&": ")+this.message}}};if(navigator.getUserMedia=function(constraints,onSuccess,onError){shimConstraints_(constraints,(function(c){navigator.webkitGetUserMedia(c,onSuccess,(function(e){onError&&onError(shimError_(e))}))}))}.bind(navigator),navigator.mediaDevices.getUserMedia){var origGetUserMedia=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);navigator.mediaDevices.getUserMedia=function(cs){return shimConstraints_(cs,(function(c){return origGetUserMedia(c).then((function(stream){if(c.audio&&!stream.getAudioTracks().length||c.video&&!stream.getVideoTracks().length)throw stream.getTracks().forEach((function(track){track.stop()})),new DOMException("","NotFoundError");return stream}),(function(e){return Promise.reject(shimError_(e))}))}))}}};var logging=function(obj){if(obj&&obj.__esModule)return obj;var newObj={};if(null!=obj)for(var key in obj)Object.prototype.hasOwnProperty.call(obj,key)&&(newObj[key]=obj[key]);return newObj.default=obj,newObj}(require("../utils.js")).log},{"../utils.js":25}],16:[function(require,module,exports){"use strict";function _typeof2(obj){return(_typeof2="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}Object.defineProperty(exports,"__esModule",{value:!0});var _typeof="function"==typeof Symbol&&"symbol"===_typeof2(Symbol.iterator)?function(obj){return _typeof2(obj)}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":_typeof2(obj)};exports.shimRTCIceCandidate=function(window){if(!window.RTCIceCandidate||window.RTCIceCandidate&&"foundation"in window.RTCIceCandidate.prototype)return;var NativeRTCIceCandidate=window.RTCIceCandidate;window.RTCIceCandidate=function(args){if("object"===("undefined"==typeof args?"undefined":_typeof(args))&&args.candidate&&0===args.candidate.indexOf("a=")&&((args=JSON.parse(JSON.stringify(args))).candidate=args.candidate.substr(2)),args.candidate&&args.candidate.length){var nativeCandidate=new NativeRTCIceCandidate(args),parsedCandidate=_sdp2.default.parseCandidate(args.candidate),augmentedCandidate=Object.assign(nativeCandidate,parsedCandidate);return augmentedCandidate.toJSON=function(){return{candidate:augmentedCandidate.candidate,sdpMid:augmentedCandidate.sdpMid,sdpMLineIndex:augmentedCandidate.sdpMLineIndex,usernameFragment:augmentedCandidate.usernameFragment}},augmentedCandidate}return new NativeRTCIceCandidate(args)},window.RTCIceCandidate.prototype=NativeRTCIceCandidate.prototype,utils.wrapPeerConnectionEvent(window,"icecandidate",(function(e){return e.candidate&&Object.defineProperty(e,"candidate",{value:new window.RTCIceCandidate(e.candidate),writable:"false"}),e}))},exports.shimMaxMessageSize=function(window,browserDetails){if(!window.RTCPeerConnection)return;"sctp"in window.RTCPeerConnection.prototype||Object.defineProperty(window.RTCPeerConnection.prototype,"sctp",{get:function(){return"undefined"==typeof this._sctp?null:this._sctp}});var sctpInDescription=function(description){if(!description||!description.sdp)return!1;var sections=_sdp2.default.splitSections(description.sdp);return sections.shift(),sections.some((function(mediaSection){var mLine=_sdp2.default.parseMLine(mediaSection);return mLine&&"application"===mLine.kind&&-1!==mLine.protocol.indexOf("SCTP")}))},getRemoteFirefoxVersion=function(description){var match=description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);if(null===match||match.length<2)return-1;var version=parseInt(match[1],10);return version!=version?-1:version},getCanSendMaxMessageSize=function(remoteIsFirefox){var canSendMaxMessageSize=65536;return"firefox"===browserDetails.browser&&(canSendMaxMessageSize=browserDetails.version<57?-1===remoteIsFirefox?16384:2147483637:browserDetails.version<60?57===browserDetails.version?65535:65536:2147483637),canSendMaxMessageSize},getMaxMessageSize=function(description,remoteIsFirefox){var maxMessageSize=65536;"firefox"===browserDetails.browser&&57===browserDetails.version&&(maxMessageSize=65535);var match=_sdp2.default.matchPrefix(description.sdp,"a=max-message-size:");return match.length>0?maxMessageSize=parseInt(match[0].substr(19),10):"firefox"===browserDetails.browser&&-1!==remoteIsFirefox&&(maxMessageSize=2147483637),maxMessageSize},origSetRemoteDescription=window.RTCPeerConnection.prototype.setRemoteDescription;window.RTCPeerConnection.prototype.setRemoteDescription=function(){if(this._sctp=null,"chrome"===browserDetails.browser&&browserDetails.version>=76){var _getConfiguration=this.getConfiguration(),sdpSemantics=_getConfiguration.sdpSemantics;"plan-b"===sdpSemantics&&Object.defineProperty(this,"sctp",{get:function(){return"undefined"==typeof this._sctp?null:this._sctp},enumerable:!0,configurable:!0})}if(sctpInDescription(arguments[0])){var isFirefox=getRemoteFirefoxVersion(arguments[0]),canSendMMS=getCanSendMaxMessageSize(isFirefox),remoteMMS=getMaxMessageSize(arguments[0],isFirefox),maxMessageSize=void 0;maxMessageSize=0===canSendMMS&&0===remoteMMS?Number.POSITIVE_INFINITY:0===canSendMMS||0===remoteMMS?Math.max(canSendMMS,remoteMMS):Math.min(canSendMMS,remoteMMS);var sctp={};Object.defineProperty(sctp,"maxMessageSize",{get:function(){return maxMessageSize}}),this._sctp=sctp}return origSetRemoteDescription.apply(this,arguments)}},exports.shimSendThrowTypeError=function(window){if(!window.RTCPeerConnection||!("createDataChannel"in window.RTCPeerConnection.prototype))return;function wrapDcSend(dc,pc){var origDataChannelSend=dc.send;dc.send=function(){var data=arguments[0],length=data.length||data.size||data.byteLength;if("open"===dc.readyState&&pc.sctp&&length>pc.sctp.maxMessageSize)throw new TypeError("Message too large (can send a maximum of "+pc.sctp.maxMessageSize+" bytes)");return origDataChannelSend.apply(dc,arguments)}}var origCreateDataChannel=window.RTCPeerConnection.prototype.createDataChannel;window.RTCPeerConnection.prototype.createDataChannel=function(){var dataChannel=origCreateDataChannel.apply(this,arguments);return wrapDcSend(dataChannel,this),dataChannel},utils.wrapPeerConnectionEvent(window,"datachannel",(function(e){return wrapDcSend(e.channel,e.target),e}))},exports.shimConnectionState=function(window){if(!window.RTCPeerConnection||"connectionState"in window.RTCPeerConnection.prototype)return;var proto=window.RTCPeerConnection.prototype;Object.defineProperty(proto,"connectionState",{get:function(){return{completed:"connected",checking:"connecting"}[this.iceConnectionState]||this.iceConnectionState},enumerable:!0,configurable:!0}),Object.defineProperty(proto,"onconnectionstatechange",{get:function(){return this._onconnectionstatechange||null},set:function(cb){this._onconnectionstatechange&&(this.removeEventListener("connectionstatechange",this._onconnectionstatechange),delete this._onconnectionstatechange),cb&&this.addEventListener("connectionstatechange",this._onconnectionstatechange=cb)},enumerable:!0,configurable:!0}),["setLocalDescription","setRemoteDescription"].forEach((function(method){var origMethod=proto[method];proto[method]=function(){return this._connectionstatechangepoly||(this._connectionstatechangepoly=function(e){var pc=e.target;if(pc._lastConnectionState!==pc.connectionState){pc._lastConnectionState=pc.connectionState;var newEvent=new Event("connectionstatechange",e);pc.dispatchEvent(newEvent)}return e},this.addEventListener("iceconnectionstatechange",this._connectionstatechangepoly)),origMethod.apply(this,arguments)}}))},exports.removeExtmapAllowMixed=function(window,browserDetails){if(!window.RTCPeerConnection)return;if("chrome"===browserDetails.browser&&browserDetails.version>=71)return;if("safari"===browserDetails.browser&&browserDetails.version>=605)return;var nativeSRD=window.RTCPeerConnection.prototype.setRemoteDescription;window.RTCPeerConnection.prototype.setRemoteDescription=function(desc){if(desc&&desc.sdp&&-1!==desc.sdp.indexOf("\na=extmap-allow-mixed")){var sdp=desc.sdp.split("\n").filter((function(line){return"a=extmap-allow-mixed"!==line.trim()})).join("\n");window.RTCSessionDescription&&desc instanceof window.RTCSessionDescription?arguments[0]=new window.RTCSessionDescription({type:desc.type,sdp:sdp}):desc.sdp=sdp}return nativeSRD.apply(this,arguments)}},exports.shimAddIceCandidateNullOrEmpty=function(window,browserDetails){if(!window.RTCPeerConnection||!window.RTCPeerConnection.prototype)return;var nativeAddIceCandidate=window.RTCPeerConnection.prototype.addIceCandidate;if(!nativeAddIceCandidate||0===nativeAddIceCandidate.length)return;window.RTCPeerConnection.prototype.addIceCandidate=function(){return arguments[0]?("chrome"===browserDetails.browser&&browserDetails.version<78||"firefox"===browserDetails.browser&&browserDetails.version<68||"safari"===browserDetails.browser)&&arguments[0]&&""===arguments[0].candidate?Promise.resolve():nativeAddIceCandidate.apply(this,arguments):(arguments[1]&&arguments[1].apply(null),Promise.resolve())}};var obj,_sdp=require("sdp"),_sdp2=(obj=_sdp)&&obj.__esModule?obj:{default:obj},utils=function(obj){if(obj&&obj.__esModule)return obj;var newObj={};if(null!=obj)for(var key in obj)Object.prototype.hasOwnProperty.call(obj,key)&&(newObj[key]=obj[key]);return newObj.default=obj,newObj}(require("./utils"))},{"./utils":25,sdp:6}],17:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.shimGetDisplayMedia=exports.shimGetUserMedia=void 0;var _getusermedia=require("./getusermedia");Object.defineProperty(exports,"shimGetUserMedia",{enumerable:!0,get:function(){return _getusermedia.shimGetUserMedia}});var _getdisplaymedia=require("./getdisplaymedia");Object.defineProperty(exports,"shimGetDisplayMedia",{enumerable:!0,get:function(){return _getdisplaymedia.shimGetDisplayMedia}}),exports.shimPeerConnection=function(window,browserDetails){if(window.RTCIceGatherer&&(window.RTCIceCandidate||(window.RTCIceCandidate=function(args){return args}),window.RTCSessionDescription||(window.RTCSessionDescription=function(args){return args}),browserDetails.version<15025)){var origMSTEnabled=Object.getOwnPropertyDescriptor(window.MediaStreamTrack.prototype,"enabled");Object.defineProperty(window.MediaStreamTrack.prototype,"enabled",{set:function(value){origMSTEnabled.set.call(this,value);var ev=new Event("enabled");ev.enabled=value,this.dispatchEvent(ev)}})}window.RTCRtpSender&&!("dtmf"in window.RTCRtpSender.prototype)&&Object.defineProperty(window.RTCRtpSender.prototype,"dtmf",{get:function(){return void 0===this._dtmf&&("audio"===this.track.kind?this._dtmf=new window.RTCDtmfSender(this):"video"===this.track.kind&&(this._dtmf=null)),this._dtmf}});window.RTCDtmfSender&&!window.RTCDTMFSender&&(window.RTCDTMFSender=window.RTCDtmfSender);var RTCPeerConnectionShim=(0,_rtcpeerconnectionShim2.default)(window,browserDetails.version);window.RTCPeerConnection=function(config){return config&&config.iceServers&&(config.iceServers=(0,_filtericeservers.filterIceServers)(config.iceServers,browserDetails.version),utils.log("ICE servers after filtering:",config.iceServers)),new RTCPeerConnectionShim(config)},window.RTCPeerConnection.prototype=RTCPeerConnectionShim.prototype},exports.shimReplaceTrack=function(window){window.RTCRtpSender&&!("replaceTrack"in window.RTCRtpSender.prototype)&&(window.RTCRtpSender.prototype.replaceTrack=window.RTCRtpSender.prototype.setTrack)};var obj,utils=function(obj){if(obj&&obj.__esModule)return obj;var newObj={};if(null!=obj)for(var key in obj)Object.prototype.hasOwnProperty.call(obj,key)&&(newObj[key]=obj[key]);return newObj.default=obj,newObj}(require("../utils")),_filtericeservers=require("./filtericeservers"),_rtcpeerconnectionShim=require("rtcpeerconnection-shim"),_rtcpeerconnectionShim2=(obj=_rtcpeerconnectionShim)&&obj.__esModule?obj:{default:obj}},{"../utils":25,"./filtericeservers":18,"./getdisplaymedia":19,"./getusermedia":20,"rtcpeerconnection-shim":5}],18:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.filterIceServers=function(iceServers,edgeVersion){var hasTurn=!1;return(iceServers=JSON.parse(JSON.stringify(iceServers))).filter((function(server){if(server&&(server.urls||server.url)){var urls=server.urls||server.url;server.url&&!server.urls&&utils.deprecated("RTCIceServer.url","RTCIceServer.urls");var isString="string"==typeof urls;return isString&&(urls=[urls]),urls=urls.filter((function(url){if(0===url.indexOf("stun:"))return!1;var validTurn=url.startsWith("turn")&&!url.startsWith("turn:[")&&url.includes("transport=udp");return validTurn&&!hasTurn?(hasTurn=!0,!0):validTurn&&!hasTurn})),delete server.url,server.urls=isString?urls[0]:urls,!!urls.length}}))};var utils=function(obj){if(obj&&obj.__esModule)return obj;var newObj={};if(null!=obj)for(var key in obj)Object.prototype.hasOwnProperty.call(obj,key)&&(newObj[key]=obj[key]);return newObj.default=obj,newObj}(require("../utils"))},{"../utils":25}],19:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.shimGetDisplayMedia=function(window){if(!("getDisplayMedia"in window.navigator))return;if(!window.navigator.mediaDevices)return;if(window.navigator.mediaDevices&&"getDisplayMedia"in window.navigator.mediaDevices)return;window.navigator.mediaDevices.getDisplayMedia=window.navigator.getDisplayMedia.bind(window.navigator)}},{}],20:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.shimGetUserMedia=function(window){var navigator=window&&window.navigator,origGetUserMedia=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);navigator.mediaDevices.getUserMedia=function(c){return origGetUserMedia(c).catch((function(e){return Promise.reject(function(e){return{name:{PermissionDeniedError:"NotAllowedError"}[e.name]||e.name,message:e.message,constraint:e.constraint,toString:function(){return this.name}}}(e))}))}}},{}],21:[function(require,module,exports){"use strict";function _typeof2(obj){return(_typeof2="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}Object.defineProperty(exports,"__esModule",{value:!0}),exports.shimGetDisplayMedia=exports.shimGetUserMedia=void 0;var _typeof="function"==typeof Symbol&&"symbol"===_typeof2(Symbol.iterator)?function(obj){return _typeof2(obj)}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":_typeof2(obj)},_getusermedia=require("./getusermedia");Object.defineProperty(exports,"shimGetUserMedia",{enumerable:!0,get:function(){return _getusermedia.shimGetUserMedia}});var _getdisplaymedia=require("./getdisplaymedia");Object.defineProperty(exports,"shimGetDisplayMedia",{enumerable:!0,get:function(){return _getdisplaymedia.shimGetDisplayMedia}}),exports.shimOnTrack=function(window){"object"===("undefined"==typeof window?"undefined":_typeof(window))&&window.RTCTrackEvent&&"receiver"in window.RTCTrackEvent.prototype&&!("transceiver"in window.RTCTrackEvent.prototype)&&Object.defineProperty(window.RTCTrackEvent.prototype,"transceiver",{get:function(){return{receiver:this.receiver}}})},exports.shimPeerConnection=function(window,browserDetails){if("object"!==("undefined"==typeof window?"undefined":_typeof(window))||!window.RTCPeerConnection&&!window.mozRTCPeerConnection)return;!window.RTCPeerConnection&&window.mozRTCPeerConnection&&(window.RTCPeerConnection=window.mozRTCPeerConnection);browserDetails.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach((function(method){var nativeMethod=window.RTCPeerConnection.prototype[method],methodObj=function(obj,key,value){key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value;return obj}({},method,(function(){return arguments[0]=new("addIceCandidate"===method?window.RTCIceCandidate:window.RTCSessionDescription)(arguments[0]),nativeMethod.apply(this,arguments)}));window.RTCPeerConnection.prototype[method]=methodObj[method]}));var modernStatsTypes={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"},nativeGetStats=window.RTCPeerConnection.prototype.getStats;window.RTCPeerConnection.prototype.getStats=function(){var _arguments=Array.prototype.slice.call(arguments),selector=_arguments[0],onSucc=_arguments[1],onErr=_arguments[2];return nativeGetStats.apply(this,[selector||null]).then((function(stats){if(browserDetails.version<53&&!onSucc)try{stats.forEach((function(stat){stat.type=modernStatsTypes[stat.type]||stat.type}))}catch(e){if("TypeError"!==e.name)throw e;stats.forEach((function(stat,i){stats.set(i,Object.assign({},stat,{type:modernStatsTypes[stat.type]||stat.type}))}))}return stats})).then(onSucc,onErr)}},exports.shimSenderGetStats=function(window){if("object"!==("undefined"==typeof window?"undefined":_typeof(window))||!window.RTCPeerConnection||!window.RTCRtpSender)return;if(window.RTCRtpSender&&"getStats"in window.RTCRtpSender.prototype)return;var origGetSenders=window.RTCPeerConnection.prototype.getSenders;origGetSenders&&(window.RTCPeerConnection.prototype.getSenders=function(){var _this=this,senders=origGetSenders.apply(this,[]);return senders.forEach((function(sender){return sender._pc=_this})),senders});var origAddTrack=window.RTCPeerConnection.prototype.addTrack;origAddTrack&&(window.RTCPeerConnection.prototype.addTrack=function(){var sender=origAddTrack.apply(this,arguments);return sender._pc=this,sender});window.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}},exports.shimReceiverGetStats=function(window){if("object"!==("undefined"==typeof window?"undefined":_typeof(window))||!window.RTCPeerConnection||!window.RTCRtpSender)return;if(window.RTCRtpSender&&"getStats"in window.RTCRtpReceiver.prototype)return;var origGetReceivers=window.RTCPeerConnection.prototype.getReceivers;origGetReceivers&&(window.RTCPeerConnection.prototype.getReceivers=function(){var _this2=this,receivers=origGetReceivers.apply(this,[]);return receivers.forEach((function(receiver){return receiver._pc=_this2})),receivers});utils.wrapPeerConnectionEvent(window,"track",(function(e){return e.receiver._pc=e.srcElement,e})),window.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}},exports.shimRemoveStream=function(window){if(!window.RTCPeerConnection||"removeStream"in window.RTCPeerConnection.prototype)return;window.RTCPeerConnection.prototype.removeStream=function(stream){var _this3=this;utils.deprecated("removeStream","removeTrack"),this.getSenders().forEach((function(sender){sender.track&&stream.getTracks().includes(sender.track)&&_this3.removeTrack(sender)}))}},exports.shimRTCDataChannel=function(window){window.DataChannel&&!window.RTCDataChannel&&(window.RTCDataChannel=window.DataChannel)},exports.shimAddTransceiver=function(window){if("object"!==("undefined"==typeof window?"undefined":_typeof(window))||!window.RTCPeerConnection)return;var origAddTransceiver=window.RTCPeerConnection.prototype.addTransceiver;origAddTransceiver&&(window.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];var initParameters=arguments[1],shouldPerformCheck=initParameters&&"sendEncodings"in initParameters;shouldPerformCheck&&initParameters.sendEncodings.forEach((function(encodingParam){if("rid"in encodingParam){if(!/^[a-z0-9]{0,16}$/i.test(encodingParam.rid))throw new TypeError("Invalid RID value provided.")}if("scaleResolutionDownBy"in encodingParam&&!(parseFloat(encodingParam.scaleResolutionDownBy)>=1))throw new RangeError("scale_resolution_down_by must be >= 1.0");if("maxFramerate"in encodingParam&&!(parseFloat(encodingParam.maxFramerate)>=0))throw new RangeError("max_framerate must be >= 0.0")}));var transceiver=origAddTransceiver.apply(this,arguments);if(shouldPerformCheck){var sender=transceiver.sender,params=sender.getParameters();(!("encodings"in params)||1===params.encodings.length&&0===Object.keys(params.encodings[0]).length)&&(params.encodings=initParameters.sendEncodings,sender.sendEncodings=initParameters.sendEncodings,this.setParametersPromises.push(sender.setParameters(params).then((function(){delete sender.sendEncodings})).catch((function(){delete sender.sendEncodings}))))}return transceiver})},exports.shimGetParameters=function(window){if("object"!==("undefined"==typeof window?"undefined":_typeof(window))||!window.RTCRtpSender)return;var origGetParameters=window.RTCRtpSender.prototype.getParameters;origGetParameters&&(window.RTCRtpSender.prototype.getParameters=function(){var params=origGetParameters.apply(this,arguments);return"encodings"in params||(params.encodings=[].concat(this.sendEncodings||[{}])),params})},exports.shimCreateOffer=function(window){if("object"!==("undefined"==typeof window?"undefined":_typeof(window))||!window.RTCPeerConnection)return;var origCreateOffer=window.RTCPeerConnection.prototype.createOffer;window.RTCPeerConnection.prototype.createOffer=function(){var _this4=this,_arguments2=arguments;return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then((function(){return origCreateOffer.apply(_this4,_arguments2)})).finally((function(){_this4.setParametersPromises=[]})):origCreateOffer.apply(this,arguments)}},exports.shimCreateAnswer=function(window){if("object"!==("undefined"==typeof window?"undefined":_typeof(window))||!window.RTCPeerConnection)return;var origCreateAnswer=window.RTCPeerConnection.prototype.createAnswer;window.RTCPeerConnection.prototype.createAnswer=function(){var _this5=this,_arguments3=arguments;return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then((function(){return origCreateAnswer.apply(_this5,_arguments3)})).finally((function(){_this5.setParametersPromises=[]})):origCreateAnswer.apply(this,arguments)}};var utils=function(obj){if(obj&&obj.__esModule)return obj;var newObj={};if(null!=obj)for(var key in obj)Object.prototype.hasOwnProperty.call(obj,key)&&(newObj[key]=obj[key]);return newObj.default=obj,newObj}(require("../utils"))},{"../utils":25,"./getdisplaymedia":22,"./getusermedia":23}],22:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.shimGetDisplayMedia=function(window,preferredMediaSource){if(window.navigator.mediaDevices&&"getDisplayMedia"in window.navigator.mediaDevices)return;if(!window.navigator.mediaDevices)return;window.navigator.mediaDevices.getDisplayMedia=function(constraints){if(!constraints||!constraints.video){var err=new DOMException("getDisplayMedia without video constraints is undefined");return err.name="NotFoundError",err.code=8,Promise.reject(err)}return!0===constraints.video?constraints.video={mediaSource:preferredMediaSource}:constraints.video.mediaSource=preferredMediaSource,window.navigator.mediaDevices.getUserMedia(constraints)}}},{}],23:[function(require,module,exports){"use strict";function _typeof2(obj){return(_typeof2="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}Object.defineProperty(exports,"__esModule",{value:!0});var _typeof="function"==typeof Symbol&&"symbol"===_typeof2(Symbol.iterator)?function(obj){return _typeof2(obj)}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":_typeof2(obj)};exports.shimGetUserMedia=function(window,browserDetails){var navigator=window&&window.navigator,MediaStreamTrack=window&&window.MediaStreamTrack;if(navigator.getUserMedia=function(constraints,onSuccess,onError){utils.deprecated("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),navigator.mediaDevices.getUserMedia(constraints).then(onSuccess,onError)},!(browserDetails.version>55&&"autoGainControl"in navigator.mediaDevices.getSupportedConstraints())){var remap=function(obj,a,b){a in obj&&!(b in obj)&&(obj[b]=obj[a],delete obj[a])},nativeGetUserMedia=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);if(navigator.mediaDevices.getUserMedia=function(c){return"object"===("undefined"==typeof c?"undefined":_typeof(c))&&"object"===_typeof(c.audio)&&(c=JSON.parse(JSON.stringify(c)),remap(c.audio,"autoGainControl","mozAutoGainControl"),remap(c.audio,"noiseSuppression","mozNoiseSuppression")),nativeGetUserMedia(c)},MediaStreamTrack&&MediaStreamTrack.prototype.getSettings){var nativeGetSettings=MediaStreamTrack.prototype.getSettings;MediaStreamTrack.prototype.getSettings=function(){var obj=nativeGetSettings.apply(this,arguments);return remap(obj,"mozAutoGainControl","autoGainControl"),remap(obj,"mozNoiseSuppression","noiseSuppression"),obj}}if(MediaStreamTrack&&MediaStreamTrack.prototype.applyConstraints){var nativeApplyConstraints=MediaStreamTrack.prototype.applyConstraints;MediaStreamTrack.prototype.applyConstraints=function(c){return"audio"===this.kind&&"object"===("undefined"==typeof c?"undefined":_typeof(c))&&(c=JSON.parse(JSON.stringify(c)),remap(c,"autoGainControl","mozAutoGainControl"),remap(c,"noiseSuppression","mozNoiseSuppression")),nativeApplyConstraints.apply(this,[c])}}}};var utils=function(obj){if(obj&&obj.__esModule)return obj;var newObj={};if(null!=obj)for(var key in obj)Object.prototype.hasOwnProperty.call(obj,key)&&(newObj[key]=obj[key]);return newObj.default=obj,newObj}(require("../utils"))},{"../utils":25}],24:[function(require,module,exports){"use strict";function _typeof2(obj){return(_typeof2="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}Object.defineProperty(exports,"__esModule",{value:!0});var _typeof="function"==typeof Symbol&&"symbol"===_typeof2(Symbol.iterator)?function(obj){return _typeof2(obj)}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":_typeof2(obj)};exports.shimLocalStreamsAPI=function(window){if("object"!==("undefined"==typeof window?"undefined":_typeof(window))||!window.RTCPeerConnection)return;"getLocalStreams"in window.RTCPeerConnection.prototype||(window.RTCPeerConnection.prototype.getLocalStreams=function(){return this._localStreams||(this._localStreams=[]),this._localStreams});if(!("addStream"in window.RTCPeerConnection.prototype)){var _addTrack=window.RTCPeerConnection.prototype.addTrack;window.RTCPeerConnection.prototype.addStream=function(stream){var _this=this;this._localStreams||(this._localStreams=[]),this._localStreams.includes(stream)||this._localStreams.push(stream),stream.getAudioTracks().forEach((function(track){return _addTrack.call(_this,track,stream)})),stream.getVideoTracks().forEach((function(track){return _addTrack.call(_this,track,stream)}))},window.RTCPeerConnection.prototype.addTrack=function(track){for(var _this2=this,_len=arguments.length,streams=Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)streams[_key-1]=arguments[_key];return streams&&streams.forEach((function(stream){_this2._localStreams?_this2._localStreams.includes(stream)||_this2._localStreams.push(stream):_this2._localStreams=[stream]})),_addTrack.apply(this,arguments)}}"removeStream"in window.RTCPeerConnection.prototype||(window.RTCPeerConnection.prototype.removeStream=function(stream){var _this3=this;this._localStreams||(this._localStreams=[]);var index=this._localStreams.indexOf(stream);if(-1!==index){this._localStreams.splice(index,1);var tracks=stream.getTracks();this.getSenders().forEach((function(sender){tracks.includes(sender.track)&&_this3.removeTrack(sender)}))}})},exports.shimRemoteStreamsAPI=function(window){if("object"!==("undefined"==typeof window?"undefined":_typeof(window))||!window.RTCPeerConnection)return;"getRemoteStreams"in window.RTCPeerConnection.prototype||(window.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]});if(!("onaddstream"in window.RTCPeerConnection.prototype)){Object.defineProperty(window.RTCPeerConnection.prototype,"onaddstream",{get:function(){return this._onaddstream},set:function(f){var _this4=this;this._onaddstream&&(this.removeEventListener("addstream",this._onaddstream),this.removeEventListener("track",this._onaddstreampoly)),this.addEventListener("addstream",this._onaddstream=f),this.addEventListener("track",this._onaddstreampoly=function(e){e.streams.forEach((function(stream){if(_this4._remoteStreams||(_this4._remoteStreams=[]),!_this4._remoteStreams.includes(stream)){_this4._remoteStreams.push(stream);var event=new Event("addstream");event.stream=stream,_this4.dispatchEvent(event)}}))})}});var origSetRemoteDescription=window.RTCPeerConnection.prototype.setRemoteDescription;window.RTCPeerConnection.prototype.setRemoteDescription=function(){var pc=this;return this._onaddstreampoly||this.addEventListener("track",this._onaddstreampoly=function(e){e.streams.forEach((function(stream){if(pc._remoteStreams||(pc._remoteStreams=[]),!(pc._remoteStreams.indexOf(stream)>=0)){pc._remoteStreams.push(stream);var event=new Event("addstream");event.stream=stream,pc.dispatchEvent(event)}}))}),origSetRemoteDescription.apply(pc,arguments)}}},exports.shimCallbacksAPI=function(window){if("object"!==("undefined"==typeof window?"undefined":_typeof(window))||!window.RTCPeerConnection)return;var prototype=window.RTCPeerConnection.prototype,origCreateOffer=prototype.createOffer,origCreateAnswer=prototype.createAnswer,setLocalDescription=prototype.setLocalDescription,setRemoteDescription=prototype.setRemoteDescription,addIceCandidate=prototype.addIceCandidate;prototype.createOffer=function(successCallback,failureCallback){var options=arguments.length>=2?arguments[2]:arguments[0],promise=origCreateOffer.apply(this,[options]);return failureCallback?(promise.then(successCallback,failureCallback),Promise.resolve()):promise},prototype.createAnswer=function(successCallback,failureCallback){var options=arguments.length>=2?arguments[2]:arguments[0],promise=origCreateAnswer.apply(this,[options]);return failureCallback?(promise.then(successCallback,failureCallback),Promise.resolve()):promise};var withCallback=function(description,successCallback,failureCallback){var promise=setLocalDescription.apply(this,[description]);return failureCallback?(promise.then(successCallback,failureCallback),Promise.resolve()):promise};prototype.setLocalDescription=withCallback,withCallback=function(description,successCallback,failureCallback){var promise=setRemoteDescription.apply(this,[description]);return failureCallback?(promise.then(successCallback,failureCallback),Promise.resolve()):promise},prototype.setRemoteDescription=withCallback,withCallback=function(candidate,successCallback,failureCallback){var promise=addIceCandidate.apply(this,[candidate]);return failureCallback?(promise.then(successCallback,failureCallback),Promise.resolve()):promise},prototype.addIceCandidate=withCallback},exports.shimGetUserMedia=function(window){var navigator=window&&window.navigator;if(navigator.mediaDevices&&navigator.mediaDevices.getUserMedia){var mediaDevices=navigator.mediaDevices,_getUserMedia=mediaDevices.getUserMedia.bind(mediaDevices);navigator.mediaDevices.getUserMedia=function(constraints){return _getUserMedia(shimConstraints(constraints))}}!navigator.getUserMedia&&navigator.mediaDevices&&navigator.mediaDevices.getUserMedia&&(navigator.getUserMedia=function(constraints,cb,errcb){navigator.mediaDevices.getUserMedia(constraints).then(cb,errcb)}.bind(navigator))},exports.shimConstraints=shimConstraints,exports.shimRTCIceServerUrls=function(window){if(!window.RTCPeerConnection)return;var OrigPeerConnection=window.RTCPeerConnection;window.RTCPeerConnection=function(pcConfig,pcConstraints){if(pcConfig&&pcConfig.iceServers){for(var newIceServers=[],i=0;i<pcConfig.iceServers.length;i++){var server=pcConfig.iceServers[i];!server.hasOwnProperty("urls")&&server.hasOwnProperty("url")?(utils.deprecated("RTCIceServer.url","RTCIceServer.urls"),(server=JSON.parse(JSON.stringify(server))).urls=server.url,delete server.url,newIceServers.push(server)):newIceServers.push(pcConfig.iceServers[i])}pcConfig.iceServers=newIceServers}return new OrigPeerConnection(pcConfig,pcConstraints)},window.RTCPeerConnection.prototype=OrigPeerConnection.prototype,"generateCertificate"in OrigPeerConnection&&Object.defineProperty(window.RTCPeerConnection,"generateCertificate",{get:function(){return OrigPeerConnection.generateCertificate}})},exports.shimTrackEventTransceiver=function(window){"object"===("undefined"==typeof window?"undefined":_typeof(window))&&window.RTCTrackEvent&&"receiver"in window.RTCTrackEvent.prototype&&!("transceiver"in window.RTCTrackEvent.prototype)&&Object.defineProperty(window.RTCTrackEvent.prototype,"transceiver",{get:function(){return{receiver:this.receiver}}})},exports.shimCreateOfferLegacy=function(window){var origCreateOffer=window.RTCPeerConnection.prototype.createOffer;window.RTCPeerConnection.prototype.createOffer=function(offerOptions){if(offerOptions){"undefined"!=typeof offerOptions.offerToReceiveAudio&&(offerOptions.offerToReceiveAudio=!!offerOptions.offerToReceiveAudio);var audioTransceiver=this.getTransceivers().find((function(transceiver){return"audio"===transceiver.receiver.track.kind}));!1===offerOptions.offerToReceiveAudio&&audioTransceiver?"sendrecv"===audioTransceiver.direction?audioTransceiver.setDirection?audioTransceiver.setDirection("sendonly"):audioTransceiver.direction="sendonly":"recvonly"===audioTransceiver.direction&&(audioTransceiver.setDirection?audioTransceiver.setDirection("inactive"):audioTransceiver.direction="inactive"):!0!==offerOptions.offerToReceiveAudio||audioTransceiver||this.addTransceiver("audio"),"undefined"!=typeof offerOptions.offerToReceiveVideo&&(offerOptions.offerToReceiveVideo=!!offerOptions.offerToReceiveVideo);var videoTransceiver=this.getTransceivers().find((function(transceiver){return"video"===transceiver.receiver.track.kind}));!1===offerOptions.offerToReceiveVideo&&videoTransceiver?"sendrecv"===videoTransceiver.direction?videoTransceiver.setDirection?videoTransceiver.setDirection("sendonly"):videoTransceiver.direction="sendonly":"recvonly"===videoTransceiver.direction&&(videoTransceiver.setDirection?videoTransceiver.setDirection("inactive"):videoTransceiver.direction="inactive"):!0!==offerOptions.offerToReceiveVideo||videoTransceiver||this.addTransceiver("video")}return origCreateOffer.apply(this,arguments)}},exports.shimAudioContext=function(window){if("object"!==("undefined"==typeof window?"undefined":_typeof(window))||window.AudioContext)return;window.AudioContext=window.webkitAudioContext};var utils=function(obj){if(obj&&obj.__esModule)return obj;var newObj={};if(null!=obj)for(var key in obj)Object.prototype.hasOwnProperty.call(obj,key)&&(newObj[key]=obj[key]);return newObj.default=obj,newObj}(require("../utils"));function shimConstraints(constraints){return constraints&&void 0!==constraints.video?Object.assign({},constraints,{video:utils.compactObject(constraints.video)}):constraints}},{"../utils":25}],25:[function(require,module,exports){"use strict";function _typeof2(obj){return(_typeof2="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}Object.defineProperty(exports,"__esModule",{value:!0});var _typeof="function"==typeof Symbol&&"symbol"===_typeof2(Symbol.iterator)?function(obj){return _typeof2(obj)}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":_typeof2(obj)};exports.extractVersion=extractVersion,exports.wrapPeerConnectionEvent=function(window,eventNameToWrap,wrapper){if(!window.RTCPeerConnection)return;var proto=window.RTCPeerConnection.prototype,nativeAddEventListener=proto.addEventListener;proto.addEventListener=function(nativeEventName,cb){if(nativeEventName!==eventNameToWrap)return nativeAddEventListener.apply(this,arguments);var wrappedCallback=function(e){var modifiedEvent=wrapper(e);modifiedEvent&&(cb.handleEvent?cb.handleEvent(modifiedEvent):cb(modifiedEvent))};return this._eventMap=this._eventMap||{},this._eventMap[eventNameToWrap]||(this._eventMap[eventNameToWrap]=new Map),this._eventMap[eventNameToWrap].set(cb,wrappedCallback),nativeAddEventListener.apply(this,[nativeEventName,wrappedCallback])};var nativeRemoveEventListener=proto.removeEventListener;proto.removeEventListener=function(nativeEventName,cb){if(nativeEventName!==eventNameToWrap||!this._eventMap||!this._eventMap[eventNameToWrap])return nativeRemoveEventListener.apply(this,arguments);if(!this._eventMap[eventNameToWrap].has(cb))return nativeRemoveEventListener.apply(this,arguments);var unwrappedCb=this._eventMap[eventNameToWrap].get(cb);return this._eventMap[eventNameToWrap].delete(cb),0===this._eventMap[eventNameToWrap].size&&delete this._eventMap[eventNameToWrap],0===Object.keys(this._eventMap).length&&delete this._eventMap,nativeRemoveEventListener.apply(this,[nativeEventName,unwrappedCb])},Object.defineProperty(proto,"on"+eventNameToWrap,{get:function(){return this["_on"+eventNameToWrap]},set:function(cb){this["_on"+eventNameToWrap]&&(this.removeEventListener(eventNameToWrap,this["_on"+eventNameToWrap]),delete this["_on"+eventNameToWrap]),cb&&this.addEventListener(eventNameToWrap,this["_on"+eventNameToWrap]=cb)},enumerable:!0,configurable:!0})},exports.disableLog=function(bool){if("boolean"!=typeof bool)return new Error("Argument type: "+("undefined"==typeof bool?"undefined":_typeof(bool))+". Please use a boolean.");return logDisabled_=bool,bool?"adapter.js logging disabled":"adapter.js logging enabled"},exports.disableWarnings=function(bool){if("boolean"!=typeof bool)return new Error("Argument type: "+("undefined"==typeof bool?"undefined":_typeof(bool))+". Please use a boolean.");return deprecationWarnings_=!bool,"adapter.js deprecation warnings "+(bool?"disabled":"enabled")},exports.log=function(){if("object"===("undefined"==typeof window?"undefined":_typeof(window))){if(logDisabled_)return;"undefined"!=typeof console&&"function"==typeof console.log&&console.log.apply(console,arguments)}},exports.deprecated=function(oldMethod,newMethod){if(!deprecationWarnings_)return;console.warn(oldMethod+" is deprecated, please use "+newMethod+" instead.")},exports.detectBrowser=function(window){var result={browser:null,version:null};if("undefined"==typeof window||!window.navigator)return result.browser="Not a browser.",result;var navigator=window.navigator;if(navigator.mozGetUserMedia)result.browser="firefox",result.version=extractVersion(navigator.userAgent,/Firefox\/(\d+)\./,1);else if(navigator.webkitGetUserMedia||!1===window.isSecureContext&&window.webkitRTCPeerConnection&&!window.RTCIceGatherer)result.browser="chrome",result.version=extractVersion(navigator.userAgent,/Chrom(e|ium)\/(\d+)\./,2);else if(navigator.mediaDevices&&navigator.userAgent.match(/Edge\/(\d+).(\d+)$/))result.browser="edge",result.version=extractVersion(navigator.userAgent,/Edge\/(\d+).(\d+)$/,2);else{if(!window.RTCPeerConnection||!navigator.userAgent.match(/AppleWebKit\/(\d+)\./))return result.browser="Not a supported browser.",result;result.browser="safari",result.version=extractVersion(navigator.userAgent,/AppleWebKit\/(\d+)\./,1),result.supportsUnifiedPlan=window.RTCRtpTransceiver&&"currentDirection"in window.RTCRtpTransceiver.prototype}return result},exports.compactObject=function compactObject(data){if(!isObject(data))return data;return Object.keys(data).reduce((function(accumulator,key){var isObj=isObject(data[key]),value=isObj?compactObject(data[key]):data[key],isEmptyObject=isObj&&!Object.keys(value).length;return void 0===value||isEmptyObject?accumulator:Object.assign(accumulator,function(obj,key,value){key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value;return obj}({},key,value))}),{})},exports.walkStats=walkStats,exports.filterStats=function(result,track,outbound){var streamStatsType=outbound?"outbound-rtp":"inbound-rtp",filteredResult=new Map;if(null===track)return filteredResult;var trackStats=[];return result.forEach((function(value){"track"===value.type&&value.trackIdentifier===track.id&&trackStats.push(value)})),trackStats.forEach((function(trackStat){result.forEach((function(stats){stats.type===streamStatsType&&stats.trackId===trackStat.id&&walkStats(result,stats,filteredResult)}))})),filteredResult};var logDisabled_=!0,deprecationWarnings_=!0;function extractVersion(uastring,expr,pos){var match=uastring.match(expr);return match&&match.length>=pos&&parseInt(match[pos],10)}function isObject(val){return"[object Object]"===Object.prototype.toString.call(val)}function walkStats(stats,base,resultSet){base&&!resultSet.has(base.id)&&(resultSet.set(base.id,base),Object.keys(base).forEach((function(name){name.endsWith("Id")?walkStats(stats,stats.get(base[name]),resultSet):name.endsWith("Ids")&&base[name].forEach((function(id){walkStats(stats,stats.get(id),resultSet)}))})))}},{}],26:[function(require,module,exports){"use strict";var sessionStatus={};define(sessionStatus,"CONNECTED","CONNECTED"),define(sessionStatus,"ESTABLISHED","ESTABLISHED"),define(sessionStatus,"DISCONNECTED","DISCONNECTED"),define(sessionStatus,"WARN","WARN"),define(sessionStatus,"FAILED","FAILED"),define(sessionStatus,"DEBUG","DEBUG"),define(sessionStatus,"APP_DATA","APP_DATA"),define(sessionStatus,"SEND_DATA_STATUS","SEND_DATA_STATUS"),define(sessionStatus,"PENDING","PENDING"),define(sessionStatus,"REGISTERED","REGISTERED"),define(sessionStatus,"UNREGISTERED","UNREGISTERED"),define(sessionStatus,"INCOMING_CALL","INCOMING_CALL");var streamStatus={};define(streamStatus,"NEW","NEW"),define(streamStatus,"PENDING","PENDING"),define(streamStatus,"PUBLISHING","PUBLISHING"),define(streamStatus,"PLAYING","PLAYING"),define(streamStatus,"PAUSED","PAUSED"),define(streamStatus,"UNPUBLISHED","UNPUBLISHED"),define(streamStatus,"STOPPED","STOPPED"),define(streamStatus,"FAILED","FAILED"),define(streamStatus,"PLAYBACK_PROBLEM","PLAYBACK_PROBLEM"),define(streamStatus,"RESIZE","RESIZE"),define(streamStatus,"SNAPSHOT_COMPLETE","SNAPSHOT_COMPLETE"),define(streamStatus,"NOT_ENOUGH_BANDWIDTH","NOT_ENOUGH_BANDWIDTH");var callStatus={};define(callStatus,"NEW","NEW"),define(callStatus,"RING","RING"),define(callStatus,"RING_MEDIA","RING_MEDIA"),define(callStatus,"HOLD","HOLD"),define(callStatus,"ESTABLISHED","ESTABLISHED"),define(callStatus,"FINISH","FINISH"),define(callStatus,"BUSY","BUSY"),define(callStatus,"SESSION_PROGRESS","SESSION_PROGRESS"),define(callStatus,"FAILED","FAILED"),define(callStatus,"PENDING","PENDING"),define(callStatus,"TRYING","TRYING");var streamStatusInfo={};define(streamStatusInfo,"FAILED_BY_ICE_ERROR","Failed by ICE error"),define(streamStatusInfo,"FAILED_BY_ICE_TIMEOUT","Failed by ICE timeout"),define(streamStatusInfo,"FAILED_BY_KEEP_ALIVE","Failed by ICE keep alive"),define(streamStatusInfo,"FAILED_BY_DTLS_FINGERPRINT_ERROR","Failed by DTLS fingerprint error"),define(streamStatusInfo,"FAILED_BY_DTLS_ERROR","Failed by DTLS error"),define(streamStatusInfo,"FAILED_BY_HLS_WRITER_ERROR","Failed by HLS writer error"),define(streamStatusInfo,"FAILED_BY_RTMP_WRITER_ERROR","Failed by RTMP writer error"),define(streamStatusInfo,"FAILED_BY_RTP_ACTIVITY","Failed by RTP activity"),define(streamStatusInfo,"STOPPED_BY_SESSION_DISCONNECT","Stopped by session disconnect"),define(streamStatusInfo,"STOPPED_BY_REST_TERMINATE","Stopped by rest /terminate"),define(streamStatusInfo,"STOPPED_BY_PUBLISHER_STOP","Stopped by publisher stop"),define(streamStatusInfo,"STOPPED_BY_USER","Stopped by user"),define(streamStatusInfo,"FAILED_BY_ERROR","Failed by error"),define(streamStatusInfo,"FAILED_TO_ADD_STREAM_TO_PROXY","Failed to add stream to proxy"),define(streamStatusInfo,"DISTRIBUTOR_STOPPED","Distributor stopped"),define(streamStatusInfo,"PUBLISH_STREAM_IS_NOT_READY","Publish stream is not ready"),define(streamStatusInfo,"STREAM_NOT_FOUND","Stream not found"),define(streamStatusInfo,"STREAM_NAME_ALREADY_IN_USE","Stream name is already in use"),define(streamStatusInfo,"MEDIASESSION_ID_NULL","MediaSessionId is null"),define(streamStatusInfo,"MEDIASESSION_ID_ALREADY_IN_USE","MediaSessionId is already in use"),define(streamStatusInfo,"SESSION_NOT_READY","Session not ready"),define(streamStatusInfo,"SESSION_DOES_NOT_EXIST","Session does not exist"),define(streamStatusInfo,"RTSP_HAS_WRONG_FORMAT","Rtsp has wrong format"),define(streamStatusInfo,"FILE_HAS_WRONG_FORMAT","File has wrong format"),define(streamStatusInfo,"FAILED_TO_CONNECT_TO_RTSP_STREAM","Failed to connect to rtsp stream"),define(streamStatusInfo,"RTSP_STREAM_NOT_FOUND","Rtsp stream not found"),define(streamStatusInfo,"RTSPAGENT_SHUTDOWN","RtspAgent shutdown"),define(streamStatusInfo,"STREAM_FAILED","Stream failed"),define(streamStatusInfo,"NO_COMMON_CODECS","No common codecs"),define(streamStatusInfo,"BAD_URI","Bad URI"),define(streamStatusInfo,"GOT_EXCEPTION_WHILE_STREAMING_FILE","Got exception while streaming file"),define(streamStatusInfo,"REQUESTED_STREAM_SHUTDOWN","Requested stream shutdown"),define(streamStatusInfo,"FAILED_TO_READ_FILE","Failed to read file"),define(streamStatusInfo,"FILE_NOT_FOUND","File not found"),define(streamStatusInfo,"FAILED_TO_CONNECT_TO_ORIGIN_STREAM","Failed to connect to origin stream"),define(streamStatusInfo,"CDN_STREAM_NOT_FOUND","CDN stream not found"),define(streamStatusInfo,"FAILED_TO_GET_AGENT_STORAGE","Failed to get agent storage"),define(streamStatusInfo,"AGENT_SERVICING_ORIGIN_STREAM_IS_SHUTTING_DOWN","Agent servicing origin stream is shutting down"),define(streamStatusInfo,"TERMINATED_BY_KEEP_ALIVE","Terminated by keep-alive"),define(streamStatusInfo,"TRANSCODING_REQUIRED_BUT_DISABLED","Transcoding required, but disabled"),define(streamStatusInfo,"RESTRICTED_ACCESS","Restricted access"),define(streamStatusInfo,"NO_AVAILABLE_TRANSCODERS","No available transcoders");var callStatusInfo={};define(callStatusInfo,"NORMAL_CALL_CLEARING","Normal call clearing"),define(callStatusInfo,"FAILED_BY_SESSION_CREATION","Failed by session creation"),define(callStatusInfo,"FAILED_BY_ICE_ERROR","Failed by ICE error"),define(callStatusInfo,"FAILED_BY_RTP_ACTIVITY","Failed by RTP activity"),define(callStatusInfo,"FAILED_BY_RTMP_WRITER_ERROR","Failed by RTMP writer error"),define(callStatusInfo,"FAILED_BY_DTLS_FINGERPRINT_ERROR","Failed by DTLS fingerprint error"),define(callStatusInfo,"NO_COMMON_CODECS","No common codecs"),define(callStatusInfo,"FAILED_BY_DTLS_ERROR","Failed by DTLS error"),define(callStatusInfo,"FAILED_BY_ERROR","Failed by error"),define(callStatusInfo,"FAILED_BY_REQUEST_TIMEOUT","Failed by request timeout"),define(callStatusInfo,"TRANSCODING_REQUIRED_BUT_DISABLED","Transcoding required, but disabled");var errorInfo={};define(errorInfo,"NONE_OF_MEDIAPROVIDERS_AVAILABLE","None of MediaProviders available"),define(errorInfo,"NONE_OF_PREFERRED_MEDIAPROVIDERS_AVAILABLE","None of preferred MediaProviders available"),define(errorInfo,"FLASHPHONER_API_NOT_INITIALIZED","Flashphoner API is not initialized"),define(errorInfo,"OPTIONS_URLSERVER_MUST_BE_PROVIDED","options.urlServer must be provided"),define(errorInfo,"INVALID_SESSION_STATE","Invalid session state"),define(errorInfo,"OPTIONS_MUST_BE_PROVIDED","options must be provided"),define(errorInfo,"INVALID_CALL_STATE","Invalid call state"),define(errorInfo,"EVENT_CANT_BE_NULL","Event can't be null"),define(errorInfo,"CALLBACK_NEEDS_TO_BE_A_VALID_FUNCTION","Callback needs to be a valid function"),define(errorInfo,"INVALID_SESSION_STATE","Invalid session state"),define(errorInfo,"OPTIONS_NAME_MUST_BE_PROVIDED","options.name must be provided"),define(errorInfo,"CAN_NOT_SWITCH_CAM","Number of cams is less than 2 or already used custom stream"),define(errorInfo,"CAN_NOT_SWITCH_MIC","Number of mics is less than 2 or already used custom stream"),define(errorInfo,"LOCAL_ERROR","Local error");var mediaDeviceKind={};define(mediaDeviceKind,"OUTPUT","output"),define(mediaDeviceKind,"INPUT","input"),define(mediaDeviceKind,"ALL","all");var transportType={};define(transportType,"UDP","UDP"),define(transportType,"TCP","TCP");var connectionQuality={};define(connectionQuality,"PERFECT","PERFECT"),define(connectionQuality,"GOOD","GOOD"),define(connectionQuality,"BAD","BAD"),define(connectionQuality,"UNKNOWN","UNKNOWN"),define(connectionQuality,"UPDATE","UPDATE");var streamEventType={};define(streamEventType,"AUDIO_MUTED","audioMuted"),define(streamEventType,"AUDIO_UNMUTED","audioUnmuted"),define(streamEventType,"VIDEO_MUTED","videoMuted"),define(streamEventType,"VIDEO_UNMUTED","videoUnmuted"),define(streamEventType,"DATA","data");var constants={};function define(obj,name,value){Object.defineProperty(obj,name,{value:value,enumerable:!0})}define(constants,"SESSION_STATUS",sessionStatus),define(constants,"STREAM_EVENT_TYPE",streamEventType),define(constants,"STREAM_EVENT","STREAM_EVENT"),define(constants,"STREAM_STATUS",streamStatus),define(constants,"CALL_STATUS",callStatus),define(constants,"STREAM_STATUS_INFO",streamStatusInfo),define(constants,"CALL_STATUS_INFO",callStatusInfo),define(constants,"ERROR_INFO",errorInfo),define(constants,"MEDIA_DEVICE_KIND",mediaDeviceKind),define(constants,"TRANSPORT_TYPE",transportType),define(constants,"CONNECTION_QUALITY",connectionQuality),module.exports=constants},{}],27:[function(require,module,exports){"use strict";function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}var disableConnectionQualityCalculation,uuid_v1=require("uuid/v1"),constants=require("./constants"),util=require("./util"),logger=require("./util").logger,loggerConf={push:!1,severity:"INFO"},Promise=require("promise-polyfill"),KalmanFilter=require("kalmanjs"),browserDetails=require("webrtc-adapter").default.browserDetails,isUsingTemasysPlugin=!1,SESSION_STATUS=constants.SESSION_STATUS,STREAM_EVENT=constants.STREAM_EVENT,STREAM_EVENT_TYPE=constants.STREAM_EVENT_TYPE,STREAM_STATUS=constants.STREAM_STATUS,CALL_STATUS=constants.CALL_STATUS,CONNECTION_QUALITY=(constants.TRANSPORT_TYPE,constants.CONNECTION_QUALITY),ERROR_INFO=constants.ERROR_INFO,MediaProvider={},sessions={},initialized=!1,getMediaProviders=function(){return Object.keys(MediaProvider)},getDefaultMediaConstraints=function(){return"safari"==browserDetails.browser?{audio:!0,video:{width:{min:320,max:640},height:{min:180,max:360}}}:{audio:!0,video:{width:320,height:240}}};function getConstraintsProperty(constraints,property,defaultValue){if(!constraints||!property)return defaultValue;var res,properties=property.split(".");for(var prop in constraints)if(prop==properties[0])res=constraints[prop],properties.length>1&&(res=getConstraintsProperty(constraints[prop],properties[1],defaultValue));else if("object"===_typeof(constraints[prop]))for(var p in constraints[prop])p==property&&(res=constraints[prop][p]);return"boolean"==typeof res?res:res||defaultValue}var releaseLocalMedia=function(display,mediaProvider){if(!initialized)throw new Error("Flashphoner API is not initialized");return mediaProvider||(mediaProvider=getMediaProviders()[0]),MediaProvider[mediaProvider].releaseMedia(display)};module.exports={init:function(options){if(!initialized){options||(options={}),loggerConf=options.logger||loggerConf,null!==options.logger&&(loggerConf.enableLogs=!0),logger.init(loggerConf.severity||"INFO",loggerConf.push||!1,loggerConf.customLogger,loggerConf.enableLogs);var waitingTemasys=!1;try{var audioContext=new(window.AudioContext||window.webkitAudioContext)}catch(e){console.warn("Failed to create audio context")}disableConnectionQualityCalculation=options.disableConnectionQualityCalculation;var webRtcProvider=require("./webrtc-media-provider");if(webRtcProvider&&webRtcProvider.hasOwnProperty("available")&&webRtcProvider.available()){MediaProvider.WebRTC=webRtcProvider;var enableGainNode=!util.Browser.isSamsungBrowser()&&!util.Browser.isAndroidFirefox()&&options.createMicGainNode,webRtcConf={constraints:options.constraints||getDefaultMediaConstraints(),extensionId:options.screenSharingExtensionId,audioContext:audioContext,logger:logger,createMicGainNode:enableGainNode};webRtcProvider.configure(webRtcConf)}else(webRtcProvider=require("./temasys-media-provider"))&&webRtcProvider.hasOwnProperty("available")&&AdapterJS&&(waitingTemasys=!0,AdapterJS.webRTCReady((function(isUsingPlugin){if(isUsingTemasysPlugin=isUsingPlugin,isUsingPlugin||webRtcProvider.available()){MediaProvider.WebRTC=webRtcProvider;var webRtcConf={constraints:options.constraints||getDefaultMediaConstraints(),extensionId:options.screenSharingExtensionId,logger:logger};webRtcProvider.configure(webRtcConf);var _MediaProvider={};for(var p in _MediaProvider.WebRTC=MediaProvider.WebRTC,MediaProvider)_MediaProvider[p]=MediaProvider[p];MediaProvider=_MediaProvider}options.mediaProvidersReadyCallback&&options.mediaProvidersReadyCallback(Object.keys(MediaProvider))})));var flashProvider=require("./flash-media-provider");if(flashProvider&&flashProvider.hasOwnProperty("available")&&flashProvider.available()&&(!MediaProvider.WebRTC||options.preferredMediaProviders&&options.preferredMediaProviders.indexOf("Flash")>=0)){MediaProvider.Flash=flashProvider;var flashConf={constraints:options.constraints||getDefaultMediaConstraints(),flashMediaProviderSwfLocation:options.flashMediaProviderSwfLocation,logger:logger};flashProvider.configure(flashConf)}var mediaSourceMediaProvider=require("./media-source-media-provider");if(mediaSourceMediaProvider&&mediaSourceMediaProvider.hasOwnProperty("available")&&mediaSourceMediaProvider.available()){MediaProvider.MSE=mediaSourceMediaProvider;var mseConf={audioContext:audioContext,browserDetails:browserDetails.browser};mediaSourceMediaProvider.configure(mseConf)}var websocketProvider=require("./websocket-media-provider");if(websocketProvider&&websocketProvider.hasOwnProperty("available")&&websocketProvider.available(audioContext)){MediaProvider.WSPlayer=websocketProvider;var wsConf={receiverLocation:options.receiverLocation,decoderLocation:options.decoderLocation,audioContext:audioContext,logger:logger};websocketProvider.configure(wsConf)}if(0==getMediaProviders().length)throw new Error("None of MediaProviders available");if(options.preferredMediaProvider)if(MediaProvider.hasOwnProperty(options.preferredMediaProvider)){if(getMediaProviders()[0]!=options.preferredMediaProvider){var _MediaProvider={};for(var p in _MediaProvider[options.preferredMediaProvider]=MediaProvider[options.preferredMediaProvider],MediaProvider)_MediaProvider[p]=MediaProvider[p];MediaProvider=_MediaProvider}}else logger.warn("core","Preferred media provider is not available.");if(options.preferredMediaProviders&&options.preferredMediaProviders.length>0){var newMediaProvider={};for(var i in options.preferredMediaProviders)if(options.preferredMediaProviders.hasOwnProperty(i)){var pMP=options.preferredMediaProviders[i];MediaProvider.hasOwnProperty(pMP)&&(newMediaProvider[pMP]=MediaProvider[pMP])}if(util.isEmptyObject(newMediaProvider))throw new Error("None of preferred MediaProviders available");MediaProvider=newMediaProvider}!waitingTemasys&&options.mediaProvidersReadyCallback&&options.mediaProvidersReadyCallback(Object.keys(MediaProvider)),logger.info("core","Initialized"),initialized=!0}},isUsingTemasys:function(){return isUsingTemasysPlugin},getMediaProviders:getMediaProviders,getMediaDevices:function(mediaProvider,labels,kind,deviceConstraints){if(!initialized)throw new Error("Flashphoner API is not initialized");return mediaProvider||(mediaProvider=getMediaProviders()[0]),MediaProvider[mediaProvider].listDevices(labels,kind,deviceConstraints)},getMediaAccess:function(constraints,display,mediaProvider,disableConstraintsNormalization){if(!initialized)throw new Error("Flashphoner API is not initialized");return mediaProvider||(mediaProvider=getMediaProviders()[0]),MediaProvider[mediaProvider].getMediaAccess(constraints,display,disableConstraintsNormalization)},releaseLocalMedia:releaseLocalMedia,getSessions:function(){return util.copyObjectToArray(sessions)},getSession:function(id){return sessions[id]},createSession:function(options){if(!initialized)throw new Error("Flashphoner API is not initialized");if(!options||!options.urlServer)throw new TypeError("options.urlServer must be provided");var connectionTimeout,cConfig,sipConfig,id_=uuid_v1(),sessionStatus=SESSION_STATUS.PENDING,urlServer=options.urlServer,lbUrl=options.lbUrl,flashProto=options.flashProto||"rtmfp",flashPort=options.flashPort||1935,appKey=options.appKey||"defaultApp",mediaOptions=options.mediaOptions,keepAlive=options.keepAlive,timeout=options.timeout;options.sipOptions&&(sipConfig={sipLogin:options.sipOptions.login,sipAuthenticationName:options.sipOptions.authenticationName,sipPassword:options.sipOptions.password,sipDomain:options.sipOptions.domain,sipOutboundProxy:options.sipOptions.outboundProxy,sipProxy:options.sipOptions.proxy,sipPort:options.sipOptions.port,sipRegisterRequired:options.sipOptions.registerRequired});var wsConnection,url,request,authToken=options.authToken,streams={},calls={},mediaConnections={},streamEventRefreshHandlers={},streamRefreshHandlers={},callRefreshHandlers={},session={},callbacks={};lbUrl?(url=lbUrl,(request=new XMLHttpRequest).open("GET",url,!0),request.timeout=5e3,request.ontimeout=function(){logger.warn("core","Timeout during geting url from balancer!"),createWS(urlServer)},request.error=function(){logger.warn("core","Error during geting url from balancer!"),createWS(urlServer)},request.onload=function(e){if(200==request.status&&4==request.readyState){var result=JSON.parse(request.responseText);urlServer=-1!==urlServer.indexOf("wss://")?"wss://"+result.server+":"+result.wss:"ws://"+result.server+":"+result.ws,flashPort=result.flash,logger.debug("core","Got url from load balancer "+result.server),createWS(urlServer)}},request.send()):createWS(urlServer);var remoteSdpCache={};function createWS(url){wsConnection=new WebSocket(url),null!=timeout&&timeout>0&&(connectionTimeout=setTimeout((function(){0==wsConnection.readyState&&(console.log("WS connection timeout"),wsConnection.close())}),timeout)),wsConnection.onerror=function(){onSessionStatusChange(SESSION_STATUS.FAILED)},wsConnection.onclose=function(){sessionStatus!==SESSION_STATUS.FAILED&&onSessionStatusChange(SESSION_STATUS.DISCONNECTED)},wsConnection.onopen=function(){onSessionStatusChange(SESSION_STATUS.CONNECTED),clearTimeout(connectionTimeout),cConfig={appKey:appKey,mediaProviders:Object.keys(MediaProvider),keepAlive:keepAlive,authToken:authToken,clientVersion:"2.0.170",clientOSVersion:window.navigator.appVersion,clientBrowserVersion:window.navigator.userAgent,msePacketizationVersion:2,custom:options.custom},sipConfig&&util.copyObjectPropsToAnotherObject(sipConfig,cConfig),send("connection",cConfig),logger.setConnection(wsConnection)},wsConnection.onmessage=function(event){var data={};if(event.data instanceof Blob)data.message="binaryData";else var obj=(data=JSON.parse(event.data)).data[0];switch(data.message){case"ping":send("pong",null);break;case"getUserData":authToken=obj.authToken,cConfig=obj,onSessionStatusChange(SESSION_STATUS.ESTABLISHED,obj);break;case"setRemoteSDP":var mediaSessionId=data.data[0],sdp=data.data[1];streamRefreshHandlers[mediaSessionId]?streamRefreshHandlers[mediaSessionId](null,sdp):callRefreshHandlers[mediaSessionId]?callRefreshHandlers[mediaSessionId](null,sdp):(remoteSdpCache[mediaSessionId]=sdp,logger.info("core","Media not found, id "+mediaSessionId));break;case"notifyVideoFormat":case"notifyStreamStatusEvent":streamRefreshHandlers[obj.mediaSessionId]&&streamRefreshHandlers[obj.mediaSessionId](obj);break;case"notifyStreamEvent":streamEventRefreshHandlers[obj.mediaSessionId]&&streamEventRefreshHandlers[obj.mediaSessionId](obj);break;case"DataStatusEvent":restAppCommunicator.resolveData(obj);break;case"OnDataEvent":callbacks[SESSION_STATUS.APP_DATA]&&callbacks[SESSION_STATUS.APP_DATA](obj);break;case"fail":obj.apiMethod&&"StreamStatusEvent"==obj.apiMethod&&streamRefreshHandlers[obj.id]&&streamRefreshHandlers[obj.id](obj),callbacks[SESSION_STATUS.WARN]&&callbacks[SESSION_STATUS.WARN](obj);break;case"registered":onSessionStatusChange(SESSION_STATUS.REGISTERED);break;case"notifyAudioCodec":mediaSessionId=data.data[0];var codec=data.data[1];callRefreshHandlers[mediaSessionId]&&callRefreshHandlers[mediaSessionId](null,null,codec);break;case"notifyTransferEvent":callRefreshHandlers[obj.callId](null,null,null,obj);break;case"notifyTryingResponse":case"hold":case"ring":case"talk":case"finish":callRefreshHandlers[obj.callId]&&callRefreshHandlers[obj.callId](obj);break;case"notifyIncomingCall":callRefreshHandlers[obj.callId]&&logger.error("core","Call already exists, id "+obj.callId),callbacks[SESSION_STATUS.INCOMING_CALL]&&callbacks[SESSION_STATUS.INCOMING_CALL](createCall(obj));break;case"notifySessionDebugEvent":logger.info("core","Session debug status "+obj.status),callbacks[SESSION_STATUS.DEBUG]&&callbacks[SESSION_STATUS.DEBUG](obj);break;case"availableStream":var availableStream={};availableStream.mediaSessionId=obj.id,availableStream.available=obj.status,availableStream.reason=obj.info,streamRefreshHandlers[availableStream.mediaSessionId]&&streamRefreshHandlers[availableStream.mediaSessionId](availableStream);break;case"outboundVideoRate":case"inboundVideoRate":streamRefreshHandlers[obj.mediaSessionId]&&(obj.status=data.message,streamRefreshHandlers[obj.mediaSessionId](obj))}}}function send(message,data){wsConnection.send(JSON.stringify({message:message,data:[data]}))}function onSessionStatusChange(newStatus,obj){if((sessionStatus=newStatus)==SESSION_STATUS.DISCONNECTED||sessionStatus==SESSION_STATUS.FAILED){for(var prop in streamRefreshHandlers)streamRefreshHandlers.hasOwnProperty(prop)&&"function"==typeof streamRefreshHandlers[prop]&&streamRefreshHandlers[prop]({status:STREAM_STATUS.FAILED});delete sessions[id_]}callbacks[sessionStatus]&&callbacks[sessionStatus](session,obj)}var createCall=function(options){if(sessionStatus!==SESSION_STATUS.REGISTERED&&sessionStatus!==SESSION_STATUS.ESTABLISHED)throw logger.info("core","Status is "+sessionStatus),new Error("Invalid session state");if(!options)throw new TypeError("options must be provided");var mediaConnection,info_,errorInfo_,audioOutputId,login="clickToCallApp"==appKey?"":cConfig.sipLogin,caller_=options.incoming?options.caller:login,callee_=options.callee,visibleName_=options.visibleName||login,id_=options.callId||uuid_v1(),mediaProvider=options.mediaProvider||getMediaProviders()[0],localDisplay=options.localVideoDisplay,remoteDisplay=options.remoteVideoDisplay;if(options.constraints)var constraints=options.constraints;if(options.disableConstraintsNormalization)var disableConstraintsNormalization=options.disableConstraintsNormalization;var audioProperty=getConstraintsProperty(constraints,"audio",void 0);"object"===_typeof(audioProperty)&&(audioOutputId=getConstraintsProperty(audioProperty,"outputId",0));var stripCodecs=options.stripCodecs||[],receiveAudio="undefined"==typeof options.receiveAudio||options.receiveAudio,receiveVideo="undefined"==typeof options.receiveVideo||options.receiveVideo,cacheLocalResources=options.cacheLocalResources,status_=CALL_STATUS.NEW,callbacks={},hasTransferredCall=!1,sdpHook=options.sdpHook,sipSDP=options.sipSDP,call=(options.sipHeaders,{});callRefreshHandlers[id_]=function(callInfo,sdp,codec,transfer){if(transfer)return mediaConnections[id_]||(mediaConnections[id_]=mediaConnection),void("COMPLETED"==transfer.status&&delete mediaConnections[id_]);if(!mediaConnection&&0!=Object.keys(mediaConnections).length)for(var mc in mediaConnections)mediaConnection=mediaConnections[mc],hasTransferredCall=!0,delete mediaConnections[mc];if(codec)"Flash"==mediaProvider&&mediaConnection.changeAudioCodec(codec.name);else{if(sdp&&""!==sdp)return sdp=sdpHookHandler(sdp,sdpHook),void mediaConnection.setRemoteSdp(sdp,hasTransferredCall,id_).then((function(){}));var event=callInfo.status;status_=event,event!=CALL_STATUS.FAILED&&event!=CALL_STATUS.FINISH&&event!=CALL_STATUS.BUSY||(delete calls[id_],delete callRefreshHandlers[id_],0==Object.keys(calls).length&&mediaConnection&&mediaConnection.close(cacheLocalResources)),callbacks[event]&&callbacks[event](call)}};var hangup=function(){if(status_!=CALL_STATUS.NEW){if(status_==CALL_STATUS.PENDING)return cacheLocalResources||releaseLocalMedia(localDisplay,mediaProvider),callRefreshHandlers[id_]({status:CALL_STATUS.FAILED}),void(options.incoming&&send("hangup",{callId:id_}));send("hangup",{callId:id_}),mediaConnection&&mediaConnection.close(cacheLocalResources)}else callRefreshHandlers[id_]({status:CALL_STATUS.FAILED})};return call.call=function(){if(status_!==CALL_STATUS.NEW)throw new Error("Invalid call state");status_=CALL_STATUS.PENDING;MediaProvider[mediaProvider].getMediaAccess(constraints,localDisplay,disableConstraintsNormalization).then((function(){status_!=CALL_STATUS.FAILED?MediaProvider[mediaProvider].createConnection({id:id_,localDisplay:localDisplay,remoteDisplay:remoteDisplay,authToken:authToken,mainUrl:urlServer,flashProto:flashProto,flashPort:flashPort,bidirectional:!0,login:login,constraints:constraints,connectionConfig:mediaOptions,audioOutputId:audioOutputId}).then((function(newConnection){return(mediaConnection=newConnection).createOffer({sendAudio:!0,sendVideo:!0,receiveAudio:receiveAudio,receiveVideo:receiveVideo,stripCodecs:stripCodecs})})).then((function(offer){send("call",{callId:id_,incoming:!1,hasVideo:offer.hasVideo,hasAudio:offer.hasAudio,status:status_,mediaProvider:mediaProvider,sdp:offer.sdp,sipSDP:sipSDP,caller:login,callee:callee_,custom:options.custom,visibleName:visibleName_})})):cacheLocalResources||releaseLocalMedia(localDisplay,mediaProvider)})).catch((function(error){logger.error("core",error),status_=CALL_STATUS.FAILED,info_=ERROR_INFO.LOCAL_ERROR,errorInfo_=error.message,callRefreshHandlers[id_]({status:CALL_STATUS.FAILED}),hangup()}))},call.answer=function(answerOptions){if(status_!==CALL_STATUS.NEW&&status_!==CALL_STATUS.RING)throw new Error("Invalid call state");var sdp;localDisplay=answerOptions.localVideoDisplay,remoteDisplay=answerOptions.remoteVideoDisplay,constraints=answerOptions.constraints||getDefaultMediaConstraints(),status_=CALL_STATUS.PENDING;var sdpHook=answerOptions.sdpHook;if(sipSDP=answerOptions.sipSDP,answerOptions.sipHeaders,!remoteSdpCache[id_])throw logger.error("core","No remote sdp available"),new Error("No remote sdp available");sdp=sdpHookHandler(remoteSdpCache[id_],sdpHook),delete remoteSdpCache[id_],0==util.SDP.matchPrefix(sdp,"m=video").length&&(constraints.video=!1);var stripCodecs=answerOptions.stripCodecs||[];MediaProvider[mediaProvider].getMediaAccess(constraints,localDisplay,disableConstraintsNormalization).then((function(){status_!=CALL_STATUS.FAILED?MediaProvider[mediaProvider].createConnection({id:id_,localDisplay:localDisplay,remoteDisplay:remoteDisplay,authToken:authToken,mainUrl:urlServer,flashProto:flashProto,flashPort:flashPort,bidirectional:!0,login:cConfig.sipLogin,constraints:constraints,connectionConfig:mediaOptions,audioOutputId:audioOutputId}).then((function(newConnection){return(mediaConnection=newConnection).setRemoteSdp(sdp)})).then((function(){return mediaConnection.createAnswer({receiveAudio:options.receiveAudio,receiveVideo:options.receiveVideo,stripCodecs:stripCodecs})})).then((function(sdp){status_!=CALL_STATUS.FINISH&&status_!=CALL_STATUS.FAILED?send("answer",{callId:id_,incoming:!0,hasVideo:!0,hasAudio:!0,status:status_,mediaProvider:mediaProvider,sdp:sdp,sipSDP:sipSDP,caller:cConfig.login,callee:callee_,custom:options.custom}):hangup()})):cacheLocalResources||releaseLocalMedia(localDisplay,mediaProvider)})).catch((function(error){logger.error("core",error),info_=ERROR_INFO.LOCAL_ERROR,errorInfo_=error.message,status_=CALL_STATUS.FAILED,callRefreshHandlers[id_]({status:CALL_STATUS.FAILED})}))},call.hangup=hangup,call.id=function(){return id_},call.getInfo=function(){return info_},call.getErrorInfo=function(){return errorInfo_},call.status=function(){return status_},call.getStats=function(callbackFn,nativeStats){mediaConnection&&mediaConnection.getStats(callbackFn,nativeStats)},call.setAudioOutputId=function(id){if(audioOutputId=id,mediaConnection&&mediaConnection.setAudioOutputId)return mediaConnection.setAudioOutputId(id)},call.setVolume=function(volume){mediaConnection&&mediaConnection.setVolume(volume)},call.getVolume=function(){return mediaConnection?mediaConnection.getVolume():-1},call.muteAudio=function(){mediaConnection&&mediaConnection.muteAudio()},call.unmuteAudio=function(){mediaConnection&&mediaConnection.unmuteAudio()},call.isAudioMuted=function(){return!mediaConnection||mediaConnection.isAudioMuted()},call.muteVideo=function(){mediaConnection&&mediaConnection.muteVideo()},call.unmuteVideo=function(){mediaConnection&&mediaConnection.unmuteVideo()},call.isVideoMuted=function(){return!mediaConnection||mediaConnection.isVideoMuted()},call.caller=function(){return caller_},call.callee=function(){return callee_},call.visibleName=function(){return visibleName_},call.hold=function(){send("hold",{callId:id_})},call.holdForTransfer=function(){send("hold",{callId:id_,holdForTransfer:!0})},call.unhold=function(){send("unhold",{callId:id_})},call.sendDTMF=function(number,type){send("sendDtmf",{callId:id_,type:type||"RFC2833",dtmf:number})},call.transfer=function(target){send("transfer",{callId:id_,target:target})},call.on=function(event,callback){if(!event)throw new TypeError("Event can't be null");if(!callback||"function"!=typeof callback)throw new Error("Callback needs to be a valid function");return callbacks[event]=callback,call},call.switchCam=function(deviceId){if(status_!==CALL_STATUS.ESTABLISHED&&!constraints.video&&status_!==CALL_STATUS.HOLD)throw new Error("Invalid call state");return mediaConnection.switchCam(deviceId)},call.switchMic=function(deviceId){if(status_!==CALL_STATUS.ESTABLISHED&&status_!==CALL_STATUS.HOLD)throw new Error("Invalid call state");return mediaConnection.switchMic(deviceId)},call.switchToScreen=function(source,woExtension){if(status_!==CALL_STATUS.ESTABLISHED&&status_!==CALL_STATUS.HOLD)throw new Error("Invalid call state");return mediaConnection.switchToScreen(source,woExtension)},call.switchToCam=function(){if(status_!==CALL_STATUS.ESTABLISHED&&status_!==CALL_STATUS.HOLD)throw new Error("Invalid call state");mediaConnection.switchToCam()},calls[id_]=call,call},restAppCommunicator=function(){var pending={},exports={sendData:function(data){return new Promise((function(resolve,reject){var obj={operationId:uuid_v1(),payload:data};pending[obj.operationId]={FAILED:function(info){reject(info)},ACCEPTED:function(info){resolve(info)}},send("sendData",obj)}))},resolveData:function(data){if(pending[data.operationId]){var handler=pending[data.operationId];delete pending[data.operationId],delete data.operationId,handler[data.status](data)}}};return exports}(),sdpHookHandler=function(sdp,sdpHook){if(null!=sdpHook&&"function"==typeof sdpHook){var newSdp=sdpHook({sdpString:sdp});return null!=newSdp&&""!=newSdp?newSdp:sdp}return sdp};return session.id=function(){return id_},session.status=function(){return sessionStatus},session.getServerUrl=function(){return urlServer},session.createStream=function(options){var availableCallbacks=[];if(sessionStatus!==SESSION_STATUS.ESTABLISHED)throw new Error("Invalid session state");if(!options)throw new TypeError("options must be provided");if(!options.name)throw new TypeError("options.name must be provided");var mediaConnection,clientKf=new KalmanFilter,serverKf=new KalmanFilter,id_=uuid_v1(),name_=options.name,mediaProvider=options.mediaProvider||getMediaProviders()[0],display=options.display;if(options.constraints&&0!=Object.keys(options.constraints).length)var constraints=options.constraints;if(options.disableConstraintsNormalization)var disableConstraintsNormalization=options.disableConstraintsNormalization;var receiveAudio,audioOutputId,receiveVideo,mediaConnectionConstraints=options.mediaConnectionConstraints,audioProperty=getConstraintsProperty(constraints,"audio",void 0);if("boolean"==typeof audioProperty)receiveAudio=audioProperty;else if("object"===_typeof(audioProperty)){receiveAudio=!0;var _stereo=getConstraintsProperty(audioProperty,"stereo",0),_bitrate=getConstraintsProperty(audioProperty,"bitrate",0),_fec=getConstraintsProperty(audioProperty,"fec",0);audioOutputId=getConstraintsProperty(audioProperty,"outputId",0);var _codecOptions="";_bitrate&&(_codecOptions+="maxaveragebitrate="+_bitrate+";"),_stereo&&(_codecOptions+="stereo=1;sprop-stereo=1;"),_fec&&(_codecOptions+="useinbandfec=1;")}else receiveAudio="undefined"==typeof options.receiveAudio||options.receiveAudio;var videoProperty=getConstraintsProperty(constraints,"video",void 0);receiveVideo="boolean"==typeof videoProperty?videoProperty:"object"===_typeof(videoProperty)||("undefined"==typeof options.receiveVideo||options.receiveVideo);var bitrate=getConstraintsProperty(constraints,"video.bitrate",0),minBitrate=getConstraintsProperty(constraints,"video.minBitrate",0),maxBitrate=getConstraintsProperty(constraints,"video.maxBitrate",0),quality=getConstraintsProperty(constraints,"video.quality",0);quality>100&&(quality=100);var info_,errorInfo_,audioState_,videoState_,connectionQuality,playWidth="undefined"!=typeof options.playWidth?options.playWidth:getConstraintsProperty(constraints,"video.width",0),playHeight="undefined"!=typeof options.playHeight?options.playHeight:getConstraintsProperty(constraints,"video.height",0),stripCodecs=options.stripCodecs||[],resolution={},published_=!1,record_=options.record||!1,recordFileName=null,cacheLocalResources=options.cacheLocalResources,status_=STREAM_STATUS.NEW,rtmpUrl=options.rtmpUrl,remoteBitrate=-1,networkBandwidth=-1,sdpHook=options.sdpHook,transportType=options.transport,cvoExtension=options.cvoExtension,remoteVideo=options.remoteVideo,callbacks={},playoutDelay=options.playoutDelay,useCanvasMediaStream=options.useCanvasMediaStream,videoBytes=0,stream={};streamEventRefreshHandlers[id_]=function(streamEvent){callbacks[STREAM_EVENT]&&callbacks[STREAM_EVENT](streamEvent)},streamRefreshHandlers[id_]=function(streamInfo,sdp){if(sdp&&""!==sdp){var _sdp=sdp;return _codecOptions&&(_sdp=util.SDP.writeFmtp(sdp,_codecOptions,"opus")),_sdp=sdpHookHandler(_sdp,sdpHook),void mediaConnection.setRemoteSdp(_sdp).then((function(){}))}if(null==streamInfo.available){var event=streamInfo.status;if("inboundVideoRate"!=event&&"outboundVideoRate"!=event){if(event==STREAM_STATUS.RESIZE)resolution.width=streamInfo.streamerVideoWidth,resolution.height=streamInfo.streamerVideoHeight;else if(event==STREAM_STATUS.SNAPSHOT_COMPLETE);else if(event==STREAM_STATUS.NOT_ENOUGH_BANDWIDTH){var info=streamInfo.info.split("/");remoteBitrate=info[0],networkBandwidth=info[1]}else status_=event;audioState_=streamInfo.audioState,videoState_=streamInfo.videoState,streamInfo.info&&(info_=streamInfo.info),event!=STREAM_STATUS.FAILED&&event!=STREAM_STATUS.STOPPED&&event!=STREAM_STATUS.UNPUBLISHED||(delete streams[id_],delete streamRefreshHandlers[id_],delete streamEventRefreshHandlers[id_],mediaConnection&&mediaConnection.close(cacheLocalResources)),record_&&"undefined"!=typeof streamInfo.recordName&&(recordFileName=streamInfo.recordName),callbacks[event]&&callbacks[event](stream)}else detectConnectionQuality(event,streamInfo)}else{for(var i=0;i<availableCallbacks.length;i++)info_=streamInfo.reason,"true"==streamInfo.available?availableCallbacks[i].resolve(stream):availableCallbacks[i].reject(stream);availableCallbacks=[]}};var detectConnectionQuality=function(event,streamInfo){disableConnectionQualityCalculation||mediaConnection.getStats((function(stats){var bytesSentReceived=0;if(stats)if("outboundVideoRate"==event&&stats.inboundStream&&stats.inboundStream.video&&stats.inboundStream.video.bytesReceived>0)bytesSentReceived=stats.inboundStream.video.bytesReceived;else{if(!(stats.outboundStream&&stats.outboundStream.video&&stats.outboundStream.video.bytesSent>0))return;bytesSentReceived=stats.outboundStream.video.bytesSent}if(videoBytes){var currentVideoRate=8*(bytesSentReceived-videoBytes);if(0!=currentVideoRate){var currentQuality,clientFiltered=clientKf.filter(currentVideoRate),serverFiltered=serverKf.filter(streamInfo.videoRate),videoRateDifference=100*Math.abs((serverFiltered-clientFiltered)/((serverFiltered+clientFiltered)/2));currentQuality=serverFiltered<5e4||clientFiltered<5e4?videoRateDifference>150?CONNECTION_QUALITY.BAD:CONNECTION_QUALITY.PERFECT:videoRateDifference>50?CONNECTION_QUALITY.BAD:videoRateDifference>20?CONNECTION_QUALITY.GOOD:CONNECTION_QUALITY.PERFECT,callbacks[CONNECTION_QUALITY.UPDATE]&&(connectionQuality=currentQuality,callbacks[CONNECTION_QUALITY.UPDATE](connectionQuality,clientFiltered,serverFiltered)),videoBytes=bytesSentReceived}}else videoBytes=bytesSentReceived}))},published=function(){return published_};function sendStreamEvent(type,payload){send("sendStreamEvent",{mediaSessionId:id_,type:type,payload:payload})}return stream.play=function(){if(logger.debug("core","Play stream "+name_),status_!==STREAM_STATUS.NEW)throw new Error("Invalid stream state");status_=STREAM_STATUS.PENDING,MediaProvider[mediaProvider].createConnection({id:id_,display:display,authToken:authToken,mainUrl:urlServer,flashProto:flashProto,flashPort:flashPort,flashBufferTime:options.flashBufferTime||0,flashShowFullScreenButton:options.flashShowFullScreenButton||!1,connectionConfig:mediaOptions,connectionConstraints:mediaConnectionConstraints,audioOutputId:audioOutputId,remoteVideo:remoteVideo,playoutDelay:playoutDelay},streamRefreshHandlers[id_]).then((function(newConnection){mediaConnection=newConnection;try{streamRefreshHandlers[id_]({status:status_})}catch(e){console.warn(e)}return mediaConnection.createOffer({receiveAudio:receiveAudio,receiveVideo:receiveVideo,stripCodecs:stripCodecs,stereo:_stereo})})).then((function(offer){logger.debug("core","Offer SDP:\n"+offer.sdp),send("playStream",{mediaSessionId:id_,name:name_,published:published_,hasVideo:!0,hasAudio:!0,status:status_,record:!1,width:playWidth,height:playHeight,mediaProvider:mediaProvider,sdp:offer.sdp,custom:options.custom,bitrate:bitrate,minBitrate:minBitrate,maxBitrate:maxBitrate,quality:quality,constraints:constraints,transport:transportType,cvoExtension:cvoExtension}),offer.player&&offer.player.play(id_)})).catch((function(error){throw error}))},stream.publish=function(){if(logger.debug("core","Publish stream "+name_),status_!==STREAM_STATUS.NEW)throw new Error("Invalid stream state");status_=STREAM_STATUS.PENDING,published_=!0;constraints&&constraints.video&&constraints.video.type&&constraints.video.type,MediaProvider[mediaProvider].getMediaAccess(constraints,display,disableConstraintsNormalization,useCanvasMediaStream).then((function(){status_!=STREAM_STATUS.FAILED?MediaProvider[mediaProvider].createConnection({id:id_,display:display,authToken:authToken,mainUrl:urlServer,flashProto:flashProto,flashPort:flashPort,constraints:constraints,connectionConfig:mediaOptions,connectionConstraints:mediaConnectionConstraints,customStream:!(!constraints||!constraints.customStream)&&constraints.customStream}).then((function(newConnection){return(mediaConnection=newConnection).createOffer({stripCodecs:stripCodecs})})).then((function(offer){logger.debug("core","Offer SDP:\n"+offer.sdp),send("publishStream",{mediaSessionId:id_,name:name_,published:published_,hasVideo:offer.hasVideo,hasAudio:offer.hasAudio,status:status_,record:record_,mediaProvider:mediaProvider,sdp:offer.sdp,custom:options.custom,bitrate:bitrate,minBitrate:minBitrate,maxBitrate:maxBitrate,rtmpUrl:rtmpUrl,constraints:constraints,transport:transportType,cvoExtension:cvoExtension})})):cacheLocalResources||releaseLocalMedia(display,mediaProvider)})).catch((function(error){logger.warn("core",error),info_=ERROR_INFO.LOCAL_ERROR,errorInfo_=error.message,status_=STREAM_STATUS.FAILED,callbacks[status_]&&callbacks[status_](stream)}))},stream.stop=function stop(){if(logger.debug("core","Stop stream "+name_),status_!=STREAM_STATUS.NEW)return status_==STREAM_STATUS.PENDING?(logger.warn("core","Stopping stream before server response "+id_),void setTimeout(stop,200)):void(status_!=STREAM_STATUS.FAILED?(send(published_?"unPublishStream":"stopStream",{mediaSessionId:id_,name:name_,published:published_,hasVideo:!0,hasAudio:!0,status:status_,record:!1}),mediaConnection&&mediaConnection.close(cacheLocalResources)):logger.warn("core","Stream status FAILED"));streamRefreshHandlers[id_]({status:STREAM_STATUS.FAILED})},stream.id=function(){return id_},stream.status=function(){return status_},stream.name=function(){return name_},stream.published=published,stream.getRecordInfo=function(){return recordFileName},stream.getInfo=function(){return info_},stream.getErrorInfo=function(){return errorInfo_},stream.videoResolution=function(){if(published_)throw new Error("This function available only on playing stream");return resolution},stream.setAudioOutputId=function(id){if(audioOutputId=id,mediaConnection&&mediaConnection.setAudioOutputId)return mediaConnection.setAudioOutputId(id)},stream.setVolume=function(volume){mediaConnection&&mediaConnection.setVolume(volume)},stream.unmuteRemoteAudio=function(){mediaConnection&&"Flash"!=mediaProvider&&mediaConnection.unmuteRemoteAudio()},stream.muteRemoteAudio=function(){mediaConnection&&"Flash"!=mediaProvider&&mediaConnection.muteRemoteAudio()},stream.isRemoteAudioMuted=function(){return!(!mediaConnection||"Flash"==mediaProvider)&&mediaConnection.isRemoteAudioMuted()},stream.setMicrophoneGain=function(volume){if(status_!==STREAM_STATUS.PUBLISHING)throw new Error("Invalid stream state");mediaConnection.setMicrophoneGain(volume)},stream.getVolume=function(){return mediaConnection?mediaConnection.getVolume():-1},stream.muteAudio=function(){mediaConnection&&(mediaConnection.muteAudio(),sendStreamEvent(STREAM_EVENT_TYPE.AUDIO_MUTED))},stream.unmuteAudio=function(){mediaConnection&&(mediaConnection.unmuteAudio(),sendStreamEvent(STREAM_EVENT_TYPE.AUDIO_UNMUTED))},stream.isAudioMuted=function(){return!mediaConnection||mediaConnection.isAudioMuted()},stream.muteVideo=function(){mediaConnection&&(mediaConnection.muteVideo(),sendStreamEvent(STREAM_EVENT_TYPE.VIDEO_MUTED))},stream.unmuteVideo=function(){mediaConnection&&(mediaConnection.unmuteVideo(),sendStreamEvent(STREAM_EVENT_TYPE.VIDEO_UNMUTED))},stream.isVideoMuted=function(){return!mediaConnection||mediaConnection.isVideoMuted()},stream.getStats=function(callbackFn,nativeStats){mediaConnection&&mediaConnection.getStats(callbackFn,nativeStats)},stream.snapshot=function(){if(logger.debug("core","Request snapshot, stream "+name_),status_!==STREAM_STATUS.NEW&&status_!==STREAM_STATUS.PLAYING&&status_!==STREAM_STATUS.PUBLISHING)throw new Error("Invalid stream state");send("snapshot",{name:name_,mediaSessionId:id_})},stream.getAudioState=function(){return audioState_},stream.getVideoState=function(){return videoState_},stream.getNetworkBandwidth=function(){return networkBandwidth},stream.getRemoteBitrate=function(){return remoteBitrate},stream.fullScreen=function(){published()?logger.warn("core","Full screen is allowed only for played streams"):mediaConnection&&mediaConnection.fullScreen()},stream.on=function(event,callback){if(!event)throw new TypeError("Event can't be null");if(!callback||"function"!=typeof callback)throw new Error("Callback needs to be a valid function");return callbacks[event]=callback,stream},stream.available=function(){return new Promise((function(resolve,reject){send("availableStream",{mediaSessionId:id_,name:name_});var promise={};promise.resolve=resolve,promise.reject=reject,availableCallbacks.push(promise)}))},stream.switchCam=function(deviceId){if(status_!==STREAM_STATUS.PUBLISHING)throw new Error("Invalid stream state");return mediaConnection.switchCam(deviceId)},stream.switchMic=function(deviceId){if(status_!==STREAM_STATUS.PUBLISHING)throw new Error("Invalid stream state");return mediaConnection.switchMic(deviceId)},stream.switchToScreen=function(source,woExtension){if(status_!==STREAM_STATUS.PUBLISHING)throw new Error("Invalid stream state");return mediaConnection.switchToScreen(source,woExtension)},stream.switchToCam=function(){if(status_!==STREAM_STATUS.PUBLISHING)throw new Error("Invalid stream state");mediaConnection.switchToCam()},stream.sendData=function(payload){if(status_!==STREAM_STATUS.PUBLISHING)throw new Error("Invalid stream state");sendStreamEvent(STREAM_EVENT_TYPE.DATA,payload)},streams[id_]=stream,stream},session.createCall=createCall,session.getStream=function(streamId){return streams[streamId]},session.getStreams=function(){return util.copyObjectToArray(streams)},session.sendData=restAppCommunicator.sendData,session.disconnect=function(){wsConnection&&wsConnection.close()},session.submitBugReport=function(reportObject){send("submitBugReport",reportObject)},session.startDebug=function(){logger.setPushLogs(!0),logger.setLevel("DEBUG"),send("sessionDebug",{command:"start"})},session.stopDebug=function(){logger.setLevel("INFO"),send("sessionDebug",{command:"stop"})},session.on=function(event,callback){if(!event)throw new Error("Event can't be null","TypeError");if(!callback||"function"!=typeof callback)throw new Error("Callback needs to be a valid function");return callbacks[event]=callback,session},sessions[id_]=session,session},playFirstSound:function(noise){var mediaProvider=getMediaProviders()[0];MediaProvider[mediaProvider].playFirstSound(noise)},playFirstVideo:function(display,isLocal,src){for(var mp in MediaProvider)return MediaProvider[mp].playFirstVideo(display,isLocal,src)},getLogger:function(){if(initialized)return logger;console.warn("Initialize API first.")},roomApi:require("./room-module"),constants:constants,firefoxScreenSharingExtensionInstalled:!0}},{"./constants":26,"./flash-media-provider":1,"./media-source-media-provider":1,"./room-module":28,"./temasys-media-provider":1,"./util":29,"./webrtc-media-provider":30,"./websocket-media-provider":1,kalmanjs:2,"promise-polyfill":4,"uuid/v1":10,"webrtc-adapter":11}],28:[function(require,module,exports){"use strict";var SESSION_STATUS=require("./constants").SESSION_STATUS,STREAM_STATUS=require("./constants").STREAM_STATUS,Promise=require("promise-polyfill"),util=require("./util"),uuid_v1=require("uuid/v1");module.exports={connect:function(options){var exports,callbacks={},rooms={},username_=options.username,roomHandlers={},session=Flashphoner.createSession({urlServer:options.urlServer,mediaOptions:options.mediaOptions,appKey:options.appKey&&0!=options.appKey.length?options.appKey:"roomApp",custom:{login:options.username,token:options.token}}).on(SESSION_STATUS.ESTABLISHED,(function(session){callbacks[session.status()]&&callbacks[session.status()](exports)})).on(SESSION_STATUS.APP_DATA,(function(data){var payload=data.payload;if(payload&&payload.roomName){var roomName=payload.roomName;roomHandlers[roomName]?roomHandlers[roomName](payload):console.warn("Failed to find room with name "+roomName)}else console.error("Received app data does not contain 'payload' or 'payload.roomName' field. Received data: "+JSON.stringify(data))})).on(SESSION_STATUS.DISCONNECTED,sessionDied).on(SESSION_STATUS.FAILED,sessionDied);function sessionDied(session){callbacks[session.status()]&&callbacks[session.status()](exports)}return exports={disconnect:function(){session.disconnect()},id:function(){return session.id()},getServerUrl:function(){return session.getServerUrl()},username:function(){return username_},status:function(){return session.status()},getRooms:function(){return util.copyObjectToArray(rooms)},join:function(options){var room={},name_=options.name,participants={},callbacks={},stateStreams={};function participantFromState(state){var participant={};if(state.hasOwnProperty("login")){var login=state.login,_streamName=state.name;stateStreams[_streamName]={play:play(_streamName),stop:stop(_streamName),id:id(_streamName),streamName:function(){return _streamName}},null!=participants[login]?participant=participants[login]:(participant={streams:{},name:function(){return login},sendMessage:attachSendMessage(login),getStreams:function(){return util.copyObjectToArray(this.streams)}},participants[participant.name()]=participant)}else participant={streams:{},name:function(){return state},sendMessage:attachSendMessage(state),getStreams:function(){return util.copyObjectToArray(this.streams)}};if(0!=Object.keys(stateStreams).length)for(var k in stateStreams)stateStreams.hasOwnProperty(k)&&(participant.streams[k]=stateStreams[k],delete stateStreams[k]);return participants[participant.name()]=participant,participant}roomHandlers[name_]=function(data){var participant;if("STATE"==data.name){if(data.info){for(var i=0;i<data.info.length;i++)participantFromState(data.info[i]);stateStreams={}}callbacks.STATE&&callbacks.STATE(room)}else"JOINED"==data.name?(participants[data.info]={streams:{},name:function(){return data.info},sendMessage:attachSendMessage(data.info),getStreams:function(){return util.copyObjectToArray(this.streams)}},callbacks.JOINED&&callbacks.JOINED(participants[data.info])):"LEFT"==data.name?(participant=participants[data.info],delete participants[data.info],callbacks.LEFT&&callbacks.LEFT(participant)):"PUBLISHED"==data.name?((participant=participants[data.info.login]).streams[data.info.name]={play:play(data.info.name),stop:stop(data.info.name),id:id(data.info.name),streamName:function(){return data.info.name}},callbacks.PUBLISHED&&callbacks.PUBLISHED(participant)):"FAILED"==data.name||"UNPUBLISHED"==data.name?null!=(participant=participants[data.info.login])&&delete participant.streams[data.info.name]:"MESSAGE"==data.name&&callbacks.MESSAGE&&callbacks.MESSAGE({from:participants[data.info.from],text:data.info.text})};function play(streamName){return function(display){var stream=session.createStream({name:streamName,display:display,custom:{name:name_}});return stream.play(),stream}}function stop(streamName){return function(){for(var streams=session.getStreams(),i=0;i<streams.length;i++)streams[i].name()==streamName&&streams[i].status()!=STREAM_STATUS.UNPUBLISHED&&streams[i].stop()}}function id(streamName){return function(){for(var streams=session.getStreams(),i=0;i<streams.length;i++)if(streams[i].name()==streamName)return streams[i].id()}}function attachSendMessage(recipientName){return function(text,error){sendAppCommand("sendMessage",{roomConfig:{name:name_},to:recipientName,text:text}).then((function(){}),(function(){error&&error()}))}}function sendAppCommand(commandName,data){var command={command:commandName,options:data};return session.sendData(command)}return sendAppCommand("join",{name:name_}).then((function(){}),(function(info){callbacks.FAILED&&callbacks.FAILED(room,info.info)})),room.name=function(){return name_},room.leave=function(){return new Promise((function(resolve,reject){function cleanUp(){for(var streams=session.getStreams(),i=0;i<streams.length;i++)(-1!==streams[i].name().indexOf(name_+"-"+username_)&&streams[i].status()!=STREAM_STATUS.UNPUBLISHED||-1!==streams[i].name().indexOf(name_)&&streams[i].status()!=STREAM_STATUS.STOPPED)&&streams[i].stop();delete roomHandlers[name_],delete rooms[name_]}sendAppCommand("leave",{name:name_}).then((function(){cleanUp(),resolve(room)}),(function(){cleanUp(),reject(room)}))}))},room.publish=function(options){options.name=options.name?name_+"-"+username_+"-"+uuid_v1().substr(0,4)+"-"+options.name:name_+"-"+username_+"-"+uuid_v1().substr(0,4),options.cacheLocalResources="boolean"!=typeof options.cacheLocalResources||options.cacheLocalResources,options.custom={name:name_};var stream=session.createStream(options);return stream.publish(),stream},room.getParticipants=function(){return util.copyObjectToArray(participants)},room.on=function(event,callback){if(!event)throw new Error("Event can't be null","TypeError");if(!callback||"function"!=typeof callback)throw new Error("Callback needs to be a valid function");return callbacks[event]=callback,room},rooms[name_]=room,room},on:function(event,callback){if(!event)throw new Error("Event can't be null","TypeError");if(!callback||"function"!=typeof callback)throw new Error("Callback needs to be a valid function");return callbacks[event]=callback,exports}}},events:{STATE:"STATE",JOINED:"JOINED",LEFT:"LEFT",PUBLISHED:"PUBLISHED",MESSAGE:"MESSAGE",FAILED:"FAILED"}}},{"./constants":26,"./util":29,"promise-polyfill":4,"uuid/v1":10}],29:[function(require,module,exports){"use strict";module.exports={isEmptyObject:function(obj){for(var name in obj)return!1;return!0},copyObjectToArray:function(obj){var ret=[];for(var prop in obj)obj.hasOwnProperty(prop)&&ret.push(obj[prop]);return ret},copyObjectPropsToAnotherObject:function(src,dst){for(var prop in src)src.hasOwnProperty(prop)&&(dst[prop]=src[prop])},browser:function(){var browser;navigator.userAgent.toLowerCase().indexOf("android")>-1&&(browser="Android"),/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream&&(browser="iOS"),(!!window.opr&&!!opr.addons||!!window.opera||navigator.userAgent.indexOf(" OPR/")>=0)&&(browser="Opera"),"undefined"!=typeof InstallTrigger&&(browser="Firefox"),Object.prototype.toString.call(window.HTMLElement).indexOf("Constructor")>0&&(browser="Safari");var isIE=!!document.documentMode;return isIE&&(browser="IE"),!isIE&&!!window.StyleMedia&&(browser="Edge"),!!window.chrome&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor)&&!/OPR/.test(navigator.userAgent)&&(browser="Chrome"),browser},processRtcStatsReport:function(browser,report){var result={};if("chrome"==browser){var gotResult=!1;if(report.type&&"googCandidatePair"==report.type&&"true"==report.googActiveConnection&&(gotResult=!0),report.type&&"ssrc"==report.type&&(gotResult=!0),gotResult)for(var k in report)report.hasOwnProperty(k)&&(result[k]=report[k]);return result}if("firefox"==browser){if(report.type&&("outboundrtp"==report.type||"inboundrtp"==report.type)&&-1==report.id.indexOf("rtcp"))for(var k in result={},report)report.hasOwnProperty(k)&&(result[k]=report[k]);return result}return result},Browser:{isIE:function(){return!!document.documentMode},isFirefox:function(){return"undefined"!=typeof InstallTrigger},isChrome:function(){return!!window.chrome&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor)&&!/OPR/.test(navigator.userAgent)},isEdge:function(){return!isIE&&!!window.StyleMedia},isOpera:function(){return!!window.opr&&!!opr.addons||!!window.opera||navigator.userAgent.indexOf(" OPR/")>=0},isiOS:function(){return/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream},isSafari:function(){return/^((?!chrome|android).)*safari/i.test(navigator.userAgent)},isAndroid:function(){return navigator.userAgent.toLowerCase().indexOf("android")>-1},isSafariWebRTC:function(){return navigator.mediaDevices&&this.isSafari()},isSamsungBrowser:function(){return/SamsungBrowser/i.test(navigator.userAgent)},isAndroidFirefox:function(){return this.isAndroid()&&/Firefox/i.test(navigator.userAgent)}},SDP:{matchPrefix:function(sdp,prefix){return sdp.trim().split("\n").map((function(line){return line.trim()})).filter((function(line){return 0===line.indexOf(prefix)}))},writeFmtp:function(sdp,param,codec){var i,sdpArray=sdp.split("\n");for(i=0;i<sdpArray.length;i++)-1!=sdpArray[i].search(codec)&&0==sdpArray[i].indexOf("a=rtpmap")&&(sdpArray[i]+="\na=fmtp:"+sdpArray[i].match(/[0-9]+/)[0]+" "+param+"\r");var result="";for(i=0;i<sdpArray.length;i++)""!=sdpArray[i]&&(result+=sdpArray[i]+"\n");return result}},logger:{init:function(verbosity,enablePushLogs,customLogger,enableLogs){switch(verbosity.toUpperCase()){case"DEBUG":this.verbosity=3;break;case"INFO":this.verbosity=2;break;case"ERROR":this.verbosity=0;break;case"WARN":this.verbosity=1;break;case"TRACE":this.verbosity=4;break;default:this.verbosity=2}this.date=function(){return(new Date).toTimeString().split(" ")[0]},this.enablePushLogs=enablePushLogs;var delayedLogs=[];this.customLogger=customLogger,this.enableLogs=enableLogs,this.pushLogs=function(log){if(this.wsConnection&&this.enablePushLogs){if(delayedLogs.length)for(var i=0;i<delayedLogs.length;i++)this.wsConnection.send(JSON.stringify({message:"pushLogs",data:[{logs:delayedLogs[i]}]}));delayedLogs=[],this.wsConnection.send(JSON.stringify({message:"pushLogs",data:[{logs:log}]}))}else delayedLogs.push(log)}},info:function(src,text){if(this.enableLogs){var prefix=this.date()+" INFO "+src+" - ";this.pushLogs(prefix+JSON.stringify(text)+"\n"),this.verbosity>=2&&(null!=this.customLogger?this.customLogger.info(text):console.log(prefix,text))}},debug:function(src,text){if(this.enableLogs){var prefix=this.date()+" DEBUG "+src+" - ";this.pushLogs(prefix+JSON.stringify(text)+"\n"),this.verbosity>=3&&(null!=this.customLogger?this.customLogger.debug(text):console.log(prefix,text))}},trace:function(src,text){if(this.enableLogs){var prefix=this.date()+" TRACE "+src+" - ";this.pushLogs(prefix+JSON.stringify(text)+"\n"),this.verbosity>=4&&(null!=this.customLogger?this.customLogger.trace(text):console.log(prefix,text))}},warn:function(src,text){if(this.enableLogs){var prefix=this.date()+" WARN "+src+" - ";this.pushLogs(prefix+JSON.stringify(text)+"\n"),this.verbosity>=1&&(null!=this.customLogger?this.customLogger.warn(text):console.warn(prefix,text))}},error:function(src,text){if(this.enableLogs){var prefix=this.date()+" ERROR "+src+" - ";this.pushLogs(prefix+JSON.stringify(text)+"\n"),this.verbosity>=0&&(null!=this.customLogger?this.customLogger.error(text):console.error(prefix,text))}},setEnableLogs:function(enableLogs){this.enableLogs=enableLogs},setCustomLogger:function(customLogger){this.customLogger=customLogger},setConnection:function(connection){this.wsConnection=connection},setPushLogs:function(pushLogs){this.enablePushLogs=pushLogs},setLevel:function(level){switch(level.toUpperCase()){case"DEBUG":this.verbosity=3;break;case"INFO":this.verbosity=2;break;case"ERROR":this.verbosity=0;break;case"WARN":this.verbosity=1;break;case"TRACE":this.verbosity=4;break;default:this.verbosity=2}}},stripCodecs:function(sdp,codecs){if(!codecs.length)return sdp;for(var i,sdpArray=sdp.split("\n"),codecsArray=codecs.split(","),pt=[],p=0;p<codecsArray.length;p++)for(console.log("Searching for codec "+codecsArray[p]),i=0;i<sdpArray.length;i++)-1!=sdpArray[i].search(new RegExp(codecsArray[p],"i"))&&0==sdpArray[i].indexOf("a=rtpmap")&&(console.log(codecsArray[p]+" detected"),pt.push(sdpArray[i].match(/[0-9]+/)[0]),sdpArray[i]="");if(pt.length){for(p=0;p<pt.length;p++)for(i=0;i<sdpArray.length;i++)-1==sdpArray[i].search("a=fmtp:"+pt[p])&&-1==sdpArray[i].search("a=rtcp-fb:"+pt[p])||(sdpArray[i]="");for(i=0;i<sdpArray.length;i++)if(-1!=sdpArray[i].search("m=audio")||-1!=sdpArray[i].search("m=video")){for(var mLineSplitted=sdpArray[i].split(" "),newMLine="",m=0;m<mLineSplitted.length;m++)(-1==pt.indexOf(mLineSplitted[m].trim())||m<=2)&&(newMLine+=mLineSplitted[m],m<mLineSplitted.length-1&&(newMLine+=" "));sdpArray[i]=newMLine}}var result="";for(i=0;i<sdpArray.length;i++)""!=sdpArray[i]&&(result+=sdpArray[i]+"\n");return result},getCurrentCodecAndSampleRate:function(sdp,mediaType){for(var codecPt,rows=sdp.split("\n"),i=0;i<rows.length;i++){if(codecPt&&-1!=rows[i].indexOf("a=rtpmap:"+codecPt)){var ret={};return ret.name=rows[i].split(" ")[1].split("/")[0],ret.sampleRate=rows[i].split(" ")[1].split("/")[1],ret}-1!=rows[i].indexOf("m="+mediaType)&&(codecPt=rows[i].split(" ")[3].trim())}}}},{}],30:[function(require,module,exports){"use strict";function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}var extensionId,defaultConstraints,logger,audioContext,createMicGainNode,microphoneGain,browserDetails=require("webrtc-adapter").default.browserDetails,uuid_v1=require("uuid/v1"),util=require("./util"),connections={},constants=require("./constants"),validBrowsers=["firefox","chrome","safari"],videoCams=[],mics=[],mixAudioTracks=function(stream1,stream2){var stream1Sound=audioContext.createMediaStreamSource(stream1),stream2Sound=audioContext.createMediaStreamSource(stream2),destination=audioContext.createMediaStreamDestination(),newStream=destination.stream;return stream1Sound.connect(destination),stream2Sound.connect(destination),newStream.getAudioTracks()[0]},loadCanvasVideo=function(display,stream,video){var vEl=video;if(vEl){if("CANVAS"!==vEl.tagName){var canvas=document.createElement("canvas");display.replaceChild(canvas,vEl),canvas.appendChild(vEl),vEl=canvas}}else!function(parent){var canvas=document.createElement("canvas");parent.appendChild(canvas)}(display),function(parent){var video=document.createElement("video");parent.appendChild(video)}(display.children[0]),vEl=display.children[0];vEl.id=uuid_v1()+"-LOCAL_CACHED_VIDEO";var child=vEl.children[0];return child.srcObject=stream,child.muted=!0,child.onloadedmetadata=function(e){child.play(),vEl.width=child.videoWidth,vEl.height=child.videoHeight,function(canvas,videoWidth,videoHeight){if(!canvas.parentNode)return;var newSize,display=vEl.parentNode,parentSize={w:display.parentNode.clientWidth,h:display.parentNode.clientHeight};newSize=videoWidth&&videoHeight?downScaleToFitSize(videoWidth,videoHeight,parentSize.w,parentSize.h):downScaleToFitSize(canvas.videoWidth,canvas.videoHeight,parentSize.w,parentSize.h);display.style.width=newSize.w+"px",display.style.height=newSize.h+"px";var margin=0;parentSize.h-newSize.h>1&&(margin=Math.floor((parentSize.h-newSize.h)/2));function downScaleToFitSize(videoWidth,videoHeight,dstWidth,dstHeight){var newWidth,newHeight,videoRatio=videoWidth/videoHeight;return dstWidth/dstHeight>videoRatio?(newHeight=dstHeight,newWidth=Math.floor(videoRatio*dstHeight)):(newWidth=dstWidth,newHeight=Math.floor(dstWidth/videoRatio)),{w:newWidth,h:newHeight}}display.style.margin=margin+"px auto"}(vEl,child.videoWidth,child.videoHeight)},util.Browser.isFirefox()&&vEl.getContext("2d"),vEl.srcObject=vEl.captureStream(30),stream.getAudioTracks().length>0&&vEl.srcObject.addTrack(stream.getAudioTracks()[0]),vEl},loadVideo=function(display,stream,screenShare,requestAudioConstraints,resolve,constraints,useCanvas){var video;function resolveCallback(){requestAudioConstraints&&"chrome"==browserDetails.browser?(logger.info("webrtc","Request for audio stream"),navigator.getUserMedia({audio:requestAudioConstraints},(function(stream){if(logger.info("webrtc","Got audio stream, add it to video stream"),video.srcObject.getAudioTracks()[0]){var mixedTrack=mixAudioTracks(stream,video.srcObject),originalTrack=video.srcObject.getAudioTracks()[0];video.srcObject.removeTrack(originalTrack),video.srcObject.addTrack(mixedTrack)}else video.srcObject.addTrack(stream.getAudioTracks()[0]);resolve(display)}))):resolve(display)}video=useCanvas?loadCanvasVideo(display,stream,getCacheInstance(display)):function(display,stream,screenShare,constraints,video){var vEl=video;return vEl||(vEl=document.createElement("video"),display.appendChild(vEl)),vEl.id=uuid_v1()+"-LOCAL_CACHED_VIDEO",vEl.srcObject=stream,vEl.muted=!0,vEl.onloadedmetadata=function(e){screenShare&&!screenCaptureSupportedBrowsers()&&setScreenResolution(vEl,stream,constraints),vEl.play()},vEl}(display,stream,screenShare,constraints,getCacheInstance(display)),createMicGainNode&&stream.getAudioTracks().length>0&&"chrome"==browserDetails.browser&&(audioContext.resume(),microphoneGain=createGainNode(stream)),constraints.systemSound&&"chrome"==browserDetails.browser?chrome.runtime.sendMessage(extensionId,{type:"isInstalled"},(function(response){response?chrome.runtime.sendMessage(extensionId,{type:"getSourceId"},(function(response){if(response.error)resolveCallback(),logger.error("webrtc",response.error);else if(response.systemSoundAccess){var constraints={audio:{mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:response.sourceId,echoCancellation:!0},optional:[]},video:{mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:response.sourceId},optional:[]}};navigator.getUserMedia(constraints,(function(audioStream){if(stream.getAudioTracks().length>0){var originalAudioTrack=stream.getAudioTracks()[0],mixedTrack=mixAudioTracks(stream,audioStream);stream.addTrack(mixedTrack),stream.removeTrack(originalAudioTrack)}else stream.addTrack(audioStream.getAudioTracks()[0]);resolveCallback()}),(function(reason){resolveCallback(),logger.error("webrtc",reason)}))}else resolveCallback(),logger.error("webrtc","System sound: access is denied by the user")})):resolveCallback()})):resolveCallback()},createGainNode=function(stream){var audioCtx=audioContext,source=audioCtx.createMediaStreamSource(stream),gainNode=audioCtx.createGain(),destination=audioCtx.createMediaStreamDestination(),outputStream=destination.stream;source.connect(gainNode),gainNode.connect(destination);var sourceAudioTrack=stream.getAudioTracks()[0];return gainNode.sourceAudioTrack=sourceAudioTrack,gainNode.release=function(){this.sourceAudioTrack.stop(),this.disconnect()},stream.addTrack(outputStream.getAudioTracks()[0]),stream.removeTrack(sourceAudioTrack),gainNode},setScreenResolution=function(video,stream,constraints){var newHeight,newWidth,videoRatio;video.videoWidth>video.videoHeight?(videoRatio=video.videoWidth/video.videoHeight,newHeight=constraints.video.videoWidth/videoRatio,newWidth=constraints.video.videoWidth):(videoRatio=video.videoHeight/video.videoWidth,newWidth=constraints.video.videoHeight/videoRatio,newHeight=constraints.video.videoHeight),console.log("videoRatio === "+videoRatio),stream.getVideoTracks()[0].applyConstraints({height:newHeight,width:newWidth})},getScreenDeviceIdWoExtension=function(constraints){return new Promise((function(resolve,reject){var video={};constraints.video.frameRate.ideal&&(video.frameRate=constraints.video.frameRate.ideal),constraints.video.width&&(video.width=constraints.video.width),constraints.video.height&&(video.height=constraints.video.height),0===Object.keys(video).length&&(video=!0),resolve({video:video,audio:!0})}))},getScreenDeviceId=function(constraints){return new Promise((function(resolve,reject){var o={};window.chrome?chrome.runtime.sendMessage(extensionId,{type:"isInstalled"},(function(response){response?(o.maxWidth=constraints&&constraints.video&&constraints.video.width?constraints.video.width:320,o.maxHeight=constraints&&constraints.video&&constraints.video.height?constraints.video.height:240,o.maxFrameRate=constraints&&constraints.video&&constraints.video.frameRate&&constraints.video.frameRate.ideal?constraints.video.frameRate.ideal:30,o.chromeMediaSource="desktop",chrome.runtime.sendMessage(extensionId,{type:"getSourceId"},(function(response){if(response.error)reject(new Error("Screen access denied"));else{o.chromeMediaSourceId=response.sourceId;var result={mandatory:o,sourceId:response.sourceId};response.systemSoundAccess&&(result.audioMandatory={chromeMediaSource:"desktop",chromeMediaSourceId:response.sourceId,echoCancellation:!0}),resolve(result)}}))):reject(new Error("Screen sharing extension is not available"))})):(o.mediaSource=constraints.video.mediaSource,o.width={},o.height={},o.frameRate={min:constraints.video.frameRate.max,max:constraints.video.frameRate.max},o.videoWidth=constraints.video.width,o.videoHeight=constraints.video.height,resolve(o))}))},releaseMedia=function(display){var video=getCacheInstance(display);return!!video&&(removeVideoElement(video),!0)};function getCacheInstance(display){var i;if(display)for(i=0;i<display.children.length;i++)if(display.children[i]&&(-1!=display.children[i].id.indexOf("-LOCAL_CACHED_VIDEO")||-1!=display.children[i].id.indexOf("-REMOTE_CACHED_VIDEO")))return logger.info("webrtc","FOUND WEBRTC CACHED INSTANCE, id "+display.children[i].id),display.children[i]}function removeVideoElement(video){if(video.srcObject){video.pause();for(var tracks=video.srcObject.getTracks(),i=0;i<tracks.length;i++)tracks[i].stop(),-1!=video.id.indexOf("-LOCAL_CACHED_VIDEO")&&"audio"==tracks[i].kind&&microphoneGain&&microphoneGain.release();if(video.srcObject=null,"CANVAS"===video.tagName)for(var _i=0;_i<video.children.length;_i++)removeVideoElement(video.children[_i])}}var listDevices=function(labels,kind,deviceConstraints){deviceConstraints||(deviceConstraints={audio:!0,video:!0}),kind?"all"==kind&&(kind=""):kind=constants.MEDIA_DEVICE_KIND.INPUT;var getList=function(devices){for(var list={audio:[],video:[]},micCount=0,outputCount=0,camCount=0,i=0;i<devices.length;i++){var device=devices[i],ret={id:device.deviceId,label:device.label};0===device.kind.indexOf("audio"+kind)&&"communications"!=device.deviceId?(ret.type="audioinput"==device.kind?"mic":"speaker","mic"==ret.type&&""==ret.label&&(ret.label="microphone"+ ++micCount),"speaker"==ret.type&&""==ret.label&&(ret.label="speaker"+ ++outputCount),list.audio.push(ret)):0===device.kind.indexOf("video"+kind)?(""==ret.label&&(ret.label="camera"+ ++camCount),ret.type="camera",list.video.push(ret)):logger.debug("webrtc","unknown device "+device.kind+" id "+device.deviceId)}return list};return new Promise((function(resolve,reject){navigator.mediaDevices.enumerateDevices().then((function(devices){if(labels){var constraints=function(devices){for(var constraints={},i=0;i<devices.length;i++){var device=devices[i];0===device.kind.indexOf("audio"+kind)&&deviceConstraints.audio?constraints.audio=!0:0===device.kind.indexOf("video"+kind)&&deviceConstraints.video?constraints.video=!0:logger.debug("webrtc","unknown device "+device.kind+" id "+device.deviceId)}return constraints}(devices);if(0===Object.keys(constraints).length)return void reject(new Error(kind+" media devices not found"));navigator.getUserMedia(constraints,(function(stream){navigator.mediaDevices.enumerateDevices().then((function(devicesWithLabales){resolve(getList(devicesWithLabales)),stream.getTracks().forEach((function(track){track.stop()}))}),reject)}),reject)}else resolve(getList(devices))}),reject)}))};var screenCaptureSupportedBrowsers=function(){return util.Browser.isChrome()||util.Browser.isSafari()};module.exports={createConnection:function(options){return new Promise((function(resolve,reject){var id=options.id,connectionConfig=options.connectionConfig||{iceServers:[]},connectionConstraints=options.connectionConstraints||{};connectionConstraints.hasOwnProperty("optional")||(connectionConstraints.optional=[{DtlsSrtpKeyAgreement:!0}]),connectionConfig.bundlePolicy="max-compat";var localVideo,currentAudioTrack,currentVideoTrack,systemSoundTrack,connection=new RTCPeerConnection(connectionConfig,connectionConstraints),display=options.display,localDisplay=options.localDisplay,remoteDisplay=options.remoteDisplay,bidirectional=options.bidirectional,remoteVideo=options.remoteVideo,switchCamCount=0,switchMicCount=0,customStream=options.customStream,constraints=options.constraints?options.constraints:{},screenShare=!1,playoutDelay=options.playoutDelay;if(bidirectional)(localVideo=getCacheInstance(localDisplay))&&(localVideo.srcObject?(localVideo.id=id+"-local",connection.addStream(localVideo.srcObject)):localVideo=null),(remoteVideo=getCacheInstance(remoteDisplay))||(remoteVideo=document.createElement("video"),remoteDisplay.appendChild(remoteVideo)),remoteVideo.id=id+"-remote",options.audioOutputId&&"undefined"!=typeof remoteVideo.setSinkId&&remoteVideo.setSinkId(options.audioOutputId),remoteVideo.style="border-radius: 1px";else if(!remoteVideo){var cachedVideo=getCacheInstance(display);cachedVideo&&-1===cachedVideo.id.indexOf("-REMOTE_CACHED_VIDEO")&&cachedVideo.srcObject?((localVideo=cachedVideo).id=id,connection.addStream(localVideo.srcObject)):(cachedVideo?remoteVideo=cachedVideo:(remoteVideo=document.createElement("video"),display.appendChild(remoteVideo)),remoteVideo.id=id,options.audioOutputId&&"undefined"!=typeof remoteVideo.setSinkId&&remoteVideo.setSinkId(options.audioOutputId),remoteVideo.style="border-radius: 1px")}if(localVideo){var videoTrack=localVideo.srcObject.getVideoTracks()[0];videoTrack&&videoCams.forEach((function(cam,index){videoTrack.label===cam.label&&(switchCamCount=index)}));var audioTrack=localVideo.srcObject.getAudioTracks()[0];audioTrack&&mics.forEach((function(mic,index){audioTrack.label===mic.label&&(switchMicCount=index)}))}connection.ontrack=function(event){remoteVideo&&(remoteVideo.srcObject=event.streams[0],remoteVideo.onloadedmetadata=function(e){remoteVideo&&remoteVideo.play().catch((function(e){validBrowsers.includes(browserDetails.browser)?(logger.info("webrtc","Autoplay detected! Trying to play a video with a muted sound..."),remoteVideo.muted=!0,remoteVideo.play()):logger.error("webrtc",e)}))}),void 0!==playoutDelay&&connection.getReceivers().forEach((function(track){void 0===track.playoutDelayHint&&logger.warn("playout delay unsupported"),track.playoutDelayHint=playoutDelay}))},connection.onremovestream=function(event){remoteVideo&&remoteVideo.pause()},connection.onsignalingstatechange=function(event){},connection.oniceconnectionstatechange=function(event){},connection.onicecandidate=function(event){null!=event.candidate&&logger.debug("webrtc","Added icecandidate: "+event.candidate.candidate)};var unmuteAudio=function(){localVideo&&localVideo.srcObject&&localVideo.srcObject.getAudioTracks().length>0&&(localVideo.srcObject.getAudioTracks()[0].enabled=!0)},unmuteVideo=function(){localVideo&&localVideo.srcObject&&localVideo.srcObject.getVideoTracks().length>0&&(localVideo.srcObject.getVideoTracks()[0].enabled=!0)};function fillStatObject(obj,report){var mediaType=report.mediaType;obj[mediaType]={};var description=null!=connection.currentRemoteDescription?connection.currentRemoteDescription:connection.remoteDescription,codec=util.getCurrentCodecAndSampleRate(description.sdp,mediaType);obj[mediaType].codec=codec.name,obj[mediaType].codecRate=codec.sampleRate,Object.keys(report).forEach((function(key){(key.startsWith("bytes")||key.startsWith("packets")||-1!=key.indexOf("Count"))&&(obj[mediaType][key]=report[key])}))}var processScreenStream=function(stream,resolve){connection.getSenders().forEach((function(sender){if("audio"!==sender.track.kind){currentAudioTrack=localVideo.srcObject.getAudioTracks()[0],currentVideoTrack=localVideo.srcObject.getVideoTracks()[0];var newVideoTrack=stream.getVideoTracks()[0];newVideoTrack.enabled=currentVideoTrack.enabled,sender.replaceTrack(newVideoTrack),localVideo.srcObject=stream,stream.getAudioTracks()[0]?(systemSoundTrack=stream.getAudioTracks()[0],connection.getSenders().forEach((function(sender){if("video"!==sender.track.kind){var mixedTrack=mixAudioTracks(stream,new MediaStream([sender.track]));mixedTrack.enabled=currentAudioTrack.enabled,sender.replaceTrack(mixedTrack),localVideo.srcObject.removeTrack(stream.getAudioTracks()[0]),localVideo.srcObject.addTrack(mixedTrack),currentAudioTrack.enabled=!0}}))):localVideo.srcObject.addTrack(currentAudioTrack)}})),logger.info("Switch to screen"),screenShare=!0,resolve()},exports={state:function(){return connection.signalingState},createOffer:function(options){return new Promise((function(resolve,reject){var hasAudio=!0,hasVideo=!0;localVideo?(localVideo.srcObject.getAudioTracks()[0]||(hasAudio=!1),localVideo.srcObject.getVideoTracks()[0]||(hasVideo=!1,options.receiveVideo=!1)):"safari"!=browserDetails.browser||connection.getTransceivers().length||(options.receiveAudio&&connection.addTransceiver("audio",{direction:"recvonly"}),options.receiveVideo&&connection.addTransceiver("video",{direction:"recvonly"}));var constraints={offerToReceiveAudio:options.receiveAudio?1:0,offerToReceiveVideo:options.receiveVideo?1:0};connection.createOffer(constraints).then((function(offer){options.stereo&&(offer.sdp=offer.sdp.replace("minptime=10","minptime=10;stereo=1;sprop-stereo=1")),connection.setLocalDescription(offer).then((function(){var o={};o.sdp=util.stripCodecs(offer.sdp,options.stripCodecs),o.hasAudio=hasAudio,o.hasVideo=hasVideo,resolve(o)}))}))}))},createAnswer:function(options){return new Promise((function(resolve,reject){connection.createAnswer().then((function(answer){connection.setLocalDescription(answer).then((function(){resolve(util.stripCodecs(answer.sdp,options.stripCodecs))}))}))}))},setRemoteSdp:function(sdp){return logger.debug("webrtc","setRemoteSDP:"),logger.debug("webrtc",sdp),new Promise((function(resolve,reject){var sdpType;sdpType="have-local-offer"==connection.signalingState?"answer":"offer";var rtcSdp=new RTCSessionDescription({type:sdpType,sdp:sdp});connection.setRemoteDescription(rtcSdp).then((function(){browserDetails.browser,resolve()})).catch((function(error){reject(error)}))}))},changeAudioCodec:function(codec){return!1},close:function(cacheCamera){remoteVideo&&(removeVideoElement(remoteVideo),options.remoteVideo||(remoteVideo.id=remoteVideo.id+"-REMOTE_CACHED_VIDEO"),remoteVideo=null),localVideo&&!getCacheInstance(localDisplay||display)&&cacheCamera?(localVideo.id=localVideo.id+"-LOCAL_CACHED_VIDEO",unmuteAudio(),unmuteVideo(),localVideo=null):localVideo&&(localVideo.id=localVideo.id+"-LOCAL_CACHED_VIDEO",removeVideoElement(localVideo),localVideo=null),"closed"!==connection.signalingState&&connection.close(),delete connections[id]},setAudioOutputId:function(id){if(remoteVideo){if("edge"==browserDetails.browser){var srcObject=remoteVideo.srcObject;remoteVideo.srcObject=null;var res=remoteVideo.setSinkId(id);return remoteVideo.srcObject=srcObject,res}return remoteVideo.setSinkId(id)}},setVolume:function(volume){remoteVideo&&remoteVideo.srcObject&&remoteVideo.srcObject.getAudioTracks().length>0&&(remoteVideo.volume=volume/100)},unmuteRemoteAudio:function(){remoteVideo&&remoteVideo.srcObject&&remoteVideo.srcObject.getAudioTracks().length>0&&(remoteVideo.muted=!1)},muteRemoteAudio:function(){remoteVideo&&remoteVideo.srcObject&&remoteVideo.srcObject.getAudioTracks().length>0&&(remoteVideo.muted=!0)},isRemoteAudioMuted:function(){return!(remoteVideo&&remoteVideo.srcObject&&remoteVideo.srcObject.getAudioTracks().length>0)||remoteVideo.muted},setMicrophoneGain:function(volume){microphoneGain&&(microphoneGain.gain.value=volume/100)},getVolume:function(){return remoteVideo&&remoteVideo.srcObject&&remoteVideo.srcObject.getAudioTracks().length>0?100*remoteVideo.volume:-1},muteAudio:function(){localVideo&&localVideo.srcObject&&localVideo.srcObject.getAudioTracks().length>0&&(localVideo.srcObject.getAudioTracks()[0].enabled=!1)}};exports.unmuteAudio=unmuteAudio,exports.isAudioMuted=function(){return!(localVideo&&localVideo.srcObject&&localVideo.srcObject.getAudioTracks().length>0)||!localVideo.srcObject.getAudioTracks()[0].enabled},exports.muteVideo=function(){localVideo&&localVideo.srcObject&&localVideo.srcObject.getVideoTracks().length>0&&(localVideo.srcObject.getVideoTracks()[0].enabled=!1)},exports.unmuteVideo=unmuteVideo,exports.isVideoMuted=function(){return!(localVideo&&localVideo.srcObject&&localVideo.srcObject.getVideoTracks().length>0)||!localVideo.srcObject.getVideoTracks()[0].enabled},exports.getStats=function(callbackFn,nativeStats){var browser=browserDetails.browser,result={outboundStream:{},inboundStream:{},otherStats:[]};if(connection&&validBrowsers.includes(browser)){if(nativeStats)return connection.getStats(null);connection.getStats(null).then((function(stat){stat&&stat.forEach((function(report){if(!report.isRemote)if("outbound-rtp"==report.type){if(fillStatObject(result.outboundStream,report),"video"==report.mediaType){var vSettings=localVideo.srcObject.getVideoTracks()[0].getSettings();result.outboundStream[report.mediaType].height=vSettings.height,result.outboundStream[report.mediaType].width=vSettings.width}}else"inbound-rtp"==report.type&&(fillStatObject(result.inboundStream,report),"video"==report.mediaType&&null!=remoteVideo&&(result.inboundStream[report.mediaType].height=remoteVideo.videoHeight,result.inboundStream[report.mediaType].width=remoteVideo.videoWidth))})),callbackFn(result)}))}},exports.fullScreen=function(){var video=document.getElementById(id);video&&(document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement?document.exitFullscreen?document.exitFullscreen():document.msExitFullscreen?document.msExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen():video.requestFullscreen?video.requestFullscreen():video.msRequestFullscreen?video.msRequestFullscreen():video.mozRequestFullScreen?video.mozRequestFullScreen():video.webkitRequestFullscreen?video.webkitRequestFullscreen():video.webkitEnterFullscreen&&(video.webkitEnterFullscreen(),video.addEventListener("pause",(function(){video.play()}))))},exports.switchCam=function(deviceId){return new Promise((function(resolve,reject){localVideo&&localVideo.srcObject&&videoCams.length>1&&!customStream&&!screenShare?connection.getSenders().forEach((function(sender){if("audio"!==sender.track.kind){switchCamCount=(switchCamCount+1)%videoCams.length,sender.track.stop();var cam="undefined"!=typeof deviceId?deviceId:videoCams[switchCamCount].id,clonedConstraints=Object.assign({},constraints);clonedConstraints.video.deviceId={exact:cam},clonedConstraints.audio=!1,navigator.mediaDevices.getUserMedia(clonedConstraints).then((function(newStream){var newVideoTrack=newStream.getVideoTracks()[0];newVideoTrack.enabled=localVideo.srcObject.getVideoTracks()[0].enabled;var audioTrack=localVideo.srcObject.getAudioTracks()[0];sender.replaceTrack(newVideoTrack),localVideo.srcObject=newStream,0==localVideo.srcObject.getAudioTracks().length&&audioTrack&&localVideo.srcObject.addTrack(audioTrack),logger.info("Switch camera to "+cam),resolve(cam)})).catch((function(reason){logger.error("webrtc",reason),reject(reason)}))}})):reject(constants.ERROR_INFO.CAN_NOT_SWITCH_CAM)}))},exports.switchMic=function(deviceId){return new Promise((function(resolve,reject){localVideo&&localVideo.srcObject&&mics.length>1&&!customStream?connection.getSenders().forEach((function(sender){if("video"!==sender.track.kind){switchMicCount=(switchMicCount+1)%mics.length,sender.track.stop(),microphoneGain&&microphoneGain.release();var mic="undefined"!=typeof deviceId?deviceId:mics[switchMicCount].id,clonedConstraints=Object.assign({},constraints);clonedConstraints.audio.deviceId={exact:mic},clonedConstraints.video=!1,navigator.mediaDevices.getUserMedia(clonedConstraints).then((function(newStream){if(microphoneGain){var currentGain=microphoneGain.gain.value;(microphoneGain=createGainNode(newStream)).gain.value=currentGain}var newAudioTrack=newStream.getAudioTracks()[0];newAudioTrack.enabled=localVideo.srcObject.getAudioTracks()[0].enabled,currentAudioTrack=newAudioTrack;var videoTrack=localVideo.srcObject.getVideoTracks()[0];if(systemSoundTrack){var mixedTrack=mixAudioTracks(new MediaStream([newAudioTrack]),new MediaStream([systemSoundTrack]));mixedTrack.enabled=newAudioTrack.enabled,sender.replaceTrack(mixedTrack),localVideo.srcObject=new MediaStream([mixedTrack])}else sender.replaceTrack(newAudioTrack),localVideo.srcObject=newStream;videoTrack&&localVideo.srcObject.addTrack(videoTrack),logger.info("Switch mic to "+mic),resolve(mic)})).catch((function(reason){logger.error("webrtc",reason),reject(reason)}))}})):reject(constants.ERROR_INFO.CAN_NOT_SWITCH_MIC)}))},exports.switchToScreen=function(source,woExtension){return new Promise((function(resolve,reject){if(!screenShare){var clonedConstraints={video:Object.assign({},constraints.video),audio:Object.assign({},constraints.audio)};if("firefox"===browserDetails.browser&&(clonedConstraints.video.mediaSource=source),window.chrome&&woExtension)return void getScreenDeviceIdWoExtension(clonedConstraints).then((function(screenSharingConstraints){navigator.mediaDevices.getDisplayMedia(screenSharingConstraints).then((function(stream){processScreenStream(stream,resolve)})).catch(reject)}));getScreenDeviceId(clonedConstraints).then((function(screenSharingConstraints){clonedConstraints.sourceId=screenSharingConstraints.sourceId,screenSharingConstraints.audioMandatory?clonedConstraints.audio={mandatory:screenSharingConstraints.audioMandatory,optional:[]}:delete clonedConstraints.audio,"firefox"==browserDetails.browser?clonedConstraints.video=screenSharingConstraints:"chrome"==browserDetails.browser&&(delete clonedConstraints.video,clonedConstraints.video={mandatory:screenSharingConstraints.mandatory}),navigator.mediaDevices.getUserMedia(clonedConstraints).then((function(stream){processScreenStream(stream,resolve)})).catch((function(reason){logger.error(reason),reject(reason)}))})).catch((function(reason){logger.error(reason),reject(reason)}))}}))},exports.switchToCam=function(){screenShare&&connection.getSenders().forEach((function(sender){"audio"!==sender.track.kind&&(currentVideoTrack.enabled=sender.track.enabled,sender.track.stop(),localVideo.srcObject=new MediaStream([currentVideoTrack]),sender.replaceTrack(currentVideoTrack),currentAudioTrack&&connection.getSenders().forEach((function(sender){"video"!==sender.track.kind&&(systemSoundTrack&&(currentAudioTrack.enabled=sender.track.enabled,sender.track.stop(),systemSoundTrack.stop(),systemSoundTrack=null,sender.replaceTrack(currentAudioTrack)),localVideo.srcObject.addTrack(currentAudioTrack))})))})),logger.info("Switch to cam"),screenShare=!1},connections[id]=exports,resolve(exports)}))},getMediaAccess:function(constraints,display,disableConstraintsNormalization,useCanvas){return new Promise((function(resolve,reject){constraints||(constraints=defaultConstraints),disableConstraintsNormalization||(constraints=function(constraints){var customStream=constraints.customStream;if((constraints=JSON.parse(JSON.stringify(constraints))).customStream=customStream,constraints.video&&(!0===constraints.video&&(constraints.video={}),"object"===_typeof(constraints.video))){var width=constraints.video.width,height=constraints.video.height;"safari"==browserDetails.browser?width&&height?"object"===_typeof(width)&&"object"===_typeof(height)||(constraints.video.width={min:width,max:width},constraints.video.height={min:height,max:height}):(constraints.video.width={min:320,max:640},constraints.video.height={min:180,max:360}):(isNaN(width)||0===width||isNaN(height)||0===height)&&(constraints.video.width=320,constraints.video.height=240);var frameRate=constraints.video.frameRate&&0!=constraints.video.frameRate?constraints.video.frameRate:30;constraints.video.frameRate={ideal:frameRate}}constraints.audio&&constraints.audio.stereo&&(constraints.audio.echoCancellation=!1,constraints.audio.googEchoCancellation=!1);return constraints}(constraints));var cacheInstance=getCacheInstance(display);if(cacheInstance&&cacheInstance.srcObject&&JSON.stringify(display.mediaTrackConstraints)==JSON.stringify(constraints)&&!constraints.customStream)resolve(display);else if(display.mediaTrackConstraints=constraints,releaseMedia(display),constraints.video||constraints.audio||constraints.customStream)if(constraints.video&&constraints.video.type&&"screen"==constraints.video.type){if(delete constraints.video.type,screenCaptureSupportedBrowsers()&&constraints.video.withoutExtension)return void getScreenDeviceIdWoExtension(constraints).then((function(screenSharingConstraints){!function(constraints,requestAudioConstraints){navigator.mediaDevices.getDisplayMedia(constraints).then((function(stream){loadVideo(display,stream,!0,requestAudioConstraints,resolve,constraints)})).catch(reject)}(screenSharingConstraints,constraints.audio)}));var requestAudioConstraints=null;getScreenDeviceId(constraints).then((function(screenSharingConstraints){for(var prop in constraints.sourceId=screenSharingConstraints.sourceId,requestAudioConstraints=constraints.audio,screenSharingConstraints.audioMandatory?constraints.audio={mandatory:screenSharingConstraints.audioMandatory,optional:[]}:window.chrome&&(constraints.audio=!1),delete screenSharingConstraints.audioMandatory,delete screenSharingConstraints.sourceId,screenSharingConstraints)screenSharingConstraints.hasOwnProperty(prop)&&(constraints.video[prop]=screenSharingConstraints[prop]);"chrome"==browserDetails.browser&&(delete constraints.video.frameRate,delete constraints.video.height,delete constraints.video.width,delete constraints.systemSound),getAccess(constraints,!0,requestAudioConstraints)}),reject)}else getAccess(constraints);else resolve(display);function getAccess(constraints,screenShare,requestAudioConstraints){if(logger.info("webrtc",constraints),constraints.customStream)if(constraints.audio||constraints.video){var normalizedConstraints={audio:!!constraints.audio&&constraints.audio,video:!!constraints.video&&constraints.video};navigator.getUserMedia(normalizedConstraints,(function(stream){stream.getTracks().forEach((function(track){constraints.customStream.addTrack(track)})),loadVideo(display,constraints.customStream,screenShare,requestAudioConstraints,resolve,constraints)}),reject)}else loadVideo(display,constraints.customStream,screenShare,requestAudioConstraints,resolve,constraints);else listDevices(!1).then((function(devices){devices.video.forEach((function(device){videoCams.push(device)})),devices.audio.forEach((function(device){mics.push(device)})),navigator.getUserMedia(constraints,(function(stream){loadVideo(display,stream,screenShare,requestAudioConstraints,resolve,constraints,useCanvas)}),reject)}),reject)}}))},releaseMedia:releaseMedia,listDevices:listDevices,playFirstSound:function(){if(audioContext){for(var buffer=audioContext.createBuffer(1,441,44100),output=buffer.getChannelData(0),i=0;i<output.length;i++)output[i]=0;var source=audioContext.createBufferSource();return source.buffer=buffer,source.connect(audioContext.destination),source.start?source.start(0):source.play?source.play(0):source.noteOn&&source.noteOn(0),!0}return!1},playFirstVideo:function(display,isLocal,src){return new Promise((function(resolve,reject){if(!getCacheInstance(display)){var video=document.createElement("video");if(video.setAttribute("playsinline",""),video.setAttribute("webkit-playsinline",""),video.id=uuid_v1()+(isLocal?"-LOCAL_CACHED_VIDEO":"-REMOTE_CACHED_VIDEO"),src)return video.src=src,void video.play().then((function(){display.appendChild(video),resolve()})).catch((function(){logger.info("webrtc","Autoplay detected! Trying to play a video with a muted sound..."),video.muted=!0,video.play().then((function(){display.appendChild(video),resolve()})),video.onsuspend=function(event){reject()}}))}resolve()}))},available:function(){return"getUserMedia"in navigator&&"RTCPeerConnection"in window},configure:function(configuration){extensionId=configuration.extensionId,defaultConstraints=configuration.constraints,audioContext=configuration.audioContext,logger=configuration.logger,createMicGainNode="undefined"==typeof configuration.createMicGainNode||configuration.createMicGainNode,logger.info("webrtc","Initialized")}}},{"./constants":26,"./util":29,"uuid/v1":10,"webrtc-adapter":11}]},{},[27])(27)}));

ZeroDay Forums Mini