@snapcall/stream-ui 1.32.0-beta.1 → 1.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,44 +0,0 @@
1
- let e;var t,r,i,s,a,n,o=require("process"),c=require("events");require("./timer.ed477f04.js");var d=require("buffer"),l=globalThis;function p(e,t,r,i){Object.defineProperty(e,t,{get:r,set:i,enumerable:!0,configurable:!0})}var h={},u={},m=l.parcelRequire94c2;null==m&&((m=function(e){if(e in h)return h[e].exports;if(e in u){var t=u[e];delete u[e];var r={id:e,exports:{}};return h[e]=r,t.call(r.exports,r,r.exports),r.exports}var i=Error("Cannot find module '"+e+"'");throw i.code="MODULE_NOT_FOUND",i}).register=function(e,t){u[e]=t},l.parcelRequire94c2=m);var f=m.register;f("1JjHr",function(e,t){let r;t.formatArgs=function(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;let r="color: "+this.color;t.splice(1,0,r,"color: inherit");let i=0,s=0;t[0].replace(/%[a-zA-Z%]/g,e=>{"%%"!==e&&(i++,"%c"===e&&(s=i))}),t.splice(s,0,r)},t.save=function(e){try{e?t.storage.setItem("debug",e):t.storage.removeItem("debug")}catch(e){}},t.load=function(){let e;try{e=t.storage.getItem("debug")}catch(e){}return!e&&void 0!==o&&"env"in o&&(e=void 0),e},t.useColors=function(){return"undefined"!=typeof window&&!!window.process&&("renderer"===window.process.type||!!window.process.__nwjs)||!("undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))&&("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=function(){try{return localStorage}catch(e){}}(),t.destroy=(r=!1,()=>{r||(r=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}),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.log=console.debug||console.log||(()=>{}),e.exports=m("9ovFa")(t);let{formatters:i}=e.exports;i.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}}),f("9ovFa",function(e,t){e.exports=function(e){function t(e){let i,s,a;let n=null;function o(...e){if(!o.enabled)return;let r=Number(new Date),s=r-(i||r);o.diff=s,o.prev=i,o.curr=r,i=r,e[0]=t.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");let a=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,(r,i)=>{if("%%"===r)return"%";a++;let s=t.formatters[i];if("function"==typeof s){let t=e[a];r=s.call(o,t),e.splice(a,1),a--}return r}),t.formatArgs.call(o,e),(o.log||t.log).apply(o,e)}return o.namespace=e,o.useColors=t.useColors(),o.color=t.selectColor(e),o.extend=r,o.destroy=t.destroy,Object.defineProperty(o,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==n?n:(s!==t.namespaces&&(s=t.namespaces,a=t.enabled(e)),a),set:e=>{n=e}}),"function"==typeof t.init&&t.init(o),o}function r(e,r){let i=t(this.namespace+(void 0===r?":":r)+e);return i.log=this.log,i}function i(e){return e.toString().substring(2,e.toString().length-2).replace(/\.\*\?$/,"*")}return t.debug=t,t.default=t,t.coerce=function(e){return e instanceof Error?e.stack||e.message:e},t.disable=function(){let e=[...t.names.map(i),...t.skips.map(i).map(e=>"-"+e)].join(",");return t.enable(""),e},t.enable=function(e){let r;t.save(e),t.namespaces=e,t.names=[],t.skips=[];let i=("string"==typeof e?e:"").split(/[\s,]+/),s=i.length;for(r=0;r<s;r++)i[r]&&("-"===(e=i[r].replace(/\*/g,".*?"))[0]?t.skips.push(RegExp("^"+e.slice(1)+"$")):t.names.push(RegExp("^"+e+"$")))},t.enabled=function(e){let r,i;if("*"===e[e.length-1])return!0;for(r=0,i=t.skips.length;r<i;r++)if(t.skips[r].test(e))return!1;for(r=0,i=t.names.length;r<i;r++)if(t.names[r].test(e))return!0;return!1},t.humanize=m("aetWT"),t.destroy=function(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")},Object.keys(e).forEach(r=>{t[r]=e[r]}),t.names=[],t.skips=[],t.formatters={},t.selectColor=function(e){let r=0;for(let t=0;t<e.length;t++)r=(r<<5)-r+e.charCodeAt(t)|0;return t.colors[Math.abs(r)%t.colors.length]},t.enable(t.load()),t}}),f("aetWT",function(e,t){function r(e,t,r,i){return Math.round(e/r)+" "+i+(t>=1.5*r?"s":"")}e.exports=function(e,t){t=t||{};var i,s,a=typeof e;if("string"===a&&e.length>0)return function(e){if(!((e=String(e)).length>100)){var t=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(t){var r=parseFloat(t[1]);switch((t[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*r;case"weeks":case"week":case"w":return 6048e5*r;case"days":case"day":case"d":return 864e5*r;case"hours":case"hour":case"hrs":case"hr":case"h":return 36e5*r;case"minutes":case"minute":case"mins":case"min":case"m":return 6e4*r;case"seconds":case"second":case"secs":case"sec":case"s":return 1e3*r;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}(e);if("number"===a&&isFinite(e))return t.long?(i=Math.abs(e))>=864e5?r(e,i,864e5,"day"):i>=36e5?r(e,i,36e5,"hour"):i>=6e4?r(e,i,6e4,"minute"):i>=1e3?r(e,i,1e3,"second"):e+" ms":(s=Math.abs(e))>=864e5?Math.round(e/864e5)+"d":s>=36e5?Math.round(e/36e5)+"h":s>=6e4?Math.round(e/6e4)+"m":s>=1e3?Math.round(e/1e3)+"s":e+"ms";throw Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}}),f("dFHla",function(e,t){var r=function(){if("object"==typeof self&&self)return self;if("object"==typeof window&&window)return window;throw Error("Unable to resolve global `this`")};e.exports=function(){if(this)return this;if("object"==typeof globalThis&&globalThis)return globalThis;try{Object.defineProperty(Object.prototype,"__global__",{get:function(){return this},configurable:!0})}catch(e){return r()}try{if(!__global__)return r();return __global__}finally{delete Object.prototype.__global__}}()}),f("bAhvK",function(e,t){e.exports=JSON.parse('{"name":"websocket","description":"Websocket Client & Server Library implementing the WebSocket protocol as specified in RFC 6455.","keywords":["websocket","websockets","socket","networking","comet","push","RFC-6455","realtime","server","client"],"author":"Brian McKelvey <theturtle32@gmail.com> (https://github.com/theturtle32)","contributors":["Iñaki Baz Castillo <ibc@aliax.net> (http://dev.sipdoc.net)"],"version":"1.0.34","repository":{"type":"git","url":"https://github.com/theturtle32/WebSocket-Node.git"},"homepage":"https://github.com/theturtle32/WebSocket-Node","engines":{"node":">=4.0.0"},"dependencies":{"bufferutil":"^4.0.1","debug":"^2.2.0","es5-ext":"^0.10.50","typedarray-to-buffer":"^3.1.5","utf-8-validate":"^5.0.2","yaeti":"^0.0.6"},"devDependencies":{"buffer-equal":"^1.0.0","gulp":"^4.0.2","gulp-jshint":"^2.0.4","jshint-stylish":"^2.2.1","jshint":"^2.0.0","tape":"^4.9.1"},"config":{"verbose":false},"scripts":{"test":"tape test/unit/*.js","gulp":"gulp"},"main":"index","directories":{"lib":"./lib"},"browser":"lib/browser.js","license":"Apache-2.0"}')}),f("aHEzW",function(e,t){var r=m("jvMQf");t.operation=function(e){return new r(t.timeouts(e),{forever:e&&e.forever,unref:e&&e.unref,maxRetryTime:e&&e.maxRetryTime})},t.timeouts=function(e){if(e instanceof Array)return[].concat(e);var t={retries:10,factor:2,minTimeout:1e3,maxTimeout:1/0,randomize:!1};for(var r in e)t[r]=e[r];if(t.minTimeout>t.maxTimeout)throw Error("minTimeout is greater than maxTimeout");for(var i=[],s=0;s<t.retries;s++)i.push(this.createTimeout(s,t));return e&&e.forever&&!i.length&&i.push(this.createTimeout(s,t)),i.sort(function(e,t){return e-t}),i},t.createTimeout=function(e,t){return Math.min(Math.round((t.randomize?Math.random()+1:1)*t.minTimeout*Math.pow(t.factor,e)),t.maxTimeout)},t.wrap=function(e,r,i){if(r instanceof Array&&(i=r,r=null),!i)for(var s in i=[],e)"function"==typeof e[s]&&i.push(s);for(var a=0;a<i.length;a++){var n=i[a],o=e[n];e[n]=(function(i){var s=t.operation(r),a=Array.prototype.slice.call(arguments,1),n=a.pop();a.push(function(e){s.retry(e)||(e&&(arguments[0]=s.mainError()),n.apply(this,arguments))}),s.attempt(function(){i.apply(e,a)})}).bind(e,o),e[n].options=r}}}),f("jvMQf",function(e,t){function r(e,t){"boolean"==typeof t&&(t={forever:t}),this._originalTimeouts=JSON.parse(JSON.stringify(e)),this._timeouts=e,this._options=t||{},this._maxRetryTime=t&&t.maxRetryTime||1/0,this._fn=null,this._errors=[],this._attempts=1,this._operationTimeout=null,this._operationTimeoutCb=null,this._timeout=null,this._operationStart=null,this._options.forever&&(this._cachedTimeouts=this._timeouts.slice(0))}e.exports=r,r.prototype.reset=function(){this._attempts=1,this._timeouts=this._originalTimeouts},r.prototype.stop=function(){this._timeout&&clearTimeout(this._timeout),this._timeouts=[],this._cachedTimeouts=null},r.prototype.retry=function(e){if(this._timeout&&clearTimeout(this._timeout),!e)return!1;var t=new Date().getTime();if(e&&t-this._operationStart>=this._maxRetryTime)return this._errors.unshift(Error("RetryOperation timeout occurred")),!1;this._errors.push(e);var r=this._timeouts.shift();if(void 0===r){if(!this._cachedTimeouts)return!1;this._errors.splice(this._errors.length-1,this._errors.length),this._timeouts=this._cachedTimeouts.slice(0),r=this._timeouts.shift()}var i=this,s=setTimeout(function(){i._attempts++,i._operationTimeoutCb&&(i._timeout=setTimeout(function(){i._operationTimeoutCb(i._attempts)},i._operationTimeout),i._options.unref&&i._timeout.unref()),i._fn(i._attempts)},r);return this._options.unref&&s.unref(),!0},r.prototype.attempt=function(e,t){this._fn=e,t&&(t.timeout&&(this._operationTimeout=t.timeout),t.cb&&(this._operationTimeoutCb=t.cb));var r=this;this._operationTimeoutCb&&(this._timeout=setTimeout(function(){r._operationTimeoutCb()},r._operationTimeout)),this._operationStart=new Date().getTime(),this._fn(this._attempts)},r.prototype.try=function(e){console.log("Using RetryOperation.try() is deprecated"),this.attempt(e)},r.prototype.start=function(e){console.log("Using RetryOperation.start() is deprecated"),this.attempt(e)},r.prototype.start=r.prototype.try,r.prototype.errors=function(){return this._errors},r.prototype.attempts=function(){return this._attempts},r.prototype.mainError=function(){if(0===this._errors.length)return null;for(var e={},t=null,r=0,i=0;i<this._errors.length;i++){var s=this._errors[i],a=s.message,n=(e[a]||0)+1;e[a]=n,n>=r&&(t=s,r=n)}return t}}),f("iSZvy",function(e,t){Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.Producer=void 0;var r=m("7Wufc"),i=m("jvUzX"),s=m("6yq6Z");let a=new r.Logger("Producer");class n extends i.EnhancedEventEmitter{constructor({id:e,localId:t,rtpSender:r,track:s,rtpParameters:n,stopTracks:o,disableTrackOnPause:c,zeroRtpOnPause:d,appData:l}){super(),this._closed=!1,this._observer=new i.EnhancedEventEmitter,a.debug("constructor()"),this._id=e,this._localId=t,this._rtpSender=r,this._track=s,this._kind=s.kind,this._rtpParameters=n,this._paused=!!c&&!s.enabled,this._maxSpatialLayer=void 0,this._stopTracks=o,this._disableTrackOnPause=c,this._zeroRtpOnPause=d,this._appData=l||{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get closed(){return this._closed}get kind(){return this._kind}get rtpSender(){return this._rtpSender}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get maxSpatialLayer(){return this._maxSpatialLayer}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(a.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"))}transportClosed(){this._closed||(a.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new s.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(a.debug("pause()"),this._closed){a.error("pause() | Producer closed");return}this._paused=!0,this._track&&this._disableTrackOnPause&&(this._track.enabled=!1),this._zeroRtpOnPause&&new Promise((e,t)=>{this.safeEmit("@pause",e,t)}).catch(()=>{}),this._observer.safeEmit("pause")}resume(){if(a.debug("resume()"),this._closed){a.error("resume() | Producer closed");return}this._paused=!1,this._track&&this._disableTrackOnPause&&(this._track.enabled=!0),this._zeroRtpOnPause&&new Promise((e,t)=>{this.safeEmit("@resume",e,t)}).catch(()=>{}),this._observer.safeEmit("resume")}async replaceTrack({track:e}){if(a.debug("replaceTrack() [track:%o]",e),this._closed){if(e&&this._stopTracks)try{e.stop()}catch(e){}throw new s.InvalidStateError("closed")}if(e&&"ended"===e.readyState)throw new s.InvalidStateError("track ended");if(e===this._track){a.debug("replaceTrack() | same track, ignored");return}await new Promise((t,r)=>{this.safeEmit("@replacetrack",e,t,r)}),this.destroyTrack(),this._track=e,this._track&&this._disableTrackOnPause&&(this._paused?this._paused&&(this._track.enabled=!1):this._track.enabled=!0),this.handleTrack()}async setMaxSpatialLayer(e){if(this._closed)throw new s.InvalidStateError("closed");if("video"!==this._kind)throw new s.UnsupportedError("not a video Producer");if("number"!=typeof e)throw TypeError("invalid spatialLayer");e!==this._maxSpatialLayer&&(await new Promise((t,r)=>{this.safeEmit("@setmaxspatiallayer",e,t,r)}).catch(()=>{}),this._maxSpatialLayer=e)}async setRtpEncodingParameters(e){if(this._closed)throw new s.InvalidStateError("closed");if("object"!=typeof e)throw TypeError("invalid params");await new Promise((t,r)=>{this.safeEmit("@setrtpencodingparameters",e,t,r)})}onTrackEnded(){a.debug('track "ended" event'),this.safeEmit("trackended"),this._observer.safeEmit("trackended")}handleTrack(){this._track&&this._track.addEventListener("ended",this.onTrackEnded)}destroyTrack(){if(this._track)try{this._track.removeEventListener("ended",this.onTrackEnded),this._stopTracks&&this._track.stop()}catch(e){}}}e.exports.Producer=n}),f("7Wufc",function(e,t){var r=e.exports&&e.exports.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.Logger=void 0;let i=r(m("1JjHr")),s="mediasoup-client";e.exports.Logger=class{constructor(e){e?(this._debug=(0,i.default)(`${s}:${e}`),this._warn=(0,i.default)(`${s}:WARN:${e}`),this._error=(0,i.default)(`${s}:ERROR:${e}`)):(this._debug=(0,i.default)(s),this._warn=(0,i.default)(`${s}:WARN`),this._error=(0,i.default)(`${s}:ERROR`)),this._debug.log=console.info.bind(console),this._warn.log=console.warn.bind(console),this._error.log=console.error.bind(console)}get debug(){return this._debug}get warn(){return this._warn}get error(){return this._error}}}),f("jvUzX",function(e,t){Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.EnhancedEventEmitter=void 0;let r=new(m("7Wufc")).Logger("EnhancedEventEmitter");class i extends c.EventEmitter{constructor(){super(),this.setMaxListeners(1/0)}emit(e,...t){return super.emit(e,...t)}safeEmit(e,...t){let i=super.listenerCount(e);try{return super.emit(e,...t)}catch(t){return r.error("safeEmit() | event listener threw an error [eventName:%s]:%o",e,t),!!i}}on(e,t){return super.on(e,t),this}off(e,t){return super.off(e,t),this}addListener(e,t){return super.on(e,t),this}prependListener(e,t){return super.prependListener(e,t),this}once(e,t){return super.once(e,t),this}prependOnceListener(e,t){return super.prependOnceListener(e,t),this}removeListener(e,t){return super.off(e,t),this}removeAllListeners(e){return super.removeAllListeners(e),this}listenerCount(e){return super.listenerCount(e)}listeners(e){return super.listeners(e)}rawListeners(e){return super.rawListeners(e)}}e.exports.EnhancedEventEmitter=i}),f("6yq6Z",function(e,t){Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.InvalidStateError=e.exports.UnsupportedError=void 0;class r extends Error{constructor(e){super(e),this.name="UnsupportedError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,r):this.stack=Error(e).stack}}e.exports.UnsupportedError=r;class i extends Error{constructor(e){super(e),this.name="InvalidStateError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,i):this.stack=Error(e).stack}}e.exports.InvalidStateError=i}),f("fI7XH",function(e,t){var r=e.exports&&e.exports.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,s)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),i=e.exports&&e.exports.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=e.exports&&e.exports.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s in e)"default"!==s&&Object.prototype.hasOwnProperty.call(e,s)&&r(t,e,s);return i(t,e),t};Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.Device=e.exports.detectDevice=void 0;var a=m("gFoUl"),n=m("7Wufc"),o=m("jvUzX"),c=m("6yq6Z");let d=s(m("2fqxq")),l=s(m("kIl0y"));var p=m("baDpS"),h=m("9Mg8R"),u=m("6Pcmp"),f=m("031Hy"),g=m("axf12"),v=m("cVXKr"),_=m("cjo49"),b=m("ajDWi"),w=m("otdku"),y=m("diBVd"),S=m("8HCMN"),R=m("ey9Hv"),P=m("apeMR");let T=new n.Logger("Device");function C(){if("object"==typeof navigator&&"ReactNative"===navigator.product){if(T.debug("detectDevice() | React-Native detected"),"undefined"==typeof RTCPeerConnection){T.warn("detectDevice() | unsupported react-native-webrtc without RTCPeerConnection, forgot to call registerGlobals()?");return}return"undefined"!=typeof RTCRtpTransceiver?(T.debug("detectDevice() | ReactNative UnifiedPlan handler chosen"),"ReactNativeUnifiedPlan"):(T.debug("detectDevice() | ReactNative PlanB handler chosen"),"ReactNative")}if("object"==typeof navigator&&"string"==typeof navigator.userAgent){let e=navigator.userAgent,t=new a.UAParser(e);T.debug("detectDevice() | browser detected [ua:%s, parsed:%o]",e,t.getResult());let r=t.getBrowser(),i=r.name?.toLowerCase(),s=parseInt(r.major??"0"),n=t.getEngine(),o=n.name?.toLowerCase(),c=t.getOS(),d=c.name?.toLowerCase(),l=parseFloat(c.version??"0"),p=t.getDevice(),h=p.model?.toLowerCase(),u="ios"===d||"ipad"===h,m=i&&["chrome","chromium","mobile chrome","chrome webview","chrome headless"].includes(i),f=i&&["firefox","mobile firefox","mobile focus"].includes(i),g=i&&["safari","mobile safari"].includes(i),v=i&&["edge"].includes(i);if((m||v)&&!u&&s>=111)return"Chrome111";if(m&&!u&&s>=74||v&&!u&&s>=88)return"Chrome74";if(m&&!u&&s>=70)return"Chrome70";if(m&&!u&&s>=67)return"Chrome67";else if(m&&!u&&s>=55)return"Chrome55";else if(f&&!u&&s>=120)return"Firefox120";else if(f&&!u&&s>=60)return"Firefox60";else if(f&&u&&l>=14.3)return"Safari12";else if(g&&s>=12&&"undefined"!=typeof RTCRtpTransceiver&&RTCRtpTransceiver.prototype.hasOwnProperty("currentDirection"))return"Safari12";else if(g&&s>=11)return"Safari11";else if(v&&!u&&s>=11&&s<=18)return"Edge11";else if("webkit"===o&&u&&"undefined"!=typeof RTCRtpTransceiver&&RTCRtpTransceiver.prototype.hasOwnProperty("currentDirection"))return"Safari12";else if("blink"===o){let t=e.match(/(?:(?:Chrome|Chromium))[ /](\w+)/i);if(!t)return"Chrome111";{let e=Number(t[1]);return e>=111?"Chrome111":e>=74?"Chrome74":e>=70?"Chrome70":e>=67?"Chrome67":"Chrome55"}}else{T.warn("detectDevice() | browser not supported [name:%s, version:%s]",i,s);return}}T.warn("detectDevice() | unknown device")}e.exports.detectDevice=C,e.exports.Device=class{constructor({handlerName:e,handlerFactory:t,Handler:r}={}){if(this._loaded=!1,this._observer=new o.EnhancedEventEmitter,T.debug("constructor()"),r){if(T.warn("constructor() | Handler option is DEPRECATED, use handlerName or handlerFactory instead"),"string"==typeof r)e=r;else throw TypeError("non string Handler option no longer supported, use handlerFactory instead")}if(e&&t)throw TypeError("just one of handlerName or handlerInterface can be given");if(t)this._handlerFactory=t;else{if(e)T.debug("constructor() | handler given: %s",e);else if(e=C())T.debug("constructor() | detected handler: %s",e);else throw new c.UnsupportedError("device not supported");switch(e){case"Chrome111":this._handlerFactory=h.Chrome111.createFactory();break;case"Chrome74":this._handlerFactory=u.Chrome74.createFactory();break;case"Chrome70":this._handlerFactory=f.Chrome70.createFactory();break;case"Chrome67":this._handlerFactory=g.Chrome67.createFactory();break;case"Chrome55":this._handlerFactory=v.Chrome55.createFactory();break;case"Firefox120":this._handlerFactory=_.Firefox120.createFactory();break;case"Firefox60":this._handlerFactory=b.Firefox60.createFactory();break;case"Safari12":this._handlerFactory=w.Safari12.createFactory();break;case"Safari11":this._handlerFactory=y.Safari11.createFactory();break;case"Edge11":this._handlerFactory=S.Edge11.createFactory();break;case"ReactNativeUnifiedPlan":this._handlerFactory=R.ReactNativeUnifiedPlan.createFactory();break;case"ReactNative":this._handlerFactory=P.ReactNative.createFactory();break;default:throw TypeError(`unknown handlerName "${e}"`)}}let i=this._handlerFactory();this._handlerName=i.name,i.close(),this._extendedRtpCapabilities=void 0,this._recvRtpCapabilities=void 0,this._canProduceByKind={audio:!1,video:!1},this._sctpCapabilities=void 0}get handlerName(){return this._handlerName}get loaded(){return this._loaded}get rtpCapabilities(){if(!this._loaded)throw new c.InvalidStateError("not loaded");return this._recvRtpCapabilities}get sctpCapabilities(){if(!this._loaded)throw new c.InvalidStateError("not loaded");return this._sctpCapabilities}get observer(){return this._observer}async load({routerRtpCapabilities:e}){let t;T.debug("load() [routerRtpCapabilities:%o]",e);try{if(this._loaded)throw new c.InvalidStateError("already loaded");let r=d.clone(e);l.validateRtpCapabilities(r),t=this._handlerFactory();let i=await t.getNativeRtpCapabilities();T.debug("load() | got native RTP capabilities:%o",i);let s=d.clone(i);l.validateRtpCapabilities(s),this._extendedRtpCapabilities=l.getExtendedRtpCapabilities(s,r),T.debug("load() | got extended RTP capabilities:%o",this._extendedRtpCapabilities),this._canProduceByKind.audio=l.canSend("audio",this._extendedRtpCapabilities),this._canProduceByKind.video=l.canSend("video",this._extendedRtpCapabilities),this._recvRtpCapabilities=l.getRecvRtpCapabilities(this._extendedRtpCapabilities),l.validateRtpCapabilities(this._recvRtpCapabilities),T.debug("load() | got receiving RTP capabilities:%o",this._recvRtpCapabilities),this._sctpCapabilities=await t.getNativeSctpCapabilities(),T.debug("load() | got native SCTP capabilities:%o",this._sctpCapabilities),l.validateSctpCapabilities(this._sctpCapabilities),T.debug("load() succeeded"),this._loaded=!0,t.close()}catch(e){throw t&&t.close(),e}}canProduce(e){if(this._loaded){if("audio"!==e&&"video"!==e)throw TypeError(`invalid kind "${e}"`)}else throw new c.InvalidStateError("not loaded");return this._canProduceByKind[e]}createSendTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:n,additionalSettings:o,proprietaryConstraints:c,appData:d}){return T.debug("createSendTransport()"),this.createTransport({direction:"send",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:n,additionalSettings:o,proprietaryConstraints:c,appData:d})}createRecvTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:n,additionalSettings:o,proprietaryConstraints:c,appData:d}){return T.debug("createRecvTransport()"),this.createTransport({direction:"recv",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:n,additionalSettings:o,proprietaryConstraints:c,appData:d})}createTransport({direction:e,id:t,iceParameters:r,iceCandidates:i,dtlsParameters:s,sctpParameters:a,iceServers:n,iceTransportPolicy:o,additionalSettings:d,proprietaryConstraints:l,appData:h}){if(this._loaded){if("string"!=typeof t)throw TypeError("missing id");if("object"!=typeof r)throw TypeError("missing iceParameters");if(Array.isArray(i)){if("object"!=typeof s)throw TypeError("missing dtlsParameters");if(a&&"object"!=typeof a)throw TypeError("wrong sctpParameters");if(h&&"object"!=typeof h)throw TypeError("if given, appData must be an object")}else throw TypeError("missing iceCandidates")}else throw new c.InvalidStateError("not loaded");let u=new p.Transport({direction:e,id:t,iceParameters:r,iceCandidates:i,dtlsParameters:s,sctpParameters:a,iceServers:n,iceTransportPolicy:o,additionalSettings:d,proprietaryConstraints:l,appData:h,handlerFactory:this._handlerFactory,extendedRtpCapabilities:this._extendedRtpCapabilities,canProduceByKind:this._canProduceByKind});return this._observer.safeEmit("newtransport",u),u}}}),f("gFoUl",function(e,t){!function(r,i){var s="function",a="undefined",n="object",o="string",c="major",d="model",l="name",p="type",h="vendor",u="version",m="architecture",f="console",g="mobile",v="tablet",_="smarttv",b="wearable",w="embedded",y="Amazon",S="Apple",R="ASUS",P="BlackBerry",T="Browser",C="Chrome",k="Firefox",x="Google",D="Huawei",M="Microsoft",E="Motorola",I="Opera",O="Samsung",L="Sharp",j="Sony",A="Xiaomi",N="Zebra",F="Facebook",B="Chromium OS",q="Mac OS",$=function(e,t){var r={};for(var i in e)t[i]&&t[i].length%2==0?r[i]=t[i].concat(e[i]):r[i]=e[i];return r},U=function(e){for(var t={},r=0;r<e.length;r++)t[e[r].toUpperCase()]=e[r];return t},V=function(e,t){return typeof e===o&&-1!==z(t).indexOf(z(e))},z=function(e){return e.toLowerCase()},W=function(e,t){if(typeof e===o)return e=e.replace(/^\s\s*/,""),typeof t===a?e:e.substring(0,500)},G=function(e,t){for(var r,a,o,c,d,l,p=0;p<t.length&&!d;){var h=t[p],u=t[p+1];for(r=a=0;r<h.length&&!d&&h[r];)if(d=h[r++].exec(e))for(o=0;o<u.length;o++)l=d[++a],typeof(c=u[o])===n&&c.length>0?2===c.length?typeof c[1]==s?this[c[0]]=c[1].call(this,l):this[c[0]]=c[1]:3===c.length?typeof c[1]!==s||c[1].exec&&c[1].test?this[c[0]]=l?l.replace(c[1],c[2]):void 0:this[c[0]]=l?c[1].call(this,l,c[2]):void 0:4===c.length&&(this[c[0]]=l?c[3].call(this,l.replace(c[1],c[2])):void 0):this[c]=l||i;p+=2}},H=function(e,t){for(var r in t)if(typeof t[r]===n&&t[r].length>0){for(var s=0;s<t[r].length;s++)if(V(t[r][s],e))return"?"===r?i:r}else if(V(t[r],e))return"?"===r?i:r;return e},K={ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2e3:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2","8.1":"NT 6.3",10:["NT 6.4","NT 10.0"],RT:"ARM"},J={browser:[[/\b(?:crmo|crios)\/([\w\.]+)/i],[u,[l,"Chrome"]],[/edg(?:e|ios|a)?\/([\w\.]+)/i],[u,[l,"Edge"]],[/(opera mini)\/([-\w\.]+)/i,/(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,/(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i],[l,u],[/opios[\/ ]+([\w\.]+)/i],[u,[l,I+" Mini"]],[/\bopr\/([\w\.]+)/i],[u,[l,I]],[/\bb[ai]*d(?:uhd|[ub]*[aekoprswx]{5,6})[\/ ]?([\w\.]+)/i],[u,[l,"Baidu"]],[/(kindle)\/([\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i,/(avant|iemobile|slim)\s?(?:browser)?[\/ ]?([\w\.]*)/i,/(?:ms|\()(ie) ([\w\.]+)/i,/(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\/([-\w\.]+)/i,/(heytap|ovi)browser\/([\d\.]+)/i,/(weibo)__([\d\.]+)/i],[l,u],[/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i],[u,[l,"UC"+T]],[/microm.+\bqbcore\/([\w\.]+)/i,/\bqbcore\/([\w\.]+).+microm/i,/micromessenger\/([\w\.]+)/i],[u,[l,"WeChat"]],[/konqueror\/([\w\.]+)/i],[u,[l,"Konqueror"]],[/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i],[u,[l,"IE"]],[/ya(?:search)?browser\/([\w\.]+)/i],[u,[l,"Yandex"]],[/slbrowser\/([\w\.]+)/i],[u,[l,"Smart Lenovo "+T]],[/(avast|avg)\/([\w\.]+)/i],[[l,/(.+)/,"$1 Secure "+T],u],[/\bfocus\/([\w\.]+)/i],[u,[l,k+" Focus"]],[/\bopt\/([\w\.]+)/i],[u,[l,I+" Touch"]],[/coc_coc\w+\/([\w\.]+)/i],[u,[l,"Coc Coc"]],[/dolfin\/([\w\.]+)/i],[u,[l,"Dolphin"]],[/coast\/([\w\.]+)/i],[u,[l,I+" Coast"]],[/miuibrowser\/([\w\.]+)/i],[u,[l,"MIUI "+T]],[/fxios\/([-\w\.]+)/i],[u,[l,k]],[/\bqihu|(qi?ho?o?|360)browser/i],[[l,"360 "+T]],[/(oculus|sailfish|huawei|vivo)browser\/([\w\.]+)/i],[[l,/(.+)/,"$1 "+T],u],[/samsungbrowser\/([\w\.]+)/i],[u,[l,O+" Internet"]],[/(comodo_dragon)\/([\w\.]+)/i],[[l,/_/g," "],u],[/metasr[\/ ]?([\d\.]+)/i],[u,[l,"Sogou Explorer"]],[/(sogou)mo\w+\/([\d\.]+)/i],[[l,"Sogou Mobile"],u],[/(electron)\/([\w\.]+) safari/i,/(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,/m?(qqbrowser|2345Explorer)[\/ ]?([\w\.]+)/i],[l,u],[/(lbbrowser)/i,/\[(linkedin)app\]/i],[l],[/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i],[[l,F],u],[/(Klarna)\/([\w\.]+)/i,/(kakao(?:talk|story))[\/ ]([\w\.]+)/i,/(naver)\(.*?(\d+\.[\w\.]+).*\)/i,/safari (line)\/([\w\.]+)/i,/\b(line)\/([\w\.]+)\/iab/i,/(alipay)client\/([\w\.]+)/i,/(chromium|instagram|snapchat)[\/ ]([-\w\.]+)/i],[l,u],[/\bgsa\/([\w\.]+) .*safari\//i],[u,[l,"GSA"]],[/musical_ly(?:.+app_?version\/|_)([\w\.]+)/i],[u,[l,"TikTok"]],[/headlesschrome(?:\/([\w\.]+)| )/i],[u,[l,C+" Headless"]],[/ wv\).+(chrome)\/([\w\.]+)/i],[[l,C+" WebView"],u],[/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i],[u,[l,"Android "+T]],[/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i],[l,u],[/version\/([\w\.\,]+) .*mobile\/\w+ (safari)/i],[u,[l,"Mobile Safari"]],[/version\/([\w(\.|\,)]+) .*(mobile ?safari|safari)/i],[u,l],[/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i],[l,[u,H,{"1.0":"/8","1.2":"/1","1.3":"/3","2.0":"/412","2.0.2":"/416","2.0.3":"/417","2.0.4":"/419","?":"/"}]],[/(webkit|khtml)\/([\w\.]+)/i],[l,u],[/(navigator|netscape\d?)\/([-\w\.]+)/i],[[l,"Netscape"],u],[/mobile vr; rv:([\w\.]+)\).+firefox/i],[u,[l,k+" Reality"]],[/ekiohf.+(flow)\/([\w\.]+)/i,/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\/ ]?([\w\.\+]+)/i,/(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i,/(firefox)\/([\w\.]+)/i,/(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i,/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,/(links) \(([\w\.]+)/i,/panasonic;(viera)/i],[l,u],[/(cobalt)\/([\w\.]+)/i],[l,[u,/master.|lts./,""]]],cpu:[[/(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\)]/i],[[m,"amd64"]],[/(ia32(?=;))/i],[[m,z]],[/((?:i[346]|x)86)[;\)]/i],[[m,"ia32"]],[/\b(aarch64|arm(v?8e?l?|_?64))\b/i],[[m,"arm64"]],[/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i],[[m,"armhf"]],[/windows (ce|mobile); ppc;/i],[[m,"arm"]],[/((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i],[[m,/ower/,"",z]],[/(sun4\w)[;\)]/i],[[m,"sparc"]],[/((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i],[[m,z]]],device:[[/\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i],[d,[h,O],[p,v]],[/\b((?:s[cgp]h|gt|sm)-\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,/samsung[- ]([-\w]+)/i,/sec-(sgh\w+)/i],[d,[h,O],[p,g]],[/(?:\/|\()(ip(?:hone|od)[\w, ]*)(?:\/|;)/i],[d,[h,S],[p,g]],[/\((ipad);[-\w\),; ]+apple/i,/applecoremedia\/[\w\.]+ \((ipad)/i,/\b(ipad)\d\d?,\d\d?[;\]].+ios/i],[d,[h,S],[p,v]],[/(macintosh);/i],[d,[h,S]],[/\b(sh-?[altvz]?\d\d[a-ekm]?)/i],[d,[h,L],[p,g]],[/\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i],[d,[h,D],[p,v]],[/(?:huawei|honor)([-\w ]+)[;\)]/i,/\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i],[d,[h,D],[p,g]],[/\b(poco[\w ]+|m2\d{3}j\d\d[a-z]{2})(?: bui|\))/i,/\b; (\w+) build\/hm\1/i,/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,/\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i,/oid[^\)]+; (m?[12][0-389][01]\w{3,6}[c-y])( bui|; wv|\))/i,/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i],[[d,/_/g," "],[h,A],[p,g]],[/oid[^\)]+; (2\d{4}(283|rpbf)[cgl])( bui|\))/i,/\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i],[[d,/_/g," "],[h,A],[p,v]],[/; (\w+) bui.+ oppo/i,/\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i],[d,[h,"OPPO"],[p,g]],[/vivo (\w+)(?: bui|\))/i,/\b(v[12]\d{3}\w?[at])(?: bui|;)/i],[d,[h,"Vivo"],[p,g]],[/\b(rmx[1-3]\d{3})(?: bui|;|\))/i],[d,[h,"Realme"],[p,g]],[/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,/\bmot(?:orola)?[- ](\w*)/i,/((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i],[d,[h,E],[p,g]],[/\b(mz60\d|xoom[2 ]{0,2}) build\//i],[d,[h,E],[p,v]],[/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i],[d,[h,"LG"],[p,v]],[/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,/\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i,/\blg-?([\d\w]+) bui/i],[d,[h,"LG"],[p,g]],[/(ideatab[-\w ]+)/i,/lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i],[d,[h,"Lenovo"],[p,v]],[/(?:maemo|nokia).*(n900|lumia \d+)/i,/nokia[-_ ]?([-\w\.]*)/i],[[d,/_/g," "],[h,"Nokia"],[p,g]],[/(pixel c)\b/i],[d,[h,x],[p,v]],[/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i],[d,[h,x],[p,g]],[/droid.+ (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i],[d,[h,j],[p,g]],[/sony tablet [ps]/i,/\b(?:sony)?sgp\w+(?: bui|\))/i],[[d,"Xperia Tablet"],[h,j],[p,v]],[/ (kb2005|in20[12]5|be20[12][59])\b/i,/(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i],[d,[h,"OnePlus"],[p,g]],[/(alexa)webm/i,/(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i,/(kf[a-z]+)( bui|\)).+silk\//i],[d,[h,y],[p,v]],[/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i],[[d,/(.+)/g,"Fire Phone $1"],[h,y],[p,g]],[/(playbook);[-\w\),; ]+(rim)/i],[d,h,[p,v]],[/\b((?:bb[a-f]|st[hv])100-\d)/i,/\(bb10; (\w+)/i],[d,[h,P],[p,g]],[/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i],[d,[h,R],[p,v]],[/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i],[d,[h,R],[p,g]],[/(nexus 9)/i],[d,[h,"HTC"],[p,v]],[/(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,/(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,/(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i],[h,[d,/_/g," "],[p,g]],[/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i],[d,[h,"Acer"],[p,v]],[/droid.+; (m[1-5] note) bui/i,/\bmz-([-\w]{2,})/i],[d,[h,"Meizu"],[p,g]],[/; ((?:power )?armor(?:[\w ]{0,8}))(?: bui|\))/i],[d,[h,"Ulefone"],[p,g]],[/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron|infinix|tecno)[-_ ]?([-\w]*)/i,/(hp) ([\w ]+\w)/i,/(asus)-?(\w+)/i,/(microsoft); (lumia[\w ]+)/i,/(lenovo)[-_ ]?([-\w]+)/i,/(jolla)/i,/(oppo) ?([\w ]+) bui/i],[h,d,[p,g]],[/(kobo)\s(ereader|touch)/i,/(archos) (gamepad2?)/i,/(hp).+(touchpad(?!.+tablet)|tablet)/i,/(kindle)\/([\w\.]+)/i,/(nook)[\w ]+build\/(\w+)/i,/(dell) (strea[kpr\d ]*[\dko])/i,/(le[- ]+pan)[- ]+(\w{1,9}) bui/i,/(trinity)[- ]*(t\d{3}) bui/i,/(gigaset)[- ]+(q\w{1,9}) bui/i,/(vodafone) ([\w ]+)(?:\)| bui)/i],[h,d,[p,v]],[/(surface duo)/i],[d,[h,M],[p,v]],[/droid [\d\.]+; (fp\du?)(?: b|\))/i],[d,[h,"Fairphone"],[p,g]],[/(u304aa)/i],[d,[h,"AT&T"],[p,g]],[/\bsie-(\w*)/i],[d,[h,"Siemens"],[p,g]],[/\b(rct\w+) b/i],[d,[h,"RCA"],[p,v]],[/\b(venue[\d ]{2,7}) b/i],[d,[h,"Dell"],[p,v]],[/\b(q(?:mv|ta)\w+) b/i],[d,[h,"Verizon"],[p,v]],[/\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i],[d,[h,"Barnes & Noble"],[p,v]],[/\b(tm\d{3}\w+) b/i],[d,[h,"NuVision"],[p,v]],[/\b(k88) b/i],[d,[h,"ZTE"],[p,v]],[/\b(nx\d{3}j) b/i],[d,[h,"ZTE"],[p,g]],[/\b(gen\d{3}) b.+49h/i],[d,[h,"Swiss"],[p,g]],[/\b(zur\d{3}) b/i],[d,[h,"Swiss"],[p,v]],[/\b((zeki)?tb.*\b) b/i],[d,[h,"Zeki"],[p,v]],[/\b([yr]\d{2}) b/i,/\b(dragon[- ]+touch |dt)(\w{5}) b/i],[[h,"Dragon Touch"],d,[p,v]],[/\b(ns-?\w{0,9}) b/i],[d,[h,"Insignia"],[p,v]],[/\b((nxa|next)-?\w{0,9}) b/i],[d,[h,"NextBook"],[p,v]],[/\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i],[[h,"Voice"],d,[p,g]],[/\b(lvtel\-)?(v1[12]) b/i],[[h,"LvTel"],d,[p,g]],[/\b(ph-1) /i],[d,[h,"Essential"],[p,g]],[/\b(v(100md|700na|7011|917g).*\b) b/i],[d,[h,"Envizen"],[p,v]],[/\b(trio[-\w\. ]+) b/i],[d,[h,"MachSpeed"],[p,v]],[/\btu_(1491) b/i],[d,[h,"Rotor"],[p,v]],[/(shield[\w ]+) b/i],[d,[h,"Nvidia"],[p,v]],[/(sprint) (\w+)/i],[h,d,[p,g]],[/(kin\.[onetw]{3})/i],[[d,/\./g," "],[h,M],[p,g]],[/droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i],[d,[h,N],[p,v]],[/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i],[d,[h,N],[p,g]],[/smart-tv.+(samsung)/i],[h,[p,_]],[/hbbtv.+maple;(\d+)/i],[[d,/^/,"SmartTV"],[h,O],[p,_]],[/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i],[[h,"LG"],[p,_]],[/(apple) ?tv/i],[h,[d,S+" TV"],[p,_]],[/crkey/i],[[d,C+"cast"],[h,x],[p,_]],[/droid.+aft(\w+)( bui|\))/i],[d,[h,y],[p,_]],[/\(dtv[\);].+(aquos)/i,/(aquos-tv[\w ]+)\)/i],[d,[h,L],[p,_]],[/(bravia[\w ]+)( bui|\))/i],[d,[h,j],[p,_]],[/(mitv-\w{5}) bui/i],[d,[h,A],[p,_]],[/Hbbtv.*(technisat) (.*);/i],[h,d,[p,_]],[/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,/hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i],[[h,W],[d,W],[p,_]],[/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i],[[p,_]],[/(ouya)/i,/(nintendo) ([wids3utch]+)/i],[h,d,[p,f]],[/droid.+; (shield) bui/i],[d,[h,"Nvidia"],[p,f]],[/(playstation [345portablevi]+)/i],[d,[h,j],[p,f]],[/\b(xbox(?: one)?(?!; xbox))[\); ]/i],[d,[h,M],[p,f]],[/((pebble))app/i],[h,d,[p,b]],[/(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i],[d,[h,S],[p,b]],[/droid.+; (glass) \d/i],[d,[h,x],[p,b]],[/droid.+; (wt63?0{2,3})\)/i],[d,[h,N],[p,b]],[/(quest( 2| pro)?)/i],[d,[h,F],[p,b]],[/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i],[h,[p,w]],[/(aeobc)\b/i],[d,[h,y],[p,w]],[/droid .+?; ([^;]+?)(?: bui|; wv\)|\) applew).+? mobile safari/i],[d,[p,g]],[/droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i],[d,[p,v]],[/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i],[[p,v]],[/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i],[[p,g]],[/(android[-\w\. ]{0,9});.+buil/i],[d,[h,"Generic"]]],engine:[[/windows.+ edge\/([\w\.]+)/i],[u,[l,"EdgeHTML"]],[/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i],[u,[l,"Blink"]],[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i,/ekioh(flow)\/([\w\.]+)/i,/(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i,/(icab)[\/ ]([23]\.[\d\.]+)/i,/\b(libweb)/i],[l,u],[/rv\:([\w\.]{1,9})\b.+(gecko)/i],[u,l]],os:[[/microsoft (windows) (vista|xp)/i],[l,u],[/(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i],[l,[u,H,K]],[/windows nt 6\.2; (arm)/i,/windows[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i,/(?:win(?=3|9|n)|win 9x )([nt\d\.]+)/i],[[u,H,K],[l,"Windows"]],[/ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i,/(?:ios;fbsv\/|iphone.+ios[\/ ])([\d\.]+)/i,/cfnetwork\/.+darwin/i],[[u,/_/g,"."],[l,"iOS"]],[/(mac os x) ?([\w\. ]*)/i,/(macintosh|mac_powerpc\b)(?!.+haiku)/i],[[l,q],[u,/_/g,"."]],[/droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i],[u,l],[/(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\/ ]?([\w\.]*)/i,/(blackberry)\w*\/([\w\.]*)/i,/(tizen|kaios)[\/ ]([\w\.]+)/i,/\((series40);/i],[l,u],[/\(bb(10);/i],[u,[l,P]],[/(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i],[u,[l,"Symbian"]],[/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i],[u,[l,k+" OS"]],[/web0s;.+rt(tv)/i,/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i],[u,[l,"webOS"]],[/watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i],[u,[l,"watchOS"]],[/crkey\/([\d\.]+)/i],[u,[l,C+"cast"]],[/(cros) [\w]+(?:\)| ([\w\.]+)\b)/i],[[l,B],u],[/panasonic;(viera)/i,/(netrange)mmh/i,/(nettv)\/(\d+\.[\w\.]+)/i,/(nintendo|playstation) ([wids345portablevuch]+)/i,/(xbox); +xbox ([^\);]+)/i,/\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,/(mint)[\/\(\) ]?(\w*)/i,/(mageia|vectorlinux)[; ]/i,/([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,/(hurd|linux) ?([\w\.]*)/i,/(gnu) ?([\w\.]*)/i,/\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,/(haiku) (\w+)/i],[l,u],[/(sunos) ?([\w\.\d]*)/i],[[l,"Solaris"],u],[/((?:open)?solaris)[-\/ ]?([\w\.]*)/i,/(aix) ((\d)(?=\.|\)| )[\w\.])*/i,/\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i,/(unix) ?([\w\.]*)/i],[l,u]]},Q=function(e,t){if(typeof e===n&&(t=e,e=i),!(this instanceof Q))return new Q(e,t).getResult();var f=typeof r!==a&&r.navigator?r.navigator:i,_=e||(f&&f.userAgent?f.userAgent:""),b=f&&f.userAgentData?f.userAgentData:i,w=t?$(J,t):J,y=f&&f.userAgent==_;return this.getBrowser=function(){var e,t={};return t[l]=i,t[u]=i,G.call(t,_,w.browser),t[c]=typeof(e=t[u])===o?e.replace(/[^\d\.]/g,"").split(".")[0]:i,y&&f&&f.brave&&typeof f.brave.isBrave==s&&(t[l]="Brave"),t},this.getCPU=function(){var e={};return e[m]=i,G.call(e,_,w.cpu),e},this.getDevice=function(){var e={};return e[h]=i,e[d]=i,e[p]=i,G.call(e,_,w.device),y&&!e[p]&&b&&b.mobile&&(e[p]=g),y&&"Macintosh"==e[d]&&f&&typeof f.standalone!==a&&f.maxTouchPoints&&f.maxTouchPoints>2&&(e[d]="iPad",e[p]=v),e},this.getEngine=function(){var e={};return e[l]=i,e[u]=i,G.call(e,_,w.engine),e},this.getOS=function(){var e={};return e[l]=i,e[u]=i,G.call(e,_,w.os),y&&!e[l]&&b&&"Unknown"!=b.platform&&(e[l]=b.platform.replace(/chrome os/i,B).replace(/macos/i,q)),e},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}},this.getUA=function(){return _},this.setUA=function(e){return _=typeof e===o&&e.length>500?W(e,500):e,this},this.setUA(_),this};Q.VERSION="1.0.37",Q.BROWSER=U([l,u,c]),Q.CPU=U([m]),Q.DEVICE=U([d,h,p,f,g,_,v,b,w]),Q.ENGINE=Q.OS=U([l,u]),typeof t!==a?(e.exports&&(t=e.exports=Q),t.UAParser=Q):typeof define===s&&define.amd?define(function(){return Q}):typeof r!==a&&(r.UAParser=Q);var Z=typeof r!==a&&(r.jQuery||r.Zepto);if(Z&&!Z.ua){var X=new Q;Z.ua=X.getResult(),Z.ua.get=function(){return X.getUA()},Z.ua.set=function(e){X.setUA(e);var t=X.getResult();for(var r in t)Z.ua[r]=t[r]}}}("object"==typeof window?window:this)}),f("2fqxq",function(e,t){Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.deepFreeze=e.exports.generateRandomNumber=e.exports.clone=void 0,e.exports.clone=function(e){if(void 0!==e)return Number.isNaN(e)?NaN:"function"==typeof structuredClone?structuredClone(e):JSON.parse(JSON.stringify(e))},e.exports.generateRandomNumber=function(){return Math.round(1e7*Math.random())},e.exports.deepFreeze=function e(t){for(let r of Reflect.ownKeys(t)){let i=t[r];(i&&"object"==typeof i||"function"==typeof i)&&e(i)}return Object.freeze(t)}}),f("kIl0y",function(e,t){var r=e.exports&&e.exports.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,s)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),i=e.exports&&e.exports.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=e.exports&&e.exports.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s in e)"default"!==s&&Object.prototype.hasOwnProperty.call(e,s)&&r(t,e,s);return i(t,e),t};Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.canReceive=e.exports.canSend=e.exports.generateProbatorRtpParameters=e.exports.reduceCodecs=e.exports.getSendingRemoteRtpParameters=e.exports.getSendingRtpParameters=e.exports.getRecvRtpCapabilities=e.exports.getExtendedRtpCapabilities=e.exports.validateSctpCapabilities=e.exports.validateSctpStreamParameters=e.exports.validateRtpParameters=e.exports.validateRtpCapabilities=void 0;let a=s(m("7PXZ5")),n=s(m("2fqxq"));function o(e){if("object"!=typeof e)throw TypeError("params is not an object");if(e.mid&&"string"!=typeof e.mid)throw TypeError("params.mid is not a string");if(!Array.isArray(e.codecs))throw TypeError("missing params.codecs");for(let t of e.codecs)(function(e){let t=RegExp("^(audio|video)/(.+)","i");if("object"!=typeof e)throw TypeError("codec is not an object");if(!e.mimeType||"string"!=typeof e.mimeType)throw TypeError("missing codec.mimeType");let r=t.exec(e.mimeType);if(!r)throw TypeError("invalid codec.mimeType");if("number"!=typeof e.payloadType)throw TypeError("missing codec.payloadType");if("number"!=typeof e.clockRate)throw TypeError("missing codec.clockRate");for(let t of("audio"===r[1].toLowerCase()?"number"!=typeof e.channels&&(e.channels=1):delete e.channels,e.parameters&&"object"==typeof e.parameters||(e.parameters={}),Object.keys(e.parameters))){let r=e.parameters[t];if(void 0===r&&(e.parameters[t]="",r=""),"string"!=typeof r&&"number"!=typeof r)throw TypeError(`invalid codec parameter [key:${t}s, value:${r}]`);if("apt"===t&&"number"!=typeof r)throw TypeError("invalid codec apt parameter")}for(let t of(e.rtcpFeedback&&Array.isArray(e.rtcpFeedback)||(e.rtcpFeedback=[]),e.rtcpFeedback))c(t)})(t);if(e.headerExtensions&&!Array.isArray(e.headerExtensions))throw TypeError("params.headerExtensions is not an array");for(let t of(e.headerExtensions||(e.headerExtensions=[]),e.headerExtensions))(function(e){if("object"!=typeof e)throw TypeError("ext is not an object");if(!e.uri||"string"!=typeof e.uri)throw TypeError("missing ext.uri");if("number"!=typeof e.id)throw TypeError("missing ext.id");if(e.encrypt&&"boolean"!=typeof e.encrypt)throw TypeError("invalid ext.encrypt");for(let t of(e.encrypt||(e.encrypt=!1),e.parameters&&"object"==typeof e.parameters||(e.parameters={}),Object.keys(e.parameters))){let r=e.parameters[t];if(void 0===r&&(e.parameters[t]="",r=""),"string"!=typeof r&&"number"!=typeof r)throw TypeError("invalid header extension parameter")}})(t);if(e.encodings&&!Array.isArray(e.encodings))throw TypeError("params.encodings is not an array");for(let t of(e.encodings||(e.encodings=[]),e.encodings))(function(e){if("object"!=typeof e)throw TypeError("encoding is not an object");if(e.ssrc&&"number"!=typeof e.ssrc)throw TypeError("invalid encoding.ssrc");if(e.rid&&"string"!=typeof e.rid)throw TypeError("invalid encoding.rid");if(e.rtx&&"object"!=typeof e.rtx)throw TypeError("invalid encoding.rtx");if(e.rtx&&"number"!=typeof e.rtx.ssrc)throw TypeError("missing encoding.rtx.ssrc");if(e.dtx&&"boolean"==typeof e.dtx||(e.dtx=!1),e.scalabilityMode&&"string"!=typeof e.scalabilityMode)throw TypeError("invalid encoding.scalabilityMode")})(t);if(e.rtcp&&"object"!=typeof e.rtcp)throw TypeError("params.rtcp is not an object");e.rtcp||(e.rtcp={}),function(e){if("object"!=typeof e)throw TypeError("rtcp is not an object");if(e.cname&&"string"!=typeof e.cname)throw TypeError("invalid rtcp.cname");e.reducedSize&&"boolean"==typeof e.reducedSize||(e.reducedSize=!0)}(e.rtcp)}function c(e){if("object"!=typeof e)throw TypeError("fb is not an object");if(!e.type||"string"!=typeof e.type)throw TypeError("missing fb.type");e.parameter&&"string"==typeof e.parameter||(e.parameter="")}function d(e){return!!e&&/.+\/rtx$/i.test(e.mimeType)}function l(e,t,{strict:r=!1,modify:i=!1}={}){let s=e.mimeType.toLowerCase();if(s!==t.mimeType.toLowerCase()||e.clockRate!==t.clockRate||e.channels!==t.channels)return!1;switch(s){case"video/h264":if(r){let r;if((e.parameters["packetization-mode"]||0)!==(t.parameters["packetization-mode"]||0)||!a.isSameProfile(e.parameters,t.parameters))return!1;try{r=a.generateProfileLevelIdStringForAnswer(e.parameters,t.parameters)}catch(e){return!1}i&&(r?(e.parameters["profile-level-id"]=r,t.parameters["profile-level-id"]=r):(delete e.parameters["profile-level-id"],delete t.parameters["profile-level-id"]))}break;case"video/vp9":if(r&&(e.parameters["profile-id"]||0)!==(t.parameters["profile-id"]||0))return!1}return!0}e.exports.validateRtpCapabilities=function(e){if("object"!=typeof e)throw TypeError("caps is not an object");if(e.codecs&&!Array.isArray(e.codecs))throw TypeError("caps.codecs is not an array");for(let t of(e.codecs||(e.codecs=[]),e.codecs))(function(e){let t=RegExp("^(audio|video)/(.+)","i");if("object"!=typeof e)throw TypeError("codec is not an object");if(!e.mimeType||"string"!=typeof e.mimeType)throw TypeError("missing codec.mimeType");let r=t.exec(e.mimeType);if(!r)throw TypeError("invalid codec.mimeType");if(e.kind=r[1].toLowerCase(),e.preferredPayloadType&&"number"!=typeof e.preferredPayloadType)throw TypeError("invalid codec.preferredPayloadType");if("number"!=typeof e.clockRate)throw TypeError("missing codec.clockRate");for(let t of("audio"===e.kind?"number"!=typeof e.channels&&(e.channels=1):delete e.channels,e.parameters&&"object"==typeof e.parameters||(e.parameters={}),Object.keys(e.parameters))){let r=e.parameters[t];if(void 0===r&&(e.parameters[t]="",r=""),"string"!=typeof r&&"number"!=typeof r)throw TypeError(`invalid codec parameter [key:${t}s, value:${r}]`);if("apt"===t&&"number"!=typeof r)throw TypeError("invalid codec apt parameter")}for(let t of(e.rtcpFeedback&&Array.isArray(e.rtcpFeedback)||(e.rtcpFeedback=[]),e.rtcpFeedback))c(t)})(t);if(e.headerExtensions&&!Array.isArray(e.headerExtensions))throw TypeError("caps.headerExtensions is not an array");for(let t of(e.headerExtensions||(e.headerExtensions=[]),e.headerExtensions))(function(e){if("object"!=typeof e)throw TypeError("ext is not an object");if("audio"!==e.kind&&"video"!==e.kind)throw TypeError("invalid ext.kind");if(!e.uri||"string"!=typeof e.uri)throw TypeError("missing ext.uri");if("number"!=typeof e.preferredId)throw TypeError("missing ext.preferredId");if(e.preferredEncrypt&&"boolean"!=typeof e.preferredEncrypt)throw TypeError("invalid ext.preferredEncrypt");if(e.preferredEncrypt||(e.preferredEncrypt=!1),e.direction&&"string"!=typeof e.direction)throw TypeError("invalid ext.direction");e.direction||(e.direction="sendrecv")})(t)},e.exports.validateRtpParameters=o,e.exports.validateSctpStreamParameters=function(e){if("object"!=typeof e)throw TypeError("params is not an object");if("number"!=typeof e.streamId)throw TypeError("missing params.streamId");let t=!1;if("boolean"==typeof e.ordered?t=!0:e.ordered=!0,e.maxPacketLifeTime&&"number"!=typeof e.maxPacketLifeTime)throw TypeError("invalid params.maxPacketLifeTime");if(e.maxRetransmits&&"number"!=typeof e.maxRetransmits)throw TypeError("invalid params.maxRetransmits");if(e.maxPacketLifeTime&&e.maxRetransmits)throw TypeError("cannot provide both maxPacketLifeTime and maxRetransmits");if(t&&e.ordered&&(e.maxPacketLifeTime||e.maxRetransmits))throw TypeError("cannot be ordered with maxPacketLifeTime or maxRetransmits");if(!t&&(e.maxPacketLifeTime||e.maxRetransmits)&&(e.ordered=!1),e.label&&"string"!=typeof e.label)throw TypeError("invalid params.label");if(e.protocol&&"string"!=typeof e.protocol)throw TypeError("invalid params.protocol")},e.exports.validateSctpCapabilities=function(e){if("object"!=typeof e)throw TypeError("caps is not an object");if(!e.numStreams||"object"!=typeof e.numStreams)throw TypeError("missing caps.numStreams");(function(e){if("object"!=typeof e)throw TypeError("numStreams is not an object");if("number"!=typeof e.OS)throw TypeError("missing numStreams.OS");if("number"!=typeof e.MIS)throw TypeError("missing numStreams.MIS")})(e.numStreams)},e.exports.getExtendedRtpCapabilities=function(e,t){let r={codecs:[],headerExtensions:[]};for(let i of t.codecs||[]){if(d(i))continue;let t=(e.codecs||[]).find(e=>l(e,i,{strict:!0,modify:!0}));if(!t)continue;let s={mimeType:t.mimeType,kind:t.kind,clockRate:t.clockRate,channels:t.channels,localPayloadType:t.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:i.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:t.parameters,remoteParameters:i.parameters,rtcpFeedback:function(e,t){let r=[];for(let i of e.rtcpFeedback||[]){let e=(t.rtcpFeedback||[]).find(e=>e.type===i.type&&(e.parameter===i.parameter||!e.parameter&&!i.parameter));e&&r.push(e)}return r}(t,i)};r.codecs.push(s)}for(let i of r.codecs){let r=e.codecs.find(e=>d(e)&&e.parameters.apt===i.localPayloadType),s=t.codecs.find(e=>d(e)&&e.parameters.apt===i.remotePayloadType);r&&s&&(i.localRtxPayloadType=r.preferredPayloadType,i.remoteRtxPayloadType=s.preferredPayloadType)}for(let i of t.headerExtensions){let t=e.headerExtensions.find(e=>(!e.kind||!i.kind||e.kind===i.kind)&&e.uri===i.uri);if(!t)continue;let s={kind:i.kind,uri:i.uri,sendId:t.preferredId,recvId:i.preferredId,encrypt:t.preferredEncrypt,direction:"sendrecv"};switch(i.direction){case"sendrecv":s.direction="sendrecv";break;case"recvonly":s.direction="sendonly";break;case"sendonly":s.direction="recvonly";break;case"inactive":s.direction="inactive"}r.headerExtensions.push(s)}return r},e.exports.getRecvRtpCapabilities=function(e){let t={codecs:[],headerExtensions:[]};for(let r of e.codecs){let e={mimeType:r.mimeType,kind:r.kind,preferredPayloadType:r.remotePayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.localParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(e),!r.remoteRtxPayloadType)continue;let i={mimeType:`${r.kind}/rtx`,kind:r.kind,preferredPayloadType:r.remoteRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.remotePayloadType},rtcpFeedback:[]};t.codecs.push(i)}for(let r of e.headerExtensions){if("sendrecv"!==r.direction&&"recvonly"!==r.direction)continue;let e={kind:r.kind,uri:r.uri,preferredId:r.recvId,preferredEncrypt:r.encrypt,direction:r.direction};t.headerExtensions.push(e)}return t},e.exports.getSendingRtpParameters=function(e,t){let r={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let i of t.codecs){if(i.kind!==e)continue;let t={mimeType:i.mimeType,payloadType:i.localPayloadType,clockRate:i.clockRate,channels:i.channels,parameters:i.localParameters,rtcpFeedback:i.rtcpFeedback};if(r.codecs.push(t),i.localRtxPayloadType){let e={mimeType:`${i.kind}/rtx`,payloadType:i.localRtxPayloadType,clockRate:i.clockRate,parameters:{apt:i.localPayloadType},rtcpFeedback:[]};r.codecs.push(e)}}for(let i of t.headerExtensions){if(i.kind&&i.kind!==e||"sendrecv"!==i.direction&&"sendonly"!==i.direction)continue;let t={uri:i.uri,id:i.sendId,encrypt:i.encrypt,parameters:{}};r.headerExtensions.push(t)}return r},e.exports.getSendingRemoteRtpParameters=function(e,t){let r={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let i of t.codecs){if(i.kind!==e)continue;let t={mimeType:i.mimeType,payloadType:i.localPayloadType,clockRate:i.clockRate,channels:i.channels,parameters:i.remoteParameters,rtcpFeedback:i.rtcpFeedback};if(r.codecs.push(t),i.localRtxPayloadType){let e={mimeType:`${i.kind}/rtx`,payloadType:i.localRtxPayloadType,clockRate:i.clockRate,parameters:{apt:i.localPayloadType},rtcpFeedback:[]};r.codecs.push(e)}}for(let i of t.headerExtensions){if(i.kind&&i.kind!==e||"sendrecv"!==i.direction&&"sendonly"!==i.direction)continue;let t={uri:i.uri,id:i.sendId,encrypt:i.encrypt,parameters:{}};r.headerExtensions.push(t)}if(r.headerExtensions.some(e=>"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"===e.uri))for(let e of r.codecs)e.rtcpFeedback=(e.rtcpFeedback||[]).filter(e=>"goog-remb"!==e.type);else if(r.headerExtensions.some(e=>"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"===e.uri))for(let e of r.codecs)e.rtcpFeedback=(e.rtcpFeedback||[]).filter(e=>"transport-cc"!==e.type);else for(let e of r.codecs)e.rtcpFeedback=(e.rtcpFeedback||[]).filter(e=>"transport-cc"!==e.type&&"goog-remb"!==e.type);return r},e.exports.reduceCodecs=function(e,t){let r=[];if(t){for(let i=0;i<e.length;++i)if(l(e[i],t,{strict:!0})){r.push(e[i]),d(e[i+1])&&r.push(e[i+1]);break}if(0===r.length)throw TypeError("no matching codec found")}else r.push(e[0]),d(e[1])&&r.push(e[1]);return r},e.exports.generateProbatorRtpParameters=function(e){o(e=n.clone(e));let t={mid:"probator",codecs:[],headerExtensions:[],encodings:[{ssrc:1234}],rtcp:{cname:"probator"}};return t.codecs.push(e.codecs[0]),t.codecs[0].payloadType=127,t.headerExtensions=e.headerExtensions,t},e.exports.canSend=function(e,t){return t.codecs.some(t=>t.kind===e)},e.exports.canReceive=function(e,t){if(o(e),0===e.codecs.length)return!1;let r=e.codecs[0];return t.codecs.some(e=>e.remotePayloadType===r.payloadType)}}),f("7PXZ5",function(e,t){var r,i,s,a;Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.generateProfileLevelIdStringForAnswer=e.exports.isSameProfile=e.exports.parseSdpProfileLevelId=e.exports.levelToString=e.exports.profileToString=e.exports.profileLevelIdToString=e.exports.parseProfileLevelId=e.exports.ProfileLevelId=e.exports.Level=e.exports.Profile=void 0;let n=new(m("g9uXJ")).Logger;(s=r||(e.exports.Profile=r={}))[s.ConstrainedBaseline=1]="ConstrainedBaseline",s[s.Baseline=2]="Baseline",s[s.Main=3]="Main",s[s.ConstrainedHigh=4]="ConstrainedHigh",s[s.High=5]="High",s[s.PredictiveHigh444=6]="PredictiveHigh444",(a=i||(e.exports.Level=i={}))[a.L1_b=0]="L1_b",a[a.L1=10]="L1",a[a.L1_1=11]="L1_1",a[a.L1_2=12]="L1_2",a[a.L1_3=13]="L1_3",a[a.L2=20]="L2",a[a.L2_1=21]="L2_1",a[a.L2_2=22]="L2_2",a[a.L3=30]="L3",a[a.L3_1=31]="L3_1",a[a.L3_2=32]="L3_2",a[a.L4=40]="L4",a[a.L4_1=41]="L4_1",a[a.L4_2=42]="L4_2",a[a.L5=50]="L5",a[a.L5_1=51]="L5_1",a[a.L5_2=52]="L5_2";class o{constructor(e,t){this.profile=e,this.level=t}}e.exports.ProfileLevelId=o;let c=new o(r.ConstrainedBaseline,i.L3_1);class d{constructor(e){this.mask=~g("x",e),this.masked_value=g("1",e)}isMatch(e){return this.masked_value===(e&this.mask)}}class l{constructor(e,t,r){this.profile_idc=e,this.profile_iop=t,this.profile=r}}let p=[new l(66,new d("x1xx0000"),r.ConstrainedBaseline),new l(77,new d("1xxx0000"),r.ConstrainedBaseline),new l(88,new d("11xx0000"),r.ConstrainedBaseline),new l(66,new d("x0xx0000"),r.Baseline),new l(88,new d("10xx0000"),r.Baseline),new l(77,new d("0x0x0000"),r.Main),new l(100,new d("00000000"),r.High),new l(100,new d("00001100"),r.ConstrainedHigh),new l(244,new d("00000000"),r.PredictiveHigh444)];function h(e){let t;if("string"!=typeof e||6!==e.length)return;let r=parseInt(e,16);if(0===r)return;let s=255&r,a=r>>8&255,c=r>>16&255;switch(s){case i.L1_1:t=(16&a)!=0?i.L1_b:i.L1_1;break;case i.L1:case i.L1_2:case i.L1_3:case i.L2:case i.L2_1:case i.L2_2:case i.L3:case i.L3_1:case i.L3_2:case i.L4:case i.L4_1:case i.L4_2:case i.L5:case i.L5_1:case i.L5_2:t=s;break;default:n.warn(`parseProfileLevelId() | unrecognized level_idc [str:${e}, level_idc:${s}]`);return}for(let e of p)if(c===e.profile_idc&&e.profile_iop.isMatch(a))return new o(e.profile,t);n.warn(`parseProfileLevelId() | unrecognized profile_idc/profile_iop combination [str:${e}, profile_idc:${c}, profile_iop:${a}]`)}function u(e){let t;if(e.level==i.L1_b)switch(e.profile){case r.ConstrainedBaseline:return"42f00b";case r.Baseline:return"42100b";case r.Main:return"4d100b";default:n.warn(`profileLevelIdToString() | Level 1_b not is allowed for profile ${e.profile}`);return}switch(e.profile){case r.ConstrainedBaseline:t="42e0";break;case r.Baseline:t="4200";break;case r.Main:t="4d00";break;case r.ConstrainedHigh:t="640c";break;case r.High:t="6400";break;case r.PredictiveHigh444:t="f400";break;default:n.warn(`profileLevelIdToString() | unrecognized profile ${e.profile}`);return}let s=e.level.toString(16);return 1===s.length&&(s=`0${s}`),`${t}${s}`}function f(e={}){let t=e["profile-level-id"];return t?h(t):c}function g(e,t){return Number(t[0]===e)<<7|Number(t[1]===e)<<6|Number(t[2]===e)<<5|Number(t[3]===e)<<4|Number(t[4]===e)<<3|Number(t[5]===e)<<2|Number(t[6]===e)<<1|Number(t[7]===e)<<0}function v(e={}){let t=e["level-asymmetry-allowed"];return!0===t||1===t||"1"===t}e.exports.parseProfileLevelId=h,e.exports.profileLevelIdToString=u,e.exports.profileToString=function(e){switch(e){case r.ConstrainedBaseline:return"ConstrainedBaseline";case r.Baseline:return"Baseline";case r.Main:return"Main";case r.ConstrainedHigh:return"ConstrainedHigh";case r.High:return"High";case r.PredictiveHigh444:return"PredictiveHigh444";default:n.warn(`profileToString() | unrecognized profile ${e}`);return}},e.exports.levelToString=function(e){switch(e){case i.L1_b:return"1b";case i.L1:return"1";case i.L1_1:return"1.1";case i.L1_2:return"1.2";case i.L1_3:return"1.3";case i.L2:return"2";case i.L2_1:return"2.1";case i.L2_2:return"2.2";case i.L3:return"3";case i.L3_1:return"3.1";case i.L3_2:return"3.2";case i.L4:return"4";case i.L4_1:return"4.1";case i.L4_2:return"4.2";case i.L5:return"5";case i.L5_1:return"5.1";case i.L5_2:return"5.2";default:n.warn(`levelToString() | unrecognized level ${e}`);return}},e.exports.parseSdpProfileLevelId=f,e.exports.isSameProfile=function(e={},t={}){let r=f(e),i=f(t);return!!(r&&i&&r.profile===i.profile)},e.exports.generateProfileLevelIdStringForAnswer=function(e={},t={}){var r,s;if(!e["profile-level-id"]&&!t["profile-level-id"]){n.warn("generateProfileLevelIdStringForAnswer() | profile-level-id missing in local and remote params");return}let a=f(e),c=f(t);if(!a)throw TypeError("invalid local_profile_level_id");if(!c)throw TypeError("invalid remote_profile_level_id");if(a.profile!==c.profile)throw TypeError("H264 Profile mismatch");let d=v(e)&&v(t),l=a.level,p=(r=l,s=c.level,(r===i.L1_b?s!==i.L1&&s!==i.L1_b:s===i.L1_b?r!==i.L1:r<s)?r:s),h=d?l:p;return n.debug(`generateProfileLevelIdStringForAnswer() | result [profile:${a.profile}, level:${h}]`),u(new o(a.profile,h))}}),f("g9uXJ",function(e,t){var r=e.exports&&e.exports.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.Logger=void 0;let i=r(m("1JjHr")),s="h264-profile-level-id";e.exports.Logger=class{constructor(e){e?(this._debug=(0,i.default)(`${s}:${e}`),this._warn=(0,i.default)(`${s}:WARN:${e}`),this._error=(0,i.default)(`${s}:ERROR:${e}`)):(this._debug=(0,i.default)(s),this._warn=(0,i.default)(`${s}:WARN`),this._error=(0,i.default)(`${s}:ERROR`)),this._debug.log=console.info.bind(console),this._warn.log=console.warn.bind(console),this._error.log=console.error.bind(console)}get debug(){return this._debug}get warn(){return this._warn}get error(){return this._error}}}),f("baDpS",function(e,t){var r=e.exports&&e.exports.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,s)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),i=e.exports&&e.exports.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=e.exports&&e.exports.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s in e)"default"!==s&&Object.prototype.hasOwnProperty.call(e,s)&&r(t,e,s);return i(t,e),t},a=e.exports&&e.exports.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.Transport=void 0;var n=m("gQ1gG");let o=a(m("9VcOR"));var c=m("7Wufc"),d=m("jvUzX"),l=m("6yq6Z");let p=s(m("2fqxq")),h=s(m("kIl0y"));var u=m("iSZvy"),f=m("3HSbG"),g=m("gLRXX"),v=m("420JU");let _=new c.Logger("Transport");class b{constructor(e){this.consumerOptions=e,this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}}class w extends d.EnhancedEventEmitter{constructor({direction:e,id:t,iceParameters:r,iceCandidates:i,dtlsParameters:s,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:l,proprietaryConstraints:h,appData:u,handlerFactory:m,extendedRtpCapabilities:f,canProduceByKind:g}){super(),this._closed=!1,this._iceGatheringState="new",this._connectionState="new",this._producers=new Map,this._consumers=new Map,this._dataProducers=new Map,this._dataConsumers=new Map,this._probatorConsumerCreated=!1,this._awaitQueue=new n.AwaitQueue,this._pendingConsumerTasks=[],this._consumerCreationInProgress=!1,this._pendingPauseConsumers=new Map,this._consumerPauseInProgress=!1,this._pendingResumeConsumers=new Map,this._consumerResumeInProgress=!1,this._pendingCloseConsumers=new Map,this._consumerCloseInProgress=!1,this._observer=new d.EnhancedEventEmitter,_.debug("constructor() [id:%s, direction:%s]",t,e),this._id=t,this._direction=e,this._extendedRtpCapabilities=f,this._canProduceByKind=g,this._maxSctpMessageSize=a?a.maxMessageSize:null;let v=p.clone(l)||{};delete v.iceServers,delete v.iceTransportPolicy,delete v.bundlePolicy,delete v.rtcpMuxPolicy,delete v.sdpSemantics,this._handler=m(),this._handler.run({direction:e,iceParameters:r,iceCandidates:i,dtlsParameters:s,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:v,proprietaryConstraints:h,extendedRtpCapabilities:f}),this._appData=u||{},this.handleHandler()}get id(){return this._id}get closed(){return this._closed}get direction(){return this._direction}get handler(){return this._handler}get iceGatheringState(){return this._iceGatheringState}get connectionState(){return this._connectionState}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){if(!this._closed){for(let e of(_.debug("close()"),this._closed=!0,this._awaitQueue.stop(),this._handler.close(),this._connectionState="closed",this._producers.values()))e.transportClosed();for(let e of(this._producers.clear(),this._consumers.values()))e.transportClosed();for(let e of(this._consumers.clear(),this._dataProducers.values()))e.transportClosed();for(let e of(this._dataProducers.clear(),this._dataConsumers.values()))e.transportClosed();this._dataConsumers.clear(),this._observer.safeEmit("close")}}async getStats(){if(this._closed)throw new l.InvalidStateError("closed");return this._handler.getTransportStats()}async restartIce({iceParameters:e}){if(_.debug("restartIce()"),this._closed)throw new l.InvalidStateError("closed");if(!e)throw TypeError("missing iceParameters");return this._awaitQueue.push(async()=>await this._handler.restartIce(e),"transport.restartIce()")}async updateIceServers({iceServers:e}={}){if(_.debug("updateIceServers()"),this._closed)throw new l.InvalidStateError("closed");if(!Array.isArray(e))throw TypeError("missing iceServers");return this._awaitQueue.push(async()=>this._handler.updateIceServers(e),"transport.updateIceServers()")}async produce({track:e,encodings:t,codecOptions:r,codec:i,stopTracks:s=!0,disableTrackOnPause:a=!0,zeroRtpOnPause:n=!1,appData:o={}}={}){if(_.debug("produce() [track:%o]",e),this._closed)throw new l.InvalidStateError("closed");if(e){if("send"!==this._direction)throw new l.UnsupportedError("not a sending Transport");if(this._canProduceByKind[e.kind]){if("ended"===e.readyState)throw new l.InvalidStateError("track ended");if(0===this.listenerCount("connect")&&"new"===this._connectionState)throw TypeError('no "connect" listener set into this transport');if(0===this.listenerCount("produce"))throw TypeError('no "produce" listener set into this transport');else if(o&&"object"!=typeof o)throw TypeError("if given, appData must be an object")}else throw new l.UnsupportedError(`cannot produce ${e.kind}`)}else throw TypeError("missing track");return this._awaitQueue.push(async()=>{let c;if(t&&!Array.isArray(t))throw TypeError("encodings must be an array");t&&0===t.length?c=void 0:t&&(c=t.map(e=>{let t={active:!0};return!1===e.active&&(t.active=!1),"boolean"==typeof e.dtx&&(t.dtx=e.dtx),"string"==typeof e.scalabilityMode&&(t.scalabilityMode=e.scalabilityMode),"number"==typeof e.scaleResolutionDownBy&&(t.scaleResolutionDownBy=e.scaleResolutionDownBy),"number"==typeof e.maxBitrate&&(t.maxBitrate=e.maxBitrate),"number"==typeof e.maxFramerate&&(t.maxFramerate=e.maxFramerate),"boolean"==typeof e.adaptivePtime&&(t.adaptivePtime=e.adaptivePtime),"string"==typeof e.priority&&(t.priority=e.priority),"string"==typeof e.networkPriority&&(t.networkPriority=e.networkPriority),t}));let{localId:d,rtpParameters:l,rtpSender:p}=await this._handler.send({track:e,encodings:c,codecOptions:r,codec:i});try{h.validateRtpParameters(l);let{id:t}=await new Promise((t,r)=>{this.safeEmit("produce",{kind:e.kind,rtpParameters:l,appData:o},t,r)}),r=new u.Producer({id:t,localId:d,rtpSender:p,track:e,rtpParameters:l,stopTracks:s,disableTrackOnPause:a,zeroRtpOnPause:n,appData:o});return this._producers.set(r.id,r),this.handleProducer(r),this._observer.safeEmit("newproducer",r),r}catch(e){throw this._handler.stopSending(d).catch(()=>{}),e}},"transport.produce()").catch(t=>{if(s)try{e.stop()}catch(e){}throw t})}async consume({id:e,producerId:t,kind:r,rtpParameters:i,streamId:s,appData:a={}}){if(_.debug("consume()"),this._closed)throw new l.InvalidStateError("closed");if("recv"!==this._direction)throw new l.UnsupportedError("not a receiving Transport");if("string"!=typeof e)throw TypeError("missing id");if("string"!=typeof t)throw TypeError("missing producerId");if("audio"!==r&&"video"!==r)throw TypeError(`invalid kind '${r}'`);if(0===this.listenerCount("connect")&&"new"===this._connectionState)throw TypeError('no "connect" listener set into this transport');if(a&&"object"!=typeof a)throw TypeError("if given, appData must be an object");let n=p.clone(i);if(!h.canReceive(n,this._extendedRtpCapabilities))throw new l.UnsupportedError("cannot consume this Producer");let c=new b({id:e,producerId:t,kind:r,rtpParameters:n,streamId:s,appData:a});return this._pendingConsumerTasks.push(c),(0,o.default)(()=>{this._closed||!1!==this._consumerCreationInProgress||this.createPendingConsumers()}),c.promise}async produceData({ordered:e=!0,maxPacketLifeTime:t,maxRetransmits:r,label:i="",protocol:s="",appData:a={}}={}){if(_.debug("produceData()"),this._closed)throw new l.InvalidStateError("closed");if("send"!==this._direction)throw new l.UnsupportedError("not a sending Transport");if(this._maxSctpMessageSize){if(0===this.listenerCount("connect")&&"new"===this._connectionState)throw TypeError('no "connect" listener set into this transport');if(0===this.listenerCount("producedata"))throw TypeError('no "producedata" listener set into this transport');if(a&&"object"!=typeof a)throw TypeError("if given, appData must be an object")}else throw new l.UnsupportedError("SCTP not enabled by remote Transport");return(t||r)&&(e=!1),this._awaitQueue.push(async()=>{let{dataChannel:n,sctpStreamParameters:o}=await this._handler.sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:s});h.validateSctpStreamParameters(o);let{id:c}=await new Promise((e,t)=>{this.safeEmit("producedata",{sctpStreamParameters:o,label:i,protocol:s,appData:a},e,t)}),d=new g.DataProducer({id:c,dataChannel:n,sctpStreamParameters:o,appData:a});return this._dataProducers.set(d.id,d),this.handleDataProducer(d),this._observer.safeEmit("newdataproducer",d),d},"transport.produceData()")}async consumeData({id:e,dataProducerId:t,sctpStreamParameters:r,label:i="",protocol:s="",appData:a={}}){if(_.debug("consumeData()"),this._closed)throw new l.InvalidStateError("closed");if("recv"!==this._direction)throw new l.UnsupportedError("not a receiving Transport");if(this._maxSctpMessageSize){if("string"!=typeof e)throw TypeError("missing id");if("string"!=typeof t)throw TypeError("missing dataProducerId");if(0===this.listenerCount("connect")&&"new"===this._connectionState)throw TypeError('no "connect" listener set into this transport');else if(a&&"object"!=typeof a)throw TypeError("if given, appData must be an object")}else throw new l.UnsupportedError("SCTP not enabled by remote Transport");let n=p.clone(r);return h.validateSctpStreamParameters(n),this._awaitQueue.push(async()=>{let{dataChannel:r}=await this._handler.receiveDataChannel({sctpStreamParameters:n,label:i,protocol:s}),o=new v.DataConsumer({id:e,dataProducerId:t,dataChannel:r,sctpStreamParameters:n,appData:a});return this._dataConsumers.set(o.id,o),this.handleDataConsumer(o),this._observer.safeEmit("newdataconsumer",o),o},"transport.consumeData()")}async createPendingConsumers(){this._consumerCreationInProgress=!0,this._awaitQueue.push(async()=>{let e;if(0===this._pendingConsumerTasks.length){_.debug("createPendingConsumers() | there is no Consumer to be created");return}let t=[...this._pendingConsumerTasks];this._pendingConsumerTasks=[];let r=[];for(let e of t){let{id:t,kind:i,rtpParameters:s,streamId:a}=e.consumerOptions;r.push({trackId:t,kind:i,rtpParameters:s,streamId:a})}try{let i=await this._handler.receive(r);for(let r=0;r<i.length;++r){let s=t[r],a=i[r],{id:n,producerId:o,kind:c,rtpParameters:d,appData:l}=s.consumerOptions,{localId:p,rtpReceiver:h,track:u}=a,m=new f.Consumer({id:n,localId:p,producerId:o,rtpReceiver:h,track:u,rtpParameters:d,appData:l});this._consumers.set(m.id,m),this.handleConsumer(m),this._probatorConsumerCreated||e||"video"!==c||(e=m),this._observer.safeEmit("newconsumer",m),s.resolve(m)}}catch(e){for(let r of t)r.reject(e)}if(e)try{let t=h.generateProbatorRtpParameters(e.rtpParameters);await this._handler.receive([{trackId:"probator",kind:"video",rtpParameters:t}]),_.debug("createPendingConsumers() | Consumer for RTP probation created"),this._probatorConsumerCreated=!0}catch(e){_.error("createPendingConsumers() | failed to create Consumer for RTP probation:%o",e)}},"transport.createPendingConsumers()").then(()=>{this._consumerCreationInProgress=!1,this._pendingConsumerTasks.length>0&&this.createPendingConsumers()}).catch(()=>{})}pausePendingConsumers(){this._consumerPauseInProgress=!0,this._awaitQueue.push(async()=>{if(0===this._pendingPauseConsumers.size){_.debug("pausePendingConsumers() | there is no Consumer to be paused");return}let e=Array.from(this._pendingPauseConsumers.values());this._pendingPauseConsumers.clear();try{let t=e.map(e=>e.localId);await this._handler.pauseReceiving(t)}catch(e){_.error("pausePendingConsumers() | failed to pause Consumers:",e)}},"transport.pausePendingConsumers").then(()=>{this._consumerPauseInProgress=!1,this._pendingPauseConsumers.size>0&&this.pausePendingConsumers()}).catch(()=>{})}resumePendingConsumers(){this._consumerResumeInProgress=!0,this._awaitQueue.push(async()=>{if(0===this._pendingResumeConsumers.size){_.debug("resumePendingConsumers() | there is no Consumer to be resumed");return}let e=Array.from(this._pendingResumeConsumers.values());this._pendingResumeConsumers.clear();try{let t=e.map(e=>e.localId);await this._handler.resumeReceiving(t)}catch(e){_.error("resumePendingConsumers() | failed to resume Consumers:",e)}},"transport.resumePendingConsumers").then(()=>{this._consumerResumeInProgress=!1,this._pendingResumeConsumers.size>0&&this.resumePendingConsumers()}).catch(()=>{})}closePendingConsumers(){this._consumerCloseInProgress=!0,this._awaitQueue.push(async()=>{if(0===this._pendingCloseConsumers.size){_.debug("closePendingConsumers() | there is no Consumer to be closed");return}let e=Array.from(this._pendingCloseConsumers.values());this._pendingCloseConsumers.clear();try{await this._handler.stopReceiving(e.map(e=>e.localId))}catch(e){_.error("closePendingConsumers() | failed to close Consumers:",e)}},"transport.closePendingConsumers").then(()=>{this._consumerCloseInProgress=!1,this._pendingCloseConsumers.size>0&&this.closePendingConsumers()}).catch(()=>{})}handleHandler(){let e=this._handler;e.on("@connect",({dtlsParameters:e},t,r)=>{if(this._closed){r(new l.InvalidStateError("closed"));return}this.safeEmit("connect",{dtlsParameters:e},t,r)}),e.on("@icegatheringstatechange",e=>{e===this._iceGatheringState||(_.debug("ICE gathering state changed to %s",e),this._iceGatheringState=e,this._closed||this.safeEmit("icegatheringstatechange",e))}),e.on("@connectionstatechange",e=>{e===this._connectionState||(_.debug("connection state changed to %s",e),this._connectionState=e,this._closed||this.safeEmit("connectionstatechange",e))})}handleProducer(e){e.on("@close",()=>{this._producers.delete(e.id),this._closed||this._awaitQueue.push(async()=>await this._handler.stopSending(e.localId),"producer @close event").catch(e=>_.warn("producer.close() failed:%o",e))}),e.on("@pause",(t,r)=>{this._awaitQueue.push(async()=>await this._handler.pauseSending(e.localId),"producer @pause event").then(t).catch(r)}),e.on("@resume",(t,r)=>{this._awaitQueue.push(async()=>await this._handler.resumeSending(e.localId),"producer @resume event").then(t).catch(r)}),e.on("@replacetrack",(t,r,i)=>{this._awaitQueue.push(async()=>await this._handler.replaceTrack(e.localId,t),"producer @replacetrack event").then(r).catch(i)}),e.on("@setmaxspatiallayer",(t,r,i)=>{this._awaitQueue.push(async()=>await this._handler.setMaxSpatialLayer(e.localId,t),"producer @setmaxspatiallayer event").then(r).catch(i)}),e.on("@setrtpencodingparameters",(t,r,i)=>{this._awaitQueue.push(async()=>await this._handler.setRtpEncodingParameters(e.localId,t),"producer @setrtpencodingparameters event").then(r).catch(i)}),e.on("@getstats",(t,r)=>{if(this._closed)return r(new l.InvalidStateError("closed"));this._handler.getSenderStats(e.localId).then(t).catch(r)})}handleConsumer(e){e.on("@close",()=>{this._consumers.delete(e.id),this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.delete(e.id),this._closed||(this._pendingCloseConsumers.set(e.id,e),!1===this._consumerCloseInProgress&&this.closePendingConsumers())}),e.on("@pause",()=>{this._pendingResumeConsumers.has(e.id)&&this._pendingResumeConsumers.delete(e.id),this._pendingPauseConsumers.set(e.id,e),(0,o.default)(()=>{this._closed||!1!==this._consumerPauseInProgress||this.pausePendingConsumers()})}),e.on("@resume",()=>{this._pendingPauseConsumers.has(e.id)&&this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.set(e.id,e),(0,o.default)(()=>{this._closed||!1!==this._consumerResumeInProgress||this.resumePendingConsumers()})}),e.on("@getstats",(t,r)=>{if(this._closed)return r(new l.InvalidStateError("closed"));this._handler.getReceiverStats(e.localId).then(t).catch(r)})}handleDataProducer(e){e.on("@close",()=>{this._dataProducers.delete(e.id)})}handleDataConsumer(e){e.on("@close",()=>{this._dataConsumers.delete(e.id)})}}e.exports.Transport=w}),f("gQ1gG",function(e,t){Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.AwaitQueue=e.exports.AwaitQueueRemovedTaskError=e.exports.AwaitQueueStoppedError=void 0;let r=new(m("aiILj")).Logger;class i extends Error{constructor(e){super(e??"AwaitQueue stopped"),this.name="AwaitQueueStoppedError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,i)}}e.exports.AwaitQueueStoppedError=i;class s extends Error{constructor(e){super(e??"AwaitQueue task removed"),this.name="AwaitQueueRemovedTaskError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,s)}}e.exports.AwaitQueueRemovedTaskError=s,e.exports.AwaitQueue=class{constructor(){this.pendingTasks=new Map,this.nextTaskId=0,this.stopping=!1}get size(){return this.pendingTasks.size}async push(e,t){if(t=t??e.name,r.debug(`push() [name:${t}]`),"function"!=typeof e)throw TypeError("given task is not a function");if(t)try{Object.defineProperty(e,"name",{value:t})}catch(e){}return new Promise((i,s)=>{let a={id:this.nextTaskId++,task:e,name:t,enqueuedAt:Date.now(),executedAt:void 0,completed:!1,resolve:e=>{if(a.completed)return;a.completed=!0,this.pendingTasks.delete(a.id),r.debug(`resolving task [name:${a.name}]`),i(e);let[t]=this.pendingTasks.values();t&&!t.executedAt&&this.execute(t)},reject:e=>{if(!a.completed&&(a.completed=!0,this.pendingTasks.delete(a.id),r.debug(`rejecting task [name:${a.name}]: %s`,String(e)),s(e),!this.stopping)){let[e]=this.pendingTasks.values();e&&!e.executedAt&&this.execute(e)}}};this.pendingTasks.set(a.id,a),1===this.pendingTasks.size&&this.execute(a)})}stop(){for(let e of(r.debug("stop()"),this.stopping=!0,this.pendingTasks.values()))r.debug(`stop() | stopping task [name:${e.name}]`),e.reject(new i);this.stopping=!1}remove(e){r.debug(`remove() [taskIdx:${e}]`);let t=Array.from(this.pendingTasks.values())[e];if(!t){r.debug(`stop() | no task with given idx [taskIdx:${e}]`);return}t.reject(new s)}dump(){let e=Date.now(),t=0;return Array.from(this.pendingTasks.values()).map(r=>({idx:t++,task:r.task,name:r.name,enqueuedTime:r.executedAt?r.executedAt-r.enqueuedAt:e-r.enqueuedAt,executionTime:r.executedAt?e-r.executedAt:0}))}async execute(e){if(r.debug(`execute() [name:${e.name}]`),e.executedAt)throw Error("task already being executed");e.executedAt=Date.now();try{let t=await e.task();e.resolve(t)}catch(t){e.reject(t)}}}}),f("aiILj",function(e,t){Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.Logger=void 0;var r=m("1JjHr");let i="awaitqueue";e.exports.Logger=class{constructor(e){e?(this._debug=(0,r.default)(`${i}:${e}`),this._warn=(0,r.default)(`${i}:WARN:${e}`),this._error=(0,r.default)(`${i}:ERROR:${e}`)):(this._debug=(0,r.default)(i),this._warn=(0,r.default)(`${i}:WARN`),this._error=(0,r.default)(`${i}:ERROR`)),this._debug.log=console.info.bind(console),this._warn.log=console.warn.bind(console),this._error.log=console.error.bind(console)}get debug(){return this._debug}get warn(){return this._warn}get error(){return this._error}}}),f("9VcOR",function(e,t){/*! queue-microtask. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */let r;e.exports="function"==typeof queueMicrotask?queueMicrotask.bind("undefined"!=typeof window?window:l):e=>(r||(r=Promise.resolve())).then(e).catch(e=>setTimeout(()=>{throw e},0))}),f("3HSbG",function(e,t){Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.Consumer=void 0;var r=m("7Wufc"),i=m("jvUzX"),s=m("6yq6Z");let a=new r.Logger("Consumer");class n extends i.EnhancedEventEmitter{constructor({id:e,localId:t,producerId:r,rtpReceiver:s,track:n,rtpParameters:o,appData:c}){super(),this._closed=!1,this._observer=new i.EnhancedEventEmitter,a.debug("constructor()"),this._id=e,this._localId=t,this._producerId=r,this._rtpReceiver=s,this._track=n,this._rtpParameters=o,this._paused=!n.enabled,this._appData=c||{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get producerId(){return this._producerId}get closed(){return this._closed}get kind(){return this._track.kind}get rtpReceiver(){return this._rtpReceiver}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(a.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"))}transportClosed(){this._closed||(a.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new s.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(a.debug("pause()"),this._closed){a.error("pause() | Consumer closed");return}if(this._paused){a.debug("pause() | Consumer is already paused");return}this._paused=!0,this._track.enabled=!1,this.emit("@pause"),this._observer.safeEmit("pause")}resume(){if(a.debug("resume()"),this._closed){a.error("resume() | Consumer closed");return}if(!this._paused){a.debug("resume() | Consumer is already resumed");return}this._paused=!1,this._track.enabled=!0,this.emit("@resume"),this._observer.safeEmit("resume")}onTrackEnded(){a.debug('track "ended" event'),this.safeEmit("trackended"),this._observer.safeEmit("trackended")}handleTrack(){this._track.addEventListener("ended",this.onTrackEnded)}destroyTrack(){try{this._track.removeEventListener("ended",this.onTrackEnded),this._track.stop()}catch(e){}}}e.exports.Consumer=n}),f("gLRXX",function(e,t){Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.DataProducer=void 0;var r=m("7Wufc"),i=m("jvUzX"),s=m("6yq6Z");let a=new r.Logger("DataProducer");class n extends i.EnhancedEventEmitter{constructor({id:e,dataChannel:t,sctpStreamParameters:r,appData:s}){super(),this._closed=!1,this._observer=new i.EnhancedEventEmitter,a.debug("constructor()"),this._id=e,this._dataChannel=t,this._sctpStreamParameters=r,this._appData=s||{},this.handleDataChannel()}get id(){return this._id}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get bufferedAmount(){return this._dataChannel.bufferedAmount}get bufferedAmountLowThreshold(){return this._dataChannel.bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._dataChannel.bufferedAmountLowThreshold=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(a.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"))}transportClosed(){this._closed||(a.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}send(e){if(a.debug("send()"),this._closed)throw new s.InvalidStateError("closed");this._dataChannel.send(e)}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(a.debug('DataChannel "open" event'),this.safeEmit("open"))}),this._dataChannel.addEventListener("error",e=>{if(this._closed)return;let{error:t}=e;t||(t=Error("unknown DataChannel error")),"sctp-failure"===t.errorDetail?a.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",t.sctpCauseCode,t.message):a.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(a.warn('DataChannel "close" event'),this._closed=!0,this.emit("@close"),this.safeEmit("close"),this._observer.safeEmit("close"))}),this._dataChannel.addEventListener("message",()=>{this._closed||a.warn('DataChannel "message" event in a DataProducer, message discarded')}),this._dataChannel.addEventListener("bufferedamountlow",()=>{this._closed||this.safeEmit("bufferedamountlow")})}}e.exports.DataProducer=n}),f("420JU",function(e,t){Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.DataConsumer=void 0;var r=m("7Wufc"),i=m("jvUzX");let s=new r.Logger("DataConsumer");class a extends i.EnhancedEventEmitter{constructor({id:e,dataProducerId:t,dataChannel:r,sctpStreamParameters:a,appData:n}){super(),this._closed=!1,this._observer=new i.EnhancedEventEmitter,s.debug("constructor()"),this._id=e,this._dataProducerId=t,this._dataChannel=r,this._sctpStreamParameters=a,this._appData=n||{},this.handleDataChannel()}get id(){return this._id}get dataProducerId(){return this._dataProducerId}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get binaryType(){return this._dataChannel.binaryType}set binaryType(e){this._dataChannel.binaryType=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(s.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"))}transportClosed(){this._closed||(s.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(s.debug('DataChannel "open" event'),this.safeEmit("open"))}),this._dataChannel.addEventListener("error",e=>{if(this._closed)return;let{error:t}=e;t||(t=Error("unknown DataChannel error")),"sctp-failure"===t.errorDetail?s.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",t.sctpCauseCode,t.message):s.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(s.warn('DataChannel "close" event'),this._closed=!0,this.emit("@close"),this.safeEmit("close"),this._observer.safeEmit("close"))}),this._dataChannel.addEventListener("message",e=>{this._closed||this.safeEmit("message",e.data)})}}e.exports.DataConsumer=a}),f("9Mg8R",function(e,t){var r=e.exports&&e.exports.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,s)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),i=e.exports&&e.exports.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=e.exports&&e.exports.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s in e)"default"!==s&&Object.prototype.hasOwnProperty.call(e,s)&&r(t,e,s);return i(t,e),t};Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.Chrome111=void 0;let a=s(m("1HJ2f"));var n=m("7Wufc");let o=s(m("2fqxq")),c=s(m("kIl0y")),d=s(m("5opQr")),l=s(m("b4hOr")),p=s(m("bt0QK"));var h=m("6yq6Z"),u=m("6bVBA"),f=m("47IPL"),g=m("kBU2H");let v=new n.Logger("Chrome111"),_={OS:1024,MIS:1024};class b extends u.HandlerInterface{static createFactory(){return()=>new b}constructor(){super(),this._closed=!1,this._mapMidTransceiver=new Map,this._sendStream=new MediaStream,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Chrome111"}close(){if(v.debug("close()"),!this._closed){if(this._closed=!0,this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}}async getNativeRtpCapabilities(){v.debug("getNativeRtpCapabilities()");let e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan"});try{e.addTransceiver("audio"),e.addTransceiver("video");let t=await e.createOffer();try{e.close()}catch(e){}let r=a.parse(t.sdp),i=d.extractRtpCapabilities({sdpObject:r});return p.addNackSuppportForOpus(i),i}catch(t){try{e.close()}catch(e){}throw t}}async getNativeSctpCapabilities(){return v.debug("getNativeSctpCapabilities()"),{numStreams:_}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:n,additionalSettings:o,proprietaryConstraints:d,extendedRtpCapabilities:l}){this.assertNotClosed(),v.debug("run()"),this._direction=e,this._remoteSdp=new f.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s}),this._sendingRtpParametersByKind={audio:c.getSendingRtpParameters("audio",l),video:c.getSendingRtpParameters("video",l)},this._sendingRemoteRtpParametersByKind={audio:c.getSendingRemoteRtpParameters("audio",l),video:c.getSendingRemoteRtpParameters("video",l)},i.role&&"auto"!==i.role&&(this._forcedLocalDtlsRole="server"===i.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a||[],iceTransportPolicy:n||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan",...o},d),this._pc.addEventListener("icegatheringstatechange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)}),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",()=>{this.emit("@connectionstatechange",this._pc.connectionState)}):(v.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",()=>{switch(this._pc.iceConnectionState){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}}))}async updateIceServers(e){this.assertNotClosed(),v.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),v.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady){if("send"===this._direction){let e=await this._pc.createOffer({iceRestart:!0});v.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);let t={type:"answer",sdp:this._remoteSdp.getSdp()};v.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{let e={type:"offer",sdp:this._remoteSdp.getSdp()};v.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();v.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:i}){if(this.assertNotClosed(),this.assertSendDirection(),v.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),t&&t.length>1){let e=1;for(let r of t){let t=r.scalabilityMode?(0,g.parse)(r.scalabilityMode).temporalLayers:3;t>e&&(e=t)}t.forEach((t,r)=>{t.rid=`r${r}`,t.scalabilityMode=`L1T${e}`})}let s=o.clone(this._sendingRtpParametersByKind[e.kind]);s.codecs=c.reduceCodecs(s.codecs,i);let n=o.clone(this._sendingRemoteRtpParametersByKind[e.kind]);n.codecs=c.reduceCodecs(n.codecs,i);let p=this._remoteSdp.getNextMediaSectionIdx(),h=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:t}),u=await this._pc.createOffer(),m=a.parse(u.sdp);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),v.debug("send() | calling pc.setLocalDescription() [offer:%o]",u),await this._pc.setLocalDescription(u);let f=h.mid;s.mid=f;let _=(m=a.parse(this._pc.localDescription.sdp)).media[p.idx];if(s.rtcp.cname=d.getCname({offerMediaObject:_}),t){if(1===t.length){let e=l.getRtpEncodings({offerMediaObject:_});Object.assign(e[0],t[0]),s.encodings=e}else s.encodings=t}else s.encodings=l.getRtpEncodings({offerMediaObject:_});this._remoteSdp.send({offerMediaObject:_,reuseMid:p.reuseMid,offerRtpParameters:s,answerRtpParameters:n,codecOptions:r,extmapAllowMixed:!0});let b={type:"answer",sdp:this._remoteSdp.getSdp()};return v.debug("send() | calling pc.setRemoteDescription() [answer:%o]",b),await this._pc.setRemoteDescription(b),this._mapMidTransceiver.set(f,h),{localId:f,rtpParameters:s,rtpSender:h.sender}}async stopSending(e){if(this.assertSendDirection(),v.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch(e){}let r=await this._pc.createOffer();v.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};v.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),v.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();v.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};v.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),v.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();v.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};v.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?v.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):v.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),v.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((e,r)=>{r<=t?e.active=!0:e.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let s=await this._pc.createOffer();v.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let a={type:"answer",sdp:this._remoteSdp.getSdp()};v.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),v.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((e,r)=>{i.encodings[r]={...e,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let s=await this._pc.createOffer();v.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let a={type:"answer",sdp:this._remoteSdp.getSdp()};v.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:s}){this.assertNotClosed(),this.assertSendDirection();let n={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:s};v.debug("sendDataChannel() [options:%o]",n);let o=this._pc.createDataChannel(i,n);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%_.MIS,!this._hasDataChannelMediaSection){let e=await this._pc.createOffer(),t=a.parse(e.sdp),r=t.media.find(e=>"application"===e.type);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),v.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});let i={type:"answer",sdp:this._remoteSdp.getSdp()};v.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:o,sctpStreamParameters:{streamId:n.id,ordered:n.ordered,maxPacketLifeTime:n.maxPacketLifeTime,maxRetransmits:n.maxRetransmits}}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let t of e){let{trackId:e,kind:i,rtpParameters:s,streamId:a}=t;v.debug("receive() [trackId:%s, kind:%s]",e,i);let n=s.mid||String(this._mapMidTransceiver.size);r.set(e,n),this._remoteSdp.receive({mid:n,kind:i,offerRtpParameters:s,streamId:a||s.rtcp.cname,trackId:e})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};v.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);let s=await this._pc.createAnswer(),n=a.parse(s.sdp);for(let t of e){let{trackId:e,rtpParameters:i}=t,s=r.get(e),a=n.media.find(e=>String(e.mid)===s);d.applyCodecParameters({offerRtpParameters:i,answerMediaObject:a})}for(let i of(s={type:"answer",sdp:a.write(n)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:n}),v.debug("receive() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s),e)){let{trackId:e}=i,s=r.get(e),a=this._pc.getTransceivers().find(e=>e.mid===s);if(a)this._mapMidTransceiver.set(s,a),t.push({localId:s,track:a.receiver.track,rtpReceiver:a.receiver});else throw Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let t of e){v.debug("stopReceiving() [localId:%s]",t);let e=this._mapMidTransceiver.get(t);if(!e)throw Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};v.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();for(let t of(v.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r),e))this._mapMidTransceiver.delete(t)}async pauseReceiving(e){for(let t of(this.assertNotClosed(),this.assertRecvDirection(),e)){v.debug("pauseReceiving() [localId:%s]",t);let e=this._mapMidTransceiver.get(t);if(!e)throw Error("associated RTCRtpTransceiver not found");e.direction="inactive",this._remoteSdp.pauseMediaSection(t)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};v.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();v.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){for(let t of(this.assertNotClosed(),this.assertRecvDirection(),e)){v.debug("resumeReceiving() [localId:%s]",t);let e=this._mapMidTransceiver.get(t);if(!e)throw Error("associated RTCRtpTransceiver not found");e.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(t)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};v.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();v.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:s,maxPacketLifeTime:n,maxRetransmits:o}=e,c={negotiated:!0,id:i,ordered:s,maxPacketLifeTime:n,maxRetransmits:o,protocol:r};v.debug("receiveDataChannel() [options:%o]",c);let d=this._pc.createDataChannel(t,c);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let e={type:"offer",sdp:this._remoteSdp.getSdp()};v.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();if(!this._transportReady){let e=a.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}v.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=a.parse(this._pc.localDescription.sdp));let r=d.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)}),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new h.InvalidStateError("method called in a closed handler")}assertSendDirection(){if("send"!==this._direction)throw Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw Error('method can just be called for handlers with "recv" direction')}}e.exports.Chrome111=b}),f("1HJ2f",function(e,t){p(e.exports,"write",()=>r,e=>r=e),p(e.exports,"parse",()=>i,e=>i=e),p(e.exports,"parseParams",()=>s,e=>s=e),p(e.exports,"parseFmtpConfig",()=>a,e=>a=e),p(e.exports,"parsePayloads",()=>n,e=>n=e),p(e.exports,"parseRemoteCandidates",()=>o,e=>o=e),p(e.exports,"parseImageAttributes",()=>c,e=>c=e),p(e.exports,"parseSimulcastStreamList",()=>d,e=>d=e);var r,i,s,a,n,o,c,d,l=m("5e5es");r=m("3CYVM"),i=l.parse,s=l.parseParams,a=l.parseFmtpConfig,n=l.parsePayloads,o=l.parseRemoteCandidates,c=l.parseImageAttributes,d=l.parseSimulcastStreamList}),f("5e5es",function(e,t){p(e.exports,"parse",()=>r,e=>r=e),p(e.exports,"parseParams",()=>i,e=>i=e),p(e.exports,"parseFmtpConfig",()=>s,e=>s=e),p(e.exports,"parsePayloads",()=>a,e=>a=e),p(e.exports,"parseRemoteCandidates",()=>n,e=>n=e),p(e.exports,"parseImageAttributes",()=>o,e=>o=e),p(e.exports,"parseSimulcastStreamList",()=>c,e=>c=e);var r,i,s,a,n,o,c,d=function(e){return String(Number(e))===e?Number(e):e},l=function(e,t,r,i){if(i&&!r)t[i]=d(e[1]);else for(var s=0;s<r.length;s+=1)null!=e[s+1]&&(t[r[s]]=d(e[s+1]))},h=function(e,t,r){var i=e.name&&e.names;e.push&&!t[e.push]?t[e.push]=[]:i&&!t[e.name]&&(t[e.name]={});var s=e.push?{}:i?t[e.name]:t;l(r.match(e.reg),s,e.names,e.name),e.push&&t[e.push].push(s)},u=m("aPbew"),f=RegExp.prototype.test.bind(/^([a-z])=(.*)/);r=function(e){var t={},r=[],i=t;return e.split(/(\r\n|\r|\n)/).filter(f).forEach(function(e){var t=e[0],s=e.slice(2);"m"===t&&(r.push({rtp:[],fmtp:[]}),i=r[r.length-1]);for(var a=0;a<(u[t]||[]).length;a+=1){var n=u[t][a];if(n.reg.test(s))return h(n,i,s)}}),t.media=r,t};var g=function(e,t){var r=t.split(/=(.+)/,2);return 2===r.length?e[r[0]]=d(r[1]):1===r.length&&t.length>1&&(e[r[0]]=void 0),e};s=i=function(e){return e.split(/;\s?/).reduce(g,{})},a=function(e){return e.toString().split(" ").map(Number)},n=function(e){for(var t=[],r=e.split(" ").map(d),i=0;i<r.length;i+=3)t.push({component:r[i],ip:r[i+1],port:r[i+2]});return t},o=function(e){return e.split(" ").map(function(e){return e.substring(1,e.length-1).split(",").reduce(g,{})})},c=function(e){return e.split(";").map(function(e){return e.split(",").map(function(e){var t,r=!1;return"~"!==e[0]?t=d(e):(t=d(e.substring(1,e.length)),r=!0),{scid:t,paused:r}})})}}),f("aPbew",function(e,t){var r=e.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(e){return e.encoding?"rtpmap:%d %s/%s/%s":e.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(e){return null!=e.address?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\*|\d*) trr-int (\d*)/,names:["payload","value"],format:"rtcp-fb:%s trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,names:["payload","type","subtype"],format:function(e){return null!=e.subtype?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:(\d+)(?:\/(\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\S*)(?: (\S*))?/,names:["value","direction","encrypt-uri","uri","config"],format:function(e){return"extmap:%d"+(e.direction?"/%s":"%v")+(e["encrypt-uri"]?" %s":"%v")+" %s"+(e.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(e){return null!=e.sessionConfig?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\w*)/,format:"setup:%s"},{name:"connectionType",reg:/^connection:(new|existing)/,format:"connection:%s"},{name:"mid",reg:/^mid:([^\s]*)/,format:"mid:%s"},{name:"msid",reg:/^msid:(.*)/,format:"msid:%s"},{name:"ptime",reg:/^ptime:(\d*(?:\.\d*)*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\d*(?:\.\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*))?(?: network-id (\d*))?(?: network-cost (\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","tcptype","generation","network-id","network-cost"],format:function(e){var t="candidate:%s %d %s %d %s %d typ %s";return t+=(null!=e.raddr?" raddr %s rport %d":"%v%v")+(null!=e.tcptype?" tcptype %s":"%v"),null!=e.generation&&(t+=" generation %d"),t+=(null!=e["network-id"]?" network-id %d":"%v")+(null!=e["network-cost"]?" network-cost %d":"%v")}},{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:function(e){var t="ssrc:%d";return null!=e.attribute&&(t+=" %s",null!=e.value&&(t+=":%s")),t}},{push:"ssrcGroups",reg:/^ssrc-group:([\x21\x23\x24\x25\x26\x27\x2A\x2B\x2D\x2E\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)/},{name:"sctpmap",reg:/^sctpmap:([\w_/]*) (\S*)(?: (\S*))?/,names:["sctpmapNumber","app","maxMessageSize"],format:function(e){return null!=e.maxMessageSize?"sctpmap:%s %s %s":"sctpmap:%s %s"}},{name:"xGoogleFlag",reg:/^x-google-flag:([^\s]*)/,format:"x-google-flag:%s"},{push:"rids",reg:/^rid:([\d\w]+) (\w+)(?: ([\S| ]*))?/,names:["id","direction","params"],format:function(e){return e.params?"rid:%s %s %s":"rid:%s %s"}},{push:"imageattrs",reg:RegExp("^imageattr:(\\d+|\\*)[\\s\\t]+(send|recv)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*)(?:[\\s\\t]+(recv|send)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*))?"),names:["pt","dir1","attrs1","dir2","attrs2"],format:function(e){return"imageattr:%s %s %s"+(e.dir2?" %s %s":"")}},{name:"simulcast",reg:RegExp("^simulcast:(send|recv) ([a-zA-Z0-9\\-_~;,]+)(?:\\s?(send|recv) ([a-zA-Z0-9\\-_~;,]+))?$"),names:["dir1","list1","dir2","list2"],format:function(e){return"simulcast:%s %s"+(e.dir2?" %s %s":"")}},{name:"simulcast_03",reg:/^simulcast:[\s\t]+([\S+\s\t]+)$/,names:["value"],format:"simulcast: %s"},{name:"framerate",reg:/^framerate:(\d+(?:$|\.\d+))/,format:"framerate:%s"},{name:"sourceFilter",reg:/^source-filter: *(excl|incl) (\S*) (IP4|IP6|\*) (\S*) (.*)/,names:["filterMode","netType","addressTypes","destAddress","srcList"],format:"source-filter: %s %s %s %s %s"},{name:"bundleOnly",reg:/^(bundle-only)/},{name:"label",reg:/^label:(.+)/,format:"label:%s"},{name:"sctpPort",reg:/^sctp-port:(\d+)$/,format:"sctp-port:%s"},{name:"maxMessageSize",reg:/^max-message-size:(\d+)$/,format:"max-message-size:%s"},{push:"tsRefClocks",reg:/^ts-refclk:([^\s=]*)(?:=(\S*))?/,names:["clksrc","clksrcExt"],format:function(e){return"ts-refclk:%s"+(null!=e.clksrcExt?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(e){return"mediaclk:"+((null!=e.id?"id=%s %s":"%v%s")+(null!=e.mediaClockValue?"=%s":"")+(null!=e.rateNumerator?" rate=%s":""))+(null!=e.rateDenominator?"/%s":"")}},{name:"keywords",reg:/^keywds:(.+)$/,format:"keywds:%s"},{name:"content",reg:/^content:(.+)/,format:"content:%s"},{name:"bfcpFloorCtrl",reg:/^floorctrl:(c-only|s-only|c-s)/,format:"floorctrl:%s"},{name:"bfcpConfId",reg:/^confid:(\d+)/,format:"confid:%s"},{name:"bfcpUserId",reg:/^userid:(\d+)/,format:"userid:%s"},{name:"bfcpFloorId",reg:/^floorid:(.+) (?:m-stream|mstrm):(.+)/,names:["id","mStream"],format:"floorid:%s mstrm:%s"},{push:"invalid",names:["value"]}]};Object.keys(r).forEach(function(e){r[e].forEach(function(e){e.reg||(e.reg=/(.*)/),e.format||(e.format="%s")})})}),f("3CYVM",function(e,t){var r=m("aPbew"),i=/%[sdv%]/g,s=function(e){var t=1,r=arguments,s=r.length;return e.replace(i,function(e){if(t>=s)return e;var i=r[t];switch(t+=1,e){case"%%":return"%";case"%s":return String(i);case"%d":return Number(i);case"%v":return""}})},a=function(e,t,r){var i=[e+"="+(t.format instanceof Function?t.format(t.push?r:r[t.name]):t.format)];if(t.names)for(var a=0;a<t.names.length;a+=1){var n=t.names[a];t.name?i.push(r[t.name][n]):i.push(r[t.names[a]])}else i.push(r[t.name]);return s.apply(null,i)},n=["v","o","s","i","u","e","p","c","b","t","r","z","a"],o=["i","c","b","a"];e.exports=function(e,t){t=t||{},null==e.version&&(e.version=0),null==e.name&&(e.name=" "),e.media.forEach(function(e){null==e.payloads&&(e.payloads="")});var i=t.outerOrder||n,s=t.innerOrder||o,c=[];return i.forEach(function(t){r[t].forEach(function(r){r.name in e&&null!=e[r.name]?c.push(a(t,r,e)):r.push in e&&null!=e[r.push]&&e[r.push].forEach(function(e){c.push(a(t,r,e))})})}),e.media.forEach(function(e){c.push(a("m",r.m[0],e)),s.forEach(function(t){r[t].forEach(function(r){r.name in e&&null!=e[r.name]?c.push(a(t,r,e)):r.push in e&&null!=e[r.push]&&e[r.push].forEach(function(e){c.push(a(t,r,e))})})})}),c.join("\r\n")+"\r\n"}}),f("5opQr",function(e,t){var r=e.exports&&e.exports.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,s)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),i=e.exports&&e.exports.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=e.exports&&e.exports.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s in e)"default"!==s&&Object.prototype.hasOwnProperty.call(e,s)&&r(t,e,s);return i(t,e),t};Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.applyCodecParameters=e.exports.getCname=e.exports.extractDtlsParameters=e.exports.extractRtpCapabilities=void 0;let a=s(m("1HJ2f"));e.exports.extractRtpCapabilities=function({sdpObject:e}){let t=new Map,r=[],i=!1,s=!1;for(let n of e.media){let e=n.type;switch(e){case"audio":if(i)continue;i=!0;break;case"video":if(s)continue;s=!0;break;default:continue}for(let r of n.rtp){let i={kind:e,mimeType:`${e}/${r.codec}`,preferredPayloadType:r.payload,clockRate:r.rate,channels:r.encoding,parameters:{},rtcpFeedback:[]};t.set(i.preferredPayloadType,i)}for(let e of n.fmtp||[]){let r=a.parseParams(e.config),i=t.get(e.payload);i&&(r&&r.hasOwnProperty("profile-level-id")&&(r["profile-level-id"]=String(r["profile-level-id"])),i.parameters=r)}for(let r of n.rtcpFb||[]){let i={type:r.type,parameter:r.subtype};if(i.parameter||delete i.parameter,"*"!==r.payload){let e=t.get(r.payload);if(!e)continue;e.rtcpFeedback.push(i)}else for(let r of t.values())r.kind!==e||/.+\/rtx$/i.test(r.mimeType)||r.rtcpFeedback.push(i)}for(let t of n.ext||[]){if(t["encrypt-uri"])continue;let i={kind:e,uri:t.uri,preferredId:t.value};r.push(i)}}return{codecs:Array.from(t.values()),headerExtensions:r}},e.exports.extractDtlsParameters=function({sdpObject:e}){let t,r=e.setup,i=e.fingerprint;if(!r||!i){let t=(e.media||[]).find(e=>0!==e.port);t&&(r??(r=t.setup),i??(i=t.fingerprint))}if(r){if(!i)throw Error("no a=fingerprint found at SDP session or media level")}else throw Error("no a=setup found at SDP session or media level");switch(r){case"active":t="client";break;case"passive":t="server";break;case"actpass":t="auto"}return{role:t,fingerprints:[{algorithm:i.type,value:i.hash}]}},e.exports.getCname=function({offerMediaObject:e}){let t=(e.ssrcs||[]).find(e=>"cname"===e.attribute);return t?t.value:""},e.exports.applyCodecParameters=function({offerRtpParameters:e,answerMediaObject:t}){for(let r of e.codecs){let e=r.mimeType.toLowerCase();if("audio/opus"!==e||!(t.rtp||[]).find(e=>e.payload===r.payloadType))continue;t.fmtp=t.fmtp||[];let i=t.fmtp.find(e=>e.payload===r.payloadType);i||(i={payload:r.payloadType,config:""},t.fmtp.push(i));let s=a.parseParams(i.config);if("audio/opus"===e){let e=r.parameters["sprop-stereo"];void 0!==e&&(s.stereo=e?1:0)}for(let e of(i.config="",Object.keys(s)))i.config&&(i.config+=";"),i.config+=`${e}=${s[e]}`}}}),f("b4hOr",function(e,t){Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.addLegacySimulcast=e.exports.getRtpEncodings=void 0,e.exports.getRtpEncodings=function({offerMediaObject:e}){let t=new Set;for(let r of e.ssrcs||[]){let e=r.id;t.add(e)}if(0===t.size)throw Error("no a=ssrc lines found");let r=new Map;for(let i of e.ssrcGroups||[]){if("FID"!==i.semantics)continue;let[e,s]=i.ssrcs.split(/\s+/);e=Number(e),s=Number(s),t.has(e)&&(t.delete(e),t.delete(s),r.set(e,s))}for(let e of t)r.set(e,null);let i=[];for(let[e,t]of r){let r={ssrc:e};t&&(r.rtx={ssrc:t}),i.push(r)}return i},e.exports.addLegacySimulcast=function({offerMediaObject:e,numStreams:t}){let r;if(t<=1)throw TypeError("numStreams must be greater than 1");let i=(e.ssrcs||[]).find(e=>"msid"===e.attribute);if(!i)throw Error("a=ssrc line with msid information not found");let[s,a]=i.value.split(" "),n=i.id;(e.ssrcGroups||[]).some(e=>{if("FID"!==e.semantics)return!1;let t=e.ssrcs.split(/\s+/);return Number(t[0])===n&&(r=Number(t[1]),!0)});let o=e.ssrcs.find(e=>"cname"===e.attribute);if(!o)throw Error("a=ssrc line with cname information not found");let c=o.value,d=[],l=[];for(let e=0;e<t;++e)d.push(n+e),r&&l.push(r+e);e.ssrcGroups=[],e.ssrcs=[],e.ssrcGroups.push({semantics:"SIM",ssrcs:d.join(" ")});for(let t=0;t<d.length;++t){let r=d[t];e.ssrcs.push({id:r,attribute:"cname",value:c}),e.ssrcs.push({id:r,attribute:"msid",value:`${s} ${a}`})}for(let t=0;t<l.length;++t){let r=d[t],i=l[t];e.ssrcs.push({id:i,attribute:"cname",value:c}),e.ssrcs.push({id:i,attribute:"msid",value:`${s} ${a}`}),e.ssrcGroups.push({semantics:"FID",ssrcs:`${r} ${i}`})}}}),f("bt0QK",function(e,t){Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.addNackSuppportForOpus=void 0,e.exports.addNackSuppportForOpus=function(e){for(let t of e.codecs||[])"audio/opus"!==t.mimeType.toLowerCase()&&"audio/multiopus"!==t.mimeType.toLowerCase()||t.rtcpFeedback?.some(e=>"nack"===e.type&&!e.parameter)||(t.rtcpFeedback||(t.rtcpFeedback=[]),t.rtcpFeedback.push({type:"nack"}))}}),f("6bVBA",function(e,t){Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.HandlerInterface=void 0;var r=m("jvUzX");class i extends r.EnhancedEventEmitter{constructor(){super()}}e.exports.HandlerInterface=i}),f("47IPL",function(e,t){var r=e.exports&&e.exports.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,s)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),i=e.exports&&e.exports.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=e.exports&&e.exports.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s in e)"default"!==s&&Object.prototype.hasOwnProperty.call(e,s)&&r(t,e,s);return i(t,e),t};Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.RemoteSdp=void 0;let a=s(m("1HJ2f"));var n=m("7Wufc"),o=m("lUDTj");let c=new n.Logger("RemoteSdp");e.exports.RemoteSdp=class{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:i,plainRtpParameters:s,planB:a=!1}){if(this._mediaSections=[],this._midToIndex=new Map,this._iceParameters=e,this._iceCandidates=t,this._dtlsParameters=r,this._sctpParameters=i,this._plainRtpParameters=s,this._planB=a,this._sdpObject={version:0,origin:{address:"0.0.0.0",ipVer:4,netType:"IN",sessionId:1e4,sessionVersion:0,username:"mediasoup-client"},name:"-",timing:{start:0,stop:0},media:[]},e&&e.iceLite&&(this._sdpObject.icelite="ice-lite"),r){this._sdpObject.msidSemantic={semantic:"WMS",token:"*"};let e=this._dtlsParameters.fingerprints.length;this._sdpObject.fingerprint={type:r.fingerprints[e-1].algorithm,hash:r.fingerprints[e-1].value},this._sdpObject.groups=[{type:"BUNDLE",mids:""}]}s&&(this._sdpObject.origin.address=s.ip,this._sdpObject.origin.ipVer=s.ipVersion)}updateIceParameters(e){for(let t of(c.debug("updateIceParameters() [iceParameters:%o]",e),this._iceParameters=e,this._sdpObject.icelite=e.iceLite?"ice-lite":void 0,this._mediaSections))t.setIceParameters(e)}updateDtlsRole(e){for(let t of(c.debug("updateDtlsRole() [role:%s]",e),this._dtlsParameters.role=e,this._mediaSections))t.setDtlsRole(e)}getNextMediaSectionIdx(){for(let e=0;e<this._mediaSections.length;++e){let t=this._mediaSections[e];if(t.closed)return{idx:e,reuseMid:t.mid}}return{idx:this._mediaSections.length}}send({offerMediaObject:e,reuseMid:t,offerRtpParameters:r,answerRtpParameters:i,codecOptions:s,extmapAllowMixed:a=!1}){let n=new o.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,planB:this._planB,offerMediaObject:e,offerRtpParameters:r,answerRtpParameters:i,codecOptions:s,extmapAllowMixed:a});t?this._replaceMediaSection(n,t):this._midToIndex.has(n.mid)?this._replaceMediaSection(n):this._addMediaSection(n)}receive({mid:e,kind:t,offerRtpParameters:r,streamId:i,trackId:s}){let a;let n=this._midToIndex.get(e);if(void 0!==n&&(a=this._mediaSections[n]),a)a.planBReceive({offerRtpParameters:r,streamId:i,trackId:s}),this._replaceMediaSection(a);else{a=new o.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,planB:this._planB,mid:e,kind:t,offerRtpParameters:r,streamId:i,trackId:s});let n=this._mediaSections.find(e=>e.closed);n?this._replaceMediaSection(a,n.mid):this._addMediaSection(a)}}pauseMediaSection(e){this._findMediaSection(e).pause()}resumeSendingMediaSection(e){this._findMediaSection(e).resume()}resumeReceivingMediaSection(e){this._findMediaSection(e).resume()}disableMediaSection(e){this._findMediaSection(e).disable()}closeMediaSection(e){let t=this._findMediaSection(e);return e===this._firstMid?(c.debug("closeMediaSection() | cannot close first media section, disabling it instead [mid:%s]",e),this.disableMediaSection(e),!1):(t.close(),this._regenerateBundleMids(),!0)}muxMediaSectionSimulcast(e,t){let r=this._findMediaSection(e);r.muxSimulcastStreams(t),this._replaceMediaSection(r)}planBStopReceiving({mid:e,offerRtpParameters:t}){let r=this._findMediaSection(e);r.planBStopReceiving({offerRtpParameters:t}),this._replaceMediaSection(r)}sendSctpAssociation({offerMediaObject:e}){let t=new o.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,sctpParameters:this._sctpParameters,plainRtpParameters:this._plainRtpParameters,offerMediaObject:e});this._addMediaSection(t)}receiveSctpAssociation({oldDataChannelSpec:e=!1}={}){let t=new o.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,sctpParameters:this._sctpParameters,plainRtpParameters:this._plainRtpParameters,mid:"datachannel",kind:"application",oldDataChannelSpec:e});this._addMediaSection(t)}getSdp(){return this._sdpObject.origin.sessionVersion++,a.write(this._sdpObject)}_addMediaSection(e){this._firstMid||(this._firstMid=e.mid),this._mediaSections.push(e),this._midToIndex.set(e.mid,this._mediaSections.length-1),this._sdpObject.media.push(e.getObject()),this._regenerateBundleMids()}_replaceMediaSection(e,t){if("string"==typeof t){let r=this._midToIndex.get(t);if(void 0===r)throw Error(`no media section found for reuseMid '${t}'`);let i=this._mediaSections[r];this._mediaSections[r]=e,this._midToIndex.delete(i.mid),this._midToIndex.set(e.mid,r),this._sdpObject.media[r]=e.getObject(),this._regenerateBundleMids()}else{let t=this._midToIndex.get(e.mid);if(void 0===t)throw Error(`no media section found with mid '${e.mid}'`);this._mediaSections[t]=e,this._sdpObject.media[t]=e.getObject()}}_findMediaSection(e){let t=this._midToIndex.get(e);if(void 0===t)throw Error(`no media section found with mid '${e}'`);return this._mediaSections[t]}_regenerateBundleMids(){this._dtlsParameters&&(this._sdpObject.groups[0].mids=this._mediaSections.filter(e=>!e.closed).map(e=>e.mid).join(" "))}}}),f("lUDTj",function(e,t){var r=e.exports&&e.exports.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,s)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),i=e.exports&&e.exports.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=e.exports&&e.exports.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s in e)"default"!==s&&Object.prototype.hasOwnProperty.call(e,s)&&r(t,e,s);return i(t,e),t};Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.OfferMediaSection=e.exports.AnswerMediaSection=e.exports.MediaSection=void 0;let a=s(m("1HJ2f")),n=s(m("2fqxq"));class o{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,planB:i=!1}){if(this._mediaObject={},this._planB=i,e&&this.setIceParameters(e),t){for(let e of(this._mediaObject.candidates=[],t)){let t={};t.component=1,t.foundation=e.foundation,t.ip=e.address??e.ip,t.port=e.port,t.priority=e.priority,t.transport=e.protocol,t.type=e.type,e.tcpType&&(t.tcptype=e.tcpType),this._mediaObject.candidates.push(t)}this._mediaObject.endOfCandidates="end-of-candidates",this._mediaObject.iceOptions="renomination"}r&&this.setDtlsRole(r.role)}get mid(){return String(this._mediaObject.mid)}get closed(){return 0===this._mediaObject.port}getObject(){return this._mediaObject}setIceParameters(e){this._mediaObject.iceUfrag=e.usernameFragment,this._mediaObject.icePwd=e.password}pause(){this._mediaObject.direction="inactive"}disable(){this.pause(),delete this._mediaObject.ext,delete this._mediaObject.ssrcs,delete this._mediaObject.ssrcGroups,delete this._mediaObject.simulcast,delete this._mediaObject.simulcast_03,delete this._mediaObject.rids,delete this._mediaObject.extmapAllowMixed}close(){this.disable(),this._mediaObject.port=0}}function c(e){let t=RegExp("^(audio|video)/(.+)","i").exec(e.mimeType);if(!t)throw TypeError("invalid codec.mimeType");return t[2]}e.exports.MediaSection=o,e.exports.AnswerMediaSection=class extends o{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:i,plainRtpParameters:s,planB:a=!1,offerMediaObject:o,offerRtpParameters:d,answerRtpParameters:l,codecOptions:p,extmapAllowMixed:h=!1}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r,planB:a}),this._mediaObject.mid=String(o.mid),this._mediaObject.type=o.type,this._mediaObject.protocol=o.protocol,s?(this._mediaObject.connection={ip:s.ip,version:s.ipVersion},this._mediaObject.port=s.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},this._mediaObject.port=7),o.type){case"audio":case"video":for(let e of(this._mediaObject.direction="recvonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[],l.codecs)){let t={payload:e.payloadType,codec:c(e),rate:e.clockRate};e.channels>1&&(t.encoding=e.channels),this._mediaObject.rtp.push(t);let r=n.clone(e.parameters)??{},i=n.clone(e.rtcpFeedback)??[];if(p){let{opusStereo:t,opusFec:s,opusDtx:a,opusMaxPlaybackRate:n,opusMaxAverageBitrate:o,opusPtime:c,opusNack:l,videoGoogleStartBitrate:h,videoGoogleMaxBitrate:u,videoGoogleMinBitrate:m}=p,f=d.codecs.find(t=>t.payloadType===e.payloadType);switch(e.mimeType.toLowerCase()){case"audio/opus":case"audio/multiopus":void 0!==t&&(f.parameters["sprop-stereo"]=t?1:0,r.stereo=t?1:0),void 0!==s&&(f.parameters.useinbandfec=s?1:0,r.useinbandfec=s?1:0),void 0!==a&&(f.parameters.usedtx=a?1:0,r.usedtx=a?1:0),void 0!==n&&(r.maxplaybackrate=n),void 0!==o&&(r.maxaveragebitrate=o),void 0!==c&&(f.parameters.ptime=c,r.ptime=c),l||(f.rtcpFeedback=f.rtcpFeedback.filter(e=>"nack"!==e.type||e.parameter),i=i.filter(e=>"nack"!==e.type||e.parameter));break;case"video/vp8":case"video/vp9":case"video/h264":case"video/h265":void 0!==h&&(r["x-google-start-bitrate"]=h),void 0!==u&&(r["x-google-max-bitrate"]=u),void 0!==m&&(r["x-google-min-bitrate"]=m)}}let s={payload:e.payloadType,config:""};for(let e of Object.keys(r))s.config&&(s.config+=";"),s.config+=`${e}=${r[e]}`;for(let t of(s.config&&this._mediaObject.fmtp.push(s),i))this._mediaObject.rtcpFb.push({payload:e.payloadType,type:t.type,subtype:t.parameter})}for(let e of(this._mediaObject.payloads=l.codecs.map(e=>e.payloadType).join(" "),this._mediaObject.ext=[],l.headerExtensions))(o.ext||[]).some(t=>t.uri===e.uri)&&this._mediaObject.ext.push({uri:e.uri,value:e.id});if(h&&"extmap-allow-mixed"===o.extmapAllowMixed&&(this._mediaObject.extmapAllowMixed="extmap-allow-mixed"),o.simulcast)for(let e of(this._mediaObject.simulcast={dir1:"recv",list1:o.simulcast.list1},this._mediaObject.rids=[],o.rids||[]))"send"===e.direction&&this._mediaObject.rids.push({id:e.id,direction:"recv"});else if(o.simulcast_03)for(let e of(this._mediaObject.simulcast_03={value:o.simulcast_03.value.replace(/send/g,"recv")},this._mediaObject.rids=[],o.rids||[]))"send"===e.direction&&this._mediaObject.rids.push({id:e.id,direction:"recv"});this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize",this._planB&&"video"===this._mediaObject.type&&(this._mediaObject.xGoogleFlag="conference");break;case"application":"number"==typeof o.sctpPort?(this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=i.port,this._mediaObject.maxMessageSize=i.maxMessageSize):o.sctpmap&&(this._mediaObject.payloads=i.port,this._mediaObject.sctpmap={app:"webrtc-datachannel",sctpmapNumber:i.port,maxMessageSize:i.maxMessageSize})}}setDtlsRole(e){switch(e){case"client":this._mediaObject.setup="active";break;case"server":this._mediaObject.setup="passive";break;case"auto":this._mediaObject.setup="actpass"}}resume(){this._mediaObject.direction="recvonly"}muxSimulcastStreams(e){if(!this._mediaObject.simulcast||!this._mediaObject.simulcast.list1)return;let t={};for(let r of e)r.rid&&(t[r.rid]=r);let r=this._mediaObject.simulcast.list1,i=a.parseSimulcastStreamList(r);for(let e of i)for(let r of e)r.paused=!t[r.scid]?.active;this._mediaObject.simulcast.list1=i.map(e=>e.map(e=>`${e.paused?"~":""}${e.scid}`).join(",")).join(";")}},e.exports.OfferMediaSection=class extends o{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:i,plainRtpParameters:s,planB:a=!1,mid:n,kind:o,offerRtpParameters:d,streamId:l,trackId:p,oldDataChannelSpec:h=!1}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r,planB:a}),this._mediaObject.mid=String(n),this._mediaObject.type=o,s?(this._mediaObject.connection={ip:s.ip,version:s.ipVersion},this._mediaObject.protocol="RTP/AVP",this._mediaObject.port=s.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},i?this._mediaObject.protocol="UDP/DTLS/SCTP":this._mediaObject.protocol="UDP/TLS/RTP/SAVPF",this._mediaObject.port=7),o){case"audio":case"video":{for(let e of(this._mediaObject.direction="sendonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[],this._planB||(this._mediaObject.msid=`${l||"-"} ${p}`),d.codecs)){let t={payload:e.payloadType,codec:c(e),rate:e.clockRate};e.channels>1&&(t.encoding=e.channels),this._mediaObject.rtp.push(t);let r={payload:e.payloadType,config:""};for(let t of Object.keys(e.parameters))r.config&&(r.config+=";"),r.config+=`${t}=${e.parameters[t]}`;for(let t of(r.config&&this._mediaObject.fmtp.push(r),e.rtcpFeedback))this._mediaObject.rtcpFb.push({payload:e.payloadType,type:t.type,subtype:t.parameter})}for(let e of(this._mediaObject.payloads=d.codecs.map(e=>e.payloadType).join(" "),this._mediaObject.ext=[],d.headerExtensions))this._mediaObject.ext.push({uri:e.uri,value:e.id});this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";let e=d.encodings[0],t=e.ssrc,r=e.rtx&&e.rtx.ssrc?e.rtx.ssrc:void 0;this._mediaObject.ssrcs=[],this._mediaObject.ssrcGroups=[],d.rtcp.cname&&this._mediaObject.ssrcs.push({id:t,attribute:"cname",value:d.rtcp.cname}),this._planB&&this._mediaObject.ssrcs.push({id:t,attribute:"msid",value:`${l||"-"} ${p}`}),r&&(d.rtcp.cname&&this._mediaObject.ssrcs.push({id:r,attribute:"cname",value:d.rtcp.cname}),this._planB&&this._mediaObject.ssrcs.push({id:r,attribute:"msid",value:`${l||"-"} ${p}`}),this._mediaObject.ssrcGroups.push({semantics:"FID",ssrcs:`${t} ${r}`}));break}case"application":h?(this._mediaObject.payloads=i.port,this._mediaObject.sctpmap={app:"webrtc-datachannel",sctpmapNumber:i.port,maxMessageSize:i.maxMessageSize}):(this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=i.port,this._mediaObject.maxMessageSize=i.maxMessageSize)}}setDtlsRole(e){this._mediaObject.setup="actpass"}resume(){this._mediaObject.direction="sendonly"}planBReceive({offerRtpParameters:e,streamId:t,trackId:r}){let i=e.encodings[0],s=i.ssrc,a=i.rtx&&i.rtx.ssrc?i.rtx.ssrc:void 0,n=this._mediaObject.payloads.split(" ");for(let t of e.codecs){if(n.includes(String(t.payloadType)))continue;let e={payload:t.payloadType,codec:c(t),rate:t.clockRate};t.channels>1&&(e.encoding=t.channels),this._mediaObject.rtp.push(e);let r={payload:t.payloadType,config:""};for(let e of Object.keys(t.parameters))r.config&&(r.config+=";"),r.config+=`${e}=${t.parameters[e]}`;for(let e of(r.config&&this._mediaObject.fmtp.push(r),t.rtcpFeedback))this._mediaObject.rtcpFb.push({payload:t.payloadType,type:e.type,subtype:e.parameter})}this._mediaObject.payloads+=` ${e.codecs.filter(e=>!this._mediaObject.payloads.includes(e.payloadType)).map(e=>e.payloadType).join(" ")}`,this._mediaObject.payloads=this._mediaObject.payloads.trim(),e.rtcp.cname&&this._mediaObject.ssrcs.push({id:s,attribute:"cname",value:e.rtcp.cname}),this._mediaObject.ssrcs.push({id:s,attribute:"msid",value:`${t||"-"} ${r}`}),a&&(e.rtcp.cname&&this._mediaObject.ssrcs.push({id:a,attribute:"cname",value:e.rtcp.cname}),this._mediaObject.ssrcs.push({id:a,attribute:"msid",value:`${t||"-"} ${r}`}),this._mediaObject.ssrcGroups.push({semantics:"FID",ssrcs:`${s} ${a}`}))}planBStopReceiving({offerRtpParameters:e}){let t=e.encodings[0],r=t.ssrc,i=t.rtx&&t.rtx.ssrc?t.rtx.ssrc:void 0;this._mediaObject.ssrcs=this._mediaObject.ssrcs.filter(e=>e.id!==r&&e.id!==i),i&&(this._mediaObject.ssrcGroups=this._mediaObject.ssrcGroups.filter(e=>e.ssrcs!==`${r} ${i}`))}}}),f("kBU2H",function(e,t){Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.parse=void 0;let r=RegExp("^[LS]([1-9]\\d{0,1})T([1-9]\\d{0,1})");e.exports.parse=function(e){let t=r.exec(e||"");return t?{spatialLayers:Number(t[1]),temporalLayers:Number(t[2])}:{spatialLayers:1,temporalLayers:1}}}),f("6Pcmp",function(e,t){var r=e.exports&&e.exports.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,s)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),i=e.exports&&e.exports.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=e.exports&&e.exports.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s in e)"default"!==s&&Object.prototype.hasOwnProperty.call(e,s)&&r(t,e,s);return i(t,e),t};Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.Chrome74=void 0;let a=s(m("1HJ2f"));var n=m("7Wufc");let o=s(m("2fqxq")),c=s(m("kIl0y")),d=s(m("5opQr")),l=s(m("b4hOr")),p=s(m("bt0QK"));var h=m("6yq6Z"),u=m("6bVBA"),f=m("47IPL"),g=m("kBU2H");let v=new n.Logger("Chrome74"),_={OS:1024,MIS:1024};class b extends u.HandlerInterface{static createFactory(){return()=>new b}constructor(){super(),this._closed=!1,this._mapMidTransceiver=new Map,this._sendStream=new MediaStream,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Chrome74"}close(){if(v.debug("close()"),!this._closed){if(this._closed=!0,this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}}async getNativeRtpCapabilities(){v.debug("getNativeRtpCapabilities()");let e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan"});try{e.addTransceiver("audio"),e.addTransceiver("video");let t=await e.createOffer();try{e.close()}catch(e){}let r=a.parse(t.sdp),i=d.extractRtpCapabilities({sdpObject:r});return p.addNackSuppportForOpus(i),i}catch(t){try{e.close()}catch(e){}throw t}}async getNativeSctpCapabilities(){return v.debug("getNativeSctpCapabilities()"),{numStreams:_}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:n,additionalSettings:o,proprietaryConstraints:d,extendedRtpCapabilities:l}){v.debug("run()"),this._direction=e,this._remoteSdp=new f.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s}),this._sendingRtpParametersByKind={audio:c.getSendingRtpParameters("audio",l),video:c.getSendingRtpParameters("video",l)},this._sendingRemoteRtpParametersByKind={audio:c.getSendingRemoteRtpParameters("audio",l),video:c.getSendingRemoteRtpParameters("video",l)},i.role&&"auto"!==i.role&&(this._forcedLocalDtlsRole="server"===i.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a||[],iceTransportPolicy:n||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan",...o},d),this._pc.addEventListener("icegatheringstatechange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)}),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",()=>{this.emit("@connectionstatechange",this._pc.connectionState)}):(v.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",()=>{switch(this._pc.iceConnectionState){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}}))}async updateIceServers(e){this.assertNotClosed(),v.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),v.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady){if("send"===this._direction){let e=await this._pc.createOffer({iceRestart:!0});v.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);let t={type:"answer",sdp:this._remoteSdp.getSdp()};v.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{let e={type:"offer",sdp:this._remoteSdp.getSdp()};v.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();v.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:i}){let s;this.assertNotClosed(),this.assertSendDirection(),v.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),t&&t.length>1&&t.forEach((e,t)=>{e.rid=`r${t}`});let n=o.clone(this._sendingRtpParametersByKind[e.kind]);n.codecs=c.reduceCodecs(n.codecs,i);let p=o.clone(this._sendingRemoteRtpParametersByKind[e.kind]);p.codecs=c.reduceCodecs(p.codecs,i);let h=this._remoteSdp.getNextMediaSectionIdx(),u=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:t}),m=await this._pc.createOffer(),f=a.parse(m.sdp);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f});let _=!1,b=(0,g.parse)((t||[{}])[0].scalabilityMode);t&&1===t.length&&b.spatialLayers>1&&"video/vp9"===n.codecs[0].mimeType.toLowerCase()&&(v.debug("send() | enabling legacy simulcast for VP9 SVC"),_=!0,s=(f=a.parse(m.sdp)).media[h.idx],l.addLegacySimulcast({offerMediaObject:s,numStreams:b.spatialLayers}),m={type:"offer",sdp:a.write(f)}),v.debug("send() | calling pc.setLocalDescription() [offer:%o]",m),await this._pc.setLocalDescription(m);let w=u.mid;if(n.mid=w,s=(f=a.parse(this._pc.localDescription.sdp)).media[h.idx],n.rtcp.cname=d.getCname({offerMediaObject:s}),t){if(1===t.length){let e=l.getRtpEncodings({offerMediaObject:s});Object.assign(e[0],t[0]),_&&(e=[e[0]]),n.encodings=e}else n.encodings=t}else n.encodings=l.getRtpEncodings({offerMediaObject:s});if(n.encodings.length>1&&("video/vp8"===n.codecs[0].mimeType.toLowerCase()||"video/h264"===n.codecs[0].mimeType.toLowerCase()))for(let e of n.encodings)e.scalabilityMode?e.scalabilityMode=`L1T${b.temporalLayers}`:e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:s,reuseMid:h.reuseMid,offerRtpParameters:n,answerRtpParameters:p,codecOptions:r,extmapAllowMixed:!0});let y={type:"answer",sdp:this._remoteSdp.getSdp()};return v.debug("send() | calling pc.setRemoteDescription() [answer:%o]",y),await this._pc.setRemoteDescription(y),this._mapMidTransceiver.set(w,u),{localId:w,rtpParameters:n,rtpSender:u.sender}}async stopSending(e){if(this.assertSendDirection(),v.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch(e){}let r=await this._pc.createOffer();v.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};v.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),v.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();v.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};v.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),v.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();v.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};v.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?v.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):v.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),v.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((e,r)=>{r<=t?e.active=!0:e.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let s=await this._pc.createOffer();v.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let a={type:"answer",sdp:this._remoteSdp.getSdp()};v.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),v.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((e,r)=>{i.encodings[r]={...e,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let s=await this._pc.createOffer();v.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let a={type:"answer",sdp:this._remoteSdp.getSdp()};v.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:s}){this.assertNotClosed(),this.assertSendDirection();let n={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:s};v.debug("sendDataChannel() [options:%o]",n);let o=this._pc.createDataChannel(i,n);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%_.MIS,!this._hasDataChannelMediaSection){let e=await this._pc.createOffer(),t=a.parse(e.sdp),r=t.media.find(e=>"application"===e.type);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),v.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});let i={type:"answer",sdp:this._remoteSdp.getSdp()};v.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:o,sctpStreamParameters:{streamId:n.id,ordered:n.ordered,maxPacketLifeTime:n.maxPacketLifeTime,maxRetransmits:n.maxRetransmits}}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let t of e){let{trackId:e,kind:i,rtpParameters:s,streamId:a}=t;v.debug("receive() [trackId:%s, kind:%s]",e,i);let n=s.mid||String(this._mapMidTransceiver.size);r.set(e,n),this._remoteSdp.receive({mid:n,kind:i,offerRtpParameters:s,streamId:a||s.rtcp.cname,trackId:e})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};v.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);let s=await this._pc.createAnswer(),n=a.parse(s.sdp);for(let t of e){let{trackId:e,rtpParameters:i}=t,s=r.get(e),a=n.media.find(e=>String(e.mid)===s);d.applyCodecParameters({offerRtpParameters:i,answerMediaObject:a})}for(let i of(s={type:"answer",sdp:a.write(n)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:n}),v.debug("receive() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s),e)){let{trackId:e}=i,s=r.get(e),a=this._pc.getTransceivers().find(e=>e.mid===s);if(a)this._mapMidTransceiver.set(s,a),t.push({localId:s,track:a.receiver.track,rtpReceiver:a.receiver});else throw Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let t of e){v.debug("stopReceiving() [localId:%s]",t);let e=this._mapMidTransceiver.get(t);if(!e)throw Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};v.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();for(let t of(v.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r),e))this._mapMidTransceiver.delete(t)}async pauseReceiving(e){for(let t of(this.assertNotClosed(),this.assertRecvDirection(),e)){v.debug("pauseReceiving() [localId:%s]",t);let e=this._mapMidTransceiver.get(t);if(!e)throw Error("associated RTCRtpTransceiver not found");e.direction="inactive",this._remoteSdp.pauseMediaSection(t)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};v.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();v.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){for(let t of(this.assertNotClosed(),this.assertRecvDirection(),e)){v.debug("resumeReceiving() [localId:%s]",t);let e=this._mapMidTransceiver.get(t);if(!e)throw Error("associated RTCRtpTransceiver not found");e.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(t)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};v.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();v.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:s,maxPacketLifeTime:n,maxRetransmits:o}=e,c={negotiated:!0,id:i,ordered:s,maxPacketLifeTime:n,maxRetransmits:o,protocol:r};v.debug("receiveDataChannel() [options:%o]",c);let d=this._pc.createDataChannel(t,c);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let e={type:"offer",sdp:this._remoteSdp.getSdp()};v.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();if(!this._transportReady){let e=a.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}v.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=a.parse(this._pc.localDescription.sdp));let r=d.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)}),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new h.InvalidStateError("method called in a closed handler")}assertSendDirection(){if("send"!==this._direction)throw Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw Error('method can just be called for handlers with "recv" direction')}}e.exports.Chrome74=b}),f("031Hy",function(e,t){var r=e.exports&&e.exports.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,s)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),i=e.exports&&e.exports.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=e.exports&&e.exports.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s in e)"default"!==s&&Object.prototype.hasOwnProperty.call(e,s)&&r(t,e,s);return i(t,e),t};Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.Chrome70=void 0;let a=s(m("1HJ2f"));var n=m("7Wufc");let o=s(m("2fqxq")),c=s(m("kIl0y")),d=s(m("5opQr")),l=s(m("b4hOr"));var p=m("6bVBA"),h=m("47IPL"),u=m("kBU2H");let f=new n.Logger("Chrome70"),g={OS:1024,MIS:1024};class v extends p.HandlerInterface{static createFactory(){return()=>new v}constructor(){super(),this._mapMidTransceiver=new Map,this._sendStream=new MediaStream,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Chrome70"}close(){if(f.debug("close()"),this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}async getNativeRtpCapabilities(){f.debug("getNativeRtpCapabilities()");let e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan"});try{e.addTransceiver("audio"),e.addTransceiver("video");let t=await e.createOffer();try{e.close()}catch(e){}let r=a.parse(t.sdp);return d.extractRtpCapabilities({sdpObject:r})}catch(t){try{e.close()}catch(e){}throw t}}async getNativeSctpCapabilities(){return f.debug("getNativeSctpCapabilities()"),{numStreams:g}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:n,additionalSettings:o,proprietaryConstraints:d,extendedRtpCapabilities:l}){f.debug("run()"),this._direction=e,this._remoteSdp=new h.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s}),this._sendingRtpParametersByKind={audio:c.getSendingRtpParameters("audio",l),video:c.getSendingRtpParameters("video",l)},this._sendingRemoteRtpParametersByKind={audio:c.getSendingRemoteRtpParameters("audio",l),video:c.getSendingRemoteRtpParameters("video",l)},i.role&&"auto"!==i.role&&(this._forcedLocalDtlsRole="server"===i.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a||[],iceTransportPolicy:n||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan",...o},d),this._pc.addEventListener("icegatheringstatechange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)}),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",()=>{this.emit("@connectionstatechange",this._pc.connectionState)}):this._pc.addEventListener("iceconnectionstatechange",()=>{switch(f.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.iceConnectionState){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}})}async updateIceServers(e){f.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(f.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady){if("send"===this._direction){let e=await this._pc.createOffer({iceRestart:!0});f.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);let t={type:"answer",sdp:this._remoteSdp.getSdp()};f.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{let e={type:"offer",sdp:this._remoteSdp.getSdp()};f.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();f.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}}async getTransportStats(){return this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:i}){let s;this.assertSendDirection(),f.debug("send() [kind:%s, track.id:%s]",e.kind,e.id);let n=o.clone(this._sendingRtpParametersByKind[e.kind]);n.codecs=c.reduceCodecs(n.codecs,i);let p=o.clone(this._sendingRemoteRtpParametersByKind[e.kind]);p.codecs=c.reduceCodecs(p.codecs,i);let h=this._remoteSdp.getNextMediaSectionIdx(),m=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream]}),g=await this._pc.createOffer(),v=a.parse(g.sdp);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:v}),t&&t.length>1&&(f.debug("send() | enabling legacy simulcast"),s=(v=a.parse(g.sdp)).media[h.idx],l.addLegacySimulcast({offerMediaObject:s,numStreams:t.length}),g={type:"offer",sdp:a.write(v)});let _=!1,b=(0,u.parse)((t||[{}])[0].scalabilityMode);if(t&&1===t.length&&b.spatialLayers>1&&"video/vp9"===n.codecs[0].mimeType.toLowerCase()&&(f.debug("send() | enabling legacy simulcast for VP9 SVC"),_=!0,s=(v=a.parse(g.sdp)).media[h.idx],l.addLegacySimulcast({offerMediaObject:s,numStreams:b.spatialLayers}),g={type:"offer",sdp:a.write(v)}),f.debug("send() | calling pc.setLocalDescription() [offer:%o]",g),await this._pc.setLocalDescription(g),t){f.debug("send() | applying given encodings");let e=m.sender.getParameters();for(let r=0;r<(e.encodings||[]).length;++r){let i=e.encodings[r],s=t[r];if(!s)break;e.encodings[r]=Object.assign(i,s)}await m.sender.setParameters(e)}let w=m.mid;if(n.mid=w,s=(v=a.parse(this._pc.localDescription.sdp)).media[h.idx],n.rtcp.cname=d.getCname({offerMediaObject:s}),n.encodings=l.getRtpEncodings({offerMediaObject:s}),t)for(let e=0;e<n.encodings.length;++e)t[e]&&Object.assign(n.encodings[e],t[e]);if(_&&(n.encodings=[n.encodings[0]]),n.encodings.length>1&&("video/vp8"===n.codecs[0].mimeType.toLowerCase()||"video/h264"===n.codecs[0].mimeType.toLowerCase()))for(let e of n.encodings)e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:s,reuseMid:h.reuseMid,offerRtpParameters:n,answerRtpParameters:p,codecOptions:r});let y={type:"answer",sdp:this._remoteSdp.getSdp()};return f.debug("send() | calling pc.setRemoteDescription() [answer:%o]",y),await this._pc.setRemoteDescription(y),this._mapMidTransceiver.set(w,m),{localId:w,rtpParameters:n,rtpSender:m.sender}}async stopSending(e){this.assertSendDirection(),f.debug("stopSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch(e){}let r=await this._pc.createOffer();f.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};f.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){}async resumeSending(e){}async replaceTrack(e,t){this.assertSendDirection(),t?f.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):f.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertSendDirection(),f.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((e,r)=>{r<=t?e.active=!0:e.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let s=await this._pc.createOffer();f.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let a={type:"answer",sdp:this._remoteSdp.getSdp()};f.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertSendDirection(),f.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((e,r)=>{i.encodings[r]={...e,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let s=await this._pc.createOffer();f.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let a={type:"answer",sdp:this._remoteSdp.getSdp()};f.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:s}){this.assertSendDirection();let n={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmitTime:t,maxRetransmits:r,protocol:s};f.debug("sendDataChannel() [options:%o]",n);let o=this._pc.createDataChannel(i,n);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%g.MIS,!this._hasDataChannelMediaSection){let e=await this._pc.createOffer(),t=a.parse(e.sdp),r=t.media.find(e=>"application"===e.type);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),f.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});let i={type:"answer",sdp:this._remoteSdp.getSdp()};f.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:o,sctpStreamParameters:{streamId:n.id,ordered:n.ordered,maxPacketLifeTime:n.maxPacketLifeTime,maxRetransmits:n.maxRetransmits}}}async receive(e){this.assertRecvDirection();let t=[],r=new Map;for(let t of e){let{trackId:e,kind:i,rtpParameters:s,streamId:a}=t;f.debug("receive() [trackId:%s, kind:%s]",e,i);let n=s.mid||String(this._mapMidTransceiver.size);r.set(e,n),this._remoteSdp.receive({mid:n,kind:i,offerRtpParameters:s,streamId:a||s.rtcp.cname,trackId:e})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};f.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);let s=await this._pc.createAnswer(),n=a.parse(s.sdp);for(let t of e){let{trackId:e,rtpParameters:i}=t,s=r.get(e),a=n.media.find(e=>String(e.mid)===s);d.applyCodecParameters({offerRtpParameters:i,answerMediaObject:a})}for(let i of(s={type:"answer",sdp:a.write(n)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:n}),f.debug("receive() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s),e)){let{trackId:e}=i,s=r.get(e),a=this._pc.getTransceivers().find(e=>e.mid===s);if(!a)throw Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(s,a),t.push({localId:s,track:a.receiver.track,rtpReceiver:a.receiver})}return t}async stopReceiving(e){for(let t of(this.assertRecvDirection(),e)){f.debug("stopReceiving() [localId:%s]",t);let e=this._mapMidTransceiver.get(t);if(!e)throw Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};f.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();for(let t of(f.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r),e))this._mapMidTransceiver.delete(t)}async pauseReceiving(e){}async resumeReceiving(e){}async getReceiverStats(e){this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertRecvDirection();let{streamId:i,ordered:s,maxPacketLifeTime:n,maxRetransmits:o}=e,c={negotiated:!0,id:i,ordered:s,maxPacketLifeTime:n,maxRetransmitTime:n,maxRetransmits:o,protocol:r};f.debug("receiveDataChannel() [options:%o]",c);let d=this._pc.createDataChannel(t,c);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let e={type:"offer",sdp:this._remoteSdp.getSdp()};f.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();if(!this._transportReady){let e=a.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}f.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=a.parse(this._pc.localDescription.sdp));let r=d.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)}),this._transportReady=!0}assertSendDirection(){if("send"!==this._direction)throw Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw Error('method can just be called for handlers with "recv" direction')}}e.exports.Chrome70=v}),f("axf12",function(e,t){var r=e.exports&&e.exports.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,s)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),i=e.exports&&e.exports.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=e.exports&&e.exports.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s in e)"default"!==s&&Object.prototype.hasOwnProperty.call(e,s)&&r(t,e,s);return i(t,e),t};Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.Chrome67=void 0;let a=s(m("1HJ2f"));var n=m("7Wufc");let o=s(m("2fqxq")),c=s(m("kIl0y")),d=s(m("5opQr")),l=s(m("157SQ"));var p=m("6bVBA"),h=m("47IPL");let u=new n.Logger("Chrome67"),f={OS:1024,MIS:1024};class g extends p.HandlerInterface{static createFactory(){return()=>new g}constructor(){super(),this._sendStream=new MediaStream,this._mapSendLocalIdRtpSender=new Map,this._nextSendLocalId=0,this._mapRecvLocalIdInfo=new Map,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Chrome67"}close(){if(u.debug("close()"),this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}async getNativeRtpCapabilities(){u.debug("getNativeRtpCapabilities()");let e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"plan-b"});try{let t=await e.createOffer({offerToReceiveAudio:!0,offerToReceiveVideo:!0});try{e.close()}catch(e){}let r=a.parse(t.sdp);return d.extractRtpCapabilities({sdpObject:r})}catch(t){try{e.close()}catch(e){}throw t}}async getNativeSctpCapabilities(){return u.debug("getNativeSctpCapabilities()"),{numStreams:f}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:n,additionalSettings:o,proprietaryConstraints:d,extendedRtpCapabilities:l}){u.debug("run()"),this._direction=e,this._remoteSdp=new h.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s,planB:!0}),this._sendingRtpParametersByKind={audio:c.getSendingRtpParameters("audio",l),video:c.getSendingRtpParameters("video",l)},this._sendingRemoteRtpParametersByKind={audio:c.getSendingRemoteRtpParameters("audio",l),video:c.getSendingRemoteRtpParameters("video",l)},i.role&&"auto"!==i.role&&(this._forcedLocalDtlsRole="server"===i.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a||[],iceTransportPolicy:n||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"plan-b",...o},d),this._pc.addEventListener("icegatheringstatechange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)}),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",()=>{this.emit("@connectionstatechange",this._pc.connectionState)}):this._pc.addEventListener("iceconnectionstatechange",()=>{switch(u.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.iceConnectionState){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}})}async updateIceServers(e){u.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(u.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady){if("send"===this._direction){let e=await this._pc.createOffer({iceRestart:!0});u.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);let t={type:"answer",sdp:this._remoteSdp.getSdp()};u.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{let e={type:"offer",sdp:this._remoteSdp.getSdp()};u.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();u.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}}async getTransportStats(){return this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:i}){let s;this.assertSendDirection(),u.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),i&&u.warn("send() | codec selection is not available in %s handler",this.name),this._sendStream.addTrack(e),this._pc.addTrack(e,this._sendStream);let n=await this._pc.createOffer(),p=a.parse(n.sdp),h=o.clone(this._sendingRtpParametersByKind[e.kind]);h.codecs=c.reduceCodecs(h.codecs);let m=o.clone(this._sendingRemoteRtpParametersByKind[e.kind]);if(m.codecs=c.reduceCodecs(m.codecs),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:p}),"video"===e.kind&&t&&t.length>1&&(u.debug("send() | enabling simulcast"),s=(p=a.parse(n.sdp)).media.find(e=>"video"===e.type),l.addLegacySimulcast({offerMediaObject:s,track:e,numStreams:t.length}),n={type:"offer",sdp:a.write(p)}),u.debug("send() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),s=(p=a.parse(this._pc.localDescription.sdp)).media.find(t=>t.type===e.kind),h.rtcp.cname=d.getCname({offerMediaObject:s}),h.encodings=l.getRtpEncodings({offerMediaObject:s,track:e}),t)for(let e=0;e<h.encodings.length;++e)t[e]&&Object.assign(h.encodings[e],t[e]);if(h.encodings.length>1&&"video/vp8"===h.codecs[0].mimeType.toLowerCase())for(let e of h.encodings)e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:s,offerRtpParameters:h,answerRtpParameters:m,codecOptions:r});let f={type:"answer",sdp:this._remoteSdp.getSdp()};u.debug("send() | calling pc.setRemoteDescription() [answer:%o]",f),await this._pc.setRemoteDescription(f);let g=String(this._nextSendLocalId);this._nextSendLocalId++;let v=this._pc.getSenders().find(t=>t.track===e);return this._mapSendLocalIdRtpSender.set(g,v),{localId:g,rtpParameters:h,rtpSender:v}}async stopSending(e){this.assertSendDirection(),u.debug("stopSending() [localId:%s]",e);let t=this._mapSendLocalIdRtpSender.get(e);if(!t)throw Error("associated RTCRtpSender not found");this._pc.removeTrack(t),t.track&&this._sendStream.removeTrack(t.track),this._mapSendLocalIdRtpSender.delete(e);let r=await this._pc.createOffer();u.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r);try{await this._pc.setLocalDescription(r)}catch(e){if(0===this._sendStream.getTracks().length){u.warn("stopSending() | ignoring expected error due no sending tracks: %s",e.toString());return}throw e}if("stable"===this._pc.signalingState)return;let i={type:"answer",sdp:this._remoteSdp.getSdp()};u.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async pauseSending(e){}async resumeSending(e){}async replaceTrack(e,t){this.assertSendDirection(),t?u.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):u.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapSendLocalIdRtpSender.get(e);if(!r)throw Error("associated RTCRtpSender not found");let i=r.track;await r.replaceTrack(t),i&&this._sendStream.removeTrack(i),t&&this._sendStream.addTrack(t)}async setMaxSpatialLayer(e,t){this.assertSendDirection(),u.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapSendLocalIdRtpSender.get(e);if(!r)throw Error("associated RTCRtpSender not found");let i=r.getParameters();i.encodings.forEach((e,r)=>{r<=t?e.active=!0:e.active=!1}),await r.setParameters(i)}async setRtpEncodingParameters(e,t){this.assertSendDirection(),u.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapSendLocalIdRtpSender.get(e);if(!r)throw Error("associated RTCRtpSender not found");let i=r.getParameters();i.encodings.forEach((e,r)=>{i.encodings[r]={...e,...t}}),await r.setParameters(i)}async getSenderStats(e){this.assertSendDirection();let t=this._mapSendLocalIdRtpSender.get(e);if(!t)throw Error("associated RTCRtpSender not found");return t.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:s}){this.assertSendDirection();let n={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmitTime:t,maxRetransmits:r,protocol:s};u.debug("sendDataChannel() [options:%o]",n);let o=this._pc.createDataChannel(i,n);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%f.MIS,!this._hasDataChannelMediaSection){let e=await this._pc.createOffer(),t=a.parse(e.sdp),r=t.media.find(e=>"application"===e.type);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),u.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});let i={type:"answer",sdp:this._remoteSdp.getSdp()};u.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:o,sctpStreamParameters:{streamId:n.id,ordered:n.ordered,maxPacketLifeTime:n.maxPacketLifeTime,maxRetransmits:n.maxRetransmits}}}async receive(e){this.assertRecvDirection();let t=[];for(let t of e){let{trackId:e,kind:r,rtpParameters:i,streamId:s}=t;u.debug("receive() [trackId:%s, kind:%s]",e,r),this._remoteSdp.receive({mid:r,kind:r,offerRtpParameters:i,streamId:s||i.rtcp.cname,trackId:e})}let r={type:"offer",sdp:this._remoteSdp.getSdp()};u.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);let i=await this._pc.createAnswer(),s=a.parse(i.sdp);for(let t of e){let{kind:e,rtpParameters:r}=t,i=s.media.find(t=>String(t.mid)===e);d.applyCodecParameters({offerRtpParameters:r,answerMediaObject:i})}for(let r of(i={type:"answer",sdp:a.write(s)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:s}),u.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i),e)){let{kind:e,trackId:i,rtpParameters:s}=r,a=this._pc.getReceivers().find(e=>e.track&&e.track.id===i);if(!a)throw Error("new RTCRtpReceiver not");this._mapRecvLocalIdInfo.set(i,{mid:e,rtpParameters:s,rtpReceiver:a}),t.push({localId:i,track:a.track,rtpReceiver:a})}return t}async stopReceiving(e){for(let t of(this.assertRecvDirection(),e)){u.debug("stopReceiving() [localId:%s]",t);let{mid:e,rtpParameters:r}=this._mapRecvLocalIdInfo.get(t)||{};this._mapRecvLocalIdInfo.delete(t),this._remoteSdp.planBStopReceiving({mid:e,offerRtpParameters:r})}let t={type:"offer",sdp:this._remoteSdp.getSdp()};u.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();u.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async pauseReceiving(e){}async resumeReceiving(e){}async getReceiverStats(e){this.assertRecvDirection();let{rtpReceiver:t}=this._mapRecvLocalIdInfo.get(e)||{};if(!t)throw Error("associated RTCRtpReceiver not found");return t.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertRecvDirection();let{streamId:i,ordered:s,maxPacketLifeTime:n,maxRetransmits:o}=e,c={negotiated:!0,id:i,ordered:s,maxPacketLifeTime:n,maxRetransmitTime:n,maxRetransmits:o,protocol:r};u.debug("receiveDataChannel() [options:%o]",c);let d=this._pc.createDataChannel(t,c);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation({oldDataChannelSpec:!0});let e={type:"offer",sdp:this._remoteSdp.getSdp()};u.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();if(!this._transportReady){let e=a.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}u.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=a.parse(this._pc.localDescription.sdp));let r=d.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)}),this._transportReady=!0}assertSendDirection(){if("send"!==this._direction)throw Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw Error('method can just be called for handlers with "recv" direction')}}e.exports.Chrome67=g}),f("157SQ",function(e,t){Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.addLegacySimulcast=e.exports.getRtpEncodings=void 0,e.exports.getRtpEncodings=function({offerMediaObject:e,track:t}){let r;let i=new Set;for(let s of e.ssrcs||[])if("msid"===s.attribute&&s.value.split(" ")[1]===t.id){let e=s.id;i.add(e),r||(r=e)}if(0===i.size)throw Error(`a=ssrc line with msid information not found [track.id:${t.id}]`);let s=new Map;for(let t of e.ssrcGroups||[]){if("FID"!==t.semantics)continue;let[e,r]=t.ssrcs.split(/\s+/);e=Number(e),r=Number(r),i.has(e)&&(i.delete(e),i.delete(r),s.set(e,r))}for(let e of i)s.set(e,null);let a=[];for(let[e,t]of s){let r={ssrc:e};t&&(r.rtx={ssrc:t}),a.push(r)}return a},e.exports.addLegacySimulcast=function({offerMediaObject:e,track:t,numStreams:r}){let i,s,a;if(r<=1)throw TypeError("numStreams must be greater than 1");if(!(e.ssrcs||[]).find(e=>"msid"===e.attribute&&e.value.split(" ")[1]===t.id&&(i=e.id,a=e.value.split(" ")[0],!0)))throw Error(`a=ssrc line with msid information not found [track.id:${t.id}]`);(e.ssrcGroups||[]).some(e=>{if("FID"!==e.semantics)return!1;let t=e.ssrcs.split(/\s+/);return Number(t[0])===i&&(s=Number(t[1]),!0)});let n=e.ssrcs.find(e=>"cname"===e.attribute&&e.id===i);if(!n)throw Error(`a=ssrc line with cname information not found [track.id:${t.id}]`);let o=n.value,c=[],d=[];for(let e=0;e<r;++e)c.push(i+e),s&&d.push(s+e);e.ssrcGroups=e.ssrcGroups||[],e.ssrcs=e.ssrcs||[],e.ssrcGroups.push({semantics:"SIM",ssrcs:c.join(" ")});for(let r=0;r<c.length;++r){let i=c[r];e.ssrcs.push({id:i,attribute:"cname",value:o}),e.ssrcs.push({id:i,attribute:"msid",value:`${a} ${t.id}`})}for(let r=0;r<d.length;++r){let i=c[r],s=d[r];e.ssrcs.push({id:s,attribute:"cname",value:o}),e.ssrcs.push({id:s,attribute:"msid",value:`${a} ${t.id}`}),e.ssrcGroups.push({semantics:"FID",ssrcs:`${i} ${s}`})}}}),f("cVXKr",function(e,t){var r=e.exports&&e.exports.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,s)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),i=e.exports&&e.exports.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=e.exports&&e.exports.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s in e)"default"!==s&&Object.prototype.hasOwnProperty.call(e,s)&&r(t,e,s);return i(t,e),t};Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.Chrome55=void 0;let a=s(m("1HJ2f"));var n=m("7Wufc"),o=m("6yq6Z");let c=s(m("2fqxq")),d=s(m("kIl0y")),l=s(m("5opQr")),p=s(m("157SQ"));var h=m("6bVBA"),u=m("47IPL");let f=new n.Logger("Chrome55"),g={OS:1024,MIS:1024};class v extends h.HandlerInterface{static createFactory(){return()=>new v}constructor(){super(),this._sendStream=new MediaStream,this._mapSendLocalIdTrack=new Map,this._nextSendLocalId=0,this._mapRecvLocalIdInfo=new Map,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Chrome55"}close(){if(f.debug("close()"),this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}async getNativeRtpCapabilities(){f.debug("getNativeRtpCapabilities()");let e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"plan-b"});try{let t=await e.createOffer({offerToReceiveAudio:!0,offerToReceiveVideo:!0});try{e.close()}catch(e){}let r=a.parse(t.sdp);return l.extractRtpCapabilities({sdpObject:r})}catch(t){try{e.close()}catch(e){}throw t}}async getNativeSctpCapabilities(){return f.debug("getNativeSctpCapabilities()"),{numStreams:g}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:n,additionalSettings:o,proprietaryConstraints:c,extendedRtpCapabilities:l}){f.debug("run()"),this._direction=e,this._remoteSdp=new u.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s,planB:!0}),this._sendingRtpParametersByKind={audio:d.getSendingRtpParameters("audio",l),video:d.getSendingRtpParameters("video",l)},this._sendingRemoteRtpParametersByKind={audio:d.getSendingRemoteRtpParameters("audio",l),video:d.getSendingRemoteRtpParameters("video",l)},i.role&&"auto"!==i.role&&(this._forcedLocalDtlsRole="server"===i.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a||[],iceTransportPolicy:n||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"plan-b",...o},c),this._pc.addEventListener("icegatheringstatechange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)}),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",()=>{this.emit("@connectionstatechange",this._pc.connectionState)}):this._pc.addEventListener("iceconnectionstatechange",()=>{switch(f.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.iceConnectionState){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}})}async updateIceServers(e){f.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(f.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady){if("send"===this._direction){let e=await this._pc.createOffer({iceRestart:!0});f.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);let t={type:"answer",sdp:this._remoteSdp.getSdp()};f.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{let e={type:"offer",sdp:this._remoteSdp.getSdp()};f.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();f.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}}async getTransportStats(){return this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:i}){let s;this.assertSendDirection(),f.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),i&&f.warn("send() | codec selection is not available in %s handler",this.name),this._sendStream.addTrack(e),this._pc.addStream(this._sendStream);let n=await this._pc.createOffer(),o=a.parse(n.sdp),h=c.clone(this._sendingRtpParametersByKind[e.kind]);h.codecs=d.reduceCodecs(h.codecs);let u=c.clone(this._sendingRemoteRtpParametersByKind[e.kind]);if(u.codecs=d.reduceCodecs(u.codecs),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),"video"===e.kind&&t&&t.length>1&&(f.debug("send() | enabling simulcast"),s=(o=a.parse(n.sdp)).media.find(e=>"video"===e.type),p.addLegacySimulcast({offerMediaObject:s,track:e,numStreams:t.length}),n={type:"offer",sdp:a.write(o)}),f.debug("send() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),s=(o=a.parse(this._pc.localDescription.sdp)).media.find(t=>t.type===e.kind),h.rtcp.cname=l.getCname({offerMediaObject:s}),h.encodings=p.getRtpEncodings({offerMediaObject:s,track:e}),t)for(let e=0;e<h.encodings.length;++e)t[e]&&Object.assign(h.encodings[e],t[e]);if(h.encodings.length>1&&"video/vp8"===h.codecs[0].mimeType.toLowerCase())for(let e of h.encodings)e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:s,offerRtpParameters:h,answerRtpParameters:u,codecOptions:r});let m={type:"answer",sdp:this._remoteSdp.getSdp()};f.debug("send() | calling pc.setRemoteDescription() [answer:%o]",m),await this._pc.setRemoteDescription(m);let g=String(this._nextSendLocalId);return this._nextSendLocalId++,this._mapSendLocalIdTrack.set(g,e),{localId:g,rtpParameters:h}}async stopSending(e){this.assertSendDirection(),f.debug("stopSending() [localId:%s]",e);let t=this._mapSendLocalIdTrack.get(e);if(!t)throw Error("track not found");this._mapSendLocalIdTrack.delete(e),this._sendStream.removeTrack(t),this._pc.addStream(this._sendStream);let r=await this._pc.createOffer();f.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r);try{await this._pc.setLocalDescription(r)}catch(e){if(0===this._sendStream.getTracks().length){f.warn("stopSending() | ignoring expected error due no sending tracks: %s",e.toString());return}throw e}if("stable"===this._pc.signalingState)return;let i={type:"answer",sdp:this._remoteSdp.getSdp()};f.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async pauseSending(e){}async resumeSending(e){}async replaceTrack(e,t){throw new o.UnsupportedError("not implemented")}async setMaxSpatialLayer(e,t){throw new o.UnsupportedError(" not implemented")}async setRtpEncodingParameters(e,t){throw new o.UnsupportedError("not supported")}async getSenderStats(e){throw new o.UnsupportedError("not implemented")}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:s}){this.assertSendDirection();let n={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmitTime:t,maxRetransmits:r,protocol:s};f.debug("sendDataChannel() [options:%o]",n);let o=this._pc.createDataChannel(i,n);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%g.MIS,!this._hasDataChannelMediaSection){let e=await this._pc.createOffer(),t=a.parse(e.sdp),r=t.media.find(e=>"application"===e.type);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),f.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});let i={type:"answer",sdp:this._remoteSdp.getSdp()};f.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:o,sctpStreamParameters:{streamId:n.id,ordered:n.ordered,maxPacketLifeTime:n.maxPacketLifeTime,maxRetransmits:n.maxRetransmits}}}async receive(e){this.assertRecvDirection();let t=[];for(let t of e){let{trackId:e,kind:r,rtpParameters:i,streamId:s}=t;f.debug("receive() [trackId:%s, kind:%s]",e,r),this._remoteSdp.receive({mid:r,kind:r,offerRtpParameters:i,streamId:s||i.rtcp.cname,trackId:e})}let r={type:"offer",sdp:this._remoteSdp.getSdp()};f.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);let i=await this._pc.createAnswer(),s=a.parse(i.sdp);for(let t of e){let{kind:e,rtpParameters:r}=t,i=s.media.find(t=>String(t.mid)===e);l.applyCodecParameters({offerRtpParameters:r,answerMediaObject:i})}for(let r of(i={type:"answer",sdp:a.write(s)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:s}),f.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i),e)){let{kind:e,trackId:i,rtpParameters:s}=r,a=r.streamId||s.rtcp.cname,n=this._pc.getRemoteStreams().find(e=>e.id===a).getTrackById(i);if(!n)throw Error("remote track not found");this._mapRecvLocalIdInfo.set(i,{mid:e,rtpParameters:s}),t.push({localId:i,track:n})}return t}async stopReceiving(e){for(let t of(this.assertRecvDirection(),e)){f.debug("stopReceiving() [localId:%s]",t);let{mid:e,rtpParameters:r}=this._mapRecvLocalIdInfo.get(t)||{};this._mapRecvLocalIdInfo.delete(t),this._remoteSdp.planBStopReceiving({mid:e,offerRtpParameters:r})}let t={type:"offer",sdp:this._remoteSdp.getSdp()};f.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();f.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async pauseReceiving(e){}async resumeReceiving(e){}async getReceiverStats(e){throw new o.UnsupportedError("not implemented")}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertRecvDirection();let{streamId:i,ordered:s,maxPacketLifeTime:n,maxRetransmits:o}=e,c={negotiated:!0,id:i,ordered:s,maxPacketLifeTime:n,maxRetransmitTime:n,maxRetransmits:o,protocol:r};f.debug("receiveDataChannel() [options:%o]",c);let d=this._pc.createDataChannel(t,c);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation({oldDataChannelSpec:!0});let e={type:"offer",sdp:this._remoteSdp.getSdp()};f.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();if(!this._transportReady){let e=a.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}f.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=a.parse(this._pc.localDescription.sdp));let r=l.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)}),this._transportReady=!0}assertSendDirection(){if("send"!==this._direction)throw Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw Error('method can just be called for handlers with "recv" direction')}}e.exports.Chrome55=v}),f("cjo49",function(e,t){var r=e.exports&&e.exports.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,s)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),i=e.exports&&e.exports.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=e.exports&&e.exports.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s in e)"default"!==s&&Object.prototype.hasOwnProperty.call(e,s)&&r(t,e,s);return i(t,e),t};Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.Firefox120=void 0;let a=s(m("1HJ2f"));var n=m("7Wufc"),o=m("6yq6Z");let c=s(m("2fqxq")),d=s(m("kIl0y")),l=s(m("5opQr")),p=s(m("b4hOr"));var h=m("6bVBA"),u=m("47IPL"),f=m("kBU2H");let g=new n.Logger("Firefox120"),v={OS:16,MIS:2048};class _ extends h.HandlerInterface{static createFactory(){return()=>new _}constructor(){super(),this._closed=!1,this._mapMidTransceiver=new Map,this._sendStream=new MediaStream,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Firefox120"}close(){if(g.debug("close()"),!this._closed){if(this._closed=!0,this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}}async getNativeRtpCapabilities(){g.debug("getNativeRtpCapabilities()");let e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"}),t=document.createElement("canvas");t.getContext("2d");let r=t.captureStream().getVideoTracks()[0];try{e.addTransceiver("audio",{direction:"sendrecv"}),e.addTransceiver(r,{direction:"sendrecv",sendEncodings:[{rid:"r0",maxBitrate:1e5},{rid:"r1",maxBitrate:5e5}]});let i=await e.createOffer();try{t.remove()}catch(e){}try{r.stop()}catch(e){}try{e.close()}catch(e){}let s=a.parse(i.sdp);return l.extractRtpCapabilities({sdpObject:s})}catch(i){try{t.remove()}catch(e){}try{r.stop()}catch(e){}try{e.close()}catch(e){}throw i}}async getNativeSctpCapabilities(){return g.debug("getNativeSctpCapabilities()"),{numStreams:v}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:n,additionalSettings:o,proprietaryConstraints:c,extendedRtpCapabilities:l}){this.assertNotClosed(),g.debug("run()"),this._direction=e,this._remoteSdp=new u.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s}),this._sendingRtpParametersByKind={audio:d.getSendingRtpParameters("audio",l),video:d.getSendingRtpParameters("video",l)},this._sendingRemoteRtpParametersByKind={audio:d.getSendingRemoteRtpParameters("audio",l),video:d.getSendingRemoteRtpParameters("video",l)},this._pc=new RTCPeerConnection({iceServers:a||[],iceTransportPolicy:n||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...o},c),this._pc.addEventListener("icegatheringstatechange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)}),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",()=>{this.emit("@connectionstatechange",this._pc.connectionState)}):this._pc.addEventListener("iceconnectionstatechange",()=>{switch(g.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.iceConnectionState){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}})}async updateIceServers(e){throw this.assertNotClosed(),new o.UnsupportedError("not supported")}async restartIce(e){if(this.assertNotClosed(),g.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady){if("send"===this._direction){let e=await this._pc.createOffer({iceRestart:!0});g.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);let t={type:"answer",sdp:this._remoteSdp.getSdp()};g.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{let e={type:"offer",sdp:this._remoteSdp.getSdp()};g.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();g.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:i}){this.assertNotClosed(),this.assertSendDirection(),g.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),t&&t.length>1&&t.forEach((e,t)=>{e.rid=`r${t}`});let s=c.clone(this._sendingRtpParametersByKind[e.kind]);s.codecs=d.reduceCodecs(s.codecs,i);let n=c.clone(this._sendingRemoteRtpParametersByKind[e.kind]);n.codecs=d.reduceCodecs(n.codecs,i);let o=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:t}),h=await this._pc.createOffer(),u=a.parse(h.sdp);this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:u});let m=(0,f.parse)((t||[{}])[0].scalabilityMode);g.debug("send() | calling pc.setLocalDescription() [offer:%o]",h),await this._pc.setLocalDescription(h);let v=o.mid;s.mid=v;let _=(u=a.parse(this._pc.localDescription.sdp)).media[u.media.length-1];if(s.rtcp.cname=l.getCname({offerMediaObject:_}),t){if(1===t.length){let e=p.getRtpEncodings({offerMediaObject:_});Object.assign(e[0],t[0]),s.encodings=e}else s.encodings=t}else s.encodings=p.getRtpEncodings({offerMediaObject:_});if(s.encodings.length>1&&("video/vp8"===s.codecs[0].mimeType.toLowerCase()||"video/h264"===s.codecs[0].mimeType.toLowerCase()))for(let e of s.encodings)e.scalabilityMode?e.scalabilityMode=`L1T${m.temporalLayers}`:e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:_,offerRtpParameters:s,answerRtpParameters:n,codecOptions:r,extmapAllowMixed:!0});let b={type:"answer",sdp:this._remoteSdp.getSdp()};return g.debug("send() | calling pc.setRemoteDescription() [answer:%o]",b),await this._pc.setRemoteDescription(b),this._mapMidTransceiver.set(v,o),{localId:v,rtpParameters:s,rtpSender:o.sender}}async stopSending(e){if(this.assertSendDirection(),g.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated transceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.disableMediaSection(t.mid);let r=await this._pc.createOffer();g.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};g.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),g.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();g.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};g.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),g.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let r=await this._pc.createOffer();g.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};g.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?g.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):g.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),g.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw Error("associated transceiver not found");let i=r.sender.getParameters();i.encodings.forEach((e,r)=>{r<=t?e.active=!0:e.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let s=await this._pc.createOffer();g.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let a={type:"answer",sdp:this._remoteSdp.getSdp()};g.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),g.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((e,r)=>{i.encodings[r]={...e,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let s=await this._pc.createOffer();g.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let a={type:"answer",sdp:this._remoteSdp.getSdp()};g.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:s}){this.assertNotClosed(),this.assertSendDirection();let n={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:s};g.debug("sendDataChannel() [options:%o]",n);let o=this._pc.createDataChannel(i,n);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%v.MIS,!this._hasDataChannelMediaSection){let e=await this._pc.createOffer(),t=a.parse(e.sdp),r=t.media.find(e=>"application"===e.type);this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:t}),g.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});let i={type:"answer",sdp:this._remoteSdp.getSdp()};g.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:o,sctpStreamParameters:{streamId:n.id,ordered:n.ordered,maxPacketLifeTime:n.maxPacketLifeTime,maxRetransmits:n.maxRetransmits}}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let t of e){let{trackId:e,kind:i,rtpParameters:s,streamId:a}=t;g.debug("receive() [trackId:%s, kind:%s]",e,i);let n=s.mid||String(this._mapMidTransceiver.size);r.set(e,n),this._remoteSdp.receive({mid:n,kind:i,offerRtpParameters:s,streamId:a||s.rtcp.cname,trackId:e})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};g.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);let s=await this._pc.createAnswer(),n=a.parse(s.sdp);for(let t of e){let{trackId:e,rtpParameters:i}=t,o=r.get(e),c=n.media.find(e=>String(e.mid)===o);l.applyCodecParameters({offerRtpParameters:i,answerMediaObject:c}),s={type:"answer",sdp:a.write(n)}}for(let i of(this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:n}),g.debug("receive() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s),e)){let{trackId:e}=i,s=r.get(e),a=this._pc.getTransceivers().find(e=>e.mid===s);if(!a)throw Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(s,a),t.push({localId:s,track:a.receiver.track,rtpReceiver:a.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let t of e){g.debug("stopReceiving() [localId:%s]",t);let e=this._mapMidTransceiver.get(t);if(!e)throw Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};g.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();for(let t of(g.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r),e))this._mapMidTransceiver.delete(t)}async pauseReceiving(e){for(let t of(this.assertNotClosed(),this.assertRecvDirection(),e)){g.debug("pauseReceiving() [localId:%s]",t);let e=this._mapMidTransceiver.get(t);if(!e)throw Error("associated RTCRtpTransceiver not found");e.direction="inactive",this._remoteSdp.pauseMediaSection(t)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};g.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();g.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){for(let t of(this.assertNotClosed(),this.assertRecvDirection(),e)){g.debug("resumeReceiving() [localId:%s]",t);let e=this._mapMidTransceiver.get(t);if(!e)throw Error("associated RTCRtpTransceiver not found");e.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(t)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};g.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();g.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:s,maxPacketLifeTime:n,maxRetransmits:o}=e,c={negotiated:!0,id:i,ordered:s,maxPacketLifeTime:n,maxRetransmits:o,protocol:r};g.debug("receiveDataChannel() [options:%o]",c);let d=this._pc.createDataChannel(t,c);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let e={type:"offer",sdp:this._remoteSdp.getSdp()};g.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();if(!this._transportReady){let e=a.parse(t.sdp);await this.setupTransport({localDtlsRole:"client",localSdpObject:e})}g.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=a.parse(this._pc.localDescription.sdp));let r=l.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)}),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new o.InvalidStateError("method called in a closed handler")}assertSendDirection(){if("send"!==this._direction)throw Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw Error('method can just be called for handlers with "recv" direction')}}e.exports.Firefox120=_}),f("ajDWi",function(e,t){var r=e.exports&&e.exports.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,s)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),i=e.exports&&e.exports.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=e.exports&&e.exports.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s in e)"default"!==s&&Object.prototype.hasOwnProperty.call(e,s)&&r(t,e,s);return i(t,e),t};Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.Firefox60=void 0;let a=s(m("1HJ2f"));var n=m("7Wufc"),o=m("6yq6Z");let c=s(m("2fqxq")),d=s(m("kIl0y")),l=s(m("5opQr")),p=s(m("b4hOr"));var h=m("6bVBA"),u=m("47IPL"),f=m("kBU2H");let g=new n.Logger("Firefox60"),v={OS:16,MIS:2048};class _ extends h.HandlerInterface{static createFactory(){return()=>new _}constructor(){super(),this._closed=!1,this._mapMidTransceiver=new Map,this._sendStream=new MediaStream,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Firefox60"}close(){if(g.debug("close()"),!this._closed){if(this._closed=!0,this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}}async getNativeRtpCapabilities(){g.debug("getNativeRtpCapabilities()");let e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"}),t=document.createElement("canvas");t.getContext("2d");let r=t.captureStream().getVideoTracks()[0];try{e.addTransceiver("audio",{direction:"sendrecv"});let i=e.addTransceiver(r,{direction:"sendrecv"}),s=i.sender.getParameters();s.encodings=[{rid:"r0",maxBitrate:1e5},{rid:"r1",maxBitrate:5e5}],await i.sender.setParameters(s);let n=await e.createOffer();try{t.remove()}catch(e){}try{r.stop()}catch(e){}try{e.close()}catch(e){}let o=a.parse(n.sdp);return l.extractRtpCapabilities({sdpObject:o})}catch(i){try{t.remove()}catch(e){}try{r.stop()}catch(e){}try{e.close()}catch(e){}throw i}}async getNativeSctpCapabilities(){return g.debug("getNativeSctpCapabilities()"),{numStreams:v}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:n,additionalSettings:o,proprietaryConstraints:c,extendedRtpCapabilities:l}){this.assertNotClosed(),g.debug("run()"),this._direction=e,this._remoteSdp=new u.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s}),this._sendingRtpParametersByKind={audio:d.getSendingRtpParameters("audio",l),video:d.getSendingRtpParameters("video",l)},this._sendingRemoteRtpParametersByKind={audio:d.getSendingRemoteRtpParameters("audio",l),video:d.getSendingRemoteRtpParameters("video",l)},this._pc=new RTCPeerConnection({iceServers:a||[],iceTransportPolicy:n||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...o},c),this._pc.addEventListener("icegatheringstatechange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)}),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",()=>{this.emit("@connectionstatechange",this._pc.connectionState)}):this._pc.addEventListener("iceconnectionstatechange",()=>{switch(g.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.iceConnectionState){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}})}async updateIceServers(e){throw this.assertNotClosed(),new o.UnsupportedError("not supported")}async restartIce(e){if(this.assertNotClosed(),g.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady){if("send"===this._direction){let e=await this._pc.createOffer({iceRestart:!0});g.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);let t={type:"answer",sdp:this._remoteSdp.getSdp()};g.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{let e={type:"offer",sdp:this._remoteSdp.getSdp()};g.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();g.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:i}){this.assertNotClosed(),this.assertSendDirection(),g.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),t&&(t=c.clone(t)).length>1&&(t.forEach((e,t)=>{e.rid=`r${t}`}),t.reverse());let s=c.clone(this._sendingRtpParametersByKind[e.kind]);s.codecs=d.reduceCodecs(s.codecs,i);let n=c.clone(this._sendingRemoteRtpParametersByKind[e.kind]);n.codecs=d.reduceCodecs(n.codecs,i);let o=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream]});if(t){let e=o.sender.getParameters();e.encodings=t,await o.sender.setParameters(e)}let h=await this._pc.createOffer(),u=a.parse(h.sdp);this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:u});let m=(0,f.parse)((t||[{}])[0].scalabilityMode);g.debug("send() | calling pc.setLocalDescription() [offer:%o]",h),await this._pc.setLocalDescription(h);let v=o.mid;s.mid=v;let _=(u=a.parse(this._pc.localDescription.sdp)).media[u.media.length-1];if(s.rtcp.cname=l.getCname({offerMediaObject:_}),t){if(1===t.length){let e=p.getRtpEncodings({offerMediaObject:_});Object.assign(e[0],t[0]),s.encodings=e}else s.encodings=t.reverse()}else s.encodings=p.getRtpEncodings({offerMediaObject:_});if(s.encodings.length>1&&("video/vp8"===s.codecs[0].mimeType.toLowerCase()||"video/h264"===s.codecs[0].mimeType.toLowerCase()))for(let e of s.encodings)e.scalabilityMode?e.scalabilityMode=`L1T${m.temporalLayers}`:e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:_,offerRtpParameters:s,answerRtpParameters:n,codecOptions:r,extmapAllowMixed:!0});let b={type:"answer",sdp:this._remoteSdp.getSdp()};return g.debug("send() | calling pc.setRemoteDescription() [answer:%o]",b),await this._pc.setRemoteDescription(b),this._mapMidTransceiver.set(v,o),{localId:v,rtpParameters:s,rtpSender:o.sender}}async stopSending(e){if(this.assertSendDirection(),g.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated transceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.disableMediaSection(t.mid);let r=await this._pc.createOffer();g.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};g.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),g.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();g.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};g.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),g.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let r=await this._pc.createOffer();g.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};g.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?g.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):g.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),g.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw Error("associated transceiver not found");let i=r.sender.getParameters();t=i.encodings.length-1-t,i.encodings.forEach((e,r)=>{r>=t?e.active=!0:e.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let s=await this._pc.createOffer();g.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let a={type:"answer",sdp:this._remoteSdp.getSdp()};g.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),g.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((e,r)=>{i.encodings[r]={...e,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let s=await this._pc.createOffer();g.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let a={type:"answer",sdp:this._remoteSdp.getSdp()};g.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:s}){this.assertNotClosed(),this.assertSendDirection();let n={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:s};g.debug("sendDataChannel() [options:%o]",n);let o=this._pc.createDataChannel(i,n);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%v.MIS,!this._hasDataChannelMediaSection){let e=await this._pc.createOffer(),t=a.parse(e.sdp),r=t.media.find(e=>"application"===e.type);this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:t}),g.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});let i={type:"answer",sdp:this._remoteSdp.getSdp()};g.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:o,sctpStreamParameters:{streamId:n.id,ordered:n.ordered,maxPacketLifeTime:n.maxPacketLifeTime,maxRetransmits:n.maxRetransmits}}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let t of e){let{trackId:e,kind:i,rtpParameters:s,streamId:a}=t;g.debug("receive() [trackId:%s, kind:%s]",e,i);let n=s.mid||String(this._mapMidTransceiver.size);r.set(e,n),this._remoteSdp.receive({mid:n,kind:i,offerRtpParameters:s,streamId:a||s.rtcp.cname,trackId:e})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};g.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);let s=await this._pc.createAnswer(),n=a.parse(s.sdp);for(let t of e){let{trackId:e,rtpParameters:i}=t,o=r.get(e),c=n.media.find(e=>String(e.mid)===o);l.applyCodecParameters({offerRtpParameters:i,answerMediaObject:c}),s={type:"answer",sdp:a.write(n)}}for(let i of(this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:n}),g.debug("receive() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s),e)){let{trackId:e}=i,s=r.get(e),a=this._pc.getTransceivers().find(e=>e.mid===s);if(!a)throw Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(s,a),t.push({localId:s,track:a.receiver.track,rtpReceiver:a.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let t of e){g.debug("stopReceiving() [localId:%s]",t);let e=this._mapMidTransceiver.get(t);if(!e)throw Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};g.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();for(let t of(g.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r),e))this._mapMidTransceiver.delete(t)}async pauseReceiving(e){for(let t of(this.assertNotClosed(),this.assertRecvDirection(),e)){g.debug("pauseReceiving() [localId:%s]",t);let e=this._mapMidTransceiver.get(t);if(!e)throw Error("associated RTCRtpTransceiver not found");e.direction="inactive",this._remoteSdp.pauseMediaSection(t)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};g.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();g.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){for(let t of(this.assertNotClosed(),this.assertRecvDirection(),e)){g.debug("resumeReceiving() [localId:%s]",t);let e=this._mapMidTransceiver.get(t);if(!e)throw Error("associated RTCRtpTransceiver not found");e.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(t)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};g.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();g.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:s,maxPacketLifeTime:n,maxRetransmits:o}=e,c={negotiated:!0,id:i,ordered:s,maxPacketLifeTime:n,maxRetransmits:o,protocol:r};g.debug("receiveDataChannel() [options:%o]",c);let d=this._pc.createDataChannel(t,c);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let e={type:"offer",sdp:this._remoteSdp.getSdp()};g.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();if(!this._transportReady){let e=a.parse(t.sdp);await this.setupTransport({localDtlsRole:"client",localSdpObject:e})}g.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=a.parse(this._pc.localDescription.sdp));let r=l.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)}),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new o.InvalidStateError("method called in a closed handler")}assertSendDirection(){if("send"!==this._direction)throw Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw Error('method can just be called for handlers with "recv" direction')}}e.exports.Firefox60=_}),f("otdku",function(e,t){var r=e.exports&&e.exports.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,s)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),i=e.exports&&e.exports.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=e.exports&&e.exports.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s in e)"default"!==s&&Object.prototype.hasOwnProperty.call(e,s)&&r(t,e,s);return i(t,e),t};Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.Safari12=void 0;let a=s(m("1HJ2f"));var n=m("7Wufc");let o=s(m("2fqxq")),c=s(m("kIl0y")),d=s(m("5opQr")),l=s(m("b4hOr")),p=s(m("bt0QK"));var h=m("6yq6Z"),u=m("6bVBA"),f=m("47IPL"),g=m("kBU2H");let v=new n.Logger("Safari12"),_={OS:1024,MIS:1024};class b extends u.HandlerInterface{static createFactory(){return()=>new b}constructor(){super(),this._closed=!1,this._mapMidTransceiver=new Map,this._sendStream=new MediaStream,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Safari12"}close(){if(v.debug("close()"),!this._closed){if(this._closed=!0,this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}}async getNativeRtpCapabilities(){v.debug("getNativeRtpCapabilities()");let e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{e.addTransceiver("audio"),e.addTransceiver("video");let t=await e.createOffer();try{e.close()}catch(e){}let r=a.parse(t.sdp),i=d.extractRtpCapabilities({sdpObject:r});return p.addNackSuppportForOpus(i),i}catch(t){try{e.close()}catch(e){}throw t}}async getNativeSctpCapabilities(){return v.debug("getNativeSctpCapabilities()"),{numStreams:_}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:n,additionalSettings:o,proprietaryConstraints:d,extendedRtpCapabilities:l}){this.assertNotClosed(),v.debug("run()"),this._direction=e,this._remoteSdp=new f.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s}),this._sendingRtpParametersByKind={audio:c.getSendingRtpParameters("audio",l),video:c.getSendingRtpParameters("video",l)},this._sendingRemoteRtpParametersByKind={audio:c.getSendingRemoteRtpParameters("audio",l),video:c.getSendingRemoteRtpParameters("video",l)},i.role&&"auto"!==i.role&&(this._forcedLocalDtlsRole="server"===i.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a||[],iceTransportPolicy:n||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...o},d),this._pc.addEventListener("icegatheringstatechange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)}),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",()=>{this.emit("@connectionstatechange",this._pc.connectionState)}):this._pc.addEventListener("iceconnectionstatechange",()=>{switch(v.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.iceConnectionState){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}})}async updateIceServers(e){this.assertNotClosed(),v.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),v.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady){if("send"===this._direction){let e=await this._pc.createOffer({iceRestart:!0});v.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);let t={type:"answer",sdp:this._remoteSdp.getSdp()};v.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{let e={type:"offer",sdp:this._remoteSdp.getSdp()};v.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();v.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:i}){let s;this.assertNotClosed(),this.assertSendDirection(),v.debug("send() [kind:%s, track.id:%s]",e.kind,e.id);let n=o.clone(this._sendingRtpParametersByKind[e.kind]);n.codecs=c.reduceCodecs(n.codecs,i);let p=o.clone(this._sendingRemoteRtpParametersByKind[e.kind]);p.codecs=c.reduceCodecs(p.codecs,i);let h=this._remoteSdp.getNextMediaSectionIdx(),u=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream]}),m=await this._pc.createOffer(),f=a.parse(m.sdp);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f});let _=(0,g.parse)((t||[{}])[0].scalabilityMode);t&&t.length>1&&(v.debug("send() | enabling legacy simulcast"),s=(f=a.parse(m.sdp)).media[h.idx],l.addLegacySimulcast({offerMediaObject:s,numStreams:t.length}),m={type:"offer",sdp:a.write(f)}),v.debug("send() | calling pc.setLocalDescription() [offer:%o]",m),await this._pc.setLocalDescription(m);let b=u.mid;if(n.mid=b,s=(f=a.parse(this._pc.localDescription.sdp)).media[h.idx],n.rtcp.cname=d.getCname({offerMediaObject:s}),n.encodings=l.getRtpEncodings({offerMediaObject:s}),t)for(let e=0;e<n.encodings.length;++e)t[e]&&Object.assign(n.encodings[e],t[e]);if(n.encodings.length>1&&("video/vp8"===n.codecs[0].mimeType.toLowerCase()||"video/h264"===n.codecs[0].mimeType.toLowerCase()))for(let e of n.encodings)e.scalabilityMode?e.scalabilityMode=`L1T${_.temporalLayers}`:e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:s,reuseMid:h.reuseMid,offerRtpParameters:n,answerRtpParameters:p,codecOptions:r});let w={type:"answer",sdp:this._remoteSdp.getSdp()};return v.debug("send() | calling pc.setRemoteDescription() [answer:%o]",w),await this._pc.setRemoteDescription(w),this._mapMidTransceiver.set(b,u),{localId:b,rtpParameters:n,rtpSender:u.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;v.debug("stopSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch(e){}let r=await this._pc.createOffer();v.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};v.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),v.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();v.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};v.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),v.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let r=await this._pc.createOffer();v.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};v.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?v.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):v.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),v.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((e,r)=>{r<=t?e.active=!0:e.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let s=await this._pc.createOffer();v.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let a={type:"answer",sdp:this._remoteSdp.getSdp()};v.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),v.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((e,r)=>{i.encodings[r]={...e,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let s=await this._pc.createOffer();v.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let a={type:"answer",sdp:this._remoteSdp.getSdp()};v.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:s}){this.assertNotClosed(),this.assertSendDirection();let n={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:s};v.debug("sendDataChannel() [options:%o]",n);let o=this._pc.createDataChannel(i,n);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%_.MIS,!this._hasDataChannelMediaSection){let e=await this._pc.createOffer(),t=a.parse(e.sdp),r=t.media.find(e=>"application"===e.type);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),v.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});let i={type:"answer",sdp:this._remoteSdp.getSdp()};v.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:o,sctpStreamParameters:{streamId:n.id,ordered:n.ordered,maxPacketLifeTime:n.maxPacketLifeTime,maxRetransmits:n.maxRetransmits}}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let t of e){let{trackId:e,kind:i,rtpParameters:s,streamId:a}=t;v.debug("receive() [trackId:%s, kind:%s]",e,i);let n=s.mid||String(this._mapMidTransceiver.size);r.set(e,n),this._remoteSdp.receive({mid:n,kind:i,offerRtpParameters:s,streamId:a||s.rtcp.cname,trackId:e})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};v.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);let s=await this._pc.createAnswer(),n=a.parse(s.sdp);for(let t of e){let{trackId:e,rtpParameters:i}=t,s=r.get(e),a=n.media.find(e=>String(e.mid)===s);d.applyCodecParameters({offerRtpParameters:i,answerMediaObject:a})}for(let i of(s={type:"answer",sdp:a.write(n)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:n}),v.debug("receive() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s),e)){let{trackId:e}=i,s=r.get(e),a=this._pc.getTransceivers().find(e=>e.mid===s);if(!a)throw Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(s,a),t.push({localId:s,track:a.receiver.track,rtpReceiver:a.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let t of e){v.debug("stopReceiving() [localId:%s]",t);let e=this._mapMidTransceiver.get(t);if(!e)throw Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};v.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();for(let t of(v.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r),e))this._mapMidTransceiver.delete(t)}async pauseReceiving(e){for(let t of(this.assertNotClosed(),this.assertRecvDirection(),e)){v.debug("pauseReceiving() [localId:%s]",t);let e=this._mapMidTransceiver.get(t);if(!e)throw Error("associated RTCRtpTransceiver not found");e.direction="inactive",this._remoteSdp.pauseMediaSection(t)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};v.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();v.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){for(let t of(this.assertNotClosed(),this.assertRecvDirection(),e)){v.debug("resumeReceiving() [localId:%s]",t);let e=this._mapMidTransceiver.get(t);if(!e)throw Error("associated RTCRtpTransceiver not found");e.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(t)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};v.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();v.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:s,maxPacketLifeTime:n,maxRetransmits:o}=e,c={negotiated:!0,id:i,ordered:s,maxPacketLifeTime:n,maxRetransmits:o,protocol:r};v.debug("receiveDataChannel() [options:%o]",c);let d=this._pc.createDataChannel(t,c);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let e={type:"offer",sdp:this._remoteSdp.getSdp()};v.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();if(!this._transportReady){let e=a.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}v.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=a.parse(this._pc.localDescription.sdp));let r=d.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)}),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new h.InvalidStateError("method called in a closed handler")}assertSendDirection(){if("send"!==this._direction)throw Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw Error('method can just be called for handlers with "recv" direction')}}e.exports.Safari12=b}),f("diBVd",function(e,t){var r=e.exports&&e.exports.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,s)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),i=e.exports&&e.exports.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=e.exports&&e.exports.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s in e)"default"!==s&&Object.prototype.hasOwnProperty.call(e,s)&&r(t,e,s);return i(t,e),t};Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.Safari11=void 0;let a=s(m("1HJ2f"));var n=m("7Wufc");let o=s(m("2fqxq")),c=s(m("kIl0y")),d=s(m("5opQr")),l=s(m("157SQ"));var p=m("6bVBA"),h=m("47IPL");let u=new n.Logger("Safari11"),f={OS:1024,MIS:1024};class g extends p.HandlerInterface{static createFactory(){return()=>new g}constructor(){super(),this._sendStream=new MediaStream,this._mapSendLocalIdRtpSender=new Map,this._nextSendLocalId=0,this._mapRecvLocalIdInfo=new Map,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"Safari11"}close(){if(u.debug("close()"),this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}async getNativeRtpCapabilities(){u.debug("getNativeRtpCapabilities()");let e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"plan-b"});try{let t=await e.createOffer({offerToReceiveAudio:!0,offerToReceiveVideo:!0});try{e.close()}catch(e){}let r=a.parse(t.sdp);return d.extractRtpCapabilities({sdpObject:r})}catch(t){try{e.close()}catch(e){}throw t}}async getNativeSctpCapabilities(){return u.debug("getNativeSctpCapabilities()"),{numStreams:f}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:n,additionalSettings:o,proprietaryConstraints:d,extendedRtpCapabilities:l}){u.debug("run()"),this._direction=e,this._remoteSdp=new h.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s,planB:!0}),this._sendingRtpParametersByKind={audio:c.getSendingRtpParameters("audio",l),video:c.getSendingRtpParameters("video",l)},this._sendingRemoteRtpParametersByKind={audio:c.getSendingRemoteRtpParameters("audio",l),video:c.getSendingRemoteRtpParameters("video",l)},i.role&&"auto"!==i.role&&(this._forcedLocalDtlsRole="server"===i.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a||[],iceTransportPolicy:n||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...o},d),this._pc.addEventListener("icegatheringstatechange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)}),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",()=>{this.emit("@connectionstatechange",this._pc.connectionState)}):this._pc.addEventListener("iceconnectionstatechange",()=>{switch(u.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.iceConnectionState){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}})}async updateIceServers(e){u.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(u.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady){if("send"===this._direction){let e=await this._pc.createOffer({iceRestart:!0});u.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);let t={type:"answer",sdp:this._remoteSdp.getSdp()};u.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{let e={type:"offer",sdp:this._remoteSdp.getSdp()};u.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();u.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}}async getTransportStats(){return this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:i}){let s;this.assertSendDirection(),u.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),i&&u.warn("send() | codec selection is not available in %s handler",this.name),this._sendStream.addTrack(e),this._pc.addTrack(e,this._sendStream);let n=await this._pc.createOffer(),p=a.parse(n.sdp),h=o.clone(this._sendingRtpParametersByKind[e.kind]);h.codecs=c.reduceCodecs(h.codecs);let m=o.clone(this._sendingRemoteRtpParametersByKind[e.kind]);if(m.codecs=c.reduceCodecs(m.codecs),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:p}),"video"===e.kind&&t&&t.length>1&&(u.debug("send() | enabling simulcast"),s=(p=a.parse(n.sdp)).media.find(e=>"video"===e.type),l.addLegacySimulcast({offerMediaObject:s,track:e,numStreams:t.length}),n={type:"offer",sdp:a.write(p)}),u.debug("send() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),s=(p=a.parse(this._pc.localDescription.sdp)).media.find(t=>t.type===e.kind),h.rtcp.cname=d.getCname({offerMediaObject:s}),h.encodings=l.getRtpEncodings({offerMediaObject:s,track:e}),t)for(let e=0;e<h.encodings.length;++e)t[e]&&Object.assign(h.encodings[e],t[e]);if(h.encodings.length>1&&"video/vp8"===h.codecs[0].mimeType.toLowerCase())for(let e of h.encodings)e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:s,offerRtpParameters:h,answerRtpParameters:m,codecOptions:r});let f={type:"answer",sdp:this._remoteSdp.getSdp()};u.debug("send() | calling pc.setRemoteDescription() [answer:%o]",f),await this._pc.setRemoteDescription(f);let g=String(this._nextSendLocalId);this._nextSendLocalId++;let v=this._pc.getSenders().find(t=>t.track===e);return this._mapSendLocalIdRtpSender.set(g,v),{localId:g,rtpParameters:h,rtpSender:v}}async stopSending(e){this.assertSendDirection();let t=this._mapSendLocalIdRtpSender.get(e);if(!t)throw Error("associated RTCRtpSender not found");t.track&&this._sendStream.removeTrack(t.track),this._mapSendLocalIdRtpSender.delete(e);let r=await this._pc.createOffer();u.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r);try{await this._pc.setLocalDescription(r)}catch(e){if(0===this._sendStream.getTracks().length){u.warn("stopSending() | ignoring expected error due no sending tracks: %s",e.toString());return}throw e}if("stable"===this._pc.signalingState)return;let i={type:"answer",sdp:this._remoteSdp.getSdp()};u.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async pauseSending(e){}async resumeSending(e){}async replaceTrack(e,t){this.assertSendDirection(),t?u.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):u.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapSendLocalIdRtpSender.get(e);if(!r)throw Error("associated RTCRtpSender not found");let i=r.track;await r.replaceTrack(t),i&&this._sendStream.removeTrack(i),t&&this._sendStream.addTrack(t)}async setMaxSpatialLayer(e,t){this.assertSendDirection(),u.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapSendLocalIdRtpSender.get(e);if(!r)throw Error("associated RTCRtpSender not found");let i=r.getParameters();i.encodings.forEach((e,r)=>{r<=t?e.active=!0:e.active=!1}),await r.setParameters(i)}async setRtpEncodingParameters(e,t){this.assertSendDirection(),u.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapSendLocalIdRtpSender.get(e);if(!r)throw Error("associated RTCRtpSender not found");let i=r.getParameters();i.encodings.forEach((e,r)=>{i.encodings[r]={...e,...t}}),await r.setParameters(i)}async getSenderStats(e){this.assertSendDirection();let t=this._mapSendLocalIdRtpSender.get(e);if(!t)throw Error("associated RTCRtpSender not found");return t.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:s}){this.assertSendDirection();let n={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:s};u.debug("sendDataChannel() [options:%o]",n);let o=this._pc.createDataChannel(i,n);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%f.MIS,!this._hasDataChannelMediaSection){let e=await this._pc.createOffer(),t=a.parse(e.sdp),r=t.media.find(e=>"application"===e.type);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),u.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});let i={type:"answer",sdp:this._remoteSdp.getSdp()};u.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:o,sctpStreamParameters:{streamId:n.id,ordered:n.ordered,maxPacketLifeTime:n.maxPacketLifeTime,maxRetransmits:n.maxRetransmits}}}async receive(e){this.assertRecvDirection();let t=[];for(let t of e){let{trackId:e,kind:r,rtpParameters:i,streamId:s}=t;u.debug("receive() [trackId:%s, kind:%s]",e,r),this._remoteSdp.receive({mid:r,kind:r,offerRtpParameters:i,streamId:s||i.rtcp.cname,trackId:e})}let r={type:"offer",sdp:this._remoteSdp.getSdp()};u.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",r),await this._pc.setRemoteDescription(r);let i=await this._pc.createAnswer(),s=a.parse(i.sdp);for(let t of e){let{kind:e,rtpParameters:r}=t,i=s.media.find(t=>String(t.mid)===e);d.applyCodecParameters({offerRtpParameters:r,answerMediaObject:i})}for(let r of(i={type:"answer",sdp:a.write(s)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:s}),u.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i),e)){let{kind:e,trackId:i,rtpParameters:s}=r,a=this._pc.getReceivers().find(e=>e.track&&e.track.id===i);if(!a)throw Error("new RTCRtpReceiver not");this._mapRecvLocalIdInfo.set(i,{mid:e,rtpParameters:s,rtpReceiver:a}),t.push({localId:i,track:a.track,rtpReceiver:a})}return t}async stopReceiving(e){for(let t of(this.assertRecvDirection(),e)){u.debug("stopReceiving() [localId:%s]",t);let{mid:e,rtpParameters:r}=this._mapRecvLocalIdInfo.get(t)||{};this._mapRecvLocalIdInfo.delete(t),this._remoteSdp.planBStopReceiving({mid:e,offerRtpParameters:r})}let t={type:"offer",sdp:this._remoteSdp.getSdp()};u.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();u.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertRecvDirection();let{rtpReceiver:t}=this._mapRecvLocalIdInfo.get(e)||{};if(!t)throw Error("associated RTCRtpReceiver not found");return t.getStats()}async pauseReceiving(e){}async resumeReceiving(e){}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertRecvDirection();let{streamId:i,ordered:s,maxPacketLifeTime:n,maxRetransmits:o}=e,c={negotiated:!0,id:i,ordered:s,maxPacketLifeTime:n,maxRetransmits:o,protocol:r};u.debug("receiveDataChannel() [options:%o]",c);let d=this._pc.createDataChannel(t,c);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation({oldDataChannelSpec:!0});let e={type:"offer",sdp:this._remoteSdp.getSdp()};u.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();if(!this._transportReady){let e=a.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}u.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=a.parse(this._pc.localDescription.sdp));let r=d.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)}),this._transportReady=!0}assertSendDirection(){if("send"!==this._direction)throw Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw Error('method can just be called for handlers with "recv" direction')}}e.exports.Safari11=g}),f("8HCMN",function(e,t){var r=e.exports&&e.exports.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,s)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),i=e.exports&&e.exports.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=e.exports&&e.exports.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s in e)"default"!==s&&Object.prototype.hasOwnProperty.call(e,s)&&r(t,e,s);return i(t,e),t};Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.Edge11=void 0;var a=m("7Wufc"),n=m("6yq6Z");let o=s(m("2fqxq")),c=s(m("kIl0y")),d=s(m("a1wxn"));var l=m("6bVBA");let p=new a.Logger("Edge11");class h extends l.HandlerInterface{static createFactory(){return()=>new h}constructor(){super(),this._rtpSenders=new Map,this._rtpReceivers=new Map,this._nextSendLocalId=0,this._transportReady=!1}get name(){return"Edge11"}close(){p.debug("close()");try{this._iceGatherer.close()}catch(e){}try{this._iceTransport.stop()}catch(e){}try{this._dtlsTransport.stop()}catch(e){}for(let e of this._rtpSenders.values())try{e.stop()}catch(e){}for(let e of this._rtpReceivers.values())try{e.stop()}catch(e){}this.emit("@close")}async getNativeRtpCapabilities(){return p.debug("getNativeRtpCapabilities()"),d.getCapabilities()}async getNativeSctpCapabilities(){return p.debug("getNativeSctpCapabilities()"),{numStreams:{OS:0,MIS:0}}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:n,additionalSettings:d,proprietaryConstraints:l,extendedRtpCapabilities:h}){p.debug("run()"),this._sendingRtpParametersByKind={audio:c.getSendingRtpParameters("audio",h),video:c.getSendingRtpParameters("video",h)},this._remoteIceParameters=t,this._remoteIceCandidates=r,this._remoteDtlsParameters=i,this._cname=`CNAME-${o.generateRandomNumber()}`,this.setIceGatherer({iceServers:a,iceTransportPolicy:n}),this.setIceTransport(),this.setDtlsTransport()}async updateIceServers(e){throw new n.UnsupportedError("not supported")}async restartIce(e){if(p.debug("restartIce()"),this._remoteIceParameters=e,this._transportReady){for(let t of(p.debug("restartIce() | calling iceTransport.start()"),this._iceTransport.start(this._iceGatherer,e,"controlling"),this._remoteIceCandidates))this._iceTransport.addRemoteCandidate(t);this._iceTransport.addRemoteCandidate({})}}async getTransportStats(){return this._iceTransport.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:i}){p.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),this._transportReady||await this.setupTransport({localDtlsRole:"server"}),p.debug("send() | calling new RTCRtpSender()");let s=new RTCRtpSender(e,this._dtlsTransport),a=o.clone(this._sendingRtpParametersByKind[e.kind]);a.codecs=c.reduceCodecs(a.codecs,i);let n=a.codecs.some(e=>/.+\/rtx$/i.test(e.mimeType));for(let e of(t||(t=[{}]),t))e.ssrc=o.generateRandomNumber(),n&&(e.rtx={ssrc:o.generateRandomNumber()});a.encodings=t,a.rtcp={cname:this._cname,reducedSize:!0,mux:!0};let l=d.mangleRtpParameters(a);p.debug("send() | calling rtpSender.send() [params:%o]",l),await s.send(l);let h=String(this._nextSendLocalId);return this._nextSendLocalId++,this._rtpSenders.set(h,s),{localId:h,rtpParameters:a,rtpSender:s}}async stopSending(e){p.debug("stopSending() [localId:%s]",e);let t=this._rtpSenders.get(e);if(!t)throw Error("RTCRtpSender not found");this._rtpSenders.delete(e);try{p.debug("stopSending() | calling rtpSender.stop()"),t.stop()}catch(e){throw p.warn("stopSending() | rtpSender.stop() failed:%o",e),e}}async pauseSending(e){}async resumeSending(e){}async replaceTrack(e,t){t?p.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):p.debug("replaceTrack() [localId:%s, no track]",e);let r=this._rtpSenders.get(e);if(!r)throw Error("RTCRtpSender not found");r.setTrack(t)}async setMaxSpatialLayer(e,t){p.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._rtpSenders.get(e);if(!r)throw Error("RTCRtpSender not found");let i=r.getParameters();i.encodings.forEach((e,r)=>{r<=t?e.active=!0:e.active=!1}),await r.setParameters(i)}async setRtpEncodingParameters(e,t){p.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._rtpSenders.get(e);if(!r)throw Error("RTCRtpSender not found");let i=r.getParameters();i.encodings.forEach((e,r)=>{i.encodings[r]={...e,...t}}),await r.setParameters(i)}async getSenderStats(e){let t=this._rtpSenders.get(e);if(!t)throw Error("RTCRtpSender not found");return t.getStats()}async sendDataChannel(e){throw new n.UnsupportedError("not implemented")}async receive(e){let t=[];for(let t of e){let{trackId:e,kind:r}=t;p.debug("receive() [trackId:%s, kind:%s]",e,r)}for(let r of(this._transportReady||await this.setupTransport({localDtlsRole:"server"}),e)){let{trackId:e,kind:i,rtpParameters:s}=r;p.debug("receive() | calling new RTCRtpReceiver()");let a=new RTCRtpReceiver(this._dtlsTransport,i);a.addEventListener("error",e=>{p.error('rtpReceiver "error" event [event:%o]',e)});let n=d.mangleRtpParameters(s);p.debug("receive() | calling rtpReceiver.receive() [params:%o]",n),await a.receive(n),this._rtpReceivers.set(e,a),t.push({localId:e,track:a.track,rtpReceiver:a})}return t}async stopReceiving(e){for(let t of e){p.debug("stopReceiving() [localId:%s]",t);let e=this._rtpReceivers.get(t);if(!e)throw Error("RTCRtpReceiver not found");this._rtpReceivers.delete(t);try{p.debug("stopReceiving() | calling rtpReceiver.stop()"),e.stop()}catch(e){p.warn("stopReceiving() | rtpReceiver.stop() failed:%o",e)}}}async pauseReceiving(e){}async resumeReceiving(e){}async getReceiverStats(e){let t=this._rtpReceivers.get(e);if(!t)throw Error("RTCRtpReceiver not found");return t.getStats()}async receiveDataChannel(e){throw new n.UnsupportedError("not implemented")}setIceGatherer({iceServers:e,iceTransportPolicy:t}){let r=new RTCIceGatherer({iceServers:e||[],gatherPolicy:t||"all"});r.addEventListener("error",e=>{p.error('iceGatherer "error" event [event:%o]',e)});try{r.gather()}catch(e){p.debug("setIceGatherer() | iceGatherer.gather() failed: %s",e.toString())}this._iceGatherer=r}setIceTransport(){let e=new RTCIceTransport(this._iceGatherer);e.addEventListener("statechange",()=>{switch(e.state){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}}),e.addEventListener("icestatechange",()=>{switch(e.state){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}}),e.addEventListener("candidatepairchange",e=>{p.debug('iceTransport "candidatepairchange" event [pair:%o]',e.pair)}),this._iceTransport=e}setDtlsTransport(){let e=new RTCDtlsTransport(this._iceTransport);e.addEventListener("statechange",()=>{p.debug('dtlsTransport "statechange" event [state:%s]',e.state)}),e.addEventListener("dtlsstatechange",()=>{p.debug('dtlsTransport "dtlsstatechange" event [state:%s]',e.state),"closed"===e.state&&this.emit("@connectionstatechange","closed")}),e.addEventListener("error",e=>{p.error('dtlsTransport "error" event [event:%o]',e)}),this._dtlsTransport=e}async setupTransport({localDtlsRole:e}){p.debug("setupTransport()");let t=this._dtlsTransport.getLocalParameters();for(let r of(t.role=e,await new Promise((e,r)=>{this.safeEmit("@connect",{dtlsParameters:t},e,r)}),this._iceTransport.start(this._iceGatherer,this._remoteIceParameters,"controlling"),this._remoteIceCandidates))this._iceTransport.addRemoteCandidate(r);this._iceTransport.addRemoteCandidate({}),this._remoteDtlsParameters.fingerprints=this._remoteDtlsParameters.fingerprints.filter(e=>"sha-256"===e.algorithm||"sha-384"===e.algorithm||"sha-512"===e.algorithm),this._dtlsTransport.start(this._remoteDtlsParameters),this._transportReady=!0}}e.exports.Edge11=h}),f("a1wxn",function(e,t){var r=e.exports&&e.exports.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,s)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),i=e.exports&&e.exports.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=e.exports&&e.exports.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s in e)"default"!==s&&Object.prototype.hasOwnProperty.call(e,s)&&r(t,e,s);return i(t,e),t};Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.mangleRtpParameters=e.exports.getCapabilities=void 0;let a=s(m("2fqxq"));e.exports.getCapabilities=function(){let e=RTCRtpReceiver.getCapabilities(),t=a.clone(e);for(let e of t.codecs??[]){if(e.channels=e.numChannels,delete e.numChannels,e.mimeType=e.mimeType||`${e.kind}/${e.name}`,e.parameters){let t=e.parameters;t.apt&&(t.apt=Number(t.apt)),t["packetization-mode"]&&(t["packetization-mode"]=Number(t["packetization-mode"]))}for(let t of e.rtcpFeedback||[])t.parameter||(t.parameter="")}return t},e.exports.mangleRtpParameters=function(e){let t=a.clone(e);for(let e of(t.mid&&(t.muxId=t.mid,delete t.mid),t.codecs))e.channels&&(e.numChannels=e.channels,delete e.channels),e.mimeType&&!e.name&&(e.name=e.mimeType.split("/")[1]),delete e.mimeType;return t}}),f("ey9Hv",function(e,t){var r=e.exports&&e.exports.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,s)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),i=e.exports&&e.exports.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=e.exports&&e.exports.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s in e)"default"!==s&&Object.prototype.hasOwnProperty.call(e,s)&&r(t,e,s);return i(t,e),t};Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.ReactNativeUnifiedPlan=void 0;let a=s(m("1HJ2f"));var n=m("7Wufc");let o=s(m("2fqxq")),c=s(m("kIl0y")),d=s(m("5opQr")),l=s(m("b4hOr")),p=s(m("bt0QK"));var h=m("6yq6Z"),u=m("6bVBA"),f=m("47IPL"),g=m("kBU2H");let v=new n.Logger("ReactNativeUnifiedPlan"),_={OS:1024,MIS:1024};class b extends u.HandlerInterface{static createFactory(){return()=>new b}constructor(){super(),this._closed=!1,this._mapMidTransceiver=new Map,this._sendStream=new MediaStream,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"ReactNativeUnifiedPlan"}close(){if(v.debug("close()"),!this._closed){if(this._closed=!0,this._sendStream.release(!1),this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}}async getNativeRtpCapabilities(){v.debug("getNativeRtpCapabilities()");let e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan"});try{e.addTransceiver("audio"),e.addTransceiver("video");let t=await e.createOffer();try{e.close()}catch(e){}let r=a.parse(t.sdp),i=d.extractRtpCapabilities({sdpObject:r});return p.addNackSuppportForOpus(i),i}catch(t){try{e.close()}catch(e){}throw t}}async getNativeSctpCapabilities(){return v.debug("getNativeSctpCapabilities()"),{numStreams:_}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:n,additionalSettings:o,proprietaryConstraints:d,extendedRtpCapabilities:l}){this.assertNotClosed(),v.debug("run()"),this._direction=e,this._remoteSdp=new f.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s}),this._sendingRtpParametersByKind={audio:c.getSendingRtpParameters("audio",l),video:c.getSendingRtpParameters("video",l)},this._sendingRemoteRtpParametersByKind={audio:c.getSendingRemoteRtpParameters("audio",l),video:c.getSendingRemoteRtpParameters("video",l)},i.role&&"auto"!==i.role&&(this._forcedLocalDtlsRole="server"===i.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a||[],iceTransportPolicy:n||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan",...o},d),this._pc.addEventListener("icegatheringstatechange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)}),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",()=>{this.emit("@connectionstatechange",this._pc.connectionState)}):this._pc.addEventListener("iceconnectionstatechange",()=>{switch(v.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.iceConnectionState){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}})}async updateIceServers(e){this.assertNotClosed(),v.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),v.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady){if("send"===this._direction){let e=await this._pc.createOffer({iceRestart:!0});v.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);let t={type:"answer",sdp:this._remoteSdp.getSdp()};v.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{let e={type:"offer",sdp:this._remoteSdp.getSdp()};v.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();v.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:i}){let s;this.assertNotClosed(),this.assertSendDirection(),v.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),t&&t.length>1&&t.forEach((e,t)=>{e.rid=`r${t}`});let n=o.clone(this._sendingRtpParametersByKind[e.kind]);n.codecs=c.reduceCodecs(n.codecs,i);let p=o.clone(this._sendingRemoteRtpParametersByKind[e.kind]);p.codecs=c.reduceCodecs(p.codecs,i);let h=this._remoteSdp.getNextMediaSectionIdx(),u=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:t}),m=await this._pc.createOffer(),f=a.parse(m.sdp);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f});let _=!1,b=(0,g.parse)((t||[{}])[0].scalabilityMode);t&&1===t.length&&b.spatialLayers>1&&"video/vp9"===n.codecs[0].mimeType.toLowerCase()&&(v.debug("send() | enabling legacy simulcast for VP9 SVC"),_=!0,s=(f=a.parse(m.sdp)).media[h.idx],l.addLegacySimulcast({offerMediaObject:s,numStreams:b.spatialLayers}),m={type:"offer",sdp:a.write(f)}),v.debug("send() | calling pc.setLocalDescription() [offer:%o]",m),await this._pc.setLocalDescription(m);let w=u.mid??void 0;if(w||v.warn("send() | missing transceiver.mid (bug in react-native-webrtc, using a workaround"),n.mid=w,s=(f=a.parse(this._pc.localDescription.sdp)).media[h.idx],n.rtcp.cname=d.getCname({offerMediaObject:s}),t){if(1===t.length){let e=l.getRtpEncodings({offerMediaObject:s});Object.assign(e[0],t[0]),_&&(e=[e[0]]),n.encodings=e}else n.encodings=t}else n.encodings=l.getRtpEncodings({offerMediaObject:s});if(n.encodings.length>1&&("video/vp8"===n.codecs[0].mimeType.toLowerCase()||"video/h264"===n.codecs[0].mimeType.toLowerCase()))for(let e of n.encodings)e.scalabilityMode?e.scalabilityMode=`L1T${b.temporalLayers}`:e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:s,reuseMid:h.reuseMid,offerRtpParameters:n,answerRtpParameters:p,codecOptions:r,extmapAllowMixed:!0});let y={type:"answer",sdp:this._remoteSdp.getSdp()};return v.debug("send() | calling pc.setRemoteDescription() [answer:%o]",y),await this._pc.setRemoteDescription(y),w||(w=u.mid,n.mid=w),this._mapMidTransceiver.set(w,u),{localId:w,rtpParameters:n,rtpSender:u.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;v.debug("stopSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch(e){}let r=await this._pc.createOffer();v.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};v.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),v.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();v.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};v.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),v.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();v.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};v.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?v.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):v.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),v.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((e,r)=>{r<=t?e.active=!0:e.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let s=await this._pc.createOffer();v.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let a={type:"answer",sdp:this._remoteSdp.getSdp()};v.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),v.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((e,r)=>{i.encodings[r]={...e,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let s=await this._pc.createOffer();v.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let a={type:"answer",sdp:this._remoteSdp.getSdp()};v.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:s}){this.assertNotClosed(),this.assertSendDirection();let n={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:s};v.debug("sendDataChannel() [options:%o]",n);let o=this._pc.createDataChannel(i,n);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%_.MIS,!this._hasDataChannelMediaSection){let e=await this._pc.createOffer(),t=a.parse(e.sdp),r=t.media.find(e=>"application"===e.type);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),v.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});let i={type:"answer",sdp:this._remoteSdp.getSdp()};v.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:o,sctpStreamParameters:{streamId:n.id,ordered:n.ordered,maxPacketLifeTime:n.maxPacketLifeTime,maxRetransmits:n.maxRetransmits}}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let t of e){let{trackId:e,kind:i,rtpParameters:s,streamId:a}=t;v.debug("receive() [trackId:%s, kind:%s]",e,i);let n=s.mid||String(this._mapMidTransceiver.size);r.set(e,n),this._remoteSdp.receive({mid:n,kind:i,offerRtpParameters:s,streamId:a||s.rtcp.cname,trackId:e})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};v.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);let s=await this._pc.createAnswer(),n=a.parse(s.sdp);for(let t of e){let{trackId:e,rtpParameters:i}=t,s=r.get(e),a=n.media.find(e=>String(e.mid)===s);d.applyCodecParameters({offerRtpParameters:i,answerMediaObject:a})}for(let i of(s={type:"answer",sdp:a.write(n)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:n}),v.debug("receive() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s),e)){let{trackId:e}=i,s=r.get(e),a=this._pc.getTransceivers().find(e=>e.mid===s);if(a)this._mapMidTransceiver.set(s,a),t.push({localId:s,track:a.receiver.track,rtpReceiver:a.receiver});else throw Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let t of e){v.debug("stopReceiving() [localId:%s]",t);let e=this._mapMidTransceiver.get(t);if(!e)throw Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(e.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};v.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();for(let t of(v.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r),e))this._mapMidTransceiver.delete(t)}async pauseReceiving(e){for(let t of(this.assertNotClosed(),this.assertRecvDirection(),e)){v.debug("pauseReceiving() [localId:%s]",t);let e=this._mapMidTransceiver.get(t);if(!e)throw Error("associated RTCRtpTransceiver not found");e.direction="inactive",this._remoteSdp.pauseMediaSection(t)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};v.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();v.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){for(let t of(this.assertNotClosed(),this.assertRecvDirection(),e)){v.debug("resumeReceiving() [localId:%s]",t);let e=this._mapMidTransceiver.get(t);if(!e)throw Error("associated RTCRtpTransceiver not found");e.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(t)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};v.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();v.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:s,maxPacketLifeTime:n,maxRetransmits:o}=e,c={negotiated:!0,id:i,ordered:s,maxPacketLifeTime:n,maxRetransmits:o,protocol:r};v.debug("receiveDataChannel() [options:%o]",c);let d=this._pc.createDataChannel(t,c);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let e={type:"offer",sdp:this._remoteSdp.getSdp()};v.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();if(!this._transportReady){let e=a.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}v.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=a.parse(this._pc.localDescription.sdp));let r=d.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)}),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new h.InvalidStateError("method called in a closed handler")}assertSendDirection(){if("send"!==this._direction)throw Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw Error('method can just be called for handlers with "recv" direction')}}e.exports.ReactNativeUnifiedPlan=b}),f("apeMR",function(e,t){var r=e.exports&&e.exports.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,s)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),i=e.exports&&e.exports.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=e.exports&&e.exports.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s in e)"default"!==s&&Object.prototype.hasOwnProperty.call(e,s)&&r(t,e,s);return i(t,e),t};Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.ReactNative=void 0;let a=s(m("1HJ2f"));var n=m("7Wufc"),o=m("6yq6Z");let c=s(m("2fqxq")),d=s(m("kIl0y")),l=s(m("5opQr")),p=s(m("157SQ"));var h=m("6bVBA"),u=m("47IPL");let f=new n.Logger("ReactNative"),g={OS:1024,MIS:1024};class v extends h.HandlerInterface{static createFactory(){return()=>new v}constructor(){super(),this._sendStream=new MediaStream,this._mapSendLocalIdTrack=new Map,this._nextSendLocalId=0,this._mapRecvLocalIdInfo=new Map,this._hasDataChannelMediaSection=!1,this._nextSendSctpStreamId=0,this._transportReady=!1}get name(){return"ReactNative"}close(){if(f.debug("close()"),this._sendStream.release(!1),this._pc)try{this._pc.close()}catch(e){}this.emit("@close")}async getNativeRtpCapabilities(){f.debug("getNativeRtpCapabilities()");let e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"plan-b"});try{let t=await e.createOffer({offerToReceiveAudio:!0,offerToReceiveVideo:!0});try{e.close()}catch(e){}let r=a.parse(t.sdp);return l.extractRtpCapabilities({sdpObject:r})}catch(t){try{e.close()}catch(e){}throw t}}async getNativeSctpCapabilities(){return f.debug("getNativeSctpCapabilities()"),{numStreams:g}}run({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:n,additionalSettings:o,proprietaryConstraints:c,extendedRtpCapabilities:l}){f.debug("run()"),this._direction=e,this._remoteSdp=new u.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s,planB:!0}),this._sendingRtpParametersByKind={audio:d.getSendingRtpParameters("audio",l),video:d.getSendingRtpParameters("video",l)},this._sendingRemoteRtpParametersByKind={audio:d.getSendingRemoteRtpParameters("audio",l),video:d.getSendingRemoteRtpParameters("video",l)},i.role&&"auto"!==i.role&&(this._forcedLocalDtlsRole="server"===i.role?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a||[],iceTransportPolicy:n||"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"plan-b",...o},c),this._pc.addEventListener("icegatheringstatechange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)}),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",()=>{this.emit("@connectionstatechange",this._pc.connectionState)}):this._pc.addEventListener("iceconnectionstatechange",()=>{switch(f.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.iceConnectionState){case"checking":this.emit("@connectionstatechange","connecting");break;case"connected":case"completed":this.emit("@connectionstatechange","connected");break;case"failed":this.emit("@connectionstatechange","failed");break;case"disconnected":this.emit("@connectionstatechange","disconnected");break;case"closed":this.emit("@connectionstatechange","closed")}})}async updateIceServers(e){f.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(f.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady){if("send"===this._direction){let e=await this._pc.createOffer({iceRestart:!0});f.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);let t={type:"answer",sdp:this._remoteSdp.getSdp()};f.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{let e={type:"offer",sdp:this._remoteSdp.getSdp()};f.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();f.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",t),await this._pc.setLocalDescription(t)}}}async getTransportStats(){return this._pc.getStats()}async send({track:e,encodings:t,codecOptions:r,codec:i}){let s;this.assertSendDirection(),f.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),i&&f.warn("send() | codec selection is not available in %s handler",this.name),this._sendStream.addTrack(e),this._pc.addStream(this._sendStream);let n=await this._pc.createOffer(),o=a.parse(n.sdp),h=c.clone(this._sendingRtpParametersByKind[e.kind]);h.codecs=d.reduceCodecs(h.codecs);let u=c.clone(this._sendingRemoteRtpParametersByKind[e.kind]);if(u.codecs=d.reduceCodecs(u.codecs),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),"video"===e.kind&&t&&t.length>1&&(f.debug("send() | enabling simulcast"),s=(o=a.parse(n.sdp)).media.find(e=>"video"===e.type),p.addLegacySimulcast({offerMediaObject:s,track:e,numStreams:t.length}),n={type:"offer",sdp:a.write(o)}),f.debug("send() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),s=(o=a.parse(this._pc.localDescription.sdp)).media.find(t=>t.type===e.kind),h.rtcp.cname=l.getCname({offerMediaObject:s}),h.encodings=p.getRtpEncodings({offerMediaObject:s,track:e}),t)for(let e=0;e<h.encodings.length;++e)t[e]&&Object.assign(h.encodings[e],t[e]);if(h.encodings.length>1&&("video/vp8"===h.codecs[0].mimeType.toLowerCase()||"video/h264"===h.codecs[0].mimeType.toLowerCase()))for(let e of h.encodings)e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:s,offerRtpParameters:h,answerRtpParameters:u,codecOptions:r});let m={type:"answer",sdp:this._remoteSdp.getSdp()};f.debug("send() | calling pc.setRemoteDescription() [answer:%o]",m),await this._pc.setRemoteDescription(m);let g=String(this._nextSendLocalId);return this._nextSendLocalId++,this._mapSendLocalIdTrack.set(g,e),{localId:g,rtpParameters:h}}async stopSending(e){this.assertSendDirection(),f.debug("stopSending() [localId:%s]",e);let t=this._mapSendLocalIdTrack.get(e);if(!t)throw Error("track not found");this._mapSendLocalIdTrack.delete(e),this._sendStream.removeTrack(t),this._pc.addStream(this._sendStream);let r=await this._pc.createOffer();f.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r);try{await this._pc.setLocalDescription(r)}catch(e){if(0===this._sendStream.getTracks().length){f.warn("stopSending() | ignoring expected error due no sending tracks: %s",e.toString());return}throw e}if("stable"===this._pc.signalingState)return;let i={type:"answer",sdp:this._remoteSdp.getSdp()};f.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async pauseSending(e){}async resumeSending(e){}async replaceTrack(e,t){throw new o.UnsupportedError("not implemented")}async setMaxSpatialLayer(e,t){throw new o.UnsupportedError("not implemented")}async setRtpEncodingParameters(e,t){throw new o.UnsupportedError("not implemented")}async getSenderStats(e){throw new o.UnsupportedError("not implemented")}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:s}){this.assertSendDirection();let n={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmitTime:t,maxRetransmits:r,protocol:s};f.debug("sendDataChannel() [options:%o]",n);let o=this._pc.createDataChannel(i,n);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%g.MIS,!this._hasDataChannelMediaSection){let e=await this._pc.createOffer(),t=a.parse(e.sdp),r=t.media.find(e=>"application"===e.type);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),f.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e),this._remoteSdp.sendSctpAssociation({offerMediaObject:r});let i={type:"answer",sdp:this._remoteSdp.getSdp()};f.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:o,sctpStreamParameters:{streamId:n.id,ordered:n.ordered,maxPacketLifeTime:n.maxPacketLifeTime,maxRetransmits:n.maxRetransmits}}}async receive(e){this.assertRecvDirection();let t=[],r=new Map;for(let t of e){let{trackId:e,kind:i,rtpParameters:s}=t;f.debug("receive() [trackId:%s, kind:%s]",e,i);let a=t.streamId||s.rtcp.cname;f.debug("receive() | forcing a random remote streamId to avoid well known bug in react-native-webrtc"),a+=`-hack-${c.generateRandomNumber()}`,r.set(e,a),this._remoteSdp.receive({mid:i,kind:i,offerRtpParameters:s,streamId:a,trackId:e})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};f.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);let s=await this._pc.createAnswer(),n=a.parse(s.sdp);for(let t of e){let{kind:e,rtpParameters:r}=t,i=n.media.find(t=>String(t.mid)===e);l.applyCodecParameters({offerRtpParameters:r,answerMediaObject:i})}for(let i of(s={type:"answer",sdp:a.write(n)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:n}),f.debug("receive() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s),e)){let{kind:e,trackId:s,rtpParameters:a}=i,n=r.get(s),o=this._pc.getRemoteStreams().find(e=>e.id===n).getTrackById(s);if(!o)throw Error("remote track not found");this._mapRecvLocalIdInfo.set(s,{mid:e,rtpParameters:a}),t.push({localId:s,track:o})}return t}async stopReceiving(e){for(let t of(this.assertRecvDirection(),e)){f.debug("stopReceiving() [localId:%s]",t);let{mid:e,rtpParameters:r}=this._mapRecvLocalIdInfo.get(t)||{};this._mapRecvLocalIdInfo.delete(t),this._remoteSdp.planBStopReceiving({mid:e,offerRtpParameters:r})}let t={type:"offer",sdp:this._remoteSdp.getSdp()};f.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();f.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async pauseReceiving(e){}async resumeReceiving(e){}async getReceiverStats(e){throw new o.UnsupportedError("not implemented")}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){this.assertRecvDirection();let{streamId:i,ordered:s,maxPacketLifeTime:n,maxRetransmits:o}=e,c={negotiated:!0,id:i,ordered:s,maxPacketLifeTime:n,maxRetransmitTime:n,maxRetransmits:o,protocol:r};f.debug("receiveDataChannel() [options:%o]",c);let d=this._pc.createDataChannel(t,c);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation({oldDataChannelSpec:!0});let e={type:"offer",sdp:this._remoteSdp.getSdp()};f.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();if(!this._transportReady){let e=a.parse(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}f.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=a.parse(this._pc.localDescription.sdp));let r=l.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole("client"===e?"server":"client"),await new Promise((e,t)=>{this.safeEmit("@connect",{dtlsParameters:r},e,t)}),this._transportReady=!0}assertSendDirection(){if("send"!==this._direction)throw Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if("recv"!==this._direction)throw Error('method can just be called for handlers with "recv" direction')}}e.exports.ReactNative=v}),f("8cmuS",function(e,t){var r=e.exports&&e.exports.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,s)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),i=e.exports&&e.exports.__exportStar||function(e,t){for(var i in e)"default"===i||Object.prototype.hasOwnProperty.call(t,i)||r(t,e,i)};Object.defineProperty(e.exports,"__esModule",{value:!0}),i(m("fI7XH"),e.exports),i(m("baDpS"),e.exports),i(m("iSZvy"),e.exports),i(m("3HSbG"),e.exports),i(m("gLRXX"),e.exports),i(m("420JU"),e.exports),i(m("cVFce"),e.exports),i(m("liok7"),e.exports),i(m("6bVBA"),e.exports),i(m("6yq6Z"),e.exports)}),f("cVFce",function(e,t){Object.defineProperty(e.exports,"__esModule",{value:!0})}),f("liok7",function(e,t){Object.defineProperty(e.exports,"__esModule",{value:!0})}),p(module.exports,"streamerClient",()=>to);var g={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};const v=new Uint8Array(16),_=[];for(let e=0;e<256;++e)_.push((e+256).toString(16).slice(1));var b=function(t,r,i){if(g.randomUUID&&!r&&!t)return g.randomUUID();let s=(t=t||{}).random||(t.rng||function(){if(!e&&!(e="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)))throw Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return e(v)})();if(s[6]=15&s[6]|64,s[8]=63&s[8]|128,r){i=i||0;for(let e=0;e<16;++e)r[i+e]=s[e];return r}return function(e,t=0){return _[e[t+0]]+_[e[t+1]]+_[e[t+2]]+_[e[t+3]]+"-"+_[e[t+4]]+_[e[t+5]]+"-"+_[e[t+6]]+_[e[t+7]]+"-"+_[e[t+8]]+_[e[t+9]]+"-"+_[e[t+10]]+_[e[t+11]]+_[e[t+12]]+_[e[t+13]]+_[e[t+14]]+_[e[t+15]]}(s)};JSON.parse('{"name":"protoo-client","version":"4.0.6","description":"protoo JavaScript client module","author":"Iñaki Baz Castillo <ibc@aliax.net>","homepage":"https://protoo.versatica.com","license":"MIT","repository":{"type":"git","url":"https://github.com/ibc/protoo.git"},"main":"lib/index.js","keywords":["nodejs","browser","websocket"],"engines":{"node":">=8.0.0"},"scripts":{"lint":"eslint -c .eslintrc.js lib"},"dependencies":{"debug":"^4.3.1","events":"^3.2.0","retry":"^0.12.0"},"devDependencies":{"eslint":"^5.16.0"},"optionalDependencies":{"websocket":"^1.0.33"}}').version;var w={},y={},S=m("1JjHr");const R="protoo-client";y=class{constructor(e){e?(this._debug=S(`${R}:${e}`),this._warn=S(`${R}:WARN:${e}`),this._error=S(`${R}:ERROR:${e}`)):(this._debug=S(R),this._warn=S(`${R}:WARN`),this._error=S(`${R}:ERROR`)),this._debug.log=console.info.bind(console),this._warn.log=console.warn.bind(console),this._error.log=console.error.bind(console)}get debug(){return this._debug}get warn(){return this._warn}get error(){return this._error}};var P={},T=c.EventEmitter;P=class extends T{constructor(e){super(),this.setMaxListeners(1/0),this._logger=e||new y("EnhancedEventEmitter")}safeEmit(e,...t){try{this.emit(e,...t)}catch(t){this._logger.error("safeEmit() | event listener threw an error [event:%s]:%o",e,t)}}async safeEmitAsPromise(e,...t){return new Promise((r,i)=>{this.safeEmit(e,...t,r,i)})}};var C={};s=function(){return Math.round(1e7*Math.random())};const k=new y("Message");C=class{static parse(e){let t;let r={};try{t=JSON.parse(e)}catch(e){k.error("parse() | invalid JSON: %s",e);return}if("object"!=typeof t||Array.isArray(t)){k.error("parse() | not an object");return}if(t.request){if(r.request=!0,"string"!=typeof t.method){k.error("parse() | missing/invalid method field");return}if("number"!=typeof t.id){k.error("parse() | missing/invalid id field");return}r.id=t.id,r.method=t.method,r.data=t.data||{}}else if(t.response){if(r.response=!0,"number"!=typeof t.id){k.error("parse() | missing/invalid id field");return}r.id=t.id,t.ok?(r.ok=!0,r.data=t.data||{}):(r.ok=!1,r.errorCode=t.errorCode,r.errorReason=t.errorReason)}else if(t.notification){if(r.notification=!0,"string"!=typeof t.method){k.error("parse() | missing/invalid method field");return}r.method=t.method,r.data=t.data||{}}else{k.error("parse() | missing request/response field");return}return r}static createRequest(e,t){return{request:!0,id:s(),method:e,data:t||{}}}static createSuccessResponse(e,t){return{response:!0,id:e.id,ok:!0,data:t||{}}}static createErrorResponse(e,t,r){return{response:!0,id:e.id,ok:!1,errorCode:t,errorReason:r}}static createNotification(e,t){return{notification:!0,method:e,data:t||{}}}};const x=new y("Peer");w=class extends P{constructor(e){super(x),x.debug("constructor()"),this._closed=!1,this._transport=e,this._connected=!1,this._data={},this._sents=new Map,this._handleTransport()}get closed(){return this._closed}get connected(){return this._connected}get data(){return this._data}set data(e){throw Error("cannot override data object")}close(){if(!this._closed){for(let e of(x.debug("close()"),this._closed=!0,this._connected=!1,this._transport.close(),this._sents.values()))e.close();this.safeEmit("close")}}async request(e,t){let r=C.createRequest(e,t);return this._logger.debug("request() [method:%s, id:%s]",e,r.id),await this._transport.send(r),new Promise((e,t)=>{let i=1500*(15+.1*this._sents.size),s={id:r.id,method:r.method,resolve:t=>{this._sents.delete(r.id)&&(clearTimeout(s.timer),e(t))},reject:e=>{this._sents.delete(r.id)&&(clearTimeout(s.timer),t(e))},timer:setTimeout(()=>{this._sents.delete(r.id)&&t(Error("request timeout"))},i),close:()=>{clearTimeout(s.timer),t(Error("peer closed"))}};this._sents.set(r.id,s)})}async notify(e,t){let r=C.createNotification(e,t);this._logger.debug("notify() [method:%s]",e),await this._transport.send(r)}_handleTransport(){if(this._transport.closed){this._closed=!0,setTimeout(()=>{this._closed||(this._connected=!1,this.safeEmit("close"))});return}this._transport.on("open",()=>{this._closed||(x.debug('emit "open"'),this._connected=!0,this.safeEmit("open"))}),this._transport.on("disconnected",()=>{this._closed||(x.debug('emit "disconnected"'),this._connected=!1,this.safeEmit("disconnected"))}),this._transport.on("failed",e=>{this._closed||(x.debug('emit "failed" [currentAttempt:%s]',e),this._connected=!1,this.safeEmit("failed",e))}),this._transport.on("close",()=>{this._closed||(this._closed=!0,x.debug('emit "close"'),this._connected=!1,this.safeEmit("close"))}),this._transport.on("message",e=>{e.request?this._handleRequest(e):e.response?this._handleResponse(e):e.notification&&this._handleNotification(e)})}_handleRequest(e){try{this.emit("request",e,t=>{let r=C.createSuccessResponse(e,t);this._transport.send(r).catch(()=>{})},(t,r)=>{t instanceof Error?(r=t.message,t=500):"number"==typeof t&&r instanceof Error&&(r=r.message);let i=C.createErrorResponse(e,t,r);this._transport.send(i).catch(()=>{})})}catch(r){let t=C.createErrorResponse(e,500,String(r));this._transport.send(t).catch(()=>{})}}_handleResponse(e){let t=this._sents.get(e.id);if(!t){x.error("received response does not match any sent request [id:%s]",e.id);return}if(e.ok)t.resolve(e.data);else{let r=Error(e.errorReason);r.code=e.errorCode,t.reject(r)}}_handleNotification(e){this.safeEmit("notification",e)}};var D={};if("object"==typeof globalThis)a=globalThis;else try{a=m("dFHla")}catch(e){}finally{if(a||"undefined"==typeof window||(a=window),!a)throw Error("Could not determine global this")}var M=a.WebSocket||a.MozWebSocket,E={};function I(e,t){return t?new M(e,t):new M(e)}m("bAhvK").version,M&&["CONNECTING","OPEN","CLOSING","CLOSED"].forEach(function(e){Object.defineProperty(I,e,{get:function(){return M[e]}})});var O=M?I:null,L={};L=m("aHEzW");const j={retries:10,factor:2,minTimeout:1e3,maxTimeout:8e3},A=new y("WebSocketTransport");function N(e){return e&&e.Math==Math?e:void 0}D=class extends P{constructor(e,t){super(A),A.debug("constructor() [url:%s, options:%o]",e,t),this._closed=!1,this._url=e,this._options=t||{},this._ws=null,this._runWebSocket()}get closed(){return this._closed}close(){if(!this._closed){A.debug("close()"),this._closed=!0,this.safeEmit("close");try{this._ws.onopen=null,this._ws.onclose=null,this._ws.onerror=null,this._ws.onmessage=null,this._ws.close()}catch(e){A.error("close() | error closing the WebSocket: %o",e)}}}async send(e){if(this._closed)throw Error("transport closed");try{this._ws.send(JSON.stringify(e))}catch(e){throw A.warn("send() failed:%o",e),e}}_runWebSocket(){let e=L.operation(this._options.retry||j),t=!1;e.attempt(r=>{if(this._closed){e.stop();return}A.debug("_runWebSocket() [currentAttempt:%s]",r),this._ws=new O(this._url,"protoo",this._options.origin,this._options.headers,this._options.requestOptions,this._options.clientConfig),this._ws.onopen=()=>{this._closed||(t=!0,this.safeEmit("open"))},this._ws.onclose=i=>{if(!this._closed){if(A.warn('WebSocket "close" event [wasClean:%s, code:%s, reason:"%s"]',i.wasClean,i.code,i.reason),4e3!==i.code){if(t){if(e.stop(),this.safeEmit("disconnected"),this._closed)return;this._runWebSocket();return}if(this.safeEmit("failed",r),this._closed||e.retry(!0))return}this._closed=!0,this.safeEmit("close")}},this._ws.onerror=()=>{this._closed||A.error('WebSocket "error" event')},this._ws.onmessage=e=>{if(this._closed)return;let t=C.parse(e.data);if(t){if(0===this.listenerCount("message")){A.error('no listeners for WebSocket "message" event, ignoring received message');return}this.safeEmit("message",t)}}})}},r=w,i=D;const F="object"==typeof globalThis&&N(globalThis)||"object"==typeof window&&N(window)||"object"==typeof self&&N(self)||"object"==typeof l&&N(l)||function(){return this}()||{};function B(e,t,r){let i=r||F,s=i.__SENTRY__=i.__SENTRY__||{};return s[e]||(s[e]=t())}const q=Object.prototype.toString;function $(e){return"[object Object]"===q.call(e)}function U(e){return!!(e&&e.then&&"function"==typeof e.then)}const V="undefined"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__,z=["debug","info","warn","error","log","assert","trace"],W={};function G(e){if(!("console"in F))return e();let t=F.console,r={},i=Object.keys(W);i.forEach(e=>{let i=W[e];r[e]=t[e],t[e]=i});try{return e()}finally{i.forEach(e=>{t[e]=r[e]})}}const H=function(){let e=!1,t={enable:()=>{e=!0},disable:()=>{e=!1},isEnabled:()=>e};return V?z.forEach(r=>{t[r]=(...t)=>{e&&G(()=>{F.console[r](`Sentry Logger [${r}]:`,...t)})}}):z.forEach(e=>{t[e]=()=>void 0}),t}();function K(){return Date.now()/1e3}const J=function(){let{performance:e}=F;if(!e||!e.now)return K;let t=Date.now()-e.now(),r=void 0==e.timeOrigin?t:e.timeOrigin;return()=>(r+e.now())/1e3}();function Q(e){return function e(t,r){if(function(e){if(!$(e))return!1;try{let t=Object.getPrototypeOf(e).constructor.name;return!t||"Object"===t}catch(e){return!0}}(t)){let i=r.get(t);if(void 0!==i)return i;let s={};for(let i of(r.set(t,s),Object.keys(t)))void 0!==t[i]&&(s[i]=e(t[i],r));return s}if(Array.isArray(t)){let i=r.get(t);if(void 0!==i)return i;let s=[];return r.set(t,s),t.forEach(t=>{s.push(e(t,r))}),s}return t}(e,new Map)}function Z(){let e=F.crypto||F.msCrypto,t=()=>16*Math.random();try{if(e&&e.randomUUID)return e.randomUUID().replace(/-/g,"");e&&e.getRandomValues&&(t=()=>{let t=new Uint8Array(1);return e.getRandomValues(t),t[0]})}catch(e){}return"10000000100040008000100000000000".replace(/[018]/g,e=>(e^(15&t())>>e/4).toString(16))}(()=>{let{performance:e}=F;if(!e||!e.now)return;let t=e.now(),r=Date.now(),i=e.timeOrigin?Math.abs(e.timeOrigin+t-r):36e5,s=e.timing&&e.timing.navigationStart,a="number"==typeof s?Math.abs(s+t-r):36e5;if(i<36e5||a<36e5)return i<=a?e.timeOrigin:void 0})();const X="production",Y="undefined"==typeof __SENTRY_DEBUG__||__SENTRY_DEBUG__;(t=n||(n={}))[t.PENDING=0]="PENDING",t[t.RESOLVED=1]="RESOLVED",t[t.REJECTED=2]="REJECTED";class ee{constructor(e){ee.prototype.__init.call(this),ee.prototype.__init2.call(this),ee.prototype.__init3.call(this),ee.prototype.__init4.call(this),this._state=n.PENDING,this._handlers=[];try{e(this._resolve,this._reject)}catch(e){this._reject(e)}}then(e,t){return new ee((r,i)=>{this._handlers.push([!1,t=>{if(e)try{r(e(t))}catch(e){i(e)}else r(t)},e=>{if(t)try{r(t(e))}catch(e){i(e)}else i(e)}]),this._executeHandlers()})}catch(e){return this.then(e=>e,e)}finally(e){return new ee((t,r)=>{let i,s;return this.then(t=>{s=!1,i=t,e&&e()},t=>{s=!0,i=t,e&&e()}).then(()=>{if(s){r(i);return}t(i)})})}__init(){this._resolve=e=>{this._setResult(n.RESOLVED,e)}}__init2(){this._reject=e=>{this._setResult(n.REJECTED,e)}}__init3(){this._setResult=(e,t)=>{if(this._state===n.PENDING){if(U(t)){t.then(this._resolve,this._reject);return}this._state=e,this._value=t,this._executeHandlers()}}}__init4(){this._executeHandlers=()=>{if(this._state===n.PENDING)return;let e=this._handlers.slice();this._handlers=[],e.forEach(e=>{e[0]||(this._state===n.RESOLVED&&e[1](this._value),this._state===n.REJECTED&&e[2](this._value),e[0]=!0)})}}}function et(e,t={}){if(!t.user||(!e.ipAddress&&t.user.ip_address&&(e.ipAddress=t.user.ip_address),e.did||t.did||(e.did=t.user.id||t.user.email||t.user.username)),e.timestamp=t.timestamp||J(),t.abnormal_mechanism&&(e.abnormal_mechanism=t.abnormal_mechanism),t.ignoreDuration&&(e.ignoreDuration=t.ignoreDuration),t.sid&&(e.sid=32===t.sid.length?t.sid:Z()),void 0!==t.init&&(e.init=t.init),!e.did&&t.did&&(e.did=`${t.did}`),"number"==typeof t.started&&(e.started=t.started),e.ignoreDuration)e.duration=void 0;else if("number"==typeof t.duration)e.duration=t.duration;else{let t=e.timestamp-e.started;e.duration=t>=0?t:0}t.release&&(e.release=t.release),t.environment&&(e.environment=t.environment),!e.ipAddress&&t.ipAddress&&(e.ipAddress=t.ipAddress),!e.userAgent&&t.userAgent&&(e.userAgent=t.userAgent),"number"==typeof t.errors&&(e.errors=t.errors),t.status&&(e.status=t.status)}function er(e){return e.transaction}function ei(e){return"function"==typeof e.getSpanJSON?e.getSpanJSON():"function"==typeof e.toJSON?e.toJSON():{}}RegExp("^[ \\t]*([0-9a-f]{32})?-?([0-9a-f]{16})?-?([01])?[ \\t]*$");class es{constructor(){this._notifyingListeners=!1,this._scopeListeners=[],this._eventProcessors=[],this._breadcrumbs=[],this._attachments=[],this._user={},this._tags={},this._extra={},this._contexts={},this._sdkProcessingMetadata={},this._propagationContext=ea()}static clone(e){return e?e.clone():new es}clone(){let e=new es;return e._breadcrumbs=[...this._breadcrumbs],e._tags={...this._tags},e._extra={...this._extra},e._contexts={...this._contexts},e._user=this._user,e._level=this._level,e._span=this._span,e._session=this._session,e._transactionName=this._transactionName,e._fingerprint=this._fingerprint,e._eventProcessors=[...this._eventProcessors],e._requestSession=this._requestSession,e._attachments=[...this._attachments],e._sdkProcessingMetadata={...this._sdkProcessingMetadata},e._propagationContext={...this._propagationContext},e._client=this._client,e}setClient(e){this._client=e}getClient(){return this._client}addScopeListener(e){this._scopeListeners.push(e)}addEventProcessor(e){return this._eventProcessors.push(e),this}setUser(e){return this._user=e||{email:void 0,id:void 0,ip_address:void 0,segment:void 0,username:void 0},this._session&&et(this._session,{user:e}),this._notifyScopeListeners(),this}getUser(){return this._user}getRequestSession(){return this._requestSession}setRequestSession(e){return this._requestSession=e,this}setTags(e){return this._tags={...this._tags,...e},this._notifyScopeListeners(),this}setTag(e,t){return this._tags={...this._tags,[e]:t},this._notifyScopeListeners(),this}setExtras(e){return this._extra={...this._extra,...e},this._notifyScopeListeners(),this}setExtra(e,t){return this._extra={...this._extra,[e]:t},this._notifyScopeListeners(),this}setFingerprint(e){return this._fingerprint=e,this._notifyScopeListeners(),this}setLevel(e){return this._level=e,this._notifyScopeListeners(),this}setTransactionName(e){return this._transactionName=e,this._notifyScopeListeners(),this}setContext(e,t){return null===t?delete this._contexts[e]:this._contexts[e]=t,this._notifyScopeListeners(),this}setSpan(e){return this._span=e,this._notifyScopeListeners(),this}getSpan(){return this._span}getTransaction(){let e=this._span;return e&&e.transaction}setSession(e){return e?this._session=e:delete this._session,this._notifyScopeListeners(),this}getSession(){return this._session}update(e){if(!e)return this;if("function"==typeof e){let t=e(this);return t instanceof es?t:this}return e instanceof es?(this._tags={...this._tags,...e._tags},this._extra={...this._extra,...e._extra},this._contexts={...this._contexts,...e._contexts},e._user&&Object.keys(e._user).length&&(this._user=e._user),e._level&&(this._level=e._level),e._fingerprint&&(this._fingerprint=e._fingerprint),e._requestSession&&(this._requestSession=e._requestSession),e._propagationContext&&(this._propagationContext=e._propagationContext)):$(e)&&(this._tags={...this._tags,...e.tags},this._extra={...this._extra,...e.extra},this._contexts={...this._contexts,...e.contexts},e.user&&(this._user=e.user),e.level&&(this._level=e.level),e.fingerprint&&(this._fingerprint=e.fingerprint),e.requestSession&&(this._requestSession=e.requestSession),e.propagationContext&&(this._propagationContext=e.propagationContext)),this}clear(){return this._breadcrumbs=[],this._tags={},this._extra={},this._user={},this._contexts={},this._level=void 0,this._transactionName=void 0,this._fingerprint=void 0,this._requestSession=void 0,this._span=void 0,this._session=void 0,this._notifyScopeListeners(),this._attachments=[],this._propagationContext=ea(),this}addBreadcrumb(e,t){let r="number"==typeof t?t:100;if(r<=0)return this;let i={timestamp:K(),...e},s=this._breadcrumbs;return s.push(i),this._breadcrumbs=s.length>r?s.slice(-r):s,this._notifyScopeListeners(),this}getLastBreadcrumb(){return this._breadcrumbs[this._breadcrumbs.length-1]}clearBreadcrumbs(){return this._breadcrumbs=[],this._notifyScopeListeners(),this}addAttachment(e){return this._attachments.push(e),this}getAttachments(){return this.getScopeData().attachments}clearAttachments(){return this._attachments=[],this}getScopeData(){let{_breadcrumbs:e,_attachments:t,_contexts:r,_tags:i,_extra:s,_user:a,_level:n,_fingerprint:o,_eventProcessors:c,_propagationContext:d,_sdkProcessingMetadata:l,_transactionName:p,_span:h}=this;return{breadcrumbs:e,attachments:t,contexts:r,tags:i,extra:s,user:a,level:n,fingerprint:o||[],eventProcessors:c,propagationContext:d,sdkProcessingMetadata:l,transactionName:p,span:h}}applyToEvent(e,t={},r=[]){return!function(e,t){var r;let{fingerprint:i,span:s,breadcrumbs:a,sdkProcessingMetadata:n,propagationContext:o}=t;(function(e,t){let{extra:r,tags:i,user:s,contexts:a,level:n,transactionName:o}=t,c=Q(r);c&&Object.keys(c).length&&(e.extra={...c,...e.extra});let d=Q(i);d&&Object.keys(d).length&&(e.tags={...d,...e.tags});let l=Q(s);l&&Object.keys(l).length&&(e.user={...l,...e.user});let p=Q(a);p&&Object.keys(p).length&&(e.contexts={...p,...e.contexts}),n&&(e.level=n),o&&(e.transaction=o)})(e,t),s&&function(e,t){e.contexts={trace:function(e){let{spanId:t,traceId:r}=e.spanContext(),{data:i,op:s,parent_span_id:a,status:n,tags:o,origin:c}=ei(e);return Q({data:i,op:s,parent_span_id:a,span_id:t,status:n,tags:o,trace_id:r,origin:c})}(t),...e.contexts};let r=er(t);if(r){e.sdkProcessingMetadata={dynamicSamplingContext:function(e){let t=el().getClient();if(!t)return{};let r=function(e,t,r){let i=t.getOptions(),{publicKey:s}=t.getDsn()||{},{segment:a}=r&&r.getUser()||{},n=Q({environment:i.environment||X,release:i.release,user_segment:a,public_key:s,trace_id:e});return t.emit&&t.emit("createDsc",n),n}(ei(e).trace_id||"",t,el().getScope()),i=er(e);if(!i)return r;let s=i&&i._frozenDynamicSamplingContext;if(s)return s;let{sampleRate:a,source:n}=i.metadata;null!=a&&(r.sample_rate=`${a}`);let o=ei(i);return n&&"url"!==n&&(r.transaction=o.description),r.sampled=String(function(e){let{traceFlags:t}=e.spanContext();return!!(1&t)}(i)),t.emit&&t.emit("createDsc",r),r}(t),...e.sdkProcessingMetadata};let i=ei(r).description;i&&(e.tags={transaction:i,...e.tags})}}(e,s),e.fingerprint=e.fingerprint?Array.isArray(r=e.fingerprint)?r:[r]:[],i&&(e.fingerprint=e.fingerprint.concat(i)),e.fingerprint&&!e.fingerprint.length&&delete e.fingerprint,function(e,t){let r=[...e.breadcrumbs||[],...t];e.breadcrumbs=r.length?r:void 0}(e,a),e.sdkProcessingMetadata={...e.sdkProcessingMetadata,...n,propagationContext:o}}(e,this.getScopeData()),function e(t,r,i,s=0){return new ee((a,n)=>{let o=t[s];if(null===r||"function"!=typeof o)a(r);else{let c=o({...r},i);Y&&o.id&&null===c&&H.log(`Event processor "${o.id}" dropped event`),U(c)?c.then(r=>e(t,r,i,s+1).then(a)).then(null,n):e(t,c,i,s+1).then(a).then(null,n)}})}([...r,...B("globalEventProcessors",()=>[]),...this._eventProcessors],e,t)}setSDKProcessingMetadata(e){return this._sdkProcessingMetadata={...this._sdkProcessingMetadata,...e},this}setPropagationContext(e){return this._propagationContext=e,this}getPropagationContext(){return this._propagationContext}captureException(e,t){let r=t&&t.event_id?t.event_id:Z();if(!this._client)return H.warn("No client configured on scope - will not capture exception!"),r;let i=Error("Sentry syntheticException");return this._client.captureException(e,{originalException:e,syntheticException:i,...t,event_id:r},this),r}captureMessage(e,t,r){let i=r&&r.event_id?r.event_id:Z();if(!this._client)return H.warn("No client configured on scope - will not capture message!"),i;let s=Error(e);return this._client.captureMessage(e,t,{originalException:e,syntheticException:s,...r,event_id:i},this),i}captureEvent(e,t){let r=t&&t.event_id?t.event_id:Z();return this._client?this._client.captureEvent(e,{...t,event_id:r},this):H.warn("No client configured on scope - will not capture event!"),r}_notifyScopeListeners(){this._notifyingListeners||(this._notifyingListeners=!0,this._scopeListeners.forEach(e=>{e(this)}),this._notifyingListeners=!1)}}function ea(){return{traceId:Z(),spanId:Z().substring(16)}}const en=parseFloat("7.94.1");class eo{constructor(e,t,r,i=en){let s,a;this._version=i,t?s=t:(s=new es).setClient(e),r?a=r:(a=new es).setClient(e),this._stack=[{scope:s}],e&&this.bindClient(e),this._isolationScope=a}isOlderThan(e){return this._version<e}bindClient(e){let t=this.getStackTop();t.client=e,t.scope.setClient(e),e&&e.setupIntegrations&&e.setupIntegrations()}pushScope(){let e=this.getScope().clone();return this.getStack().push({client:this.getClient(),scope:e}),e}popScope(){return!(this.getStack().length<=1)&&!!this.getStack().pop()}withScope(e){let t;let r=this.pushScope();try{t=e(r)}catch(e){throw this.popScope(),e}return U(t)?t.then(e=>(this.popScope(),e),e=>{throw this.popScope(),e}):(this.popScope(),t)}getClient(){return this.getStackTop().client}getScope(){return this.getStackTop().scope}getIsolationScope(){return this._isolationScope}getStack(){return this._stack}getStackTop(){return this._stack[this._stack.length-1]}captureException(e,t){let r=this._lastEventId=t&&t.event_id?t.event_id:Z(),i=Error("Sentry syntheticException");return this.getScope().captureException(e,{originalException:e,syntheticException:i,...t,event_id:r}),r}captureMessage(e,t,r){let i=this._lastEventId=r&&r.event_id?r.event_id:Z(),s=Error(e);return this.getScope().captureMessage(e,t,{originalException:e,syntheticException:s,...r,event_id:i}),i}captureEvent(e,t){let r=t&&t.event_id?t.event_id:Z();return e.type||(this._lastEventId=r),this.getScope().captureEvent(e,{...t,event_id:r}),r}lastEventId(){return this._lastEventId}addBreadcrumb(e,t){let{scope:r,client:i}=this.getStackTop();if(!i)return;let{beforeBreadcrumb:s=null,maxBreadcrumbs:a=100}=i.getOptions&&i.getOptions()||{};if(a<=0)return;let n={timestamp:K(),...e},o=s?G(()=>s(n,t)):n;null!==o&&(i.emit&&i.emit("beforeAddBreadcrumb",o,t),r.addBreadcrumb(o,a))}setUser(e){this.getScope().setUser(e),this.getIsolationScope().setUser(e)}setTags(e){this.getScope().setTags(e),this.getIsolationScope().setTags(e)}setExtras(e){this.getScope().setExtras(e),this.getIsolationScope().setExtras(e)}setTag(e,t){this.getScope().setTag(e,t),this.getIsolationScope().setTag(e,t)}setExtra(e,t){this.getScope().setExtra(e,t),this.getIsolationScope().setExtra(e,t)}setContext(e,t){this.getScope().setContext(e,t),this.getIsolationScope().setContext(e,t)}configureScope(e){let{scope:t,client:r}=this.getStackTop();r&&e(t)}run(e){let t=ed(this);try{e(this)}finally{ed(t)}}getIntegration(e){let t=this.getClient();if(!t)return null;try{return t.getIntegration(e)}catch(t){return Y&&H.warn(`Cannot retrieve integration ${e.id} from the current Hub`),null}}startTransaction(e,t){let r=this._callExtensionMethod("startTransaction",e,t);return Y&&!r&&(this.getClient()?H.warn(`Tracing extension 'startTransaction' has not been added. Call 'addTracingExtensions' before calling 'init':
2
- Sentry.addTracingExtensions();
3
- Sentry.init({...});
4
- `):H.warn("Tracing extension 'startTransaction' is missing. You should 'init' the SDK before calling 'startTransaction'")),r}traceHeaders(){return this._callExtensionMethod("traceHeaders")}captureSession(e=!1){if(e)return this.endSession();this._sendSessionUpdate()}endSession(){let e=this.getStackTop().scope,t=e.getSession();if(t){let e;e={},"ok"===t.status&&(e={status:"exited"}),et(t,e)}this._sendSessionUpdate(),e.setSession()}startSession(e){let{scope:t,client:r}=this.getStackTop(),{release:i,environment:s=X}=r&&r.getOptions()||{},{userAgent:a}=F.navigator||{},n=function(e){let t=J(),r={sid:Z(),init:!0,timestamp:t,started:t,duration:0,status:"ok",errors:0,ignoreDuration:!1,toJSON:()=>Q({sid:`${r.sid}`,init:r.init,started:new Date(1e3*r.started).toISOString(),timestamp:new Date(1e3*r.timestamp).toISOString(),status:r.status,errors:r.errors,did:"number"==typeof r.did||"string"==typeof r.did?`${r.did}`:void 0,duration:r.duration,abnormal_mechanism:r.abnormal_mechanism,attrs:{release:r.release,environment:r.environment,ip_address:r.ipAddress,user_agent:r.userAgent}})};return e&&et(r,e),r}({release:i,environment:s,user:t.getUser(),...a&&{userAgent:a},...e}),o=t.getSession&&t.getSession();return o&&"ok"===o.status&&et(o,{status:"exited"}),this.endSession(),t.setSession(n),n}shouldSendDefaultPii(){let e=this.getClient(),t=e&&e.getOptions();return!!(t&&t.sendDefaultPii)}_sendSessionUpdate(){let{scope:e,client:t}=this.getStackTop(),r=e.getSession();r&&t&&t.captureSession&&t.captureSession(r)}_callExtensionMethod(e,...t){let r=ec().__SENTRY__;if(r&&r.extensions&&"function"==typeof r.extensions[e])return r.extensions[e].apply(this,t);Y&&H.warn(`Extension method ${e} couldn't be found, doing nothing.`)}}function ec(){return F.__SENTRY__=F.__SENTRY__||{extensions:{},hub:void 0},F}function ed(e){let t=ec(),r=ep(t);return eh(t,e),r}function el(){let e=ec();if(e.__SENTRY__&&e.__SENTRY__.acs){let t=e.__SENTRY__.acs.getCurrentHub();if(t)return t}return function(e=ec()){return(!(e&&e.__SENTRY__&&e.__SENTRY__.hub)||ep(e).isOlderThan(en))&&eh(e,new eo),ep(e)}(e)}function ep(e){return B("hub",()=>new eo,e)}function eh(e,t){return!!e&&((e.__SENTRY__=e.__SENTRY__||{}).hub=t,!0)}new WeakMap;const eu=["user","level","extra","contexts","tags","fingerprint","requestSession","propagationContext"];function em(e,t){return el().captureException(e,function(e){if(e)return e instanceof es||"function"==typeof e||Object.keys(e).some(e=>eu.includes(e))?{captureContext:e}:e}(t))}function ef(e,t){el().addBreadcrumb(e,t)}const eg={1:"error",2:"warn",3:"info",4:"verbose",5:"debug"};let ev=Number(2);const e_=new Intl.DateTimeFormat("en-GB",{year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric",timeZone:"GMT"});class eb{constructor(e,t){this.filename=e,this.customLogLevel=t}print(e,t,r,...i){let s=`[ ${e_.format(new Date)} ][ ${eg[e]} ][ ${this.filename} - ${r} ]`;e<=(this.customLogLevel||ev)?t(s,...i):ef({type:"debug",level:eg[e],category:"console",data:{head:s,arguments:i}})}debug(e,...t){this.print(5,console.debug,e,...t)}error(e,...t){this.print(1,console.error,e,...t)}info(e,...t){this.print(3,console.info,e,...t)}log(e,...t){this.print(4,console.log,e,...t)}warn(e,...t){this.print(2,console.warn,e,...t)}deprecated(...e){console.warn("[ DEPRECATED ]",...e)}static setLogLevel(e){ev=e}setLogLevel(e){this.customLogLevel=e}}const ew=new eb("AudioLevels.ts"),ey=window.AudioContext||window.webkitAudioContext;class eS{constructor(e,t){this.speakStartEventTime=0,this.speakStopEventTime=0,this.isSpeaking=!1,this.audioIntervals={},this.audioLevelAverage={count:0,average:0},this.id=e.id,this.listener=t,this.stream=e,this.audioContext=new ey,this.voiceAnalyser=this.audioContext.createAnalyser(),this.voiceAudioStreamSource=this.audioContext.createMediaStreamSource(this.stream),this.voiceAnalyser.fftSize=32,this.voiceAnalyser.minDecibels=-90,this.voiceAnalyser.maxDecibels=-10,this.voiceAudioStreamSource.connect(this.voiceAnalyser),this.analyser=this.audioContext.createAnalyser(),this.audioStreamSource=this.audioContext.createMediaStreamSource(this.stream),this.analyser.fftSize=512,this.analyser.minDecibels=-90,this.analyser.maxDecibels=-10,this.audioStreamSource.connect(this.analyser),this.audioLevels=Array(Math.round(16.666666666666668)).fill(0)}getRecentAudioLevelAverage(){let{length:e}=this.audioLevels;return this.audioLevels.reduce((e,t)=>e+t,0)/e}getCurrentAudioLevel(){let{length:e}=this.audioLevels;return e?this.audioLevels[e-1]:0}audioMuteDetection(){0===this.getRecentAudioLevelAverage()&&this.audioLevels.length>0&&this.listener?.onMuteDetection?.(this.id)}detectSpeakingChange(e){e<5&&!this.speakStopEventTime&&(this.speakStartEventTime=0,this.speakStopEventTime=Date.now()),e>=5&&!this.speakStartEventTime&&(this.speakStartEventTime=Date.now(),this.speakStopEventTime=0);let t=this.speakStartEventTime||this.speakStopEventTime,r=!!this.speakStartEventTime;(Date.now()-t>50&&r||Date.now()-t>500&&!r)&&this.isSpeaking!==r&&(this.isSpeaking=r,r?this.listener?.onStartSpeak():this.listener?.onStopSpeak())}computeRMS(e){let t=0;for(let r=0;r<e.length;r++)t+=e[r]*e[r];return Math.sqrt(t/=e.length)}getInstantAudioLevel(){let e=new Uint8Array(this.analyser.frequencyBinCount);this.voiceAnalyser.getByteFrequencyData(e);let t=this.computeRMS(e);return t>0?100*t/255:0}loopCalcul(){let e=this.getInstantAudioLevel();this.audioLevels.shift(),this.audioLevels.push(e),this.detectSpeakingChange(e),this.listener?.onAudioLevel?.(e,this.id)}analyse(){this.audioIntervals.level=setInterval(()=>this.loopCalcul(),16.666666666666668),this.audioIntervals.muteDetection=setInterval(()=>this.audioMuteDetection(),2e3)}startAverageAnalysis(){this.audioLevelAverage={count:0,average:0},clearInterval(this.audioIntervals.levelAverage),this.audioIntervals.levelAverage=setInterval(()=>{let{count:e,average:t}=this.audioLevelAverage,r=(t*e+this.getRecentAudioLevelAverage())/(e+1);this.audioLevelAverage={count:e+1,average:r}},1e3)}stopAverageAnalysis(){return clearInterval(this.audioIntervals.levelAverage),delete this.audioIntervals.levelAverage,this.audioLevelAverage.average}getFrequencyData(){let e=new Uint8Array(this.analyser.frequencyBinCount);return this.analyser.getByteFrequencyData(e),e}clearIntervals(){clearInterval(this.audioIntervals.level),clearInterval(this.audioIntervals.levelAverage),clearInterval(this.audioIntervals.muteDetection),delete this.audioIntervals.level,delete this.audioIntervals.levelAverage,delete this.audioIntervals.muteDetection,this.audioLevels.fill(0)}release(){this.listener=void 0,this.clearIntervals(),this.stream=void 0;try{this.audioStreamSource.disconnect(this.analyser),this.voiceAudioStreamSource.disconnect(this.voiceAnalyser)}catch(e){ew.error("release","audioStreamSource failed to disconnect",e)}this.audioContext.close().catch(e=>{ew.error("release","audioContext failed to close",e)})}static isAPIAvailable(){return!!ey}}const eR=new eb("AudioRenderer.ts");var eP=class{constructor({consumerId:e}){this.consumerId=e,this.audio=new Audio,this.audio.id=e,this.audio.autoplay=!0,document.body.appendChild(this.audio)}destroy(){this.audio.pause(),this.audio.srcObject=null,document.body.removeChild(this.audio)}setSource(e){this.audio.srcObject=e}async setSink(e){await this.audio.setSinkId?.(e)}getSink(){return this.audio.sinkId}async play(){await this.audio.play().catch(e=>{eR.warn("play","failed to play"),setTimeout(()=>{this.play()},1e3)})}};const eT=async e=>{let{videoWidth:t,videoHeight:r}=e,i=e.offsetWidth,s=e.offsetHeight;if(i>0&&s>0)for(;i<t&&s<r;)i*=2,s*=2;else i=t,s=r;let a=i,n=s,o=0,c=0,d=0,l=0;d=-(r*i-t*s)/s,l=-(t*s-r*i)/i,d>0&&l>0?d>l?(r-=l,o=0,c=l/2):(t-=d,o=d/2,c=0):d>0?(t-=d,o=d/2,c=0):l>0&&(r-=l,o=0,c=l/2);let p=document.createElement("canvas"),h=p.getContext("2d");return p.width=a,p.height=n,h?.drawImage(e,o,c,t,r,0,0,p.width,p.height),p.toDataURL("image/jpeg")},eC=async e=>{let t=document.createElement("video"),r=new MediaStream;r.addTrack(e),t.srcObject=r,t.setAttribute("muted","true");let i=e.getSettings();t.width=i.width||0,t.height=i.height||0,await t.play();let s=document.createElement("canvas"),a=s.getContext("2d");return s.height=t.height,s.width=t.width,a?.drawImage(t,0,0),s.toDataURL("image/jpeg")};var ek=m("iSZvy"),ex={};ex=function(e){var t={};function r(i){if(t[i])return t[i].exports;var s=t[i]={i:i,l:!1,exports:{}};return e[i].call(s.exports,s,s.exports,r),s.l=!0,s.exports}return r.m=e,r.c=t,r.d=function(e,t,i){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t||4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(r.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)r.d(i,s,(function(t){return e[t]}).bind(null,s));return i},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=90)}({17:function(e,t,r){t.__esModule=!0,t.default=void 0;var i=r(18),s=function(){function e(){}return e.getFirstMatch=function(e,t){var r=t.match(e);return r&&r.length>0&&r[1]||""},e.getSecondMatch=function(e,t){var r=t.match(e);return r&&r.length>1&&r[2]||""},e.matchAndReturnConst=function(e,t,r){if(e.test(t))return r},e.getWindowsVersionName=function(e){switch(e){case"NT":return"NT";case"XP":case"NT 5.1":return"XP";case"NT 5.0":return"2000";case"NT 5.2":return"2003";case"NT 6.0":return"Vista";case"NT 6.1":return"7";case"NT 6.2":return"8";case"NT 6.3":return"8.1";case"NT 10.0":return"10";default:return}},e.getMacOSVersionName=function(e){var t=e.split(".").splice(0,2).map(function(e){return parseInt(e,10)||0});if(t.push(0),10===t[0])switch(t[1]){case 5:return"Leopard";case 6:return"Snow Leopard";case 7:return"Lion";case 8:return"Mountain Lion";case 9:return"Mavericks";case 10:return"Yosemite";case 11:return"El Capitan";case 12:return"Sierra";case 13:return"High Sierra";case 14:return"Mojave";case 15:return"Catalina";default:return}},e.getAndroidVersionName=function(e){var t=e.split(".").splice(0,2).map(function(e){return parseInt(e,10)||0});if(t.push(0),!(1===t[0]&&t[1]<5))return 1===t[0]&&t[1]<6?"Cupcake":1===t[0]&&t[1]>=6?"Donut":2===t[0]&&t[1]<2?"Eclair":2===t[0]&&2===t[1]?"Froyo":2===t[0]&&t[1]>2?"Gingerbread":3===t[0]?"Honeycomb":4===t[0]&&t[1]<1?"Ice Cream Sandwich":4===t[0]&&t[1]<4?"Jelly Bean":4===t[0]&&t[1]>=4?"KitKat":5===t[0]?"Lollipop":6===t[0]?"Marshmallow":7===t[0]?"Nougat":8===t[0]?"Oreo":9===t[0]?"Pie":void 0},e.getVersionPrecision=function(e){return e.split(".").length},e.compareVersions=function(t,r,i){void 0===i&&(i=!1);var s=e.getVersionPrecision(t),a=e.getVersionPrecision(r),n=Math.max(s,a),o=0,c=e.map([t,r],function(t){var r=n-e.getVersionPrecision(t),i=t+Array(r+1).join(".0");return e.map(i.split("."),function(e){return Array(20-e.length).join("0")+e}).reverse()});for(i&&(o=n-Math.min(s,a)),n-=1;n>=o;){if(c[0][n]>c[1][n])return 1;if(c[0][n]===c[1][n]){if(n===o)return 0;n-=1}else if(c[0][n]<c[1][n])return -1}},e.map=function(e,t){var r,i=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(r=0;r<e.length;r+=1)i.push(t(e[r]));return i},e.find=function(e,t){var r,i;if(Array.prototype.find)return Array.prototype.find.call(e,t);for(r=0,i=e.length;r<i;r+=1){var s=e[r];if(t(s,r))return s}},e.assign=function(e){for(var t,r,i=arguments.length,s=Array(i>1?i-1:0),a=1;a<i;a++)s[a-1]=arguments[a];if(Object.assign)return Object.assign.apply(Object,[e].concat(s));for(t=0,r=s.length;t<r;t+=1)(function(){var r=s[t];"object"==typeof r&&null!==r&&Object.keys(r).forEach(function(t){e[t]=r[t]})})();return e},e.getBrowserAlias=function(e){return i.BROWSER_ALIASES_MAP[e]},e.getBrowserTypeByAlias=function(e){return i.BROWSER_MAP[e]||""},e}();t.default=s,e.exports=t.default},18:function(e,t,r){t.__esModule=!0,t.ENGINE_MAP=t.OS_MAP=t.PLATFORMS_MAP=t.BROWSER_MAP=t.BROWSER_ALIASES_MAP=void 0,t.BROWSER_ALIASES_MAP={"Amazon Silk":"amazon_silk","Android Browser":"android",Bada:"bada",BlackBerry:"blackberry",Chrome:"chrome",Chromium:"chromium",Electron:"electron",Epiphany:"epiphany",Firefox:"firefox",Focus:"focus",Generic:"generic","Google Search":"google_search",Googlebot:"googlebot","Internet Explorer":"ie","K-Meleon":"k_meleon",Maxthon:"maxthon","Microsoft Edge":"edge","MZ Browser":"mz","NAVER Whale Browser":"naver",Opera:"opera","Opera Coast":"opera_coast",PhantomJS:"phantomjs",Puffin:"puffin",QupZilla:"qupzilla",QQ:"qq",QQLite:"qqlite",Safari:"safari",Sailfish:"sailfish","Samsung Internet for Android":"samsung_internet",SeaMonkey:"seamonkey",Sleipnir:"sleipnir",Swing:"swing",Tizen:"tizen","UC Browser":"uc",Vivaldi:"vivaldi","WebOS Browser":"webos",WeChat:"wechat","Yandex Browser":"yandex",Roku:"roku"},t.BROWSER_MAP={amazon_silk:"Amazon Silk",android:"Android Browser",bada:"Bada",blackberry:"BlackBerry",chrome:"Chrome",chromium:"Chromium",electron:"Electron",epiphany:"Epiphany",firefox:"Firefox",focus:"Focus",generic:"Generic",googlebot:"Googlebot",google_search:"Google Search",ie:"Internet Explorer",k_meleon:"K-Meleon",maxthon:"Maxthon",edge:"Microsoft Edge",mz:"MZ Browser",naver:"NAVER Whale Browser",opera:"Opera",opera_coast:"Opera Coast",phantomjs:"PhantomJS",puffin:"Puffin",qupzilla:"QupZilla",qq:"QQ Browser",qqlite:"QQ Browser Lite",safari:"Safari",sailfish:"Sailfish",samsung_internet:"Samsung Internet for Android",seamonkey:"SeaMonkey",sleipnir:"Sleipnir",swing:"Swing",tizen:"Tizen",uc:"UC Browser",vivaldi:"Vivaldi",webos:"WebOS Browser",wechat:"WeChat",yandex:"Yandex Browser"},t.PLATFORMS_MAP={tablet:"tablet",mobile:"mobile",desktop:"desktop",tv:"tv"},t.OS_MAP={WindowsPhone:"Windows Phone",Windows:"Windows",MacOS:"macOS",iOS:"iOS",Android:"Android",WebOS:"WebOS",BlackBerry:"BlackBerry",Bada:"Bada",Tizen:"Tizen",Linux:"Linux",ChromeOS:"Chrome OS",PlayStation4:"PlayStation 4",Roku:"Roku"},t.ENGINE_MAP={EdgeHTML:"EdgeHTML",Blink:"Blink",Trident:"Trident",Presto:"Presto",Gecko:"Gecko",WebKit:"WebKit"}},90:function(e,t,r){t.__esModule=!0,t.default=void 0;var i,s=(i=r(91))&&i.__esModule?i:{default:i},a=r(18),n=function(){function e(){}return e.getParser=function(e,t){if(void 0===t&&(t=!1),"string"!=typeof e)throw Error("UserAgent should be a string");return new s.default(e,t)},e.parse=function(e){return new s.default(e).getResult()},function(e,t){for(var r=0;r<t.length;r++){var i=t[r];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}(e,[{key:"BROWSER_MAP",get:function(){return a.BROWSER_MAP}},{key:"ENGINE_MAP",get:function(){return a.ENGINE_MAP}},{key:"OS_MAP",get:function(){return a.OS_MAP}},{key:"PLATFORMS_MAP",get:function(){return a.PLATFORMS_MAP}}]),e}();t.default=n,e.exports=t.default},91:function(e,t,r){t.__esModule=!0,t.default=void 0;var i=c(r(92)),s=c(r(93)),a=c(r(94)),n=c(r(95)),o=c(r(17));function c(e){return e&&e.__esModule?e:{default:e}}var d=function(){function e(e,t){if(void 0===t&&(t=!1),null==e||""===e)throw Error("UserAgent parameter can't be empty");this._ua=e,this.parsedResult={},!0!==t&&this.parse()}var t=e.prototype;return t.getUA=function(){return this._ua},t.test=function(e){return e.test(this._ua)},t.parseBrowser=function(){var e=this;this.parsedResult.browser={};var t=o.default.find(i.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t)});throw Error("Browser's test function is not valid")});return t&&(this.parsedResult.browser=t.describe(this.getUA())),this.parsedResult.browser},t.getBrowser=function(){return this.parsedResult.browser?this.parsedResult.browser:this.parseBrowser()},t.getBrowserName=function(e){return e?String(this.getBrowser().name).toLowerCase()||"":this.getBrowser().name||""},t.getBrowserVersion=function(){return this.getBrowser().version},t.getOS=function(){return this.parsedResult.os?this.parsedResult.os:this.parseOS()},t.parseOS=function(){var e=this;this.parsedResult.os={};var t=o.default.find(s.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t)});throw Error("Browser's test function is not valid")});return t&&(this.parsedResult.os=t.describe(this.getUA())),this.parsedResult.os},t.getOSName=function(e){var t=this.getOS().name;return e?String(t).toLowerCase()||"":t||""},t.getOSVersion=function(){return this.getOS().version},t.getPlatform=function(){return this.parsedResult.platform?this.parsedResult.platform:this.parsePlatform()},t.getPlatformType=function(e){void 0===e&&(e=!1);var t=this.getPlatform().type;return e?String(t).toLowerCase()||"":t||""},t.parsePlatform=function(){var e=this;this.parsedResult.platform={};var t=o.default.find(a.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t)});throw Error("Browser's test function is not valid")});return t&&(this.parsedResult.platform=t.describe(this.getUA())),this.parsedResult.platform},t.getEngine=function(){return this.parsedResult.engine?this.parsedResult.engine:this.parseEngine()},t.getEngineName=function(e){return e?String(this.getEngine().name).toLowerCase()||"":this.getEngine().name||""},t.parseEngine=function(){var e=this;this.parsedResult.engine={};var t=o.default.find(n.default,function(t){if("function"==typeof t.test)return t.test(e);if(t.test instanceof Array)return t.test.some(function(t){return e.test(t)});throw Error("Browser's test function is not valid")});return t&&(this.parsedResult.engine=t.describe(this.getUA())),this.parsedResult.engine},t.parse=function(){return this.parseBrowser(),this.parseOS(),this.parsePlatform(),this.parseEngine(),this},t.getResult=function(){return o.default.assign({},this.parsedResult)},t.satisfies=function(e){var t=this,r={},i=0,s={},a=0;if(Object.keys(e).forEach(function(t){var n=e[t];"string"==typeof n?(s[t]=n,a+=1):"object"==typeof n&&(r[t]=n,i+=1)}),i>0){var n=Object.keys(r),c=o.default.find(n,function(e){return t.isOS(e)});if(c){var d=this.satisfies(r[c]);if(void 0!==d)return d}var l=o.default.find(n,function(e){return t.isPlatform(e)});if(l){var p=this.satisfies(r[l]);if(void 0!==p)return p}}if(a>0){var h=Object.keys(s),u=o.default.find(h,function(e){return t.isBrowser(e,!0)});if(void 0!==u)return this.compareVersion(s[u])}},t.isBrowser=function(e,t){void 0===t&&(t=!1);var r=this.getBrowserName().toLowerCase(),i=e.toLowerCase(),s=o.default.getBrowserTypeByAlias(i);return t&&s&&(i=s.toLowerCase()),i===r},t.compareVersion=function(e){var t=[0],r=e,i=!1,s=this.getBrowserVersion();if("string"==typeof s)return">"===e[0]||"<"===e[0]?(r=e.substr(1),"="===e[1]?(i=!0,r=e.substr(2)):t=[],">"===e[0]?t.push(1):t.push(-1)):"="===e[0]?r=e.substr(1):"~"===e[0]&&(i=!0,r=e.substr(1)),t.indexOf(o.default.compareVersions(s,r,i))>-1},t.isOS=function(e){return this.getOSName(!0)===String(e).toLowerCase()},t.isPlatform=function(e){return this.getPlatformType(!0)===String(e).toLowerCase()},t.isEngine=function(e){return this.getEngineName(!0)===String(e).toLowerCase()},t.is=function(e,t){return void 0===t&&(t=!1),this.isBrowser(e,t)||this.isOS(e)||this.isPlatform(e)},t.some=function(e){var t=this;return void 0===e&&(e=[]),e.some(function(e){return t.is(e)})},e}();t.default=d,e.exports=t.default},92:function(e,t,r){t.__esModule=!0,t.default=void 0;var i,s=(i=r(17))&&i.__esModule?i:{default:i},a=/version\/(\d+(\.?_?\d+)+)/i,n=[{test:[/googlebot/i],describe:function(e){var t={name:"Googlebot"},r=s.default.getFirstMatch(/googlebot\/(\d+(\.\d+))/i,e)||s.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/opera/i],describe:function(e){var t={name:"Opera"},r=s.default.getFirstMatch(a,e)||s.default.getFirstMatch(/(?:opera)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opr\/|opios/i],describe:function(e){var t={name:"Opera"},r=s.default.getFirstMatch(/(?:opr|opios)[\s/](\S+)/i,e)||s.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/SamsungBrowser/i],describe:function(e){var t={name:"Samsung Internet for Android"},r=s.default.getFirstMatch(a,e)||s.default.getFirstMatch(/(?:SamsungBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Whale/i],describe:function(e){var t={name:"NAVER Whale Browser"},r=s.default.getFirstMatch(a,e)||s.default.getFirstMatch(/(?:whale)[\s/](\d+(?:\.\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MZBrowser/i],describe:function(e){var t={name:"MZ Browser"},r=s.default.getFirstMatch(/(?:MZBrowser)[\s/](\d+(?:\.\d+)+)/i,e)||s.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/focus/i],describe:function(e){var t={name:"Focus"},r=s.default.getFirstMatch(/(?:focus)[\s/](\d+(?:\.\d+)+)/i,e)||s.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/swing/i],describe:function(e){var t={name:"Swing"},r=s.default.getFirstMatch(/(?:swing)[\s/](\d+(?:\.\d+)+)/i,e)||s.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/coast/i],describe:function(e){var t={name:"Opera Coast"},r=s.default.getFirstMatch(a,e)||s.default.getFirstMatch(/(?:coast)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/opt\/\d+(?:.?_?\d+)+/i],describe:function(e){var t={name:"Opera Touch"},r=s.default.getFirstMatch(/(?:opt)[\s/](\d+(\.?_?\d+)+)/i,e)||s.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/yabrowser/i],describe:function(e){var t={name:"Yandex Browser"},r=s.default.getFirstMatch(/(?:yabrowser)[\s/](\d+(\.?_?\d+)+)/i,e)||s.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/ucbrowser/i],describe:function(e){var t={name:"UC Browser"},r=s.default.getFirstMatch(a,e)||s.default.getFirstMatch(/(?:ucbrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/Maxthon|mxios/i],describe:function(e){var t={name:"Maxthon"},r=s.default.getFirstMatch(a,e)||s.default.getFirstMatch(/(?:Maxthon|mxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/epiphany/i],describe:function(e){var t={name:"Epiphany"},r=s.default.getFirstMatch(a,e)||s.default.getFirstMatch(/(?:epiphany)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/puffin/i],describe:function(e){var t={name:"Puffin"},r=s.default.getFirstMatch(a,e)||s.default.getFirstMatch(/(?:puffin)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sleipnir/i],describe:function(e){var t={name:"Sleipnir"},r=s.default.getFirstMatch(a,e)||s.default.getFirstMatch(/(?:sleipnir)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/k-meleon/i],describe:function(e){var t={name:"K-Meleon"},r=s.default.getFirstMatch(a,e)||s.default.getFirstMatch(/(?:k-meleon)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/micromessenger/i],describe:function(e){var t={name:"WeChat"},r=s.default.getFirstMatch(/(?:micromessenger)[\s/](\d+(\.?_?\d+)+)/i,e)||s.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/qqbrowser/i],describe:function(e){var t={name:/qqbrowserlite/i.test(e)?"QQ Browser Lite":"QQ Browser"},r=s.default.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\d+(\.?_?\d+)+)/i,e)||s.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/msie|trident/i],describe:function(e){var t={name:"Internet Explorer"},r=s.default.getFirstMatch(/(?:msie |rv:)(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/\sedg\//i],describe:function(e){var t={name:"Microsoft Edge"},r=s.default.getFirstMatch(/\sedg\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/edg([ea]|ios)/i],describe:function(e){var t={name:"Microsoft Edge"},r=s.default.getSecondMatch(/edg([ea]|ios)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/vivaldi/i],describe:function(e){var t={name:"Vivaldi"},r=s.default.getFirstMatch(/vivaldi\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/seamonkey/i],describe:function(e){var t={name:"SeaMonkey"},r=s.default.getFirstMatch(/seamonkey\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/sailfish/i],describe:function(e){var t={name:"Sailfish"},r=s.default.getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i,e);return r&&(t.version=r),t}},{test:[/silk/i],describe:function(e){var t={name:"Amazon Silk"},r=s.default.getFirstMatch(/silk\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/phantom/i],describe:function(e){var t={name:"PhantomJS"},r=s.default.getFirstMatch(/phantomjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/slimerjs/i],describe:function(e){var t={name:"SlimerJS"},r=s.default.getFirstMatch(/slimerjs\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(e){var t={name:"BlackBerry"},r=s.default.getFirstMatch(a,e)||s.default.getFirstMatch(/blackberry[\d]+\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t={name:"WebOS Browser"},r=s.default.getFirstMatch(a,e)||s.default.getFirstMatch(/w(?:eb)?[o0]sbrowser\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/bada/i],describe:function(e){var t={name:"Bada"},r=s.default.getFirstMatch(/dolfin\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/tizen/i],describe:function(e){var t={name:"Tizen"},r=s.default.getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.?_?\d+)+)/i,e)||s.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/qupzilla/i],describe:function(e){var t={name:"QupZilla"},r=s.default.getFirstMatch(/(?:qupzilla)[\s/](\d+(\.?_?\d+)+)/i,e)||s.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/firefox|iceweasel|fxios/i],describe:function(e){var t={name:"Firefox"},r=s.default.getFirstMatch(/(?:firefox|iceweasel|fxios)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/electron/i],describe:function(e){var t={name:"Electron"},r=s.default.getFirstMatch(/(?:electron)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/MiuiBrowser/i],describe:function(e){var t={name:"Miui"},r=s.default.getFirstMatch(/(?:MiuiBrowser)[\s/](\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/chromium/i],describe:function(e){var t={name:"Chromium"},r=s.default.getFirstMatch(/(?:chromium)[\s/](\d+(\.?_?\d+)+)/i,e)||s.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/chrome|crios|crmo/i],describe:function(e){var t={name:"Chrome"},r=s.default.getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/GSA/i],describe:function(e){var t={name:"Google Search"},r=s.default.getFirstMatch(/(?:GSA)\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t={name:"Android Browser"},r=s.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/playstation 4/i],describe:function(e){var t={name:"PlayStation 4"},r=s.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/safari|applewebkit/i],describe:function(e){var t={name:"Safari"},r=s.default.getFirstMatch(a,e);return r&&(t.version=r),t}},{test:[/.*/i],describe:function(e){var t=-1!==e.search("\\(")?/^(.*)\/(.*)[ \t]\((.*)/:/^(.*)\/(.*) /;return{name:s.default.getFirstMatch(t,e),version:s.default.getSecondMatch(t,e)}}}];t.default=n,e.exports=t.default},93:function(e,t,r){t.__esModule=!0,t.default=void 0;var i,s=(i=r(17))&&i.__esModule?i:{default:i},a=r(18),n=[{test:[/Roku\/DVP/],describe:function(e){var t=s.default.getFirstMatch(/Roku\/DVP-(\d+\.\d+)/i,e);return{name:a.OS_MAP.Roku,version:t}}},{test:[/windows phone/i],describe:function(e){var t=s.default.getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i,e);return{name:a.OS_MAP.WindowsPhone,version:t}}},{test:[/windows /i],describe:function(e){var t=s.default.getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i,e),r=s.default.getWindowsVersionName(t);return{name:a.OS_MAP.Windows,version:t,versionName:r}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(e){var t={name:a.OS_MAP.iOS},r=s.default.getSecondMatch(/(Version\/)(\d[\d.]+)/,e);return r&&(t.version=r),t}},{test:[/macintosh/i],describe:function(e){var t=s.default.getFirstMatch(/mac os x (\d+(\.?_?\d+)+)/i,e).replace(/[_\s]/g,"."),r=s.default.getMacOSVersionName(t),i={name:a.OS_MAP.MacOS,version:t};return r&&(i.versionName=r),i}},{test:[/(ipod|iphone|ipad)/i],describe:function(e){var t=s.default.getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i,e).replace(/[_\s]/g,".");return{name:a.OS_MAP.iOS,version:t}}},{test:function(e){var t=!e.test(/like android/i),r=e.test(/android/i);return t&&r},describe:function(e){var t=s.default.getFirstMatch(/android[\s/-](\d+(\.\d+)*)/i,e),r=s.default.getAndroidVersionName(t),i={name:a.OS_MAP.Android,version:t};return r&&(i.versionName=r),i}},{test:[/(web|hpw)[o0]s/i],describe:function(e){var t=s.default.getFirstMatch(/(?:web|hpw)[o0]s\/(\d+(\.\d+)*)/i,e),r={name:a.OS_MAP.WebOS};return t&&t.length&&(r.version=t),r}},{test:[/blackberry|\bbb\d+/i,/rim\stablet/i],describe:function(e){var t=s.default.getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i,e)||s.default.getFirstMatch(/blackberry\d+\/(\d+([_\s]\d+)*)/i,e)||s.default.getFirstMatch(/\bbb(\d+)/i,e);return{name:a.OS_MAP.BlackBerry,version:t}}},{test:[/bada/i],describe:function(e){var t=s.default.getFirstMatch(/bada\/(\d+(\.\d+)*)/i,e);return{name:a.OS_MAP.Bada,version:t}}},{test:[/tizen/i],describe:function(e){var t=s.default.getFirstMatch(/tizen[/\s](\d+(\.\d+)*)/i,e);return{name:a.OS_MAP.Tizen,version:t}}},{test:[/linux/i],describe:function(){return{name:a.OS_MAP.Linux}}},{test:[/CrOS/],describe:function(){return{name:a.OS_MAP.ChromeOS}}},{test:[/PlayStation 4/],describe:function(e){var t=s.default.getFirstMatch(/PlayStation 4[/\s](\d+(\.\d+)*)/i,e);return{name:a.OS_MAP.PlayStation4,version:t}}}];t.default=n,e.exports=t.default},94:function(e,t,r){t.__esModule=!0,t.default=void 0;var i,s=(i=r(17))&&i.__esModule?i:{default:i},a=r(18),n=[{test:[/googlebot/i],describe:function(){return{type:"bot",vendor:"Google"}}},{test:[/huawei/i],describe:function(e){var t=s.default.getFirstMatch(/(can-l01)/i,e)&&"Nova",r={type:a.PLATFORMS_MAP.mobile,vendor:"Huawei"};return t&&(r.model=t),r}},{test:[/nexus\s*(?:7|8|9|10).*/i],describe:function(){return{type:a.PLATFORMS_MAP.tablet,vendor:"Nexus"}}},{test:[/ipad/i],describe:function(){return{type:a.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/Macintosh(.*?) FxiOS(.*?)\//],describe:function(){return{type:a.PLATFORMS_MAP.tablet,vendor:"Apple",model:"iPad"}}},{test:[/kftt build/i],describe:function(){return{type:a.PLATFORMS_MAP.tablet,vendor:"Amazon",model:"Kindle Fire HD 7"}}},{test:[/silk/i],describe:function(){return{type:a.PLATFORMS_MAP.tablet,vendor:"Amazon"}}},{test:[/tablet(?! pc)/i],describe:function(){return{type:a.PLATFORMS_MAP.tablet}}},{test:function(e){var t=e.test(/ipod|iphone/i),r=e.test(/like (ipod|iphone)/i);return t&&!r},describe:function(e){var t=s.default.getFirstMatch(/(ipod|iphone)/i,e);return{type:a.PLATFORMS_MAP.mobile,vendor:"Apple",model:t}}},{test:[/nexus\s*[0-6].*/i,/galaxy nexus/i],describe:function(){return{type:a.PLATFORMS_MAP.mobile,vendor:"Nexus"}}},{test:[/[^-]mobi/i],describe:function(){return{type:a.PLATFORMS_MAP.mobile}}},{test:function(e){return"blackberry"===e.getBrowserName(!0)},describe:function(){return{type:a.PLATFORMS_MAP.mobile,vendor:"BlackBerry"}}},{test:function(e){return"bada"===e.getBrowserName(!0)},describe:function(){return{type:a.PLATFORMS_MAP.mobile}}},{test:function(e){return"windows phone"===e.getBrowserName()},describe:function(){return{type:a.PLATFORMS_MAP.mobile,vendor:"Microsoft"}}},{test:function(e){var t=Number(String(e.getOSVersion()).split(".")[0]);return"android"===e.getOSName(!0)&&t>=3},describe:function(){return{type:a.PLATFORMS_MAP.tablet}}},{test:function(e){return"android"===e.getOSName(!0)},describe:function(){return{type:a.PLATFORMS_MAP.mobile}}},{test:function(e){return"macos"===e.getOSName(!0)},describe:function(){return{type:a.PLATFORMS_MAP.desktop,vendor:"Apple"}}},{test:function(e){return"windows"===e.getOSName(!0)},describe:function(){return{type:a.PLATFORMS_MAP.desktop}}},{test:function(e){return"linux"===e.getOSName(!0)},describe:function(){return{type:a.PLATFORMS_MAP.desktop}}},{test:function(e){return"playstation 4"===e.getOSName(!0)},describe:function(){return{type:a.PLATFORMS_MAP.tv}}},{test:function(e){return"roku"===e.getOSName(!0)},describe:function(){return{type:a.PLATFORMS_MAP.tv}}}];t.default=n,e.exports=t.default},95:function(e,t,r){t.__esModule=!0,t.default=void 0;var i,s=(i=r(17))&&i.__esModule?i:{default:i},a=r(18),n=[{test:function(e){return"microsoft edge"===e.getBrowserName(!0)},describe:function(e){if(/\sedg\//i.test(e))return{name:a.ENGINE_MAP.Blink};var t=s.default.getFirstMatch(/edge\/(\d+(\.?_?\d+)+)/i,e);return{name:a.ENGINE_MAP.EdgeHTML,version:t}}},{test:[/trident/i],describe:function(e){var t={name:a.ENGINE_MAP.Trident},r=s.default.getFirstMatch(/trident\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){return e.test(/presto/i)},describe:function(e){var t={name:a.ENGINE_MAP.Presto},r=s.default.getFirstMatch(/presto\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:function(e){var t=e.test(/gecko/i),r=e.test(/like gecko/i);return t&&!r},describe:function(e){var t={name:a.ENGINE_MAP.Gecko},r=s.default.getFirstMatch(/gecko\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}},{test:[/(apple)?webkit\/537\.36/i],describe:function(){return{name:a.ENGINE_MAP.Blink}}},{test:[/(apple)?webkit/i],describe:function(e){var t={name:a.ENGINE_MAP.WebKit},r=s.default.getFirstMatch(/webkit\/(\d+(\.?_?\d+)+)/i,e);return r&&(t.version=r),t}}];t.default=n,e.exports=t.default}});var eD={},eM=eD&&eD.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,s)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),eE=eD&&eD.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),eI=eD&&eD.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&eM(t,e,r);return eE(t,e),t},eO=eD&&eD.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(eD,"__esModule",{value:!0}),eD.debug=eD.parseScalabilityMode=eD.detectDevice=eD.Device=eD.version=eD.types=void 0;const eL=eO(m("1JjHr"));eD.debug=eL.default;var ej=m("fI7XH");Object.defineProperty(eD,"Device",{enumerable:!0,get:function(){return ej.Device}}),Object.defineProperty(eD,"detectDevice",{enumerable:!0,get:function(){return ej.detectDevice}});const eA=eI(m("8cmuS"));eD.types=eA,eD.version="3.7.8";var eN=m("kBU2H");Object.defineProperty(eD,"parseScalabilityMode",{enumerable:!0,get:function(){return eN.parse}});const eF=new eb("StreamerMediasoup");class eB{constructor(e,t){this.mediasoupDevice=e,this.config=t}static async create(e,t){let r=await e.request("getRouterRtpCapabilities");r.headerExtensions=r.headerExtensions?.filter(e=>"urn:3gpp:video-orientation"!==e.uri);let i=function(){try{return new eD.Device}catch(e){return eF.error("failed to detects device from mediasoup, fallback on auto detection",e),function(){try{var e;let t=navigator.userAgent,r=ex.getParser(t);e="DeviceDetectionForced",el().setTag(e,!0),ef({type:"debug",category:"browser",data:r.getResult()});let i=r.getOS();if("Safari"===r.getBrowserName()&&"iOS"===i.name&&Number(i.version)>=14.3)return new eD.Device({handlerName:"Safari12"});throw Error("failed to autoDetect browser, falling back to chrome 74")}catch(e){eF.error("deviceAutoDetection",e)}return new eD.Device({handlerName:"Chrome74"})}()}}();return i.load({routerRtpCapabilities:r}),new eB(i,t)}getRtpCapabilities(){return this.mediasoupDevice.rtpCapabilities}async createTransportConfig(e){let t=await e.request("createWebRtcTransport");return{id:t.id,iceParameters:t.iceParameters,iceCandidates:t.iceCandidates,dtlsParameters:{...t.dtlsParameters,role:"auto"},sctpParameters:t.sctpParameters,iceServers:this.config.iceServers,proprietaryConstraints:{optional:[{googDscp:!0}]},additionalSettings:{encodedInsertableStreams:!1}}}async createSendTransport(e){let t=this.mediasoupDevice.createSendTransport(await this.createTransportConfig(e));return t.on("connect",({dtlsParameters:r},i,s)=>{eF.log("dtlsParameters",t.id,r),e.request("connectWebRtcTransport",{transportId:t.id,dtlsParameters:r}).then(i).catch(s)}),t.on("produce",async({kind:r,rtpParameters:i,appData:s},a,n)=>{try{let{id:n}=await e.request("produce",{transportId:t.id,kind:r,rtpParameters:i,appData:s});a({id:n}),eF.log("producerTransport: ",t)}catch(e){n(e)}}),t}async createRecvTransport(e){let t=this.mediasoupDevice.createRecvTransport(await this.createTransportConfig(e));return t.on("connect",({dtlsParameters:r},i,s)=>{eF.log("dtls",t.id,r),e.request("connectWebRtcTransport",{transportId:t.id,dtlsParameters:r}).then(i).catch(s)}),t}async createTransport(e,t){return"send"===t?await this.createSendTransport(e):await this.createRecvTransport(e)}async produceAudio(e,t,r){return await e.produce({track:t,codecOptions:{opusStereo:!0,opusDtx:!0},appData:r})}async produceVideo(e,t,r){return await e.produce({track:t,encodings:void 0,codecOptions:{videoGoogleStartBitrate:1e3},appData:r})}}var eq={};async function e$(e={video:!0,audio:!0}){let t=await navigator.mediaDevices.getUserMedia(e);return{mediaStream:t||void 0,audioTrack:t?.getAudioTracks()[0]||void 0,videoTrack:t?.getVideoTracks()[0]||void 0}}function eU(e,t=""){console.log(`Track ${e.kind}, ${t}
5
- label: ${e.label}
6
- id: ${e.id}
7
- deviceId: ${e.getSettings().deviceId}
8
- readyState: ${e.readyState}
9
- is muted: ${e.muted}
10
- is enabled: ${e.enabled}`)}function eV(e){if(!e||"boolean"==typeof e)return;let t=e.deviceId;if(!t)return;if("string"==typeof t)return t;if(Array.isArray(t))return t[0];let r=t.exact||t.ideal;if(r){if("string"==typeof r)return r;if(Array.isArray(t))return r[0]}}(function(){function e(e){var t=0;return function(){return t<e.length?{done:!1,value:e[t++]}:{done:!0}}}var t,r="function"==typeof Object.defineProperties?Object.defineProperty:function(e,t,r){return e==Array.prototype||e==Object.prototype||(e[t]=r.value),e},i=function(e){e=["object"==typeof globalThis&&globalThis,e,"object"==typeof window&&window,"object"==typeof self&&self,"object"==typeof l&&l];for(var t=0;t<e.length;++t){var r=e[t];if(r&&r.Math==Math)return r}throw Error("Cannot find global object")}(this);function s(e,t){if(t)e:{var s=i;e=e.split(".");for(var a=0;a<e.length-1;a++){var n=e[a];if(!(n in s))break e;s=s[n]}(t=t(a=s[e=e[e.length-1]]))!=a&&null!=t&&r(s,e,{configurable:!0,writable:!0,value:t})}}function a(t){var r="undefined"!=typeof Symbol&&Symbol.iterator&&t[Symbol.iterator];return r?r.call(t):{next:e(t)}}function n(e){if(!(e instanceof Array)){e=a(e);for(var t,r=[];!(t=e.next()).done;)r.push(t.value);e=r}return e}s("Symbol",function(e){function t(e,t){this.h=e,r(this,"description",{configurable:!0,writable:!0,value:t})}if(e)return e;t.prototype.toString=function(){return this.h};var i="jscomp_symbol_"+(1e9*Math.random()>>>0)+"_",s=0;return function e(r){if(this instanceof e)throw TypeError("Symbol is not a constructor");return new t(i+(r||"")+"_"+s++,r)}}),s("Symbol.iterator",function(t){if(t)return t;t=Symbol("Symbol.iterator");for(var s="Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array".split(" "),a=0;a<s.length;a++){var n=i[s[a]];"function"==typeof n&&"function"!=typeof n.prototype[t]&&r(n.prototype,t,{configurable:!0,writable:!0,value:function(){var t;return(t={next:t=e(this)})[Symbol.iterator]=function(){return this},t}})}return t});var o="function"==typeof Object.assign?Object.assign:function(e,t){for(var r=1;r<arguments.length;r++){var i=arguments[r];if(i)for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(e[s]=i[s])}return e};s("Object.assign",function(e){return e||o});var c,d,p="function"==typeof Object.create?Object.create:function(e){function t(){}return t.prototype=e,new t};if("function"==typeof Object.setPrototypeOf)d=Object.setPrototypeOf;else{e:{var h={};try{h.__proto__={a:!0},Y=h.a;break e}catch(e){}Y=!1}d=Y?function(e,t){if(e.__proto__=t,e.__proto__!==t)throw TypeError(e+" is not extensible");return e}:null}var u=d;function m(e,t){if(e.prototype=p(t.prototype),e.prototype.constructor=e,u)u(e,t);else for(var r in t)if("prototype"!=r){if(Object.defineProperties){var i=Object.getOwnPropertyDescriptor(t,r);i&&Object.defineProperty(e,r,i)}else e[r]=t[r]}e.za=t.prototype}function f(){this.m=!1,this.j=null,this.i=void 0,this.h=1,this.v=this.s=0,this.l=null}function g(e){if(e.m)throw TypeError("Generator is already running");e.m=!0}function v(e,t){e.l={ma:t,na:!0},e.h=e.s||e.v}function _(e,t,r){return e.h=r,{value:t}}function b(e){this.h=new f,this.i=e}function w(e,t,r,i){try{var s=t.call(e.h.j,r);if(!(s instanceof Object))throw TypeError("Iterator result "+s+" is not an object");if(!s.done)return e.h.m=!1,s;var a=s.value}catch(t){return e.h.j=null,v(e.h,t),y(e)}return e.h.j=null,i.call(e.h,a),y(e)}function y(e){for(;e.h.h;)try{var t=e.i(e.h);if(t)return e.h.m=!1,{value:t.value,done:!1}}catch(t){e.h.i=void 0,v(e.h,t)}if(e.h.m=!1,e.h.l){if(t=e.h.l,e.h.l=null,t.na)throw t.ma;return{value:t.return,done:!0}}return{value:void 0,done:!0}}function S(e){this.next=function(t){return g(e.h),e.h.j?t=w(e,e.h.j.next,t,e.h.u):(e.h.u(t),t=y(e)),t},this.throw=function(t){return g(e.h),e.h.j?t=w(e,e.h.j.throw,t,e.h.u):(v(e.h,t),t=y(e)),t},this.return=function(t){var r;return g(e.h),(r=e.h.j)?w(e,"return"in r?r.return:function(e){return{value:e,done:!0}},t,e.h.return):(e.h.return(t),y(e))},this[Symbol.iterator]=function(){return this}}function R(e){return function(e){function t(t){return e.next(t)}function r(t){return e.throw(t)}return new Promise(function(i,s){!function e(a){a.done?i(a.value):Promise.resolve(a.value).then(t,r).then(e,s)}(e.next())})}(new S(new b(e)))}function P(e){return e||Array.prototype.fill}f.prototype.u=function(e){this.i=e},f.prototype.return=function(e){this.l={return:e},this.h=this.v},s("Promise",function(e){function t(e){this.i=0,this.j=void 0,this.h=[],this.u=!1;var t=this.l();try{e(t.resolve,t.reject)}catch(e){t.reject(e)}}function r(){this.h=null}function s(e){return e instanceof t?e:new t(function(t){t(e)})}if(e)return e;r.prototype.i=function(e){if(null==this.h){this.h=[];var t=this;this.j(function(){t.m()})}this.h.push(e)};var n=i.setTimeout;r.prototype.j=function(e){n(e,0)},r.prototype.m=function(){for(;this.h&&this.h.length;){var e=this.h;this.h=[];for(var t=0;t<e.length;++t){var r=e[t];e[t]=null;try{r()}catch(e){this.l(e)}}}this.h=null},r.prototype.l=function(e){this.j(function(){throw e})},t.prototype.l=function(){function e(e){return function(i){r||(r=!0,e.call(t,i))}}var t=this,r=!1;return{resolve:e(this.I),reject:e(this.m)}},t.prototype.I=function(e){if(e===this)this.m(TypeError("A Promise cannot resolve to itself"));else if(e instanceof t)this.L(e);else{switch(typeof e){case"object":var r=null!=e;break;case"function":r=!0;break;default:r=!1}r?this.F(e):this.s(e)}},t.prototype.F=function(e){var t=void 0;try{t=e.then}catch(e){this.m(e);return}"function"==typeof t?this.M(t,e):this.s(e)},t.prototype.m=function(e){this.v(2,e)},t.prototype.s=function(e){this.v(1,e)},t.prototype.v=function(e,t){if(0!=this.i)throw Error("Cannot settle("+e+", "+t+"): Promise already settled in state"+this.i);this.i=e,this.j=t,2===this.i&&this.K(),this.H()},t.prototype.K=function(){var e=this;n(function(){if(e.D()){var t=i.console;void 0!==t&&t.error(e.j)}},1)},t.prototype.D=function(){if(this.u)return!1;var e=i.CustomEvent,t=i.Event,r=i.dispatchEvent;return void 0===r||("function"==typeof e?e=new e("unhandledrejection",{cancelable:!0}):"function"==typeof t?e=new t("unhandledrejection",{cancelable:!0}):(e=i.document.createEvent("CustomEvent")).initCustomEvent("unhandledrejection",!1,!0,e),e.promise=this,e.reason=this.j,r(e))},t.prototype.H=function(){if(null!=this.h){for(var e=0;e<this.h.length;++e)o.i(this.h[e]);this.h=null}};var o=new r;return t.prototype.L=function(e){var t=this.l();e.T(t.resolve,t.reject)},t.prototype.M=function(e,t){var r=this.l();try{e.call(t,r.resolve,r.reject)}catch(e){r.reject(e)}},t.prototype.then=function(e,r){function i(e,t){return"function"==typeof e?function(t){try{s(e(t))}catch(e){a(e)}}:t}var s,a,n=new t(function(e,t){s=e,a=t});return this.T(i(e,s),i(r,a)),n},t.prototype.catch=function(e){return this.then(void 0,e)},t.prototype.T=function(e,t){function r(){switch(i.i){case 1:e(i.j);break;case 2:t(i.j);break;default:throw Error("Unexpected state: "+i.i)}}var i=this;null==this.h?o.i(r):this.h.push(r),this.u=!0},t.resolve=s,t.reject=function(e){return new t(function(t,r){r(e)})},t.race=function(e){return new t(function(t,r){for(var i=a(e),n=i.next();!n.done;n=i.next())s(n.value).T(t,r)})},t.all=function(e){var r=a(e),i=r.next();return i.done?s([]):new t(function(e,t){var a=[],n=0;do a.push(void 0),n++,s(i.value).T(function(t){return function(r){a[t]=r,0==--n&&e(a)}}(a.length-1),t),i=r.next();while(!i.done)})},t}),s("Array.prototype.keys",function(e){return e||function(){var e,t,r,i,s;return e=this,t=function(e){return e},e instanceof String&&(e+=""),r=0,i=!1,(s={next:function(){if(!i&&r<e.length){var s=r++;return{value:t(s,e[s]),done:!1}}return i=!0,{done:!0,value:void 0}}})[Symbol.iterator]=function(){return s},s}}),s("Array.prototype.fill",function(e){return e||function(e,t,r){var i=this.length||0;for(0>t&&(t=Math.max(0,i+t)),(null==r||r>i)&&(r=i),0>(r=Number(r))&&(r=Math.max(0,i+r)),t=Number(t||0);t<r;t++)this[t]=e;return this}}),s("Int8Array.prototype.fill",P),s("Uint8Array.prototype.fill",P),s("Uint8ClampedArray.prototype.fill",P),s("Int16Array.prototype.fill",P),s("Uint16Array.prototype.fill",P),s("Int32Array.prototype.fill",P),s("Uint32Array.prototype.fill",P),s("Float32Array.prototype.fill",P),s("Float64Array.prototype.fill",P),s("Object.is",function(e){return e||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}}),s("Array.prototype.includes",function(e){return e||function(e,t){var r=this;r instanceof String&&(r=String(r));var i=r.length;for(0>(t=t||0)&&(t=Math.max(t+i,0));t<i;t++){var s=r[t];if(s===e||Object.is(s,e))return!0}return!1}}),s("String.prototype.includes",function(e){return e||function(e,t){if(null==this)throw TypeError("The 'this' value for String.prototype.includes must not be null or undefined");if(e instanceof RegExp)throw TypeError("First argument to String.prototype.includes must not be a regular expression");return -1!==this.indexOf(e,t||0)}});var T=this||self;function C(e,t){e=e.split(".");var r,i=T;for((e[0]in i)||void 0===i.execScript||i.execScript("var "+e[0]);e.length&&(r=e.shift());)e.length||void 0===t?i=i[r]&&i[r]!==Object.prototype[r]?i[r]:i[r]={}:i[r]=t}function k(e){var t;return(t=T.navigator)&&(t=t.userAgent)||(t=""),-1!=t.indexOf(e)}var x=Array.prototype.map?function(e,t){return Array.prototype.map.call(e,t,void 0)}:function(e,t){for(var r=e.length,i=Array(r),s="string"==typeof e?e.split(""):e,a=0;a<r;a++)a in s&&(i[a]=t.call(void 0,s[a],a,e));return i},D={},M=null;function E(){if(!M){M={};for(var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),t=["+/=","+/","-_=","-_.","-_"],r=0;5>r;r++){var i=e.concat(t[r].split(""));D[r]=i;for(var s=0;s<i.length;s++){var a=i[s];void 0===M[a]&&(M[a]=s)}}}}var I="undefined"!=typeof Uint8Array,O=!(k("Trident")||k("MSIE"))&&"function"==typeof T.btoa;function L(e){if(!O){var t;void 0===t&&(t=0),E(),t=D[t];for(var r=Array(Math.floor(e.length/3)),i=t[64]||"",s=0,a=0;s<e.length-2;s+=3){var n=e[s],o=e[s+1],c=e[s+2],d=t[n>>2];n=t[(3&n)<<4|o>>4],o=t[(15&o)<<2|c>>6],c=t[63&c],r[a++]=d+n+o+c}switch(d=0,c=i,e.length-s){case 2:c=t[(15&(d=e[s+1]))<<2]||i;case 1:e=e[s],r[a]=t[e>>2]+t[(3&e)<<4|d>>4]+c+i}return r.join("")}for(t="";10240<e.length;)t+=String.fromCharCode.apply(null,e.subarray(0,10240)),e=e.subarray(10240);return btoa(t+=String.fromCharCode.apply(null,e))}var j=RegExp("[-_.]","g");function A(e){switch(e){case"-":return"+";case"_":return"/";case".":return"=";default:return""}}function N(e){if(!O){var t,r,i,s,a;return(i=3*(r=(t=e).length)/4)%3?i=Math.floor(i):-1!="=.".indexOf(t[r-1])&&(i=-1!="=.".indexOf(t[r-2])?i-2:i-1),s=new Uint8Array(i),a=0,function(e,t){function r(t){for(;i<e.length;){var r=e.charAt(i++),s=M[r];if(null!=s)return s;if(!/^[\s\xa0]*$/.test(r))throw Error("Unknown base64 encoding at char: "+r)}return t}E();for(var i=0;;){var s=r(-1),a=r(0),n=r(64),o=r(64);if(64===o&&-1===s)break;t(s<<2|a>>4),64!=n&&(t(a<<4&240|n>>2),64!=o&&t(n<<6&192|o))}}(t,function(e){s[a++]=e}),a!==i?s.subarray(0,a):s}j.test(e)&&(e=e.replace(j,A)),e=atob(e);for(var n=new Uint8Array(e.length),o=0;o<e.length;o++)n[o]=e.charCodeAt(o);return n}function F(){return ee||(ee=new Uint8Array(0))}var B={},q="function"==typeof Uint8Array.prototype.slice,$=0,U=0;function V(e){var t=0>e,r=(e=Math.abs(e))>>>0;e=Math.floor((e-r)/0x100000000),t&&(t=(r=a(W(r,e))).next().value,e=r.next().value,r=t),$=r>>>0,U=e>>>0}var z="function"==typeof BigInt;function W(e,t){return t=~t,e?e=~e+1:t+=1,[e,t]}function G(e,t){this.i=e>>>0,this.h=t>>>0}function H(e){if(!e)return et||(et=new G(0,0));if(!/^-?\d+$/.test(e))return null;if(16>e.length)V(Number(e));else if(z)$=Number((e=BigInt(e))&BigInt(0xffffffff))>>>0,U=Number(e>>BigInt(32)&BigInt(0xffffffff));else{var t=+("-"===e[0]);U=$=0;for(var r=e.length,i=t,s=(r-t)%6+t;s<=r;i=s,s+=6)i=Number(e.slice(i,s)),U*=1e6,0x100000000<=($=1e6*$+i)&&(U+=$/0x100000000|0,$%=0x100000000);t&&(e=(t=a(W($,U))).next().value,t=t.next().value,$=e,U=t)}return new G($,U)}function K(e,t){return Error("Invalid wire type: "+e+" (at position "+t+")")}function J(){return Error("Failed to read varint, encoding is invalid.")}function Q(e,t){return Error("Tried to read past the end of the data "+t+" > "+e)}function Z(){throw Error("Invalid UTF8")}function X(e,t){return t=String.fromCharCode.apply(null,t),null==e?t:e+t}var Y,ee,et,er,ei,es=void 0,ea="undefined"!=typeof TextDecoder,en="undefined"!=typeof TextEncoder;function eo(e){if(e!==B)throw Error("illegal external caller")}function ec(e,t){if(eo(t),this.V=e,null!=e&&0===e.length)throw Error("ByteString should be constructed with non-empty values")}function ed(){return eL||(eL=new ec(null,B))}function el(e){eo(B);var t=e.V;return null==(t=null==t||I&&null!=t&&t instanceof Uint8Array?t:"string"==typeof t?N(t):null)?t:e.V=t}function ep(e,t){this.i=null,this.m=!1,this.h=this.j=this.l=0,eh(this,e,t)}function eh(e,t,r){r=void 0===r?{}:r,e.S=void 0!==r.S&&r.S,t&&(t=function(e){if("string"==typeof e)return{buffer:N(e),C:!1};if(Array.isArray(e))return{buffer:new Uint8Array(e),C:!1};if(e.constructor===Uint8Array)return{buffer:e,C:!1};if(e.constructor===ArrayBuffer)return{buffer:new Uint8Array(e),C:!1};if(e.constructor===ec)return{buffer:el(e)||F(),C:!0};if(e instanceof Uint8Array)return{buffer:new Uint8Array(e.buffer,e.byteOffset,e.byteLength),C:!1};throw Error("Type not convertible to a Uint8Array, expected a Uint8Array, an ArrayBuffer, a base64 encoded string, a ByteString or an Array of numbers")}(t),e.i=t.buffer,e.m=t.C,e.l=0,e.j=e.i.length,e.h=e.l)}function eu(e,t){if(e.h=t,t>e.j)throw Q(e.j,t)}function em(e){var t=e.i,r=e.h,i=t[r++],s=127&i;if(128&i&&(s|=(127&(i=t[r++]))<<7,128&i&&(s|=(127&(i=t[r++]))<<14,128&i&&(s|=(127&(i=t[r++]))<<21,128&i&&(s|=(i=t[r++])<<28,128&i&&128&t[r++]&&128&t[r++]&&128&t[r++]&&128&t[r++]&&128&t[r++])))))throw J();return eu(e,r),s}function ef(e,t){if(0>t)throw Error("Tried to read a negative byte length: "+t);var r=e.h,i=r+t;if(i>e.j)throw Q(t,e.j-r);return e.h=i,r}ep.prototype.reset=function(){this.h=this.l};var eg=[];function ev(){this.h=[]}function e_(e,t,r){for(;0<r||127<t;)e.h.push(127&t|128),t=(t>>>7|r<<25)>>>0,r>>>=7;e.h.push(t)}function eb(e,t){for(;127<t;)e.h.push(127&t|128),t>>>=7;e.h.push(t)}function ew(e,t){if(eg.length){var r=eg.pop();eh(r,e,t),e=r}else e=new ep(e,t);this.h=e,this.j=this.h.h,this.i=this.l=-1,this.setOptions(t)}function ey(e){var t=e.h;if(t.h==t.j)return!1;e.j=e.h.h;var r=em(e.h)>>>0;if(t=r>>>3,!(0<=(r&=7)&&5>=r))throw K(r,e.j);if(1>t)throw Error("Invalid field number: "+t+" (at position "+e.j+")");return e.l=t,e.i=r,!0}ev.prototype.length=function(){return this.h.length},ev.prototype.end=function(){var e=this.h;return this.h=[],e},ew.prototype.setOptions=function(e){e=void 0===e?{}:e,this.ca=void 0!==e.ca&&e.ca},ew.prototype.reset=function(){this.h.reset(),this.j=this.h.h,this.i=this.l=-1};var eS=[];function eR(){this.j=[],this.i=0,this.h=new ev}function eP(e,t){0!==t.length&&(e.j.push(t),e.i+=t.length)}var eT="function"==typeof Symbol&&"symbol"==typeof Symbol()?Symbol():void 0;function eC(e,t){return eT?e[eT]|=t:void 0!==e.A?e.A|=t:(Object.defineProperties(e,{A:{value:t,configurable:!0,writable:!0,enumerable:!1}}),t)}function ek(e,t){eT?e[eT]&&(e[eT]&=~t):void 0!==e.A&&(e.A&=~t)}function ex(e){var t;return null==(t=eT?e[eT]:e.A)?0:t}function eD(e,t){eT?e[eT]=t:void 0!==e.A?e.A=t:Object.defineProperties(e,{A:{value:t,configurable:!0,writable:!0,enumerable:!1}})}function eM(e,t){eD(t,(0|e)&-51)}function eE(e,t){eD(t,(18|e)&-41)}var eI={};function eO(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)&&e.constructor===Object}var eL,ej,eA=[];function eN(e){if(2&ex(e.o))throw Error("Cannot mutate an immutable Message")}function eF(e){var t=e.length;(t=t?e[t-1]:void 0)&&eO(t)?t.g=1:(t={},e.push((t.g=1,t)))}function eB(e){var t=e.i+e.G;return e.B||(e.B=e.o[t]={})}function eq(e,t){return -1===t?null:t>=e.i?e.B?e.B[t]:void 0:e.o[t+e.G]}function e$(e,t,r,i){eN(e),eU(e,t,r,i)}function eU(e,t,r,i){e.j&&(e.j=void 0),t>=e.i||i?eB(e)[t]=r:(e.o[t+e.G]=r,(e=e.B)&&t in e&&delete e[t])}function eV(e,t,r,i){var s=eq(e,t);Array.isArray(s)||(s=ej);var a=ex(s);if(1&a||eC(s,1),i)2&a||eC(s,2),1&r||Object.freeze(s);else{i=!(2&r);var n,o=2&a;1&r||!o?i&&16&a&&!o&&ek(s,16):(eC(n=Array.prototype.slice.call(s),1),eU(e,t,s=n))}return s}function ez(e,t){var r=eq(e,t),i=null==r?r:"number"==typeof r||"NaN"===r||"Infinity"===r||"-Infinity"===r?Number(r):void 0;return null!=i&&i!==r&&eU(e,t,i),i}function eW(e,t,r,i,s){e.h||(e.h={});var a=e.h[r],n=eV(e,r,3,s);if(!a){var o=n;a=[];var c=!!(16&ex(e.o));n=!!(2&ex(o));var d=o;!s&&n&&(o=Array.prototype.slice.call(o));for(var l=n,p=0;p<o.length;p++){var h=o[p],u=t,m=!1;if(void 0!==(h=Array.isArray(h)?new u(h):m?new u:void 0)){var f=m=ex(u=h.o);n&&(f|=2),c&&(f|=16),f!=m&&eD(u,f),u=f,l=l||!!(2&u),a.push(h)}}return e.h[r]=a,t=33|(c=ex(o)),c!=(t=l?-9&t:8|t)&&(Object.isFrozen(l=o)&&(l=Array.prototype.slice.call(l)),eD(l,t),o=l),d!==o&&eU(e,r,o),(s||i&&n)&&eC(a,2),i&&Object.freeze(a),a}return s||(s=Object.isFrozen(a),i&&!s?Object.freeze(a):!i&&s&&(a=Array.prototype.slice.call(a),e.h[r]=a)),a}function eG(e,t,r){var i=!!(2&ex(e.o));if(t=eW(e,t,r,i,i),e=eV(e,r,3,i),!(i||8&ex(e))){for(i=0;i<t.length;i++){if(2&ex((r=t[i]).o)){var s=e2(r,!1);s.j=r}else s=r;r!==s&&(t[i]=s,e[i]=s.o)}eC(e,8)}return t}function eH(e,t,r){if(null!=r&&"number"!=typeof r)throw Error("Value of float/double field must be a number|null|undefined, found "+typeof r+": "+r);e$(e,t,r)}function eK(e,t,r,i,s){eN(e);var a=eW(e,r,t,!1,!1);return r=null!=i?i:new r,e=eV(e,t,2,!1),void 0!=s?(a.splice(s,0,r),e.splice(s,0,r.o)):(a.push(r),e.push(r.o)),r.C()&&ek(e,8),r}function eJ(e,t){return null==e?t:e}function eQ(e,t,r){return r=void 0===r?0:r,eJ(ez(e,t),r)}function eZ(e,t,r,i){var s=ex(e);i=i?!!(16&s):void 0,e=Array.prototype.slice.call(e);for(var a=0;a<e.length;a++)e[a]=function e(t,r,i,s){if(null!=t){if(Array.isArray(t))t=eZ(t,r,i,void 0!==s);else if(eO(t)){var a,n={};for(a in t)n[a]=e(t[a],r,i,s);t=n}else t=r(t,s);return t}}(e[a],t,r,i);return r(s,e),e}function eX(e){return e.ja===eI?e.toJSON():function(e){switch(typeof e){case"number":return isFinite(e)?e:String(e);case"object":if(e){if(Array.isArray(e)){if(0!=(128&ex(e)))return eF(e=Array.prototype.slice.call(e)),e}else{if(I&&null!=e&&e instanceof Uint8Array)return L(e);if(e instanceof ec){var t=e.V;return null==t?"":"string"==typeof t?t:e.V=L(t)}}}}return e}(e)}function eY(e,t){128&e&&eF(t)}function e0(e,t,r,i,s,a,n){if(e=e.h&&e.h[r]){var o;if(2&(i=ex(e))?i=e:(eE(i,a=x(e,e1)),Object.freeze(a),i=a),eN(t),n=null==i?ej:(eC(o=[],1),o),null!=i){for(e=0,a=!!i.length;e<i.length;e++){var c=i[e];a=a&&!(2&ex(c.o)),n[e]=c.o}a=(a?8:0)|1,((e=ex(n))&a)!==a&&(Object.isFrozen(n)&&(n=Array.prototype.slice.call(n)),eD(n,e|a)),t.h||(t.h={}),t.h[r]=i}else t.h&&(t.h[r]=void 0);eU(t,r,n,s)}else e$(t,r,function e(t,r,i){if(i=void 0===i?eE:i,null!=t){if(I&&t instanceof Uint8Array)return t.length?new ec(new Uint8Array(t),B):ed();if(Array.isArray(t)){var s=ex(t);return 2&s||(r&&!(32&s)&&(16&s||0===s)?eD(t,2|s):4&(r=ex(t=eZ(t,e,4&s?eE:i,!0)))&&2&r&&Object.freeze(t)),t}return t.ja===eI?e1(t):t}}(i,a,n),s)}function e1(e){return 2&ex(e.o)||eC((e=e2(e,!0)).o,2),e}function e2(e,r){var i=e.o,s=[];eC(s,16);var a=e.constructor.h;if(a&&s.push(a),a=e.B){s.length=i.length,s.fill(void 0,s.length,i.length);var n={};s[s.length-1]=n}0!=(128&ex(i))&&eF(s),r=r||e.C()?eE:eM,n=e.constructor,t=s,s=new n(s),t=void 0,e.R&&(s.R=e.R.slice()),n=!!(16&ex(i));for(var o=a?i.length-1:i.length,c=0;c<o;c++)e0(e,s,c-e.G,i[c],!1,n,r);if(a)for(var d in a)e0(e,s,+d,a[d],!0,n,r);return s}function e3(e,r,i){null==e&&(e=t),t=void 0;var s,a=this.constructor.i||0,n=0<a,o=this.constructor.h,c=!1;if(null==e){var d=48,l=!0;n&&(a=0,d|=128),eD(e=o?[o]:[],d)}else{if(!Array.isArray(e)||o&&o!==e[0])throw Error();var p=d=eC(e,0);if((l=0!=(16&p))&&((c=0!=(32&p))||(p|=32)),n){if(128&p)a=0;else if(0<e.length){var h=e[e.length-1];if(eO(h)&&"g"in h){a=0,p|=128,delete h.g;var u,m=!0;for(u in h){m=!1;break}m&&e.pop()}}}else if(128&p)throw Error();d!==p&&eD(e,p)}this.G=(o?0:-1)-a,this.h=void 0,this.o=e;e:{if(a=(o=this.o.length)-1,o&&eO(o=this.o[a])){this.B=o,this.i=a-this.G;break e}void 0!==r&&-1<r?(this.i=Math.max(r,a+1-this.G),this.B=void 0):this.i=Number.MAX_VALUE}if(!n&&this.B&&"g"in this.B)throw Error('Unexpected "g" flag in sparse object of message that is not a group type.');if(i)for(r=l&&!c&&!0,n=this.i,l=0;l<i.length;l++)(c=i[l])<n?(c+=this.G,(a=e[c])?e6(a,r):e[c]=ej):(s||(s=eB(this)),(a=s[c])?e6(a,r):s[c]=ej)}function e6(e,t){if(Array.isArray(e)){var r=ex(e),i=1;!t||2&r||(i|=16),(r&i)!==i&&eD(e,r|i)}}function e4(e,t,r){if(r){var i,s={};for(i in r){var a=r[i],n=a.ra;n||(s.J=a.xa||a.oa.W,a.ia?(s.aa=tr(a.ia),n=function(e){return function(t,r,i){return e.J(t,r,i,e.aa)}}(s)):a.ka?(s.Z=ti(a.da.P,a.ka),n=function(e){return function(t,r,i){return e.J(t,r,i,e.Z)}}(s)):n=s.J,a.ra=n),n(t,e,a.da),s={J:s.J,aa:s.aa,Z:s.Z}}}!function(e,t){if(t=t.R){eP(e,e.h.end());for(var r=0;r<t.length;r++)eP(e,el(t[r])||F())}}(t,e)}eD(eA,23),ej=Object.freeze(eA),e3.prototype.toJSON=function(){return eZ(this.o,eX,eY)},e3.prototype.C=function(){return!!(2&ex(this.o))},e3.prototype.ja=eI,e3.prototype.toString=function(){return this.o.toString()};var e5=Symbol();function e8(e,t,r){return e[e5]||(e[e5]=function(e,i){return t(e,i,r)})}function e7(e){var t=e[e5];if(!t){var r=tf(e);t=function(e,t){return tg(e,t,r)},e[e5]=t}return t}function e9(e,t){var r=e[t];return"function"==typeof r&&0===r.length&&(r=r(),e[t]=r),Array.isArray(r)&&(tl in r||ts in r||0<r.length&&"function"==typeof r[0])?r:void 0}function te(e,t,r,i,s,a){t.P=e[0];var n=1;if(e.length>n&&"number"!=typeof e[n]){var o=e[n++];r(t,o)}for(;n<e.length;){r=e[n++];for(var c=n+1;c<e.length&&"number"!=typeof e[c];)c++;switch(o=e[n++],c-=n){case 0:i(t,r,o);break;case 1:(c=e9(e,n))?(n++,s(t,r,o,c)):i(t,r,o,e[n++]);break;case 2:s(t,r,o,c=e9(e,c=n++),e[n++]);break;case 3:a(t,r,o,e[n++],e[n++],e[n++]);break;case 4:a(t,r,o,e[n++],e[n++],e[n++],e[n++]);break;default:throw Error("unexpected number of binary field arguments: "+c)}}return t}var tt=Symbol();function tr(e){var t=e[tt];if(!t){var r=td(e);t=function(e,t){return tv(e,t,r)},e[tt]=t}return t}function ti(e,t){var r=e[tt];return r||(r=function(e,r){return e4(e,r,t)},e[tt]=r),r}var ts=Symbol();function ta(e,t){e.push(t)}function tn(e,t,r){e.push(t,r.W)}function to(e,t,r,i){var s=tr(i),a=td(i).P,n=r.W;e.push(t,function(e,t,r){return n(e,t,r,a,s)})}function tc(e,t,r,i,s,a){var n=ti(i,a),o=r.W;e.push(t,function(e,t,r){return o(e,t,r,i,n)})}function td(e){var t=e[ts];return t||(t=te(e,e[ts]=[],ta,tn,to,tc),tl in e&&ts in e&&(e.length=0)),t}var tl=Symbol();function tp(e,t){e[0]=t}function th(e,t,r,i){var s=r.U;e[t]=i?function(e,t,r){return s(e,t,r,i)}:s}function tu(e,t,r,i,s){var a=r.U,n=e7(i),o=tf(i).P;e[t]=function(e,t,r){return a(e,t,r,o,n,s)}}function tm(e,t,r,i,s,a,n){var o=r.U,c=e8(i,s,a);e[t]=function(e,t,r){return o(e,t,r,i,c,n)}}function tf(e){var t=e[tl];return t||(t=te(e,e[tl]={},tp,th,tu,tm),tl in e&&ts in e&&(e.length=0)),t}function tg(e,t,r){for(;ey(t)&&4!=t.i;){var i=t.l,s=r[i];if(!s){var a=r[0];a&&(a=a[i])&&(s=r[i]=function(e){var t,r=(t=e.ia)?e7(t):(t=e.wa)?e8(e.da.P,t,e.ka):void 0,i=e.da,s=e.oa.U;return r?function(e,t){return s(e,t,i,r)}:function(e,t){return s(e,t,i)}}(a))}if(!s||!s(t,e,i)){s=t,i=e,a=s.j,function e(t){switch(t.i){case 0:if(0!=t.i)e(t);else e:{t=t.h;for(var r=t.h,i=r+10,s=t.i;r<i;)if(0==(128&s[r++])){eu(t,r);break e}throw J()}break;case 1:eu(t=t.h,t.h+8);break;case 2:2!=t.i?e(t):(r=em(t.h)>>>0,eu(t=t.h,t.h+r));break;case 5:eu(t=t.h,t.h+4);break;case 3:for(r=t.l;;){if(!ey(t))throw Error("Unmatched start-group tag: stream EOF");if(4==t.i){if(t.l!=r)throw Error("Unmatched end-group tag");break}e(t)}break;default:throw K(t.i,t.j)}}(s);var n=s;if(!n.ca){if(s=n.h.h-a,n.h.h=a,n=n.h,0==s)s=ed();else{if(a=ef(n,s),n.S&&n.m)s=n.i.subarray(a,a+s);else{n=n.i;var o=a;s=o===(s=a+s)?F():q?n.slice(o,s):new Uint8Array(n.subarray(o,s))}s=0==s.length?ed():new ec(s,B)}(a=i.R)?a.push(s):i.R=[s]}}}return e}function tv(e,t,r){for(var i=r.length,s=1==i%2,a=s?1:0;a<i;a+=2)(0,r[a+1])(t,e,r[a]);e4(e,t,s?r[0]:void 0)}function t_(e,t){return{U:e,W:t}}var tb=t_(function(e,t,r){if(5!==e.i)return!1;var i=(e=e.h).i,s=e.h,a=i[s],n=i[s+1],o=i[s+2];return i=i[s+3],eu(e,e.h+4),e=2*((n=(a<<0|n<<8|o<<16|i<<24)>>>0)>>31)+1,a=n>>>23&255,n&=8388607,e$(t,r,255==a?n?NaN:1/0*e:0==a?1401298464324817e-60*e*n:e*Math.pow(2,a-150)*(n+8388608)),!0},function(e,t,r){if(null!=(t=ez(t,r))){eb(e.h,8*r+5),e=e.h;var i=+t;0===i?0<1/i?$=U=0:(U=0,$=0x80000000):isNaN(i)?(U=0,$=0x7fffffff):34028234663852886e22<(i=(r=0>i?-0x80000000:0)?-i:i)?(U=0,$=(0x7f800000|r)>>>0):11754943508222875e-54>i?(U=0,$=(r|(i=Math.round(i/1401298464324817e-60)))>>>0):(t=Math.floor(Math.log(i)/Math.LN2),i*=Math.pow(2,-t),0x1000000<=(i=Math.round(8388608*i))&&++t,U=0,$=(r|t+127<<23|8388607&i)>>>0),r=$,e.h.push(r>>>0&255),e.h.push(r>>>8&255),e.h.push(r>>>16&255),e.h.push(r>>>24&255)}}),tw=t_(function(e,t,r){if(0!==e.i)return!1;var i=e.h,s=0,a=e=0,n=i.i,o=i.h;do{var c=n[o++];s|=(127&c)<<a,a+=7}while(32>a&&128&c)for(32<a&&(e|=(127&c)>>4),a=3;32>a&&128&c;a+=7)e|=(127&(c=n[o++]))<<a;if(eu(i,o),128>c)i=s>>>0,(e=0x80000000&(c=e>>>0))&&(c=~c>>>0,0==(i=~i+1>>>0)&&(c=c+1>>>0)),i=0x100000000*c+(i>>>0);else throw J();return e$(t,r,e?-i:i),!0},function(e,t,r){null!=(t=eq(t,r))&&("string"==typeof t&&H(t),null!=t&&(eb(e.h,8*r),"number"==typeof t?(e=e.h,V(t),e_(e,$,U)):(r=H(t),e_(e.h,r.i,r.h))))}),ty=t_(function(e,t,r){return 0===e.i&&(e$(t,r,em(e.h)),!0)},function(e,t,r){if(null!=(t=eq(t,r))&&null!=t){if(eb(e.h,8*r),e=e.h,0<=(r=t))eb(e,r);else{for(t=0;9>t;t++)e.h.push(127&r|128),r>>=7;e.h.push(1)}}}),tS=t_(function(e,t,r){if(2!==e.i)return!1;var i=em(e.h)>>>0,s=ef(e=e.h,i);if(e=e.i,ea){var a,n=e;(a=er)||(a=er=new TextDecoder("utf-8",{fatal:!0})),e=s+i,n=0===s&&e===n.length?n:n.subarray(s,e);try{var o=a.decode(n)}catch(e){if(void 0===es){try{a.decode(new Uint8Array([128]))}catch(e){}try{a.decode(new Uint8Array([97])),es=!0}catch(e){es=!1}}throw es||(er=void 0),e}}else{i=(o=s)+i,s=[];for(var c,d,l=null;o<i;)128>(c=e[o++])?s.push(c):224>c?o>=i?Z():(d=e[o++],194>c||128!=(192&d)?(o--,Z()):s.push((31&c)<<6|63&d)):240>c?o>=i-1?Z():128!=(192&(d=e[o++]))||224===c&&160>d||237===c&&160<=d||128!=(192&(n=e[o++]))?(o--,Z()):s.push((15&c)<<12|(63&d)<<6|63&n):244>=c?o>=i-2?Z():128!=(192&(d=e[o++]))||0!=(c<<28)+(d-144)>>30||128!=(192&(n=e[o++]))||128!=(192&(a=e[o++]))?(o--,Z()):(c=((7&c)<<18|(63&d)<<12|(63&n)<<6|63&a)-65536,s.push((c>>10&1023)+55296,(1023&c)+56320)):Z(),8192<=s.length&&(l=X(l,s),s.length=0);o=X(l,s)}return e$(t,r,o),!0},function(e,t,r){if(null!=(t=eq(t,r))){if(en)t=(ei||(ei=new TextEncoder)).encode(t);else{for(var i=0,s=new Uint8Array(3*t.length),a=0;a<t.length;a++){var n=t.charCodeAt(a);if(128>n)s[i++]=n;else{if(2048>n)s[i++]=n>>6|192;else{if(55296<=n&&57343>=n){if(56319>=n&&a<t.length){var o=t.charCodeAt(++a);if(56320<=o&&57343>=o){n=1024*(n-55296)+o-56320+65536,s[i++]=n>>18|240,s[i++]=n>>12&63|128,s[i++]=n>>6&63|128,s[i++]=63&n|128;continue}a--}n=65533}s[i++]=n>>12|224,s[i++]=n>>6&63|128}s[i++]=63&n|128}}t=i===s.length?s:s.subarray(0,i)}eb(e.h,8*r+2),eb(e.h,t.length),eP(e,e.h.end()),eP(e,t)}}),tR=t_(function(e,t,r,i,s){if(2!==e.i)return!1;t=eK(t,r,i),r=e.h.j,i=em(e.h)>>>0;var a=e.h.h+i,n=a-r;if(0>=n&&(e.h.j=a,s(t,e,void 0,void 0,void 0),n=a-e.h.h),n)throw Error("Message parsing ended unexpectedly. Expected to read "+i+" bytes, instead read "+(i-n)+" bytes, either the data ended unexpectedly or the message misreported its own length");return e.h.h=a,e.h.j=r,!0},function(e,t,r,i,s){if(null!=(t=eG(t,i,r)))for(i=0;i<t.length;i++){var a=e;eb(a.h,8*r+2);var n=a.h.end();eP(a,n),n.push(a.i),a=n,s(t[i],e),n=e;var o=a.pop();for(o=n.i+n.h.length()-o;127<o;)a.push(127&o|128),o>>>=7,n.i++;a.push(o),n.i++}});function tP(e){return function(t,r){e:{if(eS.length){var i=eS.pop();i.setOptions(r),eh(i.h,t,r),t=i}else t=new ew(t,r);try{var s=tf(e),a=tg(new s.P,t,s);break e}finally{(s=t.h).i=null,s.m=!1,s.l=0,s.j=0,s.h=0,s.S=!1,t.l=-1,t.i=-1,100>eS.length&&eS.push(t)}a=void 0}return a}}function tT(e){return function(){var t=new eR;tv(this,t,td(e)),eP(t,t.h.end());for(var r=new Uint8Array(t.i),i=t.j,s=i.length,a=0,n=0;n<s;n++){var o=i[n];r.set(o,a),a+=o.length}return t.j=[r],r}}function tC(e){e3.call(this,e)}m(tC,e3);var tk=[tC,1,ty,2,tb,3,tS,4,tS];function tx(e){e3.call(this,e,-1,tD)}tC.prototype.l=tT(tk),m(tx,e3),tx.prototype.addClassification=function(e,t){return eK(this,1,tC,e,t),this};var tD=[1],tM=tP([tx,1,tR,tk]);function tE(e){e3.call(this,e)}m(tE,e3);var tI=[tE,1,tb,2,tb,3,tb,4,tb,5,tb];function tO(e){e3.call(this,e,-1,tL)}tE.prototype.l=tT(tI),m(tO,e3);var tL=[1],tj=tP([tO,1,tR,tI]);function tA(e){e3.call(this,e)}m(tA,e3);var tN=[tA,1,tb,2,tb,3,tb,4,tb,5,tb,6,tw],tF=tP(tN);function tB(e,t,r){if(r=e.createShader(0===r?e.VERTEX_SHADER:e.FRAGMENT_SHADER),e.shaderSource(r,t),e.compileShader(r),!e.getShaderParameter(r,e.COMPILE_STATUS))throw Error("Could not compile WebGL shader.\n\n"+e.getShaderInfoLog(r));return r}function tq(e){return{x:eQ(e,1),y:eQ(e,2),z:eQ(e,3),visibility:null!=ez(e,4)?eQ(e,4):void 0}}function t$(e,t){this.i=e,this.h=t,this.m=0}function tU(e,t,r){return(function(e,t){var r=e.h;if(void 0===e.s){var i=tB(r,"\n attribute vec2 aVertex;\n attribute vec2 aTex;\n varying vec2 vTex;\n void main(void) {\n gl_Position = vec4(aVertex, 0.0, 1.0);\n vTex = aTex;\n }",0),s=tB(r,"\n precision mediump float;\n varying vec2 vTex;\n uniform sampler2D sampler0;\n void main(){\n gl_FragColor = texture2D(sampler0, vTex);\n }",1),a=r.createProgram();if(r.attachShader(a,i),r.attachShader(a,s),r.linkProgram(a),!r.getProgramParameter(a,r.LINK_STATUS))throw Error("Could not compile WebGL program.\n\n"+r.getProgramInfoLog(a));i=e.s=a,r.useProgram(i),s=r.getUniformLocation(i,"sampler0"),e.l={O:r.getAttribLocation(i,"aVertex"),N:r.getAttribLocation(i,"aTex"),ya:s},e.v=r.createBuffer(),r.bindBuffer(r.ARRAY_BUFFER,e.v),r.enableVertexAttribArray(e.l.O),r.vertexAttribPointer(e.l.O,2,r.FLOAT,!1,0,0),r.bufferData(r.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),r.STATIC_DRAW),r.bindBuffer(r.ARRAY_BUFFER,null),e.u=r.createBuffer(),r.bindBuffer(r.ARRAY_BUFFER,e.u),r.enableVertexAttribArray(e.l.N),r.vertexAttribPointer(e.l.N,2,r.FLOAT,!1,0,0),r.bufferData(r.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),r.STATIC_DRAW),r.bindBuffer(r.ARRAY_BUFFER,null),r.uniform1i(s,0)}i=e.l,r.useProgram(e.s),r.canvas.width=t.width,r.canvas.height=t.height,r.viewport(0,0,t.width,t.height),r.activeTexture(r.TEXTURE0),e.i.bindTexture2d(t.glName),r.enableVertexAttribArray(i.O),r.bindBuffer(r.ARRAY_BUFFER,e.v),r.vertexAttribPointer(i.O,2,r.FLOAT,!1,0,0),r.enableVertexAttribArray(i.N),r.bindBuffer(r.ARRAY_BUFFER,e.u),r.vertexAttribPointer(i.N,2,r.FLOAT,!1,0,0),r.bindFramebuffer(r.DRAW_FRAMEBUFFER?r.DRAW_FRAMEBUFFER:r.FRAMEBUFFER,null),r.clearColor(0,0,0,0),r.clear(r.COLOR_BUFFER_BIT),r.colorMask(!0,!0,!0,!0),r.drawArrays(r.TRIANGLE_FAN,0,4),r.disableVertexAttribArray(i.O),r.disableVertexAttribArray(i.N),r.bindBuffer(r.ARRAY_BUFFER,null),e.i.bindTexture2d(0)}(e,t),"function"==typeof e.h.canvas.transferToImageBitmap)?Promise.resolve(e.h.canvas.transferToImageBitmap()):r?Promise.resolve(e.h.canvas):"function"==typeof createImageBitmap?createImageBitmap(e.h.canvas):(void 0===e.j&&(e.j=document.createElement("canvas")),new Promise(function(t){e.j.height=e.h.canvas.height,e.j.width=e.h.canvas.width,e.j.getContext("2d",{}).drawImage(e.h.canvas,0,0,e.h.canvas.width,e.h.canvas.height),t(e.j)}))}function tV(e){this.h=e}tA.prototype.l=tT(tN);var tz=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function tW(e,t){return t+e}function tG(e){if(this.h=e,this.listeners={},this.l={},this.L={},this.s={},this.v={},this.M=this.u=this.ga=!0,this.I=Promise.resolve(),this.fa="",this.D={},this.locateFile=e&&e.locateFile||tW,"object"==typeof window)var t=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/";else if("undefined"!=typeof location)t=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/";else throw Error("solutions can only be loaded on a web page or in a web worker");if(this.ha=t,e.options){t=a(Object.keys(e.options));for(var r=t.next();!r.done;r=t.next()){r=r.value;var i=e.options[r].default;void 0!==i&&(this.l[r]="function"==typeof i?i():i)}}}function tH(e,t){var r;return R(function(i){return t in e.L?i.return(e.L[t]):(r=fetch(e.locateFile(t,"")).then(function(e){return e.arrayBuffer()}),e.L[t]=r,i.return(r))})}function tK(e){return(void 0===e&&(e=0),1===e)?"selfie_segmentation_landscape.tflite":"selfie_segmentation.tflite"}function tJ(e){var t=this;e=e||{},this.h=new tG({locateFile:e.locateFile,files:function(e){return[{simd:!0,url:"selfie_segmentation_solution_simd_wasm_bin.js"},{simd:!1,url:"selfie_segmentation_solution_wasm_bin.js"},{data:!0,url:tK(e.modelSelection)}]},graph:{url:"selfie_segmentation.binarypb"},listeners:[{wants:["segmentation_mask","image_transformed"],outs:{image:{type:"texture",stream:"image_transformed"},segmentationMask:{type:"texture",stream:"segmentation_mask"}}}],inputs:{image:{type:"video",stream:"input_frames_gpu"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:"InferenceCalculator",fieldName:"use_cpu_inference"},default:"object"==typeof window&&void 0!==window.navigator&&("iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod".split(";").includes(navigator.platform)||navigator.userAgent.includes("Mac")&&"ontouchend"in document)},selfieMode:{type:0,graphOptionXref:{calculatorType:"GlScalerCalculator",calculatorIndex:1,fieldName:"flip_horizontal"}},modelSelection:{type:1,graphOptionXref:{calculatorType:"ConstantSidePacketCalculator",calculatorName:"ConstantSidePacketCalculatorModelSelection",fieldName:"int_value"},onChange:function(e){var r,i,s;return R(function(a){return 1==a.h?(i="third_party/mediapipe/modules/selfie_segmentation/"+(r=tK(e)),_(a,tH(t.h,r),2)):(s=a.i,t.h.overrideFile(i,s),a.return(!0))})}}}})}(c=tG.prototype).close=function(){return this.j&&this.j.delete(),Promise.resolve()},c.reset=function(){var e=this;return R(function(t){e.j&&(e.j.reset(),e.s={},e.v={}),t.h=0})},c.setOptions=function(e,t){var r=this;if(t=t||this.h.options){for(var i=[],s=[],n={},o=a(Object.keys(e)),c=o.next();!c.done;n={X:n.X,Y:n.Y},c=o.next())if(!((c=c.value)in this.l&&this.l[c]===e[c])){this.l[c]=e[c];var d=t[c];void 0!==d&&(d.onChange&&(n.X=d.onChange,n.Y=e[c],i.push(function(e){return function(){return R(function(t){if(1==t.h)return _(t,e.X(e.Y),2);!0===t.i&&(r.u=!0),t.h=0})}}(n))),d.graphOptionXref&&(c=Object.assign({},{calculatorName:"",calculatorIndex:0},d.graphOptionXref,{valueNumber:1===d.type?e[c]:0,valueBoolean:0===d.type&&e[c],valueString:2===d.type?e[c]:""}),s.push(c)))}(0!==i.length||0!==s.length)&&(this.u=!0,this.H=(void 0===this.H?[]:this.H).concat(s),this.F=(void 0===this.F?[]:this.F).concat(i))}},c.initialize=function(){var e=this;return R(function(t){var r,i,s,o,c,d,l,p,h,u,m,f,g,v,b,w,y,S,P,T,C,k,x,D;return 1==t.h?_(t,R(function(t){switch(t.h){case 1:if(!e.ga)return t.return();return r=void 0===e.h.files?[]:"function"==typeof e.h.files?e.h.files(e.l):e.h.files,_(t,R(function(e){switch(e.h){case 1:return e.s=2,_(e,WebAssembly.instantiate(tz),4);case 4:e.h=3,e.s=0;break;case 2:return e.s=0,e.l=null,e.return(!1);case 3:return e.return(!0)}}),2);case 2:if(i=t.i,"object"==typeof window){var a,f;return a={locateFile:e.locateFile},window.createMediapipeSolutionsWasm=a,f={locateFile:e.locateFile},window.createMediapipeSolutionsPackedAssets=f,d=r.filter(function(e){return void 0!==e.data}),l=r.filter(function(e){return void 0===e.data}),p=Promise.all(d.map(function(t){var r=tH(e,t.url);if(void 0!==t.path){var i=t.path;r=r.then(function(t){return e.overrideFile(i,t),Promise.resolve(t)})}return r})),h=Promise.all(l.map(function(t){var r,s;return void 0===t.simd||t.simd&&i||!t.simd&&!i?(r=e.locateFile(t.url,e.ha),(s=document.createElement("script")).setAttribute("src",r),s.setAttribute("crossorigin","anonymous"),new Promise(function(e){s.addEventListener("load",function(){e()},!1),s.addEventListener("error",function(){e()},!1),document.body.appendChild(s)})):Promise.resolve()})).then(function(){var t,r,i;return R(function(s){if(1==s.h)return t=window.createMediapipeSolutionsWasm,r=window.createMediapipeSolutionsPackedAssets,i=e,_(s,t(r),2);i.i=s.i,s.h=0})}),u=R(function(t){return e.h.graph&&e.h.graph.url?t=_(t,tH(e,e.h.graph.url),0):(t.h=0,t=void 0),t}),_(t,Promise.all([h,p,u]),7)}if("function"!=typeof importScripts)throw Error("solutions can only be loaded on a web page or in a web worker");return s=r.filter(function(e){return void 0===e.simd||e.simd&&i||!e.simd&&!i}).map(function(t){return e.locateFile(t.url,e.ha)}),importScripts.apply(null,n(s)),o=e,_(t,createMediapipeSolutionsWasm(Module),6);case 6:o.i=t.i,e.m=new OffscreenCanvas(1,1),e.i.canvas=e.m,c=e.i.GL.createContext(e.m,{antialias:!1,alpha:!1,va:"undefined"!=typeof WebGL2RenderingContext?2:1}),e.i.GL.makeContextCurrent(c),t.h=4;break;case 7:if(e.m=document.createElement("canvas"),!(m=e.m.getContext("webgl2",{}))&&!(m=e.m.getContext("webgl",{})))return alert("Failed to create WebGL canvas context when passing video frame."),t.return();e.K=m,e.i.canvas=e.m,e.i.createContext(e.m,!0,!0,{});case 4:e.j=new e.i.SolutionWasm,e.ga=!1,t.h=0}}),2):3!=t.h?_(t,R(function(t){if(1==t.h){if(e.h.graph&&e.h.graph.url&&e.fa===e.h.graph.url)return t.return();if(e.u=!0,!e.h.graph||!e.h.graph.url){t.h=2;return}return e.fa=e.h.graph.url,_(t,tH(e,e.h.graph.url),3)}for(2!=t.h&&(f=t.i,e.j.loadGraph(f)),v=(g=a(Object.keys(e.D))).next();!v.done;v=g.next())b=v.value,e.j.overrideFile(b,e.D[b]);if(e.D={},e.h.listeners)for(y=(w=a(e.h.listeners)).next();!y.done;y=w.next())(function(e,t){for(var r=t.name||"$",i=[].concat(n(t.wants)),s=new e.i.StringList,o=a(t.wants),c=o.next();!c.done;c=o.next())s.push_back(c.value);o=e.i.PacketListener.implement({onResults:function(s){for(var n,o,c,d,l,p,h,u,m,f,g,v,b,w,y={},S=0;S<t.wants.length;++S)y[i[S]]=s.get(S);var P=e.listeners[r];P&&(e.I=(n=t.outs,R(function(t){switch(t.h){case 1:if(!n)return t.return(y);for(o={},c=0,l=(d=a(Object.keys(n))).next();!l.done;l=d.next())"string"!=typeof(p=n[l.value])&&"texture"===p.type&&void 0!==y[p.stream]&&++c;1<c&&(e.M=!1),l=(h=a(Object.keys(n))).next();case 2:if(l.done){t.h=4;break}if("string"==typeof(m=n[u=l.value]))return b=o,w=u,_(t,function(e,t,r){var i;return R(function(s){return"number"==typeof r||r instanceof Uint8Array||r instanceof e.i.Uint8BlobList?s.return(r):r instanceof e.i.Texture2dDataOut?((i=e.v[t])||(i=new t$(e.i,e.K),e.v[t]=i),s.return(tU(i,r,e.M))):s.return(void 0)})}(e,u,y[m]),14);if(f=y[m.stream],"detection_list"===m.type){if(f){for(var r=f.getRectList(),i=f.getLandmarksList(),s=f.getClassificationsList(),S=[],P=0;P<r.size();++P){var T=tF(r.get(P)),C=eQ(T,1),k=eQ(T,2),x=eQ(T,3),D=eQ(T,4),M=eQ(T,5,0),E=void 0;E=void 0===E?0:E,T={la:{sa:C,ta:k,height:x,width:D,rotation:M,pa:eJ(eq(T,6),E)},ea:eG(tj(i.get(P)),tE,1).map(tq),ba:eG(tM(s.get(P)),tC,1).map(function(e){var t=eq(e,1);return{index:null==t?0:t,qa:eQ(e,2),label:null!=eq(e,3)?eJ(eq(e,3),""):void 0,displayName:null!=eq(e,4)?eJ(eq(e,4),""):void 0}})},S.push(T)}r=S}else r=[];o[u]=r,t.h=7;break}if("proto_list"===m.type){if(f){for(i=0,r=Array(f.size());i<f.size();i++)r[i]=f.get(i);f.delete()}else r=[];o[u]=r,t.h=7;break}if(void 0===f){t.h=3;break}if("float_list"===m.type||"proto"===m.type){o[u]=f,t.h=7;break}if("texture"!==m.type)throw Error("Unknown output config type: '"+m.type+"'");return(g=e.v[u])||(g=new t$(e.i,e.K),e.v[u]=g),_(t,tU(g,f,e.M),13);case 13:v=t.i,o[u]=v;case 7:m.transform&&o[u]&&(o[u]=m.transform(o[u])),t.h=3;break;case 14:b[w]=t.i;case 3:l=h.next(),t.h=2;break;case 4:return t.return(o)}})).then(function(r){r=P(r);for(var s=0;s<t.wants.length;++s){var a=y[i[s]];"object"==typeof a&&a.hasOwnProperty&&a.hasOwnProperty("delete")&&a.delete()}r&&(e.I=r)}))}}),e.j.attachMultiListener(s,o),s.delete()})(e,y.value);S=e.l,e.l={},e.setOptions(S),t.h=0}),3):_(t,R(function(t){switch(t.h){case 1:if(!e.u)return t.return();if(!e.F){t.h=2;break}T=(P=a(e.F)).next();case 3:if(T.done){t.h=5;break}return _(t,(0,T.value)(),4);case 4:T=P.next(),t.h=3;break;case 5:e.F=void 0;case 2:if(e.H){for(C=new e.i.GraphOptionChangeRequestList,x=(k=a(e.H)).next();!x.done;x=k.next())D=x.value,C.push_back(D);e.j.changeOptions(C),C.delete(),e.H=void 0}e.u=!1,t.h=0}}),0)})},c.overrideFile=function(e,t){this.j?this.j.overrideFile(e,t):this.D[e]=t},c.clearOverriddenFiles=function(){this.D={},this.j&&this.j.clearOverriddenFiles()},c.send=function(e,t){var r,i,s,n,o,c,d,l,p,h=this;return R(function(u){switch(u.h){case 1:if(!h.h.inputs)return u.return();return r=1e3*(null==t?performance.now():t),_(u,h.I,2);case 2:return _(u,h.initialize(),3);case 3:for(i=new h.i.PacketDataList,n=(s=a(Object.keys(e))).next();!n.done;n=s.next())if(o=n.value,c=h.h.inputs[o]){e:{var m=e[o];switch(c.type){case"video":var f=h.s[c.stream];if(f||(f=new t$(h.i,h.K),h.s[c.stream]=f),0===f.m&&(f.m=f.i.createTexture()),"undefined"!=typeof HTMLVideoElement&&m instanceof HTMLVideoElement)var g=m.videoWidth,v=m.videoHeight;else"undefined"!=typeof HTMLImageElement&&m instanceof HTMLImageElement?(g=m.naturalWidth,v=m.naturalHeight):(g=m.width,v=m.height);v={glName:f.m,width:g,height:v},(g=f.h).canvas.width=v.width,g.canvas.height=v.height,g.activeTexture(g.TEXTURE0),f.i.bindTexture2d(f.m),g.texImage2D(g.TEXTURE_2D,0,g.RGBA,g.RGBA,g.UNSIGNED_BYTE,m),f.i.bindTexture2d(0),f=v;break e;case"detections":for((f=h.s[c.stream])||(f=new tV(h.i),h.s[c.stream]=f),f.data||(f.data=new f.h.DetectionListData),f.data.reset(m.length),v=0;v<m.length;++v){g=m[v];var b=f.data,w=b.setBoundingBox,y=v,S=g.la,R=new tA;if(eH(R,1,S.sa),eH(R,2,S.ta),eH(R,3,S.height),eH(R,4,S.width),eH(R,5,S.rotation),e$(R,6,S.pa),S=R.l(),w.call(b,y,S),g.ea)for(b=0;b<g.ea.length;++b){R=g.ea[b],y=(w=f.data).addNormalizedLandmark,S=v,R=Object.assign({},R,{visibility:R.visibility?R.visibility:0});var P=new tE;eH(P,1,R.x),eH(P,2,R.y),eH(P,3,R.z),R.visibility&&eH(P,4,R.visibility),R=P.l(),y.call(w,S,R)}if(g.ba)for(b=0;b<g.ba.length;++b)y=(w=f.data).addClassification,S=v,R=g.ba[b],eH(P=new tC,2,R.qa),R.index&&e$(P,1,R.index),R.label&&e$(P,3,R.label),R.displayName&&e$(P,4,R.displayName),R=P.l(),y.call(w,S,R)}f=f.data;break e;default:f={}}}switch(d=f,l=c.stream,c.type){case"video":i.pushTexture2d(Object.assign({},d,{stream:l,timestamp:r}));break;case"detections":(p=d).stream=l,p.timestamp=r,i.pushDetectionList(p);break;default:throw Error("Unknown input config type: '"+c.type+"'")}}return h.j.send(i),_(u,h.I,4);case 4:i.delete(),u.h=0}})},c.onResults=function(e,t){this.listeners[t||"$"]=e},C("Solution",tG),C("OptionType",{BOOL:0,NUMBER:1,ua:2,0:"BOOL",1:"NUMBER",2:"STRING"}),(c=tJ.prototype).close=function(){return this.h.close(),Promise.resolve()},c.onResults=function(e){this.h.onResults(e)},c.initialize=function(){var e=this;return R(function(t){return _(t,e.h.initialize(),0)})},c.reset=function(){this.h.reset()},c.send=function(e){var t=this;return R(function(r){return _(r,t.h.send(e),0)})},c.setOptions=function(e){this.h.setOptions(e)},C("SelfieSegmentation",tJ),C("VERSION","0.1.1675465747")}).call(eq);class ez{constructor(){this.audio={stream:void 0,track:void 0},this.video={stream:void 0,track:void 0},this.isAskingPermissions=!1}getAudioTrack(){return this.audio.track}getVideoTrack(){return this.video.track}async requestMediaPermissions(e={video:!0,audio:!0}){let t={...e},{needToAskAudio:r,needToAskVideo:i}=this.needToAskMedias(t);if(t.audio=!!r&&t.audio,t.video=!!i&&t.video,r||i){let e;this.cleanAllStreams({audio:r,video:i});try{this.isAskingPermissions=!0,e=await e$(t)}finally{this.isAskingPermissions=!1}e?(r&&(this.audio.stream=e.mediaStream,this.audio.track=e.audioTrack),i&&(this.video.stream=e.mediaStream,this.video.track=e.videoTrack)):console.warn("requestMediaPermissions : no media stream. User probably didn't give permissions.")}"object"==typeof e.audio&&this.audio?.track?.applyConstraints(e.audio),"object"==typeof e.video&&this.video?.track?.applyConstraints(e.video)}needToAskMedias(e={video:!0,audio:!0}){let t=!!(e.audio&&(!this.audio.stream||!this.audio.track||"ended"===this.audio.track.readyState)),r=!!(e.video&&(!this.video.stream||!this.video.track||"ended"===this.video.track.readyState)),i=eV(e.audio),s=eV(e.video),a=this.audio.track?.getSettings().deviceId,n=this.video.track?.getSettings().deviceId;return i&&("default"===i||i!==a)&&(t=!0),s&&("default"===s||s!==n)&&(r=!0),"object"==typeof e.video&&e.video.facingMode&&e.video.facingMode!==this.video.track?.getSettings().facingMode&&(r=!0),{needToAskAudio:t,needToAskVideo:r}}cleanAllStreams(e={audio:!0,video:!0}){e.audio&&(this.audio.stream?.getTracks().forEach(e=>{"audio"===e.kind&&e.stop()}),this.audio.stream=void 0,this.audio.track=void 0),e.video&&(this.video.stream?.getTracks().forEach(e=>{"video"===e.kind&&e.stop()}),this.video.stream=void 0,this.video.track=void 0)}printState(){this.audio.track&&eU(this.audio.track,"audio.track"),this.video.track&&eU(this.video.track,"video.track"),this.audio.stream&&(console.log("audio.stream",this.audio.stream.id),this.audio.stream.getTracks().forEach(e=>{eU(e,"linked to audio.stream")})),this.video.stream&&(console.log("video.stream",this.video.stream.id),this.video.stream.getTracks().forEach(e=>{eU(e,"linked to video.stream")}))}}const eW=new eb("MediaPipe"),eG="https://stream-assets.snapcall.io";let eH=!1;const eK=new eq.SelfieSegmentation({locateFile:(e,t)=>{if(eW.debug("selfieSegmentation",e,t),eG)return`${eG}/mediapipe/${e}`;let r=window.location.href.split("/").slice(0,-1).join("/");return`${r}/mediapipe/${e}`}});class eJ{constructor(e,t){this.fillColor="#000000",this.type="blur",this.live=!1,this.fps=24,this.blurLevel=10,this.timerWorker=new Worker(new URL("timer.ed477f04.js","file:"+__filename),{name:"VirtualBackgroundTimerWorker"}),this.stream=e,this.image=document.createElement("video"),this.image.style.display="none",this.image.setAttribute("autoplay",""),this.image.setAttribute("playsinline",""),this.image.setAttribute("muted",""),this.canvas=document.createElement("canvas"),this.canvas.style.display="none",t&&this.setOptions(t)}setOptions(e){this.setType(e.type),this.setFillColor(e.fillColor||this.fillColor),this.setVideoBackground(e.background),this.setBlurLevel(e.blurLevel||this.blurLevel)}setType(e){this.type=e}setBlurLevel(e){this.blurLevel=e}setVideoBackground(e){this.background=e}setFillColor(e){this.fillColor=e}drawWithBlur(e,t){e.save(),e.drawImage(t.image,0,0,this.canvas.width,this.canvas.height),e.globalCompositeOperation="destination-atop",e.drawImage(t.segmentationMask,0,0,this.canvas.width,this.canvas.height),e.filter=`blur(${this.blurLevel}px)`,e.globalCompositeOperation="destination-over",e.drawImage(t.image,0,0,this.canvas.width,this.canvas.height),e.restore()}drawWithBackground(e,t){e.clearRect(0,0,this.canvas.width,this.canvas.height),e.drawImage(t.segmentationMask,0,0,this.canvas.width,this.canvas.height),e.globalCompositeOperation="source-out",e.fillStyle=this.fillColor,this.background?e.drawImage(this.background,0,0,this.canvas.width,this.canvas.height):e.fillRect(0,0,this.canvas.width,this.canvas.height),e.globalCompositeOperation="destination-atop",e.drawImage(t.image,0,0,this.canvas.width,this.canvas.height),e.restore()}onFrame(e){this.canvas.width=e.image.width,this.canvas.height=e.image.height;let t=this.canvas.getContext("2d");if(t)switch(this.type){case"blur":default:this.drawWithBlur(t,e);break;case"background":this.drawWithBackground(t,e)}}runWithFrameCallback(){this.live&&this.image.requestVideoFrameCallback(()=>{eK.send({image:this.image}),this.runWithFrameCallback()})}async createStream(){try{eK.setOptions({selfieMode:!1,modelSelection:0}),eW.log("selfie segmentation initialized"),eH||(await eK.initialize(),eH=!0),this.image.srcObject=this.stream,this.image.onplay=async()=>{this.live=!0;try{eK.onResults(e=>{this.onFrame(e)}),this.timerWorker.onmessage=()=>{eK.send({image:this.image})},this.timerWorker.postMessage({action:"start",params:this.fps})}catch(e){eW.error("createStream:play",e)}}}catch(e){console.error("createStream",e)}return this.canvas.captureStream()}clean(){return new Promise(e=>{this.live=!1,clearInterval(this.runInterval),this.image.srcObject=null,this.timerWorker.terminate(),e()})}printState(){console.log("MediaPipe",{stream:this.stream.id,type:this.type,live:this.live}),this.stream.getTracks().forEach(e=>{eU(e,`linked to MediaPipe.stream ${this.stream.id}`)})}}const eQ=window.AudioContext||window.webkitAudioContext;class eZ{constructor(){this.audioSources={},this.tracks={},this.audioContext=new eQ,this.audioDestination=this.audioContext.createMediaStreamDestination()}getSetting(e){return this.tracks[e]?.getSettings()}removeTrack(e){let t=this.tracks[e];t&&(this.audioSources[e]?.disconnect(),delete this.tracks[e],delete this.audioSources[e],t.enabled=!1)}setTrackEnabled(e,t){let r=this.tracks[e];r?r.enabled=t:console.warn(`Track ${e} not found`)}addTrack(e,t){if("audio"===t.kind){this.removeTrack(e);let r=new MediaStream([t]),i=this.audioContext.createMediaStreamSource(r);this.audioSources[e]=i,this.tracks[e]=t,this.tracks[e].enabled=!0,this.audioDestination&&i.connect(this.audioDestination)}}getFinalTrack(){return this.audioDestination.stream.getTracks()[0]}removeAll(){Object.keys(this.tracks).forEach(e=>{this.removeTrack(e)})}}const eX=async(e,t,r)=>{let i=new URLSearchParams({filename:r});return await fetch(`${e}/public/streams/${t}/temporary-assets?${i}`,{method:"get",headers:{"Content-Type":"application/json"}}).then(e=>e.json())},eY=async(e,t,r)=>{let i=new URLSearchParams({filename:r});return await fetch(`${e}/public/streams/${t}/temporary-assets?${i}`,{method:"delete",headers:{"Content-Type":"application/json"}}).then(e=>e.json())};var e0=d.Buffer;const e1=async(e,{token:t,base64Image:r,recordingGroup:i})=>{let s=`${b()}.jpeg`,a=e0.from(String(r).replace(/^data:image\/\w+;base64,/,""),"base64"),{url:n,headers:o,filename:c}=await fetch(`${e}/public/streams/${t}/events/upload`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({type:"image",filename:s,contentLength:a.length,recordingGroup:i})}).then(e=>e.json());await fetch(n,{method:"PUT",headers:{...o,"Content-Type":"image/*","Content-Length":a.length},body:a});let{url:d}=await eX(e,t,c);return{filename:c,url:d}},e2=(e,t=300)=>{let r,i,s;return function(){let a=this,n=arguments;r?(clearTimeout(i),i=setTimeout(()=>{Date.now()-s>=t&&(e.apply(a,n),s=Date.now())},Math.max(t-(Date.now()-s),0))):(e.apply(a,n),s=Date.now(),r=!0)}},e3=async(e,{file:t,token:r,type:i,recordingGroup:s})=>{if(!t)throw Error(`Missing file on "${t}"`);let a=await fetch(`${e}/public/streams/${r}/events/upload`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({filename:t.name,contentLength:t.size,type:i,recordingGroup:s})}),{url:n,headers:o,filename:c}=await a.json(),d=await fetch(n,{method:"PUT",headers:{...o,"Content-Type":t.type,"Content-Length":String(t.size)},body:t}),{url:l}=await eX(e,r,c);if(!d.ok)throw Error("Upload failed");return{filename:c,url:l}},e6=async(e,t,r)=>{let i=await fetch(`${e}/public/streams/${t}/events/batch`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({medias:r})});if(i.ok)return i.json();throw Error(` request failed ${i.status} `)},e4=new eb("TransportMonitor"),e5={audio:0,video:0,"ice-network":0,"outbound-rtp":0},e8=["audio","video","ice-network","outbound-rtp"];class e7{constructor(e,t,r){this.monitoringIntervals={},this.enabledMonitors={audio:!1,video:!1,"ice-network":!1,"outbound-rtp":!1},this.activeMonitors=0,this.monitorFuncs={audio:this.monitorAudio.bind(this),video:this.monitorVideo.bind(this),"ice-network":this.monitorIceNetwork.bind(this),"outbound-rtp":this.monitorOutboundRtp.bind(this)},this.isConnected=!1,this.issues=0,this.disconnectsCount=0,this.disconnectsThreshold=4,this.allTimeAverageRTT=0,this.lastStateRttOk=!0,this.rttCollects=0,this.mediaSourceStats={},this.outboundRtpCollects=0,this.transport=e,this.description=r,this.listener=t,this.transport.on("connectionstatechange",this.onConnectionStateChange.bind(this)),this.recentRTTs=Array(15).fill(0)}isTransportConnected(){return this.isConnected}setDisconnectsThreshold(e){this.disconnectsThreshold=Math.min(1,e)}getDisconnectsThreshold(){return this.disconnectsThreshold}getCurrentDisconnectsCount(){return this.disconnectsCount}getTransport(){return this.transport}resetStats(){this.issues=0,this.disconnectsCount=0,this.recentRTTs=Array(15).fill(0),this.rttCollects=0,this.lastStateRttOk=!0,this.mediaSourceStats={},this.outboundRtpCollects=0}async onConnectionStateChange(e){switch(e4.log("onConnectionStateChange",`
11
- Transport ${this.transport.id} connection state changed to:`,e),e){case"connected":this.isConnected=!0,this.updateTransportState({isConnected:!0}),this.startAllEnabledMonitorings();break;case"disconnected":this.isConnected=!1,this.disconnectsCount++,this.updateTransportState({isConnected:!1}),this.stopAllMonitorings(),this.disconnectsCount===this.disconnectsThreshold&&this.listener?.onTransportManyDisconnections(this.transport);break;case"failed":this.isConnected=!1,this.updateTransportState({isConnected:!1}),this.stopAllMonitorings(),e4.warn("onConnectionStateChange",`
12
- Transport ${this.transport.id} failed. Closed all monitorings.`);break;case"closed":this.stopAllMonitorings(),e4.log("onConnectionStateChange",`
13
- Transport ${this.transport.id} closed. Closed all monitorings.`)}}updateTransportState({isRttOk:e,isRtxOk:t,isConnected:r}){let i=this.issues;void 0!==e&&(this.issues+=e?-1:1),void 0!==t&&(this.issues+=t?-1:1),void 0!==r&&(this.issues+=r?-1:1),this.issues=Math.max(0,this.issues),i*this.issues==0&&this.listener?.onTransportStateChangeNetwork(this.transport,0===this.issues)}async startGetStats(){this.statsInterval||(this.statsInterval=setInterval(async()=>{this.transport.closed||(this.rtcStatsReports=await this.transport.getStats())},200))}stopGetStats(){clearInterval(this.statsInterval),this.statsInterval=void 0,this.rtcStatsReports=void 0}async setMonitoringEnabled(e,t){this.enabledMonitors[e]=t,t&&"connected"===this.transport.connectionState?this.startMonitoring(e):this.stopMonitoring(e)}startAllEnabledMonitorings(){e8.forEach(e=>{this.enabledMonitors[e]&&this.startMonitoring(e)})}disableAllMonitorings(){e8.forEach(e=>{this.enabledMonitors[e]=!1}),this.stopAllMonitorings()}stopMonitoring(e){this.monitoringIntervals[e]&&(clearInterval(this.monitoringIntervals[e]),delete this.monitoringIntervals[e],this.activeMonitors--,0===this.activeMonitors&&this.stopGetStats())}stopAllMonitorings(){this.stopGetStats(),e8.forEach(e=>{clearInterval(this.monitoringIntervals[e]),delete this.monitoringIntervals[e]}),this.activeMonitors=0}async startMonitoring(e){if(this.monitoringIntervals[e])return!0;let t=await this.transport.getStats(),r=!1;return t.forEach(t=>{switch(t.type){case"media-source":e===t.kind&&(r=!0);break;case"candidate-pair":"ice-network"===e&&(r=!0);break;case"outbound-rtp":"outbound-rtp"===e&&(r=!0)}}),r?(e4.log("startMonitoring",`
14
- Starting ${e} monitoring for transport:`,this.transport.id),0!==this.activeMonitors&&this.statsInterval||this.startGetStats(),this.activeMonitors++,this.monitoringIntervals[e]=setInterval(()=>{this.monitorFuncs[e]()},200)):e4.warn("startMonitoring",`
15
- Cannot monitor ${e} for transport:`,this.transport.id),r}async monitorAudio(){this.rtcStatsReports&&this.rtcStatsReports.forEach(e=>{"media-source"===e.type&&"audio"===e.kind&&e5.audio>=2&&console.log(`Audio stats for transport (description: ${this.description}):
16
- - ssrc: ${e.ssrc}
17
- - audioLevel: ${e.audioLevel}
18
- - totalAudioEnergy: ${e.totalAudioEnergy}`)})}async monitorVideo(){this.rtcStatsReports&&this.rtcStatsReports.forEach(e=>{"media-source"===e.type&&"video"===e.kind&&e5.video>=2&&console.log(`Video stats for transport (description: ${this.description}):
19
- - ssrc: ${e.ssrc}
20
- - Frames: ${e.frames}
21
- - FPS: ${e.framesPerSecond}
22
- - width: ${e.width}
23
- - height: ${e.height}`)})}async monitorIceNetwork(){if(!this.rtcStatsReports)return;let e=0;if(this.rtcStatsReports.forEach(t=>{"candidate-pair"===t.type&&"succeeded"===t.state&&(0===e?(e5["ice-network"]>=2&&console.log(`Network stats for transport (description: ${this.description}):
24
- - RTT (ms): ${1e3*t.currentRoundTripTime}
25
- - Packets sent: ${t.packetsSent}
26
- - Packets discarded on send: ${t.packetsDiscardedOnSend}`),this.recentRTTs.shift(),this.recentRTTs.push(t.currentRoundTripTime),this.allTimeAverageRTT=1e3*t.totalRoundTripTime/t.responsesReceived,e++):console.warn("Multiple candidate pairs succeeded for transport:",this.transport.id,"\nIgnoring."))}),0===e){e5["ice-network"]>=2&&console.warn("monitorIceNetwork","No candidate-pair found (yet) for transport:",this.transport.id);return}this.rttCollects++,this.rttCollects%15==0&&(this.checkIceNetwork(),this.rttCollects=0)}checkIceNetwork(){let e=Math.round(1e3*this.recentRTTs.reduce((e,t)=>e+t,0)/15),t=e<=400;t!==this.lastStateRttOk&&(console.warn(`Transport: ${this.transport.id}
27
- RTT state changed to:`,t),this.updateTransportState({isRttOk:t})),this.lastStateRttOk=t,this.listener?.onNetworkLog(this.transport,{rtt:e}),e5["ice-network"]>=1&&(console.log(`Last 3000ms average RTT: ${e}ms`,`
28
- All time average RTT: ${this.allTimeAverageRTT}ms`),t||console.warn("High RTT detected:",e))}async monitorOutboundRtp(){this.rtcStatsReports&&(this.rtcStatsReports.forEach(e=>{if("outbound-rtp"===e.type){e5["outbound-rtp"]>=2&&console.log(`Outbound RTP stats for transport (description: ${this.description}):
29
- - ssrc: ${e.ssrc}
30
- - kind: ${e.kind}
31
- - packets sent: ${e.packetsSent}
32
- - packets rtx: ${e.retransmittedPacketsSent}
33
- - retransmission %: ${100*e.retransmittedPacketsSent/e.packetsSent}
34
- - sli count: ${e.sliCount}
35
- - nack count: ${e.nackCount}`),this.mediaSourceStats[e.ssrc]||(this.mediaSourceStats[e.ssrc]={ssrc:e.ssrc,kind:e.kind,averagesRtxPercent:[],recentPacketsSent:Array(15).fill(0),recentPacketsRtx:Array(15).fill(0),lastStateRtxOK:!0});let t=this.mediaSourceStats[e.ssrc];t.recentPacketsSent.shift(),t.recentPacketsRtx.shift(),t.recentPacketsSent.push(e.packetsSent),t.recentPacketsRtx.push(e.retransmittedPacketsSent)}}),this.outboundRtpCollects++,this.outboundRtpCollects%15==0&&(Object.values(this.mediaSourceStats).forEach(e=>{this.checkOutboundRtp(e)}),this.outboundRtpCollects=0))}checkOutboundRtp(e){let t=e.recentPacketsSent[e.recentPacketsSent.length-1]-e.recentPacketsSent[0],r=e.recentPacketsRtx[e.recentPacketsRtx.length-1]-e.recentPacketsRtx[0],i=0===t?0:100*r/t,s=100*e.recentPacketsRtx[e.recentPacketsRtx.length-1]/e.recentPacketsSent[e.recentPacketsSent.length-1];e.averagesRtxPercent.push(i);let a=i<=5;a!==e.lastStateRtxOK&&(console.warn(`Transport: ${this.transport.id}
36
- [ssrc ${e.ssrc} ${e.kind||"?"}] RTX state changed to:`,a),this.updateTransportState({isRtxOk:a})),e.lastStateRtxOK=a,this.listener?.onNetworkLog(this.transport,{rtxPercent:i,kind:e.kind}),e5["outbound-rtp"]>=1&&(console.log(`[ssrc ${e.ssrc} ${e.kind||"?"}] For the last 3000ms:
37
- - packets sent: ${t}
38
- - packets rtx: ${r}
39
- - rtx %: ${Math.round(100*i)/100}`,`
40
- All time average rtx %:`,Math.round(100*s)/100),a||console.warn(`High ${e.kind||""} packets rtx % detected:`,Math.round(100*i)/100))}}const e9=async(e,t,r)=>{let i=await fetch(`${e}/public/streams/${t}/live/${r}`,{method:"GET",headers:{"Content-Type":"application/json"}});if(i.ok)return i.json();throw Error(` request failed ${i.status} `)},te=new eb("StreamerClient"),tt={WEBRTC_FAILED:"WRTC1",WEBRTC_RECOVER_ERROR:"WRTC2",WEBRTC_BAD_STATE_ERROR:"WRTC3",CREATE_TRANSPORT_FAILED:"TRANS1",CONSUME_ERROR:"CONS1",SOCKET_LOST:"SOCK1",USER_LIMIT:"USERLIMIT"},tr="getUserMedia error",ti={qvga:{width:{ideal:320},height:{ideal:240},qualityIndex:3},vga:{width:{ideal:640},height:{ideal:480},qualityIndex:2},hd:{width:{ideal:1280},height:{ideal:720},qualityIndex:1},background:{width:{ideal:560},height:{ideal:400},qualityIndex:2}};class ts extends CustomEvent{constructor(e,t){super(e,t)}}const ta=EventTarget,tn={background:void 0,fillColor:"#ffffff",type:"blur",blurLevel:10},to=new class extends ta{constructor(){super(),this.mediasoupTransport={},this.mediaPipeOption=tn,this.useVideoBackground=!1,this.waitingRoomAccess=!1,this.tracksHandler=new ez,this.pendingDeviceRequest={},this.joinOptions={},this.devicesList=[],this.plan=void 0,this.permissions=[],this.onAudioLevel=e2(e=>{let t=new ts("audioLevel",{cancelable:!0,bubbles:!0,detail:{audioLevel:e}});this.dispatchEvent(t)},1e3),navigator.mediaDevices.addEventListener("devicechange",()=>this.onDeviceChange()),this.config={streamApiURL:String("https://apistream.snapcall.io"),apiUrl:String("https://api.snapcall.io/v2"),streamerServer:String("wss://g.snapcall.io/stream"),streamerApi:String("https://g.snapcall.io/stream"),iceServers:[{urls:"turns:t.snapcall.io:443?transport=tcp,turns:t2.snapcall.io:443?transport=tcp,turn:t.snapcall.io:80?transport=tcp,turn:t2.snapcall.io:80?transport=tcp,turn:t.snapcall.io:80?transport=udp,turn:t2.snapcall.io:80?transport=udp".split(",")||[],username:"test",credential:"test"}]},this.peers=new Map,this.consumers=new Map,this.webcams=new Map,this.webcam={device:null,resolution:"hd"},this.webcamTrack=null,this.webcamZoom={available:!1,min:0,max:0},this.microphone={device:null,muted:!1},this.screenshare={},this.roomId="",this.companyId=0,this.peerId="",this.clientId=this.initClientId(),this.webcamProducer=null,this.customMessages=new Map,this.audioRenderers={},this.profile={}}getState(){let e=[];return this.peers.forEach((t,r)=>{let i={microphone:{enabled:!1,muted:!1},camera:{enabled:!1},screenshare:{enabled:!1},isAskingPermissions:this.tracksHandler.isAskingPermissions};t.producersData.forEach(e=>{"microphone"===e.deviceType?i.microphone.enabled=!0:"screen"===e.deviceType?i.screenshare.enabled=!0:"webcam"===e.deviceType&&(i.camera.enabled=!0)}),e.push({peerId:r,profile:t.profile,deviceState:i})}),{roomId:this.roomId,waitingRoomAccess:this.waitingRoomAccess,companyId:this.companyId,company:this.company,plan:this.plan,permissions:this.permissions,peerId:this.peerId,clientId:this.clientId,profile:this.profile,joinOptions:this.joinOptions,deviceState:this.getDevicesState(),peers:e}}onStartSpeak(){if(this.micProducer&&!this.micProducer.paused){let e=new ts("localStartSpeak",{cancelable:!0,bubbles:!0,detail:{}});this.dispatchEvent(e),this.protoo?.notify("startSpeak").catch(e=>console.error("failed to send startSpeak event",e))}}onStopSpeak(){if(this.micProducer&&!this.micProducer.paused){let e=new ts("localStopSpeak",{detail:{}});this.dispatchEvent(e),this.protoo?.notify("stopSpeak").catch(e=>console.error("failed to send stopSpeak event",e))}}onCriticalError(e){let t=new ts("criticalError",{detail:{code:e}});this.dispatchEvent(t)}async generateToken(e){let t=this.config.streamerApi,{token:r}=await fetch(`${t}/stream`,{method:"post",headers:{"Content-Type":"application/json"},body:JSON.stringify({bid:e})}).then(e=>e.json());return r}initClientId(){let e="stream-ui-client-id";try{let t=localStorage.getItem(e);if(t)return t;let r=b();return localStorage.setItem(e,r),r}catch(e){return console.warn(e),b()}}async init(e=this.roomId,t=this.joinOptions){let s,a;let n={};if(this.roomId=e,this.peerId=b(),this.joinOptions=t,!this.roomId)throw Error("Missing room ID");try{let r=new URLSearchParams;t.flowToken&&r.append("flowToken",t.flowToken),t.languageCode&&r.append("languageCode",t.languageCode);let{streamer_instance:i,plan:{permissions:a,name:o},flow:c,flow_v0:d,video_upload:l,company_id:p,company:h,defaultPublicPage:u}=await fetch(`${this.config.apiUrl}/streams/${e}/info?${r}`,{method:"get",headers:{"Content-Type":"application/json"}}).then(e=>{if(e.ok)return e.json();throw Error("Invalid room ID")});n.videoUpload=l,n.hideStreamInvite=h.hide_stream_invite,d&&(n.flowV0=d),c&&c.steps.length>0&&(t.recorder=!0,this.joinOptions.recorder=!0,n.flow=c),this.companyId=p,this.company=h,this.permissions=a,this.defaultPublicPage=u,this.plan=o;let m=new URLSearchParams({peerId:this.peerId,clientId:this.clientId,roomId:e,events:"0"});t.authKey&&m.append("authKey",t.authKey);let f=this.joinOptions.recorder?"recorder":"";s=`${this.config.streamerServer}/${i}/v2/${f}?${m}`}catch(t){console.error("init",t);let e=new ts("invalidRoom",{detail:{}});this.dispatchEvent(e)}if(!s)throw Error("Invalid socket URL");this.protooTransport=new i(s,{retry:{retries:0}}),this.protoo=new r(this.protooTransport);let o=!1,c=e=>{};return this.protoo.on("open",async()=>{this.joinOptions.apiKey&&await this.setAgentIdentity({apiKey:this.joinOptions.apiKey,email:this.joinOptions.email}).catch(e=>{te.error("onOpen","failed auth",e)}),o=!0,c()}),this.protoo.on("failed",()=>{a=Error("failure"),c(a),te.error("protoo.on","failed"),this.onCriticalError(tt.SOCKET_LOST)}),this.protoo.on("disconnected",()=>{te.error("protoo.on","disconnected"),this.onCriticalError(tt.SOCKET_LOST)}),this.protoo.on("close",()=>te.log("protoo.on","close :(")),this.protoo.on("notification",async e=>{if(te.log("notification",e),"error"===e.method)e.data?.reason==="reached user limit"&&this.onCriticalError(tt.USER_LIMIT);else if("newPeer"===e.method){let{id:t,profile:r,muted:i}=e.data;this.peers.set(t,{id:t,peerId:t,profile:r,muted:i,producersData:[]});let s=new ts("newPeer",{detail:{peerId:t,displayName:r.name,profile:r,muted:i}});this.dispatchEvent(s)}else if("newProducer"===e.method){let{peerId:t,producerId:r,deviceType:i,paused:s}=e.data;await this.consumeProducer({peerId:t,producerId:r,deviceType:i,paused:s})}else if("peerClosed"===e.method){let{peerId:t,relatedConsumers:r}=e.data;this.peers.delete(t),r.forEach(e=>{this.onConsumerClose({consumerId:e.id})});let i=new ts("peerClosed",{detail:{peerId:t}});this.dispatchEvent(i)}else if("consumerClosed"===e.method){let{consumerId:t}=e.data;this.onConsumerClose({consumerId:t})}else if("recordStopped"===e.method)this.dispatchEvent(new ts("recordStopped",{detail:e.data}));else if("displayName"===e.method){let{peerId:t,displayName:r}=e.data,i=new ts("displayName",{detail:{peerId:t,displayName:r,profile:{}}});this.dispatchEvent(i)}else if("profile"===e.method){let{peerId:t,profile:r}=e.data,i=new CustomEvent("profileUpdate",{detail:{peerId:t,profile:r}});this.dispatchEvent(i)}else if("requestDevice"===e.method){this.pendingDeviceRequest[e.data.requestId]=e.data;let t=new ts("requestDevice",{detail:e.data});this.dispatchEvent(t)}else if("startSpeak"===e.method){let t=new ts("peerStartSpeak",{detail:e.data});this.dispatchEvent(t)}else if("stopSpeak"===e.method){let t=new ts("peerStopSpeak",{detail:e.data});this.dispatchEvent(t)}else if("producerPaused"===e.method||"producerResumed"===e.method){let{peerId:t,producerId:r,deviceType:i}=e.data;if(e.data?.deviceType==="microphone"){let i=this.peers.get(t)?.producersData.find(e=>r===e.producerId);i&&(i.paused="producerPaused"===e.method)}let s=r;for(let[,e]of Array.from(this.consumers.entries()))if(e.mediaSoupConsumer.producerId===r){s=e.mediaSoupConsumer.id;break}let a=new ts("producerPaused"===e.method?"mediaPause":"mediaResume",{detail:{mediaId:s,peerId:t,deviceType:i,paused:"producerPaused"===e.method}});this.dispatchEvent(a)}else if("mute"===e.method){let{peerId:t,device:r}=e.data,i=new ts("mediaPause",{detail:{peerId:t,deviceType:r,paused:!0}});this.dispatchEvent(i)}else if("unmute"===e.method){let{peerId:t,device:r}=e.data,i=new ts("mediaResume",{detail:{peerId:t,deviceType:r,paused:!1}});this.dispatchEvent(i)}else if("requestAccessResult"===e.method){e.data.success&&this.onEnterRoom();let t=new ts(e.method,{detail:e.data});this.dispatchEvent(t)}else if("cancelAccessRequest"===e.method){let t=new ts(e.method,{detail:e.data});this.dispatchEvent(t)}else if("accessRequest"===e.method){let t=new ts(e.method,{detail:e.data});this.dispatchEvent(t)}else if("requestDeviceResult"===e.method){let t=new ts(e.method,{detail:e.data});this.dispatchEvent(t)}else if("terminateRoom"===e.method){this.release();let t=new ts(e.method,{detail:e.data});this.dispatchEvent(t)}else if("videoRecordingStarted"===e.method||"videoRecordingStopped"===e.method||"videoRecordingRequested"===e.method){let t=new ts(e.method,{detail:{}});this.dispatchEvent(t)}else if("customMessage"===e.method){let{messageId:t,chunk:r,chunkIndex:i,totalChunks:s}=e.data.event,a=this.customMessages.get(t);a?a.chunks.push({index:i,data:r}):this.customMessages.set(t,{chunks:[{index:i,data:r}],totalChunks:s});let n=this.customMessages.get(t);if(n&&n.totalChunks===n.chunks.length){let r=JSON.parse(n.chunks.sort((e,t)=>e.index-t.index).reduce((e,t)=>e+t.data,"")),i=new ts("customMessage",{detail:{...e.data,event:r}});this.dispatchEvent(i),this.customMessages.delete(t)}}}),await new Promise((e,t)=>{c=r=>{if(c=()=>{},r)return t(r);e()},o&&c(a)}),this.dispatchEvent(new ts("initialized",{detail:n})),n}closeWebrtcTransport(e){let t=this.mediasoupTransport[e];t&&(t.transport?.close(),t.transportMonitor?.disableAllMonitorings(),clearTimeout(t.disconnectTimeout),delete this.mediasoupTransport[e])}async getTransport(e,t){if(!this.streamerMediasoup||!this.protoo)throw Error("streamerMediasoup not initialized");let r=this.mediasoupTransport[t];if(r)return r&&r.transport?r.transport:r.createPromise;try{let i=this.streamerMediasoup.createTransport(this.protoo,t);r={disconnectTimeout:void 0,kind:e,createPromise:i},this.mediasoupTransport[t]=r,r.transport=await i,r.transport&&(this.listenWebRTCTransportStates(r),r.transportMonitor=new e7(r.transport,this,t),"send"===t&&(r.transportMonitor?.setMonitoringEnabled("ice-network",!0),r.transportMonitor?.setMonitoringEnabled("outbound-rtp",!0)))}catch(e){throw this.onCriticalError(tt.CREATE_TRANSPORT_FAILED),e}return r.transport}listenWebRTCTransportStates(e){if(console.log("listenWebRTCTransportStates",e),!e.transport)throw Error("can not listen states of undefined transport");e.transport.on("connectionstatechange",t=>{if(e.transport&&!e.transport.closed){if(te.log("recv connectionstatechange: ",t),"disconnected"===t)e.disconnectTimeout=setTimeout(()=>{te.log("listenWebRTCTransportStats",`trying to restart transport for ${e.kind}`),e.transport&&(te.warn("listenWebRTCTransportStats",`webrtc transport state disconnected for transport : ${e}
41
- restarting transport in 5 seconds...`),this.restartIce(e.transport))},5e3);else if("connected"===t)clearTimeout(e.disconnectTimeout);else if("failed"===t){let t=Error(`webRTC transport state failed for ${e.kind}`);te.error("listenWebRTCTransportStats","webrtc stat failed",t),this.onCriticalError(tt.WEBRTC_FAILED)}}})}onTransportManyDisconnections(e){te.warn("onTransportManyDisconnections",e.id)}onTransportStateChangeNetwork(e,t){te.warn("onTransportStateChangeNetwork","\nid:",e.id,"\nisOk:",t);let r=new ts("networkStateChange",{detail:{isOk:t}});this.dispatchEvent(r)}onNetworkLog(e,t){this.protoo?.notify("networkLog",{roomId:this.roomId,peerId:this.peerId,agentEmail:this.agentIdentity?.email,...t}).catch(e=>console.error("failed to send networkLog event",e))}async setAgentIdentity({apiKey:e,email:t}){if(e){this.joinOptions.apiKey=e,this.joinOptions.email=t;try{e&&t?this.agentIdentity=await this.fetchAgentInfo({apiKey:e,email:t}):e&&(this.agentIdentity=await this.fetchUserInfo({apiKey:e})),await this.protoo?.request("authenticate",{apiKey:e,email:t}),this.agentIdentity&&this.dispatchEvent(new ts("agentIdentity",{detail:{success:!0,email:this.agentIdentity.email,name:this.agentIdentity.name,avatarUrl:this.agentIdentity.settings?.avatar_url}}))}catch(e){te.warn("setAgentIdentity",e),this.dispatchEvent(new ts("agentIdentity",{detail:{success:!1}}))}}}acceptAccessRequest(e){if(!this.protoo)throw Error("not connected");return this.protoo.request("acceptAccessRequest",{id:e})}async setStep(e){if(!this.protoo)throw Error("not connected");this.stepToken=e,await this.protoo.request("step",{token:e})}denyAccessRequest(e){if(!this.protoo)throw Error("stream client not initiated");return this.protoo.request("denyAccessRequest",{id:e})}async requestRoomAccess(){if(!this.protoo)throw Error("stream client not initiated");await this.protoo.request("requestAccess"),this.waitingRoomAccess=!0}async joinRoom(){if(!this.protoo)throw Error("stream client not initiated");await this.protoo.request("join"),await this.onEnterRoom(),this.agentIdentity&&this.dispatchEvent(new ts("agentIdentity",{detail:{success:!0,email:this.agentIdentity.email,name:this.agentIdentity.name,avatarUrl:this.agentIdentity.settings?.avatar_url}}))}async getRoomPeers(){if(!this.protoo)throw Error("stream client not initiated");return await this.protoo.request("getRoomPeers")}async onEnterRoom(){if(!this.protoo)throw Error("stream client not initiated");this.streamerMediasoup=await eB.create(this.protoo,this.config);let{peers:e,videoRecordStarted:t,videoRecording:r}=await this.protoo.request("getRoomPeers");this.peers=new Map(e.map(e=>[e.id,{...e,peerId:e.id}])),this.dispatchEvent(new ts("enterRoom",{detail:{videoRecording:r,videoRecordStarted:t,peerId:this.peerId,peers:Array.from(this.peers.values()),plan:this.plan,permissions:this.permissions}})),te.log("joinRoom","peers",e),this.joinOptions.displayName&&await this.setDisplayName(this.joinOptions.displayName),this.joinOptions.profile&&await this.setProfile(this.joinOptions.profile),e.forEach(e=>{this.consumePeer({peerId:e.id,producersData:e.producersData})})}async joinRecorder(){if(!this.protoo)throw Error("stream client not initiated");this.streamerMediasoup=await eB.create(this.protoo,this.config),this.joinOptions.apiKey&&this.setAgentIdentity({apiKey:this.joinOptions.apiKey}),this.dispatchEvent(new ts("enterRoom",{detail:{videoRecording:{started:!1,requested:!1},videoRecordStarted:!1,peerId:this.peerId,peers:[],plan:this.plan,permissions:this.permissions}}))}async switchMicrophone(e){try{if(te.log("switchMicrophone","deviceId:",e),this.audioLevel?.release(),this.audioLevel=void 0,this.micProducer&&this.micProducer.track&&(this.audioMedia?.removeTrack("mic"),te.log("switchMicrophone","disabled previous track")),await this.processMediaPermissionsAndResolveRequests({audio:{deviceId:e,noiseSuppression:!0,echoCancellation:!0}}),!this.tracksHandler.audio.stream||!this.tracksHandler.audio.track)throw Error("switchMicrophone : no stream or audio track");let t=this.tracksHandler.audio.stream,r=this.tracksHandler.audio.track;this.audioLevel=new eS(t,this),this.audioLevel.analyse(),this.audioMedia=this.audioMedia||new eZ,this.audioMedia.addTrack("mic",r),await this.micProducer?.replaceTrack({track:r}),this.micProducer?.paused&&(r.enabled=!1),te.log("switchMicrophone","switched Microphone");let i=r.getSettings(),s=this.devicesList.find(e=>e.deviceId===i.deviceId);this.microphone.device=s||null}catch(e){te.error("switchMicrophone error",e),await this.closeMicrophoneProducer()}}async closeMicrophoneProducer(){let e=this.micProducer?.id;this.micProducer?.close(),this.micProducer=void 0;let t=new ts("microphoneMute",{detail:{}});this.dispatchEvent(t),this.protoo?.connected&&await this.protoo.request("closeProducer",{producerId:e})}async onDeviceChange(){te.log("onDeviceChange","detecting device change");let e=new ts("devicesListChange",{detail:{}});if(this.dispatchEvent(e),this.protoo&&!this.protoo.closed&&this.micProducer){let e=await navigator.mediaDevices.enumerateDevices(),t=e.filter(e=>"audioinput"===e.kind);if(0===t.length){te.warn("onDeviceChange","no audio input device"),await this.closeMicrophoneProducer();return}let r=t.find(e=>"default"===e.deviceId);if(r){let t=this.devicesList.filter(t=>!e.find(e=>e.deviceId===t.deviceId&&e.label===t.label));te.log("onDeviceChange","removed devices:",t);let i=e.filter(e=>!this.devicesList.find(t=>t.deviceId===e.deviceId&&t.label===e.label));te.log("onDeviceChange","new devices:",i),this.devicesList=e;let s=!!i.find(e=>"audioinput"===e.kind);if(0!==i.length&&!1===s){te.warn("onDeviceChange","no audio input change");return}if(te.log("onDeviceChange","detecting audio input change"),!this.audioInputDefaultDevice||this.audioInputDefaultDevice.label!==r.label){let e=new ts("defaultAudioDeviceChange",{detail:r});this.audioInputDefaultDevice=r,this.dispatchEvent(e),te.log("onDeviceChange",`
42
- new default audio input :
43
- deviceId: ${r.deviceId},
44
- label: ${r.label}`)}this.switchMicrophone("default")}else this.switchMicrophone()}}async enableMicrophone({deviceId:e}={}){await this._enableMicrophone({deviceId:e}).catch(e=>{throw this.audioLevel?.release(),this.audioLevel=void 0,this.audioMedia=void 0,this.microphone.device=null,this.microphone.muted=!0,this.closeMicrophoneProducer(),this.microphone.error=e,e.cause!==tr&&em(e),e}),this.microphone.error=void 0}async _enableMicrophone({deviceId:e}={}){if(this.micProducer&&!this.micProducer.closed)return;if(await this.processMediaPermissionsAndResolveRequests({audio:{deviceId:e,noiseSuppression:!0,echoCancellation:!0}}).catch(e=>{throw Error(e,{cause:tr})}),!this.tracksHandler.audio.stream||!this.tracksHandler.audio.track)throw Error("enableMicrophone : no stream or audio track");this.devicesList=await navigator.mediaDevices.enumerateDevices();let t=await this.getTransport("audio","send");this.audioLevel=new eS(this.tracksHandler.audio.stream,this),this.audioLevel.analyse(),this.audioMedia=this.audioMedia||new eZ;let r=this.tracksHandler.audio.track;this.audioMedia.addTrack("mic",r);let i=r.getSettings(),s=this.devicesList.find(e=>e.deviceId===i.deviceId&&"audioinput"===e.kind),a=await t.produce({track:this.audioMedia.getFinalTrack(),codecOptions:{opusStereo:!0,opusDtx:!0},stopTracks:!1,appData:{deviceType:"microphone"}});a.on("transportclose",()=>{te.log("enableMicrophone","micproducer transportclose")}),r.addEventListener("ended",()=>{te.log("enableMicrophone","track ended!")}),a.on("trackended",async()=>{te.log("enableMicrophone","microphone disconnected!"),void 0===navigator.mediaDevices.ondevicechange&&this.closeMicrophoneProducer()}),this.micProducer=a,this.microphone.device=s||null,this.microphone.muted=!1;let n=new ts("microphoneEnabled",{detail:{}});this.dispatchEvent(n)}muteMicrophone(){if(this.micProducer){this.onStopSpeak(),this.micProducer.pause(),this.audioMedia||te.error("muteMicrophone","audioMedia not initialized"),this.audioMedia?.setTrackEnabled("mic",!1),this.microphone.muted=!0,this.protoo?.notify("mute",{device:"microphone"}).catch(e=>console.error("failed to send mute event",e));let e=new ts("microphoneMute",{detail:{}});this.dispatchEvent(e)}}unMuteMicrophone(){if(this.micProducer){this.micProducer.resume(),this.audioMedia||te.error("muteMicrophone","audioMedia not initialized"),this.audioMedia?.setTrackEnabled("mic",!0),this.resolvePendingDeviceRequest("microphone",!0),this.microphone.muted=!1,this.protoo?.notify("unmute",{device:"microphone"}).catch(e=>console.error("failed to send unmute event",e));let e=new ts("microphoneUnmute",{detail:{}});this.dispatchEvent(e)}}async toggleMute(){return this.microphone.muted?(await this.unMuteMicrophone(),{muted:!1}):(await this.muteMicrophone(),{muted:!0})}release(){for(let e in te.log("release"),this.mediasoupTransport)this.closeWebrtcTransport(e);this.mediaPipe&&(this.mediaPipe.clean(),this.mediaPipe=void 0),this.audioMedia?.removeAll(),this.audioMedia=void 0,this.webcamTrack?.stop(),this.webcamTrack=null,this.protooTransport?.close(),this.protoo?.close(),this.micProducer?.close(),this.screenshareVideoProducer?.close(),this.webcamProducer?.close(),this.consumers.forEach(e=>{e.mediaSoupConsumer.close()}),this.consumers.clear(),this.audioLevel?.release(),this.audioLevel=void 0,this.tracksHandler.cleanAllStreams()}endCall(){this.release();let e=new ts("leaveRoom",{detail:{}});this.dispatchEvent(e);let t=new CustomEvent("snapcallEvent_callEnd");window.dispatchEvent(t)}terminateRoom(){if(!this.protoo)throw Error("stream client not initiated");this.protoo.request("terminateRoom")}async updateWebcams(){for(let e of(this.webcams=new Map,await navigator.mediaDevices.enumerateDevices()))"videoinput"===e.kind&&this.webcams.set(e.deviceId,e);0===this.webcams.size?this.webcam.device=null:this.webcam.device||(this.webcam.device=this.webcams.values().next().value||null);let e=new ts("webcamsUpdate",{detail:{numberOfAvailableWebcams:this.webcams.size}});this.dispatchEvent(e)}isVideoZoomAvailable(){return this.webcamZoom.available}resolvePendingDeviceRequest(e,t,r){Object.keys(this.pendingDeviceRequest).forEach(i=>{let s=this.pendingDeviceRequest[i];e===s.deviceType&&(delete this.pendingDeviceRequest[i],this.protoo?.notify("requestDeviceResult",{result:!!t,failure:r,...s}).catch(e=>console.error("failed to send requestDeviceResult event",e)))})}async processMediaPermissionsAndResolveRequests(e){let t;let r=new ts("requestAccessUpdate",{detail:{}});try{let t=this.tracksHandler.requestMediaPermissions(e);this.dispatchEvent(r),await t}catch(e){t=e}finally{let i=!!(this.tracksHandler.audio.stream&&this.tracksHandler.audio.track),s=!!(this.tracksHandler.video.stream&&this.tracksHandler.video.track);if(e.audio&&this.resolvePendingDeviceRequest("microphone",i,i?void 0:"no permission"),e.video&&this.resolvePendingDeviceRequest("webcam",s,s?void 0:"no permission"),this.dispatchEvent(r),t)throw t}}async handleGetUserMediaError(e,t){let r,i;try{r=await t}catch(e){i=e}finally{if(this.resolvePendingDeviceRequest(e,!!r,i?.name),i)throw i;return r}}async restartIce(e){if(te.log("restartIce",e.connectionState,e.closed),"disconnected"===e.connectionState&&!e.closed&&this.protoo)try{let t=await this.protoo.request("restartIce",{transportId:e.id});te.log("restartIce",t),await e.restartIce({iceParameters:t})}catch(e){this.onCriticalError(tt.WEBRTC_RECOVER_ERROR),te.log("restartIce","restartIceFailed",e)}}scaleVideoMediasConstraintsParameter(e){let t=ti.hd;2===e?t=ti.vga:e>2&&(t=ti.qvga),(!this.webcam.resolution||ti[this.webcam.resolution].qualityIndex>=t.qualityIndex)&&(te.log("scaleVideoMediasConstraintsParameter",`scaling video by ${e}`,t),this.webcamProducer?.track?.applyConstraints(t))}scaleVideoEncodingsParameter(){if(!this.useVideoBackground)try{let e=0;this.consumers.forEach(t=>{"video"===t.mediaSoupConsumer.kind&&e++}),this.screenshareVideoProducer&&!this.screenshareVideoProducer.closed&&e++;let t={scaleResolutionDownBy:1};if(e>=3&&(t={scaleResolutionDownBy:2}),e>=9&&(t={scaleResolutionDownBy:4}),!ek.Producer.prototype.setRtpEncodingParameters)return this.scaleVideoMediasConstraintsParameter(t.scaleResolutionDownBy);this.webcamProducer&&!this.webcamProducer.closed&&(te.log("scaleVideoEncodingsParameter",`scaling video by ${t.scaleResolutionDownBy}`),this.webcamProducer?.setRtpEncodingParameters?.(t).catch(e=>{te.error("scaleVideoEncodingsParameter","scaleResolutionDownBy not supported",e),this.scaleVideoMediasConstraintsParameter(t.scaleResolutionDownBy)}))}catch(e){te.error("scaleVideoEncodingsParameter","scaleVideo error",e)}}setVideoBackground(e){this.mediaPipe?.setOptions(e),this.mediaPipeOption=e}async initVideoBackground(){if(!this.permissions.find(e=>"virtual_background"===e))throw Error("feature not allowed");!0!==this.useVideoBackground&&(this.useVideoBackground=!0,this.webcamProducer&&!this.webcamProducer.closed&&await this.switchWebcam({}))}async stopVideoBackground(){!1!==this.useVideoBackground&&(this.useVideoBackground=!1,await this.mediaPipe?.clean(),this.mediaPipe=void 0,this.webcamProducer&&!this.webcamProducer.closed&&await this.switchWebcam({}))}async switchWebcam({device:e,resolution:t,rotate:r,frameRate:i,facingMode:s}){if(!this.webcam.device)throw Error("no webcam devices");let a={};if(r){if(this.webcam.facingMode)console.log("switch by facing mod"),this.webcam.facingMode="user"===this.webcam.facingMode?"environment":"user",a.facingMode=this.webcam.facingMode;else{let e=Array.from(this.webcams.keys()),t=this.webcam?.device?.deviceId||"unknown",r=e.indexOf(t);r=(r+1)%e.length;let i=this.webcams.get(e[r]);if(!i)throw Error(`webcam device at index ${r} was not found`);this.webcam.device=i,a.deviceId={ideal:this.webcam.device?.deviceId}}}else s?(this.webcam.facingMode=s,a.facingMode=this.webcam.facingMode):e&&(this.webcam.device=e,this.webcam.facingMode=void 0,a.deviceId={ideal:this.webcam.device.deviceId});this.webcam.resolution=t||this.webcam.resolution||"hd",this.webcam.framerate=i||this.webcam.framerate;let n=ti[t||this.webcam.resolution];this.useVideoBackground&&(n={width:{ideal:560},height:{ideal:400},qualityIndex:2}),await this.webcamProducer?.replaceTrack?.({track:null}).catch(e=>{te.error("switchCamera","clean track failed",e)}),await this.processMediaPermissionsAndResolveRequests({video:{...a,...n}});let o=this.tracksHandler.video.stream;if(!o)throw Error("switchWebcam : no stream");this.useVideoBackground&&(this.mediaPipe&&await this.mediaPipe.clean(),this.mediaPipe=new eJ(o,this.mediaPipeOption));let c=await this.mediaPipe?.createStream()||o;if(!await this.getTransport("video","send"))throw Error("video transport not found, cannot switch");let d=c.getVideoTracks()[0];this.webcamTrack=d,await this.webcamProducer?.replaceTrack?.({track:d});let l=await d.getCapabilities?.()||navigator.mediaDevices.getSupportedConstraints?.();this.webcamZoom={available:!!l?.zoom,min:l?.zoom?.min||0,max:l?.zoom?.max||0};let p=new ts("localVideoChange",{detail:{camera:this.getCurrentWebcam()}});this.dispatchEvent(p)}async enableVideo(e){await this._enableVideo(e).catch(e=>{throw this.disableVideo(),this.webcam.error=e,e.cause!==tr&&em(e),e}),this.webcam.error=void 0}async _enableVideo(e){te.log("enableVideo",e),await this.updateWebcams();let t={};if(e?.facingMode?(t.facingMode=e.facingMode,this.webcam.facingMode=e.facingMode):(e?.device&&(this.webcam.device=e.device),t.deviceId={ideal:this.webcam.device?.deviceId}),!this.webcam.device)throw Error("no webcam devices");this.webcam.resolution=e?.resolution||this.webcam.resolution||"hd",this.webcam.framerate=e?.frameRate||this.webcam.framerate;let r=ti[e?.resolution||this.webcam.resolution];if(this.useVideoBackground&&(r=ti.background),await this.processMediaPermissionsAndResolveRequests({video:{frameRate:e?.frameRate,...t,...r}}).catch(e=>{throw Error(e,{cause:tr})}),!this.tracksHandler.video.stream||!this.tracksHandler.video.track)throw Error("enableVideo : no stream or video track");let i=this.tracksHandler.video.track.getSettings();if(i.deviceId&&(this.webcam.device=this.webcams.get(i.deviceId)||null),e?.facingMode)try{if(!i.facingMode)throw Error("no facing mode")}catch{this.webcam.facingMode=void 0}this.useVideoBackground&&(this.mediaPipe&&await this.mediaPipe.clean(),this.mediaPipe=new eJ(this.tracksHandler.video.stream,this.mediaPipeOption));let s=await this.mediaPipe?.createStream()||this.tracksHandler.video.stream;await this.updateWebcams();let a=s.getVideoTracks()[0];a.enabled=!0,a.applyConstraints({frameRate:e?.frameRate,...t,...r}),this.tracksHandler.video.track.enabled=!0,this.webcamTrack=a;let n=await a.getCapabilities?.()||navigator.mediaDevices.getSupportedConstraints?.();if(this.webcamZoom={available:!!n?.zoom,min:n?.zoom?.min||0,max:n?.zoom?.max||0},n.focusMode)try{await a.applyConstraints({advanced:[{focusMode:"continuous"}]})}catch(e){console.error("Failed to set focus mode",e)}let o=await this.getTransport("video","send");this.webcamProducer=await o.produce({track:a,encodings:void 0,codecOptions:{videoGoogleStartBitrate:1e3},stopTracks:!1,appData:{deviceType:"webcam"}}),this.scaleVideoEncodingsParameter(),this.webcamProducer.on("transportclose",()=>{this.webcamProducer=null}),this.webcamProducer.on("trackended",()=>{this.disableVideo().catch(()=>{})});let c=new ts("localVideoAvailable",{detail:{camera:this.getCurrentWebcam()}});this.dispatchEvent(c)}async rotateVideo(){await this.switchWebcam({rotate:!0})}async zoomVideo(){if(!this.webcamZoom.available)throw Error("Webcam zoom is not available");if(!this.webcamTrack)throw Error("No webcam track available");this.webcamTrack.applyConstraints({advanced:[{zoom:2*this.webcamZoom.min}]})}async unzoomVideo(){if(!this.webcamZoom.available)throw Error("Webcam zoom is not available");if(!this.webcamTrack)throw Error("No webcam track available");this.webcamTrack.applyConstraints({advanced:[{zoom:this.webcamZoom.min}]})}async disableVideo(){if(!this.webcamProducer)return;this.webcamProducer.close(),this.protoo?.connected&&await this.protoo.request("closeProducer",{producerId:this.webcamProducer.id}),this.tracksHandler.cleanAllStreams({audio:!1,video:!0}),this.webcam.device=null,this.webcamProducer=null,this.webcamTrack=null,this.useVideoBackground&&(await this.mediaPipe?.clean(),this.mediaPipe=void 0);let e=new ts("localVideoUnavailable",{detail:{}});this.dispatchEvent(e)}async enableScreenshare(e={audioTransportOption:"classic"}){await this._enableScreenshare(e).catch(e=>{throw this.disableScreenshare(),this.screenshare.error=e,e.cause!==tr&&em(e),e}),this.screenshare.error=void 0}async _enableScreenshare(e={audioTransportOption:"classic"}){if(!this.permissions.find(e=>"screen_sharing"===e))throw Error("feature not allowed");if("mix"===e.audioTransportOption&&!this.micProducer)throw Error("microphone not activated and audio mix transport requested");let t=e.mediaStream;if(t||(t=await this.handleGetUserMediaError("screen",navigator.mediaDevices.getDisplayMedia({audio:"none"!==e.audioTransportOption,video:{displaySurface:"monitor",logicalSurface:!0,width:{max:1920},height:{max:1080},frameRate:{max:30}}})).catch(e=>{throw Error(e,{cause:tr})})),!t)throw Error("enableScreenshare : no stream");let r="screen",i=await this.getTransport("audio","send"),s=t.getAudioTracks()[0];if(s){if("classic"===e.audioTransportOption)this.screenshareAudioProducer=await this.streamerMediasoup?.produceAudio(i,s,{deviceType:r,share:!0}),this.screenshareVideoProducer?.on("transportclose",()=>{this.screenshareVideoProducer=void 0});else if("mix"===e.audioTransportOption){this.audioMedia=this.audioMedia||new eZ,this.audioMedia.addTrack("screen",s);let e=this.audioMedia.getFinalTrack();e&&this.micProducer&&this.micProducer.replaceTrack({track:e})}}let a=t.getVideoTracks()[0],n=await this.getTransport("video","send");this.screenshareVideoProducer=await this.streamerMediasoup?.produceVideo(n,a,{deviceType:r,share:!0}),this.screenshareVideoProducer?.on("transportclose",()=>{this.screenshareVideoProducer=void 0}),this.screenshareVideoProducer?.on("trackended",()=>{this.disableScreenshare().catch(()=>{})});let o=new ts("screenshareEnabled",{detail:{}});this.dispatchEvent(o)}async disableScreenshare(){this.screenshareVideoProducer&&(this.screenshareVideoProducer.close(),this.protoo?.connected&&await this.protoo.request("closeProducer",{producerId:this.screenshareVideoProducer.id}),this.screenshareVideoProducer=void 0),this.audioMedia?.removeTrack("screen"),this.screenshareAudioProducer&&(this.screenshareAudioProducer.close(),this.protoo?.connected&&await this.protoo.request("closeProducer",{producerId:this.screenshareAudioProducer.id}),this.screenshareAudioProducer=void 0);let e=new ts("screenshareDisabled",{detail:{}});this.dispatchEvent(e)}onConsumerClose({consumerId:e}){let t=this.consumers.get(e);if(t){let r=t.mediaSoupConsumer.producerId;this.peers.forEach(e=>{let t=e.producersData.findIndex(e=>e.producerId===r);-1!==t&&e.producersData.splice(t,1)}),t.mediaSoupConsumer.close(),this.consumers.delete(e),this.scaleVideoEncodingsParameter();let i=new ts("mediaStop",{detail:{mediaId:e,peerId:String(t.mediaSoupConsumer.appData.peerId),deviceType:t.deviceType,paused:!1}});"microphone"===t.deviceType&&this.deleteAudioRenderer(e),this.dispatchEvent(i)}}requestVideo({mediaId:e,element:t}){te.info("requestVideo");let r=this.consumers.get(e);if(r){let e=new MediaStream;e.onremovetrack=()=>te.log("requestVideo","Remove Track"),r.mediaSoupConsumer.track.onended=()=>te.log("requestVideo","Track Ended"),e.addTrack(r.mediaSoupConsumer.track),t.srcObject=e}else te.error("requestVideo",`Video consumer ${r} not found`)}async saveCapture(e){return e1(this.config.apiUrl,{token:this.roomId,base64Image:e,recordingGroup:this.recordingGroup})}async uploadAsset(e,t){return e3(this.config.apiUrl,{token:this.roomId,type:t,file:e,recordingGroup:this.recordingGroup})}createEvents(e){let t={peer_id:this.peerId,user_id:this.agentIdentity?.id,stepToken:this.stepToken},r=e.map(e=>{let r;return e.geolocation&&(r={errorCode:e.geolocation?.errorCode,accuracy:e.geolocation?.coords?.accuracy,altitude:e.geolocation?.coords?.altitude,altitudeAccuracy:e.geolocation?.coords?.altitudeAccuracy,heading:e.geolocation?.coords?.heading,latitude:e.geolocation?.coords?.latitude,longitude:e.geolocation?.coords?.longitude,speed:e.geolocation?.coords?.speed}),{...e,...t,geolocation:r}});return e6(this.config.apiUrl,this.roomId,r)}async captureVideo(e){if(this.permissions.find(e=>"instant_picture"===e)){let t;if(e)t=await eT(e);else if(this.webcamProducer&&this.webcamProducer.track)t=await eC(this.webcamProducer.track);else throw Error("no video to capture");return t}throw Error("feature not allowed")}requestLocalVideo(e){if(te.info("requestLocalVideo"),this.webcamProducer){let t=new MediaStream;t.addTrack(this.webcamProducer.track),e.srcObject=t;let r=this.webcamProducer.track?.getSettings();return{facingMode:r?.facingMode||"user"}}throw Error("webcam producer not available yet")}requestLocalScreenshare(e){if(this.screenshareVideoProducer){let t=new MediaStream;t.addTrack(this.screenshareVideoProducer.track),e.srcObject=t}else te.log("requestLocalScreenshare","screenshare producer not available yet")}consumePeer({peerId:e,producersData:t}){t.forEach(t=>{this.consumeProducer({peerId:e,producerId:t.producerId,deviceType:t.deviceType,paused:t.paused})})}async consumeProducer({peerId:e,producerId:t,deviceType:r,paused:i}){let s;let a=this.peers.get(e);try{let n=await this.getTransport("microphone"===r?"audio":"video","recv"),o=await this.protoo?.request("consume",{peerId:e,producerId:t,transportId:n.id,rtpCapabilities:this.streamerMediasoup.getRtpCapabilities()});a&&a.producersData.push({producerId:t,deviceType:r,paused:i});let{producerId:c,id:d,kind:l,rtpParameters:p,appData:h}=o;te.log("consumeProducer","Data: ",o),s=await n.consume({id:d,producerId:c,kind:l,rtpParameters:p,appData:{...h,peerId:e}}),te.log("transport",n),te.log("consumer",s),this.consumers.set(s.id,{mediaSoupConsumer:s,deviceType:r})}catch(e){this.onCriticalError(tt.CONSUME_ERROR),te.error("consumeProducer","newConsumer request failed",e)}try{this.scaleVideoEncodingsParameter()}catch(e){console.error("scale error",e)}if(s){let t=new ts("mediaStart",{detail:{peerId:e,mediaId:s.id,deviceType:r,paused:!!a&&a.muted}});this.dispatchEvent(t)}if(s?.kind==="audio")try{let e=this.createAudioRenderer(s.id),t=new MediaStream;t.addTrack(s.track),e.setSource(t),e.play()}catch(e){console.error("audio renderer error",e)}if(s?.kind==="video")try{await this.protoo?.request("resumeConsumer",{consumerId:s.id})}catch(e){console.error("resume consumer error",e)}}async setDisplayName(e){await this.setProfile({name:e});let t=new ts("selfDisplayName",{detail:{peerId:this.peerId,displayName:this.profile?.name,profile:this.profile}});this.dispatchEvent(t)}async setProfile(e){let t=await this.protoo?.request("setProfile",e);this.joinOptions.profile=e,this.profile={...t};let r=new ts("selfProfileUpdate",{detail:{peerId:this.peerId,profile:this.profile}});this.dispatchEvent(r)}async requestPeerDevice(e,t){if(!this.permissions.find(e=>"request_input"===e))throw Error("feature not allowed");return this.protoo?.request("requestPeerDevice",{remotePeerId:e,deviceType:t})}denyDeviceRequest(e){this.resolvePendingDeviceRequest(e,!1,"user denied permission")}getConsumers(){return this.consumers}getDevicesState(){let e=!!this.micProducer&&!this.micProducer.closed,t=!!this.webcamProducer&&!this.webcamProducer.closed,r=!!this.screenshareVideoProducer&&!this.screenshareVideoProducer.closed;return{microphone:{enabled:e,muted:this.microphone.muted,device:this.microphone.device,error:this.microphone.error},camera:{enabled:t,device:this.webcam.device,error:this.webcam.error},screenshare:{enabled:r,error:this.screenshare.error},isAskingPermissions:this.tracksHandler.isAskingPermissions}}getCustomMessageEventChunks(e){let t=JSON.stringify(e),r=[];for(let e=0;e<t.length;e+=9e4)r.push(t.substring(e,e+9e4));return r}async sendCustomMessageToAll(e){let t=b(),r=this.getCustomMessageEventChunks(e),i=r.map((i,s)=>this.protoo?.notify("customMessageToAllPeers",{messageId:t,chunkIndex:s,chunk:i,totalChunks:r.length}).catch(t=>console.error("failed to send customMessageToAll event",t,e)));await Promise.all(i)}async sendCustomMessage(e,t){let r=b(),i=this.getCustomMessageEventChunks(t),s=i.map((s,a)=>this.protoo?.notify("customMessageToPeer",{peerId:e,event:{messageId:r,chunkIndex:a,chunk:s,totalChunks:i.length}}).catch(e=>console.error("failed to send customMessageToPeer event",e,t)));await Promise.all(s)}async listAudioDevices(){return(await navigator.mediaDevices.enumerateDevices()).filter(e=>"audioinput"===e.kind||"audiooutput"===e.kind)}async listVideoDevices(){return(await navigator.mediaDevices.enumerateDevices()).filter(e=>"videoinput"===e.kind)}isListDevicesSupported(){return!!navigator.mediaDevices?.enumerateDevices}getCurrentWebcam(){return this.webcam}getCurrentMicrophoneId(){return this.audioMedia?.getSetting("mic").deviceId||this.micProducer?.track?.getSettings().deviceId}getCurrentSpeakerId(){let e=Object.keys(this.audioRenderers),t=this.audioRenderers[e[0]];if(t){let e=t.getSink();if(e)return e}return"default"}async setWebcamResolution(e){if(this.webcam.device)await this.switchWebcam({resolution:e});else{this.webcam.resolution=e;let t=new ts("localVideoChange",{detail:{camera:this.getCurrentWebcam()}});this.dispatchEvent(t)}}createAudioRenderer(e){let t=new eP({consumerId:e});return this.audioRenderers[e]=t,t}deleteAudioRenderer(e){this.audioRenderers[e]?.destroy(),delete this.audioRenderers[e]}async playAudioRenderer(e){await this.audioRenderers[e]?.play()}async setAudioSink(e){let t=Object.keys(this.audioRenderers).map(t=>this.audioRenderers[t].setSink(e).catch(e=>te.warn("setAudioSink","Failed to setSinkId on renderer (consumerId: %s): ",t,e)));await Promise.allSettled(t)}dispatchEvent(e){let t=super.dispatchEvent(e);return window.dispatchEvent(e),t}async fetchAgentInfo({apiKey:e,email:t}){let r=this.config.apiUrl;return await fetch(`${r}/agents/${t}`,{method:"get",headers:{Authorization:`Bearer ${e}`}}).then(e=>{if(e.ok)return e.json();throw Error("Invalid agent info")})}async fetchUserInfo({apiKey:e}){let t=this.config.apiUrl;return await fetch(`${t}/users/me`,{method:"get",headers:{Authorization:`Bearer ${e}`}}).then(e=>{if(e.ok)return e.json();throw Error("Invalid user info")})}setConfig(e){this.config={...this.config,...e}}getPermissions(){return this.permissions}async frameUploadedToGroup(e){let{recordingGroup:t}=await fetch(`${this.config.apiUrl}/public/streams/${this.roomId}/live/frames`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...e,recordingGroup:this.recordingGroup})}).then(e=>{if(e.ok)return e.json();throw Error("Invalid agent info")});return t}async readRecordingGroupAnswer(){return this.recordingGroup?e9(this.config.apiUrl,this.roomId,this.recordingGroup):{status:"error"}}async createRecordingGroup({type:e,language:t}){let{recordingGroup:r}=await fetch(`${this.config.apiUrl}/public/streams/${this.roomId}/live/recording-group`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({type:e,language:t,stepToken:this.stepToken})}).then(e=>{if(e.ok)return e.json();throw Error("Invalid agent info")});return this.recordingGroup=r,r}async doLiveAnalysis(){try{if(this.recordingGroup){let e=await this.captureVideo(),t=await this.saveCapture(e);console.log(t);let r=await this.frameUploadedToGroup({filename:t.filename});console.log("[doLiveAnalysis] image description :",r)}}catch(e){console.error("frames capture failed",e)}}async startRecord(){if(this.micProducer?.rtpSender?.transport?.iceTransport.state!=="connected")try{this.onCriticalError(tt.WEBRTC_BAD_STATE_ERROR);let e=await this.micProducer?.getStats(),t={};e?.forEach((e,r)=>{t[r]=e}),function(e,t){let r="string"==typeof t?t:void 0,i="string"!=typeof t?{captureContext:t}:void 0;el().captureMessage(e,r,i)}("Start record in bad state",{contexts:{data:{producerState:this.micProducer?.rtpSender?.transport?.iceTransport?.state,dump:JSON.stringify(t)}}})}catch(e){em(e)}await this.protoo?.request("startRecord",{recordingGroup:this.recordingGroup,iceTransportState:this.micProducer?.rtpSender?.transport?.iceTransport.state}),this.recordingGroup&&(this.doLiveAnalysis().catch(console.log),this.liveInterval=window.setInterval(()=>{this.doLiveAnalysis().catch(console.log)},2e3))}async stopRecord(){clearInterval(this.liveInterval),await this.protoo?.request("stopRecord")}async getPublicPage(e){return(await fetch(`${this.config.apiUrl}/public/public-pages/${e}`,{method:"get",headers:{"Content-Type":"application/json"}})).json()}getWaitingRequests(){if(!this.protoo)throw Error("not connected");return this.protoo?.request("waitingRequests")}readAsset(e){return eX(this.config.apiUrl,this.roomId,e)}deleteAsset(e){return eY(this.config.apiUrl,this.roomId,e)}};