(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o0&&this._events[type].length>m){this._events[type].warned=true;console.error("(node) warning: possible EventEmitter memory "+"leak detected. %d listeners added. "+"Use emitter.setMaxListeners() to increase limit.",this._events[type].length);if(typeof console.trace==="function"){console.trace()}}}return this};EventEmitter.prototype.on=EventEmitter.prototype.addListener;EventEmitter.prototype.once=function(type,listener){if(!isFunction(listener))throw TypeError("listener must be a function");var fired=false;function g(){this.removeListener(type,g);if(!fired){fired=true;listener.apply(this,arguments)}}g.listener=listener;this.on(type,g);return this};EventEmitter.prototype.removeListener=function(type,listener){var list,position,length,i;if(!isFunction(listener))throw TypeError("listener must be a function");if(!this._events||!this._events[type])return this;list=this._events[type];length=list.length;position=-1;if(list===listener||isFunction(list.listener)&&list.listener===listener){delete this._events[type];if(this._events.removeListener)this.emit("removeListener",type,listener)}else if(isObject(list)){for(i=length;i-- >0;){if(list[i]===listener||list[i].listener&&list[i].listener===listener){position=i;break}}if(position<0)return this;if(list.length===1){list.length=0;delete this._events[type]}else{list.splice(position,1)}if(this._events.removeListener)this.emit("removeListener",type,listener)}return this};EventEmitter.prototype.removeAllListeners=function(type){var key,listeners;if(!this._events)return this;if(!this._events.removeListener){if(arguments.length===0)this._events={};else if(this._events[type])delete this._events[type];return this}if(arguments.length===0){for(key in this._events){if(key==="removeListener")continue;this.removeAllListeners(key)}this.removeAllListeners("removeListener");this._events={};return this}listeners=this._events[type];if(isFunction(listeners)){this.removeListener(type,listeners)}else if(listeners){while(listeners.length)this.removeListener(type,listeners[listeners.length-1])}delete this._events[type];return this};EventEmitter.prototype.listeners=function(type){var ret;if(!this._events||!this._events[type])ret=[];else if(isFunction(this._events[type]))ret=[this._events[type]];else ret=this._events[type].slice();return ret};EventEmitter.prototype.listenerCount=function(type){if(this._events){var evlistener=this._events[type];if(isFunction(evlistener))return 1;else if(evlistener)return evlistener.length}return 0};EventEmitter.listenerCount=function(emitter,type){return emitter.listenerCount(type)};function isFunction(arg){return typeof arg==="function"}function isNumber(arg){return typeof arg==="number"}function isObject(arg){return typeof arg==="object"&&arg!==null}function isUndefined(arg){return arg===void 0}},{}],2:[function(require,module,exports){"use strict";var normalice=require("normalice");var freeice=module.exports=function(opts){var servers={stun:(opts||{}).stun||require("./stun.json"),turn:(opts||{}).turn||require("./turn.json")};var stunCount=(opts||{}).stunCount||2;var turnCount=(opts||{}).turnCount||0;var selected;function getServers(type,count){var out=[];var input=[].concat(servers[type]);var idx;while(input.length&&out.lengthmaxVolume&&fftBins[i]<0){maxVolume=fftBins[i]}}return maxVolume}var audioContextType;if(typeof window!=="undefined"){audioContextType=window.AudioContext||window.webkitAudioContext}var audioContext=null;module.exports=function(stream,options){var harker=new WildEmitter;if(!audioContextType)return harker;var options=options||{},smoothing=options.smoothing||.1,interval=options.interval||50,threshold=options.threshold,play=options.play,history=options.history||10,running=true;if(!audioContext){audioContext=new audioContextType}var sourceNode,fftBins,analyser;analyser=audioContext.createAnalyser();analyser.fftSize=512;analyser.smoothingTimeConstant=smoothing;fftBins=new Float32Array(analyser.frequencyBinCount);if(stream.jquery)stream=stream[0];if(stream instanceof HTMLAudioElement||stream instanceof HTMLVideoElement){sourceNode=audioContext.createMediaElementSource(stream);if(typeof play==="undefined")play=true;threshold=threshold||-50}else{sourceNode=audioContext.createMediaStreamSource(stream);threshold=threshold||-50}sourceNode.connect(analyser);if(play)analyser.connect(audioContext.destination);harker.speaking=false;harker.setThreshold=function(t){threshold=t};harker.setInterval=function(i){interval=i};harker.stop=function(){running=false;harker.emit("volume_change",-100,threshold);if(harker.speaking){harker.speaking=false;harker.emit("stopped_speaking")}analyser.disconnect();sourceNode.disconnect()};harker.speakingHistory=[];for(var i=0;ithreshold&&!harker.speaking){for(var i=harker.speakingHistory.length-3;i=2){harker.speaking=true;harker.emit("speaking")}}else if(currentVolumethreshold));looper()},interval)};looper();return harker}},{wildemitter:36}],6:[function(require,module,exports){if(typeof Object.create==="function"){module.exports=function inherits(ctor,superCtor){ctor.super_=superCtor;ctor.prototype=Object.create(superCtor.prototype,{constructor:{value:ctor,enumerable:false,writable:true,configurable:true}})}}else{module.exports=function inherits(ctor,superCtor){ctor.super_=superCtor;var TempCtor=function(){};TempCtor.prototype=superCtor.prototype;ctor.prototype=new TempCtor;ctor.prototype.constructor=ctor}}},{}],7:[function(require,module,exports){(function(isNode){var Public=function(clone){return merge(clone===true,false,arguments)},publicName="merge";Public.recursive=function(clone){return merge(clone===true,true,arguments)};Public.clone=function(input){var output=input,type=typeOf(input),index,size;if(type==="array"){output=[];size=input.length;for(index=0;index1){url=parts[1];parts=parts[0].split(":");output.username=parts[0];output.credential=(input||{}).credential||parts[1]||""}output.url=protocol+url;output.urls=[output.url];return output}},{}],9:[function(require,module,exports){"use strict";var SDPUtils=require("sdp");function writeMediaSection(transceiver,caps,type,stream,dtlsRole){var sdp=SDPUtils.writeRtpDescription(transceiver.kind,caps);sdp+=SDPUtils.writeIceParameters(transceiver.iceGatherer.getLocalParameters());sdp+=SDPUtils.writeDtlsParameters(transceiver.dtlsTransport.getLocalParameters(),type==="offer"?"actpass":dtlsRole||"active");sdp+="a=mid:"+transceiver.mid+"\r\n";if(transceiver.rtpSender&&transceiver.rtpReceiver){sdp+="a=sendrecv\r\n"}else if(transceiver.rtpSender){sdp+="a=sendonly\r\n"}else if(transceiver.rtpReceiver){sdp+="a=recvonly\r\n"}else{sdp+="a=inactive\r\n"}if(transceiver.rtpSender){var msid="msid:"+(stream?stream.id:"-")+" "+transceiver.rtpSender.track.id+"\r\n";sdp+="a="+msid;sdp+="a=ssrc:"+transceiver.sendEncodingParameters[0].ssrc+" "+msid;if(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"}}sdp+="a=ssrc:"+transceiver.sendEncodingParameters[0].ssrc+" cname:"+SDPUtils.localCName+"\r\n";if(transceiver.rtpSender&&transceiver.sendEncodingParameters[0].rtx){sdp+="a=ssrc:"+transceiver.sendEncodingParameters[0].rtx.ssrc+" cname:"+SDPUtils.localCName+"\r\n"}return sdp}function filterIceServers(iceServers,edgeVersion){var hasTurn=false;iceServers=JSON.parse(JSON.stringify(iceServers));return iceServers.filter(function(server){if(server&&(server.urls||server.url)){var urls=server.urls||server.url;if(server.url&&!server.urls){console.warn("RTCIceServer.url is deprecated! Use urls instead.")}var isString=typeof urls==="string";if(isString){urls=[urls]}urls=urls.filter(function(url){var validTurn=url.indexOf("turn:")===0&&url.indexOf("transport=udp")!==-1&&url.indexOf("turn:[")===-1&&!hasTurn;if(validTurn){hasTurn=true;return true}return url.indexOf("stun:")===0&&edgeVersion>=14393&&url.indexOf("?transport=udp")===-1});delete server.url;server.urls=isString?urls[0]:urls;return!!urls.length}})}function getCommonCapabilities(localCapabilities,remoteCapabilities){var commonCapabilities={codecs:[],headerExtensions:[],fecMechanisms:[]};var findCodecByPayloadType=function(pt,codecs){pt=parseInt(pt,10);for(var i=0;i0;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=undefined;this._isClosed=false};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.onicegatheringstatechange=null;RTCPeerConnection.prototype.onnegotiationneeded=null;RTCPeerConnection.prototype.ondatachannel=null;RTCPeerConnection.prototype._dispatchEvent=function(name,event){if(this._isClosed){return}this.dispatchEvent(event);if(typeof this["on"+name]==="function"){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){var hasBundleTransport=this.transceivers.length>0;var 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:true};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}this.transceivers.push(transceiver);return transceiver};RTCPeerConnection.prototype.addTrack=function(track,stream){if(this._isClosed){throw makeError("InvalidStateError","Attempted to call addTrack on a closed peerconnection.")}var alreadyExists=this.transceivers.find(function(s){return s.track===track});if(alreadyExists){throw makeError("InvalidAccessError","Track already exists.")}var transceiver;for(var i=0;i=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;var localStreams=this.transceivers.map(function(t){return t.stream});if(localStreams.indexOf(stream)===-1&&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});if(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}else if(this._iceGatherers.length){return this._iceGatherers.shift()}var iceGatherer=new window.RTCIceGatherer({iceServers:this._config.iceServers,gatherPolicy:this._config.iceTransportPolicy});Object.defineProperty(iceGatherer,"state",{value:"new",writable:true});this.transceivers[sdpMLineIndex].bufferedCandidateEvents=[];this.transceivers[sdpMLineIndex].bufferCandidates=function(event){var end=!event.candidate||Object.keys(event.candidate).length===0;iceGatherer.state=end?"completed":"gathering";if(pc.transceivers[sdpMLineIndex].bufferedCandidateEvents!==null){pc.transceivers[sdpMLineIndex].bufferedCandidateEvents.push(event)}};iceGatherer.addEventListener("localcandidate",this.transceivers[sdpMLineIndex].bufferCandidates);return iceGatherer};RTCPeerConnection.prototype._gather=function(mid,sdpMLineIndex){var pc=this;var iceGatherer=this.transceivers[sdpMLineIndex].iceGatherer;if(iceGatherer.onlocalcandidate){return}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){return}var event=new Event("icecandidate");event.candidate={sdpMid:mid,sdpMLineIndex:sdpMLineIndex};var cand=evt.candidate;var end=!cand||Object.keys(cand).length===0;if(end){if(iceGatherer.state==="new"||iceGatherer.state==="gathering"){iceGatherer.state="completed"}}else{if(iceGatherer.state==="new"){iceGatherer.state="gathering"}cand.component=1;var serializedCandidate=SDPUtils.writeCandidate(cand);event.candidate=Object.assign(event.candidate,SDPUtils.parseCandidate(serializedCandidate));event.candidate.candidate=serializedCandidate}var sections=SDPUtils.splitSections(pc.localDescription.sdp);if(!end){sections[event.candidate.sdpMLineIndex+1]+="a="+event.candidate.candidate+"\r\n"}else{sections[event.candidate.sdpMLineIndex+1]+="a=end-of-candidates\r\n"}pc.localDescription.sdp=sections.join("");var complete=pc.transceivers.every(function(transceiver){return transceiver.iceGatherer&&transceiver.iceGatherer.state==="completed"});if(pc.iceGatheringState!=="gathering"){pc.iceGatheringState="gathering";pc._emitGatheringStateChange()}if(!end){pc._dispatchEvent("icecandidate",event)}if(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;var iceTransport=new window.RTCIceTransport(null);iceTransport.onicestatechange=function(){pc._updateConnectionState()};var dtlsTransport=new window.RTCDtlsTransport(iceTransport);dtlsTransport.ondtlsstatechange=function(){pc._updateConnectionState()};dtlsTransport.onerror=function(){Object.defineProperty(dtlsTransport,"state",{value:"failed",writable:true});pc._updateConnectionState()};return{iceTransport:iceTransport,dtlsTransport:dtlsTransport}};RTCPeerConnection.prototype._disposeIceAndDtlsTransports=function(sdpMLineIndex){var iceGatherer=this.transceivers[sdpMLineIndex].iceGatherer;if(iceGatherer){delete iceGatherer.onlocalcandidate;delete this.transceivers[sdpMLineIndex].iceGatherer}var iceTransport=this.transceivers[sdpMLineIndex].iceTransport;if(iceTransport){delete iceTransport.onicestatechange;delete this.transceivers[sdpMLineIndex].iceTransport}var dtlsTransport=this.transceivers[sdpMLineIndex].dtlsTransport;if(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);if(send&&transceiver.rtpSender){params.encodings=transceiver.sendEncodingParameters;params.rtcp={cname:SDPUtils.localCName,compound:transceiver.rtcpParameters.compound};if(transceiver.recvEncodingParameters.length){params.rtcp.ssrc=transceiver.recvEncodingParameters[0].ssrc}transceiver.rtpSender.send(params)}if(recv&&transceiver.rtpReceiver&¶ms.codecs.length>0){if(transceiver.kind==="video"&&transceiver.recvEncodingParameters&&edgeVersion<15019){transceiver.recvEncodingParameters.forEach(function(p){delete p.rtx})}if(transceiver.recvEncodingParameters.length){params.encodings=transceiver.recvEncodingParameters}params.rtcp={compound:transceiver.rtcpParameters.compound};if(transceiver.rtcpParameters.cname){params.rtcp.cname=transceiver.rtcpParameters.cname}if(transceiver.sendEncodingParameters.length){params.rtcp.ssrc=transceiver.sendEncodingParameters[0].ssrc}transceiver.rtpReceiver.receive(params)}};RTCPeerConnection.prototype.setLocalDescription=function(description){var pc=this;if(["offer","answer"].indexOf(description.type)===-1){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))}var sections;var sessionpart;if(description.type==="offer"){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(description.type==="answer"){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];var iceGatherer=transceiver.iceGatherer;var iceTransport=transceiver.iceTransport;var dtlsTransport=transceiver.dtlsTransport;var localCapabilities=transceiver.localCapabilities;var remoteCapabilities=transceiver.remoteCapabilities;var rejected=SDPUtils.isRejected(mediaSection)&&SDPUtils.matchPrefix(mediaSection,"a=bundle-only").length===0;if(!rejected&&!transceiver.isDatachannel){var remoteIceParameters=SDPUtils.getIceParameters(mediaSection,sessionpart);var remoteDtlsParameters=SDPUtils.getDtlsParameters(mediaSection,sessionpart);if(isIceLite){remoteDtlsParameters.role="server"}if(!pc.usingBundle||sdpMLineIndex===0){pc._gather(transceiver.mid,sdpMLineIndex);if(iceTransport.state==="new"){iceTransport.start(iceGatherer,remoteIceParameters,isIceLite?"controlling":"controlled")}if(dtlsTransport.state==="new"){dtlsTransport.start(remoteDtlsParameters)}}var params=getCommonCapabilities(localCapabilities,remoteCapabilities);pc._transceive(transceiver,params.codecs.length>0,false)}})}pc.localDescription={type:description.type,sdp:description.sdp};if(description.type==="offer"){pc._updateSignalingState("have-local-offer")}else{pc._updateSignalingState("stable")}return Promise.resolve()};RTCPeerConnection.prototype.setRemoteDescription=function(description){var pc=this;if(["offer","answer"].indexOf(description.type)===-1){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=[];var sections=SDPUtils.splitSections(description.sdp);var sessionpart=sections.shift();var isIceLite=SDPUtils.matchPrefix(sessionpart,"a=ice-lite").length>0;var usingBundle=SDPUtils.matchPrefix(sessionpart,"a=group:BUNDLE ").length>0;pc.usingBundle=usingBundle;var iceOptions=SDPUtils.matchPrefix(sessionpart,"a=ice-options:")[0];if(iceOptions){pc.canTrickleIceCandidates=iceOptions.substr(14).split(" ").indexOf("trickle")>=0}else{pc.canTrickleIceCandidates=false}sections.forEach(function(mediaSection,sdpMLineIndex){var lines=SDPUtils.splitLines(mediaSection);var kind=SDPUtils.getKind(mediaSection);var rejected=SDPUtils.isRejected(mediaSection)&&SDPUtils.matchPrefix(mediaSection,"a=bundle-only").length===0;var protocol=lines[0].substr(2).split(" ")[2];var direction=SDPUtils.getDirection(mediaSection,sessionpart);var remoteMsid=SDPUtils.parseMsid(mediaSection);var mid=SDPUtils.getMid(mediaSection)||SDPUtils.generateIdentifier();if(kind==="application"&&protocol==="DTLS/SCTP"){pc.transceivers[sdpMLineIndex]={mid:mid,isDatachannel:true};return}var transceiver;var iceGatherer;var iceTransport;var dtlsTransport;var rtpReceiver;var sendEncodingParameters;var recvEncodingParameters;var localCapabilities;var track;var remoteCapabilities=SDPUtils.parseRtpParameters(mediaSection);var remoteIceParameters;var remoteDtlsParameters;if(!rejected){remoteIceParameters=SDPUtils.getIceParameters(mediaSection,sessionpart);remoteDtlsParameters=SDPUtils.getDtlsParameters(mediaSection,sessionpart);remoteDtlsParameters.role="client"}recvEncodingParameters=SDPUtils.parseRtpEncodingParameters(mediaSection);var rtcpParameters=SDPUtils.parseRtcpParameters(mediaSection);var isComplete=SDPUtils.matchPrefix(mediaSection,"a=end-of-candidates",sessionpart).length>0;var cands=SDPUtils.matchPrefix(mediaSection,"a=candidate:").map(function(cand){return SDPUtils.parseCandidate(cand)}).filter(function(cand){return cand.component===1});if((description.type==="offer"||description.type==="answer")&&!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;if(pc.transceivers[sdpMLineIndex].rtpSender){pc.transceivers[sdpMLineIndex].rtpSender.setTransport(pc.transceivers[0].dtlsTransport)}if(pc.transceivers[sdpMLineIndex].rtpReceiver){pc.transceivers[sdpMLineIndex].rtpReceiver.setTransport(pc.transceivers[0].dtlsTransport)}}if(description.type==="offer"&&!rejected){transceiver=pc.transceivers[sdpMLineIndex]||pc._createTransceiver(kind);transceiver.mid=mid;if(!transceiver.iceGatherer){transceiver.iceGatherer=pc._createIceGatherer(sdpMLineIndex,usingBundle)}if(cands.length&&transceiver.iceTransport.state==="new"){if(isComplete&&(!usingBundle||sdpMLineIndex===0)){transceiver.iceTransport.setRemoteCandidates(cands)}else{cands.forEach(function(candidate){maybeAddCandidate(transceiver.iceTransport,candidate)})}}localCapabilities=window.RTCRtpReceiver.getCapabilities(kind);if(edgeVersion<15019){localCapabilities.codecs=localCapabilities.codecs.filter(function(codec){return codec.name!=="rtx"})}sendEncodingParameters=transceiver.sendEncodingParameters||[{ssrc:(2*sdpMLineIndex+2)*1001}];var isNewTrack=false;if(direction==="sendrecv"||direction==="sendonly"){isNewTrack=!transceiver.rtpReceiver;rtpReceiver=transceiver.rtpReceiver||new window.RTCRtpReceiver(transceiver.dtlsTransport,kind);if(isNewTrack){var stream;track=rtpReceiver.track;if(remoteMsid&&remoteMsid.stream==="-"){}else if(remoteMsid){if(!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]}else{if(!streams.default){streams.default=new window.MediaStream}stream=streams.default}if(stream){addTrackToStreamAndFireEvent(track,stream);transceiver.associatedRemoteMediaStreams.push(stream)}receiverList.push([track,rtpReceiver,stream])}}else if(transceiver.rtpReceiver&&transceiver.rtpReceiver.track){transceiver.associatedRemoteMediaStreams.forEach(function(s){var nativeTrack=s.getTracks().find(function(t){return t.id===transceiver.rtpReceiver.track.id});if(nativeTrack){removeTrackFromStreamAndFireEvent(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],false,isNewTrack)}else if(description.type==="answer"&&!rejected){transceiver=pc.transceivers[sdpMLineIndex];iceGatherer=transceiver.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;if(cands.length&&iceTransport.state==="new"){if((isIceLite||isComplete)&&(!usingBundle||sdpMLineIndex===0)){iceTransport.setRemoteCandidates(cands)}else{cands.forEach(function(candidate){maybeAddCandidate(transceiver.iceTransport,candidate)})}}if(!usingBundle||sdpMLineIndex===0){if(iceTransport.state==="new"){iceTransport.start(iceGatherer,remoteIceParameters,"controlling")}if(dtlsTransport.state==="new"){dtlsTransport.start(remoteDtlsParameters)}}pc._transceive(transceiver,direction==="sendrecv"||direction==="recvonly",direction==="sendrecv"||direction==="sendonly");if(rtpReceiver&&(direction==="sendrecv"||direction==="sendonly")){track=rtpReceiver.track;if(remoteMsid){if(!streams[remoteMsid.stream]){streams[remoteMsid.stream]=new window.MediaStream}addTrackToStreamAndFireEvent(track,streams[remoteMsid.stream]);receiverList.push([track,rtpReceiver,streams[remoteMsid.stream]])}else{if(!streams.default){streams.default=new window.MediaStream}addTrackToStreamAndFireEvent(track,streams.default);receiverList.push([track,rtpReceiver,streams.default])}}else{delete transceiver.rtpReceiver}}});if(pc._dtlsRole===undefined){pc._dtlsRole=description.type==="offer"?"active":"passive"}pc.remoteDescription={type:description.type,sdp:description.sdp};if(description.type==="offer"){pc._updateSignalingState("have-remote-offer")}else{pc._updateSignalingState("stable")}Object.keys(streams).forEach(function(sid){var stream=streams[sid];if(stream.getTracks().length){if(pc.remoteStreams.indexOf(stream)===-1){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];var receiver=item[1];if(stream.id!==item[2].id){return}fireAddTrack(pc,track,receiver,[stream])})}});receiverList.forEach(function(item){if(item[2]){return}fireAddTrack(pc,item[0],item[1],[])});window.setTimeout(function(){if(!(pc&&pc.transceivers)){return}pc.transceivers.forEach(function(transceiver){if(transceiver.iceTransport&&transceiver.iceTransport.state==="new"&&transceiver.iceTransport.getRemoteCandidates().length>0){console.warn("Timeout for addRemoteCandidate. Consider sending "+"an end-of-candidates notification");transceiver.iceTransport.addRemoteCandidate({})}})},4e3);return Promise.resolve()};RTCPeerConnection.prototype.close=function(){this.transceivers.forEach(function(transceiver){if(transceiver.iceTransport){transceiver.iceTransport.stop()}if(transceiver.dtlsTransport){transceiver.dtlsTransport.stop()}if(transceiver.rtpSender){transceiver.rtpSender.stop()}if(transceiver.rtpReceiver){transceiver.rtpReceiver.stop()}});this._isClosed=true;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;if(this.signalingState!=="stable"||this.needNegotiation===true){return}this.needNegotiation=true;window.setTimeout(function(){if(pc.needNegotiation){pc.needNegotiation=false;var event=new Event("negotiationneeded");pc._dispatchEvent("negotiationneeded",event)}},0)};RTCPeerConnection.prototype._updateConnectionState=function(){var newState;var states={new:0,closed:0,connecting:0,checking:0,connected:0,completed:0,disconnected:0,failed:0};this.transceivers.forEach(function(transceiver){states[transceiver.iceTransport.state]++;states[transceiver.dtlsTransport.state]++});states.connected+=states.completed;newState="new";if(states.failed>0){newState="failed"}else if(states.connecting>0||states.checking>0){newState="connecting"}else if(states.disconnected>0){newState="disconnected"}else if(states.new>0){newState="new"}else if(states.connected>0||states.completed>0){newState="connected"}if(newState!==this.iceConnectionState){this.iceConnectionState=newState;var event=new Event("iceconnectionstatechange");this._dispatchEvent("iceconnectionstatechange",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 t.kind==="audio"}).length;var numVideoTracks=pc.transceivers.filter(function(t){return t.kind==="video"}).length;var offerOptions=arguments[0];if(offerOptions){if(offerOptions.mandatory||offerOptions.optional){throw new TypeError("Legacy mandatory/optional constraints not supported.")}if(offerOptions.offerToReceiveAudio!==undefined){if(offerOptions.offerToReceiveAudio===true){numAudioTracks=1}else if(offerOptions.offerToReceiveAudio===false){numAudioTracks=0}else{numAudioTracks=offerOptions.offerToReceiveAudio}}if(offerOptions.offerToReceiveVideo!==undefined){if(offerOptions.offerToReceiveVideo===true){numVideoTracks=1}else if(offerOptions.offerToReceiveVideo===false){numVideoTracks=0}else{numVideoTracks=offerOptions.offerToReceiveVideo}}}pc.transceivers.forEach(function(transceiver){if(transceiver.kind==="audio"){numAudioTracks--;if(numAudioTracks<0){transceiver.wantReceive=false}}else if(transceiver.kind==="video"){numVideoTracks--;if(numVideoTracks<0){transceiver.wantReceive=false}}});while(numAudioTracks>0||numVideoTracks>0){if(numAudioTracks>0){pc._createTransceiver("audio");numAudioTracks--}if(numVideoTracks>0){pc._createTransceiver("video");numVideoTracks--}}var sdp=SDPUtils.writeSessionBoilerplate(pc._sdpSessionId,pc._sdpSessionVersion++);pc.transceivers.forEach(function(transceiver,sdpMLineIndex){var track=transceiver.track;var kind=transceiver.kind;var mid=transceiver.mid||SDPUtils.generateIdentifier();transceiver.mid=mid;if(!transceiver.iceGatherer){transceiver.iceGatherer=pc._createIceGatherer(sdpMLineIndex,pc.usingBundle)}var localCapabilities=window.RTCRtpSender.getCapabilities(kind);if(edgeVersion<15019){localCapabilities.codecs=localCapabilities.codecs.filter(function(codec){return codec.name!=="rtx"})}localCapabilities.codecs.forEach(function(codec){if(codec.name==="H264"&&codec.parameters["level-asymmetry-allowed"]===undefined){codec.parameters["level-asymmetry-allowed"]="1"}});var sendEncodingParameters=transceiver.sendEncodingParameters||[{ssrc:(2*sdpMLineIndex+1)*1001}];if(track){if(edgeVersion>=15019&&kind==="video"&&!sendEncodingParameters[0].rtx){sendEncodingParameters[0].rtx={ssrc:sendEncodingParameters[0].ssrc+1}}}if(transceiver.wantReceive){transceiver.rtpReceiver=new window.RTCRtpReceiver(transceiver.dtlsTransport,kind)}transceiver.localCapabilities=localCapabilities;transceiver.sendEncodingParameters=sendEncodingParameters});if(pc._config.bundlePolicy!=="max-compat"){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";if(transceiver.iceGatherer&&pc.iceGatheringState!=="new"&&(sdpMLineIndex===0||!pc.usingBundle)){transceiver.iceGatherer.getLocalCandidates().forEach(function(cand){cand.component=1;sdp+="a="+SDPUtils.writeCandidate(cand)+"\r\n"});if(transceiver.iceGatherer.state==="completed"){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"))}var sdp=SDPUtils.writeSessionBoilerplate(pc._sdpSessionId,pc._sdpSessionVersion++);if(pc.usingBundle){sdp+="a=group:BUNDLE "+pc.transceivers.map(function(t){return t.mid}).join(" ")+"\r\n"}var mediaSectionsInOffer=SDPUtils.splitSections(pc.remoteDescription.sdp).length-1;pc.transceivers.forEach(function(transceiver,sdpMLineIndex){if(sdpMLineIndex+1>mediaSectionsInOffer){return}if(transceiver.isDatachannel){sdp+="m=application 0 DTLS/SCTP 5000\r\n"+"c=IN IP4 0.0.0.0\r\n"+"a=mid:"+transceiver.mid+"\r\n";return}if(transceiver.stream){var localTrack;if(transceiver.kind==="audio"){localTrack=transceiver.stream.getAudioTracks()[0]}else if(transceiver.kind==="video"){localTrack=transceiver.stream.getVideoTracks()[0]}if(localTrack){if(edgeVersion>=15019&&transceiver.kind==="video"&&!transceiver.sendEncodingParameters[0].rtx){transceiver.sendEncodingParameters[0].rtx={ssrc:transceiver.sendEncodingParameters[0].ssrc+1}}}}var commonCapabilities=getCommonCapabilities(transceiver.localCapabilities,transceiver.remoteCapabilities);var hasRtx=commonCapabilities.codecs.filter(function(c){return c.name.toLowerCase()==="rtx"}).length;if(!hasRtx&&transceiver.sendEncodingParameters[0].rtx){delete transceiver.sendEncodingParameters[0].rtx}sdp+=writeMediaSection(transceiver,commonCapabilities,"answer",transceiver.stream,pc._dtlsRole);if(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 pc=this;var sections;if(candidate&&!(candidate.sdpMLineIndex!==undefined||candidate.sdpMid)){return Promise.reject(new TypeError("sdpMLineIndex or sdpMid required"))}return new Promise(function(resolve,reject){if(!pc.remoteDescription){return reject(makeError("InvalidStateError","Can not add ICE candidate without a remote description"))}else if(!candidate||candidate.candidate===""){for(var j=0;j0?SDPUtils.parseCandidate(candidate.candidate):{};if(cand.protocol==="tcp"&&(cand.port===0||cand.port===9)){return resolve()}if(cand.component&&cand.component!==1){return resolve()}if(sdpMLineIndex===0||sdpMLineIndex>0&&transceiver.iceTransport!==pc.transceivers[0].iceTransport){if(!maybeAddCandidate(transceiver.iceTransport,cand)){return reject(makeError("OperationError","Can not add ICE candidate"))}}var candidateString=candidate.candidate.trim();if(candidateString.indexOf("a=")===0){candidateString=candidateString.substr(2)}sections=SDPUtils.splitSections(pc.remoteDescription.sdp);sections[sdpMLineIndex+1]+="a="+(cand.type?candidateString:"end-of-candidates")+"\r\n";pc.remoteDescription.sdp=sections.join("")}else{return reject(makeError("OperationError","Can not add ICE candidate"))}}resolve()})};RTCPeerConnection.prototype.getStats=function(){var promises=[];this.transceivers.forEach(function(transceiver){["rtpSender","rtpReceiver","iceGatherer","iceTransport","dtlsTransport"].forEach(function(method){if(transceiver[method]){promises.push(transceiver[method].getStats())}})});var fixStatsType=function(stat){return{inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"}[stat.type]||stat.type};return new Promise(function(resolve){var results=new Map;Promise.all(promises).then(function(res){res.forEach(function(result){Object.keys(result).forEach(function(id){result[id].type=fixStatsType(result[id]);results.set(id,result[id])})});resolve(results)})})};var methods=["createOffer","createAnswer"];methods.forEach(function(method){var nativeMethod=RTCPeerConnection.prototype[method];RTCPeerConnection.prototype[method]=function(){var args=arguments;if(typeof args[0]==="function"||typeof args[1]==="function"){return nativeMethod.apply(this,[arguments[2]]).then(function(description){if(typeof args[0]==="function"){args[0].apply(null,[description])}},function(error){if(typeof args[1]==="function"){args[1].apply(null,[error])}})}return nativeMethod.apply(this,arguments)}});methods=["setLocalDescription","setRemoteDescription","addIceCandidate"];methods.forEach(function(method){var nativeMethod=RTCPeerConnection.prototype[method];RTCPeerConnection.prototype[method]=function(){var args=arguments;if(typeof args[1]==="function"||typeof args[2]==="function"){return nativeMethod.apply(this,arguments).then(function(){if(typeof args[1]==="function"){args[1].apply(null)}},function(error){if(typeof args[2]==="function"){args[2].apply(null,[error])}})}return nativeMethod.apply(this,arguments)}});["getStats"].forEach(function(method){var nativeMethod=RTCPeerConnection.prototype[method];RTCPeerConnection.prototype[method]=function(){var args=arguments;if(typeof args[1]==="function"){return nativeMethod.apply(this,arguments).then(function(){if(typeof args[1]==="function"){args[1].apply(null)}})}return nativeMethod.apply(this,arguments)}});return RTCPeerConnection}},{sdp:18}],10:[function(require,module,exports){var grammar=module.exports={v:[{name:"version",reg:/^(\d*)$/}],o:[{name:"origin",reg:/^(\S*) (\d*) (\d*) (\S*) IP(\d) (\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\d*) (\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\d) (\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\w*) (\d*) ([\w\/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\d*) ([\w\-]*)(?:\s*\/(\d*)(?:\s*\/(\S*))?)?/,names:["payload","codec","rate","encoding"],format:function(o){return o.encoding?"rtpmap:%d %s/%s/%s":o.rate?"rtpmap:%d %s/%s":"rtpmap:%d %s"}},{push:"fmtp",reg:/^fmtp:(\d*) ([\S| ]*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\d*)(?: (\S*) IP(\d) (\S*))?/,names:["port","netType","ipVer","address"],format:function(o){return o.address!=null?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\*|\d*) trr-int (\d*)/,names:["payload","value"],format:"rtcp-fb:%d trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,names:["payload","type","subtype"],format:function(o){return o.subtype!=null?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:([\w_\/]*) (\S*)(?: (\S*))?/,names:["value","uri","config"],format:function(o){return o.config!=null?"extmap:%s %s %s":"extmap:%s %s"}},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(o){return o.sessionConfig!=null?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\w*)/,format:"setup:%s"},{name:"mid",reg:/^mid:([^\s]*)/,format:"mid:%s"},{name:"msid",reg:/^msid:(.*)/,format:"msid:%s"},{name:"ptime",reg:/^ptime:(\d*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\d*)/,format:"maxptime:%d"},{name:"direction",reg:/^(sendrecv|recvonly|sendonly|inactive)/},{name:"icelite",reg:/^(ice-lite)/},{name:"iceUfrag",reg:/^ice-ufrag:(\S*)/,format:"ice-ufrag:%s"},{name:"icePwd",reg:/^ice-pwd:(\S*)/,format:"ice-pwd:%s"},{name:"fingerprint",reg:/^fingerprint:(\S*) (\S*)/,names:["type","hash"],format:"fingerprint:%s %s"},{push:"candidates",reg:/^candidate:(\S*) (\d*) (\S*) (\d*) (\S*) (\d*) typ (\S*)(?: raddr (\S*) rport (\d*))?(?: tcptype (\S*))?(?: generation (\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","tcptype","generation"],format:function(o){var str="candidate:%s %d %s %d %s %d typ %s";str+=o.raddr!=null?" raddr %s rport %d":"%v%v";str+=o.tcptype!=null?" tcptype %s":"%v";if(o.generation!=null){str+=" generation %d"}return str}},{name:"endOfCandidates",reg:/^(end-of-candidates)/},{name:"remoteCandidates",reg:/^remote-candidates:(.*)/,format:"remote-candidates:%s"},{name:"iceOptions",reg:/^ice-options:(\S*)/,format:"ice-options:%s"},{push:"ssrcs",reg:/^ssrc:(\d*) ([\w_]*):(.*)/,names:["id","attribute","value"],format:"ssrc:%d %s:%s"},{push:"ssrcGroups",reg:/^ssrc-group:(\w*) (.*)/,names:["semantics","ssrcs"],format:"ssrc-group:%s %s"},{name:"msidSemantic",reg:/^msid-semantic:\s?(\w*) (\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{name:"rtcpRsize",reg:/^(rtcp-rsize)/},{push:"invalid",names:["value"]}]};Object.keys(grammar).forEach(function(key){var objs=grammar[key];objs.forEach(function(obj){if(!obj.reg){obj.reg=/(.*)/}if(!obj.format){obj.format="%s"}})})},{}],11:[function(require,module,exports){var parser=require("./parser");var writer=require("./writer");exports.write=writer;exports.parse=parser.parse;exports.parseFmtpConfig=parser.parseFmtpConfig;exports.parsePayloads=parser.parsePayloads;exports.parseRemoteCandidates=parser.parseRemoteCandidates},{"./parser":12,"./writer":13}],12:[function(require,module,exports){var toIntIfInt=function(v){return String(Number(v))===v?Number(v):v};var attachProperties=function(match,location,names,rawName){if(rawName&&!names){location[rawName]=toIntIfInt(match[1])}else{for(var i=0;i=len){return x}var arg=args[i];i+=1;switch(x){case"%%":return"%";case"%s":return String(arg);case"%d":return Number(arg);case"%v":return""}})};var makeLine=function(type,obj,location){var str=obj.format instanceof Function?obj.format(obj.push?location:location[obj.name]):obj.format;var args=[type+"="+str];if(obj.names){for(var i=0;i3||!session.media.every(function(m){return["video","audio","data"].indexOf(m.mid)!==-1})){console.warn("This description does not look like Plan B.");return desc}var mids=[];session.media.forEach(function(m){mids.push(m.mid)});var hasBundle=false;if(typeof session.groups!=="undefined"&&Array.isArray(session.groups)){hasBundle=session.groups.every(function(g){return g.type!=="BUNDLE"||arrayEquals.apply(g.mids.sort(),[mids.sort()])})}if(!hasBundle){var mustBeBundle=false;session.media.forEach(function(m){if(m.direction!=="inactive"){mustBeBundle=true}});if(mustBeBundle){throw new Error("Cannot convert to Unified Plan because m-lines that"+" are not bundled were found.")}}var type;if(desc.type==="answer"){type="offer"}else if(desc.type==="offer"){type="answer"}else{throw new Error("Type '"+desc.type+"' not supported.")}var cached;if(typeof this.cache[type]!=="undefined"){cached=transform.parse(this.cache[type])}var recvonlySsrcs={audio:{},video:{}};var mid2ul={};var bIdx=0;var uIdx=0;var sources2ul={};var candidates;var iceUfrag;var icePwd;var fingerprint;var payloads={};var rtcpFb={};var rtp={};session.media.forEach(function(bLine){if((typeof bLine.rtcpMux!=="string"||bLine.rtcpMux!=="rtcp-mux")&&bLine.direction!=="inactive"){throw new Error("Cannot convert to Unified Plan because m-lines "+"without the rtcp-mux attribute were found.")}if(bLine.type==="application"){mid2ul[bLine.mid]=bLine;return}var sources=bLine.sources;var ssrcGroups=bLine.ssrcGroups;var port=bLine.port;if(typeof bLine.candidates!="undefined"){if(typeof candidates!="undefined"){candidates=candidates.concat(bLine.candidates)}else{candidates=bLine.candidates}}if(typeof iceUfrag!="undefined"&&typeof bLine.iceUfrag!="undefined"&&iceUfrag!=bLine.iceUfrag){throw new Error("Only BUNDLE supported, iceUfrag must be the same for all m-lines.\n"+"\tLast iceUfrag: "+iceUfrag+"\n"+"\tNew iceUfrag: "+bLine.iceUfrag)}if(typeof bLine.iceUfrag!="undefined"){iceUfrag=bLine.iceUfrag}if(typeof icePwd!="undefined"&&typeof bLine.icePwd!="undefined"&&icePwd!=bLine.icePwd){throw new Error("Only BUNDLE supported, icePwd must be the same for all m-lines.\n"+"\tLast icePwd: "+icePwd+"\n"+"\tNew icePwd: "+bLine.icePwd)}if(typeof bLine.icePwd!="undefined"){icePwd=bLine.icePwd}if(typeof fingerprint!="undefined"&&typeof bLine.fingerprint!="undefined"&&(fingerprint.type!=bLine.fingerprint.type||fingerprint.hash!=bLine.fingerprint.hash)){throw new Error("Only BUNDLE supported, fingerprint must be the same for all m-lines.\n"+"\tLast fingerprint: "+JSON.stringify(fingerprint)+"\n"+"\tNew fingerprint: "+JSON.stringify(bLine.fingerprint))}if(typeof bLine.fingerprint!="undefined"){fingerprint=bLine.fingerprint}payloads[bLine.type]=bLine.payloads;rtcpFb[bLine.type]=bLine.rtcpFb;rtp[bLine.type]=bLine.rtp;var ssrc2group={};if(typeof ssrcGroups!=="undefined"&&Array.isArray(ssrcGroups)){ssrcGroups.forEach(function(ssrcGroup){if(typeof ssrcGroup.ssrcs!=="undefined"&&Array.isArray(ssrcGroup.ssrcs)){ssrcGroup.ssrcs.forEach(function(ssrc){if(typeof ssrc2group[ssrc]==="undefined"){ssrc2group[ssrc]=[]}ssrc2group[ssrc].push(ssrcGroup)})}})}var ssrc2ml={};if(typeof sources==="object"){delete bLine.sources;delete bLine.ssrcGroups;delete bLine.candidates;delete bLine.iceUfrag;delete bLine.icePwd;delete bLine.fingerprint;delete bLine.port;delete bLine.mid;Object.keys(sources).forEach(function(ssrc){var uLine;if(desc.type==="offer"){if(!sources[ssrc].msid){recvonlySsrcs[bLine.type][ssrc]=sources[ssrc];return}}if(typeof ssrc2group[ssrc]!=="undefined"&&Array.isArray(ssrc2group[ssrc])){ssrc2group[ssrc].some(function(ssrcGroup){return ssrcGroup.ssrcs.some(function(related){if(typeof ssrc2ml[related]==="object"){uLine=ssrc2ml[related];return true}})})}if(typeof uLine==="object"){uLine.sources[ssrc]=sources[ssrc];delete sources[ssrc].msid}else{uLine=Object.create(bLine);ssrc2ml[ssrc]=uLine;if(typeof sources[ssrc].msid!=="undefined"){uLine.msid=sources[ssrc].msid;delete sources[ssrc].msid}uLine.sources={};uLine.sources[ssrc]=sources[ssrc];uLine.ssrcGroups=ssrc2group[ssrc];if(typeof cached!=="undefined"&&typeof cached.media!=="undefined"&&Array.isArray(cached.media)){cached.media.forEach(function(m){if(typeof m.sources==="object"){Object.keys(m.sources).forEach(function(s){if(s===ssrc){uLine.mid=m.mid}})}})}if(typeof uLine.mid==="undefined"){uLine.mid=[bLine.type,"-",ssrc].join("")}uLine.candidates=candidates;uLine.iceUfrag=iceUfrag;uLine.icePwd=icePwd;uLine.fingerprint=fingerprint;uLine.port=port;mid2ul[uLine.mid]=uLine;sources2ul[uIdx]=uLine.sources;self.cache.mlU2BMap[uIdx]=bIdx;if(typeof self.cache.mlB2UMap[bIdx]==="undefined"){self.cache.mlB2UMap[bIdx]=uIdx}uIdx++}})}else{var uLine=bLine;uLine.candidates=candidates;uLine.iceUfrag=iceUfrag;uLine.icePwd=icePwd;uLine.fingerprint=fingerprint;uLine.port=port;mid2ul[uLine.mid]=uLine;self.cache.mlU2BMap[uIdx]=bIdx;if(typeof self.cache.mlB2UMap[bIdx]==="undefined"){self.cache.mlB2UMap[bIdx]=uIdx}}bIdx++});session.media=[];mids=[];if(desc.type==="answer"){for(var i=0;i0){idx=self.getFirstSendingIndexFromAnswer(type);if(idx===null){for(var i=0;iidx){var mLine=session.media[idx];Object.keys(recvonlySsrcs[type]).forEach(function(ssrc){if(mLine.sources&&mLine.sources[ssrc]){console.warn("Replacing an existing SSRC.")}if(!mLine.sources){mLine.sources={}}mLine.sources[ssrc]=recvonlySsrcs[type][ssrc]})}});if(typeof session.groups!=="undefined"){session.groups.some(function(group){if(group.type==="BUNDLE"){group.mids=mids.join(" ");return true}})}session.msidSemantic={semantic:"WMS",token:"*"};var resStr=transform.write(session);this.cache[desc.type]=resStr;return new RTCSessionDescription({type:desc.type,sdp:resStr})}},{"./array-equals":14,"./transform":17}],17:[function(require,module,exports){var transform=require("sdp-transform");exports.write=function(session,opts){if(typeof session!=="undefined"&&typeof session.media!=="undefined"&&Array.isArray(session.media)){session.media.forEach(function(mLine){if(typeof mLine.sources!=="undefined"&&Object.keys(mLine.sources).length!==0){mLine.ssrcs=[];Object.keys(mLine.sources).forEach(function(ssrc){var source=mLine.sources[ssrc];Object.keys(source).forEach(function(attribute){mLine.ssrcs.push({id:ssrc,attribute:attribute,value:source[attribute]})})});delete mLine.sources}if(typeof mLine.ssrcGroups!=="undefined"&&Array.isArray(mLine.ssrcGroups)){mLine.ssrcGroups.forEach(function(ssrcGroup){if(typeof ssrcGroup.ssrcs!=="undefined"&&Array.isArray(ssrcGroup.ssrcs)){ssrcGroup.ssrcs=ssrcGroup.ssrcs.join(" ")}})}})}if(typeof session!=="undefined"&&typeof session.groups!=="undefined"&&Array.isArray(session.groups)){session.groups.forEach(function(g){if(typeof g.mids!=="undefined"&&Array.isArray(g.mids)){g.mids=g.mids.join(" ")}})}return transform.write(session,opts)};exports.parse=function(sdp){var session=transform.parse(sdp);if(typeof session!=="undefined"&&typeof session.media!=="undefined"&&Array.isArray(session.media)){session.media.forEach(function(mLine){if(typeof mLine.ssrcs!=="undefined"&&Array.isArray(mLine.ssrcs)){mLine.sources={};mLine.ssrcs.forEach(function(ssrc){if(!mLine.sources[ssrc.id])mLine.sources[ssrc.id]={};mLine.sources[ssrc.id][ssrc.attribute]=ssrc.value});delete mLine.ssrcs}if(typeof mLine.ssrcGroups!=="undefined"&&Array.isArray(mLine.ssrcGroups)){mLine.ssrcGroups.forEach(function(ssrcGroup){if(typeof ssrcGroup.ssrcs==="string"){ssrcGroup.ssrcs=ssrcGroup.ssrcs.split(" ")}})}})}if(typeof session!=="undefined"&&typeof session.groups!=="undefined"&&Array.isArray(session.groups)){session.groups.forEach(function(g){if(typeof g.mids==="string"){g.mids=g.mids.split(" ")}})}return session}},{"sdp-transform":11}],18:[function(require,module,exports){"use strict";var SDPUtils={};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){var parts=blob.split("\nm=");return parts.map(function(part,index){return(index>0?"m="+part:part).trim()+"\r\n"})};SDPUtils.matchPrefix=function(blob,prefix){return SDPUtils.splitLines(blob).filter(function(line){return line.indexOf(prefix)===0})};SDPUtils.parseCandidate=function(line){var parts;if(line.indexOf("a=candidate:")===0){parts=line.substring(12).split(" ")}else{parts=line.substring(10).split(" ")}var candidate={foundation:parts[0],component:parseInt(parts[1],10),protocol:parts[2].toLowerCase(),priority:parseInt(parts[3],10),ip:parts[4],port:parseInt(parts[5],10),type:parts[7]};for(var i=8;i0?parts[0].split("/")[1]:"sendrecv",uri:parts[1]}};SDPUtils.writeExtmap=function(headerExtension){return"a=extmap:"+(headerExtension.id||headerExtension.preferredId)+(headerExtension.direction&&headerExtension.direction!=="sendrecv"?"/"+headerExtension.direction:"")+" "+headerExtension.uri+"\r\n"};SDPUtils.parseFmtp=function(line){var parsed={};var kv;var parts=line.substr(line.indexOf(" ")+1).split(";");for(var j=0;j-1){parts.attribute=line.substr(sp+1,colon-sp-1);parts.value=line.substr(colon+1)}else{parts.attribute=line.substr(sp+1)}return parts};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){var lines=SDPUtils.matchPrefix(mediaSection+sessionpart,"a=fingerprint:");return{role:"auto",fingerprints:lines.map(SDPUtils.parseFingerprint)}};SDPUtils.writeDtlsParameters=function(params,setupType){var sdp="a=setup:"+setupType+"\r\n";params.fingerprints.forEach(function(fp){sdp+="a=fingerprint:"+fp.algorithm+" "+fp.value+"\r\n"});return sdp};SDPUtils.getIceParameters=function(mediaSection,sessionpart){var lines=SDPUtils.splitLines(mediaSection);lines=lines.concat(SDPUtils.splitLines(sessionpart));var iceParameters={usernameFragment:lines.filter(function(line){return line.indexOf("a=ice-ufrag:")===0})[0].substr(12),password:lines.filter(function(line){return line.indexOf("a=ice-pwd:")===0})[0].substr(10)};return iceParameters};SDPUtils.writeIceParameters=function(params){return"a=ice-ufrag:"+params.usernameFragment+"\r\n"+"a=ice-pwd:"+params.password+"\r\n"};SDPUtils.parseRtpParameters=function(mediaSection){var description={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]};var lines=SDPUtils.splitLines(mediaSection);var mline=lines[0].split(" ");for(var i=3;i0?"9":"0";sdp+=" UDP/TLS/RTP/SAVPF ";sdp+=caps.codecs.map(function(codec){if(codec.preferredPayloadType!==undefined){return codec.preferredPayloadType}return 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;caps.codecs.forEach(function(codec){if(codec.maxptime>maxptime){maxptime=codec.maxptime}});if(maxptime>0){sdp+="a=maxptime:"+maxptime+"\r\n"}sdp+="a=rtcp-mux\r\n";caps.headerExtensions.forEach(function(extension){sdp+=SDPUtils.writeExtmap(extension)});return sdp};SDPUtils.parseRtpEncodingParameters=function(mediaSection){var encodingParameters=[];var description=SDPUtils.parseRtpParameters(mediaSection);var hasRed=description.fecMechanisms.indexOf("RED")!==-1;var hasUlpfec=description.fecMechanisms.indexOf("ULPFEC")!==-1;var ssrcs=SDPUtils.matchPrefix(mediaSection,"a=ssrc:").map(function(line){return SDPUtils.parseSsrcMedia(line)}).filter(function(parts){return parts.attribute==="cname"});var primarySsrc=ssrcs.length>0&&ssrcs[0].ssrc;var secondarySsrc;var flows=SDPUtils.matchPrefix(mediaSection,"a=ssrc-group:FID").map(function(line){var parts=line.split(" ");parts.shift();return parts.map(function(part){return parseInt(part,10)})});if(flows.length>0&&flows[0].length>1&&flows[0][0]===primarySsrc){secondarySsrc=flows[0][1]}description.codecs.forEach(function(codec){if(codec.name.toUpperCase()==="RTX"&&codec.parameters.apt){var encParam={ssrc:primarySsrc,codecPayloadType:parseInt(codec.parameters.apt,10),rtx:{ssrc:secondarySsrc}};encodingParameters.push(encParam);if(hasRed){encParam=JSON.parse(JSON.stringify(encParam));encParam.fec={ssrc:secondarySsrc,mechanism:hasUlpfec?"red+ulpfec":"red"};encodingParameters.push(encParam)}}});if(encodingParameters.length===0&&primarySsrc){encodingParameters.push({ssrc:primarySsrc})}var bandwidth=SDPUtils.matchPrefix(mediaSection,"b=");if(bandwidth.length){if(bandwidth[0].indexOf("b=TIAS:")===0){bandwidth=parseInt(bandwidth[0].substr(7),10)}else if(bandwidth[0].indexOf("b=AS:")===0){bandwidth=parseInt(bandwidth[0].substr(5),10)*1e3*.95-50*40*8}else{bandwidth=undefined}encodingParameters.forEach(function(params){params.maxBitrate=bandwidth})}return encodingParameters};SDPUtils.parseRtcpParameters=function(mediaSection){var rtcpParameters={};var cname;var remoteSsrc=SDPUtils.matchPrefix(mediaSection,"a=ssrc:").map(function(line){return SDPUtils.parseSsrcMedia(line)}).filter(function(obj){return obj.attribute==="cname"})[0];if(remoteSsrc){rtcpParameters.cname=remoteSsrc.value;rtcpParameters.ssrc=remoteSsrc.ssrc}var rsize=SDPUtils.matchPrefix(mediaSection,"a=rtcp-rsize");rtcpParameters.reducedSize=rsize.length>0;rtcpParameters.compound=rsize.length===0;var mux=SDPUtils.matchPrefix(mediaSection,"a=rtcp-mux");rtcpParameters.mux=mux.length>0;return rtcpParameters};SDPUtils.parseMsid=function(mediaSection){var parts;var spec=SDPUtils.matchPrefix(mediaSection,"a=msid:");if(spec.length===1){parts=spec[0].substr(7).split(" ");return{stream:parts[0],track:parts[1]}}var planB=SDPUtils.matchPrefix(mediaSection,"a=ssrc:").map(function(line){return SDPUtils.parseSsrcMedia(line)}).filter(function(parts){return parts.attribute==="msid"});if(planB.length>0){parts=planB[0].value.split(" ");return{stream:parts[0],track:parts[1]}}};SDPUtils.generateSessionId=function(){return Math.random().toString().substr(2,21)};SDPUtils.writeSessionBoilerplate=function(sessId,sessVer){var sessionId;var version=sessVer!==undefined?sessVer:2;if(sessId){sessionId=sessId}else{sessionId=SDPUtils.generateSessionId()}return"v=0\r\n"+"o=thisisadapterortc "+sessionId+" "+version+" IN IP4 127.0.0.1\r\n"+"s=-\r\n"+"t=0 0\r\n"};SDPUtils.writeMediaSection=function(transceiver,caps,type,stream){var sdp=SDPUtils.writeRtpDescription(transceiver.kind,caps);sdp+=SDPUtils.writeIceParameters(transceiver.iceGatherer.getLocalParameters());sdp+=SDPUtils.writeDtlsParameters(transceiver.dtlsTransport.getLocalParameters(),type==="offer"?"actpass":"active");sdp+="a=mid:"+transceiver.mid+"\r\n";if(transceiver.direction){sdp+="a="+transceiver.direction+"\r\n"}else if(transceiver.rtpSender&&transceiver.rtpReceiver){sdp+="a=sendrecv\r\n"}else if(transceiver.rtpSender){sdp+="a=sendonly\r\n"}else if(transceiver.rtpReceiver){sdp+="a=recvonly\r\n"}else{sdp+="a=inactive\r\n"}if(transceiver.rtpSender){var msid="msid:"+stream.id+" "+transceiver.rtpSender.track.id+"\r\n";sdp+="a="+msid;sdp+="a=ssrc:"+transceiver.sendEncodingParameters[0].ssrc+" "+msid;if(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"}}sdp+="a=ssrc:"+transceiver.sendEncodingParameters[0].ssrc+" cname:"+SDPUtils.localCName+"\r\n";if(transceiver.rtpSender&&transceiver.sendEncodingParameters[0].rtx){sdp+="a=ssrc:"+transceiver.sendEncodingParameters[0].rtx.ssrc+" cname:"+SDPUtils.localCName+"\r\n"}return sdp};SDPUtils.getDirection=function(mediaSection,sessionpart){var lines=SDPUtils.splitLines(mediaSection);for(var i=0;i0){if(q.length==2){if(typeof q[1]==FUNC_TYPE){this[q[0]]=q[1].call(this,match)}else{this[q[0]]=q[1]}}else if(q.length==3){if(typeof q[1]===FUNC_TYPE&&!(q[1].exec&&q[1].test)){this[q[0]]=match?q[1].call(this,match,q[2]):undefined}else{this[q[0]]=match?match.replace(q[1],q[2]):undefined}}else if(q.length==4){this[q[0]]=match?q[3].call(this,match.replace(q[1],q[2])):undefined}}else{this[q]=match?match:undefined}}}}i+=2}},str:function(str,map){for(var i in map){if(typeof map[i]===OBJ_TYPE&&map[i].length>0){for(var j=0;j>>((i&3)<<3)&255}return rnds}}module.exports=rng}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],23:[function(require,module,exports){var rng=require("./lib/rng");var bytesToUuid=require("./lib/bytesToUuid");var _seedBytes=rng();var _nodeId=[_seedBytes[0]|1,_seedBytes[1],_seedBytes[2],_seedBytes[3],_seedBytes[4],_seedBytes[5]];var _clockseq=(_seedBytes[6]<<8|_seedBytes[7])&16383;var _lastMSecs=0,_lastNSecs=0;function v1(options,buf,offset){var i=buf&&offset||0;var b=buf||[];options=options||{};var clockseq=options.clockseq!==undefined?options.clockseq:_clockseq;var msecs=options.msecs!==undefined?options.msecs:(new Date).getTime();var nsecs=options.nsecs!==undefined?options.nsecs:_lastNSecs+1;var dt=msecs-_lastMSecs+(nsecs-_lastNSecs)/1e4;if(dt<0&&options.clockseq===undefined){clockseq=clockseq+1&16383}if((dt<0||msecs>_lastMSecs)&&options.nsecs===undefined){nsecs=0}if(nsecs>=1e4){throw new Error("uuid.v1(): Can't create more than 10M uuids/sec")}_lastMSecs=msecs;_lastNSecs=nsecs;_clockseq=clockseq;msecs+=122192928e5;var tl=((msecs&268435455)*1e4+nsecs)%4294967296;b[i++]=tl>>>24&255;b[i++]=tl>>>16&255;b[i++]=tl>>>8&255;b[i++]=tl&255;var tmh=msecs/4294967296*1e4&268435455;b[i++]=tmh>>>8&255;b[i++]=tmh&255;b[i++]=tmh>>>24&15|16;b[i++]=tmh>>>16&255;b[i++]=clockseq>>>8|128;b[i++]=clockseq&255;var node=options.node||_nodeId;for(var n=0;n<6;++n){b[i+n]=node[n]}return buf?buf:bytesToUuid(b)}module.exports=v1},{"./lib/bytesToUuid":21,"./lib/rng":22}],24:[function(require,module,exports){var rng=require("./lib/rng");var bytesToUuid=require("./lib/bytesToUuid");function v4(options,buf,offset){var i=buf&&offset||0;if(typeof options=="string"){buf=options=="binary"?new Array(16):null;options=null}options=options||{};var rnds=options.random||(options.rng||rng)();rnds[6]=rnds[6]&15|64;rnds[8]=rnds[8]&63|128;if(buf){for(var ii=0;ii<16;++ii){buf[i+ii]=rnds[ii]}}return buf||bytesToUuid(rnds)}module.exports=v4},{"./lib/bytesToUuid":21,"./lib/rng":22}],25:[function(require,module,exports){(function(global){"use strict";var adapterFactory=require("./adapter_factory.js");module.exports=adapterFactory({window:global.window})}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{"./adapter_factory.js":26}],26:[function(require,module,exports){"use strict";var utils=require("./utils");module.exports=function(dependencies,opts){var window=dependencies&&dependencies.window;var options={shimChrome:true,shimFirefox:true,shimEdge:true,shimSafari:true};for(var key in opts){if(hasOwnProperty.call(opts,key)){options[key]=opts[key]}}var logging=utils.log;var browserDetails=utils.detectBrowser(window);var adapter={browserDetails:browserDetails,extractVersion:utils.extractVersion,disableLog:utils.disableLog,disableWarnings:utils.disableWarnings};var chromeShim=require("./chrome/chrome_shim")||null;var edgeShim=require("./edge/edge_shim")||null;var firefoxShim=require("./firefox/firefox_shim")||null;var safariShim=require("./safari/safari_shim")||null;var commonShim=require("./common_shim")||null;switch(browserDetails.browser){case"chrome":if(!chromeShim||!chromeShim.shimPeerConnection||!options.shimChrome){logging("Chrome shim is not included in this adapter release.");return adapter}logging("adapter.js shimming chrome.");adapter.browserShim=chromeShim;commonShim.shimCreateObjectURL(window);chromeShim.shimGetUserMedia(window);chromeShim.shimMediaStream(window);chromeShim.shimSourceObject(window);chromeShim.shimPeerConnection(window);chromeShim.shimOnTrack(window);chromeShim.shimAddTrackRemoveTrack(window);chromeShim.shimGetSendersWithDtmf(window);commonShim.shimRTCIceCandidate(window);break;case"firefox":if(!firefoxShim||!firefoxShim.shimPeerConnection||!options.shimFirefox){logging("Firefox shim is not included in this adapter release.");return adapter}logging("adapter.js shimming firefox.");adapter.browserShim=firefoxShim;commonShim.shimCreateObjectURL(window);firefoxShim.shimGetUserMedia(window);firefoxShim.shimSourceObject(window);firefoxShim.shimPeerConnection(window);firefoxShim.shimOnTrack(window);firefoxShim.shimRemoveStream(window);commonShim.shimRTCIceCandidate(window);break;case"edge":if(!edgeShim||!edgeShim.shimPeerConnection||!options.shimEdge){logging("MS edge shim is not included in this adapter release.");return adapter}logging("adapter.js shimming edge.");adapter.browserShim=edgeShim;commonShim.shimCreateObjectURL(window);edgeShim.shimGetUserMedia(window);edgeShim.shimPeerConnection(window);edgeShim.shimReplaceTrack(window);break;case"safari":if(!safariShim||!options.shimSafari){logging("Safari shim is not included in this adapter release.");return adapter}logging("adapter.js shimming safari.");adapter.browserShim=safariShim;commonShim.shimCreateObjectURL(window);safariShim.shimRTCIceServerUrls(window);safariShim.shimCallbacksAPI(window);safariShim.shimLocalStreamsAPI(window);safariShim.shimRemoteStreamsAPI(window);safariShim.shimTrackEventTransceiver(window);safariShim.shimGetUserMedia(window);safariShim.shimCreateOfferLegacy(window);commonShim.shimRTCIceCandidate(window);break;default:logging("Unsupported browser!");break}return adapter}},{"./chrome/chrome_shim":27,"./common_shim":29,"./edge/edge_shim":30,"./firefox/firefox_shim":32,"./safari/safari_shim":34,"./utils":35}],27:[function(require,module,exports){"use strict";var utils=require("../utils.js");var logging=utils.log;module.exports={shimGetUserMedia:require("./getusermedia"),shimMediaStream:function(window){window.MediaStream=window.MediaStream||window.webkitMediaStream},shimOnTrack:function(window){if(typeof window==="object"&&window.RTCPeerConnection&&!("ontrack"in window.RTCPeerConnection.prototype)){Object.defineProperty(window.RTCPeerConnection.prototype,"ontrack",{get:function(){return this._ontrack},set:function(f){if(this._ontrack){this.removeEventListener("track",this._ontrack)}this.addEventListener("track",this._ontrack=f)}});var origSetRemoteDescription=window.RTCPeerConnection.prototype.setRemoteDescription;window.RTCPeerConnection.prototype.setRemoteDescription=function(){var pc=this;if(!pc._ontrackpoly){pc._ontrackpoly=function(e){e.stream.addEventListener("addtrack",function(te){var receiver;if(window.RTCPeerConnection.prototype.getReceivers){receiver=pc.getReceivers().find(function(r){return r.track&&r.track.id===te.track.id})}else{receiver={track:te.track}}var event=new Event("track");event.track=te.track;event.receiver=receiver;event.transceiver={receiver:receiver};event.streams=[e.stream];pc.dispatchEvent(event)});e.stream.getTracks().forEach(function(track){var receiver;if(window.RTCPeerConnection.prototype.getReceivers){receiver=pc.getReceivers().find(function(r){return r.track&&r.track.id===track.id})}else{receiver={track:track}}var event=new Event("track");event.track=track;event.receiver=receiver;event.transceiver={receiver:receiver};event.streams=[e.stream];pc.dispatchEvent(event)})};pc.addEventListener("addstream",pc._ontrackpoly)}return origSetRemoteDescription.apply(pc,arguments)}}},shimGetSendersWithDtmf:function(window){if(typeof window==="object"&&window.RTCPeerConnection&&!("getSenders"in window.RTCPeerConnection.prototype)&&"createDTMFSender"in window.RTCPeerConnection.prototype){var shimSenderWithDtmf=function(pc,track){return{track:track,get dtmf(){if(this._dtmf===undefined){if(track.kind==="audio"){this._dtmf=pc.createDTMFSender(track)}else{this._dtmf=null}}return this._dtmf},_pc:pc}};if(!window.RTCPeerConnection.prototype.getSenders){window.RTCPeerConnection.prototype.getSenders=function(){this._senders=this._senders||[];return this._senders.slice()};var origAddTrack=window.RTCPeerConnection.prototype.addTrack;window.RTCPeerConnection.prototype.addTrack=function(track,stream){var pc=this;var sender=origAddTrack.apply(pc,arguments);if(!sender){sender=shimSenderWithDtmf(pc,track);pc._senders.push(sender)}return sender};var origRemoveTrack=window.RTCPeerConnection.prototype.removeTrack;window.RTCPeerConnection.prototype.removeTrack=function(sender){var pc=this;origRemoveTrack.apply(pc,arguments);var idx=pc._senders.indexOf(sender);if(idx!==-1){pc._senders.splice(idx,1)}}}var origAddStream=window.RTCPeerConnection.prototype.addStream;window.RTCPeerConnection.prototype.addStream=function(stream){var pc=this;pc._senders=pc._senders||[];origAddStream.apply(pc,[stream]);stream.getTracks().forEach(function(track){pc._senders.push(shimSenderWithDtmf(pc,track))})};var origRemoveStream=window.RTCPeerConnection.prototype.removeStream;window.RTCPeerConnection.prototype.removeStream=function(stream){var pc=this;pc._senders=pc._senders||[];origRemoveStream.apply(pc,[stream]);stream.getTracks().forEach(function(track){var sender=pc._senders.find(function(s){return s.track===track});if(sender){pc._senders.splice(pc._senders.indexOf(sender),1)}})}}else if(typeof window==="object"&&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 pc=this;var senders=origGetSenders.apply(pc,[]);senders.forEach(function(sender){sender._pc=pc});return senders};Object.defineProperty(window.RTCRtpSender.prototype,"dtmf",{get:function(){if(this._dtmf===undefined){if(this.track.kind==="audio"){this._dtmf=this._pc.createDTMFSender(this.track)}else{this._dtmf=null}}return this._dtmf}})}},shimSourceObject:function(window){var URL=window&&window.URL;if(typeof window==="object"){if(window.HTMLMediaElement&&!("srcObject"in window.HTMLMediaElement.prototype)){Object.defineProperty(window.HTMLMediaElement.prototype,"srcObject",{get:function(){return this._srcObject},set:function(stream){var self=this;this._srcObject=stream;if(this.src){URL.revokeObjectURL(this.src)}if(!stream){this.src="";return undefined}this.src=URL.createObjectURL(stream);stream.addEventListener("addtrack",function(){if(self.src){URL.revokeObjectURL(self.src)}self.src=URL.createObjectURL(stream)});stream.addEventListener("removetrack",function(){if(self.src){URL.revokeObjectURL(self.src)}self.src=URL.createObjectURL(stream)})}})}}},shimAddTrackRemoveTrackWithNative:function(window){window.RTCPeerConnection.prototype.getLocalStreams=function(){var pc=this;this._shimmedLocalStreams=this._shimmedLocalStreams||{};return Object.keys(this._shimmedLocalStreams).map(function(streamId){return pc._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);if(!this._shimmedLocalStreams[stream.id]){this._shimmedLocalStreams[stream.id]=[stream,sender]}else if(this._shimmedLocalStreams[stream.id].indexOf(sender)===-1){this._shimmedLocalStreams[stream.id].push(sender)}return sender};var origAddStream=window.RTCPeerConnection.prototype.addStream;window.RTCPeerConnection.prototype.addStream=function(stream){var pc=this;this._shimmedLocalStreams=this._shimmedLocalStreams||{};stream.getTracks().forEach(function(track){var alreadyExists=pc.getSenders().find(function(s){return s.track===track});if(alreadyExists){throw new DOMException("Track already exists.","InvalidAccessError")}});var existingSenders=pc.getSenders();origAddStream.apply(this,arguments);var newSenders=pc.getSenders().filter(function(newSender){return existingSenders.indexOf(newSender)===-1});this._shimmedLocalStreams[stream.id]=[stream].concat(newSenders)};var origRemoveStream=window.RTCPeerConnection.prototype.removeStream;window.RTCPeerConnection.prototype.removeStream=function(stream){this._shimmedLocalStreams=this._shimmedLocalStreams||{};delete this._shimmedLocalStreams[stream.id];return origRemoveStream.apply(this,arguments)};var origRemoveTrack=window.RTCPeerConnection.prototype.removeTrack;window.RTCPeerConnection.prototype.removeTrack=function(sender){var pc=this;this._shimmedLocalStreams=this._shimmedLocalStreams||{};if(sender){Object.keys(this._shimmedLocalStreams).forEach(function(streamId){var idx=pc._shimmedLocalStreams[streamId].indexOf(sender);if(idx!==-1){pc._shimmedLocalStreams[streamId].splice(idx,1)}if(pc._shimmedLocalStreams[streamId].length===1){delete pc._shimmedLocalStreams[streamId]}})}return origRemoveTrack.apply(this,arguments)}},shimAddTrackRemoveTrack:function(window){var browserDetails=utils.detectBrowser(window);if(window.RTCPeerConnection.prototype.addTrack&&browserDetails.version>=65){return this.shimAddTrackRemoveTrackWithNative(window)}var origGetLocalStreams=window.RTCPeerConnection.prototype.getLocalStreams;window.RTCPeerConnection.prototype.getLocalStreams=function(){var pc=this;var nativeStreams=origGetLocalStreams.apply(this);pc._reverseStreams=pc._reverseStreams||{};return nativeStreams.map(function(stream){return pc._reverseStreams[stream.id]})};var origAddStream=window.RTCPeerConnection.prototype.addStream;window.RTCPeerConnection.prototype.addStream=function(stream){var pc=this;pc._streams=pc._streams||{};pc._reverseStreams=pc._reverseStreams||{};stream.getTracks().forEach(function(track){var alreadyExists=pc.getSenders().find(function(s){return s.track===track});if(alreadyExists){throw new DOMException("Track already exists.","InvalidAccessError")}});if(!pc._reverseStreams[stream.id]){var newStream=new window.MediaStream(stream.getTracks());pc._streams[stream.id]=newStream;pc._reverseStreams[newStream.id]=stream;stream=newStream}origAddStream.apply(pc,[stream])};var origRemoveStream=window.RTCPeerConnection.prototype.removeStream;window.RTCPeerConnection.prototype.removeStream=function(stream){var pc=this;pc._streams=pc._streams||{};pc._reverseStreams=pc._reverseStreams||{};origRemoveStream.apply(pc,[pc._streams[stream.id]||stream]);delete pc._reverseStreams[pc._streams[stream.id]?pc._streams[stream.id].id:stream.id];delete pc._streams[stream.id]};window.RTCPeerConnection.prototype.addTrack=function(track,stream){var pc=this;if(pc.signalingState==="closed"){throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError")}var streams=[].slice.call(arguments,1);if(streams.length!==1||!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=pc.getSenders().find(function(s){return s.track===track});if(alreadyExists){throw new DOMException("Track already exists.","InvalidAccessError")}pc._streams=pc._streams||{};pc._reverseStreams=pc._reverseStreams||{};var oldStream=pc._streams[stream.id];if(oldStream){oldStream.addTrack(track);Promise.resolve().then(function(){pc.dispatchEvent(new Event("negotiationneeded"))})}else{var newStream=new window.MediaStream([track]);pc._streams[stream.id]=newStream;pc._reverseStreams[newStream.id]=stream;pc.addStream(newStream)}return pc.getSenders().find(function(s){return s.track===track})};function replaceInternalStreamId(pc,description){var sdp=description.sdp;Object.keys(pc._reverseStreams||[]).forEach(function(internalId){var externalStream=pc._reverseStreams[internalId];var internalStream=pc._streams[externalStream.id];sdp=sdp.replace(new RegExp(internalStream.id,"g"),externalStream.id)});return new RTCSessionDescription({type:description.type,sdp:sdp})}function replaceExternalStreamId(pc,description){var sdp=description.sdp;Object.keys(pc._reverseStreams||[]).forEach(function(internalId){var externalStream=pc._reverseStreams[internalId];var internalStream=pc._streams[externalStream.id];sdp=sdp.replace(new RegExp(externalStream.id,"g"),internalStream.id)});return new RTCSessionDescription({type:description.type,sdp:sdp})}["createOffer","createAnswer"].forEach(function(method){var nativeMethod=window.RTCPeerConnection.prototype[method];window.RTCPeerConnection.prototype[method]=function(){var pc=this;var args=arguments;var isLegacyCall=arguments.length&&typeof arguments[0]==="function";if(isLegacyCall){return nativeMethod.apply(pc,[function(description){var desc=replaceInternalStreamId(pc,description);args[0].apply(null,[desc])},function(err){if(args[1]){args[1].apply(null,err)}},arguments[2]])}return nativeMethod.apply(pc,arguments).then(function(description){return replaceInternalStreamId(pc,description)})}});var origSetLocalDescription=window.RTCPeerConnection.prototype.setLocalDescription;window.RTCPeerConnection.prototype.setLocalDescription=function(){var pc=this;if(!arguments.length||!arguments[0].type){return origSetLocalDescription.apply(pc,arguments)}arguments[0]=replaceExternalStreamId(pc,arguments[0]);return origSetLocalDescription.apply(pc,arguments)};var origLocalDescription=Object.getOwnPropertyDescriptor(window.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(window.RTCPeerConnection.prototype,"localDescription",{get:function(){var pc=this;var description=origLocalDescription.get.apply(this);if(description.type===""){return description}return replaceInternalStreamId(pc,description)}});window.RTCPeerConnection.prototype.removeTrack=function(sender){var pc=this;if(pc.signalingState==="closed"){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")}var isLocal=sender._pc===pc;if(!isLocal){throw new DOMException("Sender was not created by this connection.","InvalidAccessError")}pc._streams=pc._streams||{};var stream;Object.keys(pc._streams).forEach(function(streamid){var hasTrack=pc._streams[streamid].getTracks().find(function(track){return sender.track===track});if(hasTrack){stream=pc._streams[streamid]}});if(stream){if(stream.getTracks().length===1){pc.removeStream(pc._reverseStreams[stream.id])}else{stream.removeTrack(sender.track)}pc.dispatchEvent(new Event("negotiationneeded"))}}},shimPeerConnection:function(window){var browserDetails=utils.detectBrowser(window);if(!window.RTCPeerConnection){window.RTCPeerConnection=function(pcConfig,pcConstraints){logging("PeerConnection");if(pcConfig&&pcConfig.iceTransportPolicy){pcConfig.iceTransports=pcConfig.iceTransportPolicy}return new window.webkitRTCPeerConnection(pcConfig,pcConstraints)};window.RTCPeerConnection.prototype=window.webkitRTCPeerConnection.prototype;if(window.webkitRTCPeerConnection.generateCertificate){Object.defineProperty(window.RTCPeerConnection,"generateCertificate",{get:function(){return window.webkitRTCPeerConnection.generateCertificate}})}}else{var OrigPeerConnection=window.RTCPeerConnection;window.RTCPeerConnection=function(pcConfig,pcConstraints){if(pcConfig&&pcConfig.iceServers){var newIceServers=[];for(var i=0;i0&&typeof selector==="function"){return origGetStats.apply(this,arguments)}if(origGetStats.length===0&&(arguments.length===0||typeof arguments[0]!=="function")){return origGetStats.apply(this,[])}var fixChromeStats_=function(response){var standardReport={};var reports=response.result();reports.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});return standardReport};var makeMapStats=function(stats){return new Map(Object.keys(stats).map(function(key){return[key,stats[key]]}))};if(arguments.length>=2){var successCallbackWrapper_=function(response){args[1](makeMapStats(fixChromeStats_(response)))};return origGetStats.apply(this,[successCallbackWrapper_,arguments[0]])}return new Promise(function(resolve,reject){origGetStats.apply(pc,[function(response){resolve(makeMapStats(fixChromeStats_(response)))},reject])}).then(successCallback,errorCallback)};if(browserDetails.version<51){["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(method){var nativeMethod=window.RTCPeerConnection.prototype[method];window.RTCPeerConnection.prototype[method]=function(){var args=arguments;var pc=this;var promise=new Promise(function(resolve,reject){nativeMethod.apply(pc,[args[0],resolve,reject])});if(args.length<2){return promise}return promise.then(function(){args[1].apply(null,[])},function(err){if(args.length>=3){args[2].apply(null,[err])}})}})}if(browserDetails.version<52){["createOffer","createAnswer"].forEach(function(method){var nativeMethod=window.RTCPeerConnection.prototype[method];window.RTCPeerConnection.prototype[method]=function(){var pc=this;if(arguments.length<1||arguments.length===1&&typeof arguments[0]==="object"){var opts=arguments.length===1?arguments[0]:undefined;return new Promise(function(resolve,reject){nativeMethod.apply(pc,[resolve,reject,opts])})}return nativeMethod.apply(this,arguments)}})}["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(method){var nativeMethod=window.RTCPeerConnection.prototype[method];window.RTCPeerConnection.prototype[method]=function(){arguments[0]=new(method==="addIceCandidate"?window.RTCIceCandidate:window.RTCSessionDescription)(arguments[0]);return nativeMethod.apply(this,arguments)}});var nativeAddIceCandidate=window.RTCPeerConnection.prototype.addIceCandidate;window.RTCPeerConnection.prototype.addIceCandidate=function(){if(!arguments[0]){if(arguments[1]){arguments[1].apply(null)}return Promise.resolve()}return nativeAddIceCandidate.apply(this,arguments)}}}},{"../utils.js":35,"./getusermedia":28}],28:[function(require,module,exports){"use strict";var utils=require("../utils.js");var logging=utils.log;module.exports=function(window){var browserDetails=utils.detectBrowser(window);var navigator=window&&window.navigator;var constraintsToChrome_=function(c){if(typeof c!=="object"||c.mandatory||c.optional){return c}var cc={};Object.keys(c).forEach(function(key){if(key==="require"||key==="advanced"||key==="mediaSource"){return}var r=typeof c[key]==="object"?c[key]:{ideal:c[key]};if(r.exact!==undefined&&typeof r.exact==="number"){r.min=r.max=r.exact}var oldname_=function(prefix,name){if(prefix){return prefix+name.charAt(0).toUpperCase()+name.slice(1)}return name==="deviceId"?"sourceId":name};if(r.ideal!==undefined){cc.optional=cc.optional||[];var oc={};if(typeof r.ideal==="number"){oc[oldname_("min",key)]=r.ideal;cc.optional.push(oc);oc={};oc[oldname_("max",key)]=r.ideal;cc.optional.push(oc)}else{oc[oldname_("",key)]=r.ideal;cc.optional.push(oc)}}if(r.exact!==undefined&&typeof r.exact!=="number"){cc.mandatory=cc.mandatory||{};cc.mandatory[oldname_("",key)]=r.exact}else{["min","max"].forEach(function(mix){if(r[mix]!==undefined){cc.mandatory=cc.mandatory||{};cc.mandatory[oldname_(mix,key)]=r[mix]}})}});if(c.advanced){cc.optional=(cc.optional||[]).concat(c.advanced)}return cc};var shimConstraints_=function(constraints,func){if(browserDetails.version>=61){return func(constraints)}constraints=JSON.parse(JSON.stringify(constraints));if(constraints&&typeof constraints.audio==="object"){var remap=function(obj,a,b){if(a in obj&&!(b in obj)){obj[b]=obj[a];delete obj[a]}};constraints=JSON.parse(JSON.stringify(constraints));remap(constraints.audio,"autoGainControl","googAutoGainControl");remap(constraints.audio,"noiseSuppression","googNoiseSuppression");constraints.audio=constraintsToChrome_(constraints.audio)}if(constraints&&typeof constraints.video==="object"){var face=constraints.video.facingMode;face=face&&(typeof face==="object"?face:{ideal:face});var getSupportedFacingModeLies=browserDetails.version<66;if(face&&(face.exact==="user"||face.exact==="environment"||face.ideal==="user"||face.ideal==="environment")&&!(navigator.mediaDevices.getSupportedConstraints&&navigator.mediaDevices.getSupportedConstraints().facingMode&&!getSupportedFacingModeLies)){delete constraints.video.facingMode;var matches;if(face.exact==="environment"||face.ideal==="environment"){matches=["back","rear"]}else if(face.exact==="user"||face.ideal==="user"){matches=["front"]}if(matches){return navigator.mediaDevices.enumerateDevices().then(function(devices){devices=devices.filter(function(d){return d.kind==="videoinput"});var dev=devices.find(function(d){return matches.some(function(match){return d.label.toLowerCase().indexOf(match)!==-1})});if(!dev&&devices.length&&matches.indexOf("back")!==-1){dev=devices[devices.length-1]}if(dev){constraints.video.deviceId=face.exact?{exact:dev.deviceId}:{ideal:dev.deviceId}}constraints.video=constraintsToChrome_(constraints.video);logging("chrome: "+JSON.stringify(constraints));return func(constraints)})}}constraints.video=constraintsToChrome_(constraints.video)}logging("chrome: "+JSON.stringify(constraints));return func(constraints)};var shimError_=function(e){return{name:{PermissionDeniedError:"NotAllowedError",InvalidStateError:"NotReadableError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotReadableError",MediaDeviceKillSwitchOn:"NotReadableError"}[e.name]||e.name,message:e.message,constraint:e.constraintName,toString:function(){return this.name+(this.message&&": ")+this.message}}};var getUserMedia_=function(constraints,onSuccess,onError){shimConstraints_(constraints,function(c){navigator.webkitGetUserMedia(c,onSuccess,function(e){if(onError){onError(shimError_(e))}})})};navigator.getUserMedia=getUserMedia_;var getUserMediaPromise_=function(constraints){return new Promise(function(resolve,reject){navigator.getUserMedia(constraints,resolve,reject)})};if(!navigator.mediaDevices){navigator.mediaDevices={getUserMedia:getUserMediaPromise_,enumerateDevices:function(){return new Promise(function(resolve){var kinds={audio:"audioinput",video:"videoinput"};return window.MediaStreamTrack.getSources(function(devices){resolve(devices.map(function(device){return{label:device.label,kind:kinds[device.kind],deviceId:device.id,groupId:""}}))})})},getSupportedConstraints:function(){return{deviceId:true,echoCancellation:true,facingMode:true,frameRate:true,height:true,width:true}}}}if(!navigator.mediaDevices.getUserMedia){navigator.mediaDevices.getUserMedia=function(constraints){return getUserMediaPromise_(constraints)}}else{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){stream.getTracks().forEach(function(track){track.stop()});throw new DOMException("","NotFoundError")}return stream},function(e){return Promise.reject(shimError_(e))})})}}if(typeof navigator.mediaDevices.addEventListener==="undefined"){navigator.mediaDevices.addEventListener=function(){logging("Dummy mediaDevices.addEventListener called.")}}if(typeof navigator.mediaDevices.removeEventListener==="undefined"){navigator.mediaDevices.removeEventListener=function(){logging("Dummy mediaDevices.removeEventListener called.")}}}},{"../utils.js":35}],29:[function(require,module,exports){"use strict";var SDPUtils=require("sdp");var utils=require("./utils");function wrapPeerConnectionEvent(window,eventNameToWrap,wrapper){if(!window.RTCPeerConnection){return}var proto=window.RTCPeerConnection.prototype;var nativeAddEventListener=proto.addEventListener;proto.addEventListener=function(nativeEventName,cb){if(nativeEventName!==eventNameToWrap){return nativeAddEventListener.apply(this,arguments)}var wrappedCallback=function(e){cb(wrapper(e))};this._eventMap=this._eventMap||{};this._eventMap[cb]=wrappedCallback;return nativeAddEventListener.apply(this,[nativeEventName,wrappedCallback])};var nativeRemoveEventListener=proto.removeEventListener;proto.removeEventListener=function(nativeEventName,cb){if(nativeEventName!==eventNameToWrap||!this._eventMap||!this._eventMap[cb]){return nativeRemoveEventListener.apply(this,arguments)}var unwrappedCb=this._eventMap[cb];delete this._eventMap[cb];return nativeRemoveEventListener.apply(this,[nativeEventName,unwrappedCb])};Object.defineProperty(proto,"on"+eventNameToWrap,{get:function(){return this["_on"+eventNameToWrap]},set:function(cb){if(this["_on"+eventNameToWrap]){this.removeEventListener(eventNameToWrap,this["_on"+eventNameToWrap]);delete this["_on"+eventNameToWrap]}if(cb){this.addEventListener(eventNameToWrap,this["_on"+eventNameToWrap]=cb)}}})}module.exports={shimRTCIceCandidate:function(window){if(window.RTCIceCandidate&&"foundation"in window.RTCIceCandidate.prototype){return}var NativeRTCIceCandidate=window.RTCIceCandidate;window.RTCIceCandidate=function(args){if(typeof args==="object"&&args.candidate&&args.candidate.indexOf("a=")===0){args=JSON.parse(JSON.stringify(args));args.candidate=args.candidate.substr(2)}var nativeCandidate=new NativeRTCIceCandidate(args);var parsedCandidate=SDPUtils.parseCandidate(args.candidate);var augmentedCandidate=Object.assign(nativeCandidate,parsedCandidate);augmentedCandidate.toJSON=function(){return{candidate:augmentedCandidate.candidate,sdpMid:augmentedCandidate.sdpMid,sdpMLineIndex:augmentedCandidate.sdpMLineIndex,usernameFragment:augmentedCandidate.usernameFragment}};return augmentedCandidate};wrapPeerConnectionEvent(window,"icecandidate",function(e){if(e.candidate){Object.defineProperty(e,"candidate",{value:new window.RTCIceCandidate(e.candidate),writable:"false"})}return e})},shimCreateObjectURL:function(window){var URL=window&&window.URL;if(!(typeof window==="object"&&window.HTMLMediaElement&&"srcObject"in window.HTMLMediaElement.prototype&&URL.createObjectURL&&URL.revokeObjectURL)){return undefined}var nativeCreateObjectURL=URL.createObjectURL.bind(URL);var nativeRevokeObjectURL=URL.revokeObjectURL.bind(URL);var streams=new Map,newId=0;URL.createObjectURL=function(stream){if("getTracks"in stream){var url="polyblob:"+ ++newId;streams.set(url,stream);utils.deprecated("URL.createObjectURL(stream)","elem.srcObject = stream");return url}return nativeCreateObjectURL(stream)};URL.revokeObjectURL=function(url){nativeRevokeObjectURL(url);streams.delete(url)};var dsc=Object.getOwnPropertyDescriptor(window.HTMLMediaElement.prototype,"src");Object.defineProperty(window.HTMLMediaElement.prototype,"src",{get:function(){return dsc.get.apply(this)},set:function(url){this.srcObject=streams.get(url)||null;return dsc.set.apply(this,[url])}});var nativeSetAttribute=window.HTMLMediaElement.prototype.setAttribute;window.HTMLMediaElement.prototype.setAttribute=function(){if(arguments.length===2&&(""+arguments[0]).toLowerCase()==="src"){this.srcObject=streams.get(arguments[1])||null}return nativeSetAttribute.apply(this,arguments)}}}},{"./utils":35,sdp:18}],30:[function(require,module,exports){"use strict";var utils=require("../utils");var shimRTCPeerConnection=require("rtcpeerconnection-shim");module.exports={shimGetUserMedia:require("./getusermedia"),shimPeerConnection:function(window){var browserDetails=utils.detectBrowser(window);if(window.RTCIceGatherer){if(!window.RTCIceCandidate){window.RTCIceCandidate=function(args){return args}}if(!window.RTCSessionDescription){window.RTCSessionDescription=function(args){return args}}if(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)}})}}if(window.RTCRtpSender&&!("dtmf"in window.RTCRtpSender.prototype)){Object.defineProperty(window.RTCRtpSender.prototype,"dtmf",{get:function(){if(this._dtmf===undefined){if(this.track.kind==="audio"){this._dtmf=new window.RTCDtmfSender(this)}else if(this.track.kind==="video"){this._dtmf=null}}return this._dtmf}})}window.RTCPeerConnection=shimRTCPeerConnection(window,browserDetails.version)},shimReplaceTrack:function(window){if(window.RTCRtpSender&&!("replaceTrack"in window.RTCRtpSender.prototype)){window.RTCRtpSender.prototype.replaceTrack=window.RTCRtpSender.prototype.setTrack}}}},{"../utils":35,"./getusermedia":31,"rtcpeerconnection-shim":9}],31:[function(require,module,exports){"use strict";module.exports=function(window){var navigator=window&&window.navigator;var shimError_=function(e){return{name:{PermissionDeniedError:"NotAllowedError"}[e.name]||e.name,message:e.message,constraint:e.constraint,toString:function(){return this.name}}};var origGetUserMedia=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);navigator.mediaDevices.getUserMedia=function(c){return origGetUserMedia(c).catch(function(e){return Promise.reject(shimError_(e))})}}},{}],32:[function(require,module,exports){"use strict";var utils=require("../utils");module.exports={shimGetUserMedia:require("./getusermedia"),shimOnTrack:function(window){if(typeof window==="object"&&window.RTCPeerConnection&&!("ontrack"in window.RTCPeerConnection.prototype)){Object.defineProperty(window.RTCPeerConnection.prototype,"ontrack",{get:function(){return this._ontrack},set:function(f){if(this._ontrack){this.removeEventListener("track",this._ontrack);this.removeEventListener("addstream",this._ontrackpoly)}this.addEventListener("track",this._ontrack=f);this.addEventListener("addstream",this._ontrackpoly=function(e){e.stream.getTracks().forEach(function(track){var event=new Event("track");event.track=track;event.receiver={track:track};event.transceiver={receiver:event.receiver};event.streams=[e.stream];this.dispatchEvent(event)}.bind(this))}.bind(this))}})}if(typeof window==="object"&&window.RTCTrackEvent&&"receiver"in window.RTCTrackEvent.prototype&&!("transceiver"in window.RTCTrackEvent.prototype)){Object.defineProperty(window.RTCTrackEvent.prototype,"transceiver",{get:function(){return{receiver:this.receiver}}})}},shimSourceObject:function(window){if(typeof window==="object"){if(window.HTMLMediaElement&&!("srcObject"in window.HTMLMediaElement.prototype)){Object.defineProperty(window.HTMLMediaElement.prototype,"srcObject",{get:function(){return this.mozSrcObject},set:function(stream){this.mozSrcObject=stream}})}}},shimPeerConnection:function(window){var browserDetails=utils.detectBrowser(window);if(typeof window!=="object"||!(window.RTCPeerConnection||window.mozRTCPeerConnection)){return}if(!window.RTCPeerConnection){window.RTCPeerConnection=function(pcConfig,pcConstraints){if(browserDetails.version<38){if(pcConfig&&pcConfig.iceServers){var newIceServers=[];for(var i=0;i55&&"autoGainControl"in navigator.mediaDevices.getSupportedConstraints())){var remap=function(obj,a,b){if(a in obj&&!(b in obj)){obj[b]=obj[a];delete obj[a]}};var nativeGetUserMedia=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);navigator.mediaDevices.getUserMedia=function(c){if(typeof c==="object"&&typeof c.audio==="object"){c=JSON.parse(JSON.stringify(c));remap(c.audio,"autoGainControl","mozAutoGainControl");remap(c.audio,"noiseSuppression","mozNoiseSuppression")}return nativeGetUserMedia(c)};if(MediaStreamTrack&&MediaStreamTrack.prototype.getSettings){var nativeGetSettings=MediaStreamTrack.prototype.getSettings;MediaStreamTrack.prototype.getSettings=function(){var obj=nativeGetSettings.apply(this,arguments);remap(obj,"mozAutoGainControl","autoGainControl");remap(obj,"mozNoiseSuppression","noiseSuppression");return obj}}if(MediaStreamTrack&&MediaStreamTrack.prototype.applyConstraints){var nativeApplyConstraints=MediaStreamTrack.prototype.applyConstraints;MediaStreamTrack.prototype.applyConstraints=function(c){if(this.kind==="audio"&&typeof c==="object"){c=JSON.parse(JSON.stringify(c));remap(c,"autoGainControl","mozAutoGainControl");remap(c,"noiseSuppression","mozNoiseSuppression")}return nativeApplyConstraints.apply(this,[c])}}}navigator.getUserMedia=function(constraints,onSuccess,onError){if(browserDetails.version<44){return getUserMedia_(constraints,onSuccess,onError)}utils.deprecated("navigator.getUserMedia","navigator.mediaDevices.getUserMedia");navigator.mediaDevices.getUserMedia(constraints).then(onSuccess,onError)}}},{"../utils":35}],34:[function(require,module,exports){"use strict";var utils=require("../utils");module.exports={shimLocalStreamsAPI:function(window){if(typeof window!=="object"||!window.RTCPeerConnection){return}if(!("getLocalStreams"in window.RTCPeerConnection.prototype)){window.RTCPeerConnection.prototype.getLocalStreams=function(){if(!this._localStreams){this._localStreams=[]}return this._localStreams}}if(!("getStreamById"in window.RTCPeerConnection.prototype)){window.RTCPeerConnection.prototype.getStreamById=function(id){var result=null;if(this._localStreams){this._localStreams.forEach(function(stream){if(stream.id===id){result=stream}})}if(this._remoteStreams){this._remoteStreams.forEach(function(stream){if(stream.id===id){result=stream}})}return result}}if(!("addStream"in window.RTCPeerConnection.prototype)){var _addTrack=window.RTCPeerConnection.prototype.addTrack;window.RTCPeerConnection.prototype.addStream=function(stream){if(!this._localStreams){this._localStreams=[]}if(this._localStreams.indexOf(stream)===-1){this._localStreams.push(stream)}var pc=this;stream.getTracks().forEach(function(track){_addTrack.call(pc,track,stream)})};window.RTCPeerConnection.prototype.addTrack=function(track,stream){if(stream){if(!this._localStreams){this._localStreams=[stream]}else if(this._localStreams.indexOf(stream)===-1){this._localStreams.push(stream)}}return _addTrack.call(this,track,stream)}}if(!("removeStream"in window.RTCPeerConnection.prototype)){window.RTCPeerConnection.prototype.removeStream=function(stream){if(!this._localStreams){this._localStreams=[]}var index=this._localStreams.indexOf(stream);if(index===-1){return}this._localStreams.splice(index,1);var pc=this;var tracks=stream.getTracks();this.getSenders().forEach(function(sender){if(tracks.indexOf(sender.track)!==-1){pc.removeTrack(sender)}})}}},shimRemoteStreamsAPI:function(window){if(typeof window!=="object"||!window.RTCPeerConnection){return}if(!("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){if(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){var stream=e.streams[0];if(!this._remoteStreams){this._remoteStreams=[]}if(this._remoteStreams.indexOf(stream)>=0){return}this._remoteStreams.push(stream);var event=new Event("addstream");event.stream=e.streams[0];this.dispatchEvent(event)}.bind(this))}})}},shimCallbacksAPI:function(window){if(typeof window!=="object"||!window.RTCPeerConnection){return}var prototype=window.RTCPeerConnection.prototype;var createOffer=prototype.createOffer;var createAnswer=prototype.createAnswer;var setLocalDescription=prototype.setLocalDescription;var setRemoteDescription=prototype.setRemoteDescription;var addIceCandidate=prototype.addIceCandidate;prototype.createOffer=function(successCallback,failureCallback){var options=arguments.length>=2?arguments[2]:arguments[0];var promise=createOffer.apply(this,[options]);if(!failureCallback){return promise}promise.then(successCallback,failureCallback);return Promise.resolve()};prototype.createAnswer=function(successCallback,failureCallback){var options=arguments.length>=2?arguments[2]:arguments[0];var promise=createAnswer.apply(this,[options]);if(!failureCallback){return promise}promise.then(successCallback,failureCallback);return Promise.resolve()};var withCallback=function(description,successCallback,failureCallback){var promise=setLocalDescription.apply(this,[description]);if(!failureCallback){return promise}promise.then(successCallback,failureCallback);return Promise.resolve()};prototype.setLocalDescription=withCallback;withCallback=function(description,successCallback,failureCallback){var promise=setRemoteDescription.apply(this,[description]);if(!failureCallback){return promise}promise.then(successCallback,failureCallback);return Promise.resolve()};prototype.setRemoteDescription=withCallback;withCallback=function(candidate,successCallback,failureCallback){var promise=addIceCandidate.apply(this,[candidate]);if(!failureCallback){return promise}promise.then(successCallback,failureCallback);return Promise.resolve()};prototype.addIceCandidate=withCallback},shimGetUserMedia:function(window){var navigator=window&&window.navigator;if(!navigator.getUserMedia){if(navigator.webkitGetUserMedia){navigator.getUserMedia=navigator.webkitGetUserMedia.bind(navigator)}else if(navigator.mediaDevices&&navigator.mediaDevices.getUserMedia){navigator.getUserMedia=function(constraints,cb,errcb){navigator.mediaDevices.getUserMedia(constraints).then(cb,errcb)}.bind(navigator)}}},shimRTCIceServerUrls:function(window){var OrigPeerConnection=window.RTCPeerConnection;window.RTCPeerConnection=function(pcConfig,pcConstraints){if(pcConfig&&pcConfig.iceServers){var newIceServers=[];for(var i=0;i=pos&&parseInt(match[pos],10)}module.exports={extractVersion:extractVersion,disableLog:function(bool){if(typeof bool!=="boolean"){return new Error("Argument type: "+typeof bool+". Please use a boolean.")}logDisabled_=bool;return bool?"adapter.js logging disabled":"adapter.js logging enabled"},disableWarnings:function(bool){if(typeof bool!=="boolean"){return new Error("Argument type: "+typeof bool+". Please use a boolean.")}deprecationWarnings_=!bool;return"adapter.js deprecation warnings "+(bool?"disabled":"enabled")},log:function(){if(typeof window==="object"){if(logDisabled_){return}if(typeof console!=="undefined"&&typeof console.log==="function"){console.log.apply(console,arguments)}}},deprecated:function(oldMethod,newMethod){if(!deprecationWarnings_){return}console.warn(oldMethod+" is deprecated, please use "+newMethod+" instead.")},detectBrowser:function(window){var navigator=window&&window.navigator;var result={};result.browser=null;result.version=null;if(typeof window==="undefined"||!window.navigator){result.browser="Not a browser.";return result}if(navigator.mozGetUserMedia){result.browser="firefox";result.version=extractVersion(navigator.userAgent,/Firefox\/(\d+)\./,1)}else if(navigator.webkitGetUserMedia){if(window.webkitRTCPeerConnection){result.browser="chrome";result.version=extractVersion(navigator.userAgent,/Chrom(e|ium)\/(\d+)\./,2)}else{if(navigator.userAgent.match(/Version\/(\d+).(\d+)/)){result.browser="safari";result.version=extractVersion(navigator.userAgent,/AppleWebKit\/(\d+)\./,1)}else{result.browser="Unsupported webkit-based browser "+"with GUM support but no WebRTC support.";return result}}}else if(navigator.mediaDevices&&navigator.userAgent.match(/Edge\/(\d+).(\d+)$/)){result.browser="edge";result.version=extractVersion(navigator.userAgent,/Edge\/(\d+).(\d+)$/,2)}else if(navigator.mediaDevices&&navigator.userAgent.match(/AppleWebKit\/(\d+)\./)){result.browser="safari";result.version=extractVersion(navigator.userAgent,/AppleWebKit\/(\d+)\./,1)}else{result.browser="Not a supported browser.";return result}return result}}},{}],36:[function(require,module,exports){module.exports=WildEmitter;function WildEmitter(){}WildEmitter.mixin=function(constructor){var prototype=constructor.prototype||constructor;prototype.isWildEmitter=true;prototype.on=function(event,groupName,fn){this.callbacks=this.callbacks||{};var hasGroup=arguments.length===3,group=hasGroup?arguments[1]:undefined,func=hasGroup?arguments[2]:arguments[1];func._groupName=group;(this.callbacks[event]=this.callbacks[event]||[]).push(func);return this};prototype.once=function(event,groupName,fn){var self=this,hasGroup=arguments.length===3,group=hasGroup?arguments[1]:undefined,func=hasGroup?arguments[2]:arguments[1];function on(){self.off(event,on);func.apply(this,arguments)}this.on(event,group,on);return this};prototype.releaseGroup=function(groupName){this.callbacks=this.callbacks||{};var item,i,len,handlers;for(item in this.callbacks){handlers=this.callbacks[item];for(i=0,len=handlers.length;inotReconnectIfNumLessThan){enabledPings=false;updateNotReconnectIfLessThan();Logger.debug("Server did not respond to ping message #"+pingNum+". Reconnecting... ");ws.reconnectWs()}}}}(pingNextNum))}else{Logger.debug("Trying to send ping, but ping is not enabled")}}function usePing(){if(!pingPongStarted){Logger.debug("Starting ping (if configured)");pingPongStarted=true;if(configuration.heartbeat!=undefined){pingInterval=setInterval(sendPing,configuration.heartbeat);sendPing()}}}this.close=function(){Logger.debug("Closing jsonRpcClient explicitly by client");if(pingInterval!=undefined){Logger.debug("Clearing ping interval");clearInterval(pingInterval)}pingPongStarted=false;enabledPings=false;if(configuration.sendCloseMessage){Logger.debug("Sending close message");this.send("closeSession",null,function(error,result){if(error){Logger.error("Error sending close message: "+JSON.stringify(error))}ws.close()})}else{ws.close()}};this.forceClose=function(millis){ws.forceClose(millis)};this.reconnect=function(){ws.reconnectWs()}}module.exports=JsonRpcClient},{"../":43,"./transports/webSocketWithReconnection":42}],41:[function(require,module,exports){var WebSocketWithReconnection=require("./webSocketWithReconnection");exports.WebSocketWithReconnection=WebSocketWithReconnection},{"./webSocketWithReconnection":42}],42:[function(require,module,exports){(function(global){"use strict";var BrowserWebSocket=global.WebSocket||global.MozWebSocket;var Logger=console;var MAX_RETRIES=2e3;var RETRY_TIME_MS=3e3;var CONNECTING=0;var OPEN=1;var CLOSING=2;var CLOSED=3;function WebSocketWithReconnection(config){var closing=false;var registerMessageHandler;var wsUri=config.uri;var useSockJS=config.useSockJS;var reconnecting=false;var forcingDisconnection=false;var ws;if(useSockJS){ws=new SockJS(wsUri)}else{ws=new WebSocket(wsUri)}ws.onopen=function(){logConnected(ws,wsUri);if(config.onconnected){config.onconnected()}};ws.onerror=function(error){Logger.error("Could not connect to "+wsUri+" (invoking onerror if defined)",error);if(config.onerror){config.onerror(error)}};function logConnected(ws,wsUri){try{Logger.debug("WebSocket connected to "+wsUri)}catch(e){Logger.error(e)}}var reconnectionOnClose=function(){if(ws.readyState===CLOSED){if(closing){Logger.debug("Connection closed by user")}else{Logger.debug("Connection closed unexpectecly. Reconnecting...");reconnectToSameUri(MAX_RETRIES,1)}}else{Logger.debug("Close callback from previous websocket. Ignoring it")}};ws.onclose=reconnectionOnClose;function reconnectToSameUri(maxRetries,numRetries){Logger.debug("reconnectToSameUri (attempt #"+numRetries+", max="+maxRetries+")");if(numRetries===1){if(reconnecting){Logger.warn("Trying to reconnectToNewUri when reconnecting... Ignoring this reconnection.");return}else{reconnecting=true}if(config.onreconnecting){config.onreconnecting()}}if(forcingDisconnection){reconnectToNewUri(maxRetries,numRetries,wsUri)}else{if(config.newWsUriOnReconnection){config.newWsUriOnReconnection(function(error,newWsUri){if(error){Logger.debug(error);setTimeout(function(){reconnectToSameUri(maxRetries,numRetries+1)},RETRY_TIME_MS)}else{reconnectToNewUri(maxRetries,numRetries,newWsUri)}})}else{reconnectToNewUri(maxRetries,numRetries,wsUri)}}}function reconnectToNewUri(maxRetries,numRetries,reconnectWsUri){Logger.debug("Reconnection attempt #"+numRetries);ws.close();wsUri=reconnectWsUri||wsUri;var newWs;if(useSockJS){newWs=new SockJS(wsUri)}else{newWs=new WebSocket(wsUri)}newWs.onopen=function(){Logger.debug("Reconnected after "+numRetries+" attempts...");logConnected(newWs,wsUri);reconnecting=false;registerMessageHandler();if(config.onreconnected()){config.onreconnected()}newWs.onclose=reconnectionOnClose};var onErrorOrClose=function(error){Logger.warn("Reconnection error: ",error);if(numRetries===maxRetries){if(config.ondisconnect){config.ondisconnect()}}else{setTimeout(function(){reconnectToSameUri(maxRetries,numRetries+1)},RETRY_TIME_MS)}};newWs.onerror=onErrorOrClose;ws=newWs}this.close=function(){closing=true;ws.close()};this.forceClose=function(millis){Logger.debug("Testing: Force WebSocket close");if(millis){Logger.debug("Testing: Change wsUri for "+millis+" millis to simulate net failure");var goodWsUri=wsUri;wsUri="wss://21.234.12.34.4:443/";forcingDisconnection=true;setTimeout(function(){Logger.debug("Testing: Recover good wsUri "+goodWsUri);wsUri=goodWsUri;forcingDisconnection=false},millis)}ws.close()};this.reconnectWs=function(){Logger.debug("reconnectWs");reconnectToSameUri(MAX_RETRIES,1,wsUri)};this.send=function(message){ws.send(message)};this.addEventListener=function(type,callback){registerMessageHandler=function(){ws.addEventListener(type,callback)};registerMessageHandler()}}module.exports=WebSocketWithReconnection}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}],43:[function(require,module,exports){var defineProperty_IE8=false;if(Object.defineProperty){try{Object.defineProperty({},"x",{})}catch(e){defineProperty_IE8=true}}if(!Function.prototype.bind){Function.prototype.bind=function(oThis){if(typeof this!=="function"){throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable")}var aArgs=Array.prototype.slice.call(arguments,1),fToBind=this,fNOP=function(){},fBound=function(){return fToBind.apply(this instanceof fNOP&&oThis?this:oThis,aArgs.concat(Array.prototype.slice.call(arguments)))};fNOP.prototype=this.prototype;fBound.prototype=new fNOP;return fBound}}var EventEmitter=require("events").EventEmitter;var inherits=require("inherits");var packers=require("./packers");var Mapper=require("./Mapper");var BASE_TIMEOUT=5e3;function unifyResponseMethods(responseMethods){if(!responseMethods)return{};for(var key in responseMethods){var value=responseMethods[key];if(typeof value=="string")responseMethods[key]={response:value}}return responseMethods}function unifyTransport(transport){if(!transport)return;if(transport instanceof Function)return{send:transport};if(transport.send instanceof Function)return transport;if(transport.postMessage instanceof Function){transport.send=transport.postMessage;return transport}if(transport.write instanceof Function){transport.send=transport.write;return transport}if(transport.onmessage!==undefined)return;if(transport.pause instanceof Function)return;throw new SyntaxError("Transport is not a function nor a valid object")}function RpcNotification(method,params){if(defineProperty_IE8){this.method=method;this.params=params}else{Object.defineProperty(this,"method",{value:method,enumerable:true});Object.defineProperty(this,"params",{value:params,enumerable:true})}}function RpcBuilder(packer,options,transport,onRequest){var self=this;if(!packer)throw new SyntaxError("Packer is not defined");if(!packer.pack||!packer.unpack)throw new SyntaxError("Packer is invalid");var responseMethods=unifyResponseMethods(packer.responseMethods);if(options instanceof Function){if(transport!=undefined)throw new SyntaxError("There can't be parameters after onRequest");onRequest=options;transport=undefined;options=undefined}if(options&&options.send instanceof Function){if(transport&&!(transport instanceof Function))throw new SyntaxError("Only a function can be after transport");onRequest=transport;transport=options;options=undefined}if(transport instanceof Function){if(onRequest!=undefined)throw new SyntaxError("There can't be parameters after onRequest");onRequest=transport;transport=undefined}if(transport&&transport.send instanceof Function)if(onRequest&&!(onRequest instanceof Function))throw new SyntaxError("Only a function can be after transport");options=options||{};EventEmitter.call(this);if(onRequest)this.on("request",onRequest);if(defineProperty_IE8)this.peerID=options.peerID;else Object.defineProperty(this,"peerID",{value:options.peerID});var max_retries=options.max_retries||0;function transportMessage(event){self.decode(event.data||event)}this.getTransport=function(){return transport};this.setTransport=function(value){if(transport){if(transport.removeEventListener)transport.removeEventListener("message",transportMessage);else if(transport.removeListener)transport.removeListener("data",transportMessage)}if(value){if(value.addEventListener)value.addEventListener("message",transportMessage);else if(value.addListener)value.addListener("data",transportMessage)}transport=unifyTransport(value)};if(!defineProperty_IE8)Object.defineProperty(this,"transport",{get:this.getTransport.bind(this),set:this.setTransport.bind(this)});this.setTransport(transport);var request_timeout=options.request_timeout||BASE_TIMEOUT;var ping_request_timeout=options.ping_request_timeout||request_timeout;var response_timeout=options.response_timeout||BASE_TIMEOUT;var duplicates_timeout=options.duplicates_timeout||BASE_TIMEOUT;var requestID=0;var requests=new Mapper;var responses=new Mapper;var processedResponses=new Mapper;var message2Key={};function storeResponse(message,id,dest){var response={message:message,timeout:setTimeout(function(){responses.remove(id,dest)},response_timeout)};responses.set(response,id,dest)}function storeProcessedResponse(ack,from){var timeout=setTimeout(function(){processedResponses.remove(ack,from)},duplicates_timeout);processedResponses.set(timeout,ack,from)}function RpcRequest(method,params,id,from,transport){RpcNotification.call(this,method,params);this.getTransport=function(){return transport};this.setTransport=function(value){transport=unifyTransport(value)};if(!defineProperty_IE8)Object.defineProperty(this,"transport",{get:this.getTransport.bind(this),set:this.setTransport.bind(this)});var response=responses.get(id,from);if(!(transport||self.getTransport())){if(defineProperty_IE8)this.duplicated=Boolean(response);else Object.defineProperty(this,"duplicated",{value:Boolean(response)})}var responseMethod=responseMethods[method];this.pack=packer.pack.bind(packer,this,id);this.reply=function(error,result,transport){if(error instanceof Function||error&&error.send instanceof Function){if(result!=undefined)throw new SyntaxError("There can't be parameters after callback");transport=error;result=null;error=undefined}else if(result instanceof Function||result&&result.send instanceof Function){if(transport!=undefined)throw new SyntaxError("There can't be parameters after callback");transport=result;result=null}transport=unifyTransport(transport);if(response)clearTimeout(response.timeout);if(from!=undefined){if(error)error.dest=from;if(result)result.dest=from}var message;if(error||result!=undefined){if(self.peerID!=undefined){if(error)error.from=self.peerID;else result.from=self.peerID}if(responseMethod){if(responseMethod.error==undefined&&error)message={error:error};else{var method=error?responseMethod.error:responseMethod.response;message={method:method,params:error||result}}}else message={error:error,result:result};message=packer.pack(message,id)}else if(response)message=response.message;else message=packer.pack({result:null},id);storeResponse(message,id,from);transport=transport||this.getTransport()||self.getTransport();if(transport)return transport.send(message);return message}}inherits(RpcRequest,RpcNotification);function cancel(message){var key=message2Key[message];if(!key)return;delete message2Key[message];var request=requests.pop(key.id,key.dest);if(!request)return;clearTimeout(request.timeout);storeProcessedResponse(key.id,key.dest)}this.cancel=function(message){if(message)return cancel(message);for(var message in message2Key)cancel(message)};this.close=function(){var transport=this.getTransport();if(transport&&transport.close)transport.close();this.cancel();processedResponses.forEach(clearTimeout);responses.forEach(function(response){clearTimeout(response.timeout)})};this.encode=function(method,params,dest,transport,callback){if(params instanceof Function){if(dest!=undefined)throw new SyntaxError("There can't be parameters after callback");callback=params;transport=undefined;dest=undefined;params=undefined}else if(dest instanceof Function){if(transport!=undefined)throw new SyntaxError("There can't be parameters after callback");callback=dest;transport=undefined;dest=undefined}else if(transport instanceof Function){if(callback!=undefined)throw new SyntaxError("There can't be parameters after callback");callback=transport;transport=undefined}if(self.peerID!=undefined){params=params||{};params.from=self.peerID}if(dest!=undefined){params=params||{};params.dest=dest}var message={method:method,params:params};if(callback){var id=requestID++;var retried=0;message=packer.pack(message,id);function dispatchCallback(error,result){self.cancel(message);callback(error,result)}var request={message:message,callback:dispatchCallback,responseMethods:responseMethods[method]||{}};var encode_transport=unifyTransport(transport);function sendRequest(transport){var rt=method==="ping"?ping_request_timeout:request_timeout;request.timeout=setTimeout(timeout,rt*Math.pow(2,retried++));message2Key[message]={id:id,dest:dest};requests.set(request,id,dest);transport=transport||encode_transport||self.getTransport();if(transport)return transport.send(message);return message}function retry(transport){transport=unifyTransport(transport);console.warn(retried+" retry for request message:",message);var timeout=processedResponses.pop(id,dest);clearTimeout(timeout);return sendRequest(transport)}function timeout(){if(retried0){return sdp.slice(0,n)}else{return sdp}}function getSimulcastInfo(videoStream){var videoTracks=videoStream.getVideoTracks();if(!videoTracks.length){logger.warn("No video tracks available in the video stream");return""}var lines=["a=x-google-flag:conference","a=ssrc-group:SIM 1 2 3","a=ssrc:1 cname:localVideo","a=ssrc:1 msid:"+videoStream.id+" "+videoTracks[0].id,"a=ssrc:1 mslabel:"+videoStream.id,"a=ssrc:1 label:"+videoTracks[0].id,"a=ssrc:2 cname:localVideo","a=ssrc:2 msid:"+videoStream.id+" "+videoTracks[0].id,"a=ssrc:2 mslabel:"+videoStream.id,"a=ssrc:2 label:"+videoTracks[0].id,"a=ssrc:3 cname:localVideo","a=ssrc:3 msid:"+videoStream.id+" "+videoTracks[0].id,"a=ssrc:3 mslabel:"+videoStream.id,"a=ssrc:3 label:"+videoTracks[0].id];lines.push("");return lines.join("\n")}function WebRtcPeer(mode,options,callback){if(!(this instanceof WebRtcPeer)){return new WebRtcPeer(mode,options,callback)}WebRtcPeer.super_.call(this);if(options instanceof Function){callback=options;options=undefined}options=options||{};callback=(callback||noop).bind(this);var self=this;var localVideo=options.localVideo;var remoteVideo=options.remoteVideo;var videoStream=options.videoStream;var audioStream=options.audioStream;var mediaConstraints=options.mediaConstraints;var connectionConstraints=options.connectionConstraints;var pc=options.peerConnection;var sendSource=options.sendSource||"webcam";var dataChannelConfig=options.dataChannelConfig;var useDataChannels=options.dataChannels||false;var dataChannel;var guid=uuid.v4();var configuration=recursive({iceServers:freeice()},options.configuration);var onicecandidate=options.onicecandidate;if(onicecandidate)this.on("icecandidate",onicecandidate);var oncandidategatheringdone=options.oncandidategatheringdone;if(oncandidategatheringdone){this.on("candidategatheringdone",oncandidategatheringdone)}var simulcast=options.simulcast;var multistream=options.multistream;var interop=new sdpTranslator.Interop;var candidatesQueueOut=[];var candidategatheringdone=false;Object.defineProperties(this,{peerConnection:{get:function(){return pc}},id:{value:options.id||guid,writable:false},remoteVideo:{get:function(){return remoteVideo}},localVideo:{get:function(){return localVideo}},dataChannel:{get:function(){return dataChannel}},currentFrame:{get:function(){if(!remoteVideo)return;if(remoteVideo.readyStateUnifiedPlan",dumpSDP(localDescription))}callback(null,localDescription.sdp,self.processAnswer.bind(self))}).catch(callback)};this.getLocalSessionDescriptor=function(){return pc.localDescription};this.getRemoteSessionDescriptor=function(){return pc.remoteDescription};function setRemoteVideo(){if(remoteVideo){var stream=pc.getRemoteStreams()[0];var url=stream?URL.createObjectURL(stream):"";remoteVideo.pause();remoteVideo.src=url;remoteVideo.load();logger.debug("Remote URL:",url)}}this.showLocalVideo=function(){localVideo.src=URL.createObjectURL(videoStream);localVideo.muted=true};this.send=function(data){if(dataChannel&&dataChannel.readyState==="open"){dataChannel.send(data)}else{logger.warn("Trying to send data over a non-existing or closed data channel")}};this.processAnswer=function(sdpAnswer,callback){callback=(callback||noop).bind(this);var answer=new RTCSessionDescription({type:"answer",sdp:sdpAnswer});if(multistream&&usePlanB){var planBAnswer=interop.toPlanB(answer);logger.debug("asnwer::planB",dumpSDP(planBAnswer));answer=planBAnswer}logger.debug("SDP answer received, setting remote description");if(pc.signalingState==="closed"){return callback("PeerConnection is closed")}pc.setRemoteDescription(answer,function(){setRemoteVideo();callback()},callback)};this.processOffer=function(sdpOffer,callback){callback=callback.bind(this);var offer=new RTCSessionDescription({type:"offer",sdp:sdpOffer});if(multistream&&usePlanB){var planBOffer=interop.toPlanB(offer);logger.debug("offer::planB",dumpSDP(planBOffer));offer=planBOffer}logger.debug("SDP offer received, setting remote description");if(pc.signalingState==="closed"){return callback("PeerConnection is closed")}pc.setRemoteDescription(offer).then(function(){return setRemoteVideo()}).then(function(){return pc.createAnswer()}).then(function(answer){answer=mangleSdpToAddSimulcast(answer);logger.debug("Created SDP answer");return pc.setLocalDescription(answer)}).then(function(){var localDescription=pc.localDescription;if(multistream&&usePlanB){localDescription=interop.toUnifiedPlan(localDescription);logger.debug("answer::origPlanB->UnifiedPlan",dumpSDP(localDescription))}logger.debug("Local description set",localDescription.sdp);callback(null,localDescription.sdp)}).catch(callback)};function mangleSdpToAddSimulcast(answer){if(simulcast){if(browser.name==="Chrome"||browser.name==="Chromium"){logger.debug("Adding multicast info");answer=new RTCSessionDescription({type:answer.type,sdp:removeFIDFromOffer(answer.sdp)+getSimulcastInfo(videoStream)})}else{logger.warn("Simulcast is only available in Chrome browser.")}}return answer}function start(){if(pc.signalingState==="closed"){callback('The peer connection object is in "closed" state. This is most likely due to an invocation of the dispose method before accepting in the dialogue')}if(videoStream&&localVideo){self.showLocalVideo()}if(videoStream){pc.addStream(videoStream)}if(audioStream){pc.addStream(audioStream)}var browser=parser.getBrowser();if(mode==="sendonly"&&(browser.name==="Chrome"||browser.name==="Chromium")&&browser.major===39){mode="sendrecv"}callback()}if(mode!=="recvonly"&&!videoStream&&!audioStream){function getMedia(constraints){if(constraints===undefined){constraints=MEDIA_CONSTRAINTS}navigator.mediaDevices.getUserMedia(constraints).then(function(stream){videoStream=stream;start()}).catch(callback)}if(sendSource==="webcam"){getMedia(mediaConstraints)}else{getScreenConstraints(sendSource,function(error,constraints_){if(error)return callback(error);constraints=[mediaConstraints];constraints.unshift(constraints_);getMedia(recursive.apply(undefined,constraints))},guid)}}else{setTimeout(start,0)}this.on("_dispose",function(){if(localVideo){localVideo.pause();localVideo.src="";localVideo.load();localVideo.muted=false}if(remoteVideo){remoteVideo.pause();remoteVideo.src="";remoteVideo.load()}self.removeAllListeners();if(window.cancelChooseDesktopMedia!==undefined){window.cancelChooseDesktopMedia(guid)}})}inherits(WebRtcPeer,EventEmitter);function createEnableDescriptor(type){var method="get"+type+"Tracks";return{enumerable:true,get:function(){if(!this.peerConnection)return;var streams=this.peerConnection.getLocalStreams();if(!streams.length)return;for(var i=0,stream;stream=streams[i];i++){var tracks=stream[method]();for(var j=0,track;track=tracks[j];j++)if(!track.enabled)return false}return true},set:function(value){function trackSetEnable(track){track.enabled=value}this.peerConnection.getLocalStreams().forEach(function(stream){stream[method]().forEach(trackSetEnable)})}}}Object.defineProperties(WebRtcPeer.prototype,{enabled:{enumerable:true,get:function(){return this.audioEnabled&&this.videoEnabled},set:function(value){this.audioEnabled=this.videoEnabled=value}},audioEnabled:createEnableDescriptor("Audio"),videoEnabled:createEnableDescriptor("Video")});WebRtcPeer.prototype.getLocalStream=function(index){if(this.peerConnection){return this.peerConnection.getLocalStreams()[index||0]}};WebRtcPeer.prototype.getRemoteStream=function(index){if(this.peerConnection){return this.peerConnection.getRemoteStreams()[index||0]}};WebRtcPeer.prototype.dispose=function(){logger.debug("Disposing WebRtcPeer");var pc=this.peerConnection;var dc=this.dataChannel;try{if(dc){if(dc.signalingState==="closed")return;dc.close()}if(pc){if(pc.signalingState==="closed")return;pc.getLocalStreams().forEach(streamStop);pc.close()}}catch(err){logger.warn("Exception disposing webrtc peer "+err)}this.emit("_dispose")};function WebRtcPeerRecvonly(options,callback){if(!(this instanceof WebRtcPeerRecvonly)){return new WebRtcPeerRecvonly(options,callback)}WebRtcPeerRecvonly.super_.call(this,"recvonly",options,callback)}inherits(WebRtcPeerRecvonly,WebRtcPeer);function WebRtcPeerSendonly(options,callback){if(!(this instanceof WebRtcPeerSendonly)){return new WebRtcPeerSendonly(options,callback)}WebRtcPeerSendonly.super_.call(this,"sendonly",options,callback)}inherits(WebRtcPeerSendonly,WebRtcPeer);function WebRtcPeerSendrecv(options,callback){if(!(this instanceof WebRtcPeerSendrecv)){return new WebRtcPeerSendrecv(options,callback)}WebRtcPeerSendrecv.super_.call(this,"sendrecv",options,callback)}inherits(WebRtcPeerSendrecv,WebRtcPeer);function harkUtils(stream,options){return hark(stream,options)}exports.bufferizeCandidates=bufferizeCandidates;exports.WebRtcPeerRecvonly=WebRtcPeerRecvonly;exports.WebRtcPeerSendonly=WebRtcPeerSendonly;exports.WebRtcPeerSendrecv=WebRtcPeerSendrecv;exports.hark=harkUtils},{events:1,freeice:2,hark:5,inherits:6,merge:7,"sdp-translator":15,"ua-parser-js":19,uuid:20}],48:[function(require,module,exports){var WebRtcPeer=require("./WebRtcPeer");exports.WebRtcPeer=WebRtcPeer},{"./WebRtcPeer":47}],49:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var OpenVidu_1=require("./OpenVidu");if(window){window["OpenVidu"]=OpenVidu_1.OpenVidu}},{"./OpenVidu":50}],50:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var OpenViduInternal_1=require("../OpenViduInternal/OpenViduInternal");var Session_1=require("./Session");var Publisher_1=require("./Publisher");var OpenViduError_1=require("../OpenViduInternal/OpenViduError");var adapter=require("webrtc-adapter");var screenSharingAuto=require("../ScreenSharing/Screen-Capturing-Auto.js");if(window){window["adapter"]=adapter}var OpenVidu=function(){function OpenVidu(){this.openVidu=new OpenViduInternal_1.OpenViduInternal;console.info("'OpenVidu' initialized")}OpenVidu.prototype.initSession=function(param1,param2){if(this.checkSystemRequirements()){if(typeof param2=="string"){return new Session_1.Session(this.openVidu.initSession(param2),this)}else{return new Session_1.Session(this.openVidu.initSession(param1),this)}}else{alert("Browser not supported")}};OpenVidu.prototype.initPublisher=function(parentId,cameraOptions,callback){if(this.checkSystemRequirements()){this.openVidu.storedPublisherOptions=cameraOptions;var publisher_1;if(cameraOptions!=null){cameraOptions.audio=cameraOptions.audio!=null?cameraOptions.audio:true;cameraOptions.video=cameraOptions.video!=null?cameraOptions.video:true;if(!cameraOptions.screen){var cameraOptionsAux={sendAudio:cameraOptions.audio!=null?cameraOptions.audio:true,sendVideo:cameraOptions.video!=null?cameraOptions.video:true,activeAudio:cameraOptions.audioActive!=null?cameraOptions.audioActive:true,activeVideo:cameraOptions.videoActive!=null?cameraOptions.videoActive:true,data:true,mediaConstraints:this.openVidu.generateMediaConstraints(cameraOptions)};cameraOptions=cameraOptionsAux;publisher_1=new Publisher_1.Publisher(this.openVidu.initPublisherTagged(parentId,cameraOptions,callback),parentId,false);console.info("'Publisher' initialized");return publisher_1}else{publisher_1=new Publisher_1.Publisher(this.openVidu.initPublisherScreen(parentId,callback),parentId,true);if(adapter.browserDetails.browser==="firefox"&&adapter.browserDetails.version>=52){screenSharingAuto.getScreenId(function(error,sourceId,screenConstraints){cameraOptions={sendAudio:cameraOptions.audio,sendVideo:cameraOptions.video,activeAudio:cameraOptions.audioActive!=null?cameraOptions.audioActive:true,activeVideo:cameraOptions.videoActive!=null?cameraOptions.videoActive:true,data:true,mediaConstraints:{video:screenConstraints.video,audio:false}};publisher_1.stream.configureScreenOptions(cameraOptions);console.info("'Publisher' initialized")});return publisher_1}else if(adapter.browserDetails.browser==="chrome"){screenSharingAuto.getScreenId(function(error,sourceId,screenConstraints){if(error==="not-installed"){var error_1=new OpenViduError_1.OpenViduError(OpenViduError_1.OpenViduErrorName.SCREEN_EXTENSION_NOT_INSTALLED,"https://chrome.google.com/webstore/detail/screen-capturing/ajhifddimkapgcifgcodmmfdlknahffk");console.error(error_1);if(callback)callback(error_1);return}else if(error==="permission-denied"){var error_2=new OpenViduError_1.OpenViduError(OpenViduError_1.OpenViduErrorName.SCREEN_CAPTURE_DENIED,"You must allow access to one window of your desktop");console.error(error_2);if(callback)callback(error_2);return}cameraOptions={sendAudio:cameraOptions.audio!=null?cameraOptions.audio:true,sendVideo:cameraOptions.video!=null?cameraOptions.video:true,activeAudio:cameraOptions.audioActive!=null?cameraOptions.audioActive:true,activeVideo:cameraOptions.videoActive!=null?cameraOptions.videoActive:true,data:true,mediaConstraints:{video:screenConstraints.video,audio:false}};publisher_1.stream.configureScreenOptions(cameraOptions)},function(error){console.error("getScreenId error",error);return});console.info("'Publisher' initialized");return publisher_1}else{console.error("Screen sharing not supported on "+adapter.browserDetails.browser)}}}else{cameraOptions={sendAudio:true,sendVideo:true,activeAudio:true,activeVideo:true,data:true,mediaConstraints:{audio:true,video:{width:{ideal:1280}}}};publisher_1=new Publisher_1.Publisher(this.openVidu.initPublisherTagged(parentId,cameraOptions,callback),parentId,false);console.info("'Publisher' initialized");return publisher_1}}else{alert("Browser not supported")}};OpenVidu.prototype.checkSystemRequirements=function(){var browser=adapter.browserDetails.browser;var version=adapter.browserDetails.version;if(browser=="firefox"&&version==null){return 1}if(browser=="chrome"&&version>=28||browser=="edge"&&version>=12||browser=="firefox"&&version>=22){return 1}else{return 0}};OpenVidu.prototype.getDevices=function(callback){navigator.mediaDevices.enumerateDevices().then(function(deviceInfos){callback(null,deviceInfos)}).catch(function(error){console.error("Error getting devices",error);callback(error,null)})};OpenVidu.prototype.enableProdMode=function(){console.log=function(){};console.debug=function(){};console.info=function(){};console.warn=function(){}};return OpenVidu}();exports.OpenVidu=OpenVidu},{"../OpenViduInternal/OpenViduError":55,"../OpenViduInternal/OpenViduInternal":56,"../ScreenSharing/Screen-Capturing-Auto.js":59,"./Publisher":51,"./Session":52,"webrtc-adapter":25}],51:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var EventEmitter=require("wolfy87-eventemitter");var Publisher=function(){function Publisher(stream,parentId,isScreenRequested){this.ee=new EventEmitter;this.accessAllowed=false;this.isScreenRequested=false;this.stream=stream;this.isScreenRequested=isScreenRequested;this.ee.addListener("stream-destroyed-default",function(event){event.stream.removeVideo()});if(document.getElementById(parentId)!=null){this.element=document.getElementById(parentId)}}Publisher.prototype.publishAudio=function(value){this.stream.getWebRtcPeer().audioEnabled=value};Publisher.prototype.publishVideo=function(value){this.stream.getWebRtcPeer().videoEnabled=value};Publisher.prototype.destroy=function(){this.session.unpublish(this);this.stream.dispose();this.stream.removeVideo(this.element);return this};Publisher.prototype.subscribeToRemote=function(){this.stream.subscribeToMyRemote()};Publisher.prototype.on=function(eventName,callback){var _this=this;this.ee.addListener(eventName,function(event){if(event){console.info("Event '"+eventName+"' triggered by 'Publisher'",event)}else{console.info("Event '"+eventName+"' triggered by 'Publisher'")}callback(event)});if(eventName=="streamCreated"){if(this.stream.isPublisherPublished){this.ee.emitEvent("streamCreated",[{stream:this.stream}])}else{this.stream.addEventListener("stream-created-by-publisher",function(){_this.ee.emitEvent("streamCreated",[{stream:_this.stream}])})}}if(eventName=="videoElementCreated"){if(this.stream.isVideoELementCreated){this.ee.emitEvent("videoElementCreated",[{element:this.stream.getVideoElement()}])}else{this.stream.addEventListener("video-element-created-by-stream",function(element){_this.id=element.id;_this.ee.emitEvent("videoElementCreated",[{element:element.element}])})}}if(eventName=="videoPlaying"){var video=this.stream.getVideoElement();if(!this.stream.displayMyRemote()&&video&&video.currentTime>0&&video.paused==false&&video.ended==false&&video.readyState==4){this.ee.emitEvent("videoPlaying",[{element:this.stream.getVideoElement()}])}else{this.stream.addEventListener("video-is-playing",function(element){_this.ee.emitEvent("videoPlaying",[{element:element.element}])})}}if(eventName=="remoteVideoPlaying"){var video=this.stream.getVideoElement();if(this.stream.displayMyRemote()&&video&&video.currentTime>0&&video.paused==false&&video.ended==false&&video.readyState==4){this.ee.emitEvent("remoteVideoPlaying",[{element:this.stream.getVideoElement()}])}else{this.stream.addEventListener("remote-video-is-playing",function(element){_this.ee.emitEvent("remoteVideoPlaying",[{element:element.element}])})}}if(eventName=="accessAllowed"){if(this.stream.accessIsAllowed){this.ee.emitEvent("accessAllowed")}else{this.stream.addEventListener("access-allowed-by-publisher",function(){_this.ee.emitEvent("accessAllowed")})}}if(eventName=="accessDenied"){if(this.stream.accessIsDenied){this.ee.emitEvent("accessDenied")}else{this.stream.addEventListener("access-denied-by-publisher",function(){_this.ee.emitEvent("accessDenied")})}}};return Publisher}();exports.Publisher=Publisher},{"wolfy87-eventemitter":37}],52:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var Subscriber_1=require("./Subscriber");var EventEmitter=require("wolfy87-eventemitter");var Session=function(){function Session(session,openVidu){var _this=this;this.session=session;this.openVidu=openVidu;this.ee=new EventEmitter;this.sessionId=session.getSessionId();this.session.addEventListener("stream-destroyed-default",function(event){event.stream.removeVideo()});this.session.addEventListener("session-disconnected-default",function(){var s;for(var _i=0,_a=_this.openVidu.openVidu.getRemoteStreams();_i<_a.length;_i++){s=_a[_i];s.removeVideo()}if(_this.connection){for(var streamId in _this.connection.getStreams()){_this.connection.getStreams()[streamId].removeVideo()}}});this.session.addEventListener("update-connection-object",function(event){_this.connection=event.connection})}Session.prototype.connect=function(param1,param2,param3){if(param3){this.session.configure({sessionId:this.session.getSessionId(),participantId:param1,metadata:this.session.stringClientMetadata(param2),subscribeToStreams:false});this.session.connect(param1,param3)}else{this.session.configure({sessionId:this.session.getSessionId(),participantId:param1,metadata:"",subscribeToStreams:false});this.session.connect(param1,param2)}};Session.prototype.disconnect=function(){var _this=this;this.openVidu.openVidu.close(false);this.session.emitEvent("sessionDisconnected",[{preventDefault:function(){_this.session.removeEvent("session-disconnected-default")}}]);this.session.emitEvent("session-disconnected-default",[{}])};Session.prototype.publish=function(publisher){var _this=this;if(!publisher.stream.isPublisherPublished){if(publisher.isScreenRequested){if(!publisher.stream.isScreenRequestedReady){publisher.stream.addOnceEventListener("screen-ready",function(){_this.streamPublish(publisher)})}else{this.streamPublish(publisher)}}else{this.streamPublish(publisher)}}else{var mypublisher_1=this.openVidu.initPublisher(publisher.stream.getParentId(),this.openVidu.openVidu.storedPublisherOptions);if(mypublisher_1.isScreenRequested&&!mypublisher_1.stream.isScreenRequestedReady){mypublisher_1.stream.addOnceEventListener("screen-ready",function(){_this.streamPublish(mypublisher_1)})}else{this.streamPublish(mypublisher_1)}}};Session.prototype.streamPublish=function(publisher){publisher.session=this;publisher.stream.publish()};Session.prototype.unpublish=function(publisher){this.session.unpublish(publisher)};Session.prototype.on=function(eventName,callback){this.session.addEventListener(eventName,function(event){if(event){console.info("Event '"+eventName+"' triggered by 'Session'",event)}else{console.info("Event '"+eventName+"' triggered by 'Session'")}callback(event)})};Session.prototype.once=function(eventName,callback){this.session.addOnceEventListener(eventName,function(event){callback(event)})};Session.prototype.off=function(eventName,eventHandler){this.session.removeListener(eventName,eventHandler)};Session.prototype.subscribe=function(param1,param2,param3){this.session.subscribe(param1);var subscriber=new Subscriber_1.Subscriber(param1,param2);param1.playOnlyVideo(param2,null);return subscriber};Session.prototype.unsubscribe=function(subscriber){this.session.unsubscribe(subscriber.stream);subscriber.stream.removeVideo()};Session.prototype.signal=function(signal,completionHandler){var signalMessage={};if(signal.to&&signal.to.length>0){var connectionIds=[];for(var i=0;i0&&video.paused==false&&video.ended==false&&video.readyState==4){this.ee.emitEvent("videoPlaying",[{element:this.stream.getVideoElement()}])}else{this.stream.addOnceEventListener("video-is-playing",function(element){_this.ee.emitEvent("videoPlaying",[{element:element.element}])})}}};return Subscriber}();exports.Subscriber=Subscriber},{"wolfy87-eventemitter":37}],54:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var Stream_1=require("./Stream");var Connection=function(){function Connection(openVidu,local,room,options){this.openVidu=openVidu;this.local=local;this.room=room;this.options=options;this.streams={};console.info("'Connection' created ("+(local?"local":"remote")+")"+(local?"":", with 'connectionId' ["+(options?options.id:"")+"] "));if(options){this.connectionId=options.id;this.data=options.metadata;if(options.streams){this.initStreams(options)}}}Connection.prototype.addStream=function(stream){this.streams[stream.streamId]=stream;this.room.getStreams()[stream.streamId]=stream};Connection.prototype.removeStream=function(key){delete this.streams[key];delete this.room.getStreams()[key];delete this.streamsOpts};Connection.prototype.getStreams=function(){return this.streams};Connection.prototype.dispose=function(){for(var key in this.streams){this.streams[key].dispose()}};Connection.prototype.sendIceCandidate=function(candidate){console.debug(this.local?"Local":"Remote","candidate for",this.connectionId,JSON.stringify(candidate));this.openVidu.sendRequest("onIceCandidate",{endpointName:this.connectionId,candidate:candidate.candidate,sdpMid:candidate.sdpMid,sdpMLineIndex:candidate.sdpMLineIndex},function(error,response){if(error){console.error("Error sending ICE candidate: "+JSON.stringify(error))}})};Connection.prototype.initStreams=function(options){for(var _i=0,_a=options.streams;_i<_a.length;_i++){var streamOptions=_a[_i];var streamOpts={id:streamOptions.id,connection:this,sendAudio:streamOptions.sendAudio,sendVideo:streamOptions.sendVideo,recvAudio:streamOptions.audioActive==undefined?true:streamOptions.audioActive,recvVideo:streamOptions.videoActive==undefined?true:streamOptions.videoActive,typeOfVideo:streamOptions.typeOfVideo,activeAudio:streamOptions.activeAudio,activeVideo:streamOptions.activeVideo,data:streamOptions.data,mediaConstraints:streamOptions.mediaConstraints};var stream=new Stream_1.Stream(this.openVidu,false,this.room,streamOpts);this.addStream(stream);this.streamsOpts=streamOpts}console.info("Remote 'Connection' with 'connectionId' ["+this.connectionId+"] is now configured for receiving Streams with options: ",this.streamsOpts)};return Connection}();exports.Connection=Connection},{"./Stream":58}],55:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var OpenViduErrorName;(function(OpenViduErrorName){OpenViduErrorName["CAMERA_ACCESS_DENIED"]="CAMERA_ACCESS_DENIED";OpenViduErrorName["MICROPHONE_ACCESS_DENIED"]="MICROPHONE_ACCESS_DENIED";OpenViduErrorName["SCREEN_CAPTURE_DENIED"]="SCREEN_CAPTURE_DENIED";OpenViduErrorName["NO_VIDEO_DEVICE"]="NO_VIDEO_DEVICE";OpenViduErrorName["NO_INPUT_DEVICE"]="NO_INPUT_DEVICE";OpenViduErrorName["SCREEN_EXTENSION_NOT_INSTALLED"]="SCREEN_EXTENSION_NOT_INSTALLED";OpenViduErrorName["GENERIC_ERROR"]="GENERIC_ERROR"})(OpenViduErrorName=exports.OpenViduErrorName||(exports.OpenViduErrorName={}));var OpenViduError=function(){function OpenViduError(name,message){this.name=name;this.message=message}return OpenViduError}();exports.OpenViduError=OpenViduError},{}],56:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var SessionInternal_1=require("./SessionInternal");var OpenViduError_1=require("./OpenViduError");var Stream_1=require("./Stream");var RpcBuilder=require("../KurentoUtils/kurento-jsonrpc");var OpenViduInternal=function(){function OpenViduInternal(){this.remoteStreams=[]}OpenViduInternal.prototype.initSession=function(sessionId){console.info("'Session' initialized with 'sessionId' ["+sessionId+"]");this.session=new SessionInternal_1.SessionInternal(this,sessionId);return this.session};OpenViduInternal.prototype.initPublisherTagged=function(parentId,cameraOptions,callback){var _this=this;this.getCamera(cameraOptions);this.camera.requestCameraAccess(function(error,camera){if(error){console.error(error);if(callback){callback(error)}_this.camera.ee.emitEvent("access-denied-by-publisher")}else{_this.camera.setVideoElement(_this.cameraReady(camera,parentId));if(callback){callback(undefined)}}});return this.camera};OpenViduInternal.prototype.initPublisherScreen=function(parentId,callback){var _this=this;if(!this.camera){this.camera=new Stream_1.Stream(this,true,this.session,"screen-options")}this.camera.addOnceEventListener("can-request-screen",function(){_this.camera.requestCameraAccess(function(error,camera){if(error){_this.camera.ee.emitEvent("access-denied-by-publisher");var errorName=OpenViduError_1.OpenViduErrorName.SCREEN_CAPTURE_DENIED;var errorMessage="You must allow access to one window of your desktop";var e=new OpenViduError_1.OpenViduError(errorName,errorMessage);console.error(e);if(callback){callback(e)}}else{_this.camera.setVideoElement(_this.cameraReady(camera,parentId));if(_this.camera.getSendAudio()){navigator.mediaDevices.getUserMedia({audio:true,video:false}).then(function(userStream){_this.camera.getMediaStream().addTrack(userStream.getAudioTracks()[0]);_this.camera.isScreenRequestedReady=true;_this.camera.ee.emitEvent("screen-ready");if(callback){callback(undefined)}}).catch(function(error){_this.camera.ee.emitEvent("access-denied-by-publisher");console.error("Error accessing the microphone",error);if(callback){var errorName=OpenViduError_1.OpenViduErrorName.MICROPHONE_ACCESS_DENIED;var errorMessage=error.toString();callback(new OpenViduError_1.OpenViduError(errorName,errorMessage))}})}else{_this.camera.isScreenRequestedReady=true;_this.camera.ee.emitEvent("screen-ready");if(callback){callback(undefined)}}}})});return this.camera};OpenViduInternal.prototype.cameraReady=function(camera,parentId){this.camera=camera;var videoElement=this.camera.playOnlyVideo(parentId,null);this.camera.emitStreamReadyEvent();return videoElement};OpenViduInternal.prototype.getLocalStream=function(){return this.camera};OpenViduInternal.prototype.getRemoteStreams=function(){return this.remoteStreams};OpenViduInternal.prototype.getWsUri=function(){return this.wsUri};OpenViduInternal.prototype.setWsUri=function(wsUri){this.wsUri=wsUri};OpenViduInternal.prototype.getSecret=function(){return this.secret};OpenViduInternal.prototype.setSecret=function(secret){this.secret=secret};OpenViduInternal.prototype.getOpenViduServerURL=function(){return"https://"+this.wsUri.split("wss://")[1].split("/room")[0]};OpenViduInternal.prototype.getRoom=function(){return this.session};OpenViduInternal.prototype.connect=function(callback){this.callback=callback;this.initJsonRpcClient(this.wsUri)};OpenViduInternal.prototype.initJsonRpcClient=function(wsUri){var config={heartbeat:3e3,sendCloseMessage:false,ws:{uri:wsUri,useSockJS:false,onconnected:this.connectCallback.bind(this),ondisconnect:this.disconnectCallback.bind(this),onreconnecting:this.reconnectingCallback.bind(this),onreconnected:this.reconnectedCallback.bind(this)},rpc:{requestTimeout:15e3,participantJoined:this.onParticipantJoined.bind(this),participantPublished:this.onParticipantPublished.bind(this),participantUnpublished:this.onParticipantUnpublished.bind(this),participantLeft:this.onParticipantLeft.bind(this),participantEvicted:this.onParticipantEvicted.bind(this),sendMessage:this.onNewMessage.bind(this),iceCandidate:this.iceCandidateEvent.bind(this),mediaError:this.onMediaError.bind(this)}};this.jsonRpcClient=new RpcBuilder.clients.JsonRpcClient(config)};OpenViduInternal.prototype.connectCallback=function(error){if(error){this.callback(error)}else{this.callback(null)}};OpenViduInternal.prototype.isRoomAvailable=function(){if(this.session!==undefined&&this.session instanceof SessionInternal_1.SessionInternal){return true}else{console.warn("Room instance not found");return false}};OpenViduInternal.prototype.disconnectCallback=function(){console.warn("Websocket connection lost");if(this.isRoomAvailable()){this.session.onLostConnection()}else{alert("Connection error. Please reload page.")}};OpenViduInternal.prototype.reconnectingCallback=function(){console.warn("Websocket connection lost (reconnecting)");if(this.isRoomAvailable()){this.session.onLostConnection()}else{alert("Connection error. Please reload page.")}};OpenViduInternal.prototype.reconnectedCallback=function(){console.warn("Websocket reconnected")};OpenViduInternal.prototype.onParticipantJoined=function(params){if(this.isRoomAvailable()){this.session.onParticipantJoined(params)}};OpenViduInternal.prototype.onParticipantPublished=function(params){if(this.isRoomAvailable()){this.session.onParticipantPublished(params)}};OpenViduInternal.prototype.onParticipantUnpublished=function(params){if(this.isRoomAvailable()){this.session.onParticipantUnpublished(params)}};OpenViduInternal.prototype.onParticipantLeft=function(params){if(this.isRoomAvailable()){this.session.onParticipantLeft(params)}};OpenViduInternal.prototype.onParticipantEvicted=function(params){if(this.isRoomAvailable()){this.session.onParticipantEvicted(params)}};OpenViduInternal.prototype.onNewMessage=function(params){if(this.isRoomAvailable()){this.session.onNewMessage(params)}};OpenViduInternal.prototype.iceCandidateEvent=function(params){if(this.isRoomAvailable()){this.session.recvIceCandidate(params)}};OpenViduInternal.prototype.onRoomClosed=function(params){if(this.isRoomAvailable()){this.session.onRoomClosed(params)}};OpenViduInternal.prototype.onMediaError=function(params){if(this.isRoomAvailable()){this.session.onMediaError(params)}};OpenViduInternal.prototype.setRpcParams=function(params){this.rpcParams=params};OpenViduInternal.prototype.sendRequest=function(method,params,callback){if(params&¶ms instanceof Function){callback=params;params=undefined}params=params||{};if(this.rpcParams&&this.rpcParams!==null&&this.rpcParams!==undefined){for(var index in this.rpcParams){if(this.rpcParams.hasOwnProperty(index)){params[index]=this.rpcParams[index];console.debug("RPC param added to request {"+index+": "+this.rpcParams[index]+"}")}}}console.debug('Sending request: {method:"'+method+'", params: '+JSON.stringify(params)+"}");this.jsonRpcClient.send(method,params,callback)};OpenViduInternal.prototype.close=function(forced){if(this.isRoomAvailable()){this.session.leave(forced,this.jsonRpcClient)}};OpenViduInternal.prototype.disconnectParticipant=function(stream){if(this.isRoomAvailable()){this.session.disconnect(stream)}};OpenViduInternal.prototype.getCamera=function(options){if(this.camera){return this.camera}options=options||{sendAudio:true,sendVideo:true,activeAudio:true,activeVideo:true,data:true,mediaConstraints:{audio:true,video:{width:{ideal:1280}}}};options.connection=this.session.getLocalParticipant();this.camera=new Stream_1.Stream(this,true,this.session,options);return this.camera};OpenViduInternal.prototype.sendMessage=function(message){this.sendRequest("sendMessage",{message:message},function(error,response){if(error){console.error(error)}})};OpenViduInternal.prototype.toggleLocalVideoTrack=function(activate){this.getCamera().getWebRtcPeer().videoEnabled=activate};OpenViduInternal.prototype.toggleLocalAudioTrack=function(activate){this.getCamera().getWebRtcPeer().audioEnabled=activate};OpenViduInternal.prototype.publishLocalVideoAudio=function(){this.toggleLocalVideoTrack(true);this.toggleLocalAudioTrack(true)};OpenViduInternal.prototype.unpublishLocalVideoAudio=function(){this.toggleLocalVideoTrack(false);this.toggleLocalAudioTrack(false)};OpenViduInternal.prototype.generateMediaConstraints=function(cameraOptions){var mediaConstraints={audio:cameraOptions.audio,video:{}};if(!cameraOptions.video){mediaConstraints.video=false}else{var w=void 0,h=void 0;switch(cameraOptions.quality){case"LOW":w=320;h=240;break;case"MEDIUM":w=640;h=480;break;case"HIGH":w=1280;h=720;break;default:w=640;h=480}mediaConstraints.video["width"]={exact:w};mediaConstraints.video["height"]={exact:h}}return mediaConstraints};return OpenViduInternal}();exports.OpenViduInternal=OpenViduInternal},{"../KurentoUtils/kurento-jsonrpc":43,"./OpenViduError":55,"./SessionInternal":57,"./Stream":58}],57:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var Connection_1=require("./Connection");var EventEmitter=require("wolfy87-eventemitter");var SECRET_PARAM="?secret=";var SessionInternal=function(){function SessionInternal(openVidu,sessionId){this.openVidu=openVidu;this.ee=new EventEmitter;this.streams={};this.participants={};this.publishersSpeaking=[];this.connected=false;this.sessionId=this.getUrlWithoutSecret(sessionId);this.localParticipant=new Connection_1.Connection(this.openVidu,true,this);if(!this.openVidu.getWsUri()){this.processOpenViduUrl(sessionId)}}SessionInternal.prototype.processOpenViduUrl=function(url){this.openVidu.setSecret(this.getSecretFromUrl(url));this.openVidu.setWsUri(this.getFinalUrl(url))};SessionInternal.prototype.getSecretFromUrl=function(url){var secret="";if(url.indexOf(SECRET_PARAM)!==-1){secret=url.substring(url.lastIndexOf(SECRET_PARAM)+SECRET_PARAM.length,url.length)}return secret};SessionInternal.prototype.getUrlWithoutSecret=function(url){if(!url){console.error("sessionId is not defined")}if(url.indexOf(SECRET_PARAM)!==-1){url=url.substring(0,url.lastIndexOf(SECRET_PARAM))}return url};SessionInternal.prototype.getFinalUrl=function(url){url=this.getUrlWithoutSecret(url).substring(0,url.lastIndexOf("/"))+"/room";if(url.indexOf(".ngrok.io")!==-1){url=url.replace("ws://","wss://");var regex=/\.ngrok\.io:\d+/;url=url.replace(regex,".ngrok.io")}else if(url.indexOf("localhost")!==-1||url.indexOf("127.0.0.1")!=-1){}return url};SessionInternal.prototype.connect=function(token,callback){var _this=this;this.openVidu.connect(function(error){if(error){callback("ERROR CONNECTING TO OPENVIDU")}else{if(!token){token=_this.randomToken()}var joinParams={token:token,session:_this.sessionId,metadata:_this.options.metadata,secret:_this.openVidu.getSecret(),dataChannels:false};if(_this.localParticipant){if(Object.keys(_this.localParticipant.getStreams()).some(function(streamId){return _this.streams[streamId].isDataChannelEnabled()})){joinParams.dataChannels=true}}_this.openVidu.sendRequest("joinRoom",joinParams,function(error,response){if(error){callback(error)}else{_this.connected=true;var exParticipants=response.value;_this.localParticipant.connectionId=response.id;_this.participants[response.id]=_this.localParticipant;var roomEvent={participants:new Array,streams:new Array};var length_1=exParticipants.length;for(var i=0;i=16){userName=userName.substring(0,16)+"..."}name.appendChild(document.createTextNode(userName));name.id="name-"+this.streamId;name.className="name";name.title=this.streamId;this.showSpinner(thumbnailId);return this.playOnlyVideo(container,thumbnailId)};Stream.prototype.getParticipant=function(){return this.connection};Stream.prototype.getRTCPeerConnection=function(){return this.getWebRtcPeer().peerConnection};Stream.prototype.requestCameraAccess=function(callback){var _this=this;this.connection.addStream(this);var constraints=this.mediaConstraints;this.userMediaHasVideo(function(hasVideo){if(!hasVideo){if(_this.sendVideo){callback(new OpenViduError_1.OpenViduError(OpenViduError_1.OpenViduErrorName.NO_VIDEO_DEVICE,"You have requested camera access but there is no video input device available. Trying to connect with an audio input device only"),_this)}if(!_this.sendAudio){callback(new OpenViduError_1.OpenViduError(OpenViduError_1.OpenViduErrorName.NO_INPUT_DEVICE,"You must init Publisher object with audio or video streams enabled"),undefined)}else{constraints.video=false;_this.sendVideo=false;_this.requestCameraAccesAux(constraints,callback)}}else{_this.requestCameraAccesAux(constraints,callback)}})};Stream.prototype.requestCameraAccesAux=function(constraints,callback){var _this=this;navigator.mediaDevices.getUserMedia(constraints).then(function(userStream){_this.cameraAccessSuccess(userStream,callback)}).catch(function(error){_this.accessIsDenied=true;_this.accessIsAllowed=false;var errorName;var errorMessage=error.toString();if(!_this.isScreenRequested){errorName=_this.sendVideo?OpenViduError_1.OpenViduErrorName.CAMERA_ACCESS_DENIED:OpenViduError_1.OpenViduErrorName.MICROPHONE_ACCESS_DENIED}else{errorName=OpenViduError_1.OpenViduErrorName.SCREEN_CAPTURE_DENIED}callback(new OpenViduError_1.OpenViduError(errorName,errorMessage),undefined)})};Stream.prototype.cameraAccessSuccess=function(userStream,callback){this.accessIsAllowed=true;this.accessIsDenied=false;this.ee.emitEvent("access-allowed-by-publisher");if(userStream.getAudioTracks()[0]!=null){userStream.getAudioTracks()[0].enabled=this.activeAudio}if(userStream.getVideoTracks()[0]!=null){userStream.getVideoTracks()[0].enabled=this.activeVideo}this.mediaStream=userStream;this.ee.emitEvent("mediastream-updated");callback(undefined,this)};Stream.prototype.userMediaHasVideo=function(callback){if(this.isScreenRequested){callback(true);return}else{navigator.mediaDevices.enumerateDevices().then(function(mediaDevices){var videoInput=mediaDevices.filter(function(deviceInfo){return deviceInfo.kind==="videoinput"})[0];callback(videoInput!=null)})}};Stream.prototype.publishVideoCallback=function(error,sdpOfferParam,wp){var _this=this;if(error){return console.error("(publish) SDP offer error: "+JSON.stringify(error))}console.debug("Sending SDP offer to publish as "+this.streamId,sdpOfferParam);this.openVidu.sendRequest("publishVideo",{sdpOffer:sdpOfferParam,doLoopback:this.displayMyRemote()||false,audioActive:this.sendAudio,videoActive:this.sendVideo,typeOfVideo:this.sendVideo?this.isScreenRequested?"SCREEN":"CAMERA":""},function(error,response){if(error){console.error("Error on publishVideo: "+JSON.stringify(error))}else{_this.processSdpAnswer(response.sdpAnswer);console.info("'Publisher' succesfully published to session")}})};Stream.prototype.startVideoCallback=function(error,sdpOfferParam,wp){var _this=this;if(error){return console.error("(subscribe) SDP offer error: "+JSON.stringify(error))}console.debug("Sending SDP offer to subscribe to "+this.streamId,sdpOfferParam);this.openVidu.sendRequest("receiveVideoFrom",{sender:this.streamId,sdpOffer:sdpOfferParam},function(error,response){if(error){console.error("Error on recvVideoFrom: "+JSON.stringify(error))}else{_this.processSdpAnswer(response.sdpAnswer)}})};Stream.prototype.initWebRtcPeer=function(sdpOfferCallback){var _this=this;if(this.local){var userMediaConstraints={audio:this.sendAudio,video:this.sendVideo};var options={videoStream:this.mediaStream,mediaConstraints:userMediaConstraints,onicecandidate:this.connection.sendIceCandidate.bind(this.connection)};if(this.dataChannel){options.dataChannelConfig={id:this.getChannelName(),onopen:this.onDataChannelOpen,onclose:this.onDataChannelClosed};options.dataChannels=true}if(this.displayMyRemote()){this.wp=kurentoUtils.WebRtcPeer.WebRtcPeerSendrecv(options,function(error){if(error){return console.error(error)}_this.wp.generateOffer(sdpOfferCallback.bind(_this))})}else{this.wp=kurentoUtils.WebRtcPeer.WebRtcPeerSendonly(options,function(error){if(error){return console.error(error)}_this.wp.generateOffer(sdpOfferCallback.bind(_this))})}this.isPublisherPublished=true;this.ee.emitEvent("stream-created-by-publisher")}else{var offerConstraints={audio:this.recvAudio,video:this.recvVideo};console.debug("'Session.subscribe(Stream)' called. Constraints of generate SDP offer",offerConstraints);var options={onicecandidate:this.connection.sendIceCandidate.bind(this.connection),mediaConstraints:offerConstraints};this.wp=kurentoUtils.WebRtcPeer.WebRtcPeerRecvonly(options,function(error){if(error){return console.error(error)}_this.wp.generateOffer(sdpOfferCallback.bind(_this))})}console.debug("Waiting for SDP offer to be generated ("+(this.local?"local":"remote")+" 'Stream': "+this.streamId+")")};Stream.prototype.publish=function(){var _this=this;if(this.isReadyToPublish){this.initWebRtcPeer(this.publishVideoCallback)}else{this.ee.once("stream-ready",function(streamEvent){_this.publish()})}};Stream.prototype.subscribe=function(){this.initWebRtcPeer(this.startVideoCallback)};Stream.prototype.processSdpAnswer=function(sdpAnswer){var _this=this;var answer=new RTCSessionDescription({type:"answer",sdp:sdpAnswer});console.debug(this.streamId+": set peer connection with recvd SDP answer",sdpAnswer);var participantId=this.streamId;var pc=this.wp.peerConnection;pc.setRemoteDescription(answer,function(){if(!_this.local||_this.displayMyRemote()){_this.mediaStream=pc.getRemoteStreams()[0];console.debug("Peer remote stream",_this.mediaStream);if(_this.mediaStream!=undefined){_this.ee.emitEvent("mediastream-updated");if(_this.mediaStream.getAudioTracks()[0]!=null){_this.speechEvent=kurentoUtils.WebRtcPeer.hark(_this.mediaStream,{threshold:_this.room.thresholdSpeaker});_this.speechEvent.on("speaking",function(){_this.room.emitEvent("publisherStartSpeaking",[{connection:_this.connection,streamId:_this.streamId}])});_this.speechEvent.on("stopped_speaking",function(){_this.room.emitEvent("publisherStopSpeaking",[{connection:_this.connection,streamId:_this.streamId}])})}}_this.video.oncanplay=function(){if(_this.local&&_this.displayMyRemote()){console.info("Your own remote 'Stream' with id ["+_this.streamId+"] video is now playing");_this.ee.emitEvent("remote-video-is-playing",[{element:_this.video}])}else if(!_this.local&&!_this.displayMyRemote()){console.info("Remote 'Stream' with id ["+_this.streamId+"] video is now playing");_this.ee.emitEvent("video-is-playing",[{element:_this.video}])}};_this.room.emitEvent("stream-subscribed",[{stream:_this}])}},function(error){console.error(_this.streamId+": Error setting SDP to the peer connection: "+JSON.stringify(error))})};Stream.prototype.unpublish=function(){if(this.wp){this.wp.dispose()}else{if(this.mediaStream){this.mediaStream.getAudioTracks().forEach(function(track){track.stop&&track.stop()});this.mediaStream.getVideoTracks().forEach(function(track){track.stop&&track.stop()})}}if(this.speechEvent){this.speechEvent.stop()}console.info(this.streamId+": Stream '"+this.streamId+"' unpublished")};Stream.prototype.dispose=function(){function disposeElement(element){if(element&&element.parentNode){element.parentNode.removeChild(element)}}disposeElement("progress-"+this.streamId);if(this.wp){this.wp.dispose()}else{if(this.mediaStream){this.mediaStream.getAudioTracks().forEach(function(track){track.stop&&track.stop()});this.mediaStream.getVideoTracks().forEach(function(track){track.stop&&track.stop()})}}if(this.speechEvent){this.speechEvent.stop()}console.info((this.local?"Local ":"Remote ")+"'Stream' with id ["+this.streamId+"]' has been succesfully disposed")};Stream.prototype.configureOptions=function(options){this.connection=options.connection;this.recvVideo=options.recvVideo||false;this.recvAudio=options.recvAudio||false;this.sendVideo=options.sendVideo;this.sendAudio=options.sendAudio;this.activeAudio=options.activeAudio;this.activeVideo=options.activeVideo;this.dataChannel=options.data||false;this.mediaConstraints=options.mediaConstraints;this.hasAudio=(this.recvAudio||this.sendAudio)!=undefined?this.recvAudio||this.sendAudio:false;this.hasVideo=(this.recvVideo||this.sendVideo)!=undefined?this.recvVideo||this.sendVideo:false;this.typeOfVideo=options.typeOfVideo;if(options.id){this.streamId=options.id}else{this.streamId=this.sendVideo?"WEBCAM":"MICRO"}};Stream.prototype.configureScreenOptions=function(options){if(options.id){this.streamId=options.id}else{this.streamId="SCREEN"}this.recvVideo=options.recvVideo||false;this.recvAudio=options.recvAudio||false;this.sendVideo=options.sendVideo;this.sendAudio=options.sendAudio;this.activeAudio=options.activeAudio;this.activeVideo=options.activeVideo;this.dataChannel=options.data||false;this.mediaConstraints=options.mediaConstraints;this.ee.emitEvent("can-request-screen")};return Stream}();exports.Stream=Stream},{"../KurentoUtils/kurento-utils-js":48,"./OpenViduError":55,"webrtc-adapter":25,"wolfy87-eventemitter":37}],59:[function(require,module,exports){window.getScreenId=function(callback){if(!!navigator.mozGetUserMedia){callback(null,"firefox",{video:{mozMediaSource:"window",mediaSource:"window"}});return}window.addEventListener("message",onIFrameCallback);function onIFrameCallback(event){if(!event.data)return;if(event.data.chromeMediaSourceId){if(event.data.chromeMediaSourceId==="PermissionDeniedError"){callback("permission-denied")}else callback(null,event.data.chromeMediaSourceId,getScreenConstraints(null,event.data.chromeMediaSourceId))}if(event.data.chromeExtensionStatus){callback(event.data.chromeExtensionStatus,null,getScreenConstraints(event.data.chromeExtensionStatus))}window.removeEventListener("message",onIFrameCallback)}setTimeout(postGetSourceIdMessage,100)};function getScreenConstraints(error,sourceId){var screen_constraints={audio:false,video:{mandatory:{chromeMediaSource:error?"screen":"desktop",maxWidth:window.screen.width>1920?window.screen.width:1920,maxHeight:window.screen.height>1080?window.screen.height:1080},optional:[]}};if(sourceId){screen_constraints.video.mandatory.chromeMediaSourceId=sourceId}return screen_constraints}function postGetSourceIdMessage(){if(!iframe){loadIFrame(postGetSourceIdMessage);return}if(!iframe.isLoaded){setTimeout(postGetSourceIdMessage,100);return}iframe.contentWindow.postMessage({captureSourceId:true},"*")}var iframe;window.getScreenConstraints=function(callback){loadIFrame(function(){getScreenId(function(error,sourceId,screen_constraints){callback(error,screen_constraints.video)})})};function loadIFrame(loadCallback){if(iframe){loadCallback();return}iframe=document.createElement("iframe");iframe.onload=function(){iframe.isLoaded=true;loadCallback()};iframe.src="https://www.webrtc-experiment.com/getSourceId/";iframe.style.display="none";(document.body||document.documentElement).appendChild(iframe)}window.getChromeExtensionStatus=function(callback){if(!!navigator.mozGetUserMedia){callback("installed-enabled");return}window.addEventListener("message",onIFrameCallback);function onIFrameCallback(event){if(!event.data)return;if(event.data.chromeExtensionStatus){callback(event.data.chromeExtensionStatus)}window.removeEventListener("message",onIFrameCallback)}setTimeout(postGetChromeExtensionStatusMessage,100)};function postGetChromeExtensionStatusMessage(){if(!iframe){loadIFrame(postGetChromeExtensionStatusMessage);return}if(!iframe.isLoaded){setTimeout(postGetChromeExtensionStatusMessage,100);return}iframe.contentWindow.postMessage({getChromeExtensionStatus:true},"*")}exports.getScreenId=getScreenId;exports.getChromeExtensionStatus=getChromeExtensionStatus},{}]},{},[49]);