Socket
Socket
Sign inDemoInstall

naf-janus-adapter

Package Overview
Dependencies
4
Maintainers
4
Versions
62
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 3.0.15 to 3.0.16

2

dist/naf-janus-adapter.min.js

@@ -1,1 +0,1 @@

!function(e){var t={};function n(r){if(t[r])return t[r].exports;var s=t[r]={i:r,l:!1,exports:{}};return e[r].call(s.exports,s,s.exports,n),s.l=!0,s.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)n.d(r,s,function(t){return e[t]}.bind(null,s));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=6)}([function(e,t,n){(function(r){function s(){var e;try{e=t.storage.debug}catch(e){}return!e&&void 0!==r&&"env"in r&&(e=r.env.DEBUG),e}t=e.exports=n(2),t.log=function(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)},t.formatArgs=function(e){var n=this.useColors;if(e[0]=(n?"%c":"")+this.namespace+(n?" %c":" ")+e[0]+(n?"%c ":" ")+"+"+t.humanize(this.diff),!n)return;var r="color: "+this.color;e.splice(1,0,r,"color: inherit");var s=0,i=0;e[0].replace(/%[a-zA-Z%]/g,function(e){"%%"!==e&&(s++,"%c"===e&&(i=s))}),e.splice(i,0,r)},t.save=function(e){try{null==e?t.storage.removeItem("debug"):t.storage.debug=e}catch(e){}},t.load=s,t.useColors=function(){if("undefined"!=typeof window&&window.process&&"renderer"===window.process.type)return!0;if("undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;return"undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},t.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(e){}}(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.formatters.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}},t.enable(s())}).call(this,n(3))},function(e,t){var n=1e3,r=60*n,s=60*r,i=24*s,a=365.25*i;function o(e,t,n){if(!(e<t))return e<1.5*t?Math.floor(e/t)+" "+n:Math.ceil(e/t)+" "+n+"s"}e.exports=function(e,t){t=t||{};var c,u=typeof e;if("string"===u&&e.length>0)return function(e){if(e=String(e),e.length>100)return;var t=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(!t)return;var o=parseFloat(t[1]),c=(t[2]||"ms").toLowerCase();switch(c){case"years":case"year":case"yrs":case"yr":case"y":return o*a;case"days":case"day":case"d":return o*i;case"hours":case"hour":case"hrs":case"hr":case"h":return o*s;case"minutes":case"minute":case"mins":case"min":case"m":return o*r;case"seconds":case"second":case"secs":case"sec":case"s":return o*n;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return o;default:return}}(e);if("number"===u&&!1===isNaN(e))return t.long?(c=e,o(c,i,"day")||o(c,s,"hour")||o(c,r,"minute")||o(c,n,"second")||c+" ms"):function(e){if(e>=i)return Math.round(e/i)+"d";if(e>=s)return Math.round(e/s)+"h";if(e>=r)return Math.round(e/r)+"m";if(e>=n)return Math.round(e/n)+"s";return e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},function(e,t,n){function r(e){var n;function r(){if(r.enabled){var e=r,s=+new Date,i=s-(n||s);e.diff=i,e.prev=n,e.curr=s,n=s;for(var a=new Array(arguments.length),o=0;o<a.length;o++)a[o]=arguments[o];a[0]=t.coerce(a[0]),"string"!=typeof a[0]&&a.unshift("%O");var c=0;a[0]=a[0].replace(/%([a-zA-Z%])/g,function(n,r){if("%%"===n)return n;c++;var s=t.formatters[r];if("function"==typeof s){var i=a[c];n=s.call(e,i),a.splice(c,1),c--}return n}),t.formatArgs.call(e,a);var u=r.log||t.log||console.log.bind(console);u.apply(e,a)}}return r.namespace=e,r.enabled=t.enabled(e),r.useColors=t.useColors(),r.color=function(e){var n,r=0;for(n in e)r=(r<<5)-r+e.charCodeAt(n),r|=0;return t.colors[Math.abs(r)%t.colors.length]}(e),r.destroy=s,"function"==typeof t.init&&t.init(r),t.instances.push(r),r}function s(){var e=t.instances.indexOf(this);return-1!==e&&(t.instances.splice(e,1),!0)}t=e.exports=r.debug=r.default=r,t.coerce=function(e){return e instanceof Error?e.stack||e.message:e},t.disable=function(){t.enable("")},t.enable=function(e){var n;t.save(e),t.names=[],t.skips=[];var r=("string"==typeof e?e:"").split(/[\s,]+/),s=r.length;for(n=0;n<s;n++)r[n]&&(e=r[n].replace(/\*/g,".*?"),"-"===e[0]?t.skips.push(new RegExp("^"+e.substr(1)+"$")):t.names.push(new RegExp("^"+e+"$")));for(n=0;n<t.instances.length;n++){var i=t.instances[n];i.enabled=t.enabled(i.namespace)}},t.enabled=function(e){if("*"===e[e.length-1])return!0;var n,r;for(n=0,r=t.skips.length;n<r;n++)if(t.skips[n].test(e))return!1;for(n=0,r=t.names.length;n<r;n++)if(t.names[n].test(e))return!0;return!1},t.humanize=n(1),t.instances=[],t.names=[],t.skips=[],t.formatters={}},function(e,t){var n,r,s=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function o(e){if(n===setTimeout)return setTimeout(e,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:i}catch(e){n=i}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var c,u=[],d=!1,l=-1;function p(){d&&c&&(d=!1,c.length?u=c.concat(u):l=-1,u.length&&h())}function h(){if(!d){var e=o(p);d=!0;for(var t=u.length;t;){for(c=u,u=[];++l<t;)c&&c[l].run();l=-1,t=u.length}c=null,d=!1,function(e){if(r===clearTimeout)return clearTimeout(e);if((r===a||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(e);try{r(e)}catch(t){try{return r.call(null,e)}catch(t){return r.call(this,e)}}}(e)}}function f(e,t){this.fun=e,this.array=t}function m(){}s.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];u.push(new f(e,t)),1!==u.length||d||o(h)},f.prototype.run=function(){this.fun.apply(null,this.array)},s.title="browser",s.browser=!0,s.env={},s.argv=[],s.version="",s.versions={},s.on=m,s.addListener=m,s.once=m,s.off=m,s.removeListener=m,s.removeAllListeners=m,s.emit=m,s.prependListener=m,s.prependOnceListener=m,s.listeners=function(e){return[]},s.binding=function(e){throw new Error("process.binding is not supported")},s.cwd=function(){return"/"},s.chdir=function(e){throw new Error("process.chdir is not supported")},s.umask=function(){return 0}},function(e,t,n){"use strict";var r={generateIdentifier:function(){return Math.random().toString(36).substr(2,10)}};r.localCName=r.generateIdentifier(),r.splitLines=function(e){return e.trim().split("\n").map(function(e){return e.trim()})},r.splitSections=function(e){var t=e.split("\nm=");return t.map(function(e,t){return(t>0?"m="+e:e).trim()+"\r\n"})},r.getDescription=function(e){var t=r.splitSections(e);return t&&t[0]},r.getMediaSections=function(e){var t=r.splitSections(e);return t.shift(),t},r.matchPrefix=function(e,t){return r.splitLines(e).filter(function(e){return 0===e.indexOf(t)})},r.parseCandidate=function(e){var t;t=0===e.indexOf("a=candidate:")?e.substring(12).split(" "):e.substring(10).split(" ");for(var n={foundation:t[0],component:parseInt(t[1],10),protocol:t[2].toLowerCase(),priority:parseInt(t[3],10),ip:t[4],port:parseInt(t[5],10),type:t[7]},r=8;r<t.length;r+=2)switch(t[r]){case"raddr":n.relatedAddress=t[r+1];break;case"rport":n.relatedPort=parseInt(t[r+1],10);break;case"tcptype":n.tcpType=t[r+1];break;case"ufrag":n.ufrag=t[r+1],n.usernameFragment=t[r+1];break;default:n[t[r]]=t[r+1]}return n},r.writeCandidate=function(e){var t=[];t.push(e.foundation),t.push(e.component),t.push(e.protocol.toUpperCase()),t.push(e.priority),t.push(e.ip),t.push(e.port);var n=e.type;return t.push("typ"),t.push(n),"host"!==n&&e.relatedAddress&&e.relatedPort&&(t.push("raddr"),t.push(e.relatedAddress),t.push("rport"),t.push(e.relatedPort)),e.tcpType&&"tcp"===e.protocol.toLowerCase()&&(t.push("tcptype"),t.push(e.tcpType)),(e.usernameFragment||e.ufrag)&&(t.push("ufrag"),t.push(e.usernameFragment||e.ufrag)),"candidate:"+t.join(" ")},r.parseIceOptions=function(e){return e.substr(14).split(" ")},r.parseRtpMap=function(e){var t=e.substr(9).split(" "),n={payloadType:parseInt(t.shift(),10)};return t=t[0].split("/"),n.name=t[0],n.clockRate=parseInt(t[1],10),n.channels=3===t.length?parseInt(t[2],10):1,n.numChannels=n.channels,n},r.writeRtpMap=function(e){var t=e.payloadType;void 0!==e.preferredPayloadType&&(t=e.preferredPayloadType);var n=e.channels||e.numChannels||1;return"a=rtpmap:"+t+" "+e.name+"/"+e.clockRate+(1!==n?"/"+n:"")+"\r\n"},r.parseExtmap=function(e){var t=e.substr(9).split(" ");return{id:parseInt(t[0],10),direction:t[0].indexOf("/")>0?t[0].split("/")[1]:"sendrecv",uri:t[1]}},r.writeExtmap=function(e){return"a=extmap:"+(e.id||e.preferredId)+(e.direction&&"sendrecv"!==e.direction?"/"+e.direction:"")+" "+e.uri+"\r\n"},r.parseFmtp=function(e){for(var t,n={},r=e.substr(e.indexOf(" ")+1).split(";"),s=0;s<r.length;s++)t=r[s].trim().split("="),n[t[0].trim()]=t[1];return n},r.writeFmtp=function(e){var t="",n=e.payloadType;if(void 0!==e.preferredPayloadType&&(n=e.preferredPayloadType),e.parameters&&Object.keys(e.parameters).length){var r=[];Object.keys(e.parameters).forEach(function(t){e.parameters[t]?r.push(t+"="+e.parameters[t]):r.push(t)}),t+="a=fmtp:"+n+" "+r.join(";")+"\r\n"}return t},r.parseRtcpFb=function(e){var t=e.substr(e.indexOf(" ")+1).split(" ");return{type:t.shift(),parameter:t.join(" ")}},r.writeRtcpFb=function(e){var t="",n=e.payloadType;return void 0!==e.preferredPayloadType&&(n=e.preferredPayloadType),e.rtcpFeedback&&e.rtcpFeedback.length&&e.rtcpFeedback.forEach(function(e){t+="a=rtcp-fb:"+n+" "+e.type+(e.parameter&&e.parameter.length?" "+e.parameter:"")+"\r\n"}),t},r.parseSsrcMedia=function(e){var t=e.indexOf(" "),n={ssrc:parseInt(e.substr(7,t-7),10)},r=e.indexOf(":",t);return r>-1?(n.attribute=e.substr(t+1,r-t-1),n.value=e.substr(r+1)):n.attribute=e.substr(t+1),n},r.getMid=function(e){var t=r.matchPrefix(e,"a=mid:")[0];if(t)return t.substr(6)},r.parseFingerprint=function(e){var t=e.substr(14).split(" ");return{algorithm:t[0].toLowerCase(),value:t[1]}},r.getDtlsParameters=function(e,t){var n=r.matchPrefix(e+t,"a=fingerprint:");return{role:"auto",fingerprints:n.map(r.parseFingerprint)}},r.writeDtlsParameters=function(e,t){var n="a=setup:"+t+"\r\n";return e.fingerprints.forEach(function(e){n+="a=fingerprint:"+e.algorithm+" "+e.value+"\r\n"}),n},r.getIceParameters=function(e,t){var n=r.splitLines(e);n=n.concat(r.splitLines(t));var s={usernameFragment:n.filter(function(e){return 0===e.indexOf("a=ice-ufrag:")})[0].substr(12),password:n.filter(function(e){return 0===e.indexOf("a=ice-pwd:")})[0].substr(10)};return s},r.writeIceParameters=function(e){return"a=ice-ufrag:"+e.usernameFragment+"\r\na=ice-pwd:"+e.password+"\r\n"},r.parseRtpParameters=function(e){for(var t={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},n=r.splitLines(e),s=n[0].split(" "),i=3;i<s.length;i++){var a=s[i],o=r.matchPrefix(e,"a=rtpmap:"+a+" ")[0];if(o){var c=r.parseRtpMap(o),u=r.matchPrefix(e,"a=fmtp:"+a+" ");switch(c.parameters=u.length?r.parseFmtp(u[0]):{},c.rtcpFeedback=r.matchPrefix(e,"a=rtcp-fb:"+a+" ").map(r.parseRtcpFb),t.codecs.push(c),c.name.toUpperCase()){case"RED":case"ULPFEC":t.fecMechanisms.push(c.name.toUpperCase())}}}return r.matchPrefix(e,"a=extmap:").forEach(function(e){t.headerExtensions.push(r.parseExtmap(e))}),t},r.writeRtpDescription=function(e,t){var n="";n+="m="+e+" ",n+=t.codecs.length>0?"9":"0",n+=" UDP/TLS/RTP/SAVPF ",n+=t.codecs.map(function(e){return void 0!==e.preferredPayloadType?e.preferredPayloadType:e.payloadType}).join(" ")+"\r\n",n+="c=IN IP4 0.0.0.0\r\n",n+="a=rtcp:9 IN IP4 0.0.0.0\r\n",t.codecs.forEach(function(e){n+=r.writeRtpMap(e),n+=r.writeFmtp(e),n+=r.writeRtcpFb(e)});var s=0;return t.codecs.forEach(function(e){e.maxptime>s&&(s=e.maxptime)}),s>0&&(n+="a=maxptime:"+s+"\r\n"),n+="a=rtcp-mux\r\n",t.headerExtensions&&t.headerExtensions.forEach(function(e){n+=r.writeExtmap(e)}),n},r.parseRtpEncodingParameters=function(e){var t,n=[],s=r.parseRtpParameters(e),i=-1!==s.fecMechanisms.indexOf("RED"),a=-1!==s.fecMechanisms.indexOf("ULPFEC"),o=r.matchPrefix(e,"a=ssrc:").map(function(e){return r.parseSsrcMedia(e)}).filter(function(e){return"cname"===e.attribute}),c=o.length>0&&o[0].ssrc,u=r.matchPrefix(e,"a=ssrc-group:FID").map(function(e){var t=e.substr(17).split(" ");return t.map(function(e){return parseInt(e,10)})});u.length>0&&u[0].length>1&&u[0][0]===c&&(t=u[0][1]),s.codecs.forEach(function(e){if("RTX"===e.name.toUpperCase()&&e.parameters.apt){var r={ssrc:c,codecPayloadType:parseInt(e.parameters.apt,10)};c&&t&&(r.rtx={ssrc:t}),n.push(r),i&&(r=JSON.parse(JSON.stringify(r)),r.fec={ssrc:t,mechanism:a?"red+ulpfec":"red"},n.push(r))}}),0===n.length&&c&&n.push({ssrc:c});var d=r.matchPrefix(e,"b=");return d.length&&(d=0===d[0].indexOf("b=TIAS:")?parseInt(d[0].substr(7),10):0===d[0].indexOf("b=AS:")?1e3*parseInt(d[0].substr(5),10)*.95-16e3:void 0,n.forEach(function(e){e.maxBitrate=d})),n},r.parseRtcpParameters=function(e){var t={},n=r.matchPrefix(e,"a=ssrc:").map(function(e){return r.parseSsrcMedia(e)}).filter(function(e){return"cname"===e.attribute})[0];n&&(t.cname=n.value,t.ssrc=n.ssrc);var s=r.matchPrefix(e,"a=rtcp-rsize");t.reducedSize=s.length>0,t.compound=0===s.length;var i=r.matchPrefix(e,"a=rtcp-mux");return t.mux=i.length>0,t},r.parseMsid=function(e){var t,n=r.matchPrefix(e,"a=msid:");if(1===n.length)return t=n[0].substr(7).split(" "),{stream:t[0],track:t[1]};var s=r.matchPrefix(e,"a=ssrc:").map(function(e){return r.parseSsrcMedia(e)}).filter(function(e){return"msid"===e.attribute});return s.length>0?(t=s[0].value.split(" "),{stream:t[0],track:t[1]}):void 0},r.generateSessionId=function(){return Math.random().toString().substr(2,21)},r.writeSessionBoilerplate=function(e,t){var n,s=void 0!==t?t:2;return n=e||r.generateSessionId(),"v=0\r\no=thisisadapterortc "+n+" "+s+" IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\n"},r.writeMediaSection=function(e,t,n,s){var i=r.writeRtpDescription(e.kind,t);if(i+=r.writeIceParameters(e.iceGatherer.getLocalParameters()),i+=r.writeDtlsParameters(e.dtlsTransport.getLocalParameters(),"offer"===n?"actpass":"active"),i+="a=mid:"+e.mid+"\r\n",e.direction?i+="a="+e.direction+"\r\n":e.rtpSender&&e.rtpReceiver?i+="a=sendrecv\r\n":e.rtpSender?i+="a=sendonly\r\n":e.rtpReceiver?i+="a=recvonly\r\n":i+="a=inactive\r\n",e.rtpSender){var a="msid:"+s.id+" "+e.rtpSender.track.id+"\r\n";i+="a="+a,i+="a=ssrc:"+e.sendEncodingParameters[0].ssrc+" "+a,e.sendEncodingParameters[0].rtx&&(i+="a=ssrc:"+e.sendEncodingParameters[0].rtx.ssrc+" "+a,i+="a=ssrc-group:FID "+e.sendEncodingParameters[0].ssrc+" "+e.sendEncodingParameters[0].rtx.ssrc+"\r\n")}return i+="a=ssrc:"+e.sendEncodingParameters[0].ssrc+" cname:"+r.localCName+"\r\n",e.rtpSender&&e.sendEncodingParameters[0].rtx&&(i+="a=ssrc:"+e.sendEncodingParameters[0].rtx.ssrc+" cname:"+r.localCName+"\r\n"),i},r.getDirection=function(e,t){for(var n=r.splitLines(e),s=0;s<n.length;s++)switch(n[s]){case"a=sendrecv":case"a=sendonly":case"a=recvonly":case"a=inactive":return n[s].substr(2)}return t?r.getDirection(t):"sendrecv"},r.getKind=function(e){var t=r.splitLines(e),n=t[0].split(" ");return n[0].substr(2)},r.isRejected=function(e){return"0"===e.split(" ",2)[1]},r.parseMLine=function(e){var t=r.splitLines(e),n=t[0].substr(2).split(" ");return{kind:n[0],port:parseInt(n[1],10),protocol:n[2],fmt:n.slice(3).join(" ")}},r.parseOLine=function(e){var t=r.matchPrefix(e,"o=")[0],n=t.substr(2).split(" ");return{username:n[0],sessionId:n[1],sessionVersion:parseInt(n[2],10),netType:n[3],addressType:n[4],address:n[5]}},e.exports=r},function(e,t){function n(e){this.session=e,this.id=void 0}function r(e,t){this.output=e,this.id=void 0,this.nextTxId=0,this.txns={},this.eventHandlers={},this.options=Object.assign({verbose:!1,timeoutMs:1e4,keepaliveMs:3e4},t)}n.prototype.attach=function(e){var t={plugin:e,"force-bundle":!0,"force-rtcp-mux":!0};return this.session.send("attach",t).then(e=>(this.id=e.data.id,e))},n.prototype.detach=function(){return this.send("detach")},n.prototype.on=function(e,t){return this.session.on(e,e=>{e.sender==this.id&&t(e)})},n.prototype.send=function(e,t){return this.session.send(e,Object.assign({handle_id:this.id},t))},n.prototype.sendMessage=function(e){return this.send("message",{body:e})},n.prototype.sendJsep=function(e){return this.send("message",{body:{},jsep:e})},n.prototype.sendTrickle=function(e){return this.send("trickle",{candidate:e})},r.prototype.create=function(){return this.send("create").then(e=>(this.id=e.data.id,e))},r.prototype.destroy=function(){return this.send("destroy").then(e=>(this.dispose(),e))},r.prototype.dispose=function(){for(var e in this._killKeepalive(),this.eventHandlers={},this.txns)if(this.txns.hasOwnProperty(e)){var t=this.txns[e];clearTimeout(t.timeout),t.reject(new Error("Janus session was disposed.")),delete this.txns[e]}},r.prototype.isError=function(e){return"error"===e.janus},r.prototype.on=function(e,t){var n=this.eventHandlers[e];null==n&&(n=this.eventHandlers[e]=[]),n.push(t)},r.prototype.receive=function(e){this.options.verbose&&this._logIncoming(e),e.session_id!=this.id&&console.warn("Incorrect session ID received in Janus signalling message: was "+e.session_id+", expected "+this.id+".");var t=e.janus,n=this.eventHandlers[t];if(null!=n)for(var r=0;r<n.length;r++)n[r](e);if(null!=e.transaction){var s=this.txns[e.transaction];if(null==s)return;if("ack"===t&&"message"==s.type)return;clearTimeout(s.timeout),delete this.txns[e.transaction],(this.isError(e)?s.reject:s.resolve)(e)}},r.prototype.send=function(e,t){return t=Object.assign({transaction:(this.nextTxId++).toString()},t),new Promise((n,r)=>{var s=null;this.options.timeoutMs&&(s=setTimeout(()=>{delete this.txns[t.transaction],r(new Error("Signalling transaction with txid "+t.transaction+" timed out."))},this.options.timeoutMs)),this.txns[t.transaction]={resolve:n,reject:r,timeout:s,type:e},this._transmit(e,t)})},r.prototype._transmit=function(e,t){t=Object.assign({janus:e},t),null!=this.id&&(t=Object.assign({session_id:this.id},t)),this.options.verbose&&this._logOutgoing(t),this.output(JSON.stringify(t)),this._resetKeepalive()},r.prototype._logOutgoing=function(e){var t=e.janus;"message"===t&&e.jsep&&(t=e.jsep.type);var n="> Outgoing Janus "+(t||"signal")+" (#"+e.transaction+"): ";console.debug("%c"+n,"color: #040",e)},r.prototype._logIncoming=function(e){var t=e.janus,n=e.transaction?"< Incoming Janus "+(t||"signal")+" (#"+e.transaction+"): ":"< Incoming Janus "+(t||"signal")+": ";console.debug("%c"+n,"color: #004",e)},r.prototype._sendKeepalive=function(){return this.send("keepalive")},r.prototype._killKeepalive=function(){clearTimeout(this.keepaliveTimeout)},r.prototype._resetKeepalive=function(){this._killKeepalive(),this.options.keepaliveMs&&(this.keepaliveTimeout=setTimeout(()=>{this._sendKeepalive().catch(e=>console.error("Error received from keepalive: ",e))},this.options.keepaliveMs))},e.exports={JanusPluginHandle:n,JanusSession:r}},function(e,t,n){function r(e){return function(){var t=e.apply(this,arguments);return new Promise(function(e,n){return function r(s,i){try{var a=t[s](i),o=a.value}catch(e){return void n(e)}if(!a.done)return Promise.resolve(o).then(function(e){r("next",e)},function(e){r("throw",e)});e(o)}("next")})}}var s=n(5),i=n(4),a=n(0)("naf-janus-adapter:debug"),o=(n(0)("naf-janus-adapter:warn"),n(0)("naf-janus-adapter:error")),c=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);function u(e){var t=Promise.resolve();return function(){var n=Array.prototype.slice.call(arguments);t=t.then(t=>e.apply(this,n))}}function d(e){return new Promise((t,n)=>{if("open"===e.readyState)t();else{let r,s;const i=()=>{e.removeEventListener("open",r),e.removeEventListener("error",s)};r=(()=>{i(),t()}),s=(()=>{i(),n()}),e.addEventListener("open",r),e.addEventListener("error",s)}})}const l=(()=>{const e=document.createElement("video");return""!==e.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"')})(),p={usedtx:1,stereo:0,"sprop-stereo":0},h={iceServers:[{urls:"stun:stun1.l.google.com:19302"},{urls:"stun:stun2.l.google.com:19302"}]},f=1e3;class m{constructor(){this.room=null,this.clientId=null,this.joinToken=null,this.serverUrl=null,this.webRtcOptions={},this.ws=null,this.session=null,this.reliableTransport="datachannel",this.unreliableTransport="datachannel",this.initialReconnectionDelay=1e3*Math.random(),this.reconnectionDelay=this.initialReconnectionDelay,this.reconnectionTimeout=null,this.maxReconnectionAttempts=10,this.reconnectionAttempts=0,this.publisher=null,this.occupants={},this.leftOccupants=new Set,this.mediaStreams={},this.localMediaStream=null,this.pendingMediaRequests=new Map,this.blockedClients=new Map,this.frozenUpdates=new Map,this.timeOffsets=[],this.serverTimeRequests=0,this.avgTimeOffset=0,this.onWebsocketOpen=this.onWebsocketOpen.bind(this),this.onWebsocketClose=this.onWebsocketClose.bind(this),this.onWebsocketMessage=this.onWebsocketMessage.bind(this),this.onDataChannelMessage=this.onDataChannelMessage.bind(this),this.onData=this.onData.bind(this)}setServerUrl(e){this.serverUrl=e}setApp(e){}setRoom(e){this.room=e}setJoinToken(e){this.joinToken=e}setClientId(e){this.clientId=e}setWebRtcOptions(e){this.webRtcOptions=e}setServerConnectListeners(e,t){this.connectSuccess=e,this.connectFailure=t}setRoomOccupantListener(e){this.onOccupantsChanged=e}setDataChannelListeners(e,t,n){this.onOccupantConnected=e,this.onOccupantDisconnected=t,this.onOccupantMessage=n}setReconnectionListeners(e,t,n){this.onReconnecting=e,this.onReconnected=t,this.onReconnectionError=n}connect(){a(`connecting to ${this.serverUrl}`);const e=new Promise((e,t)=>{let n;this.ws=new WebSocket(this.serverUrl,"janus-protocol"),this.session=new s.JanusSession(this.ws.send.bind(this.ws));const r=()=>{t(o)};this.ws.addEventListener("close",this.onWebsocketClose),this.ws.addEventListener("message",this.onWebsocketMessage),n=(()=>{this.ws.removeEventListener("open",n),this.ws.removeEventListener("error",r),this.onWebsocketOpen().then(e).catch(t)}),this.ws.addEventListener("open",n)});return Promise.all([e,this.updateTimeOffset()])}disconnect(){a("disconnecting"),clearTimeout(this.reconnectionTimeout),this.removeAllOccupants(),this.leftOccupants=new Set,this.publisher&&(this.publisher.conn.close(),this.publisher=null),this.session&&(this.session.dispose(),this.session=null),this.ws&&(this.ws.removeEventListener("open",this.onWebsocketOpen),this.ws.removeEventListener("close",this.onWebsocketClose),this.ws.removeEventListener("message",this.onWebsocketMessage),this.ws.close(),this.ws=null)}isDisconnected(){return null===this.ws}onWebsocketOpen(){var e=this;return r(function*(){yield e.session.create(),e.publisher=yield e.createPublisher(),e.connectSuccess(e.clientId);for(let t=0;t<e.publisher.initialOccupants.length;t++){const n=e.publisher.initialOccupants[t];n!==e.clientId&&(yield e.addOccupant(n))}})()}onWebsocketClose(e){e.code!==f&&(this.onReconnecting&&this.onReconnecting(this.reconnectionDelay),this.reconnectionTimeout=setTimeout(()=>this.reconnect(),this.reconnectionDelay))}reconnect(){this.disconnect(),this.connect().then(()=>{this.reconnectionDelay=this.initialReconnectionDelay,this.reconnectionAttempts=0,this.onReconnected&&this.onReconnected()}).catch(e=>{if(this.reconnectionDelay+=1e3,this.reconnectionAttempts++,this.reconnectionAttempts>this.maxReconnectionAttempts&&this.onReconnectionError)return this.onReconnectionError(new Error("Connection could not be reestablished, exceeded maximum number of reconnection attempts."));console.warn("Error during reconnect, retrying."),console.warn(e),this.onReconnecting&&this.onReconnecting(this.reconnectionDelay),this.reconnectionTimeout=setTimeout(()=>this.reconnect(),this.reconnectionDelay)})}performDelayedReconnect(){this.delayedReconnectTimeout&&clearTimeout(this.delayedReconnectTimeout),this.delayedReconnectTimeout=setTimeout(()=>{this.delayedReconnectTimeout=null,this.reconnect()},1e4)}onWebsocketMessage(e){this.session.receive(JSON.parse(e.data))}addOccupant(e){var t=this;return r(function*(){t.occupants[e]&&t.removeOccupant(e),t.leftOccupants.delete(e);var n=yield t.createSubscriber(e);if(n)return t.occupants[e]=n,t.setMediaStream(e,n.mediaStream),t.onOccupantConnected(e),t.onOccupantsChanged(t.occupants),n})()}removeAllOccupants(){for(const e of Object.getOwnPropertyNames(this.occupants))this.removeOccupant(e)}removeOccupant(e){if(this.leftOccupants.add(e),this.occupants[e]){if(this.occupants[e]&&(this.occupants[e].conn.close(),delete this.occupants[e]),this.mediaStreams[e]&&delete this.mediaStreams[e],this.pendingMediaRequests.has(e)){const t="The user disconnected before the media stream was resolved.";this.pendingMediaRequests.get(e).audio.reject(t),this.pendingMediaRequests.get(e).video.reject(t),this.pendingMediaRequests.delete(e)}this.onOccupantDisconnected(e),this.onOccupantsChanged(this.occupants)}}associate(e,t){e.addEventListener("icecandidate",e=>{t.sendTrickle(e.candidate||null).catch(e=>o("Error trickling ICE: %o",e))}),e.addEventListener("iceconnectionstatechange",t=>{"failed"===e.iceConnectionState&&(console.warn("ICE failure detected. Reconnecting in 10s."),this.performDelayedReconnect())}),e.addEventListener("negotiationneeded",u(n=>{a("Sending new offer for handle: %o",t);var r=e.createOffer().then(this.configurePublisherSdp).then(this.fixSafariIceUFrag),s=r.then(t=>e.setLocalDescription(t)),i=r;return i=i.then(this.fixSafariIceUFrag).then(e=>t.sendJsep(e)).then(t=>e.setRemoteDescription(t.jsep)),Promise.all([s,i]).catch(e=>o("Error negotiating offer: %o",e))})),t.on("event",u(n=>{var r=n.jsep;if(r&&"offer"==r.type){a("Accepting new offer for handle: %o",t);var s=e.setRemoteDescription(this.configureSubscriberSdp(r)).then(t=>e.createAnswer()).then(this.fixSafariIceUFrag),i=s.then(t=>e.setLocalDescription(t)),c=s.then(e=>t.sendJsep(e));return Promise.all([i,c]).catch(e=>o("Error negotiating answer: %o",e))}return null}))}createPublisher(){var e=this;return r(function*(){var t=new s.JanusPluginHandle(e.session),n=new RTCPeerConnection(h);a("pub waiting for sfu"),yield t.attach("janus.plugin.sfu"),e.associate(n,t),a("pub waiting for data channels & webrtcup");var r=new Promise(function(e){return t.on("webrtcup",e)}),i=n.createDataChannel("reliable",{ordered:!0}),o=n.createDataChannel("unreliable",{ordered:!1,maxRetransmits:0});i.addEventListener("message",function(t){return e.onDataChannelMessage(t,"janus-reliable")}),o.addEventListener("message",function(t){return e.onDataChannelMessage(t,"janus-unreliable")}),yield r,yield d(i),yield d(o),e.localMediaStream&&e.localMediaStream.getTracks().forEach(function(t){n.addTrack(t,e.localMediaStream)}),t.on("event",function(t){var n=t.plugindata.data;"join"==n.event&&n.room_id==e.room?e.addOccupant(n.user_id):"leave"==n.event&&n.room_id==e.room?e.removeOccupant(n.user_id):"blocked"==n.event?document.body.dispatchEvent(new CustomEvent("blocked",{detail:{clientId:n.by}})):"unblocked"==n.event?document.body.dispatchEvent(new CustomEvent("unblocked",{detail:{clientId:n.by}})):"data"===n.event&&e.onData(JSON.parse(n.body),"janus-event")}),a("pub waiting for join");var c=yield e.sendJoin(t,{notifications:!0,data:!0});if(!c.plugindata.data.success){const e=c.plugindata.data.error;throw console.error(e),e}var u=c.plugindata.data.response.users[e.room]||[];return u.includes(e.clientId)&&(console.warn("Janus still has previous session for this client. Reconnecting in 10s."),e.performDelayedReconnect()),a("publisher ready"),{handle:t,initialOccupants:u,reliableChannel:i,unreliableChannel:o,conn:n}})()}configurePublisherSdp(e){return e.sdp=e.sdp.replace(/a=fmtp:(109|111).*\r\n/g,(e,t)=>{const n=Object.assign(i.parseFmtp(e),p);return i.writeFmtp({payloadType:t,parameters:n})}),e}configureSubscriberSdp(e){return l||-1!==navigator.userAgent.indexOf("HeadlessChrome")&&(e.sdp=e.sdp.replace(/m=video[^]*m=/,"m=")),-1===navigator.userAgent.indexOf("Android")?e.sdp=e.sdp.replace("a=rtcp-fb:107 goog-remb\r\n","a=rtcp-fb:107 goog-remb\r\na=rtcp-fb:107 transport-cc\r\na=fmtp:107 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\n"):e.sdp=e.sdp.replace("a=rtcp-fb:107 goog-remb\r\n","a=rtcp-fb:107 goog-remb\r\na=rtcp-fb:107 transport-cc\r\na=fmtp:107 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f\r\n"),e}fixSafariIceUFrag(e){return r(function*(){return e.sdp=e.sdp.replace(/[^\r]\na=ice-ufrag/g,"\r\na=ice-ufrag"),e})()}createSubscriber(e){var t=this;return r(function*(){if(t.leftOccupants.has(e))return console.warn(e+": cancelled occupant connection, occupant left before subscription negotation."),null;var n=new s.JanusPluginHandle(t.session),r=new RTCPeerConnection(h);if(a(e+": sub waiting for sfu"),yield n.attach("janus.plugin.sfu"),t.associate(r,n),a(e+": sub waiting for join"),t.leftOccupants.has(e))return r.close(),console.warn(e+": cancelled occupant connection, occupant left after attach"),null;yield t.sendJoin(n,{media:e});if(t.leftOccupants.has(e))return r.close(),console.warn(e+": cancelled occupant connection, occupant left after join"),null;if(a(e+": sub waiting for webrtcup"),yield new Promise(function(r){const s=setInterval(function(){t.leftOccupants.has(e)&&(clearInterval(s),r())},1e3);n.on("webrtcup",function(){clearInterval(s),r()})}),t.leftOccupants.has(e))return r.close(),console.warn(e+": cancel occupant connection, occupant left during or after webrtcup"),null;c&&!t._iOSHackDelayedInitialPeer&&(yield new Promise(function(e){return setTimeout(e,3e3)}),t._iOSHackDelayedInitialPeer=!0);var i=new MediaStream,o=r.getReceivers();return o.forEach(function(e){e.track&&i.addTrack(e.track)}),0===i.getTracks().length&&(i=null),a(e+": subscriber ready"),{handle:n,mediaStream:i,conn:r}})()}sendJoin(e,t){return e.sendMessage({kind:"join",room_id:this.room,user_id:this.clientId,subscribe:t,token:this.joinToken})}toggleFreeze(){this.frozen?this.unfreeze():this.freeze()}freeze(){this.frozen=!0}unfreeze(){this.frozen=!1,this.flushPendingUpdates()}dataForUpdateMultiMessage(e,t){for(let n=0,r=t.data.d.length;n<r;n++){const r=t.data.d[n];if(r.networkId===e)return r}return null}getPendingData(e,t){if(!t)return null;let n="um"===t.dataType?this.dataForUpdateMultiMessage(e,t):t.data;return n.owner&&!this.occupants[n.owner]?null:n.owner&&this.blockedClients.has(n.owner)?null:n}getPendingDataForNetworkId(e){return this.getPendingData(e,this.frozenUpdates.get(e))}flushPendingUpdates(){for(const[e,t]of this.frozenUpdates){let n=this.getPendingData(e,t);if(!n)continue;const r="um"===t.dataType?"u":t.dataType;this.onOccupantMessage(null,r,n,t.source)}this.frozenUpdates.clear()}storeMessage(e){if("um"===e.dataType)for(let t=0,n=e.data.d.length;t<n;t++)this.storeSingleMessage(e,t);else this.storeSingleMessage(e)}storeSingleMessage(e,t){const n=void 0!==t?e.data.d[t]:e.data,r=e.dataType,s=(e.source,n.networkId);if(this.frozenUpdates.has(s)){const t=this.frozenUpdates.get(s),i="um"===t.dataType?this.dataForUpdateMultiMessage(s,t):t.data,a=n.lastOwnerTime<i.lastOwnerTime,o=n.lastOwnerTime===i.lastOwnerTime;if(a||o&&i.owner>n.owner)return;if("r"===r){const t=i&&i.isFirstSync;t?this.frozenUpdates.delete(s):this.frozenUpdates.set(s,e)}else i.components&&n.components&&Object.assign(i.components,n.components)}else this.frozenUpdates.set(s,e)}onDataChannelMessage(e,t){this.onData(JSON.parse(e.data),t)}onData(e,t){a.enabled&&a(`DC in: ${e}`),e.dataType&&(e.source=t,this.frozen?this.storeMessage(e):this.onOccupantMessage(null,e.dataType,e.data,e.source))}shouldStartConnectionTo(e){return!0}startStreamConnection(e){}closeStreamConnection(e){}getConnectStatus(e){return this.occupants[e]?NAF.adapters.IS_CONNECTED:NAF.adapters.NOT_CONNECTED}updateTimeOffset(){var e=this;return r(function*(){if(e.isDisconnected())return;const t=Date.now(),n=yield fetch(document.location.href,{method:"HEAD",cache:"no-cache"}),r=new Date(n.headers.get("Date")).getTime()+500,s=Date.now(),i=r+(s-t)/2,o=i-s;e.serverTimeRequests++,e.serverTimeRequests<=10?e.timeOffsets.push(o):e.timeOffsets[e.serverTimeRequests%10]=o,e.avgTimeOffset=e.timeOffsets.reduce(function(e,t){return e+t},0)/e.timeOffsets.length,e.serverTimeRequests>10?(a(`new server time offset: ${e.avgTimeOffset}ms`),setTimeout(function(){return e.updateTimeOffset()},3e5)):e.updateTimeOffset()})()}getServerTime(){return Date.now()+this.avgTimeOffset}getMediaStream(e,t="audio"){if(this.mediaStreams[e])return a(`Already had ${t} for ${e}`),Promise.resolve(this.mediaStreams[e][t]);if(a(`Waiting on ${t} for ${e}`),!this.pendingMediaRequests.has(e)){this.pendingMediaRequests.set(e,{});const t=new Promise((t,n)=>{this.pendingMediaRequests.get(e).audio={resolve:t,reject:n}}),n=new Promise((t,n)=>{this.pendingMediaRequests.get(e).video={resolve:t,reject:n}});this.pendingMediaRequests.get(e).audio.promise=t,this.pendingMediaRequests.get(e).video.promise=n}return this.pendingMediaRequests.get(e)[t].promise}setMediaStream(e,t){const n=new MediaStream;t.getAudioTracks().forEach(e=>n.addTrack(e));const r=new MediaStream;t.getVideoTracks().forEach(e=>r.addTrack(e)),this.mediaStreams[e]={audio:n,video:r},this.pendingMediaRequests.has(e)&&(this.pendingMediaRequests.get(e).audio.resolve(n),this.pendingMediaRequests.get(e).video.resolve(r))}setLocalMediaStream(e){var t=this;return r(function*(){if(t.publisher&&t.publisher.conn){const n=t.publisher.conn.getSenders(),r=[],s=e.getTracks();for(let i=0;i<s.length;i++){const a=s[i],o=n.find(function(e){return null!=e.track&&e.track.kind==a.kind});null!=o?(o.replaceTrack?(yield o.replaceTrack(a),"video"===a.kind&&a.enabled&&navigator.userAgent.toLowerCase().indexOf("firefox")>-1&&(a.enabled=!1,setTimeout(function(){return a.enabled=!0},1e3))):(e.removeTrack(o.track),e.addTrack(a)),r.push(o)):r.push(t.publisher.conn.addTrack(a,e))}n.forEach(function(e){r.includes(e)||(e.track.enabled=!1)})}t.localMediaStream=e,t.setMediaStream(t.clientId,e)})()}enableMicrophone(e){this.publisher&&this.publisher.conn&&this.publisher.conn.getSenders().forEach(t=>{"audio"==t.track.kind&&(t.track.enabled=e)})}sendData(e,t,n){if(this.publisher)switch(this.unreliableTransport){case"websocket":this.publisher.handle.sendMessage({kind:"data",body:JSON.stringify({dataType:t,data:n}),whom:e});break;case"datachannel":this.publisher.unreliableChannel.send(JSON.stringify({clientId:e,dataType:t,data:n}));break;default:this.unreliableTransport(e,t,n)}else console.warn("sendData called without a publisher")}sendDataGuaranteed(e,t,n){if(this.publisher)switch(this.reliableTransport){case"websocket":this.publisher.handle.sendMessage({kind:"data",body:JSON.stringify({dataType:t,data:n}),whom:e});break;case"datachannel":this.publisher.reliableChannel.send(JSON.stringify({clientId:e,dataType:t,data:n}));break;default:this.reliableTransport(e,t,n)}else console.warn("sendDataGuaranteed called without a publisher")}broadcastData(e,t){if(this.publisher)switch(this.unreliableTransport){case"websocket":this.publisher.handle.sendMessage({kind:"data",body:JSON.stringify({dataType:e,data:t})});break;case"datachannel":this.publisher.unreliableChannel.send(JSON.stringify({dataType:e,data:t}));break;default:this.unreliableTransport(void 0,e,t)}else console.warn("broadcastData called without a publisher")}broadcastDataGuaranteed(e,t){if(this.publisher)switch(this.reliableTransport){case"websocket":this.publisher.handle.sendMessage({kind:"data",body:JSON.stringify({dataType:e,data:t})});break;case"datachannel":this.publisher.reliableChannel.send(JSON.stringify({dataType:e,data:t}));break;default:this.reliableTransport(void 0,e,t)}else console.warn("broadcastDataGuaranteed called without a publisher")}kick(e,t){return this.publisher.handle.sendMessage({kind:"kick",room_id:this.room,user_id:e,token:t}).then(()=>{document.body.dispatchEvent(new CustomEvent("kicked",{detail:{clientId:e}}))})}block(e){return this.publisher.handle.sendMessage({kind:"block",whom:e}).then(()=>{this.blockedClients.set(e,!0),document.body.dispatchEvent(new CustomEvent("blocked",{detail:{clientId:e}}))})}unblock(e){return this.publisher.handle.sendMessage({kind:"unblock",whom:e}).then(()=>{this.blockedClients.delete(e),document.body.dispatchEvent(new CustomEvent("unblocked",{detail:{clientId:e}}))})}}NAF.adapters.register("janus",m),e.exports=m}]);
!function(e){var t={};function n(r){if(t[r])return t[r].exports;var s=t[r]={i:r,l:!1,exports:{}};return e[r].call(s.exports,s,s.exports,n),s.l=!0,s.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)n.d(r,s,function(t){return e[t]}.bind(null,s));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=6)}([function(e,t,n){(function(r){function s(){var e;try{e=t.storage.debug}catch(e){}return!e&&void 0!==r&&"env"in r&&(e=r.env.DEBUG),e}t=e.exports=n(2),t.log=function(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)},t.formatArgs=function(e){var n=this.useColors;if(e[0]=(n?"%c":"")+this.namespace+(n?" %c":" ")+e[0]+(n?"%c ":" ")+"+"+t.humanize(this.diff),!n)return;var r="color: "+this.color;e.splice(1,0,r,"color: inherit");var s=0,i=0;e[0].replace(/%[a-zA-Z%]/g,function(e){"%%"!==e&&(s++,"%c"===e&&(i=s))}),e.splice(i,0,r)},t.save=function(e){try{null==e?t.storage.removeItem("debug"):t.storage.debug=e}catch(e){}},t.load=s,t.useColors=function(){if("undefined"!=typeof window&&window.process&&"renderer"===window.process.type)return!0;if("undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;return"undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},t.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(e){}}(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.formatters.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}},t.enable(s())}).call(this,n(3))},function(e,t){var n=1e3,r=60*n,s=60*r,i=24*s,a=365.25*i;function o(e,t,n){if(!(e<t))return e<1.5*t?Math.floor(e/t)+" "+n:Math.ceil(e/t)+" "+n+"s"}e.exports=function(e,t){t=t||{};var c,u=typeof e;if("string"===u&&e.length>0)return function(e){if(e=String(e),e.length>100)return;var t=/^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(e);if(!t)return;var o=parseFloat(t[1]),c=(t[2]||"ms").toLowerCase();switch(c){case"years":case"year":case"yrs":case"yr":case"y":return o*a;case"days":case"day":case"d":return o*i;case"hours":case"hour":case"hrs":case"hr":case"h":return o*s;case"minutes":case"minute":case"mins":case"min":case"m":return o*r;case"seconds":case"second":case"secs":case"sec":case"s":return o*n;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return o;default:return}}(e);if("number"===u&&!1===isNaN(e))return t.long?(c=e,o(c,i,"day")||o(c,s,"hour")||o(c,r,"minute")||o(c,n,"second")||c+" ms"):function(e){if(e>=i)return Math.round(e/i)+"d";if(e>=s)return Math.round(e/s)+"h";if(e>=r)return Math.round(e/r)+"m";if(e>=n)return Math.round(e/n)+"s";return e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},function(e,t,n){function r(e){var n;function r(){if(r.enabled){var e=r,s=+new Date,i=s-(n||s);e.diff=i,e.prev=n,e.curr=s,n=s;for(var a=new Array(arguments.length),o=0;o<a.length;o++)a[o]=arguments[o];a[0]=t.coerce(a[0]),"string"!=typeof a[0]&&a.unshift("%O");var c=0;a[0]=a[0].replace(/%([a-zA-Z%])/g,function(n,r){if("%%"===n)return n;c++;var s=t.formatters[r];if("function"==typeof s){var i=a[c];n=s.call(e,i),a.splice(c,1),c--}return n}),t.formatArgs.call(e,a);var u=r.log||t.log||console.log.bind(console);u.apply(e,a)}}return r.namespace=e,r.enabled=t.enabled(e),r.useColors=t.useColors(),r.color=function(e){var n,r=0;for(n in e)r=(r<<5)-r+e.charCodeAt(n),r|=0;return t.colors[Math.abs(r)%t.colors.length]}(e),r.destroy=s,"function"==typeof t.init&&t.init(r),t.instances.push(r),r}function s(){var e=t.instances.indexOf(this);return-1!==e&&(t.instances.splice(e,1),!0)}t=e.exports=r.debug=r.default=r,t.coerce=function(e){return e instanceof Error?e.stack||e.message:e},t.disable=function(){t.enable("")},t.enable=function(e){var n;t.save(e),t.names=[],t.skips=[];var r=("string"==typeof e?e:"").split(/[\s,]+/),s=r.length;for(n=0;n<s;n++)r[n]&&(e=r[n].replace(/\*/g,".*?"),"-"===e[0]?t.skips.push(new RegExp("^"+e.substr(1)+"$")):t.names.push(new RegExp("^"+e+"$")));for(n=0;n<t.instances.length;n++){var i=t.instances[n];i.enabled=t.enabled(i.namespace)}},t.enabled=function(e){if("*"===e[e.length-1])return!0;var n,r;for(n=0,r=t.skips.length;n<r;n++)if(t.skips[n].test(e))return!1;for(n=0,r=t.names.length;n<r;n++)if(t.names[n].test(e))return!0;return!1},t.humanize=n(1),t.instances=[],t.names=[],t.skips=[],t.formatters={}},function(e,t){var n,r,s=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function a(){throw new Error("clearTimeout has not been defined")}function o(e){if(n===setTimeout)return setTimeout(e,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:i}catch(e){n=i}try{r="function"==typeof clearTimeout?clearTimeout:a}catch(e){r=a}}();var c,u=[],d=!1,l=-1;function p(){d&&c&&(d=!1,c.length?u=c.concat(u):l=-1,u.length&&h())}function h(){if(!d){var e=o(p);d=!0;for(var t=u.length;t;){for(c=u,u=[];++l<t;)c&&c[l].run();l=-1,t=u.length}c=null,d=!1,function(e){if(r===clearTimeout)return clearTimeout(e);if((r===a||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(e);try{r(e)}catch(t){try{return r.call(null,e)}catch(t){return r.call(this,e)}}}(e)}}function f(e,t){this.fun=e,this.array=t}function m(){}s.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];u.push(new f(e,t)),1!==u.length||d||o(h)},f.prototype.run=function(){this.fun.apply(null,this.array)},s.title="browser",s.browser=!0,s.env={},s.argv=[],s.version="",s.versions={},s.on=m,s.addListener=m,s.once=m,s.off=m,s.removeListener=m,s.removeAllListeners=m,s.emit=m,s.prependListener=m,s.prependOnceListener=m,s.listeners=function(e){return[]},s.binding=function(e){throw new Error("process.binding is not supported")},s.cwd=function(){return"/"},s.chdir=function(e){throw new Error("process.chdir is not supported")},s.umask=function(){return 0}},function(e,t,n){"use strict";var r={generateIdentifier:function(){return Math.random().toString(36).substr(2,10)}};r.localCName=r.generateIdentifier(),r.splitLines=function(e){return e.trim().split("\n").map(function(e){return e.trim()})},r.splitSections=function(e){var t=e.split("\nm=");return t.map(function(e,t){return(t>0?"m="+e:e).trim()+"\r\n"})},r.getDescription=function(e){var t=r.splitSections(e);return t&&t[0]},r.getMediaSections=function(e){var t=r.splitSections(e);return t.shift(),t},r.matchPrefix=function(e,t){return r.splitLines(e).filter(function(e){return 0===e.indexOf(t)})},r.parseCandidate=function(e){var t;t=0===e.indexOf("a=candidate:")?e.substring(12).split(" "):e.substring(10).split(" ");for(var n={foundation:t[0],component:parseInt(t[1],10),protocol:t[2].toLowerCase(),priority:parseInt(t[3],10),ip:t[4],port:parseInt(t[5],10),type:t[7]},r=8;r<t.length;r+=2)switch(t[r]){case"raddr":n.relatedAddress=t[r+1];break;case"rport":n.relatedPort=parseInt(t[r+1],10);break;case"tcptype":n.tcpType=t[r+1];break;case"ufrag":n.ufrag=t[r+1],n.usernameFragment=t[r+1];break;default:n[t[r]]=t[r+1]}return n},r.writeCandidate=function(e){var t=[];t.push(e.foundation),t.push(e.component),t.push(e.protocol.toUpperCase()),t.push(e.priority),t.push(e.ip),t.push(e.port);var n=e.type;return t.push("typ"),t.push(n),"host"!==n&&e.relatedAddress&&e.relatedPort&&(t.push("raddr"),t.push(e.relatedAddress),t.push("rport"),t.push(e.relatedPort)),e.tcpType&&"tcp"===e.protocol.toLowerCase()&&(t.push("tcptype"),t.push(e.tcpType)),(e.usernameFragment||e.ufrag)&&(t.push("ufrag"),t.push(e.usernameFragment||e.ufrag)),"candidate:"+t.join(" ")},r.parseIceOptions=function(e){return e.substr(14).split(" ")},r.parseRtpMap=function(e){var t=e.substr(9).split(" "),n={payloadType:parseInt(t.shift(),10)};return t=t[0].split("/"),n.name=t[0],n.clockRate=parseInt(t[1],10),n.channels=3===t.length?parseInt(t[2],10):1,n.numChannels=n.channels,n},r.writeRtpMap=function(e){var t=e.payloadType;void 0!==e.preferredPayloadType&&(t=e.preferredPayloadType);var n=e.channels||e.numChannels||1;return"a=rtpmap:"+t+" "+e.name+"/"+e.clockRate+(1!==n?"/"+n:"")+"\r\n"},r.parseExtmap=function(e){var t=e.substr(9).split(" ");return{id:parseInt(t[0],10),direction:t[0].indexOf("/")>0?t[0].split("/")[1]:"sendrecv",uri:t[1]}},r.writeExtmap=function(e){return"a=extmap:"+(e.id||e.preferredId)+(e.direction&&"sendrecv"!==e.direction?"/"+e.direction:"")+" "+e.uri+"\r\n"},r.parseFmtp=function(e){for(var t,n={},r=e.substr(e.indexOf(" ")+1).split(";"),s=0;s<r.length;s++)t=r[s].trim().split("="),n[t[0].trim()]=t[1];return n},r.writeFmtp=function(e){var t="",n=e.payloadType;if(void 0!==e.preferredPayloadType&&(n=e.preferredPayloadType),e.parameters&&Object.keys(e.parameters).length){var r=[];Object.keys(e.parameters).forEach(function(t){e.parameters[t]?r.push(t+"="+e.parameters[t]):r.push(t)}),t+="a=fmtp:"+n+" "+r.join(";")+"\r\n"}return t},r.parseRtcpFb=function(e){var t=e.substr(e.indexOf(" ")+1).split(" ");return{type:t.shift(),parameter:t.join(" ")}},r.writeRtcpFb=function(e){var t="",n=e.payloadType;return void 0!==e.preferredPayloadType&&(n=e.preferredPayloadType),e.rtcpFeedback&&e.rtcpFeedback.length&&e.rtcpFeedback.forEach(function(e){t+="a=rtcp-fb:"+n+" "+e.type+(e.parameter&&e.parameter.length?" "+e.parameter:"")+"\r\n"}),t},r.parseSsrcMedia=function(e){var t=e.indexOf(" "),n={ssrc:parseInt(e.substr(7,t-7),10)},r=e.indexOf(":",t);return r>-1?(n.attribute=e.substr(t+1,r-t-1),n.value=e.substr(r+1)):n.attribute=e.substr(t+1),n},r.getMid=function(e){var t=r.matchPrefix(e,"a=mid:")[0];if(t)return t.substr(6)},r.parseFingerprint=function(e){var t=e.substr(14).split(" ");return{algorithm:t[0].toLowerCase(),value:t[1]}},r.getDtlsParameters=function(e,t){var n=r.matchPrefix(e+t,"a=fingerprint:");return{role:"auto",fingerprints:n.map(r.parseFingerprint)}},r.writeDtlsParameters=function(e,t){var n="a=setup:"+t+"\r\n";return e.fingerprints.forEach(function(e){n+="a=fingerprint:"+e.algorithm+" "+e.value+"\r\n"}),n},r.getIceParameters=function(e,t){var n=r.splitLines(e);n=n.concat(r.splitLines(t));var s={usernameFragment:n.filter(function(e){return 0===e.indexOf("a=ice-ufrag:")})[0].substr(12),password:n.filter(function(e){return 0===e.indexOf("a=ice-pwd:")})[0].substr(10)};return s},r.writeIceParameters=function(e){return"a=ice-ufrag:"+e.usernameFragment+"\r\na=ice-pwd:"+e.password+"\r\n"},r.parseRtpParameters=function(e){for(var t={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},n=r.splitLines(e),s=n[0].split(" "),i=3;i<s.length;i++){var a=s[i],o=r.matchPrefix(e,"a=rtpmap:"+a+" ")[0];if(o){var c=r.parseRtpMap(o),u=r.matchPrefix(e,"a=fmtp:"+a+" ");switch(c.parameters=u.length?r.parseFmtp(u[0]):{},c.rtcpFeedback=r.matchPrefix(e,"a=rtcp-fb:"+a+" ").map(r.parseRtcpFb),t.codecs.push(c),c.name.toUpperCase()){case"RED":case"ULPFEC":t.fecMechanisms.push(c.name.toUpperCase())}}}return r.matchPrefix(e,"a=extmap:").forEach(function(e){t.headerExtensions.push(r.parseExtmap(e))}),t},r.writeRtpDescription=function(e,t){var n="";n+="m="+e+" ",n+=t.codecs.length>0?"9":"0",n+=" UDP/TLS/RTP/SAVPF ",n+=t.codecs.map(function(e){return void 0!==e.preferredPayloadType?e.preferredPayloadType:e.payloadType}).join(" ")+"\r\n",n+="c=IN IP4 0.0.0.0\r\n",n+="a=rtcp:9 IN IP4 0.0.0.0\r\n",t.codecs.forEach(function(e){n+=r.writeRtpMap(e),n+=r.writeFmtp(e),n+=r.writeRtcpFb(e)});var s=0;return t.codecs.forEach(function(e){e.maxptime>s&&(s=e.maxptime)}),s>0&&(n+="a=maxptime:"+s+"\r\n"),n+="a=rtcp-mux\r\n",t.headerExtensions&&t.headerExtensions.forEach(function(e){n+=r.writeExtmap(e)}),n},r.parseRtpEncodingParameters=function(e){var t,n=[],s=r.parseRtpParameters(e),i=-1!==s.fecMechanisms.indexOf("RED"),a=-1!==s.fecMechanisms.indexOf("ULPFEC"),o=r.matchPrefix(e,"a=ssrc:").map(function(e){return r.parseSsrcMedia(e)}).filter(function(e){return"cname"===e.attribute}),c=o.length>0&&o[0].ssrc,u=r.matchPrefix(e,"a=ssrc-group:FID").map(function(e){var t=e.substr(17).split(" ");return t.map(function(e){return parseInt(e,10)})});u.length>0&&u[0].length>1&&u[0][0]===c&&(t=u[0][1]),s.codecs.forEach(function(e){if("RTX"===e.name.toUpperCase()&&e.parameters.apt){var r={ssrc:c,codecPayloadType:parseInt(e.parameters.apt,10)};c&&t&&(r.rtx={ssrc:t}),n.push(r),i&&(r=JSON.parse(JSON.stringify(r)),r.fec={ssrc:t,mechanism:a?"red+ulpfec":"red"},n.push(r))}}),0===n.length&&c&&n.push({ssrc:c});var d=r.matchPrefix(e,"b=");return d.length&&(d=0===d[0].indexOf("b=TIAS:")?parseInt(d[0].substr(7),10):0===d[0].indexOf("b=AS:")?1e3*parseInt(d[0].substr(5),10)*.95-16e3:void 0,n.forEach(function(e){e.maxBitrate=d})),n},r.parseRtcpParameters=function(e){var t={},n=r.matchPrefix(e,"a=ssrc:").map(function(e){return r.parseSsrcMedia(e)}).filter(function(e){return"cname"===e.attribute})[0];n&&(t.cname=n.value,t.ssrc=n.ssrc);var s=r.matchPrefix(e,"a=rtcp-rsize");t.reducedSize=s.length>0,t.compound=0===s.length;var i=r.matchPrefix(e,"a=rtcp-mux");return t.mux=i.length>0,t},r.parseMsid=function(e){var t,n=r.matchPrefix(e,"a=msid:");if(1===n.length)return t=n[0].substr(7).split(" "),{stream:t[0],track:t[1]};var s=r.matchPrefix(e,"a=ssrc:").map(function(e){return r.parseSsrcMedia(e)}).filter(function(e){return"msid"===e.attribute});return s.length>0?(t=s[0].value.split(" "),{stream:t[0],track:t[1]}):void 0},r.generateSessionId=function(){return Math.random().toString().substr(2,21)},r.writeSessionBoilerplate=function(e,t){var n,s=void 0!==t?t:2;return n=e||r.generateSessionId(),"v=0\r\no=thisisadapterortc "+n+" "+s+" IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\n"},r.writeMediaSection=function(e,t,n,s){var i=r.writeRtpDescription(e.kind,t);if(i+=r.writeIceParameters(e.iceGatherer.getLocalParameters()),i+=r.writeDtlsParameters(e.dtlsTransport.getLocalParameters(),"offer"===n?"actpass":"active"),i+="a=mid:"+e.mid+"\r\n",e.direction?i+="a="+e.direction+"\r\n":e.rtpSender&&e.rtpReceiver?i+="a=sendrecv\r\n":e.rtpSender?i+="a=sendonly\r\n":e.rtpReceiver?i+="a=recvonly\r\n":i+="a=inactive\r\n",e.rtpSender){var a="msid:"+s.id+" "+e.rtpSender.track.id+"\r\n";i+="a="+a,i+="a=ssrc:"+e.sendEncodingParameters[0].ssrc+" "+a,e.sendEncodingParameters[0].rtx&&(i+="a=ssrc:"+e.sendEncodingParameters[0].rtx.ssrc+" "+a,i+="a=ssrc-group:FID "+e.sendEncodingParameters[0].ssrc+" "+e.sendEncodingParameters[0].rtx.ssrc+"\r\n")}return i+="a=ssrc:"+e.sendEncodingParameters[0].ssrc+" cname:"+r.localCName+"\r\n",e.rtpSender&&e.sendEncodingParameters[0].rtx&&(i+="a=ssrc:"+e.sendEncodingParameters[0].rtx.ssrc+" cname:"+r.localCName+"\r\n"),i},r.getDirection=function(e,t){for(var n=r.splitLines(e),s=0;s<n.length;s++)switch(n[s]){case"a=sendrecv":case"a=sendonly":case"a=recvonly":case"a=inactive":return n[s].substr(2)}return t?r.getDirection(t):"sendrecv"},r.getKind=function(e){var t=r.splitLines(e),n=t[0].split(" ");return n[0].substr(2)},r.isRejected=function(e){return"0"===e.split(" ",2)[1]},r.parseMLine=function(e){var t=r.splitLines(e),n=t[0].substr(2).split(" ");return{kind:n[0],port:parseInt(n[1],10),protocol:n[2],fmt:n.slice(3).join(" ")}},r.parseOLine=function(e){var t=r.matchPrefix(e,"o=")[0],n=t.substr(2).split(" ");return{username:n[0],sessionId:n[1],sessionVersion:parseInt(n[2],10),netType:n[3],addressType:n[4],address:n[5]}},e.exports=r},function(e,t){function n(e){this.session=e,this.id=void 0}function r(e,t){this.output=e,this.id=void 0,this.nextTxId=0,this.txns={},this.eventHandlers={},this.options=Object.assign({verbose:!1,timeoutMs:1e4,keepaliveMs:3e4},t)}n.prototype.attach=function(e){var t={plugin:e,"force-bundle":!0,"force-rtcp-mux":!0};return this.session.send("attach",t).then(e=>(this.id=e.data.id,e))},n.prototype.detach=function(){return this.send("detach")},n.prototype.on=function(e,t){return this.session.on(e,e=>{e.sender==this.id&&t(e)})},n.prototype.send=function(e,t){return this.session.send(e,Object.assign({handle_id:this.id},t))},n.prototype.sendMessage=function(e){return this.send("message",{body:e})},n.prototype.sendJsep=function(e){return this.send("message",{body:{},jsep:e})},n.prototype.sendTrickle=function(e){return this.send("trickle",{candidate:e})},r.prototype.create=function(){return this.send("create").then(e=>(this.id=e.data.id,e))},r.prototype.destroy=function(){return this.send("destroy").then(e=>(this.dispose(),e))},r.prototype.dispose=function(){for(var e in this._killKeepalive(),this.eventHandlers={},this.txns)if(this.txns.hasOwnProperty(e)){var t=this.txns[e];clearTimeout(t.timeout),t.reject(new Error("Janus session was disposed.")),delete this.txns[e]}},r.prototype.isError=function(e){return"error"===e.janus},r.prototype.on=function(e,t){var n=this.eventHandlers[e];null==n&&(n=this.eventHandlers[e]=[]),n.push(t)},r.prototype.receive=function(e){this.options.verbose&&this._logIncoming(e),e.session_id!=this.id&&console.warn("Incorrect session ID received in Janus signalling message: was "+e.session_id+", expected "+this.id+".");var t=e.janus,n=this.eventHandlers[t];if(null!=n)for(var r=0;r<n.length;r++)n[r](e);if(null!=e.transaction){var s=this.txns[e.transaction];if(null==s)return;if("ack"===t&&"message"==s.type)return;clearTimeout(s.timeout),delete this.txns[e.transaction],(this.isError(e)?s.reject:s.resolve)(e)}},r.prototype.send=function(e,t){return t=Object.assign({transaction:(this.nextTxId++).toString()},t),new Promise((n,r)=>{var s=null;this.options.timeoutMs&&(s=setTimeout(()=>{delete this.txns[t.transaction],r(new Error("Signalling transaction with txid "+t.transaction+" timed out."))},this.options.timeoutMs)),this.txns[t.transaction]={resolve:n,reject:r,timeout:s,type:e},this._transmit(e,t)})},r.prototype._transmit=function(e,t){t=Object.assign({janus:e},t),null!=this.id&&(t=Object.assign({session_id:this.id},t)),this.options.verbose&&this._logOutgoing(t),this.output(JSON.stringify(t)),this._resetKeepalive()},r.prototype._logOutgoing=function(e){var t=e.janus;"message"===t&&e.jsep&&(t=e.jsep.type);var n="> Outgoing Janus "+(t||"signal")+" (#"+e.transaction+"): ";console.debug("%c"+n,"color: #040",e)},r.prototype._logIncoming=function(e){var t=e.janus,n=e.transaction?"< Incoming Janus "+(t||"signal")+" (#"+e.transaction+"): ":"< Incoming Janus "+(t||"signal")+": ";console.debug("%c"+n,"color: #004",e)},r.prototype._sendKeepalive=function(){return this.send("keepalive")},r.prototype._killKeepalive=function(){clearTimeout(this.keepaliveTimeout)},r.prototype._resetKeepalive=function(){this._killKeepalive(),this.options.keepaliveMs&&(this.keepaliveTimeout=setTimeout(()=>{this._sendKeepalive().catch(e=>console.error("Error received from keepalive: ",e))},this.options.keepaliveMs))},e.exports={JanusPluginHandle:n,JanusSession:r}},function(e,t,n){function r(e){return function(){var t=e.apply(this,arguments);return new Promise(function(e,n){return function r(s,i){try{var a=t[s](i),o=a.value}catch(e){return void n(e)}if(!a.done)return Promise.resolve(o).then(function(e){r("next",e)},function(e){r("throw",e)});e(o)}("next")})}}var s=n(5),i=n(4),a=n(0)("naf-janus-adapter:debug"),o=(n(0)("naf-janus-adapter:warn"),n(0)("naf-janus-adapter:error")),c=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);const u=15e3;function d(e){var t=Promise.resolve();return function(){var n=Array.prototype.slice.call(arguments);t=t.then(t=>e.apply(this,n))}}function l(e){return new Promise((t,n)=>{if("open"===e.readyState)t();else{let r,s;const i=()=>{e.removeEventListener("open",r),e.removeEventListener("error",s)};r=(()=>{i(),t()}),s=(()=>{i(),n()}),e.addEventListener("open",r),e.addEventListener("error",s)}})}const p=(()=>{const e=document.createElement("video");return""!==e.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"')})(),h={usedtx:1,stereo:0,"sprop-stereo":0},f={iceServers:[{urls:"stun:stun1.l.google.com:19302"},{urls:"stun:stun2.l.google.com:19302"}]},m=1e3;class g{constructor(){this.room=null,this.clientId=null,this.joinToken=null,this.serverUrl=null,this.webRtcOptions={},this.ws=null,this.session=null,this.reliableTransport="datachannel",this.unreliableTransport="datachannel",this.initialReconnectionDelay=1e3*Math.random(),this.reconnectionDelay=this.initialReconnectionDelay,this.reconnectionTimeout=null,this.maxReconnectionAttempts=10,this.reconnectionAttempts=0,this.publisher=null,this.occupants={},this.leftOccupants=new Set,this.mediaStreams={},this.localMediaStream=null,this.pendingMediaRequests=new Map,this.blockedClients=new Map,this.frozenUpdates=new Map,this.timeOffsets=[],this.serverTimeRequests=0,this.avgTimeOffset=0,this.onWebsocketOpen=this.onWebsocketOpen.bind(this),this.onWebsocketClose=this.onWebsocketClose.bind(this),this.onWebsocketMessage=this.onWebsocketMessage.bind(this),this.onDataChannelMessage=this.onDataChannelMessage.bind(this),this.onData=this.onData.bind(this)}setServerUrl(e){this.serverUrl=e}setApp(e){}setRoom(e){this.room=e}setJoinToken(e){this.joinToken=e}setClientId(e){this.clientId=e}setWebRtcOptions(e){this.webRtcOptions=e}setServerConnectListeners(e,t){this.connectSuccess=e,this.connectFailure=t}setRoomOccupantListener(e){this.onOccupantsChanged=e}setDataChannelListeners(e,t,n){this.onOccupantConnected=e,this.onOccupantDisconnected=t,this.onOccupantMessage=n}setReconnectionListeners(e,t,n){this.onReconnecting=e,this.onReconnected=t,this.onReconnectionError=n}connect(){a(`connecting to ${this.serverUrl}`);const e=new Promise((e,t)=>{let n;this.ws=new WebSocket(this.serverUrl,"janus-protocol"),this.session=new s.JanusSession(this.ws.send.bind(this.ws));const r=()=>{t(o)};this.ws.addEventListener("close",this.onWebsocketClose),this.ws.addEventListener("message",this.onWebsocketMessage),n=(()=>{this.ws.removeEventListener("open",n),this.ws.removeEventListener("error",r),this.onWebsocketOpen().then(e).catch(t)}),this.ws.addEventListener("open",n)});return Promise.all([e,this.updateTimeOffset()])}disconnect(){a("disconnecting"),clearTimeout(this.reconnectionTimeout),this.removeAllOccupants(),this.leftOccupants=new Set,this.publisher&&(this.publisher.conn.close(),this.publisher=null),this.session&&(this.session.dispose(),this.session=null),this.ws&&(this.ws.removeEventListener("open",this.onWebsocketOpen),this.ws.removeEventListener("close",this.onWebsocketClose),this.ws.removeEventListener("message",this.onWebsocketMessage),this.ws.close(),this.ws=null)}isDisconnected(){return null===this.ws}onWebsocketOpen(){var e=this;return r(function*(){yield e.session.create(),e.publisher=yield e.createPublisher(),e.connectSuccess(e.clientId);const t=[];for(let n=0;n<e.publisher.initialOccupants.length;n++){const r=e.publisher.initialOccupants[n];r!==e.clientId&&t.push(e.addOccupant(r))}yield Promise.all(t)})()}onWebsocketClose(e){e.code!==m&&(this.onReconnecting&&this.onReconnecting(this.reconnectionDelay),this.reconnectionTimeout=setTimeout(()=>this.reconnect(),this.reconnectionDelay))}reconnect(){this.disconnect(),this.connect().then(()=>{this.reconnectionDelay=this.initialReconnectionDelay,this.reconnectionAttempts=0,this.onReconnected&&this.onReconnected()}).catch(e=>{if(this.reconnectionDelay+=1e3,this.reconnectionAttempts++,this.reconnectionAttempts>this.maxReconnectionAttempts&&this.onReconnectionError)return this.onReconnectionError(new Error("Connection could not be reestablished, exceeded maximum number of reconnection attempts."));console.warn("Error during reconnect, retrying."),console.warn(e),this.onReconnecting&&this.onReconnecting(this.reconnectionDelay),this.reconnectionTimeout=setTimeout(()=>this.reconnect(),this.reconnectionDelay)})}performDelayedReconnect(){this.delayedReconnectTimeout&&clearTimeout(this.delayedReconnectTimeout),this.delayedReconnectTimeout=setTimeout(()=>{this.delayedReconnectTimeout=null,this.reconnect()},1e4)}onWebsocketMessage(e){this.session.receive(JSON.parse(e.data))}addOccupant(e){var t=this;return r(function*(){t.occupants[e]&&t.removeOccupant(e),t.leftOccupants.delete(e);var n=yield t.createSubscriber(e);if(n)return t.occupants[e]=n,t.setMediaStream(e,n.mediaStream),t.onOccupantConnected(e),t.onOccupantsChanged(t.occupants),n})()}removeAllOccupants(){for(const e of Object.getOwnPropertyNames(this.occupants))this.removeOccupant(e)}removeOccupant(e){if(this.leftOccupants.add(e),this.occupants[e]){if(this.occupants[e]&&(this.occupants[e].conn.close(),delete this.occupants[e]),this.mediaStreams[e]&&delete this.mediaStreams[e],this.pendingMediaRequests.has(e)){const t="The user disconnected before the media stream was resolved.";this.pendingMediaRequests.get(e).audio.reject(t),this.pendingMediaRequests.get(e).video.reject(t),this.pendingMediaRequests.delete(e)}this.onOccupantDisconnected(e),this.onOccupantsChanged(this.occupants)}}associate(e,t){e.addEventListener("icecandidate",e=>{t.sendTrickle(e.candidate||null).catch(e=>o("Error trickling ICE: %o",e))}),e.addEventListener("iceconnectionstatechange",t=>{"failed"===e.iceConnectionState&&(console.warn("ICE failure detected. Reconnecting in 10s."),this.performDelayedReconnect())}),e.addEventListener("negotiationneeded",d(n=>{a("Sending new offer for handle: %o",t);var r=e.createOffer().then(this.configurePublisherSdp).then(this.fixSafariIceUFrag),s=r.then(t=>e.setLocalDescription(t)),i=r;return i=i.then(this.fixSafariIceUFrag).then(e=>t.sendJsep(e)).then(t=>e.setRemoteDescription(t.jsep)),Promise.all([s,i]).catch(e=>o("Error negotiating offer: %o",e))})),t.on("event",d(n=>{var r=n.jsep;if(r&&"offer"==r.type){a("Accepting new offer for handle: %o",t);var s=e.setRemoteDescription(this.configureSubscriberSdp(r)).then(t=>e.createAnswer()).then(this.fixSafariIceUFrag),i=s.then(t=>e.setLocalDescription(t)),c=s.then(e=>t.sendJsep(e));return Promise.all([i,c]).catch(e=>o("Error negotiating answer: %o",e))}return null}))}createPublisher(){var e=this;return r(function*(){var t=new s.JanusPluginHandle(e.session),n=new RTCPeerConnection(f);a("pub waiting for sfu"),yield t.attach("janus.plugin.sfu"),e.associate(n,t),a("pub waiting for data channels & webrtcup");var r=new Promise(function(e){return t.on("webrtcup",e)}),i=n.createDataChannel("reliable",{ordered:!0}),o=n.createDataChannel("unreliable",{ordered:!1,maxRetransmits:0});i.addEventListener("message",function(t){return e.onDataChannelMessage(t,"janus-reliable")}),o.addEventListener("message",function(t){return e.onDataChannelMessage(t,"janus-unreliable")}),yield r,yield l(i),yield l(o),e.localMediaStream&&e.localMediaStream.getTracks().forEach(function(t){n.addTrack(t,e.localMediaStream)}),t.on("event",function(t){var n=t.plugindata.data;"join"==n.event&&n.room_id==e.room?e.addOccupant(n.user_id):"leave"==n.event&&n.room_id==e.room?e.removeOccupant(n.user_id):"blocked"==n.event?document.body.dispatchEvent(new CustomEvent("blocked",{detail:{clientId:n.by}})):"unblocked"==n.event?document.body.dispatchEvent(new CustomEvent("unblocked",{detail:{clientId:n.by}})):"data"===n.event&&e.onData(JSON.parse(n.body),"janus-event")}),a("pub waiting for join");var c=yield e.sendJoin(t,{notifications:!0,data:!0});if(!c.plugindata.data.success){const e=c.plugindata.data.error;throw console.error(e),e}var u=c.plugindata.data.response.users[e.room]||[];return u.includes(e.clientId)&&(console.warn("Janus still has previous session for this client. Reconnecting in 10s."),e.performDelayedReconnect()),a("publisher ready"),{handle:t,initialOccupants:u,reliableChannel:i,unreliableChannel:o,conn:n}})()}configurePublisherSdp(e){return e.sdp=e.sdp.replace(/a=fmtp:(109|111).*\r\n/g,(e,t)=>{const n=Object.assign(i.parseFmtp(e),h);return i.writeFmtp({payloadType:t,parameters:n})}),e}configureSubscriberSdp(e){return p||-1!==navigator.userAgent.indexOf("HeadlessChrome")&&(e.sdp=e.sdp.replace(/m=video[^]*m=/,"m=")),-1===navigator.userAgent.indexOf("Android")?e.sdp=e.sdp.replace("a=rtcp-fb:107 goog-remb\r\n","a=rtcp-fb:107 goog-remb\r\na=rtcp-fb:107 transport-cc\r\na=fmtp:107 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\n"):e.sdp=e.sdp.replace("a=rtcp-fb:107 goog-remb\r\n","a=rtcp-fb:107 goog-remb\r\na=rtcp-fb:107 transport-cc\r\na=fmtp:107 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f\r\n"),e}fixSafariIceUFrag(e){return r(function*(){return e.sdp=e.sdp.replace(/[^\r]\na=ice-ufrag/g,"\r\na=ice-ufrag"),e})()}createSubscriber(e){var t=this;return r(function*(){if(t.leftOccupants.has(e))return console.warn(e+": cancelled occupant connection, occupant left before subscription negotation."),null;var n=new s.JanusPluginHandle(t.session),r=new RTCPeerConnection(f);if(a(e+": sub waiting for sfu"),yield n.attach("janus.plugin.sfu"),t.associate(r,n),a(e+": sub waiting for join"),t.leftOccupants.has(e))return r.close(),console.warn(e+": cancelled occupant connection, occupant left after attach"),null;let i=!1;const o=new Promise(function(r){const s=setInterval(function(){t.leftOccupants.has(e)&&(clearInterval(s),r())},1e3),a=setTimeout(function(){clearInterval(s),i=!0,r()},u);n.on("webrtcup",function(){clearTimeout(a),clearInterval(s),r()})});yield t.sendJoin(n,{media:e});if(t.leftOccupants.has(e))return r.close(),console.warn(e+": cancelled occupant connection, occupant left after join"),null;if(a(e+": sub waiting for webrtcup"),yield o,t.leftOccupants.has(e))return r.close(),console.warn(e+": cancel occupant connection, occupant left during or after webrtcup"),null;if(i)return r.close(),console.warn(e+": webrtc up timed out"),null;c&&!t._iOSHackDelayedInitialPeer&&(yield new Promise(function(e){return setTimeout(e,3e3)}),t._iOSHackDelayedInitialPeer=!0);var d=new MediaStream,l=r.getReceivers();return l.forEach(function(e){e.track&&d.addTrack(e.track)}),0===d.getTracks().length&&(d=null),a(e+": subscriber ready"),{handle:n,mediaStream:d,conn:r}})()}sendJoin(e,t){return e.sendMessage({kind:"join",room_id:this.room,user_id:this.clientId,subscribe:t,token:this.joinToken})}toggleFreeze(){this.frozen?this.unfreeze():this.freeze()}freeze(){this.frozen=!0}unfreeze(){this.frozen=!1,this.flushPendingUpdates()}dataForUpdateMultiMessage(e,t){for(let n=0,r=t.data.d.length;n<r;n++){const r=t.data.d[n];if(r.networkId===e)return r}return null}getPendingData(e,t){if(!t)return null;let n="um"===t.dataType?this.dataForUpdateMultiMessage(e,t):t.data;return n.owner&&!this.occupants[n.owner]?null:n.owner&&this.blockedClients.has(n.owner)?null:n}getPendingDataForNetworkId(e){return this.getPendingData(e,this.frozenUpdates.get(e))}flushPendingUpdates(){for(const[e,t]of this.frozenUpdates){let n=this.getPendingData(e,t);if(!n)continue;const r="um"===t.dataType?"u":t.dataType;this.onOccupantMessage(null,r,n,t.source)}this.frozenUpdates.clear()}storeMessage(e){if("um"===e.dataType)for(let t=0,n=e.data.d.length;t<n;t++)this.storeSingleMessage(e,t);else this.storeSingleMessage(e)}storeSingleMessage(e,t){const n=void 0!==t?e.data.d[t]:e.data,r=e.dataType,s=(e.source,n.networkId);if(this.frozenUpdates.has(s)){const t=this.frozenUpdates.get(s),i="um"===t.dataType?this.dataForUpdateMultiMessage(s,t):t.data,a=n.lastOwnerTime<i.lastOwnerTime,o=n.lastOwnerTime===i.lastOwnerTime;if(a||o&&i.owner>n.owner)return;if("r"===r){const t=i&&i.isFirstSync;t?this.frozenUpdates.delete(s):this.frozenUpdates.set(s,e)}else i.components&&n.components&&Object.assign(i.components,n.components)}else this.frozenUpdates.set(s,e)}onDataChannelMessage(e,t){this.onData(JSON.parse(e.data),t)}onData(e,t){a.enabled&&a(`DC in: ${e}`),e.dataType&&(e.source=t,this.frozen?this.storeMessage(e):this.onOccupantMessage(null,e.dataType,e.data,e.source))}shouldStartConnectionTo(e){return!0}startStreamConnection(e){}closeStreamConnection(e){}getConnectStatus(e){return this.occupants[e]?NAF.adapters.IS_CONNECTED:NAF.adapters.NOT_CONNECTED}updateTimeOffset(){var e=this;return r(function*(){if(e.isDisconnected())return;const t=Date.now(),n=yield fetch(document.location.href,{method:"HEAD",cache:"no-cache"}),r=new Date(n.headers.get("Date")).getTime()+500,s=Date.now(),i=r+(s-t)/2,o=i-s;e.serverTimeRequests++,e.serverTimeRequests<=10?e.timeOffsets.push(o):e.timeOffsets[e.serverTimeRequests%10]=o,e.avgTimeOffset=e.timeOffsets.reduce(function(e,t){return e+t},0)/e.timeOffsets.length,e.serverTimeRequests>10?(a(`new server time offset: ${e.avgTimeOffset}ms`),setTimeout(function(){return e.updateTimeOffset()},3e5)):e.updateTimeOffset()})()}getServerTime(){return Date.now()+this.avgTimeOffset}getMediaStream(e,t="audio"){if(this.mediaStreams[e])return a(`Already had ${t} for ${e}`),Promise.resolve(this.mediaStreams[e][t]);if(a(`Waiting on ${t} for ${e}`),!this.pendingMediaRequests.has(e)){this.pendingMediaRequests.set(e,{});const t=new Promise((t,n)=>{this.pendingMediaRequests.get(e).audio={resolve:t,reject:n}}),n=new Promise((t,n)=>{this.pendingMediaRequests.get(e).video={resolve:t,reject:n}});this.pendingMediaRequests.get(e).audio.promise=t,this.pendingMediaRequests.get(e).video.promise=n}return this.pendingMediaRequests.get(e)[t].promise}setMediaStream(e,t){const n=new MediaStream;t.getAudioTracks().forEach(e=>n.addTrack(e));const r=new MediaStream;t.getVideoTracks().forEach(e=>r.addTrack(e)),this.mediaStreams[e]={audio:n,video:r},this.pendingMediaRequests.has(e)&&(this.pendingMediaRequests.get(e).audio.resolve(n),this.pendingMediaRequests.get(e).video.resolve(r))}setLocalMediaStream(e){var t=this;return r(function*(){if(t.publisher&&t.publisher.conn){const n=t.publisher.conn.getSenders(),r=[],s=e.getTracks();for(let i=0;i<s.length;i++){const a=s[i],o=n.find(function(e){return null!=e.track&&e.track.kind==a.kind});null!=o?(o.replaceTrack?(yield o.replaceTrack(a),"video"===a.kind&&a.enabled&&navigator.userAgent.toLowerCase().indexOf("firefox")>-1&&(a.enabled=!1,setTimeout(function(){return a.enabled=!0},1e3))):(e.removeTrack(o.track),e.addTrack(a)),r.push(o)):r.push(t.publisher.conn.addTrack(a,e))}n.forEach(function(e){r.includes(e)||(e.track.enabled=!1)})}t.localMediaStream=e,t.setMediaStream(t.clientId,e)})()}enableMicrophone(e){this.publisher&&this.publisher.conn&&this.publisher.conn.getSenders().forEach(t=>{"audio"==t.track.kind&&(t.track.enabled=e)})}sendData(e,t,n){if(this.publisher)switch(this.unreliableTransport){case"websocket":this.publisher.handle.sendMessage({kind:"data",body:JSON.stringify({dataType:t,data:n}),whom:e});break;case"datachannel":this.publisher.unreliableChannel.send(JSON.stringify({clientId:e,dataType:t,data:n}));break;default:this.unreliableTransport(e,t,n)}else console.warn("sendData called without a publisher")}sendDataGuaranteed(e,t,n){if(this.publisher)switch(this.reliableTransport){case"websocket":this.publisher.handle.sendMessage({kind:"data",body:JSON.stringify({dataType:t,data:n}),whom:e});break;case"datachannel":this.publisher.reliableChannel.send(JSON.stringify({clientId:e,dataType:t,data:n}));break;default:this.reliableTransport(e,t,n)}else console.warn("sendDataGuaranteed called without a publisher")}broadcastData(e,t){if(this.publisher)switch(this.unreliableTransport){case"websocket":this.publisher.handle.sendMessage({kind:"data",body:JSON.stringify({dataType:e,data:t})});break;case"datachannel":this.publisher.unreliableChannel.send(JSON.stringify({dataType:e,data:t}));break;default:this.unreliableTransport(void 0,e,t)}else console.warn("broadcastData called without a publisher")}broadcastDataGuaranteed(e,t){if(this.publisher)switch(this.reliableTransport){case"websocket":this.publisher.handle.sendMessage({kind:"data",body:JSON.stringify({dataType:e,data:t})});break;case"datachannel":this.publisher.reliableChannel.send(JSON.stringify({dataType:e,data:t}));break;default:this.reliableTransport(void 0,e,t)}else console.warn("broadcastDataGuaranteed called without a publisher")}kick(e,t){return this.publisher.handle.sendMessage({kind:"kick",room_id:this.room,user_id:e,token:t}).then(()=>{document.body.dispatchEvent(new CustomEvent("kicked",{detail:{clientId:e}}))})}block(e){return this.publisher.handle.sendMessage({kind:"block",whom:e}).then(()=>{this.blockedClients.set(e,!0),document.body.dispatchEvent(new CustomEvent("blocked",{detail:{clientId:e}}))})}unblock(e){return this.publisher.handle.sendMessage({kind:"unblock",whom:e}).then(()=>{this.blockedClients.delete(e),document.body.dispatchEvent(new CustomEvent("unblocked",{detail:{clientId:e}}))})}}NAF.adapters.register("janus",g),e.exports=g}]);
{
"name": "naf-janus-adapter",
"version": "3.0.15",
"version": "3.0.16",
"description": "networked-aframe Janus network adapter",

@@ -34,4 +34,4 @@ "main": "src/index.js",

"lint": "eslint 'src/**/*.js'",
"release": "npm run build && git commit --allow-empty -am 'update builds' && git push && np && git push"
"release": "npm run build && git commit --allow-empty -am 'update builds' && git push && np --any-branch && git push"
}
}

@@ -8,2 +8,4 @@ var mj = require("minijanus");

const SUBSCRIBE_TIMEOUT_MS = 15000;
function debounce(fn) {

@@ -232,8 +234,11 @@ var curr = Promise.resolve();

const addOccupantPromises = [];
for (let i = 0; i < this.publisher.initialOccupants.length; i++) {
const occupantId = this.publisher.initialOccupants[i];
if (occupantId === this.clientId) continue; // Happens during non-graceful reconnects due to zombie sessions
addOccupantPromises.push(this.addOccupant(occupantId));
}
await this.addOccupant(occupantId);
}
await Promise.all(addOccupantPromises);
}

@@ -554,2 +559,25 @@

let webrtcFailed = false;
const webrtcup = new Promise(resolve => {
const leftInterval = setInterval(() => {
if (this.leftOccupants.has(occupantId)) {
clearInterval(leftInterval);
resolve();
}
}, 1000);
const timeout = setTimeout(() => {
clearInterval(leftInterval);
webrtcFailed = true;
resolve();
}, SUBSCRIBE_TIMEOUT_MS);
handle.on("webrtcup", () => {
clearTimeout(timeout);
clearInterval(leftInterval);
resolve();
});
});
// Send join message to janus. Don't listen for join/leave messages. Subscribe to the occupant's media.

@@ -566,17 +594,4 @@ // Janus should send us an offer for this occupant's media in response to this.

debug(occupantId + ": sub waiting for webrtcup");
await webrtcup;
await new Promise(resolve => {
const interval = setInterval(() => {
if (this.leftOccupants.has(occupantId)) {
clearInterval(interval);
resolve();
}
}, 1000);
handle.on("webrtcup", () => {
clearInterval(interval);
resolve();
});
});
if (this.leftOccupants.has(occupantId)) {

@@ -588,2 +603,8 @@ conn.close();

if (webrtcFailed) {
conn.close();
console.warn(occupantId + ": webrtc up timed out");
return null;
}
if (isSafari && !this._iOSHackDelayedInitialPeer) {

@@ -590,0 +611,0 @@ // HACK: the first peer on Safari during page load can fail to work if we don't

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc