@snapcall/stream-ui 1.41.4 → 1.42.1-beta.1

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.
@@ -0,0 +1,136 @@
1
+ let e,t;var r=require("process"),i=require("events"),s=require("buffer");function a(e,t,r,i){Object.defineProperty(e,t,{get:r,set:i,enumerable:!0,configurable:!0})}function n(e){return e&&e.__esModule?e.default:e}require("./timer.ed477f04.js");var o=globalThis,c={},d={},l=o.parcelRequire94c2;null==l&&((l=function(e){if(e in c)return c[e].exports;if(e in d){var t=d[e];delete d[e];var r={id:e,exports:{}};return c[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){d[e]=t},o.parcelRequire94c2=l);var p=l.register;p("1JjHr",function(e,t){let i;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")||t.storage.getItem("DEBUG")}catch(e){}return!e&&void 0!==r&&"env"in r&&(e=void 0),e},t.useColors=function(){let e;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&&(e=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(e[1],10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/))},t.storage=function(){try{return localStorage}catch(e){}}(),i=!1,t.destroy=()=>{i||(i=!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=l("9ovFa")(t);let{formatters:s}=e.exports;s.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}}),p("9ovFa",function(e,t){e.exports=function(e){function t(e){let i,s,a,n=null;function o(...e){if(!o.enabled)return;let r=Number(new Date);o.diff=r-(i||r),o.prev=i,o.curr=r,i=r,e[0]=t.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");let s=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,(r,i)=>{if("%%"===r)return"%";s++;let a=t.formatters[i];if("function"==typeof a){let t=e[s];r=a.call(o,t),e.splice(s,1),s--}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,t){let r=0,i=0,s=-1,a=0;for(;r<e.length;)if(i<t.length&&(t[i]===e[r]||"*"===t[i]))"*"===t[i]?(s=i,a=r):r++,i++;else{if(-1===s)return!1;i=s+1,r=++a}for(;i<t.length&&"*"===t[i];)i++;return i===t.length}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,...t.skips.map(e=>"-"+e)].join(",");return t.enable(""),e},t.enable=function(e){for(let r of(t.save(e),t.namespaces=e,t.names=[],t.skips=[],("string"==typeof e?e:"").trim().replace(/\s+/g,",").split(",").filter(Boolean)))"-"===r[0]?t.skips.push(r.slice(1)):t.names.push(r)},t.enabled=function(e){for(let r of t.skips)if(i(e,r))return!1;for(let r of t.names)if(i(e,r))return!0;return!1},t.humanize=l("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}}),p("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,n,o=typeof e;if("string"===o&&e.length>0){var c=e;if(!((c=String(c)).length>100)){var d=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(c);if(d){var l=parseFloat(d[1]);switch((d[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return 315576e5*l;case"weeks":case"week":case"w":return 6048e5*l;case"days":case"day":case"d":return 864e5*l;case"hours":case"hour":case"hrs":case"hr":case"h":return 36e5*l;case"minutes":case"minute":case"mins":case"min":case"m":return 6e4*l;case"seconds":case"second":case"secs":case"sec":case"s":return 1e3*l;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return l;default:break}}}return}if("number"===o&&isFinite(e)){return t.long?(s=Math.abs(i=e))>=864e5?r(i,s,864e5,"day"):s>=36e5?r(i,s,36e5,"hour"):s>=6e4?r(i,s,6e4,"minute"):s>=1e3?r(i,s,1e3,"second"):i+" ms":(n=Math.abs(a=e))>=864e5?Math.round(a/864e5)+"d":n>=36e5?Math.round(a/36e5)+"h":n>=6e4?Math.round(a/6e4)+"m":n>=1e3?Math.round(a/1e3)+"s":a+"ms"}throw Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}}),p("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__}}()}),p("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.35","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.63","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"}')}),p("aHEzW",function(e,t){var r=l("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){var r=Math.round((t.randomize?Math.random()+1:1)*t.minTimeout*Math.pow(t.factor,e));return Math.min(r,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}}}),p("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;else 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}}),p("8cmuS",function(e,t){Object.defineProperty(e.exports,"__esModule",{value:!0})}),p("lY6O0",function(e,t){Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.EnhancedEventEmitter=void 0;var r=l("22RI7");let i=new(l("7Wufc")).Logger("EnhancedEventEmitter");class s extends r.EventEmitter{constructor(){super(),this.setMaxListeners(1/0)}close(){super.removeAllListeners()}emit(e,...t){return super.emit(e,...t)}safeEmit(e,...t){try{return super.emit(e,...t)}catch(t){i.error("safeEmit() | event listener threw an error [eventName:%s]:%o",e,t);try{super.emit("listenererror",e,t)}catch(e){}return!!super.listenerCount(e)}}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=s}),p("22RI7",function(e,t){var r,i="object"==typeof Reflect?Reflect:null,s=i&&"function"==typeof i.apply?i.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)};r=i&&"function"==typeof i.ownKeys?i.ownKeys:Object.getOwnPropertySymbols?function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:function(e){return Object.getOwnPropertyNames(e)};var a=Number.isNaN||function(e){return e!=e};function n(){n.init.call(this)}e.exports=n,e.exports.once=function(e,t){return new Promise(function(r,i){var s,a,n;function o(r){e.removeListener(t,c),i(r)}function c(){"function"==typeof e.removeListener&&e.removeListener("error",o),r([].slice.call(arguments))}g(e,t,c,{once:!0}),"error"!==t&&(s=e,a=o,n={once:!0},"function"==typeof s.on&&g(s,"error",a,n))})},n.EventEmitter=n,n.prototype._events=void 0,n.prototype._eventsCount=0,n.prototype._maxListeners=void 0;var o=10;function c(e){if("function"!=typeof e)throw TypeError('The "listener" argument must be of type Function. Received type '+typeof e)}function d(e){return void 0===e._maxListeners?n.defaultMaxListeners:e._maxListeners}function l(e,t,r,i){if(c(r),void 0===(a=e._events)?(a=e._events=Object.create(null),e._eventsCount=0):(void 0!==a.newListener&&(e.emit("newListener",t,r.listener?r.listener:r),a=e._events),n=a[t]),void 0===n)n=a[t]=r,++e._eventsCount;else if("function"==typeof n?n=a[t]=i?[r,n]:[n,r]:i?n.unshift(r):n.push(r),(s=d(e))>0&&n.length>s&&!n.warned){n.warned=!0;var s,a,n,o=Error("Possible EventEmitter memory leak detected. "+n.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");o.name="MaxListenersExceededWarning",o.emitter=e,o.type=t,o.count=n.length,console&&console.warn&&console.warn(o)}return e}function p(){if(!this.fired)return(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0==arguments.length)?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function h(e,t,r){var i={fired:!1,wrapFn:void 0,target:e,type:t,listener:r},s=p.bind(i);return s.listener=r,i.wrapFn=s,s}function u(e,t,r){var i=e._events;if(void 0===i)return[];var s=i[t];return void 0===s?[]:"function"==typeof s?r?[s.listener||s]:[s]:r?function(e){for(var t=Array(e.length),r=0;r<t.length;++r)t[r]=e[r].listener||e[r];return t}(s):f(s,s.length)}function m(e){var t=this._events;if(void 0!==t){var r=t[e];if("function"==typeof r)return 1;if(void 0!==r)return r.length}return 0}function f(e,t){for(var r=Array(t),i=0;i<t;++i)r[i]=e[i];return r}function g(e,t,r,i){if("function"==typeof e.on)i.once?e.once(t,r):e.on(t,r);else if("function"==typeof e.addEventListener)e.addEventListener(t,function s(a){i.once&&e.removeEventListener(t,s),r(a)});else throw TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof e)}Object.defineProperty(n,"defaultMaxListeners",{enumerable:!0,get:function(){return o},set:function(e){if("number"!=typeof e||e<0||a(e))throw RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+e+".");o=e}}),n.init=function(){(void 0===this._events||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0},n.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||a(e))throw RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this},n.prototype.getMaxListeners=function(){return d(this)},n.prototype.emit=function(e){for(var t=[],r=1;r<arguments.length;r++)t.push(arguments[r]);var i="error"===e,a=this._events;if(void 0!==a)i=i&&void 0===a.error;else if(!i)return!1;if(i){if(t.length>0&&(n=t[0]),n instanceof Error)throw n;var n,o=Error("Unhandled error."+(n?" ("+n.message+")":""));throw o.context=n,o}var c=a[e];if(void 0===c)return!1;if("function"==typeof c)s(c,this,t);else for(var d=c.length,l=f(c,d),r=0;r<d;++r)s(l[r],this,t);return!0},n.prototype.addListener=function(e,t){return l(this,e,t,!1)},n.prototype.on=n.prototype.addListener,n.prototype.prependListener=function(e,t){return l(this,e,t,!0)},n.prototype.once=function(e,t){return c(t),this.on(e,h(this,e,t)),this},n.prototype.prependOnceListener=function(e,t){return c(t),this.prependListener(e,h(this,e,t)),this},n.prototype.removeListener=function(e,t){var r,i,s,a,n;if(c(t),void 0===(i=this._events)||void 0===(r=i[e]))return this;if(r===t||r.listener===t)0==--this._eventsCount?this._events=Object.create(null):(delete i[e],i.removeListener&&this.emit("removeListener",e,r.listener||t));else if("function"!=typeof r){for(s=-1,a=r.length-1;a>=0;a--)if(r[a]===t||r[a].listener===t){n=r[a].listener,s=a;break}if(s<0)return this;0===s?r.shift():function(e,t){for(;t+1<e.length;t++)e[t]=e[t+1];e.pop()}(r,s),1===r.length&&(i[e]=r[0]),void 0!==i.removeListener&&this.emit("removeListener",e,n||t)}return this},n.prototype.off=n.prototype.removeListener,n.prototype.removeAllListeners=function(e){var t,r,i;if(void 0===(r=this._events))return this;if(void 0===r.removeListener)return 0==arguments.length?(this._events=Object.create(null),this._eventsCount=0):void 0!==r[e]&&(0==--this._eventsCount?this._events=Object.create(null):delete r[e]),this;if(0==arguments.length){var s,a=Object.keys(r);for(i=0;i<a.length;++i)"removeListener"!==(s=a[i])&&this.removeAllListeners(s);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if("function"==typeof(t=r[e]))this.removeListener(e,t);else if(void 0!==t)for(i=t.length-1;i>=0;i--)this.removeListener(e,t[i]);return this},n.prototype.listeners=function(e){return u(this,e,!0)},n.prototype.rawListeners=function(e){return u(this,e,!1)},n.listenerCount=function(e,t){return"function"==typeof e.listenerCount?e.listenerCount(t):m.call(e,t)},n.prototype.listenerCount=m,n.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]}}),p("7Wufc",function(e,t){Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.Logger=void 0;var r=l("1JjHr");let i="mediasoup-client";e.exports.Logger=class{_debug;_warn;_error;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}}}),p("kIl0y",function(e,t){Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.validateAndNormalizeRtpCapabilities=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 r of(e.codecs||(e.codecs=[]),e.codecs)){var t=r;let e=RegExp("^(audio|video)/(.+)","i");if("object"!=typeof t)throw TypeError("codec is not an object");if(!t.mimeType||"string"!=typeof t.mimeType)throw TypeError("missing codec.mimeType");let i=e.exec(t.mimeType);if(!i)throw TypeError("invalid codec.mimeType");if(t.kind=i[1].toLowerCase(),"number"!=typeof t.preferredPayloadType)throw TypeError("missing codec.preferredPayloadType");if("number"!=typeof t.clockRate)throw TypeError("missing codec.clockRate");for(let e of("audio"===t.kind?"number"!=typeof t.channels&&(t.channels=1):delete t.channels,t.parameters&&"object"==typeof t.parameters||(t.parameters={}),Object.keys(t.parameters))){let r=t.parameters[e];if(void 0===r&&(t.parameters[e]="",r=""),"string"!=typeof r&&"number"!=typeof r)throw TypeError(`invalid codec parameter [key:${e}s, value:${r}]`);if("apt"===e&&"number"!=typeof r)throw TypeError("invalid codec apt parameter")}for(let e of(t.rtcpFeedback&&Array.isArray(t.rtcpFeedback)||(t.rtcpFeedback=[]),t.rtcpFeedback))a(e)}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)){var r=t;if("object"!=typeof r)throw TypeError("ext is not an object");if("audio"!==r.kind&&"video"!==r.kind)throw TypeError("invalid ext.kind");if(!r.uri||"string"!=typeof r.uri)throw TypeError("missing ext.uri");if("number"!=typeof r.preferredId)throw TypeError("missing ext.preferredId");if(r.preferredEncrypt&&"boolean"!=typeof r.preferredEncrypt)throw TypeError("invalid ext.preferredEncrypt");if(r.preferredEncrypt||(r.preferredEncrypt=!1),r.direction&&"string"!=typeof r.direction)throw TypeError("invalid ext.direction");r.direction||(r.direction="sendrecv")}},e.exports.validateAndNormalizeRtpParameters=s,e.exports.validateAndNormalizeSctpStreamParameters=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");var t=e.numStreams;if("object"!=typeof t)throw TypeError("numStreams is not an object");if("number"!=typeof t.OS)throw TypeError("missing numStreams.OS");if("number"!=typeof t.MIS)throw TypeError("missing numStreams.MIS")},e.exports.getExtendedRtpCapabilities=function(e,t,r){let i={codecs:[],headerExtensions:[]};if(r)for(let r of e.codecs??[]){if(n(r))continue;let e=(t.codecs??[]).find(e=>o(e,r,{strict:!0,modify:!0}));if(!e)continue;let s={kind:r.kind,mimeType:r.mimeType,clockRate:r.clockRate,channels:r.channels,localPayloadType:r.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:e.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:r.parameters??{},remoteParameters:e.parameters??{},rtcpFeedback:c(r,e)};i.codecs.push(s)}else for(let r of t.codecs??[]){if(n(r))continue;let t=(e.codecs??[]).find(e=>o(e,r,{strict:!0,modify:!0}));if(!t)continue;let s={kind:t.kind,mimeType:t.mimeType,clockRate:t.clockRate,channels:t.channels,localPayloadType:t.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:r.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:t.parameters??{},remoteParameters:r.parameters??{},rtcpFeedback:c(t,r)};i.codecs.push(s)}for(let r of i.codecs){let i=e.codecs.find(e=>n(e)&&e.parameters?.apt===r.localPayloadType),s=t.codecs.find(e=>n(e)&&e.parameters?.apt===r.remotePayloadType);i&&s&&(r.localRtxPayloadType=i.preferredPayloadType,r.remoteRtxPayloadType=s.preferredPayloadType)}for(let r of t.headerExtensions){let t=e.headerExtensions.find(e=>{var t,i;return t=e,i=r,(!t.kind||!i.kind||t.kind===i.kind)&&t.uri===i.uri});if(!t)continue;let s={kind:r.kind,uri:r.uri,sendId:t.preferredId,recvId:r.preferredId,encrypt:t.preferredEncrypt??!1,direction:"sendrecv"};switch(r.direction){case"sendrecv":s.direction="sendrecv";break;case"recvonly":s.direction="sendonly";break;case"sendonly":s.direction="recvonly";break;case"inactive":s.direction="inactive"}i.headerExtensions.push(s)}return i},e.exports.getRecvRtpCapabilities=function(e){let t={codecs:[],headerExtensions:[]};for(let r of e.codecs){let e={kind:r.kind,mimeType:r.mimeType,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={kind:r.kind,mimeType:`${r.kind}/rtx`,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??!1,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(o(e[i],t,{strict:!0})){r.push(e[i]),n(e[i+1])&&r.push(e[i+1]);break}if(0===r.length)throw TypeError("no matching codec found")}else r.push(e[0]),n(e[1])&&r.push(e[1]);return r},e.exports.generateProbatorRtpParameters=function(e){s(e=i.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(s(e),0===e.codecs.length)return!1;let r=e.codecs[0];return(t.codecs??[]).some(e=>e.preferredPayloadType===r.payloadType)};var r=l("7PXZ5"),i=l("2fqxq");function s(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 r of e.codecs){var t=r;let e=RegExp("^(audio|video)/(.+)","i");if("object"!=typeof t)throw TypeError("codec is not an object");if(!t.mimeType||"string"!=typeof t.mimeType)throw TypeError("missing codec.mimeType");let i=e.exec(t.mimeType);if(!i)throw TypeError("invalid codec.mimeType");if("number"!=typeof t.payloadType)throw TypeError("missing codec.payloadType");if("number"!=typeof t.clockRate)throw TypeError("missing codec.clockRate");for(let e of("audio"===i[1].toLowerCase()?"number"!=typeof t.channels&&(t.channels=1):delete t.channels,t.parameters&&"object"==typeof t.parameters||(t.parameters={}),Object.keys(t.parameters))){let r=t.parameters[e];if(void 0===r&&(t.parameters[e]="",r=""),"string"!=typeof r&&"number"!=typeof r)throw TypeError(`invalid codec parameter [key:${e}s, value:${r}]`);if("apt"===e&&"number"!=typeof r)throw TypeError("invalid codec apt parameter")}for(let e of(t.rtcpFeedback&&Array.isArray(t.rtcpFeedback)||(t.rtcpFeedback=[]),t.rtcpFeedback))a(e)}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)){var r=t;if("object"!=typeof r)throw TypeError("ext is not an object");if(!r.uri||"string"!=typeof r.uri)throw TypeError("missing ext.uri");if("number"!=typeof r.id)throw TypeError("missing ext.id");if(r.encrypt&&"boolean"!=typeof r.encrypt)throw TypeError("invalid ext.encrypt");for(let e of(r.encrypt||(r.encrypt=!1),r.parameters&&"object"==typeof r.parameters||(r.parameters={}),Object.keys(r.parameters))){let t=r.parameters[e];if(void 0===t&&(r.parameters[e]="",t=""),"string"!=typeof t&&"number"!=typeof t)throw TypeError("invalid header extension parameter")}}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)){var i=t;if("object"!=typeof i)throw TypeError("encoding is not an object");if(i.ssrc&&"number"!=typeof i.ssrc)throw TypeError("invalid encoding.ssrc");if(i.rid&&"string"!=typeof i.rid)throw TypeError("invalid encoding.rid");if(i.rtx&&"object"!=typeof i.rtx)throw TypeError("invalid encoding.rtx");if(i.rtx&&"number"!=typeof i.rtx.ssrc)throw TypeError("missing encoding.rtx.ssrc");if(i.dtx&&"boolean"==typeof i.dtx||(i.dtx=!1),i.scalabilityMode&&"string"!=typeof i.scalabilityMode)throw TypeError("invalid encoding.scalabilityMode")}if(e.rtcp&&"object"!=typeof e.rtcp)throw TypeError("params.rtcp is not an object");e.rtcp||(e.rtcp={});var s=e.rtcp;if("object"!=typeof s)throw TypeError("rtcp is not an object");if(s.cname&&"string"!=typeof s.cname)throw TypeError("invalid rtcp.cname");s.reducedSize&&"boolean"==typeof s.reducedSize||(s.reducedSize=!0)}function a(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 n(e){return!!e&&/.+\/rtx$/i.test(e.mimeType)}function o(e,t,{strict:i=!1,modify:s=!1}={}){let a=e.mimeType.toLowerCase();if(a!==t.mimeType.toLowerCase()||e.clockRate!==t.clockRate||e.channels!==t.channels)return!1;switch(a){case"video/h264":if(i){let i;if((e.parameters["packetization-mode"]??0)!==(t.parameters["packetization-mode"]??0)||!r.isSameProfile(e.parameters,t.parameters))return!1;try{i=r.generateProfileLevelIdStringForAnswer(e.parameters,t.parameters)}catch(e){return!1}s&&(i?(e.parameters["profile-level-id"]=i,t.parameters["profile-level-id"]=i):(delete e.parameters["profile-level-id"],delete t.parameters["profile-level-id"]))}break;case"video/vp9":if(i&&(e.parameters["profile-id"]??0)!==(t.parameters["profile-id"]??0))return!1}return!0}function c(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}}),p("7PXZ5",function(e,t){var r,i,s,a;Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.ProfileLevelId=e.exports.Level=e.exports.Profile=void 0,e.exports.parseProfileLevelId=m,e.exports.profileLevelIdToString=f,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=g,e.exports.isSameProfile=function(e={},t={}){let r=g(e),i=g(t);return!!(r&&i&&r.profile===i.profile)},e.exports.isSameProfileAndLevel=function(e={},t={}){let r=g(e),i=g(t);return!!(r&&i&&r.profile===i.profile&&r.level==i.level)},e.exports.generateProfileLevelIdStringForAnswer=function(e={},t={}){if(!e["profile-level-id"]&&!t["profile-level-id"])return void n.warn("generateProfileLevelIdStringForAnswer() | profile-level-id missing in local and remote params");let r=g(e),s=g(t);if(!r)throw TypeError("invalid local_profile_level_id");if(!s)throw TypeError("invalid remote_profile_level_id");if(r.profile!==s.profile)throw TypeError("H264 Profile mismatch");let a=b(e)&&b(t),c=r.level,d=function(e,t){return(e===i.L1_b?t!==i.L1&&t!==i.L1_b:t===i.L1_b?e!==i.L1:e<t)?e:t}(c,s.level),l=a?c:d;return n.debug(`generateProfileLevelIdStringForAnswer() | result [profile:${r.profile}, level:${l}]`),f(new o(r.profile,l))},e.exports.supportedLevel=function(e,t){for(let r=u.length-1;r>=0;--r){let i=u[r];if(256*i.max_macroblock_frame_size<=e&&i.max_macroblocks_per_second<=t*i.max_macroblock_frame_size)return n.debug(`supportedLevel() | result [max_frame_pixel_count:${e}, max_fps:${t}, level:${i.level}]`),i.level}n.warn(`supportedLevel() | no level supported [max_frame_pixel_count:${e}, max_fps:${t}]`)};let n=new(l("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{profile;level;constructor(e,t){this.profile=e,this.level=t}}e.exports.ProfileLevelId=o;let c=new o(r.ConstrainedBaseline,i.L3_1);class d{mask;masked_value;constructor(e){this.mask=~v("x",e),this.masked_value=v("1",e)}isMatch(e){return this.masked_value===(e&this.mask)}}class p{profile_idc;profile_iop;profile;constructor(e,t,r){this.profile_idc=e,this.profile_iop=t,this.profile=r}}let h=[new p(66,new d("x1xx0000"),r.ConstrainedBaseline),new p(77,new d("1xxx0000"),r.ConstrainedBaseline),new p(88,new d("11xx0000"),r.ConstrainedBaseline),new p(66,new d("x0xx0000"),r.Baseline),new p(88,new d("10xx0000"),r.Baseline),new p(77,new d("0x0x0000"),r.Main),new p(100,new d("00000000"),r.High),new p(100,new d("00001100"),r.ConstrainedHigh),new p(244,new d("00000000"),r.PredictiveHigh444)],u=[{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:i.L1},{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:i.L1_b},{max_macroblocks_per_second:3e3,max_macroblock_frame_size:396,level:i.L1_1},{max_macroblocks_per_second:6e3,max_macroblock_frame_size:396,level:i.L1_2},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:i.L1_3},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:i.L2},{max_macroblocks_per_second:19800,max_macroblock_frame_size:792,level:i.L2_1},{max_macroblocks_per_second:20250,max_macroblock_frame_size:1620,level:i.L2_2},{max_macroblocks_per_second:40500,max_macroblock_frame_size:1620,level:i.L3},{max_macroblocks_per_second:108e3,max_macroblock_frame_size:3600,level:i.L3_1},{max_macroblocks_per_second:216e3,max_macroblock_frame_size:5120,level:i.L3_2},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:i.L4},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:i.L4_1},{max_macroblocks_per_second:522240,max_macroblock_frame_size:8704,level:i.L4_2},{max_macroblocks_per_second:589824,max_macroblock_frame_size:22080,level:i.L5},{max_macroblocks_per_second:983040,max_macroblock_frame_size:36864,level:i.L5_1},{max_macroblocks_per_second:2073600,max_macroblock_frame_size:36864,level:i.L5_2}];function m(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 r of h)if(c===r.profile_idc&&r.profile_iop.isMatch(a))return n.debug(`parseProfileLevelId() | result [str:${e}, profile:${r.profile}, level:${t}]`),new o(r.profile,t);n.warn(`parseProfileLevelId() | unrecognized profile_idc/profile_iop combination [str:${e}, profile_idc:${c}, profile_iop:${a}]`)}function f(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 g(e={}){let t=e["profile-level-id"];return t?m(t):c}function v(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|(0|Number(t[7]===e))}function b(e={}){let t=e["level-asymmetry-allowed"];return!0===t||1===t||"1"===t}}),p("g9uXJ",function(e,t){Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.Logger=void 0;var r=l("1JjHr");let i="h264-profile-level-id";e.exports.Logger=class{_debug;_warn;_error;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}}}),p("2fqxq",function(e,t){Object.defineProperty(e.exports,"__esModule",{value:!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)}}),p("6KyqJ",function(e,t){Object.defineProperty(e.exports,"__esModule",{value:!0}),e.exports.generateRouterRtpCapabilities=function(){return r.deepFreeze({codecs:[{mimeType:"audio/opus",kind:"audio",preferredPayloadType:100,clockRate:48e3,channels:2,rtcpFeedback:[{type:"transport-cc"}],parameters:{useinbandfec:1,foo:"bar"}},{mimeType:"video/VP8",kind:"video",preferredPayloadType:101,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"x-google-start-bitrate":1500}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:102,clockRate:9e4,rtcpFeedback:[],parameters:{apt:101}},{mimeType:"video/H264",kind:"video",preferredPayloadType:103,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"level-asymmetry-allowed":1,"packetization-mode":1,"profile-level-id":"42e01f"}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:104,clockRate:9e4,rtcpFeedback:[],parameters:{apt:103}},{mimeType:"video/VP9",kind:"video",preferredPayloadType:105,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"profile-id":0,"x-google-start-bitrate":1500}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:106,clockRate:9e4,rtcpFeedback:[],parameters:{apt:105}}],headerExtensions:[{kind:"audio",uri:"urn:ietf:params:rtp-hdrext:sdes:mid",preferredId:1,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:mid",preferredId:1,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id",preferredId:2,preferredEncrypt:!1,direction:"recvonly"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id",preferredId:3,preferredEncrypt:!1,direction:"recvonly"},{kind:"audio",uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",preferredId:4,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",preferredId:4,preferredEncrypt:!1,direction:"sendrecv"},{kind:"audio",uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",preferredId:5,preferredEncrypt:!1,direction:"recvonly"},{kind:"video",uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",preferredId:5,preferredEncrypt:!1,direction:"sendrecv"},{kind:"audio",uri:"urn:ietf:params:rtp-hdrext:ssrc-audio-level",preferredId:10,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:3gpp:video-orientation",preferredId:11,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:toffset",preferredId:12,preferredEncrypt:!1,direction:"sendrecv"}]})},e.exports.generateNativeRtpCapabilities=function(){return{codecs:[{mimeType:"audio/opus",kind:"audio",preferredPayloadType:111,clockRate:48e3,channels:2,rtcpFeedback:[{type:"transport-cc"}],parameters:{minptime:10,useinbandfec:1}},{mimeType:"audio/ISAC",kind:"audio",preferredPayloadType:103,clockRate:16e3,channels:1,rtcpFeedback:[{type:"transport-cc"}],parameters:{}},{mimeType:"audio/CN",kind:"audio",preferredPayloadType:106,clockRate:32e3,channels:1,rtcpFeedback:[{type:"transport-cc"}],parameters:{}},{mimeType:"audio/foo",kind:"audio",preferredPayloadType:107,clockRate:9e4,channels:4,rtcpFeedback:[{type:"foo-qwe-qwe"}],parameters:{foo:"lalala"}},{mimeType:"video/BAZCODEC",kind:"video",preferredPayloadType:100,clockRate:9e4,rtcpFeedback:[{type:"foo"},{type:"transport-cc"},{type:"ccm",parameter:"fir"},{type:"nack"},{type:"nack",parameter:"pli"}],parameters:{baz:"1234abcd"}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:101,clockRate:9e4,rtcpFeedback:[],parameters:{apt:100}},{mimeType:"video/VP8",kind:"video",preferredPayloadType:96,clockRate:9e4,rtcpFeedback:[{type:"goog-remb"},{type:"transport-cc"},{type:"ccm",parameter:"fir"},{type:"nack"},{type:"nack",parameter:"pli"}],parameters:{baz:"1234abcd"}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:97,clockRate:9e4,rtcpFeedback:[],parameters:{apt:96}},{mimeType:"video/VP9",kind:"video",preferredPayloadType:98,clockRate:9e4,rtcpFeedback:[{type:"goog-remb"},{type:"transport-cc"},{type:"ccm",parameter:"fir"},{type:"nack"},{type:"nack",parameter:"pli"}],parameters:{"profile-id":0}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:99,clockRate:9e4,rtcpFeedback:[],parameters:{apt:98}}],headerExtensions:[{kind:"audio",uri:"urn:ietf:params:rtp-hdrext:sdes:mid",preferredId:1},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:mid",preferredId:1},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:toffset",preferredId:2},{kind:"video",uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",preferredId:3},{kind:"video",uri:"urn:3gpp:video-orientation",preferredId:4},{kind:"video",uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",preferredId:5},{kind:"video",uri:"http://www.webrtc.org/experiments/rtp-hdrext/playout-delay",preferredId:6},{kind:"video",uri:"http://www.webrtc.org/experiments/rtp-hdrext/video-content-type",preferredId:7},{kind:"video",uri:"http://www.webrtc.org/experiments/rtp-hdrext/video-timing",preferredId:8},{kind:"audio",uri:"urn:ietf:params:rtp-hdrext:ssrc-audio-level",preferredId:10}]}},e.exports.generateNativeSctpCapabilities=function(){return r.deepFreeze({numStreams:{OS:2048,MIS:2048}})},e.exports.generateLocalDtlsParameters=function(){return r.deepFreeze({fingerprints:[{algorithm:"sha-256",value:"82:5A:68:3D:36:C3:0A:DE:AF:E7:32:43:D2:88:83:57:AC:2D:65:E5:80:C4:B6:FB:AF:1A:A0:21:9F:6D:0C:AD"}],role:"auto"})},e.exports.generateTransportRemoteParameters=function(){return{id:i(),iceParameters:r.deepFreeze({iceLite:!0,password:"yku5ej8nvfaor28lvtrabcx0wkrpkztz",usernameFragment:"h3hk1iz6qqlnqlne"}),iceCandidates:r.deepFreeze([{foundation:"udpcandidate",address:"9.9.9.9",ip:"9.9.9.9",port:40533,priority:0x404e20ff,protocol:"udp",type:"host",tcpType:"passive"},{foundation:"udpcandidate",address:"9.9.9.9",ip:"9:9:9:9:9:9",port:41333,priority:0x404e2109,protocol:"udp",type:"host",tcpType:"passive"}]),dtlsParameters:r.deepFreeze({fingerprints:[{algorithm:"sha-256",value:"A9:F4:E0:D2:74:D3:0F:D9:CA:A5:2F:9F:7F:47:FA:F0:C4:72:DD:73:49:D0:3B:14:90:20:51:30:1B:90:8E:71"},{algorithm:"sha-384",value:"03:D9:0B:87:13:98:F6:6D:BC:FC:92:2E:39:D4:E1:97:32:61:30:56:84:70:81:6E:D1:82:97:EA:D9:C1:21:0F:6B:C5:E7:7F:E1:97:0C:17:97:6E:CF:B3:EF:2E:74:B0"},{algorithm:"sha-512",value:"84:27:A4:28:A4:73:AF:43:02:2A:44:68:FF:2F:29:5C:3B:11:9A:60:F4:A8:F0:F5:AC:A0:E3:49:3E:B1:34:53:A9:85:CE:51:9B:ED:87:5E:B8:F4:8E:3D:FA:20:51:B8:96:EE:DA:56:DC:2F:5C:62:79:15:23:E0:21:82:2B:2C"}],role:"auto"}),sctpParameters:r.deepFreeze({port:5e3,OS:2048,MIS:2048,maxMessageSize:2e6})}},e.exports.generateProducerRemoteParameters=function(){return r.deepFreeze({id:i()})},e.exports.generateConsumerRemoteParameters=function({id:e,codecMimeType:t}={}){switch(t){case"audio/opus":return{id:e??i(),producerId:i(),kind:"audio",rtpParameters:r.deepFreeze({codecs:[{mimeType:"audio/opus",payloadType:100,clockRate:48e3,channels:2,rtcpFeedback:[{type:"transport-cc"}],parameters:{useinbandfec:1,foo:"bar"}}],encodings:[{ssrc:0x2c8631b}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:ietf:params:rtp-hdrext:ssrc-audio-level",id:10}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"audio/ISAC":return{id:e??i(),producerId:i(),kind:"audio",rtpParameters:r.deepFreeze({codecs:[{mimeType:"audio/ISAC",payloadType:111,clockRate:16e3,channels:1,rtcpFeedback:[{type:"transport-cc"}],parameters:{}}],encodings:[{ssrc:0x2c8631c}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"video/VP8":return{id:e??i(),producerId:i(),kind:"video",rtpParameters:r.deepFreeze({codecs:[{mimeType:"video/VP8",payloadType:101,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"x-google-start-bitrate":1500}},{mimeType:"video/rtx",payloadType:102,clockRate:9e4,rtcpFeedback:[],parameters:{apt:101}}],encodings:[{ssrc:0x5f5be47,rtx:{ssrc:0x5f5be48}}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",id:4},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:3gpp:video-orientation",id:11},{uri:"urn:ietf:params:rtp-hdrext:toffset",id:12}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"video/H264":return{id:e??i(),producerId:i(),kind:"video",rtpParameters:r.deepFreeze({codecs:[{mimeType:"video/H264",payloadType:103,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"level-asymmetry-allowed":1,"packetization-mode":1,"profile-level-id":"42e01f"}},{mimeType:"video/rtx",payloadType:104,clockRate:9e4,rtcpFeedback:[],parameters:{apt:103}}],encodings:[{ssrc:0x5f5be49,rtx:{ssrc:0x5f5be4a}}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",id:4},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:3gpp:video-orientation",id:11},{uri:"urn:ietf:params:rtp-hdrext:toffset",id:12}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};default:throw TypeError(`unknown codecMimeType '${t}'`)}},e.exports.generateDataProducerRemoteParameters=function(){return r.deepFreeze({id:i()})},e.exports.generateDataConsumerRemoteParameters=function({id:e}={}){return{id:e??i(),dataProducerId:i(),sctpStreamParameters:r.deepFreeze({streamId:666,maxPacketLifeTime:5e3,maxRetransmits:void 0})}};var r=l("2fqxq");function i(){return String(r.generateRandomNumber())}}),p("j0yZW",function(e,t){a(e.exports,"Children",()=>i,e=>i=e),a(e.exports,"Component",()=>s,e=>s=e),a(e.exports,"Fragment",()=>n,e=>n=e),a(e.exports,"Profiler",()=>o,e=>o=e),a(e.exports,"PureComponent",()=>c,e=>c=e),a(e.exports,"StrictMode",()=>d,e=>d=e),a(e.exports,"Suspense",()=>l,e=>l=e),a(e.exports,"__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE",()=>p,e=>p=e),a(e.exports,"__COMPILER_RUNTIME",()=>h,e=>h=e),a(e.exports,"cache",()=>u,e=>u=e),a(e.exports,"cloneElement",()=>m,e=>m=e),a(e.exports,"createContext",()=>f,e=>f=e),a(e.exports,"createElement",()=>g,e=>g=e),a(e.exports,"createRef",()=>v,e=>v=e),a(e.exports,"forwardRef",()=>b,e=>b=e),a(e.exports,"isValidElement",()=>y,e=>y=e),a(e.exports,"lazy",()=>_,e=>_=e),a(e.exports,"memo",()=>w,e=>w=e),a(e.exports,"startTransition",()=>S,e=>S=e),a(e.exports,"unstable_useCacheRefresh",()=>k,e=>k=e),a(e.exports,"use",()=>C,e=>C=e),a(e.exports,"useActionState",()=>R,e=>R=e),a(e.exports,"useCallback",()=>T,e=>T=e),a(e.exports,"useContext",()=>E,e=>E=e),a(e.exports,"useDebugValue",()=>P,e=>P=e),a(e.exports,"useDeferredValue",()=>x,e=>x=e),a(e.exports,"useEffect",()=>M,e=>M=e),a(e.exports,"useId",()=>I,e=>I=e),a(e.exports,"useImperativeHandle",()=>D,e=>D=e),a(e.exports,"useInsertionEffect",()=>L,e=>L=e),a(e.exports,"useLayoutEffect",()=>O,e=>O=e),a(e.exports,"useMemo",()=>A,e=>A=e),a(e.exports,"useOptimistic",()=>j,e=>j=e),a(e.exports,"useReducer",()=>N,e=>N=e),a(e.exports,"useRef",()=>F,e=>F=e),a(e.exports,"useState",()=>$,e=>$=e),a(e.exports,"useSyncExternalStore",()=>V,e=>V=e),a(e.exports,"useTransition",()=>B,e=>B=e),a(e.exports,"version",()=>q,e=>q=e);var i,s,n,o,c,d,l,p,h,u,m,f,g,v,b,y,_,w,S,k,C,R,T,E,P,x,M,I,D,L,O,A,j,N,F,$,V,B,q,z=Symbol.for("react.transitional.element"),W=Symbol.for("react.portal"),H=Symbol.for("react.fragment"),U=Symbol.for("react.strict_mode"),G=Symbol.for("react.profiler"),Q=Symbol.for("react.consumer"),K=Symbol.for("react.context"),J=Symbol.for("react.forward_ref"),Y=Symbol.for("react.suspense"),Z=Symbol.for("react.memo"),X=Symbol.for("react.lazy"),ee=Symbol.iterator,et={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},er=Object.assign,ei={};function es(e,t,r){this.props=e,this.context=t,this.refs=ei,this.updater=r||et}function ea(){}function en(e,t,r){this.props=e,this.context=t,this.refs=ei,this.updater=r||et}es.prototype.isReactComponent={},es.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},es.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},ea.prototype=es.prototype;var eo=en.prototype=new ea;eo.constructor=en,er(eo,es.prototype),eo.isPureReactComponent=!0;var ec=Array.isArray,ed={H:null,A:null,T:null,S:null,V:null},el=Object.prototype.hasOwnProperty;function ep(e,t,r,i,s,a){return{$$typeof:z,type:e,key:t,ref:void 0!==(r=a.ref)?r:null,props:a}}function eh(e){return"object"==typeof e&&null!==e&&e.$$typeof===z}var eu=/\/+/g;function em(e,t){var r,i;return"object"==typeof e&&null!==e&&null!=e.key?(r=""+e.key,i={"=":"=0",":":"=2"},"$"+r.replace(/[=:]/g,function(e){return i[e]})):t.toString(36)}function ef(){}function eg(e,t,r){if(null==e)return e;var i=[],s=0;return!function e(t,r,i,s,a){var n,o,c,d=typeof t;("undefined"===d||"boolean"===d)&&(t=null);var l=!1;if(null===t)l=!0;else switch(d){case"bigint":case"string":case"number":l=!0;break;case"object":switch(t.$$typeof){case z:case W:l=!0;break;case X:return e((l=t._init)(t._payload),r,i,s,a)}}if(l)return a=a(t),l=""===s?"."+em(t,0):s,ec(a)?(i="",null!=l&&(i=l.replace(eu,"$&/")+"/"),e(a,r,i,"",function(e){return e})):null!=a&&(eh(a)&&(n=a,o=i+(null==a.key||t&&t.key===a.key?"":(""+a.key).replace(eu,"$&/")+"/")+l,a=ep(n.type,o,void 0,void 0,void 0,n.props)),r.push(a)),1;l=0;var p=""===s?".":s+":";if(ec(t))for(var h=0;h<t.length;h++)d=p+em(s=t[h],h),l+=e(s,r,i,d,a);else if("function"==typeof(h=null===(c=t)||"object"!=typeof c?null:"function"==typeof(c=ee&&c[ee]||c["@@iterator"])?c:null))for(t=h.call(t),h=0;!(s=t.next()).done;)d=p+em(s=s.value,h++),l+=e(s,r,i,d,a);else if("object"===d){if("function"==typeof t.then)return e(function(e){switch(e.status){case"fulfilled":return e.value;case"rejected":throw e.reason;default:switch("string"==typeof e.status?e.then(ef,ef):(e.status="pending",e.then(function(t){"pending"===e.status&&(e.status="fulfilled",e.value=t)},function(t){"pending"===e.status&&(e.status="rejected",e.reason=t)})),e.status){case"fulfilled":return e.value;case"rejected":throw e.reason}}throw e}(t),r,i,s,a);throw Error("Objects are not valid as a React child (found: "+("[object Object]"===(r=String(t))?"object with keys {"+Object.keys(t).join(", ")+"}":r)+"). If you meant to render a collection of children, use an array instead.")}return l}(e,i,"","",function(e){return t.call(r,e,s++)}),i}function ev(e){if(-1===e._status){var t=e._result;(t=t()).then(function(t){(0===e._status||-1===e._status)&&(e._status=1,e._result=t)},function(t){(0===e._status||-1===e._status)&&(e._status=2,e._result=t)}),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var eb="function"==typeof reportError?reportError:function(e){if("object"==typeof window&&"function"==typeof window.ErrorEvent){var t=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:"object"==typeof e&&null!==e&&"string"==typeof e.message?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if("object"==typeof r&&"function"==typeof r.emit)return void r.emit("uncaughtException",e);console.error(e)};function ey(){}i={map:eg,forEach:function(e,t,r){eg(e,function(){t.apply(this,arguments)},r)},count:function(e){var t=0;return eg(e,function(){t++}),t},toArray:function(e){return eg(e,function(e){return e})||[]},only:function(e){if(!eh(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},s=es,n=H,o=G,c=en,d=U,l=Y,p=ed,h={__proto__:null,c:function(e){return ed.H.useMemoCache(e)}},u=function(e){return function(){return e.apply(null,arguments)}},m=function(e,t,r){if(null==e)throw Error("The argument must be a React element, but you passed "+e+".");var i=er({},e.props),s=e.key,a=void 0;if(null!=t)for(n in void 0!==t.ref&&(a=void 0),void 0!==t.key&&(s=""+t.key),t)el.call(t,n)&&"key"!==n&&"__self"!==n&&"__source"!==n&&("ref"!==n||void 0!==t.ref)&&(i[n]=t[n]);var n=arguments.length-2;if(1===n)i.children=r;else if(1<n){for(var o=Array(n),c=0;c<n;c++)o[c]=arguments[c+2];i.children=o}return ep(e.type,s,void 0,void 0,a,i)},f=function(e){return(e={$$typeof:K,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider=e,e.Consumer={$$typeof:Q,_context:e},e},g=function(e,t,r){var i,s={},a=null;if(null!=t)for(i in void 0!==t.key&&(a=""+t.key),t)el.call(t,i)&&"key"!==i&&"__self"!==i&&"__source"!==i&&(s[i]=t[i]);var n=arguments.length-2;if(1===n)s.children=r;else if(1<n){for(var o=Array(n),c=0;c<n;c++)o[c]=arguments[c+2];s.children=o}if(e&&e.defaultProps)for(i in n=e.defaultProps)void 0===s[i]&&(s[i]=n[i]);return ep(e,a,void 0,void 0,null,s)},v=function(){return{current:null}},b=function(e){return{$$typeof:J,render:e}},y=eh,_=function(e){return{$$typeof:X,_payload:{_status:-1,_result:e},_init:ev}},w=function(e,t){return{$$typeof:Z,type:e,compare:void 0===t?null:t}},S=function(e){var t=ed.T,r={};ed.T=r;try{var i=e(),s=ed.S;null!==s&&s(r,i),"object"==typeof i&&null!==i&&"function"==typeof i.then&&i.then(ey,eb)}catch(e){eb(e)}finally{ed.T=t}},k=function(){return ed.H.useCacheRefresh()},C=function(e){return ed.H.use(e)},R=function(e,t,r){return ed.H.useActionState(e,t,r)},T=function(e,t){return ed.H.useCallback(e,t)},E=function(e){return ed.H.useContext(e)},P=function(){},x=function(e,t){return ed.H.useDeferredValue(e,t)},M=function(e,t,r){var i=ed.H;if("function"==typeof r)throw Error("useEffect CRUD overload is not enabled in this build of React.");return i.useEffect(e,t)},I=function(){return ed.H.useId()},D=function(e,t,r){return ed.H.useImperativeHandle(e,t,r)},L=function(e,t){return ed.H.useInsertionEffect(e,t)},O=function(e,t){return ed.H.useLayoutEffect(e,t)},A=function(e,t){return ed.H.useMemo(e,t)},j=function(e,t){return ed.H.useOptimistic(e,t)},N=function(e,t,r){return ed.H.useReducer(e,t,r)},F=function(e){return ed.H.useRef(e)},$=function(e){return ed.H.useState(e)},V=function(e,t,r){return ed.H.useSyncExternalStore(e,t,r)},B=function(){return ed.H.useTransition()},q="19.1.1"}),a(module.exports,"streamerClient",()=>rW),a(module.exports,"Script",()=>rb);var h="undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto);const u=new Uint8Array(16),m=[];for(let e=0;e<256;++e)m.push((e+256).toString(16).slice(1));var f=function(t,r,i){if(h&&!r&&!t)return h();let s=(t=t||{}).random??t.rng?.()??function(){if(!e){if("undefined"==typeof crypto||!crypto.getRandomValues)throw Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");e=crypto.getRandomValues.bind(crypto)}return e(u)}();if(s.length<16)throw Error("Random bytes length must be >= 16");if(s[6]=15&s[6]|64,s[8]=63&s[8]|128,r){if((i=i||0)<0||i+16>r.length)throw RangeError(`UUID byte range ${i}:${i+15} is out of buffer bounds`);for(let e=0;e<16;++e)r[i+e]=s[e];return r}return function(e,t=0){return(m[e[t+0]]+m[e[t+1]]+m[e[t+2]]+m[e[t+3]]+"-"+m[e[t+4]]+m[e[t+5]]+"-"+m[e[t+6]]+m[e[t+7]]+"-"+m[e[t+8]]+m[e[t+9]]+"-"+m[e[t+10]]+m[e[t+11]]+m[e[t+12]]+m[e[t+13]]+m[e[t+14]]+m[e[t+15]]).toLowerCase()}(s)};JSON.parse('{"name":"protoo-client","version":"4.0.7","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.4.3","events":"^3.3.0","retry":"^0.12.0"},"devDependencies":{"eslint":"^5.16.0"},"optionalDependencies":{"websocket":"^1.0.35"}}').version;var g={},v={},b=l("1JjHr");const y="protoo-client";v=class{constructor(e){e?(this._debug=b(`${y}:${e}`),this._warn=b(`${y}:WARN:${e}`),this._error=b(`${y}:ERROR:${e}`)):(this._debug=b(y),this._warn=b(`${y}:WARN`),this._error=b(`${y}: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 _={},w=i.EventEmitter;_=class extends w{constructor(e){super(),this.setMaxListeners(1/0),this._logger=e||new v("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 S={};const k=new v("Message");S=class{static parse(e){let t,r={};try{t=JSON.parse(e)}catch(e){k.error("parse() | invalid JSON: %s",e);return}if("object"!=typeof t||Array.isArray(t))return void k.error("parse() | not an object");if(t.request){if(r.request=!0,"string"!=typeof t.method)return void k.error("parse() | missing/invalid method field");if("number"!=typeof t.id)return void k.error("parse() | missing/invalid id field");r.id=t.id,r.method=t.method,r.data=t.data||{}}else if(t.response){if(r.response=!0,"number"!=typeof t.id)return void k.error("parse() | missing/invalid id field");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)return void k.error("parse() | missing request/response field");if(r.notification=!0,"string"!=typeof t.method)return void k.error("parse() | missing/invalid method field");r.method=t.method,r.data=t.data||{}}return r}static createRequest(e,t){return{request:!0,id:Math.round(1e7*Math.random()),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 C=new v("Peer");g=class extends _{constructor(e){super(C),C.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(C.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=S.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=S.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||(C.debug('emit "open"'),this._connected=!0,this.safeEmit("open"))}),this._transport.on("disconnected",()=>{this._closed||(C.debug('emit "disconnected"'),this._connected=!1,this.safeEmit("disconnected"))}),this._transport.on("failed",e=>{this._closed||(C.debug('emit "failed" [currentAttempt:%s]',e),this._connected=!1,this.safeEmit("failed",e))}),this._transport.on("close",()=>{this._closed||(this._closed=!0,C.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=S.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=S.createErrorResponse(e,t,r);this._transport.send(i).catch(()=>{})})}catch(r){let t=S.createErrorResponse(e,500,String(r));this._transport.send(t).catch(()=>{})}}_handleResponse(e){let t=this._sents.get(e.id);if(!t)return void C.error("received response does not match any sent request [id:%s]",e.id);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 R={};if("object"==typeof globalThis)tS=globalThis;else try{tS=l("dFHla")}catch(e){}finally{if(tS||"undefined"==typeof window||(tS=window),!tS)throw Error("Could not determine global this")}var T=tS.WebSocket||tS.MozWebSocket,E={};function P(e,t){return t?new T(e,t):new T(e)}E=l("bAhvK").version,T&&["CONNECTING","OPEN","CLOSING","CLOSED"].forEach(function(e){Object.defineProperty(P,e,{get:function(){return T[e]}})});var x=T?P:null,M={};M=l("aHEzW");const I={retries:10,factor:2,minTimeout:1e3,maxTimeout:8e3},D=new v("WebSocketTransport");R=class extends _{constructor(e,t){super(D),D.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){D.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){D.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 D.warn("send() failed:%o",e),e}}_runWebSocket(){let e=M.operation(this._options.retry||I),t=!1;e.attempt(r=>{if(this._closed)return void e.stop();D.debug("_runWebSocket() [currentAttempt:%s]",r),this._ws=new x(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(D.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}else if(this.safeEmit("failed",r),this._closed||e.retry(!0))return}this._closed=!0,this.safeEmit("close")}},this._ws.onerror=()=>{this._closed||D.error('WebSocket "error" event')},this._ws.onmessage=e=>{if(this._closed)return;let t=S.parse(e.data);if(t){if(0===this.listenerCount("message"))return void D.error('no listeners for WebSocket "message" event, ignoring received message');this.safeEmit("message",t)}}})}},t_=g,tw=R;const L={1:"error",2:"warn",3:"info",4:"verbose",5:"debug"};let O=Number(2);const A=new Intl.DateTimeFormat("en-GB",{year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric",timeZone:"GMT"});class j{constructor(e,t){this.filename=e,this.customLogLevel=t}print(e,t,r,...i){let s=`[ ${A.format(new Date)} ][ ${L[e]} ][ ${this.filename} - ${r} ]`;e<=(this.customLogLevel||O)?t(s,...i):window.Sentry&&window.Sentry.addBreadcrumb({type:"debug",level:L[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){O=e}setLogLevel(e){this.customLogLevel=e}}const N=new j("AudioLevels.ts"),F=window.AudioContext||window.webkitAudioContext;class ${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 F,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){N.error("release","audioStreamSource failed to disconnect",e)}this.audioContext.close().catch(e=>{N.error("release","audioContext failed to close",e)})}static isAPIAvailable(){return!!F}}const V=new j("AudioRenderer.ts");var B=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=>{V.warn("play","failed to play",e),setTimeout(()=>{this.play()},1e3)})}};const q=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")},z=async(e,t)=>{let r=e.srcObject.getVideoTracks()[0];if(!r)throw Error("no video track found");let i=r.getConstraints();if(i.width&&i.height){let i=e.videoWidth,s=e.videoHeight;await r.applyConstraints({width:{ideal:4096},height:{ideal:4096},advanced:[{aspectRatio:Math.round(100*i/s)/100},...t.trackConstraint.advanced]})}let s=await q(e);return await t.applyConstraints(),s},W=async e=>{let t=document.createElement("video"),r=new MediaStream;r.addTrack(e),t.srcObject=r,t.setAttribute("muted","true"),t.setAttribute("playsinline","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 H={};H=function(){var e={17:function(e,t,r){t.__esModule=!0,t.default=void 0;var i=r(18);t.default=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}(),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);t.default=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}(),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}}t.default=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}(),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;t.default=[{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)}}}],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);t.default=[{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}}}],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);t.default=[{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}}}],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);t.default=[{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}}],e.exports=t.default}},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)}();var U={};Object.defineProperty(U,"__esModule",{value:!0}),U.debug=U.testFakeParameters=U.FakeHandler=U.enhancedEvents=U.ortc=U.parseScalabilityMode=U.detectDeviceAsync=U.detectDevice=U.Device=U.version=U.types=void 0;var b=l("1JjHr");U.debug=b.default,U.types=l("8cmuS"),U.version="3.18.3";var G={};Object.defineProperty(G,"__esModule",{value:!0}),G.Device=void 0,G.detectDevice=th,G.detectDeviceAsync=tu;var Q=l("7Wufc"),K=l("lY6O0"),J={};Object.defineProperty(J,"__esModule",{value:!0}),J.InvalidStateError=J.UnsupportedError=void 0;class Y extends Error{constructor(e){super(e),this.name="UnsupportedError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,Y):this.stack=Error(e).stack}}J.UnsupportedError=Y;class Z extends Error{constructor(e){super(e),this.name="InvalidStateError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,Z):this.stack=Error(e).stack}}J.InvalidStateError=Z;var X=l("2fqxq"),ee=l("kIl0y"),et={};Object.defineProperty(et,"__esModule",{value:!0}),et.Transport=void 0;var er={};Object.defineProperty(er,"__esModule",{value:!0}),er.AwaitQueueRemovedTaskError=er.AwaitQueueStoppedError=er.AwaitQueue=void 0;var ei={};Object.defineProperty(ei,"__esModule",{value:!0}),ei.AwaitQueue=void 0;var es={};Object.defineProperty(es,"__esModule",{value:!0}),es.Logger=void 0;var b=l("1JjHr");const ea="awaitqueue";es.Logger=class{_debug;_warn;_error;constructor(e){e?(this._debug=b(`${ea}:${e}`),this._warn=b(`${ea}:WARN:${e}`),this._error=b(`${ea}:ERROR:${e}`)):(this._debug=b(ea),this._warn=b(`${ea}:WARN`),this._error=b(`${ea}: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 en={};Object.defineProperty(en,"__esModule",{value:!0}),en.AwaitQueueRemovedTaskError=en.AwaitQueueStoppedError=void 0;class eo extends Error{constructor(e){super(e??"queue stopped"),this.name="AwaitQueueStoppedError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,eo)}}en.AwaitQueueStoppedError=eo;class ec extends Error{constructor(e){super(e??"queue task removed"),this.name="AwaitQueueRemovedTaskError","function"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,ec)}}en.AwaitQueueRemovedTaskError=ec;const ed=new es.Logger("AwaitQueue");class el{pendingTasks=new Map;nextTaskId=0;constructor(){ed.debug("constructor()")}get size(){return this.pendingTasks.size}async push(e,t,r){if(t=t??e.name,ed.debug(`push() [name:${t}, options:%o]`,r),"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)=>{if(t&&r?.removeOngoingTasksWithSameName)for(let e of this.pendingTasks.values())e.name===t&&e.reject(new en.AwaitQueueRemovedTaskError,{canExecuteNextTask:!1});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),ed.debug(`resolving task [name:${a.name}]`),i(e);let[t]=this.pendingTasks.values();t&&!t.executedAt&&this.execute(t)},reject:(e,{canExecuteNextTask:t})=>{if(!a.completed&&(a.completed=!0,this.pendingTasks.delete(a.id),ed.debug(`rejecting task [name:${a.name}]: %s`,String(e)),s(e),t)){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(ed.debug("stop()"),this.pendingTasks.values()))ed.debug(`stop() | stopping task [name:${e.name}]`),e.reject(new en.AwaitQueueStoppedError,{canExecuteNextTask:!1})}remove(e){ed.debug(`remove() [taskIdx:${e}]`);let t=Array.from(this.pendingTasks.values())[e];if(!t)return void ed.debug(`stop() | no task with given idx [taskIdx:${e}]`);t.reject(new en.AwaitQueueRemovedTaskError,{canExecuteNextTask:!0})}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(ed.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,{canExecuteNextTask:!0})}}}ei.AwaitQueue=el,Object.defineProperty(er,"AwaitQueue",{enumerable:!0,get:function(){return ei.AwaitQueue}}),Object.defineProperty(er,"AwaitQueueStoppedError",{enumerable:!0,get:function(){return en.AwaitQueueStoppedError}}),Object.defineProperty(er,"AwaitQueueRemovedTaskError",{enumerable:!0,get:function(){return en.AwaitQueueRemovedTaskError}});var Q=l("7Wufc"),K=l("lY6O0"),X=l("2fqxq"),ee=l("kIl0y"),ep={};Object.defineProperty(ep,"__esModule",{value:!0}),ep.Producer=void 0;var Q=l("7Wufc"),K=l("lY6O0");const eh=new Q.Logger("Producer");class eu extends K.EnhancedEventEmitter{_id;_localId;_closed=!1;_rtpSender;_track;_kind;_rtpParameters;_paused;_maxSpatialLayer;_stopTracks;_disableTrackOnPause;_zeroRtpOnPause;_appData;_observer=new K.EnhancedEventEmitter;constructor({id:e,localId:t,rtpSender:r,track:i,rtpParameters:s,stopTracks:a,disableTrackOnPause:n,zeroRtpOnPause:o,appData:c}){super(),eh.debug("constructor()"),this._id=e,this._localId=t,this._rtpSender=r,this._track=i,this._kind=i.kind,this._rtpParameters=s,this._paused=!!n&&!i.enabled,this._maxSpatialLayer=void 0,this._stopTracks=a,this._disableTrackOnPause=n,this._zeroRtpOnPause=o,this._appData=c??{},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||(eh.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(eh.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new J.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(eh.debug("pause()"),this._closed)return void eh.error("pause() | Producer closed");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(eh.debug("resume()"),this._closed)return void eh.error("resume() | Producer closed");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(eh.debug("replaceTrack() [track:%o]",e),this._closed){if(e&&this._stopTracks)try{e.stop()}catch(e){}throw new J.InvalidStateError("closed")}if(e?.readyState==="ended")throw new J.InvalidStateError("track ended");if(e===this._track)return void eh.debug("replaceTrack() | same track, ignored");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 J.InvalidStateError("closed");if("video"!==this._kind)throw new J.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 J.InvalidStateError("closed");if("object"!=typeof e)throw TypeError("invalid params");await new Promise((t,r)=>{this.safeEmit("@setrtpencodingparameters",e,t,r)})}onTrackEnded(){eh.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){}}}ep.Producer=eu;var em={};Object.defineProperty(em,"__esModule",{value:!0}),em.Consumer=void 0;var Q=l("7Wufc"),K=l("lY6O0");const ef=new Q.Logger("Consumer");class eg extends K.EnhancedEventEmitter{_id;_localId;_producerId;_closed=!1;_rtpReceiver;_track;_rtpParameters;_paused;_appData;_observer=new K.EnhancedEventEmitter;constructor({id:e,localId:t,producerId:r,rtpReceiver:i,track:s,rtpParameters:a,appData:n}){super(),ef.debug("constructor()"),this._id=e,this._localId=t,this._producerId=r,this._rtpReceiver=i,this._track=s,this._rtpParameters=a,this._paused=!s.enabled,this._appData=n??{},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||(ef.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(ef.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new J.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){return(ef.debug("pause()"),this._closed)?void ef.error("pause() | Consumer closed"):this._paused?void ef.debug("pause() | Consumer is already paused"):void(this._paused=!0,this._track.enabled=!1,this.emit("@pause"),this._observer.safeEmit("pause"))}resume(){return(ef.debug("resume()"),this._closed)?void ef.error("resume() | Consumer closed"):this._paused?void(this._paused=!1,this._track.enabled=!0,this.emit("@resume"),this._observer.safeEmit("resume")):void ef.debug("resume() | Consumer is already resumed")}onTrackEnded(){ef.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){}}}em.Consumer=eg;var ev={};Object.defineProperty(ev,"__esModule",{value:!0}),ev.DataProducer=void 0;var Q=l("7Wufc"),K=l("lY6O0");const eb=new Q.Logger("DataProducer");class ey extends K.EnhancedEventEmitter{_id;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new K.EnhancedEventEmitter;constructor({id:e,dataChannel:t,sctpStreamParameters:r,appData:i}){super(),eb.debug("constructor()"),this._id=e,this._dataChannel=t,this._sctpStreamParameters=r,this._appData=i??{},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||(eb.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(eb.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}send(e){if(eb.debug("send()"),this._closed)throw new J.InvalidStateError("closed");this._dataChannel.send(e)}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(eb.debug('DataChannel "open" event'),this.safeEmit("open"))}),this._dataChannel.addEventListener("error",e=>{if(this._closed)return;let t=e.error??Error("unknown DataChannel error");e.error?.errorDetail==="sctp-failure"?eb.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):eb.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(eb.warn('DataChannel "close" event'),this._closed=!0,this.emit("@close"),this.safeEmit("close"),this._observer.safeEmit("close"))}),this._dataChannel.addEventListener("message",()=>{this._closed||eb.warn('DataChannel "message" event in a DataProducer, message discarded')}),this._dataChannel.addEventListener("bufferedamountlow",()=>{this._closed||this.safeEmit("bufferedamountlow")})}}ev.DataProducer=ey;var e_={};Object.defineProperty(e_,"__esModule",{value:!0}),e_.DataConsumer=void 0;var Q=l("7Wufc"),K=l("lY6O0");const ew=new Q.Logger("DataConsumer");class eS extends K.EnhancedEventEmitter{_id;_dataProducerId;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new K.EnhancedEventEmitter;constructor({id:e,dataProducerId:t,dataChannel:r,sctpStreamParameters:i,appData:s}){super(),ew.debug("constructor()"),this._id=e,this._dataProducerId=t,this._dataChannel=r,this._sctpStreamParameters=i,this._appData=s??{},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||(ew.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(ew.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(ew.debug('DataChannel "open" event'),this.safeEmit("open"))}),this._dataChannel.addEventListener("error",e=>{if(this._closed)return;let t=e.error??Error("unknown DataChannel error");e.error?.errorDetail==="sctp-failure"?ew.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):ew.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(ew.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_.DataConsumer=eS;const ek=new Q.Logger("Transport");class eC{consumerOptions;promise;resolve;reject;constructor(e){this.consumerOptions=e,this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}}class eR extends K.EnhancedEventEmitter{_id;_closed=!1;_direction;_getSendExtendedRtpCapabilities;_recvRtpCapabilities;_canProduceByKind;_maxSctpMessageSize;_handler;_iceGatheringState="new";_connectionState="new";_appData;_producers=new Map;_consumers=new Map;_dataProducers=new Map;_dataConsumers=new Map;_probatorConsumerCreated=!1;_awaitQueue=new er.AwaitQueue;_pendingConsumerTasks=[];_consumerCreationInProgress=!1;_pendingPauseConsumers=new Map;_consumerPauseInProgress=!1;_pendingResumeConsumers=new Map;_consumerResumeInProgress=!1;_pendingCloseConsumers=new Map;_consumerCloseInProgress=!1;_observer=new K.EnhancedEventEmitter;constructor({direction:e,id:t,iceParameters:r,iceCandidates:i,dtlsParameters:s,sctpParameters:a,iceServers:n,iceTransportPolicy:o,additionalSettings:c,appData:d,handlerFactory:l,getSendExtendedRtpCapabilities:p,recvRtpCapabilities:h,canProduceByKind:u}){super(),ek.debug("constructor() [id:%s, direction:%s]",t,e),this._id=t,this._direction=e,this._getSendExtendedRtpCapabilities=p,this._recvRtpCapabilities=h,this._canProduceByKind=u,this._maxSctpMessageSize=a?a.maxMessageSize:null;let m=X.clone(c)??{};delete m.iceServers,delete m.iceTransportPolicy,delete m.bundlePolicy,delete m.rtcpMuxPolicy,this._handler=l.factory({direction:e,iceParameters:r,iceCandidates:i,dtlsParameters:s,sctpParameters:a,iceServers:n,iceTransportPolicy:o,additionalSettings:m,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities}),this._appData=d??{},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(ek.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"),super.close(),this._observer.close()}}async getStats(){if(this._closed)throw new J.InvalidStateError("closed");return this._handler.getTransportStats()}async restartIce({iceParameters:e}){if(ek.debug("restartIce()"),this._closed)throw new J.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(ek.debug("updateIceServers()"),this._closed)throw new J.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,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:s,codec:a,stopTracks:n=!0,disableTrackOnPause:o=!0,zeroRtpOnPause:c=!1,onRtpSender:d,appData:l={}}={}){if(ek.debug("produce() [track:%o]",e),this._closed)throw new J.InvalidStateError("closed");if(e)if("send"!==this._direction)throw new J.UnsupportedError("not a sending Transport");else if(this._canProduceByKind[e.kind]){if("ended"===e.readyState)throw new J.InvalidStateError("track ended");else if(0===this.listenerCount("connect")&&"new"===this._connectionState)throw TypeError('no "connect" listener set into this transport');else if(0===this.listenerCount("produce"))throw TypeError('no "produce" listener set into this transport');else if(l&&"object"!=typeof l)throw TypeError("if given, appData must be an object")}else throw new J.UnsupportedError(`cannot produce ${e.kind}`);else throw TypeError("missing track");return this._awaitQueue.push(async()=>{let p;if(r&&!Array.isArray(r))throw TypeError("encodings must be an array");r?.length===0?p=void 0:r&&(p=r.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:h,rtpParameters:u,rtpSender:m}=await this._handler.send({track:e,streamId:t,encodings:p,codecOptions:i,headerExtensionOptions:s,codec:a,onRtpSender:d});try{ee.validateAndNormalizeRtpParameters(u);let{id:t}=await new Promise((t,r)=>{this.safeEmit("produce",{kind:e.kind,rtpParameters:u,appData:l},t,r)}),r=new ep.Producer({id:t,localId:h,rtpSender:m,track:e,rtpParameters:u,stopTracks:n,disableTrackOnPause:o,zeroRtpOnPause:c,appData:l});return this._producers.set(r.id,r),this.handleProducer(r),this._observer.safeEmit("newproducer",r),r}catch(e){throw this._handler.stopSending(h).catch(()=>{}),e}},"transport.produce()").catch(t=>{if(n)try{e.stop()}catch(e){}throw t})}async consume({id:e,producerId:t,kind:r,rtpParameters:i,streamId:s,onRtpReceiver:a,appData:n={}}){if(ek.debug("consume()"),this._closed)throw new J.InvalidStateError("closed");if("recv"!==this._direction)throw new J.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}'`);else if(0===this.listenerCount("connect")&&"new"===this._connectionState)throw TypeError('no "connect" listener set into this transport');else if(n&&"object"!=typeof n)throw TypeError("if given, appData must be an object");let o=X.clone(i);if(!ee.canReceive(o,this._recvRtpCapabilities))throw new J.UnsupportedError("cannot consume this Producer");let c=new eC({id:e,producerId:t,kind:r,rtpParameters:o,streamId:s,onRtpReceiver:a,appData:n});return this._pendingConsumerTasks.push(c),queueMicrotask(()=>{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(ek.debug("produceData()"),this._closed)throw new J.InvalidStateError("closed");if("send"!==this._direction)throw new J.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');else if(0===this.listenerCount("producedata"))throw TypeError('no "producedata" listener set into this transport');else if(a&&"object"!=typeof a)throw TypeError("if given, appData must be an object")}else throw new J.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});ee.validateAndNormalizeSctpStreamParameters(o);let{id:c}=await new Promise((e,t)=>{this.safeEmit("producedata",{sctpStreamParameters:o,label:i,protocol:s,appData:a},e,t)}),d=new ev.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(ek.debug("consumeData()"),this._closed)throw new J.InvalidStateError("closed");if("recv"!==this._direction)throw new J.UnsupportedError("not a receiving Transport");if(this._maxSctpMessageSize){if("string"!=typeof e)throw TypeError("missing id");else if("string"!=typeof t)throw TypeError("missing dataProducerId");else 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 J.UnsupportedError("SCTP not enabled by remote Transport");let n=X.clone(r);return ee.validateAndNormalizeSctpStreamParameters(n),this._awaitQueue.push(async()=>{let{dataChannel:r}=await this._handler.receiveDataChannel({sctpStreamParameters:n,label:i,protocol:s}),o=new e_.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()")}createPendingConsumers(){this._consumerCreationInProgress=!0,this._awaitQueue.push(async()=>{let e;if(0===this._pendingConsumerTasks.length)return void ek.debug("createPendingConsumers() | there is no Consumer to be created");let t=[...this._pendingConsumerTasks];this._pendingConsumerTasks=[];let r=[];for(let e of t){let{id:t,kind:i,rtpParameters:s,streamId:a,onRtpReceiver:n}=e.consumerOptions;r.push({trackId:t,kind:i,rtpParameters:s,streamId:a,onRtpReceiver:n})}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 em.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=ee.generateProbatorRtpParameters(e.rtpParameters);await this._handler.receive([{trackId:"probator",kind:"video",rtpParameters:t}]),ek.debug("createPendingConsumers() | Consumer for RTP probation created"),this._probatorConsumerCreated=!0}catch(e){ek.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)return void ek.debug("pausePendingConsumers() | there is no Consumer to be paused");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){ek.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)return void ek.debug("resumePendingConsumers() | there is no Consumer to be resumed");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){ek.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)return void ek.debug("closePendingConsumers() | there is no Consumer to be closed");let e=Array.from(this._pendingCloseConsumers.values());this._pendingCloseConsumers.clear();try{await this._handler.stopReceiving(e.map(e=>e.localId))}catch(e){ek.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)return void r(new J.InvalidStateError("closed"));this.safeEmit("connect",{dtlsParameters:e},t,r)}),e.on("@icegatheringstatechange",e=>{e!==this._iceGatheringState&&(ek.debug("ICE gathering state changed to %s",e),this._iceGatheringState=e,this._closed||this.safeEmit("icegatheringstatechange",e))}),e.on("@icecandidateerror",e=>{ek.warn(`ICE candidate error [url:${e.url}, localAddress:${e.address}, localPort:${e.port}]: ${e.errorCode} "${e.errorText}"`),this.safeEmit("icecandidateerror",e)}),e.on("@connectionstatechange",e=>{e!==this._connectionState&&(ek.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=>ek.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 J.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),queueMicrotask(()=>{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),queueMicrotask(()=>{this._closed||!1===this._consumerResumeInProgress&&this.resumePendingConsumers()})}),e.on("@getstats",(t,r)=>{if(this._closed)return r(new J.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)})}}et.Transport=eR;var eT={};Object.defineProperty(eT,"__esModule",{value:!0}),eT.Chrome111=void 0;var eE=function(e){return String(Number(e))===e?Number(e):e},eP=function(e,t,r,i){if(i&&!r)t[i]=eE(e[1]);else for(var s=0;s<r.length;s+=1)null!=e[s+1]&&(t[r[s]]=eE(e[s+1]))},ex=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;eP(r.match(e.reg),s,e.names,e.name),e.push&&t[e.push].push(s)},eM={},eI=eM={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"},{push:"msid",reg:/^msid:([\w-]+)(?: ([\w-]+))?/,names:["id","appdata"],format:"msid:%s %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){var t="mediaclk:";return t+((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(eI).forEach(function(e){eI[e].forEach(function(e){e.reg||(e.reg=/(.*)/),e.format||(e.format="%s")})});var eD=RegExp.prototype.test.bind(/^([a-z])=(.*)/),eL=function(e,t){var r=t.split(/=(.+)/,2);return 2===r.length?e[r[0]]=eE(r[1]):1===r.length&&t.length>1&&(e[r[0]]=void 0),e};tR=function(e){return e.split(/;\s?/).reduce(eL,{})};var eO=/%[sdv%]/g,eA=function(e){var t=1,r=arguments,i=r.length;return e.replace(eO,function(e){if(t>=i)return e;var s=r[t];switch(t+=1,e){case"%%":return"%";case"%s":return String(s);case"%d":return Number(s);case"%v":return""}})},ej=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 s=0;s<t.names.length;s+=1){var a=t.names[s];t.name?i.push(r[t.name][a]):i.push(r[t.names[s]])}else i.push(r[t.name]);return eA.apply(null,i)},eN=["v","o","s","i","u","e","p","c","b","t","r","z","a"],eF=["i","c","b","a"];tk=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 r=t.outerOrder||eN,i=t.innerOrder||eF,s=[];return r.forEach(function(t){eM[t].forEach(function(r){r.name in e&&null!=e[r.name]?s.push(ej(t,r,e)):r.push in e&&null!=e[r.push]&&e[r.push].forEach(function(e){s.push(ej(t,r,e))})})}),e.media.forEach(function(e){s.push(ej("m",eM.m[0],e)),i.forEach(function(t){eM[t].forEach(function(r){r.name in e&&null!=e[r.name]?s.push(ej(t,r,e)):r.push in e&&null!=e[r.push]&&e[r.push].forEach(function(e){s.push(ej(t,r,e))})})})}),s.join("\r\n")+"\r\n"},tC=function(e){var t={},r=[],i=t;return e.split(/(\r\n|\r|\n)/).filter(eD).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<(eM[t]||[]).length;a+=1){var n=eM[t][a];if(n.reg.test(s))return ex(n,i,s)}}),t.media=r,t};var K=l("lY6O0"),Q=l("7Wufc"),ee=l("kIl0y"),e$={};Object.defineProperty(e$,"__esModule",{value:!0}),e$.parse=function(e){let t=eV.exec(e??"");return t?{spatialLayers:Number(t[1]),temporalLayers:Number(t[2])}:{spatialLayers:1,temporalLayers:1}};const eV=RegExp("^[LS]([1-9]\\d{0,1})T([1-9]\\d{0,1})");var eB={};Object.defineProperty(eB,"__esModule",{value:!0}),eB.RemoteSdp=void 0;var Q=l("7Wufc"),eq={};Object.defineProperty(eq,"__esModule",{value:!0}),eq.OfferMediaSection=eq.AnswerMediaSection=eq.MediaSection=void 0;var X=l("2fqxq");class ez{_mediaObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r}){if(this._mediaObject={type:"",port:0,protocol:"",payloads:"",rtp:[],fmtp:[]},e&&this.setIceParameters(e),t){for(let e of(this._mediaObject.candidates=[],t)){let t={foundation:e.foundation,component:1,ip:e.address??e.ip,port:e.port,priority:e.priority,transport:e.protocol,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()}close(){this.disable(),this._mediaObject.port=0,delete this._mediaObject.candidates,delete this._mediaObject.endOfCandidates,delete this._mediaObject.iceUfrag,delete this._mediaObject.icePwd,delete this._mediaObject.iceOptions,this._mediaObject.rtp=[],this._mediaObject.fmtp=[],delete this._mediaObject.rtcp,delete this._mediaObject.rtcpFb,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}}function eW(e){let t=RegExp("^(audio|video)/(.+)","i").exec(e.mimeType);if(!t)throw TypeError("invalid codec.mimeType");return t[2]}eq.MediaSection=ez,eq.AnswerMediaSection=class extends ez{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:i,plainRtpParameters:s,offerMediaObject:a,offerRtpParameters:n,answerRtpParameters:o,codecOptions:c}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r}),this._mediaObject.mid=String(a.mid),this._mediaObject.type=a.type,this._mediaObject.protocol=a.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),a.type){case"audio":case"video":for(let e of(this._mediaObject.direction="recvonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[],o.codecs)){let t={payload:e.payloadType,codec:eW(e),rate:e.clockRate};e.channels>1&&(t.encoding=e.channels),this._mediaObject.rtp.push(t);let r=X.clone(e.parameters)??{},i=X.clone(e.rtcpFeedback)??[];if(c){let{opusStereo:t,opusFec:s,opusDtx:a,opusMaxPlaybackRate:o,opusMaxAverageBitrate:d,opusPtime:l,opusNack:p,videoGoogleStartBitrate:h,videoGoogleMaxBitrate:u,videoGoogleMinBitrate:m}=c,f=n.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,r.stereo=+!!t),void 0!==s&&(f.parameters.useinbandfec=+!!s,r.useinbandfec=+!!s),void 0!==a&&(f.parameters.usedtx=+!!a,r.usedtx=+!!a),void 0!==o&&(r.maxplaybackrate=o),void 0!==d&&(r.maxaveragebitrate=d),void 0!==l&&(f.parameters.ptime=l,r.ptime=l),p||(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":case"video/av1":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=o.codecs.map(e=>e.payloadType).join(" "),this._mediaObject.ext=[],o.headerExtensions))(a.ext??[]).some(t=>t.uri===e.uri)&&this._mediaObject.ext.push({uri:e.uri,value:e.id});if("extmap-allow-mixed"===a.extmapAllowMixed&&(this._mediaObject.extmapAllowMixed="extmap-allow-mixed"),a.simulcast)for(let e of(this._mediaObject.simulcast={dir1:"recv",list1:a.simulcast.list1},this._mediaObject.rids=[],a.rids??[]))"send"===e.direction&&this._mediaObject.rids.push({id:e.id,direction:"recv"});else if(a.simulcast_03)for(let e of(this._mediaObject.simulcast_03={value:a.simulcast_03.value.replace(/send/g,"recv")},this._mediaObject.rids=[],a.rids??[]))"send"===e.direction&&this._mediaObject.rids.push({id:e.id,direction:"recv"});this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";break;case"application":"number"==typeof a.sctpPort?(this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=i.port,this._mediaObject.maxMessageSize=i.maxMessageSize):a.sctpmap&&(this._mediaObject.payloads=String(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?.list1)return;let t={};for(let r of e)r.rid&&(t[r.rid]=r);let r=this._mediaObject.simulcast.list1.split(";").map(function(e){return e.split(",").map(function(e){var t,r=!1;return"~"!==e[0]?t=eE(e):(t=eE(e.substring(1,e.length)),r=!0),{scid:t,paused:r}})});for(let e of r)for(let r of e)r.paused=!t[r.scid]?.active;this._mediaObject.simulcast.list1=r.map(e=>e.map(e=>`${e.paused?"~":""}${e.scid}`).join(",")).join(";")}},eq.OfferMediaSection=class extends ez{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:i,plainRtpParameters:s,mid:a,kind:n,offerRtpParameters:o,streamId:c,trackId:d}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r}),this._mediaObject.mid=String(a),this._mediaObject.type=n,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),this._mediaObject.extmapAllowMixed="extmap-allow-mixed",n){case"audio":case"video":{for(let e of(this._mediaObject.direction="sendonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[],this._mediaObject.msid=[{id:c,appdata:d}],o.codecs)){let t={payload:e.payloadType,codec:eW(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=o.codecs.map(e=>e.payloadType).join(" "),this._mediaObject.ext=[],o.headerExtensions))this._mediaObject.ext.push({uri:e.uri,value:e.id});this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";let e=o.encodings[0],t=e.ssrc,r=e.rtx?.ssrc;this._mediaObject.ssrcs=[],this._mediaObject.ssrcGroups=[],t&&o.rtcp.cname&&this._mediaObject.ssrcs.push({id:t,attribute:"cname",value:o.rtcp.cname}),r&&(o.rtcp.cname&&this._mediaObject.ssrcs.push({id:r,attribute:"cname",value:o.rtcp.cname}),t&&this._mediaObject.ssrcGroups.push({semantics:"FID",ssrcs:`${t} ${r}`}));break}case"application":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"}};const eH=["av1","h264"],eU=new Q.Logger("RemoteSdp");class eG{_iceParameters;_iceCandidates;_dtlsParameters;_sctpParameters;_plainRtpParameters;_mediaSections=[];_midToIndex=new Map;_firstMid;_sdpObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:i,plainRtpParameters:s}){if(this._iceParameters=e,this._iceCandidates=t,this._dtlsParameters=r,this._sctpParameters=i,this._plainRtpParameters=s,this._sdpObject={version:0,origin:{address:"0.0.0.0",ipVer:4,netType:"IN",sessionId:"10000",sessionVersion:0,username:"mediasoup-client"},name:"-",timing:{start:0,stop:0},media:[]},this._sdpObject.iceOptions="ice2",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(eU.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(eU.debug("updateDtlsRole() [role:%s]",e),this._dtlsParameters.role=e,this._mediaSections))t.setDtlsRole(e)}setSessionExtmapAllowMixed(){eU.debug("setSessionExtmapAllowMixed()"),this._sdpObject.extmapAllowMixed="extmap-allow-mixed"}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}){let a=new eq.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,offerMediaObject:e,offerRtpParameters:r,answerRtpParameters:i,codecOptions:s}),n=a.getObject();n.rtp.find(e=>eH.includes(e.codec.toLowerCase()))||(n.ext=n.ext?.filter(e=>"https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension"!==e.uri)),t?this.replaceMediaSection(a,t):this._midToIndex.has(a.mid)?this.replaceMediaSection(a):this.addMediaSection(a)}receive({mid:e,kind:t,offerRtpParameters:r,streamId:i,trackId:s}){this.setSessionExtmapAllowMixed();let a=new eq.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,mid:e,kind:t,offerRtpParameters:r,streamId:i,trackId:s}),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?(eU.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)}sendSctpAssociation({offerMediaObject:e}){let t=new eq.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,sctpParameters:this._sctpParameters,plainRtpParameters:this._plainRtpParameters,offerMediaObject:e});this.addMediaSection(t)}receiveSctpAssociation(){let e=new eq.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,sctpParameters:this._sctpParameters,plainRtpParameters:this._plainRtpParameters,mid:"datachannel",kind:"application"});this.addMediaSection(e)}getSdp(){return this._sdpObject.origin.sessionVersion++,tk(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(" "))}}eB.RemoteSdp=eG;var eQ={};Object.defineProperty(eQ,"__esModule",{value:!0}),eQ.extractRtpCapabilities=function({sdpObject:e}){let t=new Map,r=new Map;for(let i of e.media){let e=i.type;switch(e){case"audio":case"video":break;default:continue}for(let r of i.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 i.fmtp??[]){let r=tR(e.config),i=t.get(e.payload);i&&(r?.hasOwnProperty("profile-level-id")&&(r["profile-level-id"]=String(r["profile-level-id"])),i.parameters=r)}for(let r of i.rtcpFb??[]){let i={type:r.type,parameter:r.subtype};if(i.parameter||delete i.parameter,"*"!==r.payload){let e=t.get(Number(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 i.ext??[]){if(t["encrypt-uri"])continue;let i={kind:e,uri:t.uri,preferredId:t.value};r.set(i.preferredId,i)}}return{codecs:Array.from(t.values()),headerExtensions:Array.from(r.values())}},eQ.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}]}},eQ.getCname=function({offerMediaObject:e}){let t=(e.ssrcs??[]).find(e=>"cname"===e.attribute);return t?t.value:""},eQ.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=tR(i.config);if("audio/opus"===e){let e=r.parameters?.["sprop-stereo"];void 0!==e&&(s.stereo=+!!Number(e))}for(let e of(i.config="",Object.keys(s)))i.config&&(i.config+=";"),i.config+=`${e}=${s[e]}`}},eQ.addHeaderExtension=function({offerMediaObject:e,headerExtensionUri:t,headerExtensionId:r}){e.ext||(e.ext=[]),e.ext.push({uri:t,value:r})};var eK={};Object.defineProperty(eK,"__esModule",{value:!0}),eK.getRtpEncodings=function({offerMediaObject:e}){let t=new Set;for(let r of e.ssrcs??[]){let e=r.id;e&&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=i.ssrcs.split(/\s+/),s=Number(e[0]),a=Number(e[1]);t.has(s)&&(t.delete(s),t.delete(a),r.set(s,a))}for(let e of t)r.set(e,void 0);let i=[];for(let[e,t]of r){let r={ssrc:e};t&&(r.rtx={ssrc:t}),i.push(r)}return i},eK.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=Number(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);for(let t of(e.ssrcGroups=[],e.ssrcs=[],e.ssrcGroups.push({semantics:"SIM",ssrcs:d.join(" ")}),d))e.ssrcs.push({id:t,attribute:"cname",value:c}),e.ssrcs.push({id:t,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}`})}};var eJ={};Object.defineProperty(eJ,"__esModule",{value:!0}),eJ.addNackSupportForOpus=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"}))},eJ.addHeaderExtensionSupport=function(e,t){let r,i=e.headerExtensions?.find(e=>e.uri===t.uri);if(i)if(i.kind===t.kind)return;else r=i.preferredId;if(e.headerExtensions||(e.headerExtensions=[]),void 0===r){r=1;let t=new Set(e.headerExtensions.map(e=>e.preferredId));for(;t.has(r);)++r}let s={kind:t.kind,uri:t.uri,preferredId:r,preferredEncrypt:!1,direction:t.direction};e.headerExtensions.push(s)},eJ.getMsidStreamIdAndTrackId=function(e){if(!e||"string"!=typeof e)return{msidStreamId:void 0,msidTrackId:void 0};let[t,r]=e.trim().split(/\s+/);return t?{msidStreamId:t,msidTrackId:r}:{msidStreamId:void 0,msidTrackId:void 0}};const eY=new Q.Logger("Chrome111"),eZ="Chrome111",eX={OS:1024,MIS:1024};class e0 extends K.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:eZ,factory:e=>new e0(e),getNativeRtpCapabilities:async()=>{eY.debug("getNativeRtpCapabilities()");let e=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{e.addTransceiver("audio"),e.addTransceiver("video",{sendEncodings:[{scalabilityMode:"L3T3"}]});let t=await e.createOffer();try{e.close()}catch(e){}e=void 0;let r=tC(t.sdp);return e0.getLocalRtpCapabilities(r)}catch(t){try{e?.close()}catch(e){}throw e=void 0,t}},getNativeSctpCapabilities:async()=>(eY.debug("getNativeSctpCapabilities()"),{numStreams:eX})}}static getLocalRtpCapabilities(e,t=[]){let r=eQ.extractRtpCapabilities({sdpObject:e});for(let e of(ee.validateAndNormalizeRtpCapabilities(r),eJ.addNackSupportForOpus(r),t))eJ.addHeaderExtensionSupport(r,e);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:n,additionalSettings:o,getSendExtendedRtpCapabilities:c}){super(),eY.debug("constructor()"),this._direction=e,this._remoteSdp=new eB.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s}),this._getSendExtendedRtpCapabilities=c,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}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(eY.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return eZ}close(){if(eY.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch(e){}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),eY.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),eY.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){let e=await this._pc.createOffer({iceRestart:!0});eY.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);let t={type:"answer",sdp:this._remoteSdp.getSdp()};eY.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{let e={type:"offer",sdp:this._remoteSdp.getSdp()};eY.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();eY.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,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:s,codec:a,onRtpSender:n}){if(this.assertNotClosed(),this.assertSendDirection(),eY.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1){let e=1;for(let t of r){let r=t.scalabilityMode?(0,e$.parse)(t.scalabilityMode).temporalLayers:3;r>e&&(e=r)}r.forEach((t,r)=>{t.rid=`r${r}`,t.scalabilityMode=`L1T${e}`})}let o=this._remoteSdp.getNextMediaSectionIdx(),c=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});n&&n(c.sender);let d=await this._pc.createOffer(),l=tC(d.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let p=[];p.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let h=e0.getLocalRtpCapabilities(l,p),u=this._getSendExtendedRtpCapabilities(h),m=ee.getSendingRtpParameters(e.kind,u);m.codecs=ee.reduceCodecs(m.codecs,a);let f=ee.getSendingRemoteRtpParameters(e.kind,u);if(f.codecs=ee.reduceCodecs(f.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l}),s?.absCaptureTime){let e=l.media[o.idx];eQ.addHeaderExtension({offerMediaObject:e,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:f.headerExtensions.find(e=>"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time"===e.uri).id}),d={type:"offer",sdp:tk(l)}}eY.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let g=c.mid;m.mid=g;let v=(l=tC(this._pc.localDescription.sdp)).media[o.idx];if(m.rtcp.cname=eQ.getCname({offerMediaObject:v}),m.msid=`${t??this._sendStream.id} ${e.id}`,r)if(1===r.length){let e=eK.getRtpEncodings({offerMediaObject:v});Object.assign(e[0],r[0]),m.encodings=e}else m.encodings=r;else m.encodings=eK.getRtpEncodings({offerMediaObject:v});this._remoteSdp.send({offerMediaObject:v,reuseMid:o.reuseMid,offerRtpParameters:m,answerRtpParameters:f,codecOptions:i});let b={type:"answer",sdp:this._remoteSdp.getSdp()};return eY.debug("send() | calling pc.setRemoteDescription() [answer:%o]",b),await this._pc.setRemoteDescription(b),this._mapMidTransceiver.set(g,c),{localId:g,rtpParameters:m,rtpSender:c.sender}}async stopSending(e){if(this.assertSendDirection(),eY.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();eY.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};eY.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),eY.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();eY.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};eY.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),eY.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();eY.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};eY.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?eY.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):eY.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(),eY.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();eY.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let a={type:"answer",sdp:this._remoteSdp.getSdp()};eY.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),eY.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();eY.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let a={type:"answer",sdp:this._remoteSdp.getSdp()};eY.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 a={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:s};eY.debug("sendDataChannel() [options:%o]",a);let n=this._pc.createDataChannel(i,a);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%eX.MIS,!this._hasDataChannelMediaSection){let e=await this._pc.createOffer(),t=tC(e.sdp),r=t.media.find(e=>"application"===e.type);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),eY.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()};eY.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:n,sctpStreamParameters:{streamId:a.id,ordered:a.ordered,maxPacketLifeTime:a.maxPacketLifeTime,maxRetransmits:a.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;eY.debug("receive() [trackId:%s, kind:%s]",e,i);let n=s.mid??String(this._mapMidTransceiver.size);r.set(e,n);let{msidStreamId:o}=eJ.getMsidStreamIdAndTrackId(s.msid);this._remoteSdp.receive({mid:n,kind:i,offerRtpParameters:s,streamId:a??o??s.rtcp?.cname??"-",trackId:e})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};for(let t of(eY.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i),e)){let{trackId:e,onRtpReceiver:i}=t;if(i){let t=r.get(e),s=this._pc.getTransceivers().find(e=>e.mid===t);if(!s)throw Error("transceiver not found");i(s.receiver)}}let s=await this._pc.createAnswer(),a=tC(s.sdp);for(let t of e){let{trackId:e,rtpParameters:i}=t,s=r.get(e),n=a.media.find(e=>String(e.mid)===s);eQ.applyCodecParameters({offerRtpParameters:i,answerMediaObject:n})}for(let i of(s={type:"answer",sdp:tk(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),eY.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){eY.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()};eY.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();for(let t of(eY.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)){eY.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()};eY.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();eY.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)){eY.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()};eY.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();eY.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:a,maxRetransmits:n}=e,o={negotiated:!0,id:i,ordered:s,maxPacketLifeTime:a,maxRetransmits:n,protocol:r};eY.debug("receiveDataChannel() [options:%o]",o);let c=this._pc.createDataChannel(t,o);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let e={type:"offer",sdp:this._remoteSdp.getSdp()};eY.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();if(!this._transportReady){let e=tC(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}eY.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:c}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=tC(this._pc.localDescription.sdp));let r=eQ.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}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{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")}};assertNotClosed(){if(this._closed)throw new J.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')}}eT.Chrome111=e0;var e1={};Object.defineProperty(e1,"__esModule",{value:!0}),e1.Chrome74=void 0;var Q=l("7Wufc"),K=l("lY6O0"),ee=l("kIl0y");const e2=new Q.Logger("Chrome74"),e3="Chrome74",e4={OS:1024,MIS:1024};class e6 extends K.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:e3,factory:e=>new e6(e),getNativeRtpCapabilities:async()=>{e2.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){}e=void 0;let r=tC(t.sdp);return e6.getLocalRtpCapabilities(r)}catch(t){try{e?.close()}catch(e){}throw e=void 0,t}},getNativeSctpCapabilities:async()=>(e2.debug("getNativeSctpCapabilities()"),{numStreams:e4})}}static getLocalRtpCapabilities(e,t=[]){let r=eQ.extractRtpCapabilities({sdpObject:e});for(let e of(ee.validateAndNormalizeRtpCapabilities(r),eJ.addNackSupportForOpus(r),t))eJ.addHeaderExtensionSupport(r,e);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:n,additionalSettings:o,getSendExtendedRtpCapabilities:c}){super(),e2.debug("constructor()"),this._direction=e,this._remoteSdp=new eB.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s}),this._getSendExtendedRtpCapabilities=c,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}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(e2.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return e3}close(){if(e2.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch(e){}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),e2.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),e2.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){let e=await this._pc.createOffer({iceRestart:!0});e2.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);let t={type:"answer",sdp:this._remoteSdp.getSdp()};e2.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{let e={type:"offer",sdp:this._remoteSdp.getSdp()};e2.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();e2.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,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:s,codec:a}){let n;this.assertNotClosed(),this.assertSendDirection(),e2.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((e,t)=>{e.rid=`r${t}`});let o=this._remoteSdp.getNextMediaSectionIdx(),c=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r}),d=await this._pc.createOffer(),l=tC(d.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let p=[];p.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let h=e6.getLocalRtpCapabilities(l,p),u=this._getSendExtendedRtpCapabilities(h),m=ee.getSendingRtpParameters(e.kind,u);m.codecs=ee.reduceCodecs(m.codecs,a);let f=ee.getSendingRemoteRtpParameters(e.kind,u);f.codecs=ee.reduceCodecs(f.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l});let g=!1,v=(0,e$.parse)((r??[{}])[0].scalabilityMode);r?.length===1&&v.spatialLayers>1&&"video/vp9"===m.codecs[0].mimeType.toLowerCase()&&(e2.debug("send() | enabling legacy simulcast for VP9 SVC"),g=!0,n=(l=tC(d.sdp)).media[o.idx],eK.addLegacySimulcast({offerMediaObject:n,numStreams:v.spatialLayers}),d={type:"offer",sdp:tk(l)}),e2.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),s?.absCaptureTime&&(n=l.media[o.idx],eQ.addHeaderExtension({offerMediaObject:n,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:f.headerExtensions.find(e=>"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time"===e.uri).id}),d={type:"offer",sdp:tk(l)}),await this._pc.setLocalDescription(d);let b=c.mid;if(m.mid=b,n=(l=tC(this._pc.localDescription.sdp)).media[o.idx],m.rtcp.cname=eQ.getCname({offerMediaObject:n}),m.msid=`${t??this._sendStream.id} ${e.id}`,r)if(1===r.length){let e=eK.getRtpEncodings({offerMediaObject:n});Object.assign(e[0],r[0]),g&&(e=[e[0]]),m.encodings=e}else m.encodings=r;else m.encodings=eK.getRtpEncodings({offerMediaObject:n});if(m.encodings.length>1&&("video/vp8"===m.codecs[0].mimeType.toLowerCase()||"video/h264"===m.codecs[0].mimeType.toLowerCase()))for(let e of m.encodings)e.scalabilityMode?e.scalabilityMode=`L1T${v.temporalLayers}`:e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:n,reuseMid:o.reuseMid,offerRtpParameters:m,answerRtpParameters:f,codecOptions:i});let y={type:"answer",sdp:this._remoteSdp.getSdp()};return e2.debug("send() | calling pc.setRemoteDescription() [answer:%o]",y),await this._pc.setRemoteDescription(y),this._mapMidTransceiver.set(b,c),{localId:b,rtpParameters:m,rtpSender:c.sender}}async stopSending(e){if(this.assertSendDirection(),e2.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();e2.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};e2.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),e2.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();e2.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};e2.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),e2.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();e2.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};e2.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?e2.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):e2.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(),e2.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();e2.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let a={type:"answer",sdp:this._remoteSdp.getSdp()};e2.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),e2.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();e2.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let a={type:"answer",sdp:this._remoteSdp.getSdp()};e2.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 a={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:s};e2.debug("sendDataChannel() [options:%o]",a);let n=this._pc.createDataChannel(i,a);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%e4.MIS,!this._hasDataChannelMediaSection){let e=await this._pc.createOffer(),t=tC(e.sdp),r=t.media.find(e=>"application"===e.type);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),e2.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()};e2.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:n,sctpStreamParameters:{streamId:a.id,ordered:a.ordered,maxPacketLifeTime:a.maxPacketLifeTime,maxRetransmits:a.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;e2.debug("receive() [trackId:%s, kind:%s]",e,i);let n=s.mid??String(this._mapMidTransceiver.size);r.set(e,n);let{msidStreamId:o}=eJ.getMsidStreamIdAndTrackId(s.msid);this._remoteSdp.receive({mid:n,kind:i,offerRtpParameters:s,streamId:a??o??s.rtcp?.cname??"-",trackId:e})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};e2.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);let s=await this._pc.createAnswer(),a=tC(s.sdp);for(let t of e){let{trackId:e,rtpParameters:i}=t,s=r.get(e),n=a.media.find(e=>String(e.mid)===s);eQ.applyCodecParameters({offerRtpParameters:i,answerMediaObject:n})}for(let i of(s={type:"answer",sdp:tk(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),e2.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){e2.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()};e2.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();for(let t of(e2.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)){e2.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()};e2.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();e2.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)){e2.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()};e2.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();e2.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:a,maxRetransmits:n}=e,o={negotiated:!0,id:i,ordered:s,maxPacketLifeTime:a,maxRetransmits:n,protocol:r};e2.debug("receiveDataChannel() [options:%o]",o);let c=this._pc.createDataChannel(t,o);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let e={type:"offer",sdp:this._remoteSdp.getSdp()};e2.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();if(!this._transportReady){let e=tC(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}e2.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:c}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=tC(this._pc.localDescription.sdp));let r=eQ.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}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{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")}};assertNotClosed(){if(this._closed)throw new J.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')}}e1.Chrome74=e6;var e5={};Object.defineProperty(e5,"__esModule",{value:!0}),e5.Firefox120=void 0;var K=l("lY6O0"),Q=l("7Wufc"),ee=l("kIl0y");const e9=new Q.Logger("Firefox120"),e8="Firefox120",e7={OS:16,MIS:2048};class te extends K.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:e8,factory:e=>new te(e),getNativeRtpCapabilities:async()=>{e9.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){}e=void 0;let s=tC(i.sdp);return te.getLocalRtpCapabilities(s)}catch(i){try{t.remove()}catch(e){}try{r.stop()}catch(e){}try{e?.close()}catch(e){}throw e=void 0,i}},getNativeSctpCapabilities:async()=>(e9.debug("getNativeSctpCapabilities()"),{numStreams:e7})}}static getLocalRtpCapabilities(e){let t=eQ.extractRtpCapabilities({sdpObject:e});return ee.validateAndNormalizeRtpCapabilities(t),t}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:n,additionalSettings:o,getSendExtendedRtpCapabilities:c}){super(),e9.debug("constructor()"),this._direction=e,this._remoteSdp=new eB.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s}),this._getSendExtendedRtpCapabilities=c,this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:n??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...o}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(e9.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return e8}close(){if(e9.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch(e){}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){throw this.assertNotClosed(),new J.UnsupportedError("not supported")}async restartIce(e){if(this.assertNotClosed(),e9.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){let e=await this._pc.createOffer({iceRestart:!0});e9.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);let t={type:"answer",sdp:this._remoteSdp.getSdp()};e9.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{let e={type:"offer",sdp:this._remoteSdp.getSdp()};e9.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();e9.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,streamId:t,encodings:r,codecOptions:i,codec:s,onRtpSender:a}){this.assertNotClosed(),this.assertSendDirection(),e9.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((e,t)=>{e.rid=`r${t}`});let n=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});a&&a(n.sender);let o=await this._pc.createOffer(),c=tC(o.sdp);c.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let d=te.getLocalRtpCapabilities(c),l=this._getSendExtendedRtpCapabilities(d),p=ee.getSendingRtpParameters(e.kind,l);p.codecs=ee.reduceCodecs(p.codecs,s);let h=ee.getSendingRemoteRtpParameters(e.kind,l);h.codecs=ee.reduceCodecs(h.codecs,s),this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:c});let u=(0,e$.parse)((r??[{}])[0].scalabilityMode);e9.debug("send() | calling pc.setLocalDescription() [offer:%o]",o),await this._pc.setLocalDescription(o);let m=n.mid;p.mid=m;let f=(c=tC(this._pc.localDescription.sdp)).media[c.media.length-1];if(p.rtcp.cname=eQ.getCname({offerMediaObject:f}),p.msid=`${t??this._sendStream.id} ${e.id}`,r)if(1===r.length){let e=eK.getRtpEncodings({offerMediaObject:f});Object.assign(e[0],r[0]),p.encodings=e}else p.encodings=r;else p.encodings=eK.getRtpEncodings({offerMediaObject:f});if(p.encodings.length>1&&("video/vp8"===p.codecs[0].mimeType.toLowerCase()||"video/h264"===p.codecs[0].mimeType.toLowerCase()))for(let e of p.encodings)e.scalabilityMode?e.scalabilityMode=`L1T${u.temporalLayers}`:e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:f,offerRtpParameters:p,answerRtpParameters:h,codecOptions:i});let g={type:"answer",sdp:this._remoteSdp.getSdp()};return e9.debug("send() | calling pc.setRemoteDescription() [answer:%o]",g),await this._pc.setRemoteDescription(g),this._mapMidTransceiver.set(m,n),{localId:m,rtpParameters:p,rtpSender:n.sender}}async stopSending(e){if(this.assertSendDirection(),e9.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();e9.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};e9.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),e9.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();e9.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};e9.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),e9.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();e9.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};e9.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?e9.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):e9.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(),e9.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();e9.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let a={type:"answer",sdp:this._remoteSdp.getSdp()};e9.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),e9.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();e9.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let a={type:"answer",sdp:this._remoteSdp.getSdp()};e9.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 a={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:s};e9.debug("sendDataChannel() [options:%o]",a);let n=this._pc.createDataChannel(i,a);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%e7.MIS,!this._hasDataChannelMediaSection){let e=await this._pc.createOffer(),t=tC(e.sdp),r=t.media.find(e=>"application"===e.type);this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:t}),e9.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()};e9.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:n,sctpStreamParameters:{streamId:a.id,ordered:a.ordered,maxPacketLifeTime:a.maxPacketLifeTime,maxRetransmits:a.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;e9.debug("receive() [trackId:%s, kind:%s]",e,i);let n=s.mid??String(this._mapMidTransceiver.size);r.set(e,n);let{msidStreamId:o}=eJ.getMsidStreamIdAndTrackId(s.msid);this._remoteSdp.receive({mid:n,kind:i,offerRtpParameters:s,streamId:a??o??s.rtcp?.cname??"-",trackId:e})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};for(let t of(e9.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i),e)){let{trackId:e,onRtpReceiver:i}=t;if(i){let t=r.get(e),s=this._pc.getTransceivers().find(e=>e.mid===t);if(!s)throw Error("transceiver not found");i(s.receiver)}}let s=await this._pc.createAnswer(),a=tC(s.sdp);for(let t of e){let{trackId:e,rtpParameters:i}=t,n=r.get(e),o=a.media.find(e=>String(e.mid)===n);eQ.applyCodecParameters({offerRtpParameters:i,answerMediaObject:o}),s={type:"answer",sdp:tk(a)}}for(let i of(this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:a}),e9.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){e9.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()};e9.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();for(let t of(e9.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)){e9.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()};e9.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();e9.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)){e9.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()};e9.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();e9.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:a,maxRetransmits:n}=e,o={negotiated:!0,id:i,ordered:s,maxPacketLifeTime:a,maxRetransmits:n,protocol:r};e9.debug("receiveDataChannel() [options:%o]",o);let c=this._pc.createDataChannel(t,o);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let e={type:"offer",sdp:this._remoteSdp.getSdp()};e9.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();if(!this._transportReady){let e=tC(t.sdp);await this.setupTransport({localDtlsRole:"client",localSdpObject:e})}e9.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:c}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=tC(this._pc.localDescription.sdp));let r=eQ.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}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{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")}};assertNotClosed(){if(this._closed)throw new J.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')}}e5.Firefox120=te;var tt={};Object.defineProperty(tt,"__esModule",{value:!0}),tt.Safari12=void 0;var K=l("lY6O0"),Q=l("7Wufc"),ee=l("kIl0y");const tr=new Q.Logger("Safari12"),ti="Safari12",ts={OS:1024,MIS:1024};class ta extends K.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:ti,factory:e=>new ta(e),getNativeRtpCapabilities:async()=>{tr.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){}e=void 0;let r=tC(t.sdp);return ta.getLocalRtpCapabilities(r)}catch(t){try{e?.close()}catch(e){}throw e=void 0,t}},getNativeSctpCapabilities:async()=>(tr.debug("getNativeSctpCapabilities()"),{numStreams:ts})}}static getLocalRtpCapabilities(e,t=[]){let r=eQ.extractRtpCapabilities({sdpObject:e});for(let e of(ee.validateAndNormalizeRtpCapabilities(r),eJ.addNackSupportForOpus(r),t))eJ.addHeaderExtensionSupport(r,e);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:n,additionalSettings:o,getSendExtendedRtpCapabilities:c}){super(),tr.debug("constructor()"),this._direction=e,this._remoteSdp=new eB.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s}),this._getSendExtendedRtpCapabilities=c,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}),this._pc.addEventListener("icegatheringstatechange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)}),this._pc.addEventListener("icecandidateerror",e=>{this.emit("@icecandidateerror",e)}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(tr.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return ti}close(){if(tr.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch(e){}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),tr.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),tr.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){let e=await this._pc.createOffer({iceRestart:!0});tr.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);let t={type:"answer",sdp:this._remoteSdp.getSdp()};tr.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{let e={type:"offer",sdp:this._remoteSdp.getSdp()};tr.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();tr.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,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:s,codec:a,onRtpSender:n}){let o;this.assertNotClosed(),this.assertSendDirection(),tr.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t);let c=this._remoteSdp.getNextMediaSectionIdx(),d=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream]});n&&n(d.sender);let l=await this._pc.createOffer(),p=tC(l.sdp);p.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let h=[];h.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let u=ta.getLocalRtpCapabilities(p,h),m=this._getSendExtendedRtpCapabilities(u),f=ee.getSendingRtpParameters(e.kind,m);f.codecs=ee.reduceCodecs(f.codecs,a);let g=ee.getSendingRemoteRtpParameters(e.kind,m);g.codecs=ee.reduceCodecs(g.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:p});let v=(0,e$.parse)((r??[{}])[0].scalabilityMode);r&&r.length>1&&(tr.debug("send() | enabling legacy simulcast"),o=(p=tC(l.sdp)).media[c.idx],eK.addLegacySimulcast({offerMediaObject:o,numStreams:r.length}),l={type:"offer",sdp:tk(p)}),s?.absCaptureTime&&(o=p.media[c.idx],eQ.addHeaderExtension({offerMediaObject:o,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(e=>"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time"===e.uri).id}),l={type:"offer",sdp:tk(p)}),tr.debug("send() | calling pc.setLocalDescription() [offer:%o]",l),await this._pc.setLocalDescription(l);let b=d.mid;if(f.mid=b,o=(p=tC(this._pc.localDescription.sdp)).media[c.idx],f.rtcp.cname=eQ.getCname({offerMediaObject:o}),f.msid=`${t??this._sendStream.id} ${e.id}`,f.encodings=eK.getRtpEncodings({offerMediaObject:o}),r)for(let e=0;e<f.encodings.length;++e)r[e]&&Object.assign(f.encodings[e],r[e]);if(f.encodings.length>1&&("video/vp8"===f.codecs[0].mimeType.toLowerCase()||"video/h264"===f.codecs[0].mimeType.toLowerCase()))for(let e of f.encodings)e.scalabilityMode?e.scalabilityMode=`L1T${v.temporalLayers}`:e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:o,reuseMid:c.reuseMid,offerRtpParameters:f,answerRtpParameters:g,codecOptions:i});let y={type:"answer",sdp:this._remoteSdp.getSdp()};return tr.debug("send() | calling pc.setRemoteDescription() [answer:%o]",y),await this._pc.setRemoteDescription(y),this._mapMidTransceiver.set(b,d),{localId:b,rtpParameters:f,rtpSender:d.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;tr.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();tr.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};tr.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),tr.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();tr.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};tr.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),tr.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();tr.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};tr.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?tr.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):tr.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(),tr.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();tr.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let a={type:"answer",sdp:this._remoteSdp.getSdp()};tr.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),tr.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();tr.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let a={type:"answer",sdp:this._remoteSdp.getSdp()};tr.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 a={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:s};tr.debug("sendDataChannel() [options:%o]",a);let n=this._pc.createDataChannel(i,a);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%ts.MIS,!this._hasDataChannelMediaSection){let e=await this._pc.createOffer(),t=tC(e.sdp),r=t.media.find(e=>"application"===e.type);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),tr.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()};tr.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:n,sctpStreamParameters:{streamId:a.id,ordered:a.ordered,maxPacketLifeTime:a.maxPacketLifeTime,maxRetransmits:a.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;tr.debug("receive() [trackId:%s, kind:%s]",e,i);let n=s.mid??String(this._mapMidTransceiver.size);r.set(e,n);let{msidStreamId:o}=eJ.getMsidStreamIdAndTrackId(s.msid);this._remoteSdp.receive({mid:n,kind:i,offerRtpParameters:s,streamId:a??o??s.rtcp?.cname??"-",trackId:e})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};for(let t of(tr.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i),e)){let{trackId:e,onRtpReceiver:i}=t;if(i){let t=r.get(e),s=this._pc.getTransceivers().find(e=>e.mid===t);if(!s)throw Error("transceiver not found");i(s.receiver)}}let s=await this._pc.createAnswer(),a=tC(s.sdp);for(let t of e){let{trackId:e,rtpParameters:i}=t,s=r.get(e),n=a.media.find(e=>String(e.mid)===s);eQ.applyCodecParameters({offerRtpParameters:i,answerMediaObject:n})}for(let i of(s={type:"answer",sdp:tk(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),tr.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){tr.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()};tr.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();for(let t of(tr.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)){tr.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()};tr.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();tr.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)){tr.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()};tr.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();tr.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:a,maxRetransmits:n}=e,o={negotiated:!0,id:i,ordered:s,maxPacketLifeTime:a,maxRetransmits:n,protocol:r};tr.debug("receiveDataChannel() [options:%o]",o);let c=this._pc.createDataChannel(t,o);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let e={type:"offer",sdp:this._remoteSdp.getSdp()};tr.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();if(!this._transportReady){let e=tC(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}tr.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:c}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=tC(this._pc.localDescription.sdp));let r=eQ.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}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{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")}};assertNotClosed(){if(this._closed)throw new J.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')}}tt.Safari12=ta;var tn={};Object.defineProperty(tn,"__esModule",{value:!0}),tn.ReactNative106=void 0;var K=l("lY6O0"),Q=l("7Wufc"),ee=l("kIl0y");const to=new Q.Logger("ReactNative106"),tc="ReactNative106",td={OS:1024,MIS:1024};class tl extends K.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:tc,factory:e=>new tl(e),getNativeRtpCapabilities:async()=>{to.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){}e=void 0;let r=tC(t.sdp);return tl.getLocalRtpCapabilities(r)}catch(t){try{e?.close()}catch(e){}throw e=void 0,t}},getNativeSctpCapabilities:async()=>(to.debug("getNativeSctpCapabilities()"),{numStreams:td})}}static getLocalRtpCapabilities(e,t=[]){let r=eQ.extractRtpCapabilities({sdpObject:e});for(let e of(ee.validateAndNormalizeRtpCapabilities(r),eJ.addNackSupportForOpus(r),t))eJ.addHeaderExtensionSupport(r,e);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:n,additionalSettings:o,getSendExtendedRtpCapabilities:c}){super(),to.debug("constructor()"),this._direction=e,this._remoteSdp=new eB.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s}),this._getSendExtendedRtpCapabilities=c,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}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(to.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return tc}close(){if(to.debug("close()"),!this._closed){this._closed=!0,this._sendStream.release(!1);try{this._pc.close()}catch(e){}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),to.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),to.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),this._transportReady)if("send"===this._direction){let e=await this._pc.createOffer({iceRestart:!0});to.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",e),await this._pc.setLocalDescription(e);let t={type:"answer",sdp:this._remoteSdp.getSdp()};to.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setRemoteDescription(t)}else{let e={type:"offer",sdp:this._remoteSdp.getSdp()};to.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();to.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,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:s,codec:a,onRtpSender:n}){let o;this.assertNotClosed(),this.assertSendDirection(),to.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((e,t)=>{e.rid=`r${t}`});let c=this._remoteSdp.getNextMediaSectionIdx(),d=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});n&&n(d.sender);let l=await this._pc.createOffer(),p=tC(l.sdp);p.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let h=[];h.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let u=tl.getLocalRtpCapabilities(p,h),m=this._getSendExtendedRtpCapabilities(u),f=ee.getSendingRtpParameters(e.kind,m);f.codecs=ee.reduceCodecs(f.codecs,a);let g=ee.getSendingRemoteRtpParameters(e.kind,m);g.codecs=ee.reduceCodecs(g.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:p});let v=!1,b=(0,e$.parse)((r??[{}])[0].scalabilityMode);r?.length===1&&b.spatialLayers>1&&"video/vp9"===f.codecs[0].mimeType.toLowerCase()&&(to.debug("send() | enabling legacy simulcast for VP9 SVC"),v=!0,o=(p=tC(l.sdp)).media[c.idx],eK.addLegacySimulcast({offerMediaObject:o,numStreams:b.spatialLayers}),l={type:"offer",sdp:tk(p)}),s?.absCaptureTime&&(o=p.media[c.idx],eQ.addHeaderExtension({offerMediaObject:o,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(e=>"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time"===e.uri).id}),l={type:"offer",sdp:tk(p)}),to.debug("send() | calling pc.setLocalDescription() [offer:%o]",l),await this._pc.setLocalDescription(l);let y=d.mid??void 0;if(y||to.warn("send() | missing transceiver.mid (bug in react-native-webrtc, using a workaround"),f.mid=y,o=(p=tC(this._pc.localDescription.sdp)).media[c.idx],f.rtcp.cname=eQ.getCname({offerMediaObject:o}),f.msid=`${t??this._sendStream.id} ${e.id}`,r)if(1===r.length){let e=eK.getRtpEncodings({offerMediaObject:o});Object.assign(e[0],r[0]),v&&(e=[e[0]]),f.encodings=e}else f.encodings=r;else f.encodings=eK.getRtpEncodings({offerMediaObject:o});if(f.encodings.length>1&&("video/vp8"===f.codecs[0].mimeType.toLowerCase()||"video/h264"===f.codecs[0].mimeType.toLowerCase()))for(let e of f.encodings)e.scalabilityMode?e.scalabilityMode=`L1T${b.temporalLayers}`:e.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:o,reuseMid:c.reuseMid,offerRtpParameters:f,answerRtpParameters:g,codecOptions:i});let _={type:"answer",sdp:this._remoteSdp.getSdp()};return to.debug("send() | calling pc.setRemoteDescription() [answer:%o]",_),await this._pc.setRemoteDescription(_),y||(f.mid=y=d.mid),this._mapMidTransceiver.set(y,d),{localId:y,rtpParameters:f,rtpSender:d.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;to.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();to.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};to.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),to.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();to.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};to.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),to.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();to.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};to.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?to.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):to.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(),to.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();to.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let a={type:"answer",sdp:this._remoteSdp.getSdp()};to.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),to.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();to.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let a={type:"answer",sdp:this._remoteSdp.getSdp()};to.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 a={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,protocol:s};to.debug("sendDataChannel() [options:%o]",a);let n=this._pc.createDataChannel(i,a);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%td.MIS,!this._hasDataChannelMediaSection){let e=await this._pc.createOffer(),t=tC(e.sdp),r=t.media.find(e=>"application"===e.type);this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:t}),to.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()};to.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._hasDataChannelMediaSection=!0}return{dataChannel:n,sctpStreamParameters:{streamId:a.id,ordered:a.ordered,maxPacketLifeTime:a.maxPacketLifeTime,maxRetransmits:a.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;to.debug("receive() [trackId:%s, kind:%s]",e,i);let n=s.mid??String(this._mapMidTransceiver.size);r.set(e,n);let{msidStreamId:o}=eJ.getMsidStreamIdAndTrackId(s.msid);this._remoteSdp.receive({mid:n,kind:i,offerRtpParameters:s,streamId:a??o??s.rtcp?.cname??"-",trackId:e})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};for(let t of(to.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i),e)){let{trackId:e,onRtpReceiver:i}=t;if(i){let t=r.get(e),s=this._pc.getTransceivers().find(e=>e.mid===t);if(!s)throw Error("transceiver not found");i(s.receiver)}}let s=await this._pc.createAnswer(),a=tC(s.sdp);for(let t of e){let{trackId:e,rtpParameters:i}=t,s=r.get(e),n=a.media.find(e=>String(e.mid)===s);eQ.applyCodecParameters({offerRtpParameters:i,answerMediaObject:n})}for(let i of(s={type:"answer",sdp:tk(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),to.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){to.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()};to.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();for(let t of(to.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)){to.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()};to.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();to.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)){to.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()};to.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();to.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:a,maxRetransmits:n}=e,o={negotiated:!0,id:i,ordered:s,maxPacketLifeTime:a,maxRetransmits:n,protocol:r};to.debug("receiveDataChannel() [options:%o]",o);let c=this._pc.createDataChannel(t,o);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let e={type:"offer",sdp:this._remoteSdp.getSdp()};to.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",e),await this._pc.setRemoteDescription(e);let t=await this._pc.createAnswer();if(!this._transportReady){let e=tC(t.sdp);await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:e})}to.debug("receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]",t),await this._pc.setLocalDescription(t),this._hasDataChannelMediaSection=!0}return{dataChannel:c}}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=tC(this._pc.localDescription.sdp));let r=eQ.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}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{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")}};assertNotClosed(){if(this._closed)throw new J.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')}}tn.ReactNative106=tl;const tp=new Q.Logger("Device");function th(e,t){return tp.debug("detectDevice()"),e||"object"!=typeof navigator||(e=navigator.userAgent),t||"object"!=typeof navigator||(t=navigator.userAgentData),tf(e,t)}async function tu(e,t){return tp.debug("detectDeviceAsync()"),e||"object"!=typeof navigator||(e=navigator.userAgent),t||"object"!=typeof navigator||(t=navigator.userAgentData),tf(e,t)}class tm{_handlerFactory;_handlerName;_loaded=!1;_getSendExtendedRtpCapabilities;_recvRtpCapabilities;_canProduceByKind={audio:!1,video:!1};_sctpCapabilities;_observer=new K.EnhancedEventEmitter;static async factory({handlerName:e,handlerFactory:t}={}){if(tp.debug("factory()"),e&&t)throw TypeError("just one of handlerName or handlerInterface can be given");if(!e&&!t&&!(e=await tu()))throw new J.UnsupportedError("device not supported");return new tm({handlerName:e,handlerFactory:t})}constructor({handlerName:e,handlerFactory:t}={}){if(tp.debug("constructor()"),e&&t)throw TypeError("just one of handlerName or handlerInterface can be given");if(t)this._handlerFactory=t;else{if(e)tp.debug("constructor() | handler given: %s",e);else if(e=th())tp.debug("constructor() | detected handler: %s",e);else throw new J.UnsupportedError("device not supported");switch(e){case"Chrome111":this._handlerFactory=eT.Chrome111.createFactory();break;case"Chrome74":this._handlerFactory=e1.Chrome74.createFactory();break;case"Firefox120":this._handlerFactory=e5.Firefox120.createFactory();break;case"Safari12":this._handlerFactory=tt.Safari12.createFactory();break;case"ReactNative106":this._handlerFactory=tn.ReactNative106.createFactory();break;default:throw TypeError(`unknown handlerName "${e}"`)}}this._handlerName=this._handlerFactory.name}get handlerName(){return this._handlerName}get loaded(){return this._loaded}get rtpCapabilities(){if(!this._loaded)throw new J.InvalidStateError("not loaded");return this._recvRtpCapabilities}get sctpCapabilities(){if(!this._loaded)throw new J.InvalidStateError("not loaded");return this._sctpCapabilities}get observer(){return this._observer}async load({routerRtpCapabilities:e,preferLocalCodecsOrder:t=!1}){if(tp.debug("load() [routerRtpCapabilities:%o]",e),this._loaded)throw new J.InvalidStateError("already loaded");let r=X.clone(e);ee.validateAndNormalizeRtpCapabilities(r);let{getNativeRtpCapabilities:i,getNativeSctpCapabilities:s}=this._handlerFactory,a=X.clone(await i());ee.validateAndNormalizeRtpCapabilities(a),tp.debug("load() | got native RTP capabilities:%o",a),this._getSendExtendedRtpCapabilities=e=>X.clone(ee.getExtendedRtpCapabilities(e,r,t));let n=ee.getExtendedRtpCapabilities(a,r,!1);this._recvRtpCapabilities=ee.getRecvRtpCapabilities(n),ee.validateAndNormalizeRtpCapabilities(this._recvRtpCapabilities),tp.debug("load() | got receiving RTP capabilities:%o",this._recvRtpCapabilities),this._canProduceByKind.audio=ee.canSend("audio",this._recvRtpCapabilities),this._canProduceByKind.video=ee.canSend("video",this._recvRtpCapabilities),this._sctpCapabilities=await s(),ee.validateSctpCapabilities(this._sctpCapabilities),tp.debug("load() | got native SCTP capabilities:%o",this._sctpCapabilities),tp.debug("load() succeeded"),this._loaded=!0}canProduce(e){if(this._loaded){if("audio"!==e&&"video"!==e)throw TypeError(`invalid kind "${e}"`)}else throw new J.InvalidStateError("not loaded");return this._canProduceByKind[e]}createSendTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:n,additionalSettings:o,appData:c}){return tp.debug("createSendTransport()"),this.createTransport({direction:"send",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:n,additionalSettings:o,appData:c})}createRecvTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:n,additionalSettings:o,appData:c}){return tp.debug("createRecvTransport()"),this.createTransport({direction:"recv",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:s,iceServers:a,iceTransportPolicy:n,additionalSettings:o,appData:c})}createTransport({direction:e,id:t,iceParameters:r,iceCandidates:i,dtlsParameters:s,sctpParameters:a,iceServers:n,iceTransportPolicy:o,additionalSettings:c,appData:d}){if(this._loaded)if("string"!=typeof t)throw TypeError("missing id");else if("object"!=typeof r)throw TypeError("missing iceParameters");else if(Array.isArray(i)){if("object"!=typeof s)throw TypeError("missing dtlsParameters");else if(a&&"object"!=typeof a)throw TypeError("wrong sctpParameters");else if(d&&"object"!=typeof d)throw TypeError("if given, appData must be an object")}else throw TypeError("missing iceCandidates");else throw new J.InvalidStateError("not loaded");let l=new et.Transport({direction:e,id:t,iceParameters:r,iceCandidates:i,dtlsParameters:s,sctpParameters:a,iceServers:n,iceTransportPolicy:o,additionalSettings:c,appData:d,handlerFactory:this._handlerFactory,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities,recvRtpCapabilities:this._recvRtpCapabilities,canProduceByKind:this._canProduceByKind});return this._observer.safeEmit("newtransport",l),l}}function tf(e,t){tp.debug('detectDeviceImpl() [userAgent:"%s", userAgentData:%o]',e,t);let r=function(e,t){if(tp.debug("getChromiumMajorVersion()"),tg(e,t))return void tp.debug("getChromiumMajorVersion() | this is iOS => undefined");if(tv())return void tp.debug("getChromiumMajorVersion() | this is React-Native => undefined");if(t){let e=(t.brands??[]).find(e=>"Chromium"===e.brand);if(e){let t=Number(e.version);return tp.debug(`getChromiumMajorVersion() | Chromium major version based on NavigatorUAData => ${t}`),t}}let r=e?.match(/\b(?:Chrome|Chromium)\/(\w+)/i);if(r?.[1]){let e=Number(r[1]);return tp.debug(`getChromiumMajorVersion() | Chromium major version based on User-Agent => ${e}`),e}tp.debug("getChromiumMajorVersion() | this is not Chromium => undefined")}(e,t);if(r)if(r>=111)return tp.debug("detectDeviceImpl() | using Chrome111 handler"),"Chrome111";else if(r>=74)return tp.debug("detectDeviceImpl() | using Chrome74 handler"),"Chrome74";else return void tp.warn("detectDeviceImpl() | unsupported Chromium based browser/version");let i=function(e){if(tp.debug("getFirefoxMajorVersion()"),tg(e))return void tp.debug("getFirefoxMajorVersion() | this is iOS => undefined");if(tv())return void tp.debug("getFirefoxMajorVersion() | this is React-Native => undefined");let t=e?.match(/\bFirefox\/(\w+)/i);if(t?.[1]){let e=Number(t[1]);return tp.debug(`getFirefoxMajorVersion() | Firefox major version based on User-Agent => ${e}`),e}tp.debug("getFirefoxMajorVersion() | this is not Firefox => undefined")}(e);if(i)if(i>=120)return tp.debug("detectDeviceImpl() | using Firefox120 handler"),"Firefox120";else return void tp.warn("detectDeviceImpl() | unsupported Firefox browser/version");let s=function(e){if(tp.debug("getMacOSWebKitMajorVersion()"),tg(e))return void tp.debug("getMacOSWebKitMajorVersion() | this is iOS => undefined");if(tv())return void tp.debug("getMacOSWebKitMajorVersion() | this is React-Native => undefined");if(!(e&&/\bSafari\b/i.test(e)&&!/\bChrome\b/i.test(e)&&!/\bChromium\b/i.test(e)&&!/\bFirefox\b/i.test(e)))return void tp.debug("getMacOSWebKitMajorVersion() | this is not Safari => undefined");let t=e.match(/AppleWebKit\/(\w+)/i);if(t?.[1]){let e=Number(t[1]);return tp.debug(`getMacOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${e}`),e}tp.debug("getMacOSWebKitMajorVersion() | this is not WebKit => undefined")}(e);if(s)if(s>=605)return tp.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";else return void tp.warn("detectDeviceImpl() | unsupported desktop Safari browser/version");let a=function(e){if(tp.debug("getIOSWebKitMajorVersion()"),!tg(e))return void tp.debug("getIOSWebKitMajorVersion() | this is not iOS => undefined");if(tv())return void tp.debug("getIOSWebKitMajorVersion() | this is React-Native => undefined");let t=e?.match(/AppleWebKit\/(\w+)/i);if(t?.[1]){let e=Number(t[1]);return tp.debug(`getIOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${e}`),e}tp.debug("getIOSWebKitMajorVersion() | this is not WebKit => undefined")}(e);if(a)if(a>=605)return tp.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";else return void tp.warn("detectDeviceImpl() | unsupported iOS Safari based browser/version");if(tv())if("undefined"!=typeof RTCPeerConnection&&"undefined"!=typeof RTCRtpTransceiver)return tp.debug("detectDeviceImpl() | using ReactNative106 handler"),"ReactNative106";else return void tp.warn("detectDeviceImpl() | unsupported react-native-webrtc version without RTCPeerConnection or RTCRtpTransceiver, forgot to call registerGlobals() on it?");tp.warn('detectDeviceImpl() | device not supported [userAgent:"%s", userAgentData:%o]',e,t)}function tg(e,t){return(tp.debug("isIOS()"),t?.platform==="iOS")?(tp.debug("isIOS() | this is iOS based on NavigatorUAData.platform => true"),!0):t?.platform?(tp.debug("isIOS() | this is not iOS based on NavigatorUAData.platform => false"),!1):e&&/iPad|iPhone|iPod/.test(e)?(tp.debug("isIOS() | this is iOS based on User-Agent => true"),!0):"object"==typeof navigator&&"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1?(tp.debug("isIOS() | this is iPadOS 13+ based on User-Agent => true"),!0):(tp.debug("isIOS() | this is not iOS => false"),!1)}function tv(){return(tp.debug("isReactNative()"),"object"==typeof navigator&&"ReactNative"===navigator.product)?(tp.debug("isReactNative() | this is React-Native based on navigator.product"),!0):(tp.debug("isReactNative() | this is not React-Native => false"),!1)}G.Device=tm,Object.defineProperty(U,"Device",{enumerable:!0,get:function(){return G.Device}}),Object.defineProperty(U,"detectDevice",{enumerable:!0,get:function(){return G.detectDevice}}),Object.defineProperty(U,"detectDeviceAsync",{enumerable:!0,get:function(){return G.detectDeviceAsync}}),Object.defineProperty(U,"parseScalabilityMode",{enumerable:!0,get:function(){return e$.parse}}),U.ortc=l("kIl0y"),U.enhancedEvents=l("lY6O0");var tb={};Object.defineProperty(tb,"__esModule",{value:!0}),tb.FakeHandler=void 0;var ty={};Object.defineProperty(ty,"__esModule",{value:!0}),ty.FakeMediaStreamTrack=void 0;for(var t_,tw,tS,tk,tC,tR,tT,tE,tP=256,tx=[];tP--;)tx[tP]=(tP+256).toString(16).substring(1);tT=function(){var e,t=0,r="";if(!tE||tP+16>256){for(tE=Array(t=256);t--;)tE[t]=256*Math.random()|0;t=tP=0}for(;t<16;t++)e=tE[tP+t],6==t?r+=tx[15&e|64]:8==t?r+=tx[63&e|128]:r+=tx[e],1&t&&t>1&&t<11&&(r+="-");return tP++,r};var tM={};Object.defineProperty(tM,"__esModule",{value:!0}),tM.FakeEventTarget=void 0,tM.FakeEventTarget=class{listeners={};addEventListener(e,t,r){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:"function"==typeof t?t:t.handleEvent,once:"object"==typeof r&&!0===r.once}))}removeEventListener(e,t,r){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(e=>e.callback!==("function"==typeof t?t:t.handleEvent)))}dispatchEvent(e){if(!e||"string"!=typeof e.type)throw Error("invalid event object");let t=this.listeners[e.type];if(!t)return!0;for(let r of[...t]){try{r.callback.call(this,e)}catch(e){setTimeout(()=>{throw e},0)}r.once&&this.removeEventListener(e.type,r.callback)}return!e.defaultPrevented}};var tI={};Object.defineProperty(tI,"__esModule",{value:!0}),tI.FakeEvent=void 0;class tD{NONE=0;CAPTURING_PHASE=1;AT_TARGET=2;BUBBLING_PHASE=3;type;bubbles;cancelable;defaultPrevented=!1;composed=!1;currentTarget=null;eventPhase=this.NONE;isTrusted=!0;target=null;timeStamp=0;cancelBubble=!1;returnValue=!0;srcElement=null;constructor(e,t={}){this.type=e,this.bubbles=t.bubbles??!1,this.cancelable=t.cancelable??!1}preventDefault(){this.cancelable&&(this.defaultPrevented=!0)}stopPropagation(){}stopImmediatePropagation(){}composedPath(){return[]}initEvent(e,t,r){}}tI.FakeEvent=tD;var tL={};Object.defineProperty(tL,"__esModule",{value:!0}),tL.clone=function(e){if(void 0!==e)return Number.isNaN(e)?NaN:"function"==typeof structuredClone?structuredClone(e):JSON.parse(JSON.stringify(e))};class tO extends tM.FakeEventTarget{#e;#t;#r;#i;#s;#a;#n;#o;#c;#d;#l;#p=null;#h=null;#u=null;#m=null;#f=null;constructor({kind:e,id:t,label:r,contentHint:i,enabled:s,muted:a,readyState:n,capabilities:o,constraints:c,settings:d,data:l}){super(),this.#e=t??tT(),this.#t=e,this.#r=r??"",this.#n=i??"",this.#s=s??!0,this.#a=a??!1,this.#i=n??"live",this.#o=o??{},this.#c=c??{},this.#d=d??{},this.#l=l??{}}get id(){return this.#e}get kind(){return this.#t}get label(){return this.#r}get contentHint(){return this.#n}set contentHint(e){this.#n=e}get enabled(){return this.#s}set enabled(e){let t=this.#s!==e;this.#s=e,t&&this.dispatchEvent(new tI.FakeEvent("enabledchange"))}get muted(){return this.#a}get readyState(){return this.#i}get data(){return this.#l}set data(e){this.#l=e}get onmute(){return this.#p}set onmute(e){this.#p&&this.removeEventListener("mute",this.#p),this.#p=e,e&&this.addEventListener("mute",e)}get onunmute(){return this.#h}set onunmute(e){this.#h&&this.removeEventListener("unmute",this.#h),this.#h=e,e&&this.addEventListener("unmute",e)}get onended(){return this.#u}set onended(e){this.#u&&this.removeEventListener("ended",this.#u),this.#u=e,e&&this.addEventListener("ended",e)}get onenabledchange(){return this.#m}set onenabledchange(e){this.#m&&this.removeEventListener("enabledchange",this.#m),this.#m=e,e&&this.addEventListener("enabledchange",e)}get onstopped(){return this.#f}set onstopped(e){this.#f&&this.removeEventListener("stopped",this.#f),this.#f=e,e&&this.addEventListener("stopped",e)}addEventListener(e,t,r){super.addEventListener(e,t,r)}removeEventListener(e,t,r){super.removeEventListener(e,t,r)}stop(){"ended"!==this.#i&&(this.#i="ended",this.dispatchEvent(new tI.FakeEvent("stopped")))}clone({id:e,data:t}={}){return new tO({id:e??tT(),kind:this.#t,label:this.#r,contentHint:this.#n,enabled:this.#s,muted:this.#a,readyState:this.#i,capabilities:(0,tL.clone)(this.#o),constraints:(0,tL.clone)(this.#c),settings:(0,tL.clone)(this.#d),data:t??(0,tL.clone)(this.#l)})}getCapabilities(){return this.#o}getConstraints(){return this.#c}async applyConstraints(e={}){return this.#c=e,Promise.resolve()}getSettings(){return this.#d}remoteStop(){"ended"!==this.#i&&(this.#i="ended",this.dispatchEvent(new tI.FakeEvent("stopped")),this.dispatchEvent(new tI.FakeEvent("ended")))}remoteMute(){this.#a||(this.#a=!0,this.dispatchEvent(new tI.FakeEvent("mute")))}remoteUnmute(){this.#a&&(this.#a=!1,this.dispatchEvent(new tI.FakeEvent("unmute")))}}ty.FakeMediaStreamTrack=tO;var K=l("lY6O0"),Q=l("7Wufc"),X=l("2fqxq"),ee=l("kIl0y"),tA={};Object.defineProperty(tA,"__esModule",{value:!0}),tA.FakeEventTarget=void 0,tA.FakeEventTarget=class{listeners={};addEventListener(e,t,r){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:"function"==typeof t?t:t.handleEvent,once:"object"==typeof r&&!0===r.once}))}removeEventListener(e,t,r){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(e=>e.callback!==("function"==typeof t?t:t.handleEvent)))}dispatchEvent(e){if(!e||"string"!=typeof e.type)throw Error("invalid event object");let t=this.listeners[e.type];if(!t)return!0;for(let r of[...t]){try{r.callback.call(this,e)}catch(e){setTimeout(()=>{throw e},0)}r.once&&this.removeEventListener(e.type,r.callback)}return!e.defaultPrevented}};const tj=new Q.Logger("FakeHandler"),tN="FakeHandler";class tF extends K.EnhancedEventEmitter{_closed=!1;_fakeParameters;_getSendExtendedRtpCapabilities;_cname=`CNAME-${X.generateRandomNumber()}`;_defaultSendStreamId=`${X.generateRandomNumber()}`;_transportReady=!1;_nextLocalId=1;_tracks=new Map;_nextSctpStreamId=0;static createFactory(e){return{name:tN,factory:t=>new tF(t,e),getNativeRtpCapabilities:async()=>(tj.debug("getNativeRtpCapabilities()"),tF.getLocalRtpCapabilities(e)),getNativeSctpCapabilities:async()=>(tj.debug("getNativeSctpCapabilities()"),e.generateNativeSctpCapabilities())}}static getLocalRtpCapabilities(e){let t=e.generateNativeRtpCapabilities();return ee.validateAndNormalizeRtpCapabilities(t),t}constructor({getSendExtendedRtpCapabilities:e},t){super(),tj.debug("constructor()"),this._getSendExtendedRtpCapabilities=e,this._fakeParameters=t}get name(){return tN}close(){tj.debug("close()"),this._closed||(this._closed=!0,super.close())}setIceGatheringState(e){this.emit("@icegatheringstatechange",e)}setConnectionState(e){this.emit("@connectionstatechange",e)}async updateIceServers(e){this.assertNotClosed(),tj.debug("updateIceServers()")}async restartIce(e){this.assertNotClosed(),tj.debug("restartIce()")}async getTransportStats(){return this.assertNotClosed(),new Map}async send({track:e,streamId:t,encodings:r,codecOptions:i,codec:s}){this.assertNotClosed(),tj.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),this._transportReady||await this.setupTransport({localDtlsRole:"server"});let a=tF.getLocalRtpCapabilities(this._fakeParameters),n=this._getSendExtendedRtpCapabilities(a),o=ee.getSendingRtpParameters(e.kind,n);o.codecs=ee.reduceCodecs(o.codecs,s);let c=o.codecs.some(e=>/.+\/rtx$/i.test(e.mimeType));for(let i of(o.mid=`mid-${X.generateRandomNumber()}`,o.msid=`${t??"-"} ${e.id}`,r||(r=[{}]),r))i.ssrc=X.generateRandomNumber(),c&&(i.rtx={ssrc:X.generateRandomNumber()});o.encodings=r,o.rtcp={cname:this._cname,reducedSize:!0,mux:!0},o.msid=`${t??this._defaultSendStreamId} ${e.id}`;let d=this._nextLocalId++;return this._tracks.set(d,e),{localId:String(d),rtpParameters:o}}async stopSending(e){if(tj.debug("stopSending() [localId:%s]",e),!this._closed){if(!this._tracks.has(Number(e)))throw Error("local track not found");this._tracks.delete(Number(e))}}async pauseSending(e){this.assertNotClosed()}async resumeSending(e){this.assertNotClosed()}async replaceTrack(e,t){this.assertNotClosed(),t?tj.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):tj.debug("replaceTrack() [localId:%s, no track]",e),this._tracks.delete(Number(e)),this._tracks.set(Number(e),t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),tj.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),tj.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t)}async getSenderStats(e){return this.assertNotClosed(),new Map}async sendDataChannel({ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:s}){return this.assertNotClosed(),this._transportReady||await this.setupTransport({localDtlsRole:"server"}),tj.debug("sendDataChannel()"),{dataChannel:new t$({id:this._nextSctpStreamId++,ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:s}),sctpStreamParameters:{streamId:this._nextSctpStreamId,ordered:e,maxPacketLifeTime:t,maxRetransmits:r}}}async receive(e){this.assertNotClosed();let t=[];for(let r of e){let{trackId:e,kind:i}=r;this._transportReady||await this.setupTransport({localDtlsRole:"client"}),tj.debug("receive() [trackId:%s, kind:%s]",e,i);let s=this._nextLocalId++,a=new ty.FakeMediaStreamTrack({kind:i});this._tracks.set(s,a),t.push({localId:String(s),track:a})}return t}async stopReceiving(e){if(!this._closed)for(let t of e)tj.debug("stopReceiving() [localId:%s]",t),this._tracks.delete(Number(t))}async pauseReceiving(e){this.assertNotClosed()}async resumeReceiving(e){this.assertNotClosed()}async getReceiverStats(e){return this.assertNotClosed(),new Map}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){return this.assertNotClosed(),this._transportReady||await this.setupTransport({localDtlsRole:"client"}),tj.debug("receiveDataChannel()"),{dataChannel:new t$({id:e.streamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:t,protocol:r})}}async setupTransport({localDtlsRole:e,localSdpObject:t}){let r=X.clone(this._fakeParameters.generateLocalDtlsParameters());e&&(r.role=e),this.emit("@connectionstatechange","connecting"),await new Promise((e,t)=>this.emit("@connect",{dtlsParameters:r},e,t)),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new J.InvalidStateError("method called in a closed handler")}}tb.FakeHandler=tF;class t$ extends tA.FakeEventTarget{_id;_negotiated=!0;_ordered;_maxPacketLifeTime;_maxRetransmits;_label;_protocol;_readyState="connecting";_bufferedAmount=0;_bufferedAmountLowThreshold=0;_binaryType="arraybuffer";_onopen=null;_onclosing=null;_onclose=null;_onmessage=null;_onbufferedamountlow=null;_onerror=null;constructor({id:e,ordered:t=!0,maxPacketLifeTime:r=null,maxRetransmits:i=null,label:s="",protocol:a=""}){super(),tj.debug(`constructor() [id:${e}, ordered:${t}, maxPacketLifeTime:${r}, maxRetransmits:${i}, label:${s}, protocol:${a}`),this._id=e,this._ordered=t,this._maxPacketLifeTime=r,this._maxRetransmits=i,this._label=s,this._protocol=a}get id(){return this._id}get negotiated(){return this._negotiated}get ordered(){return this._ordered}get maxPacketLifeTime(){return this._maxPacketLifeTime}get maxRetransmits(){return this._maxRetransmits}get label(){return this._label}get protocol(){return this._protocol}get readyState(){return this._readyState}get bufferedAmount(){return this._bufferedAmount}get bufferedAmountLowThreshold(){return this._bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._bufferedAmountLowThreshold=e}get binaryType(){return this._binaryType}set binaryType(e){this._binaryType=e}get onopen(){return this._onopen}set onopen(e){this._onopen&&this.removeEventListener("open",this._onopen),this._onopen=e,e&&this.addEventListener("open",e)}get onclosing(){return this._onclosing}set onclosing(e){this._onclosing&&this.removeEventListener("closing",this._onclosing),this._onclosing=e,e&&this.addEventListener("closing",e)}get onclose(){return this._onclose}set onclose(e){this._onclose&&this.removeEventListener("close",this._onclose),this._onclose=e,e&&this.addEventListener("close",e)}get onmessage(){return this._onmessage}set onmessage(e){this._onmessage&&this.removeEventListener("message",this._onmessage),this._onmessage=e,e&&this.addEventListener("message",e)}get onbufferedamountlow(){return this._onbufferedamountlow}set onbufferedamountlow(e){this._onbufferedamountlow&&this.removeEventListener("bufferedamountlow",this._onbufferedamountlow),this._onbufferedamountlow=e,e&&this.addEventListener("bufferedamountlow",e)}get onerror(){return this._onerror}set onerror(e){this._onerror&&this.removeEventListener("error",this._onerror),this._onerror=e,e&&this.addEventListener("error",e)}addEventListener(e,t,r){super.addEventListener(e,t,r)}removeEventListener(e,t,r){super.removeEventListener(e,t,r)}close(){["closing","closed"].includes(this._readyState)||(this._readyState="closed")}send(e){if("open"!==this._readyState)throw new J.InvalidStateError("not open")}}Object.defineProperty(U,"FakeHandler",{enumerable:!0,get:function(){return tb.FakeHandler}}),U.testFakeParameters=l("6KyqJ");const tV=new j("StreamerMediasoup");class tB{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(0,U.Device)}catch(e){tV.error("failed to detects device from mediasoup, fallback on auto detection",e);try{let e=navigator.userAgent,t=n(H).getParser(e);window.Sentry&&(window.Sentry.setTag("DeviceDetectionForced",!0),window.Sentry.addBreadcrumb({type:"debug",category:"browser",data:t.getResult()}));let r=t.getOS();if("Safari"===t.getBrowserName()&&"iOS"===r.name&&Number(r.version)>=14.3)return new(0,U.Device)({handlerName:"Safari12"});throw Error("failed to autoDetect browser, falling back to chrome 74")}catch(e){tV.error("deviceAutoDetection",e)}return new(0,U.Device)({handlerName:"Chrome74"})}}();return i.load({routerRtpCapabilities:r}),new tB(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)=>{tV.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}),tV.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)=>{tV.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})}}const tq=window.AudioContext||window.webkitAudioContext;class tz{constructor(){this.audioSources={},this.tracks={},this.audioContext=new tq,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 tW=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())},tH=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 tU=s.Buffer;const tG=async(e,{token:t,base64Image:r,recordingGroup:i})=>{let s=`${f()}.jpeg`,a=tU.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 tW(e,t,c);return{filename:c,url:d}},tQ=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 tW(e,r,c);if(!d.ok)throw Error("Upload failed");return{filename:c,url:l}},tK=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} `)},tJ=new j("LiveAIAgent/Helper/image"),tY=async(e,t=720)=>new Promise((r,i)=>{let s=new Image;s.crossOrigin="anonymous",s.onload=()=>{try{let e=document.createElement("canvas"),a=e.getContext("2d");if(!a)return void i(Error("Could not get canvas context"));let n=s.width,o=s.height;n>o?n>t&&(o=t/n*o,n=t):o>t&&(n=t/o*n,o=t),e.width=n,e.height=o,a.drawImage(s,0,0,n,o);let c=1,d=e.toDataURL("image/jpeg",1),l=Math.round(6*d.length/8);for(;l>2e5;)tJ.debug("closed size:",l,"quality:",c),c-=.1,d=e.toDataURL("image/jpeg",c),l=Math.round(6*d.length/8);r(d);return}catch(e){i(e)}},s.onerror=()=>{i(Error("Failed to load image"))},s.src=e}),tZ=async(e,t,r=!1)=>{let i={output:{voice:t.voice}};r&&(i.input={transcription:{model:"gpt-4o-transcribe"}});let s=JSON.stringify({instructions:`
2
+ ${t.instructions}
3
+ `,tools:e.list(),audio:i}),a=await fetch(`${rW.config.apiUrl}/public/streams/${rW.roomId}/live-agent`,{method:"POST",headers:{"Content-Type":"application/json"},body:s});return await a.json()},tX=()=>f().replace(/-/g,"");class t0{addContent(e){this.content.push({type:"input_text",text:e})}addMediaContent(e,t){this.content.push({type:"input_text",text:`[DEVICE_EVENT] {"type":"${e}","status":"${t}"}`})}addAppContent(e,t){this.content.push({type:"input_text",text:`[APP_EVENT] {"type":"${e}","text":"${t}"}`})}addInstructionContent(e){this.content.push({type:"input_text",text:`[INSTRUCTION] ${e}`})}async addImageContent(e){let t=await tY(e);this.content.push({type:"input_image",image_url:t})}build(){return{event_id:this.id,type:"conversation.item.create",item:{id:this.id,type:"message",role:"user",content:this.content}}}constructor(){this.id=f().replace(/-/g,""),this.status="pending",this.content=[]}}class t1{constructor(e){this.id=tX(),this.type="response.cancel",this.response_id=e}build(){return{event_id:this.id,type:this.type,response_id:this.response_id}}}class t2{static{this.internalIdCounter=0}constructor(e){this.terminated=!1,this.canceled=!1,this.initiator=e,this.id=tX()}setResponseId(e){this.responseId=e}setTerminated(){this.terminated=!0}cancel(){if(this.responseId&&!this.canceled)return this.canceled=!0,new t1(this.responseId)}build(){return{type:"response.create",event_id:this.id,response:{output_modalities:["audio"],metadata:{initial_event_id:this.id}}}}}const t3=new j("LiveAIAgent/PeerConnection");class t4{async init({track:e,onMessage:t,onReady:r}){this.pc=new RTCPeerConnection,this.pc.addTransceiver("audio",{direction:"sendrecv"}),this.onMessage=t,this.pc.addEventListener("close",()=>{t3.info("PeerConnection closed")}),this.audioRenderer=new B({consumerId:"live-ai-agent"}),this.audioRenderer.play(),this.pc.ontrack=e=>{console.log("ontrack",e),this.audioRenderer?.setSource(e.streams[0])},e?this.pc.addTrack(e):this.pc.addTransceiver("audio",{direction:"sendrecv"}),this.setDataChannel(r);let i=await this.pc.createOffer();return await this.pc.setLocalDescription(i),i.sdp}setTrack(e){this.pc?.getTransceivers().forEach(t=>{t.sender.replaceTrack(e),t3.debug("replaceTrack",e,t)})}setDataChannel(e){this.pc&&(this.dc=this.pc.createDataChannel("oai-events"),this.dc.onmessage=e=>{let t=JSON.parse(e.data);if("response.output_audio_transcript.delta"!==t.type&&this.history.push({direction:"receive",message:JSON.stringify(t)}),"response.created"===t.type){console.log(this.responseQueue);let e=this.responseQueue[t.response.metadata.initial_event_id];e?(e.resolve(t),delete this.responseQueue[t.response.metadata.initial_event_id]):t3.error("Response not found in queue:",t.response.metadata.initial_event_id)}if("conversation.item.done"===t.type){let e=t.item;if("function_call"===e.type)return;let r=this.messageQueue[e.id];if("function_call_output"===e.type){console.log(this.toolOutputQueue);let r=this.toolOutputQueue[e?.call_id];if(r){r.resolve(t),delete this.toolOutputQueue[e?.call_id];return}}r?(r.resolve(t),delete this.messageQueue[e.id]):t3.error("Message not found in queue:",e.id)}else if("error"===t.type){if(t.error?.event_id){let e=this.messageQueue[t.error?.event_id];e?(e.reject(t.error),delete this.messageQueue[t.error?.event_id]):t3.error("Message not found in queue:",t.event_id)}}else if("invalid_request_error"===t.type){let e=this.responseQueue[t.event_id];e?(e.reject(t),delete this.responseQueue[t.event_id]):t3.error("Response not found in queue:",t.event_id)}let r=this.messageQueue[t.event_id];console.log("onmessage",t.event_id,r),r&&(r.resolve(t),delete this.messageQueue[t.event_id]),this.onMessage?.(e.data)},this.dc.onopen=()=>{e()},this.dc.onclose=()=>{t3.info("Data channel closed"),this.closed||this.setDataChannel(()=>{})})}async send(e){return new Promise((t,r)=>{this.dc||(t3.error("Data channel not found"),r(Error("Data channel not found"))),this.dc?.readyState!=="open"&&this.pc&&r(Error("Data channel not open")),t3.debug("sending message:",e);let i=JSON.stringify(e);this.messageQueue[e.event_id]={message:e,resolve:t,reject:r,timeout:1e4},this.history.push({direction:"send",message:i}),this.dc?.send(i)})}sendCreateResponse(e){return new Promise(async(t,r)=>{this.dc||(t3.error("Data channel not found"),r(Error("Data channel not found"))),this.dc?.readyState!=="open"&&this.pc&&r(Error("Data channel not open"));let i=JSON.stringify(e);this.responseQueue[e.response.metadata.initial_event_id]={message:e,resolve:t,reject:r},this.history.push({direction:"send",message:i}),this.dc?.send(i)})}sendCreateItem(e){return new Promise(async(t,r)=>{this.dc||(t3.error("Data channel not found"),r(Error("Data channel not found"))),this.dc?.readyState!=="open"&&this.pc&&r(Error("Data channel not open"));let i=JSON.stringify(e);this.messageQueue[e.event_id]={message:e,resolve:t,reject:r,timeout:1e4},this.history.push({direction:"send",message:i}),this.dc?.send(i)})}sendToolOutput(e){return new Promise(async(t,r)=>{this.dc||(t3.error("Data channel not found"),r(Error("Data channel not found"))),this.dc?.readyState!=="open"&&this.pc&&r(Error("Data channel not open"));let i=JSON.stringify(e);this.toolOutputQueue[e.item.call_id]={message:e,resolve:t,reject:r,timeout:1e4},this.history.push({direction:"send",message:i}),this.dc?.send(i)})}async answer(e){let t=new RTCSessionDescription({type:"answer",sdp:e});await this.pc?.setRemoteDescription(t)}stop(){this.closed||(this.closed=!0,this.pc?.close())}constructor(){this.responseQueue={},this.messageQueue={},this.toolOutputQueue={},this.history=[],this.closed=!1}}(0,l("j0yZW").createContext)({});const t6={active:!1,name:"take_photo_from_screen_share",description:"Take a photo from screen share",function:async e=>{console.log("take_photo",e),rW.getDevicesState().screenshare.enabled&&await rW.captureScreenShare()}},t5={active:!1,name:"take_photo_from_camera",description:"Take a photo",function:async e=>{console.log("take_photo",e),rW.getDevicesState().camera.enabled&&await rW.captureVideo()}},t9={active:!1,name:"terminate_call",description:"Terminate call",function:async e=>{console.log("terminate_call",e),await rW.terminateRoom()}},t8={active:!1,name:"start_camera",description:"Start camera",function:async e=>{console.log("start_camera",e),await rW.enableVideo()}},t7={active:!1,name:"stop_camera",description:"Stop camera",function:async e=>{console.log("stop_camera",e),await rW.disableVideo()}},re={active:!1,name:"stop_screen_share",description:"Stop screen share",function:async e=>{console.log("stop_screen_share",e),await rW.disableScreenshare()}},rt={active:!1,name:"start_record",description:"Start record",function:async e=>{console.log("start_record",e),await rW.startRecord()}},rr={active:!1,name:"stop_record",description:"Stop record",function:async e=>{console.log("stop_record",e),await rW.stopRecord()}},ri={active:!1,name:"rotate_camera",description:"Rotate camera",function:async e=>{console.log("rotate_camera",e),await rW.rotateVideo()}},rs={active:!1,name:"open_dashboard",description:"Open the dashboard",function:async e=>{console.log("open_dashboard",e),window.open("https://app.snapcall.io/","_blank"),window.focus()}},ra={active:!1,name:"start_screen_share",description:"Start screen share ",function:async e=>{console.log("start_screen_share",e),await rW.enableScreenshare()}},rn={active:!0,answer:!0,name:"verify_media",description:"Call this to Verify already sent media type and number by step, it return a json with the media count",function:async e=>{console.log("verify_mediaTool",e);let t={},r={};return(rW.streamInfo?.flow?.steps.forEach((e,i)=>{r[e.token]={...e,index:i+1},t[`step: ${i+1}`]={}}),rn.answer)?(rn.answer=!1,{output:JSON.stringify(t),answer:!0}):(console.log("answer:",t),{output:JSON.stringify(t),answer:!1})}},ro={active:!1,name:"display_message",description:"Allow to display a message to the user",parameters:{type:"object",strict:!0,properties:{text:{type:"string",description:"The text to display to the user"}},required:["text"]},function:async e=>{console.log("display_message",e),rW.dispatchEvent(new CustomEvent("aiDisplayMessage",{detail:{text:e.text}}))}},rc={active:!1,name:"go_to_step",description:"Go to one step in the flow, always call it to got to the next step",arguments:"the step number (1-based)",parameters:{type:"object",strict:!0,properties:{step:{type:"number",description:"The step number (1-based)"}},required:["step"]},function:async e=>{let{step:t}=e;if(t>(rW.streamInfo?.flow?.steps?.length||0))return{answer:!1,output:"already at the last step"};rW.streamInfo?.flow?.steps[Number(t)-1]}};class rd{static{this.instance=new rd}list(){return this.tools.map(e=>({type:"function",name:e.name,description:e.description,parameters:e.parameters}))}async onToolCall(e){let t=this.tools.find(t=>t.name===e.name);if(t)try{let r;try{r=JSON.parse(e.arg)}catch(t){console.error("JSON.parse error",t),r=e.arg}let i=await t.function(r);e.answer=i?.answer||!1,e.setOutput(i?.output||"done")}catch(t){e.setOutput("error"),console.error("tool.function error",t)}return e}constructor(){this.tools=[rc,rn,ro,t6,t5,rs,ra,t8,t7,re,rt,rr,ri,t9].filter(e=>e.active),this.call={}}}class rl{constructor(e){this.output="",this.answer=!0,this.id=tX(),this.callId=e.call_id,this.arg=e.arguments,this.name=e.name}setOutput(e){this.output=e}build(){return{type:"conversation.item.create",event_id:this.id,item:{id:this.id,type:"function_call_output",output:this.output,call_id:this.callId}}}}const rp=new j("LiveAIAgent");class rh{constructor(e){this.responses={},this.userMessages={},this.tools=rd.instance,this.userDelta=[],this.delta="",this.talking=!1,this.options={voice:"marin",instructions:""},this.listener=e,window.liveAIAgent=this}mute(){this.track&&(this.track.enabled=!1)}unmute(){this.track&&(this.track.enabled=!0)}sendUserMessage(e){return this.userMessages[e.id]=e,this.peerConnection?.sendCreateItem(e.build())}setTrack(e){this.track=e.clone(),this.track.enabled=!1,this.peerConnection?.setTrack(this.track)}async init({instructions:e,voice:t,track:r}){this.options={instructions:e,voice:t};let i=await tZ(this.tools,this.options),s=new t4;this.peerConnection=s;let a=await s.init({track:this.track,onMessage:this.onMessage.bind(this),onReady:async()=>{}});if(!a)throw Error("can not get SDP");let n=await fetch("https://api.openai.com/v1/realtime/calls?model=gpt-realtime",{method:"POST",body:a,headers:{Authorization:`Bearer ${i.value}`,"Content-Type":"application/sdp"}}),o=await n.text();await s.answer(o),r&&this.setTrack(r)}async stopResponse(){if(console.log("stopResponse",this.currentResponse),this.currentResponse?.canceled)return;let e=this.currentResponse,t=e?.cancel();console.log("startResponse stopResponse cancel",t),t&&console.log("startResponse stopResponse",await this.peerConnection?.send(t.build()).catch(e=>{console.error("stopResponse error",e)}))}async startResponse(e){let t=new t2("client");if(console.log("startResponse",e,this.currentResponse),this.currentResponse&&this.currentResponse.responseId&&await this.stopResponse(),this.talking){this.waitTalking=()=>{this.startResponse(e)};return}this.currentResponse=t;let r=await this.peerConnection?.sendCreateResponse(t.build());return console.log("startResponse",t),r?.response?.id&&this.currentResponse.setResponseId(r?.response?.id),t}async onMessage(e){let t=JSON.parse(e),{type:r,delta:i,id:s}=t;if("session.created"===r)this.listener.onStart();else if("response.done"===r)console.log("response.done:",this.currentResponse),console.log("response.stopped:",t);else if("response.created"===r)this.currentResponse||(this.currentResponse=new t2("server")),this.delta="",this.listener.onAssistantMessage(this.delta);else if("session.updated"===r);else if("conversation.item.input_audio_transcription.delta"===r)this.userDelta[this.userDelta.length-1]+=i;else if("conversation.item.input_audio_transcription.completed"===r)this.userDelta.push("");else if("response.output_item.added"===r)t.item.role;else if("output_audio_buffer.started"===r)this.talking=!0,this.listener.onAudioAssistant("started");else if("output_audio_buffer.stopped"===r)this.talking=!1,this.waitTalking&&(this.waitTalking(),this.waitTalking=void 0),console.log("output_audio_buffer.stopped:",t),this.currentResponse?.setTerminated(),this.currentResponse=void 0,this.listener.onAudioAssistant("stopped");else if("response.function_call_arguments.delta"===r);else if("rate_limits.updated"===r)rp.debug("rate_limits.updated:",t.name,t.remaining);else if("response.output_audio_transcript.delta"===r)rp.debug(s,i),this.delta+=i,rp.debug("delta:",s,this.delta),this.listener.onAssistantPartialMessage(this.delta);else if("response.function_call_arguments.done"===r){rp.debug("call:",t);let e=new rl(t),r=await this.tools.onToolCall(e);await this.sendToolOutput(r)}else"conversation.item.truncated"===r?console.log("conversation.item.truncated:",t):"error"===r?rp.error("error:",t):rp.debug("onMessage:",JSON.stringify(t,null,2))}async sendToolOutput(e){let t=e.build();return console.log("sendToolOutput:",t),await this.peerConnection?.sendToolOutput(t),console.log("sendToolOutput done:",t),e.answer&&this.startResponse(e.name),t}stop(){this.peerConnection?.stop()}dumpHistory(){console.log("messageHistory:",JSON.stringify(this.peerConnection?.history,null,2))}}const ru=new j("LiveAIAgent/Instruction"),rm=e=>(e??"").trim()||"—";class rf{constructor(){this.ready=!1,this.initialized=!1,this.initialeMessageSent=!1,this.startRequested=!1,this.agent=new rh(this),this.tools=rd.instance,rf.instance=this}async init(e,t,r){let i=((e,t,r)=>{console.log("language",r);let i=(e=>{let t=e.flow;return{role:`
4
+ You are ${rm(e.name)} a ${rm(e.language)} speaker.
5
+ You are a customer support agent for ${rm(e.companyName)}.
6
+ You guide the user in a recorder application.
7
+ Follow the Flow described in Context. A Flow is an ordered list of Steps.
8
+ At each Step, collect at least one media of the requested types. Always verify the media sent before talking about the current media.
9
+ `.trim(),personality:`
10
+ You are friendly, patient, and helpful.
11
+ Keep replies short and clear for voice.
12
+ Prefer ${rm(e.language)||"English"} answers.
13
+ `.trim(),context:`
14
+ You are connected to an application that can share screen, take photos, and receive uploads.
15
+ A preview of the interface will be displayed to you in the first message.
16
+ The title of the flow is: ${rm(t?.name)}
17
+ The flow is described as: ${rm(t?.config?.description)}
18
+ Steps are:
19
+ ${!t?.steps?.length?"(no steps defined)":t.steps.map((e,t)=>{let r=Array.isArray(e.types)?e.types.join(", "):"—";return`
20
+ ${t+1} -${rm(e.title)}: ${rm(e.config?.description)}, requested mode: ${r}, default mode: ${e.default_type||""}`}).join(",\n")}
21
+ Before Starting the flow the user has no enable is media, microphone or camera.
22
+ `.trim(),reference_pronunciations:"".trim(),tools:`${e.tools.map(e=>`- ${e.name}: ${e.description}`).join("\n")}
23
+
24
+ `.trim(),instructions:`
25
+ ### EVENT INTERPRETATION
26
+ Messages starting with \u{201C}[APP_EVENT]\u{201D} or \u{201C}[DEVICE_EVENT]\u{201D} are NOT spoken by the user.
27
+ They are authoritative system events. You must TRUST them.
28
+
29
+ ### DEVICE EVENTS
30
+ DEVICE_EVENT always contains JSON. Example:
31
+ [DEVICE_EVENT] {"type":"microphone_state","status":"active"}
32
+
33
+ ### INSTRUCTION EVENTS
34
+ INSTRUCTION indicate which action to take.
35
+
36
+ Supported types:
37
+ - camera_state: {status: "active" | "inactive"}
38
+ - microphone_state: {status: "active" | "inactive"}
39
+
40
+ The latest DEVICE_EVENT fully overrides previous assumptions.
41
+
42
+ ### MICROPHONE / CAMERA LOGIC
43
+ - Never talk about hearing the user
44
+ - Only talk about the permissions of the camera as the user can't proceed without it.
45
+ - If the latest microphone_state or camera_state is "active", NEVER claim the mic is off, muted, unavailable, or not working.
46
+ - If the latest microphone_state or camera_state is "inactive", guide the user to activate it.
47
+ - If permission is inactive, say it must be enabled from the popup or from the browser search bar.
48
+
49
+ ### FLOW RULES
50
+ This conversation is a strict media-collection flow.
51
+ - If there is no media yet, don't mention media or say "No media has been taken yet".
52
+ - Stay in context. For anything unrelated:
53
+ \u{201C}I can only help you with media collection in this flow.\u{201D}
54
+ - Verify media before starting the flow using the verify_media tool. If there is already a media propose to click on "next" or "add more".
55
+ - Announce when media is already collected. Propose to click on the continue button.
56
+ - Do not announce next step until receiving the setStep APP_EVENT.
57
+ - Ask for only one media type at a time.
58
+ - If multiple media types are allowed, encourage the user to choose one.
59
+ - Do not judge media content; only confirm reception.
60
+ - Confirm media **only** when receiving:
61
+ \u{201C}[APP_EVENT] the user has taken a media\u{201D}
62
+ - After receiving any allowed media, ask if the user is ready for the next step.
63
+ - The next step can only be confirmed via the UI button (blue modal button).
64
+ - Always re-verify previously collected media before proceeding.
65
+ - Offer the option to go back to add more media at any time.
66
+
67
+ ### RESPONSE RULES
68
+ - Limit responses to **30 words maximum**.
69
+ `.trim(),conversation_flow:`
70
+ You will receive step descriptions and requested media types.
71
+ For each step:
72
+ 1) You must verify media before starting the flow calling the verify_media tool, and announce media already taken.
73
+ 2) Do not say "No media has been taken yet" or something similar.
74
+ 3) You must not announce or discuss any step of the flow until the microphone is fully enabled. If the microphone is not active, the bot must focus only on helping the user enable it.
75
+ 4) Announce the step briefly and request one allowed media type.
76
+ 5) On media received: acknowledge ("Received. Thank you.").
77
+ 6) List accepted types for the step and suggest the default one only if there is only many allowed type.
78
+ 7) If the user has not taken any media, ask the user to take a media.
79
+ 8) After loading a step, clearly tell the user that to start recording or to take a photo, they must click on the round button at the bottom of the interface.
80
+ 9) You must not use phrases implying you will notify the user later, such as "I'll let you know when it's ready." You should only give direct, immediate instructions.
81
+ 10) On out-of-scope question: decline and restate the current step request.
82
+ 11) On completion: confirm the process is done and provide a short recap. open send model and request the user to click send button.
83
+ `.trim(),safety_and_escalation:`
84
+ Do not request or store sensitive personal data unrelated to the Flow.
85
+ If the user shares such data, acknowledge and continue the Flow without repeating it.
86
+ `.trim()}})({name:"Jean-Didier",language:r,companyName:"Snapcall",flow:e.flow,tools:t.list()}),s=`
87
+ # Role & Objective
88
+ ${i.role}
89
+
90
+ # Personality & Tone
91
+ ${i.personality}
92
+
93
+ # Context
94
+ ${i.context}
95
+
96
+ # Reference Pronunciations
97
+ ${i.reference_pronunciations}
98
+
99
+ # Tools
100
+ ${i.tools}
101
+
102
+ # Instructions / Rules
103
+ ${i.instructions}
104
+
105
+ # Conversation Flow
106
+ ${i.conversation_flow}
107
+
108
+ # Safety & Escalation
109
+ ${i.safety_and_escalation}
110
+ `.trim();return ru.debug("getInstructions",s),s})(t,this.tools,e.language);await this.agent.init({instructions:i,voice:e.voice,track:r}),this.initialized=!0}setTrack(e){this.agent.setTrack(e)}async addScriptedMessage(e){if(this.ready&&this.startRequested&&this.initialized)return this.agent.sendUserMessage(e.message)}async addVideoImage(e){try{let t=new t0;await t.addImageContent(e),await this.agent.sendUserMessage(t)}catch(e){console.error("addVideoImage error",e)}}async analyzeVideo(){try{let e=new t0;e.addInstructionContent(`
111
+ You are granted the ability to check the content of the image for this answer only.
112
+ check the content of the images you just receive for this video and tell me if the image is conform to the steps requirements if not propose to take an other one.
113
+ Do not give a feedback of the order like ""
114
+ You have a 40 words limit for that answer.
115
+ `),e.addContent("please review all the images and give your feedback."),await this.agent.sendUserMessage(e),await this.startResponse("analyzeImageResult")}catch(e){console.error("analyzeVideo error",e)}}async analyzeImageResult(e){try{let t=new t0;await t.addImageContent(e),t.addInstructionContent(`
116
+ You are granted the ability to check the content of the image for this answer only.
117
+ check the content of the image you just receive and tell me if the image is conform to the steps requirements if not propose to take an other one.
118
+ You have a 40 words limit for that answer.
119
+ `),t.addContent("please review the image and give your feedback."),await this.agent.sendUserMessage(t),await this.startResponse("analyzeImageResult")}catch(e){console.error("analyzeImageResult error",e)}}async onStart(){this.ready=!0,this.startRequested&&await this.sendInitialMessage()}async sendInitialMessage(){if(console.log("sendInitialMessage",this.initialeMessageSent,this.ready),this.startRequested=!0,!this.ready||this.initialeMessageSent)return;this.initialeMessageSent=!0;let e=new t0,t=rW.tracksHandler.video.track,r=rW.tracksHandler.audio.track;e.addMediaContent("camera",t?"active":"inactive"),e.addMediaContent("microphone",r?"active":"inactive"),e.addAppContent("event",`setStep: ${rb.instance?.getData().previousStepNumber??1}`),await this.agent.sendUserMessage(e),console.log("response",await this.startResponse("initial"))}startResponse(e){if(this.startRequested&&this.ready)return this.agent.startResponse(e)}onAssistantPartialMessage(e){console.log("onAssistantPartialMessage",e),rW.dispatchEvent(new CustomEvent("aiTextMessage",{detail:{text:e}}))}onAssistantMessage(e){console.log("onAssistantMessage",e),rW.dispatchEvent(new CustomEvent("aiTextMessage",{detail:{text:e}}))}onAudioAssistant(e){console.log("onAudioAssistant",e),"started"===e?rW.dispatchEvent(new CustomEvent("aiStarted",{detail:{text:""}})):rW.dispatchEvent(new CustomEvent("aiStopped",{detail:{text:""}}))}}const rg={mediaAccessGranted:!1,previousStepNumber:void 0},rv={mediaAccessGranted:(e,t)=>{console.log("state",t),t?.audio&&e.addMediaContent("microphone",t?.audio?"active":"inactive"),t?.video&&e.addMediaContent("camera",t?.video?"active":"inactive");let r=!1;return!rg.mediaAccessGranted&&(t?.audio||t?.video)&&(rg.mediaAccessGranted=!0,r=!0),console.log("mediaAccessGranted",rg.mediaAccessGranted,e.content),{message:e,response:r}},setStep:(e,t)=>(e.addAppContent("event",`setStep: ${t?.stepIndex}`),rg.previousStepNumber===t?.stepIndex&&(rg.previousStepNumber=t?.stepIndex),{message:e,response:!1}),startStep:(e,t)=>(e.addAppContent("event",`startStep: ${t?.stepIndex}`),e.addInstructionContent("explain that the user need to click on the record round button to start recording or take the photo"),{message:e,response:!0}),photoTaken:e=>(e.addAppContent("event","photoTaken"),{message:e,response:!1}),startRecord:e=>(e.addAppContent("event","startRecord"),{message:e,response:!1}),videoTaken:e=>(e.addAppContent("event","videoTaken"),{message:e,response:!1}),submissionStep:e=>(e.addAppContent("event","submissionStep open"),e.addContent("request to click the send button to submit the assets"),{message:e,response:!0}),sendAssetSuccess:e=>(e.addAppContent("event","sendAssetSuccess"),e.addInstructionContent("simply say thank you and confirm assets have been uploaded."),{message:e,response:!0}),upload:(e,t)=>(e.addAppContent("event",`uploaded: ${t?.type}`),{message:e,response:!0})};class rb{static{this.instance=new rb}getData(){return rg}async event(e,t){try{let r=new t0,i=rv[e];if(console.log("script.event",e),i){let s=i(r,t);console.log("script.event",s);let a=await rf.instance?.addScriptedMessage(s);console.log("result",a),s?.response&&await rf.instance?.startResponse(e)}else console.log("script not found",e)}catch(e){console.error("script.event error",e)}}}const ry={video:{facingMode:"user",width:{ideal:1280},height:{ideal:720},frameRate:{ideal:25}},audio:{echoCancellation:!0,noiseSuppression:!0}};async function r_(e=ry){console.log("askTracks","constraints",e);let t=await navigator.mediaDevices.getUserMedia(e).catch(async e=>{console.log(e)}),r={audioTrack:t?.getAudioTracks()[0]||void 0,videoTrack:t?.getVideoTracks()[0]||void 0},i={};return r.audioTrack&&(i.audio="true"),r.videoTrack&&(i.video="true"),rb.instance?.event("mediaAccessGranted",i),r}function rw(e,t=""){console.log(`Track ${e.kind}, ${t}
120
+ label: ${e.label}
121
+ id: ${e.id}
122
+ deviceId: ${e.getSettings().deviceId}
123
+ readyState: ${e.readyState}
124
+ is muted: ${e.muted}
125
+ is enabled: ${e.enabled}`)}class rS{constructor(){this.firstPermissionRequest=!1,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=ry){let t,r={...e};this.cleanAllStreams({audio:!!e.audio,video:!!e.video});try{this.isAskingPermissions=!0,(t=await r_(r)).audioTrack&&(this.audio.stream=new MediaStream([t.audioTrack]),this.audio.track=t.audioTrack),t.videoTrack&&(this.video.stream=new MediaStream([t.videoTrack]),this.video.track=t.videoTrack)}finally{this.isAskingPermissions=!1}t||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)}async requestFirstMediaPermissions(e=ry){this.firstPermissionRequest||(await this.requestMediaPermissions(e),this.firstPermissionRequest=!0)}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&&rw(this.audio.track,"audio.track"),this.video.track&&rw(this.video.track,"video.track"),this.audio.stream&&(console.log("audio.stream",this.audio.stream.id),this.audio.stream.getTracks().forEach(e=>{rw(e,"linked to audio.stream")})),this.video.stream&&(console.log("video.stream",this.video.stream.id),this.video.stream.getTracks().forEach(e=>{rw(e,"linked to video.stream")}))}}const rk=new j("TransportMonitor"),rC=["audio","video","ice-network","outbound-rtp"];class rR{constructor(e,t,r){this.tick=0,this.activeMonitors={audio:!1,video:!1,"ice-network":!1,"outbound-rtp":!1},this.activeMonitorsCount=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.mediaSourceStats={},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.lastStateRttOk=!0,this.mediaSourceStats={}}async onConnectionStateChange(e){switch(rk.log("onConnectionStateChange",`
126
+ Transport ${this.transport.id} connection state changed to:`,e),e){case"connected":this.isConnected=!0,this.updateTransportState({isConnected:!0});break;case"disconnected":this.isConnected=!1,this.disconnectsCount++,this.updateTransportState({isConnected:!1}),this.disconnectsCount===this.disconnectsThreshold&&this.listener?.onTransportManyDisconnections(this.transport);break;case"failed":this.isConnected=!1,this.updateTransportState({isConnected:!1}),this.stopAllMonitorings(),rk.warn("onConnectionStateChange",`
127
+ Transport ${this.transport.id} failed. Closed all monitorings.`);break;case"closed":this.stopAllMonitorings(),rk.log("onConnectionStateChange",`
128
+ Transport ${this.transport.id} closed. Closed all monitorings.`)}}updateTransportState({isRttOk:e,isRtxOk:t,isTargetBitrateOk:r,isConnected:i}){let s=this.issues;void 0!==e&&(this.issues+=e?-1:1),void 0!==t&&(this.issues+=t?-1:1),void 0!==i&&(this.issues+=i?-1:1),void 0!==r&&(this.issues+=r?-1:1),this.issues=Math.max(0,this.issues),s*this.issues==0&&this.listener?.onTransportStateChangeNetwork(this.transport,0===this.issues)}async startGetStats(){this.statsInterval||(this.statsInterval=setInterval(async()=>{if(!this.transport.closed)for(let e of(this.rtcStatsReports=await this.transport.getStats(),this.tick=(this.tick+1)%15,rC))this.activeMonitors[e]&&this.monitorFuncs[e]()},200))}stopGetStats(){clearInterval(this.statsInterval),this.statsInterval=void 0,this.rtcStatsReports=void 0}stopMonitoring(e){for(let t of e)this.activeMonitors[t]&&(this.activeMonitors[t]=!1,this.activeMonitorsCount--,0===this.activeMonitorsCount&&this.stopGetStats())}stopAllMonitorings(){this.stopGetStats(),rC.forEach(e=>{this.activeMonitors[e]=!1}),this.activeMonitorsCount=0}async startMonitoring(e){for(let t of e)!this.activeMonitors[t]&&(this.activeMonitors[t]=!0,0!==this.activeMonitorsCount&&this.statsInterval||this.startGetStats(),this.activeMonitorsCount++)}async monitorAudio(){this.rtcStatsReports&&this.rtcStatsReports.forEach(e=>{"media-source"===e.type&&e.kind})}async monitorVideo(){this.rtcStatsReports&&this.rtcStatsReports.forEach(e=>{"media-source"===e.type&&e.kind})}async monitorIceNetwork(){if(!this.rtcStatsReports)return;let e=!1,t=0;if(this.rtcStatsReports.forEach(r=>{if("candidate-pair"===r.type&&"succeeded"===r.state&&0===t){if(void 0===r.currentRoundTripTime){rk.error("monitorIceNetwork",`No RTT found in the stats report for transport ${this.transport.id}.
129
+ Stoppping monitoring. If you're running on Firefox, this is a known issue: https://bugzilla.mozilla.org/show_bug.cgi?id=1542938.`),this.stopMonitoring(["ice-network"]),e=!0;return}this.recentRTTs[this.tick]=r.currentRoundTripTime,this.allTimeAverageRTT=1e3*r.totalRoundTripTime/r.responsesReceived,t++}}),e||0!==t)0===this.tick&&this.checkIceNetwork()}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}
130
+ RTT state changed to:`,t),this.updateTransportState({isRttOk:t}),this.lastStateRttOk=t),e>250&&this.listener?.onNetworkLog(this.transport,{rtt:e})}async monitorOutboundRtp(){this.rtcStatsReports&&(this.rtcStatsReports.forEach(e=>{if("outbound-rtp"===e.type){if(!e.ssrc||!e.kind||void 0===e.packetsSent||void 0===e.retransmittedPacketsSent){rk.error("monitorOutboundRtp",`Missing data in the stats report for transport ${this.transport.id}.
131
+ Stoppping monitoring.`),this.stopMonitoring(["outbound-rtp"]);return}this.mediaSourceStats[e.ssrc]||(this.mediaSourceStats[e.ssrc]={ssrc:e.ssrc,kind:e.kind,averagesRtxPercent:[],averageTargetBitrate:0,recentPacketsSent:Array(15).fill(0),recentPacketsRtx:Array(15).fill(0),recentTargetBitrate:Array(15).fill(0),lastStateRtxOK:!0,lastStateTargetBitrateOK:!0});let t=this.mediaSourceStats[e.ssrc];t.recentPacketsSent[this.tick]=e.packetsSent,t.recentPacketsRtx[this.tick]=e.retransmittedPacketsSent,t.recentTargetBitrate[this.tick]=e.targetBitrate}}),0===this.tick&&Object.values(this.mediaSourceStats).forEach(e=>{this.checkOutboundRtp(e)}))}checkOutboundRtp(e){let t=(this.tick+1)%15,r=e.recentPacketsSent[this.tick]-e.recentPacketsSent[t],i=e.recentPacketsRtx[this.tick]-e.recentPacketsRtx[t],s=0===r?0:100*i/r,a=100*e.recentPacketsRtx[this.tick]/e.recentPacketsSent[this.tick];e.averagesRtxPercent.push(s);let n=0;e.averageTargetBitrate=Math.round(e.recentTargetBitrate.reduce((e,t)=>0===t||Number.isNaN(t)||!t?e:(n++,e+t),0)/n);let o=s<=30,c=e.averageTargetBitrate>5e5;"video"===e.kind&&c!==e.lastStateTargetBitrateOK?this.updateTransportState({isTargetBitrateOk:c}):o!==e.lastStateRtxOK&&(console.warn(`Transport: ${this.transport.id}
132
+ [ssrc ${e.ssrc} ${e.kind||"?"}] RTX state changed to:`,o),this.updateTransportState({isRtxOk:o})),e.lastStateRtxOK=o,e.lastStateTargetBitrateOK=c,o||this.listener?.onNetworkLog(this.transport,{rtxPercent:s,kind:e.kind,averageTargetBitrate:e.averageTargetBitrate})}}const rT=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} `)},rE=new j("VideoDrawer"),rP=new Image;rP.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAjCAYAAADxG9hnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAQrSURBVHgB1VhLbxpXFD537jx42aAEF0iwiyKvSGQ5pak3kYXl34B/D30tuotaZdlusuRHxMvssop3lq0YFxtjmprHMM/bcy5gkyaQXNtEyidd7sydmXu+Oe8B4GZgcEvQ4Ppg1SER2oOP5lsj9kkIIcbCdcdxfsbzf2h4nvc7rhlQrd7k5ZTASqWS4bruH+J/6PV6vxYBTPhCmkEz5GJhGL4j4evrP+DYkERoLZPJxKFc1lXJ6KAGaZbkimExxpK08PaofnUR1yzLMovNprcH4IMClO1ZKBR41DWnvgCaTN/b21N2XGUih4eHrNO5mPpctytYPp9nMGfTAAoBx9GnCqGoqtfrAhShrJEgCNgohD8K9BMx0ogSGWUinHNh2/2pQoikrutfRiOzrsfjGC6+r5xHLongm1xmzUqlQilbjvIwJwxHsWhgBuV43wxnDbV63eF0b4X2GD7P5fPyuDKzHLAqpWbMmBNp+7Nw5+49ORQgy0GJygESIgW8RwTg42l7DkQkbNv+hUrFWDPyp1IBXquBhSn6b8qOjx9vvJcxbxMry8vw+vUrcoN/Ne3+PYCGg8uBtPWbN0WeSqVMMSMsbxskK1WwTNTKpb+xYrFoLi7m7xzV68+EIq5rmmaz+SfJhKGvXMJISWQLR0f1Fxh+F5+7oSoR2nt/f/95KpX7FuVS4ZSVemwKjuU7gnUioeuQ0CJmTDguquzDMBW64DpmtdbJySs6v5u+L9fPW8dyTqZzG4z5gQGGDAcUPA4LAYZJ5z43hO33oLu42Ow8fVpxarVaMK414enpqZtOp/uUOX0fBn1N16yQiJDfMEGzsHCEIQ/BjEyzfSjcrqZxt+vZfgSiYrKcMT8UgeYHjJtONOo5jUbJQxIhwNVdAlu8oLW7a8PurgeZDE8HKS2EM9bGi2RImsEVLOFZJuNuMI2IHpr9d16vC7ruDZhzlSQ0TR5nuB6eNhp+ByMFoBWQuTBSJ1J8tSrEy5ckwKlsbg62ttb67Xa7B+12f3t7u1eh4wcP+tFoYHte4EwlovsOdCIDyOXs8tpan54HnMuPHtnQ2upv4t4o2wVJBCQJZRB5rKzRpaWl7DRnTSQy3+CtZLr5NkbYa4xr0hT0YERifkRIjdQY2Tab0QbESGugCqUODTUhycTj8alEqDGae4c21ggSAaxLF7S2spyX9YMwXiNgNYd5gmEXH0kkskuYgT8oBycnzb+y2ezS6uqqBfN21lgsFur6wHvy5Ptnx8fHL7Bj69A4ODh4vr6+9pNpmn4ymQwVt1X2EbGzsxOcn597nU7Hfvjwux85136jj8wgDO2Asf6C5zkLCwvKPnKdsk9NFL7AWyuR4FHL8kybsZAbhhfx/cHZ2RklO/rKUyajBDFs7WRbSf6Cx7HRiMCw47rWvwE3bYQmm2AxMb5e/AdaUYqLd/EupgAAAABJRU5ErkJggg==";class rx{constructor({deviceType:e,canvas:t,video:r,consumerId:i,peerId:s,producerId:a}){if(this.live=!1,this.x=-1,this.y=-1,rE.info("drawVideo","start draw video"),this.drawCanvas=document.createElement("canvas"),this.deviceType=e,this.consumerId=i,this.peerId=s,this.producerId=a,!r.srcObject)throw Error("video.srcObject is not set");this.video=r,this.canvas=t,this.setVideoDrawerDisplay(),this.live=!0,void 0!==this.video.requestVideoFrameCallback?this.callbackId=this.video.requestVideoFrameCallback(()=>{"screen"===this.deviceType?this.onFrameScreen():this.onFrame()}):"screen"===this.deviceType?requestAnimationFrame(()=>this.onFrameScreen()):requestAnimationFrame(()=>this.onFrame())}onFrame(){if(!this.live)return;let e=this.video.getBoundingClientRect();this.canvas.width=e.width,this.canvas.height=e.height;let t=this.video.videoWidth-this.video.videoHeight,r=this.canvas.getContext("2d"),i=1;r&&("local"===this.consumerId&&(r.save(),r.scale(-1,1),i=-1),r.drawImage(this.video,t/2,0,this.video.videoWidth-t,this.video.videoHeight,0,0,e.width*i,e.height),r.restore(),r.drawImage(rP,this.x-16,this.y-16,32,32));let s=this.drawCanvas.getContext("2d");if(s){let e=this.video.videoWidth-t,r=this.video.videoHeight;this.drawCanvas.width=e,this.drawCanvas.height=r,s.drawImage(this.video,t/2,0,e,r,0,0,+e,r);let i=this.x*e/this.canvas.width,a=this.y*r/this.canvas.height,n=Math.min(32*e/this.canvas.width,32),o=Math.min(32*r/this.canvas.height,32);"local"===this.consumerId&&(s.save(),s.translate(this.drawCanvas.width,0),s.scale(-1,1)),s.drawImage(rP,i-n/2,a-o/2,n,o),s.restore()}void 0!==this.video.requestVideoFrameCallback?this.callbackId=this.video.requestVideoFrameCallback(()=>{this.onFrame()}):requestAnimationFrame(()=>this.onFrame())}onFrameScreen(){if(!this.live)return;let e=this.video.getBoundingClientRect();this.canvas.width=e.width,this.canvas.height=e.height,this.drawCanvas.width=this.video.videoWidth,this.drawCanvas.height=this.video.videoHeight,console.log("drawCanvas",this.drawCanvas.width,this.drawCanvas.height);let t=this.canvas.getContext("2d");t&&(t.drawImage(this.video,0,0,this.video.videoWidth-0,this.video.videoHeight,0,0,e.width,e.height),t.drawImage(rP,this.x-16,this.y-16,32,32));let r=this.drawCanvas.getContext("2d");if(r){r.drawImage(this.video,0,0,this.video.videoWidth,this.video.videoHeight);let e=this.x*this.video.videoWidth/this.canvas.width,t=this.y*this.video.videoHeight/this.canvas.height,i=32*this.video.videoWidth/this.canvas.width,s=32*this.video.videoHeight/this.canvas.height;r.drawImage(rP,e-i/2,t-s/2,i,s)}void 0!==this.video.requestVideoFrameCallback?this.callbackId=this.video.requestVideoFrameCallback(()=>{this.onFrameScreen()}):requestAnimationFrame(()=>this.onFrameScreen())}setVideoDrawerDisplay(){rE.info("setVideoDrawerDisplay","start set video drawer display"),this.canvas.addEventListener("mousemove",e=>{let t=this.canvas.getBoundingClientRect(),r=e.clientX-t.left,i=e.clientY-t.top;this.x=r,this.y=i})}async createStream(){return this.drawCanvas.captureStream()}clean(){return new Promise(e=>{this.live=!1,void 0!==this.callbackId&&this.video.cancelVideoFrameCallback(this.callbackId),this.drawCanvas.getContext("2d")?.clearRect(0,0,this.drawCanvas.width,this.drawCanvas.height),this.drawCanvas.width=0,this.drawCanvas.height=0,this.canvas.getContext("2d")?.clearRect(0,0,this.canvas.width,this.canvas.height),this.canvas.width=0,this.canvas.height=0,e()})}}const rM=new j("MediaPipe"),rI="https://stream-assets-sandbox.snapcall.io";let rD=!1;(async function(){await new Promise(e=>{let t=document.createElement("script");t.src=`${rI}/mediapipe/selfie_segmentation.js`,t.onload=e,document.head.appendChild(t)}),console.log("selfieSegmentation script loaded"),console.log("selfieSegmentation initialized",t=new window.SelfieSegmentation({locateFile:(e,t)=>{if(rM.debug("selfieSegmentation",e,t),rI)return`${rI}/mediapipe/${e}`;let r=window.location.href.split("/").slice(0,-1).join("/");return`${r}/mediapipe/${e}`}}))})().catch(e=>{rM.error("initSelfieSegmentation","error",e)});class rL{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=new MediaStream,this.stream.addTrack(e.getVideoTracks()[0]),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(()=>{t?.send({image:this.image}),this.runWithFrameCallback()})}async createStream(){try{t?.setOptions({selfieMode:!1,modelSelection:0}),rM.log("selfie segmentation initialized"),rD||(await t?.initialize(),rD=!0),this.image.srcObject=this.stream,this.image.onplay=async()=>{this.live=!0;try{t?.onResults(e=>{this.onFrame(e)}),this.timerWorker.onmessage=()=>{t?.send({image:this.image})},this.timerWorker.postMessage({action:"start",params:this.fps})}catch(e){rM.error("createStream:play",e)}}}catch(e){console.error("createStream",e)}return this.canvas.captureStream()}async clean(){this.live=!1,this.stream.removeTrack(this.stream.getTracks()[0]),await t?.reset(),clearInterval(this.runInterval),this.image.srcObject=null,this.timerWorker.terminate()}printState(){console.log("MediaPipe",{stream:this.stream.id,type:this.type,live:this.live}),this.stream.getTracks().forEach(e=>{rw(e,`linked to MediaPipe.stream ${this.stream.id}`)})}}const rO=new j("Camera"),rA={qvga:{width:{ideal:320},height:{ideal:240},format:[4,3],qualityIndex:3},vga:{width:{ideal:640},height:{ideal:480},format:[4,3],qualityIndex:2},hd:{width:{ideal:1280},height:{ideal:720},format:[16,9],qualityIndex:1},background:{width:{ideal:560},height:{ideal:400},qualityIndex:2},max:{width:{ideal:4096},height:{ideal:2160},qualityIndex:0}},rj={background:void 0,fillColor:"#ffffff",type:"blur",blurLevel:10};class rN{constructor(e){this.webcamZoom={available:!1,min:0,max:0},this.trackConstraint={advanced:[]},this.getUserMediaConstraint={},this.capabilities={},this.scaling=1,this.mediaPipeOption=rj,this.useVideoBackground=!1,this.trackHandler=e,this.webcams=new Map,this.webcam={device:null,resolution:"hd",framerate:25}}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 rB("webcamsUpdate",{detail:{numberOfAvailableWebcams:this.webcams.size}});rW.dispatchEvent(e)}async enable(e){await this.updateWebcams();let t={};if(e?.rotate)if(this.webcam.facingMode)console.log("switch by facing mod"),this.webcam.facingMode="user"===this.webcam.facingMode?"environment":"user",t.facingMode={exact:this.webcam.facingMode};else{let e=Array.from(this.webcams.keys()),r=this.webcam?.device?.deviceId||"unknown",i=e.indexOf(r);i=(i+1)%e.length;let s=this.webcams.get(e[i]);if(!s)throw Error(`webcam device at index ${i} was not found`);this.webcam.device=s,this.webcam.device?.deviceId&&"unknown"!==this.webcam.device.deviceId&&(t.deviceId={exact:this.webcam.device?.deviceId})}else e?.facingMode?(t.facingMode={exact:e.facingMode},this.webcam.facingMode=e.facingMode):e?.device&&(this.webcam.device=e.device,this.webcam.device?.deviceId&&"unknown"!==this.webcam.device.deviceId&&(t.deviceId={exact:this.webcam.device?.deviceId}));if(!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=rA[e?.resolution||this.webcam.resolution];this.useVideoBackground&&(r=rA.background),this.getUserMediaConstraint={frameRate:this.webcam.framerate,...t,...r},e?.facingMode||e?.device||e?.rotate||!this.trackHandler.video.track?await rW.processMediaPermissionsAndResolveRequests({video:this.getUserMediaConstraint}).catch(e=>{throw Error(e,{cause:rV})}):rO.log("enableVideo","no facing mode, device or rotate, using track");let i=this.trackHandler.video;if(!i?.stream||!i.track)throw Error("enableVideo : no stream or video track");let s=i.track.getSettings();if(s.deviceId&&(this.webcam.device=this.webcams.get(s.deviceId)||null),e?.facingMode)try{if(!s.facingMode)throw Error("no facing mode")}catch{this.webcam.facingMode=void 0}this.useVideoBackground&&(this.mediaPipe&&await this.mediaPipe.clean(),this.mediaPipe=new rL(i.stream,this.mediaPipeOption));let a=await this.mediaPipe?.createStream()||i.stream;await this.updateWebcams();let n=a.getVideoTracks()[0];this.trackConstraint.advanced=[],n.enabled=!0;let o=await n.getCapabilities?.()||navigator.mediaDevices.getSupportedConstraints?.();return this.webcamZoom.available&&this.trackConstraint.advanced.push({zoom:this.webcamZoom.min}),o.focusMode&&this.trackConstraint.advanced.push({focusMode:"continuous"}),this.applyConstraints(),i.track.enabled=!0,this.webcamZoom={available:!!o?.zoom,min:o?.zoom?.min||0,max:o?.zoom?.max||0},n}async applyConstraints(){await this.trackHandler.video?.track?.applyConstraints({...this.getUserMediaConstraint,...this.trackConstraint}).catch(e=>{rO.error("applyConstraint","applyConstraints failed",e)})}setVideoBackground(e){this.mediaPipe?.setOptions(e),this.mediaPipeOption=e}scaleVideoMediasConstraintsParameter(e){this.scaling=e;let t=rA.hd;2===e?t=rA.vga:e>2&&(t=rA.qvga),(!this.webcam.resolution||rA[this.webcam.resolution].qualityIndex>=t.qualityIndex)&&(this.getUserMediaConstraint={...this.getUserMediaConstraint,...t},rO.log("scaleVideoMediasConstraintsParameter",`scaling video by ${e}`,t),this.applyConstraints())}async unzoomVideo(){if(!this.webcamZoom.available)throw Error("Webcam zoom is not available");if(!this.trackHandler.video?.track)throw Error("No webcam track available");let e=this.trackConstraint.advanced.findIndex(e=>e.zoom);-1!==e?this.trackConstraint.advanced[e].zoom=this.webcamZoom.min:this.trackConstraint.advanced.push({zoom:this.webcamZoom.min}),this.applyConstraints()}async zoomVideo(){if(!this.webcamZoom.available)throw Error("Webcam zoom is not available");if(!this.trackHandler.video?.track)throw Error("No webcam track available");let e=this.trackConstraint.advanced.findIndex(e=>e.zoom);-1!==e?this.trackConstraint.advanced[e].zoom=2*this.webcamZoom.min:this.trackConstraint.advanced.push({zoom:2*this.webcamZoom.min}),this.applyConstraints()}getState(){return{device:this.webcam.device,error:this.webcam.error}}cleanMediapipe(){this.mediaPipe&&(this.useVideoBackground=!1,this.mediaPipe.clean(),this.mediaPipe=void 0)}clean(){this.webcam.device=null,this.cleanMediapipe()}}const rF=new j("StreamerClient");rF.info("StreamerClient","test");const r$="SOCK1",rV="getUserMedia error";class rB extends CustomEvent{constructor(e,t){super(e,t)}}const rq=EventTarget,rz=n(H).parse(window.navigator.userAgent),rW=new class extends rq{constructor(){super(),this.mediasoupTransport={},this.waitingRoomAccess=!1,this.tracksHandler=new rS,this.pendingDeviceRequest={},this.joinOptions={},this.devicesList=[],this.plan=void 0,this.permissions=[],this.onAudioLevel=((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)}})(e=>{let t=new rB("audioLevel",{cancelable:!0,bubbles:!0,detail:{audioLevel:e}});this.dispatchEvent(t)},1e3),navigator.mediaDevices.addEventListener("devicechange",()=>this.onDeviceChange()),this.config={streamApiURL:String("https://apistream-sandbox.snapcall.io"),apiUrl:String("https://api-sandbox.snapcall.io"),streamerServer:String("wss://g-test.snapcall.io/stream"),streamerApi:String("https://g-test.snapcall.io/stream"),iceServers:[{urls:"turns:turn-sandbox.snapcall.io:443?transport=tcp".split(",")||[],username:"test",credential:"test"}]},this.camera=new rN(this.tracksHandler),this.peers=new Map,this.consumers=new Map,this.webcamTrack=null,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(),drawerEnabled:!!this.drawer,peers:e}}onStartSpeak(){if(this.micProducer&&!this.micProducer.paused){let e=new rB("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 rB("localStopSpeak",{detail:{}});this.dispatchEvent(e),this.protoo?.notify("stopSpeak").catch(e=>console.error("failed to send stopSpeak event",e))}}onCriticalError(e){let t=new rB("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=f();return localStorage.setItem(e,r),r}catch(e){return console.warn(e),f()}}ping(){this.protoo?.notify("ping").catch(e=>{console.error("failed to send ping event",e),clearInterval(this.pingInterval)})}async init(e,t,r=this.joinOptions){let i,s;if(this.roomId=e,this.streamInfo=t,this.peerId=f(),this.recordingGroup=r.recordingGroup,this.joinOptions=r,!this.roomId)throw Error("Missing room ID");try{let{streamer_instance:s,plan:{permissions:a,name:n},company_id:o,company:c,defaultPublicPage:d,type:l}=t;"assist"===l?(r.recorder=!0,this.joinOptions.recorder=!0):this.joinOptions.recorder=!1,this.companyId=o,this.company=c,this.permissions=a,this.defaultPublicPage=d,this.plan=n;let p=new URLSearchParams({peerId:this.peerId,clientId:this.clientId,roomId:e,events:"0"});r.authKey&&p.append("authKey",r.authKey);let h=this.joinOptions.recorder?"recorder":"";i=`${this.config.streamerServer}/${s}/v2/${h}?${p}`}catch(t){console.error("init",t);let e=new rB("invalidRoom",{detail:{}});this.dispatchEvent(e)}if(!i)throw Error("Invalid socket URL");this.protooTransport=new tw(i,{retry:{retries:0}}),this.protoo=new t_(this.protooTransport);let a=!1,n=e=>{};this.protoo.on("open",async()=>{this.pingInterval=setInterval(()=>this.ping(),1e4),this.joinOptions.apiKey&&await this.setAgentIdentity({apiKey:this.joinOptions.apiKey,email:this.joinOptions.email}).catch(e=>{rF.error("onOpen","failed auth",e)}),a=!0,n()}),this.protoo.on("failed",()=>{s=Error("failure"),n(s),rF.error("protoo.on","failed"),this.onCriticalError(r$)}),this.protoo.on("disconnected",()=>{rF.error("protoo.on","disconnected"),this.onCriticalError(r$)}),this.protoo.on("close",()=>{rF.log("protoo.on","close :("),clearInterval(this.pingInterval)}),this.protoo.on("notification",async e=>{if(rF.log("notification",e),"error"===e.method)e.data?.reason==="reached user limit"&&this.onCriticalError("USERLIMIT");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 rB("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,appData:a}=e.data;await this.consumeProducer({peerId:t,producerId:r,deviceType:i,paused:s,appData:a})}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 rB("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 rB("recordStopped",{detail:e.data}));else if("displayName"===e.method){let{peerId:t,displayName:r}=e.data,i=new rB("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 rB("requestDevice",{detail:e.data});this.dispatchEvent(t)}else if("startSpeak"===e.method){let t=new rB("peerStartSpeak",{detail:e.data});this.dispatchEvent(t)}else if("stopSpeak"===e.method){let t=new rB("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 rB("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 rB("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 rB("mediaResume",{detail:{peerId:t,deviceType:r,paused:!1}});this.dispatchEvent(i)}else if("requestDeviceResult"===e.method){let t=new rB(e.method,{detail:e.data});this.dispatchEvent(t)}else if("terminateRoom"===e.method){this.release();let t=new rB(e.method,{detail:e.data});this.dispatchEvent(t)}else if("videoRecordingStarted"===e.method||"videoRecordingStopped"===e.method||"videoRecordingRequested"===e.method){let t=new rB(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 rB("customMessage",{detail:{...e.data,event:r}});this.dispatchEvent(i),this.customMessages.delete(t)}}}),await new Promise((e,t)=>{n=r=>{if(n=()=>{},r)return t(r);e()},a&&n(s)});let o={peerId:this.peerId};return this.dispatchEvent(new rB("initialized",{detail:o})),o}closeWebrtcTransport(e){let t=this.mediasoupTransport[e];t&&(t.transport?.close(),t.transportMonitor?.stopAllMonitorings(),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)if(r&&r.transport)return r.transport;else return 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 rR(r.transport,this,t),"send"===t&&r.transportMonitor?.startMonitoring(["ice-network","outbound-rtp"]))}catch(e){throw this.onCriticalError("TRANS1"),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(rF.log("recv connectionstatechange: ",t),"disconnected"===t)e.disconnectTimeout=setTimeout(()=>{rF.log("listenWebRTCTransportStats",`trying to restart transport for ${e.kind}`),e.transport&&(rF.warn("listenWebRTCTransportStats",`webrtc transport state disconnected for transport : ${e}
133
+ 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}`);rF.error("listenWebRTCTransportStats","webrtc stat failed",t),this.onCriticalError("WRTC1")}}})}onTransportManyDisconnections(e){rF.warn("onTransportManyDisconnections",e.id)}onTransportStateChangeNetwork(e,t){rF.warn("onTransportStateChangeNetwork","\nid:",e.id,"\nisOk:",t);let r=new rB("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 rB("agentIdentity",{detail:{success:!0,email:this.agentIdentity.email,name:this.agentIdentity.name,avatarUrl:this.agentIdentity.settings?.avatar_url}}))}catch(e){rF.warn("setAgentIdentity",e),this.dispatchEvent(new rB("agentIdentity",{detail:{success:!1}}))}}}async setStep(e){if(!this.protoo)throw Error("not connected");this.stepToken=e,await this.protoo.request("step",{token: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 rB("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 tB.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 rB("enterRoom",{detail:{videoRecording:r,videoRecordStarted:t,peerId:this.peerId,peers:Array.from(this.peers.values()),plan:this.plan,permissions:this.permissions}})),rF.log("joinRoom","peers",e),this.joinOptions.displayName&&await this.setDisplayName(this.joinOptions.displayName),this.joinOptions.profile&&await this.setProfile(this.joinOptions.profile),await Promise.all(e.map(e=>Promise.allSettled(e.producersData.map(t=>{if(!t.appData?.custom)return this.consumeProducer({peerId:e.id,producerId:t.producerId,deviceType:t.deviceType,paused:t.paused,appData:t.appData})})))),e.forEach(e=>{e.producersData.forEach(t=>{t.appData?.custom&&this.consumeProducer({peerId:e.id,producerId:t.producerId,deviceType:t.deviceType,paused:t.paused,appData:t.appData})})})}async joinRecorder(){if(!this.protoo)throw Error("stream client not initiated");this.streamerMediasoup=await tB.create(this.protoo,this.config),this.joinOptions.apiKey&&this.setAgentIdentity({apiKey:this.joinOptions.apiKey}),this.dispatchEvent(new rB("enterRoom",{detail:{videoRecording:{started:!1,requested:!1},videoRecordStarted:!1,peerId:this.peerId,peers:[],plan:this.plan,permissions:this.permissions}}))}async switchMicrophone(e){try{if(rF.log("switchMicrophone","deviceId:",e),this.audioLevel?.release(),this.audioLevel=void 0,this.micProducer&&this.micProducer.track&&(this.audioMedia?.removeTrack("mic"),rF.log("switchMicrophone","disabled previous track")),await this.processMediaPermissionsAndResolveRequests({audio:{deviceId:e?{exact:e}:void 0,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 $(t,this),this.audioLevel.analyse(),this.audioMedia=this.audioMedia||new tz,this.audioMedia.addTrack("mic",r),await this.micProducer?.replaceTrack({track:r}),this.micProducer?.paused&&(r.enabled=!1),rF.log("switchMicrophone","switched Microphone");let i=r.getSettings(),s=this.devicesList.find(e=>e.deviceId===i.deviceId);this.microphone.device=s||null;let a=new rB("microphoneChange",{detail:{device:s}});this.dispatchEvent(a)}catch(e){rF.error("switchMicrophone error",e),await this.closeMicrophoneProducer()}}async closeMicrophoneProducer(){let e=this.micProducer?.id;this.micProducer?.close(),this.micProducer=void 0;let t=new rB("microphoneMute",{detail:{}});this.dispatchEvent(t),this.protoo?.connected&&await this.protoo.request("closeProducer",{producerId:e})}async onDeviceChange(){rF.log("onDeviceChange","detecting device change");let e=new rB("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){rF.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));rF.log("onDeviceChange","removed devices:",t);let i=e.filter(e=>!this.devicesList.find(t=>t.deviceId===e.deviceId&&t.label===e.label));rF.log("onDeviceChange","new devices:",i),this.devicesList=e;let s=!!i.find(e=>"audioinput"===e.kind);if(0!==i.length&&!1===s)return void rF.warn("onDeviceChange","no audio input change");if(rF.log("onDeviceChange","detecting audio input change"),!this.audioInputDefaultDevice||this.audioInputDefaultDevice.label!==r.label){let e=new rB("defaultAudioDeviceChange",{detail:r});this.audioInputDefaultDevice=r,this.dispatchEvent(e),rF.log("onDeviceChange",`
134
+ new default audio input :
135
+ deviceId: ${r.deviceId},
136
+ label: ${r.label}`)}this.switchMicrophone("default")}else this.switchMicrophone()}}async enableMicrophone({deviceId:e}={}){await this._enableMicrophone({deviceId:e}).catch(e=>{throw e.cause!==rV&&window.Sentry&&window.Sentry.captureException(e),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}),this.microphone.error=void 0}async _enableMicrophone({deviceId:e}={}){if(this.micProducer&&!this.micProducer.closed)return;if(!e&&this.tracksHandler.audio.track?console.log("enableMicrophone","no deviceId, using track"):await this.processMediaPermissionsAndResolveRequests({audio:{deviceId:e,noiseSuppression:!0,echoCancellation:!0}}).catch(e=>{throw Error(e,{cause:rV})}),!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 $(this.tracksHandler.audio.stream,this),this.audioLevel.analyse(),this.audioMedia=this.audioMedia||new tz;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",()=>{rF.log("enableMicrophone","micproducer transportclose")}),r.addEventListener("ended",()=>{rF.log("enableMicrophone","track ended!")}),a.on("trackended",async()=>{rF.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 rB("microphoneEnabled",{detail:{}});this.dispatchEvent(n),this.liveAIAgent?.setTrack(r)}initLiveAIAgent(e){if(!this.streamInfo)throw Error("streamInfo not initialized");return this.liveAIAgent||(this.liveAIAgent=new rf,this.liveAIAgent?.init(e,this.streamInfo)),this.liveAIAgent}muteMicrophone(){if(this.micProducer){this.onStopSpeak(),this.micProducer.pause(),this.audioMedia||rF.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 rB("microphoneMute",{detail:{}});this.dispatchEvent(e)}}unMuteMicrophone(){if(this.micProducer){this.micProducer.resume(),this.audioMedia||rF.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 rB("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 rF.log("release"),this.mediasoupTransport)this.closeWebrtcTransport(e);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.liveAIAgent?.agent.stop(),this.release();let e=new rB("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")}isVideoZoomAvailable(){return this.camera.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 stopDrawer(){this.drawer&&(this.dispatchEvent(new rB("drawerStopped",{detail:{peerId:this.drawer.peerId,mediaId:this.drawer.consumerId}})),this.disableCustomVideo(),this.drawer.clean(),this.drawer=void 0)}async drawInVideo({peerId:e,mediaId:t,deviceType:r,videoElement:i,canvasElement:s}){let a;if(this.drawer)throw Error("drawer already exists");let n=this.consumers.get(t||""),o=n?.producerId;if(!o&&e!==this.peerId)throw Error("producerId not found");this.drawer=new rx({deviceType:r||"webcam",canvas:s,video:i,consumerId:t||"local",producerId:o||"local",peerId:e});let c=await this.drawer.createStream(),d=this.peers.get(e);if(e===this.peerId)a=this.webcamProducer?.id;else{let e=d?.producersData.find(e=>e.deviceType===r);a=e?.producerId}this.enableCustomVideo({mediaStream:c,deviceType:r,appData:{originalPeerId:this.peerId,peerId:e,replace:!0,deviceType:r,producerId:a}}),this.dispatchEvent(new rB("drawerStarted",{detail:{peerId:e,mediaId:t}}))}async processMediaPermissionsAndResolveRequests(e){let t,r=new rB("requestAccessUpdate",{detail:{}});try{let t=this.tracksHandler.requestMediaPermissions(e);return this.dispatchEvent(r),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(rF.log("restartIce",e.connectionState,e.closed),"disconnected"===e.connectionState&&!e.closed&&this.protoo)try{let t=await this.protoo.request("restartIce",{transportId:e.id});rF.log("restartIce",t),await e.restartIce({iceParameters:t})}catch(e){this.onCriticalError("WRTC2"),rF.log("restartIce","restartIceFailed",e)}}scaleVideoEncodingsParameter(){if(!this.camera.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}),!this.webcamProducer?.setRtpEncodingParameters)return this.camera.scaleVideoMediasConstraintsParameter(t.scaleResolutionDownBy);this.webcamProducer&&!this.webcamProducer.closed&&(rF.log("scaleVideoEncodingsParameter",`scaling video by ${t.scaleResolutionDownBy}`),this.webcamProducer?.setRtpEncodingParameters?.(t).catch(e=>{rF.error("scaleVideoEncodingsParameter","scaleResolutionDownBy not supported",e),this.camera.scaleVideoMediasConstraintsParameter(t.scaleResolutionDownBy)}))}catch(e){rF.error("scaleVideoEncodingsParameter","scaleVideo error",e)}}async initVideoBackground(){if(!this.permissions.find(e=>"virtual_background"===e))throw Error("feature not allowed");!0!==this.camera.useVideoBackground&&(this.camera.useVideoBackground=!0,this.webcamProducer&&!this.webcamProducer.closed&&await this.switchWebcam({}))}async stopVideoBackground(){!1!==this.camera.useVideoBackground&&(this.camera.cleanMediapipe(),this.webcamProducer&&!this.webcamProducer.closed&&await this.switchWebcam({}))}async switchWebcam({device:e,resolution:t,rotate:r,frameRate:i,facingMode:s}){if(!this.camera.webcam.device)throw Error("no webcam devices");await this.webcamProducer?.replaceTrack?.({track:null}).catch(e=>{rF.error("switchCamera","clean track failed",e)});let a=await this.camera.enable({device:e,resolution:t,rotate:r,frameRate:i,facingMode:s});if(!this.tracksHandler.video.stream)throw Error("switchWebcam : no stream");if(!await this.getTransport("video","send"))throw Error("video transport not found, cannot switch");this.webcamTrack=a,await this.webcamProducer?.replaceTrack?.({track:a});let n=new rB("localVideoChange",{detail:{camera:this.getCurrentWebcam()}});this.dispatchEvent(n)}async enableVideo(e){await this._enableVideo(e).catch(e=>{throw e.cause!==rV&&window.Sentry&&window.Sentry.captureException(e),console.error("enableVideo error",e),this.disableVideo(),this.camera.webcam.error=e,e})}async _enableVideo(e){rF.log("enableVideo",e),e||(e={facingMode:"desktop"===rz.platform.type?void 0:"user"});let t=await this.camera.enable(e),r=await this.getTransport("video","send");this.webcamProducer=await r.produce({track:t,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 i=new rB("localVideoAvailable",{detail:{camera:this.getCurrentWebcam()}});this.dispatchEvent(i)}async rotateVideo(){await this.switchWebcam({rotate:!0})}zoomVideo(){return this.camera.zoomVideo()}async unzoomVideo(){return this.camera.unzoomVideo()}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.webcamProducer=null,this.camera.clean();let e=new rB("localVideoUnavailable",{detail:{}});this.dispatchEvent(e)}async enableCustomVideo(e){await this._enableCustomVideo(e).catch(e=>{throw e.cause!==rV&&window.Sentry&&window.Sentry.captureException(e),this.disableCustomVideo(),e})}async _enableCustomVideo(e){let t=e.mediaStream;if(!t)throw Error("enableCustomVideo : no stream");let r=t.getVideoTracks()[0],i=await this.getTransport("video","send");this.customVideoProducer=await this.streamerMediasoup?.produceVideo(i,r,{deviceType:e.deviceType,custom:!0,...e.appData}),this.customVideoProducer?.on("transportclose",()=>{this.customVideoProducer=void 0}),this.customVideoProducer?.on("trackended",()=>{this.disableCustomVideo().catch(()=>{})});let s=new rB("customVideoEnabled",{detail:{deviceType:e.deviceType,appData:e.appData}});this.dispatchEvent(s)}async disableCustomVideo(){if(this.customVideoProducer){let e=this.customVideoProducer.appData,t=e.deviceType;this.customVideoProducer.close(),this.protoo?.connected&&await this.protoo.request("closeProducer",{producerId:this.customVideoProducer.id}),this.customVideoProducer=void 0;let r=new rB("customVideoDisabled",{detail:{deviceType:t,appData:e}});this.dispatchEvent(r)}}async enableScreenshare(e={audioTransportOption:"classic"}){await this._enableScreenshare(e).catch(e=>{throw e.cause!==rV&&window.Sentry&&window.Sentry.captureException(e),this.disableScreenshare(),this.screenshare.error=e,e}),rb.instance?.event("startScreenShare"),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:rV})})),!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 tz,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 rB("screenshareEnabled",{detail:{}});this.dispatchEvent(o)}async disableScreenshare(){rb.instance?.event("stopScreenShare"),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 rB("screenshareDisabled",{detail:{}});this.dispatchEvent(e)}onConsumerClose({consumerId:e}){let t=this.consumers.get(e);if(rF.info("onConsumerClose","on consumer close"),t){let r=t.mediaSoupConsumer.producerId;this.drawer?.producerId===r&&this.stopDrawer(),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 rB("mediaStop",{detail:{appData:t.appData,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}){let r=this.consumers.get(e);if(r){let e=new MediaStream;e.onremovetrack=()=>rF.log("requestVideo","Remove Track"),r.mediaSoupConsumer.track.onended=()=>rF.log("requestVideo","Track Ended"),e.addTrack(r.mediaSoupConsumer.track),t.srcObject=e}else rF.error("requestVideo",`Video consumer ${r} not found`)}async saveCapture(e){return await tG(this.config.apiUrl,{token:this.roomId,base64Image:e,recordingGroup:this.recordingGroup})}async uploadAsset(e,t){return tQ(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 tK(this.config.apiUrl,this.roomId,r)}async captureVideo(e){if(this.permissions.find(e=>"instant_picture"===e)){let t;if(e)t=await z(e,this.camera);else if(this.webcamProducer&&this.webcamProducer.track)t=await W(this.webcamProducer.track);else throw Error("no video to capture");return t}throw Error("feature not allowed")}async captureScreenShare(){if(this.permissions.find(e=>"instant_picture"===e)){let e;if(this.screenshareVideoProducer&&this.screenshareVideoProducer.track)e=await W(this.screenshareVideoProducer.track);else throw Error("no video to capture");return e}throw Error("feature not allowed")}requestLocalVideo(e){if(rF.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(console.log("requestLocalScreenshare"),this.screenshareVideoProducer){let t=new MediaStream;t.addTrack(this.screenshareVideoProducer.track),e.srcObject=t}else rF.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,appData:t.appData})})}async consumeProducer({peerId:e,producerId:t,deviceType:r,paused:i,appData:s}){let a,n=this.peers.get(e);try{let o=await this.getTransport("microphone"===r?"audio":"video","recv"),c=await this.protoo?.request("consume",{peerId:e,producerId:t,transportId:o.id,rtpCapabilities:this.streamerMediasoup.getRtpCapabilities()});n&&n.producersData.push({producerId:t,deviceType:r,paused:i,appData:s});let{producerId:d,id:l,kind:p,rtpParameters:h,appData:u}=c;rF.log("consumeProducer","Data: ",c),a=await o.consume({id:l,producerId:d,kind:p,rtpParameters:h,appData:{...u,peerId:e}}),rF.log("transport",o),rF.log("consumer",a),this.consumers.set(a.id,{mediaSoupConsumer:a,deviceType:r,producerId:t,peerId:e,appData:s})}catch(e){this.onCriticalError("CONS1"),rF.error("consumeProducer","newConsumer request failed",e)}try{this.scaleVideoEncodingsParameter()}catch(e){console.error("scale error",e)}if(a){let t=new rB("mediaStart",{detail:{peerId:e,mediaId:a.id,deviceType:r,paused:!!n&&n.muted,appData:s}});this.dispatchEvent(t)}if(a?.kind==="audio")try{let e=this.createAudioRenderer(a.id),t=new MediaStream;t.addTrack(a.track),e.setSource(t),e.play()}catch(e){console.error("audio renderer error",e)}if(a?.kind==="video")try{await this.protoo?.request("resumeConsumer",{consumerId:a.id})}catch(e){console.error("resume consumer error",e)}}async setDisplayName(e){await this.setProfile({name:e});let t=new rB("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 rB("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,...this.camera.getState()},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=f(),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=f(),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.camera.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.camera.webcam.device)await this.switchWebcam({resolution:e});else{this.camera.webcam.resolution=e;let t=new rB("localVideoChange",{detail:{camera:this.getCurrentWebcam()}});this.dispatchEvent(t)}}createAudioRenderer(e){let t=new B({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=>rF.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?rT(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.protoo)throw Error("not connected");let e=await this.protoo?.request("startRecord",{recordingGroup:this.recordingGroup,iceTransportState:this.micProducer?.rtpSender?.transport?.iceTransport.state});this.tmpFilename=void 0,e.filename&&(this.tmpFilename=`recorder/${e.filename}`),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()}getRecordTmpData(){return{filename:this.tmpFilename,recordingGroup:this.recordingGroup}}getWaitingRequests(){if(!this.protoo)throw Error("not connected");return this.protoo?.request("waitingRequests")}readAsset(e){return tW(this.config.apiUrl,this.roomId,e)}deleteAsset(e){return tH(this.config.apiUrl,this.roomId,e)}};