@urun-sh/core 0.2.5 → 0.2.7

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.
package/dist/internal.js CHANGED
@@ -1,7 +1,3 @@
1
- "use strict";var Pn=Object.create;var wt=Object.defineProperty;var Dn=Object.getOwnPropertyDescriptor;var In=Object.getOwnPropertyNames;var Ln=Object.getPrototypeOf,Mn=Object.prototype.hasOwnProperty;var On=(s,e,t)=>()=>{if(t)throw t[0];try{return s&&(e=s(s=0)),e}catch(r){throw t=[r],r}};var C=(s,e)=>()=>{try{return e||s((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}},ms=(s,e)=>{for(var t in e)wt(s,t,{get:e[t],enumerable:!0})},gs=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of In(e))!Mn.call(s,i)&&i!==t&&wt(s,i,{get:()=>e[i],enumerable:!(r=Dn(e,i))||r.enumerable});return s};var be=(s,e,t)=>(t=s!=null?Pn(Ln(s)):{},gs(e||!s||!s.__esModule?wt(t,"default",{value:s,enumerable:!0}):t,s)),_s=s=>gs(wt({},"__esModule",{value:!0}),s);var ws=C((od,vs)=>{"use strict";var De=1e3,Ie=De*60,Le=Ie*60,ye=Le*24,An=ye*7,Nn=ye*365.25;vs.exports=function(s,e){e=e||{};var t=typeof s;if(t==="string"&&s.length>0)return jn(s);if(t==="number"&&isFinite(s))return e.long?qn(s):Fn(s);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(s))};function jn(s){if(s=String(s),!(s.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(s);if(e){var t=parseFloat(e[1]),r=(e[2]||"ms").toLowerCase();switch(r){case"years":case"year":case"yrs":case"yr":case"y":return t*Nn;case"weeks":case"week":case"w":return t*An;case"days":case"day":case"d":return t*ye;case"hours":case"hour":case"hrs":case"hr":case"h":return t*Le;case"minutes":case"minute":case"mins":case"min":case"m":return t*Ie;case"seconds":case"second":case"secs":case"sec":case"s":return t*De;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:return}}}}function Fn(s){var e=Math.abs(s);return e>=ye?Math.round(s/ye)+"d":e>=Le?Math.round(s/Le)+"h":e>=Ie?Math.round(s/Ie)+"m":e>=De?Math.round(s/De)+"s":s+"ms"}function qn(s){var e=Math.abs(s);return e>=ye?bt(s,e,ye,"day"):e>=Le?bt(s,e,Le,"hour"):e>=Ie?bt(s,e,Ie,"minute"):e>=De?bt(s,e,De,"second"):s+" ms"}function bt(s,e,t,r){var i=e>=t*1.5;return Math.round(s/t)+" "+r+(i?"s":"")}});var fr=C((cd,bs)=>{"use strict";function zn(s){t.debug=t,t.default=t,t.coerce=c,t.disable=a,t.enable=i,t.enabled=o,t.humanize=ws(),t.destroy=p,Object.keys(s).forEach(d=>{t[d]=s[d]}),t.names=[],t.skips=[],t.formatters={};function e(d){let l=0;for(let u=0;u<d.length;u++)l=(l<<5)-l+d.charCodeAt(u),l|=0;return t.colors[Math.abs(l)%t.colors.length]}t.selectColor=e;function t(d){let l,u=null,f,m;function h(...g){if(!h.enabled)return;let w=h,E=Number(new Date),P=E-(l||E);w.diff=P,w.prev=l,w.curr=E,l=E,g[0]=t.coerce(g[0]),typeof g[0]!="string"&&g.unshift("%O");let k=0;g[0]=g[0].replace(/%([a-zA-Z%])/g,(L,Pe)=>{if(L==="%%")return"%";k++;let tt=t.formatters[Pe];if(typeof tt=="function"){let me=g[k];L=tt.call(w,me),g.splice(k,1),k--}return L}),t.formatArgs.call(w,g),(w.log||t.log).apply(w,g)}return h.namespace=d,h.useColors=t.useColors(),h.color=t.selectColor(d),h.extend=r,h.destroy=t.destroy,Object.defineProperty(h,"enabled",{enumerable:!0,configurable:!1,get:()=>u!==null?u:(f!==t.namespaces&&(f=t.namespaces,m=t.enabled(d)),m),set:g=>{u=g}}),typeof t.init=="function"&&t.init(h),h}function r(d,l){let u=t(this.namespace+(typeof l>"u"?":":l)+d);return u.log=this.log,u}function i(d){t.save(d),t.namespaces=d,t.names=[],t.skips=[];let l=(typeof d=="string"?d:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let u of l)u[0]==="-"?t.skips.push(u.slice(1)):t.names.push(u)}function n(d,l){let u=0,f=0,m=-1,h=0;for(;u<d.length;)if(f<l.length&&(l[f]===d[u]||l[f]==="*"))l[f]==="*"?(m=f,h=u,f++):(u++,f++);else if(m!==-1)f=m+1,h++,u=h;else return!1;for(;f<l.length&&l[f]==="*";)f++;return f===l.length}function a(){let d=[...t.names,...t.skips.map(l=>"-"+l)].join(",");return t.enable(""),d}function o(d){for(let l of t.skips)if(n(d,l))return!1;for(let l of t.names)if(n(d,l))return!0;return!1}function c(d){return d instanceof Error?d.stack||d.message:d}function p(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.enable(t.load()),t}bs.exports=zn});var ys=C((W,yt)=>{"use strict";W.formatArgs=Bn;W.save=Un;W.load=Hn;W.useColors=$n;W.storage=Wn();W.destroy=(()=>{let s=!1;return()=>{s||(s=!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`."))}})();W.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"];function $n(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let s;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(s=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(s[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function Bn(s){if(s[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+s[0]+(this.useColors?"%c ":" ")+"+"+yt.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;s.splice(1,0,e,"color: inherit");let t=0,r=0;s[0].replace(/%[a-zA-Z%]/g,i=>{i!=="%%"&&(t++,i==="%c"&&(r=t))}),s.splice(r,0,e)}W.log=console.debug||console.log||(()=>{});function Un(s){try{s?W.storage.setItem("debug",s):W.storage.removeItem("debug")}catch{}}function Hn(){let s;try{s=W.storage.getItem("debug")||W.storage.getItem("DEBUG")}catch{}return!s&&typeof process<"u"&&"env"in process&&(s=process.env.DEBUG),s}function Wn(){try{return localStorage}catch{}}yt.exports=fr()(W);var{formatters:Vn}=yt.exports;Vn.j=function(s){try{return JSON.stringify(s)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var Cs={};ms(Cs,{createSupportsColor:()=>gr,default:()=>Jn});function Q(s,e=globalThis.Deno?globalThis.Deno.args:Ct.default.argv){let t=s.startsWith("-")?"":s.length===1?"-":"--",r=e.indexOf(t+s),i=e.indexOf("--");return r!==-1&&(i===-1||r<i)}function Gn(){if(!("FORCE_COLOR"in M))return;if(M.FORCE_COLOR==="true")return 1;if(M.FORCE_COLOR==="false")return 0;if(M.FORCE_COLOR.length===0)return 1;let s=Math.min(Number.parseInt(M.FORCE_COLOR,10),3);if([0,1,2,3].includes(s))return s}function Kn(s){return s===0?!1:{level:s,hasBasic:!0,has256:s>=2,has16m:s>=3}}function Qn(s,{streamIsTTY:e,sniffFlags:t=!0}={}){let r=Gn();r!==void 0&&(St=r);let i=t?St:r;if(i===0)return 0;if(t){if(Q("color=16m")||Q("color=full")||Q("color=truecolor"))return 3;if(Q("color=256"))return 2}if("TF_BUILD"in M&&"AGENT_NAME"in M)return 1;if(s&&!e&&i===void 0)return 0;let n=i||0;if(M.TERM==="dumb")return n;if(Ct.default.platform==="win32"){let a=Ss.default.release().split(".");return Number(a[0])>=10&&Number(a[2])>=10586?Number(a[2])>=14931?3:2:1}if("CI"in M)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(a=>a in M)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(a=>a in M)||M.CI_NAME==="codeship"?1:n;if("TEAMCITY_VERSION"in M)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(M.TEAMCITY_VERSION)?1:0;if(M.COLORTERM==="truecolor"||M.TERM==="xterm-kitty"||M.TERM==="xterm-ghostty"||M.TERM==="wezterm")return 3;if("TERM_PROGRAM"in M){let a=Number.parseInt((M.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(M.TERM_PROGRAM){case"iTerm.app":return a>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(M.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(M.TERM)||"COLORTERM"in M?1:n}function gr(s,e={}){let t=Qn(s,{streamIsTTY:s&&s.isTTY,...e});return Kn(t)}var Ct,Ss,mr,M,St,Yn,Jn,Rs=On(()=>{"use strict";Ct=be(require("process"),1),Ss=be(require("os"),1),mr=be(require("tty"),1);({env:M}=Ct.default);Q("no-color")||Q("no-colors")||Q("color=false")||Q("color=never")?St=0:(Q("color")||Q("colors")||Q("color=true")||Q("color=always"))&&(St=1);Yn={stdout:gr({isTTY:mr.default.isatty(1)}),stderr:gr({isTTY:mr.default.isatty(2)})},Jn=Yn});var Es=C((j,Tt)=>{"use strict";var Xn=require("tty"),Rt=require("util");j.init=na;j.log=ra;j.formatArgs=ea;j.save=sa;j.load=ia;j.useColors=Zn;j.destroy=Rt.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");j.colors=[6,2,3,4,5,1];try{let s=(Rs(),_s(Cs));s&&(s.stderr||s).level>=2&&(j.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}j.inspectOpts=Object.keys(process.env).filter(s=>/^debug_/i.test(s)).reduce((s,e)=>{let t=e.substring(6).toLowerCase().replace(/_([a-z])/g,(i,n)=>n.toUpperCase()),r=process.env[e];return/^(yes|on|true|enabled)$/i.test(r)?r=!0:/^(no|off|false|disabled)$/i.test(r)?r=!1:r==="null"?r=null:r=Number(r),s[t]=r,s},{});function Zn(){return"colors"in j.inspectOpts?!!j.inspectOpts.colors:Xn.isatty(process.stderr.fd)}function ea(s){let{namespace:e,useColors:t}=this;if(t){let r=this.color,i="\x1B[3"+(r<8?r:"8;5;"+r),n=` ${i};1m${e} \x1B[0m`;s[0]=n+s[0].split(`
2
- `).join(`
3
- `+n),s.push(i+"m+"+Tt.exports.humanize(this.diff)+"\x1B[0m")}else s[0]=ta()+e+" "+s[0]}function ta(){return j.inspectOpts.hideDate?"":new Date().toISOString()+" "}function ra(...s){return process.stderr.write(Rt.formatWithOptions(j.inspectOpts,...s)+`
4
- `)}function sa(s){s?process.env.DEBUG=s:delete process.env.DEBUG}function ia(){return process.env.DEBUG}function na(s){s.inspectOpts={};let e=Object.keys(j.inspectOpts);for(let t=0;t<e.length;t++)s.inspectOpts[e[t]]=j.inspectOpts[e[t]]}Tt.exports=fr()(j);var{formatters:Ts}=Tt.exports;Ts.o=function(s){return this.inspectOpts.colors=this.useColors,Rt.inspect(s,this.inspectOpts).split(`
5
- `).map(e=>e.trim()).join(" ")};Ts.O=function(s){return this.inspectOpts.colors=this.useColors,Rt.inspect(s,this.inspectOpts)}});var rt=C((dd,_r)=>{"use strict";typeof process>"u"||process.type==="renderer"||process.browser===!0||process.__nwjs?_r.exports=ys():_r.exports=Es()});var ks=C(xs=>{"use strict";Object.defineProperty(xs,"__esModule",{value:!0})});var $=C(Et=>{"use strict";Object.defineProperty(Et,"__esModule",{value:!0});Et.Logger=void 0;var Me=rt(),Oe="media-client",vr=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,Me.default)(`${Oe}:${e}`),this._warn=(0,Me.default)(`${Oe}:WARN:${e}`),this._error=(0,Me.default)(`${Oe}:ERROR:${e}`)):(this._debug=(0,Me.default)(Oe),this._warn=(0,Me.default)(`${Oe}:WARN`),this._error=(0,Me.default)(`${Oe}: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}};Et.Logger=vr});var qs=C((ud,wr)=>{"use strict";var Ae=typeof Reflect=="object"?Reflect:null,Ps=Ae&&typeof Ae.apply=="function"?Ae.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)},xt;Ae&&typeof Ae.ownKeys=="function"?xt=Ae.ownKeys:Object.getOwnPropertySymbols?xt=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:xt=function(e){return Object.getOwnPropertyNames(e)};function aa(s){console&&console.warn&&console.warn(s)}var Is=Number.isNaN||function(e){return e!==e};function D(){D.init.call(this)}wr.exports=D;wr.exports.once=pa;D.EventEmitter=D;D.prototype._events=void 0;D.prototype._eventsCount=0;D.prototype._maxListeners=void 0;var Ds=10;function kt(s){if(typeof s!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof s)}Object.defineProperty(D,"defaultMaxListeners",{enumerable:!0,get:function(){return Ds},set:function(s){if(typeof s!="number"||s<0||Is(s))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+s+".");Ds=s}});D.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};D.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||Is(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this};function Ls(s){return s._maxListeners===void 0?D.defaultMaxListeners:s._maxListeners}D.prototype.getMaxListeners=function(){return Ls(this)};D.prototype.emit=function(e){for(var t=[],r=1;r<arguments.length;r++)t.push(arguments[r]);var i=e==="error",n=this._events;if(n!==void 0)i=i&&n.error===void 0;else if(!i)return!1;if(i){var a;if(t.length>0&&(a=t[0]),a instanceof Error)throw a;var o=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw o.context=a,o}var c=n[e];if(c===void 0)return!1;if(typeof c=="function")Ps(c,this,t);else for(var p=c.length,d=js(c,p),r=0;r<p;++r)Ps(d[r],this,t);return!0};function Ms(s,e,t,r){var i,n,a;if(kt(t),n=s._events,n===void 0?(n=s._events=Object.create(null),s._eventsCount=0):(n.newListener!==void 0&&(s.emit("newListener",e,t.listener?t.listener:t),n=s._events),a=n[e]),a===void 0)a=n[e]=t,++s._eventsCount;else if(typeof a=="function"?a=n[e]=r?[t,a]:[a,t]:r?a.unshift(t):a.push(t),i=Ls(s),i>0&&a.length>i&&!a.warned){a.warned=!0;var o=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");o.name="MaxListenersExceededWarning",o.emitter=s,o.type=e,o.count=a.length,aa(o)}return s}D.prototype.addListener=function(e,t){return Ms(this,e,t,!1)};D.prototype.on=D.prototype.addListener;D.prototype.prependListener=function(e,t){return Ms(this,e,t,!0)};function oa(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function Os(s,e,t){var r={fired:!1,wrapFn:void 0,target:s,type:e,listener:t},i=oa.bind(r);return i.listener=t,r.wrapFn=i,i}D.prototype.once=function(e,t){return kt(t),this.on(e,Os(this,e,t)),this};D.prototype.prependOnceListener=function(e,t){return kt(t),this.prependListener(e,Os(this,e,t)),this};D.prototype.removeListener=function(e,t){var r,i,n,a,o;if(kt(t),i=this._events,i===void 0)return this;if(r=i[e],r===void 0)return this;if(r===t||r.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete i[e],i.removeListener&&this.emit("removeListener",e,r.listener||t));else if(typeof r!="function"){for(n=-1,a=r.length-1;a>=0;a--)if(r[a]===t||r[a].listener===t){o=r[a].listener,n=a;break}if(n<0)return this;n===0?r.shift():ca(r,n),r.length===1&&(i[e]=r[0]),i.removeListener!==void 0&&this.emit("removeListener",e,o||t)}return this};D.prototype.off=D.prototype.removeListener;D.prototype.removeAllListeners=function(e){var t,r,i;if(r=this._events,r===void 0)return this;if(r.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):r[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete r[e]),this;if(arguments.length===0){var n=Object.keys(r),a;for(i=0;i<n.length;++i)a=n[i],a!=="removeListener"&&this.removeAllListeners(a);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(t=r[e],typeof t=="function")this.removeListener(e,t);else if(t!==void 0)for(i=t.length-1;i>=0;i--)this.removeListener(e,t[i]);return this};function As(s,e,t){var r=s._events;if(r===void 0)return[];var i=r[e];return i===void 0?[]:typeof i=="function"?t?[i.listener||i]:[i]:t?da(i):js(i,i.length)}D.prototype.listeners=function(e){return As(this,e,!0)};D.prototype.rawListeners=function(e){return As(this,e,!1)};D.listenerCount=function(s,e){return typeof s.listenerCount=="function"?s.listenerCount(e):Ns.call(s,e)};D.prototype.listenerCount=Ns;function Ns(s){var e=this._events;if(e!==void 0){var t=e[s];if(typeof t=="function")return 1;if(t!==void 0)return t.length}return 0}D.prototype.eventNames=function(){return this._eventsCount>0?xt(this._events):[]};function js(s,e){for(var t=new Array(e),r=0;r<e;++r)t[r]=s[r];return t}function ca(s,e){for(;e+1<s.length;e++)s[e]=s[e+1];s.pop()}function da(s){for(var e=new Array(s.length),t=0;t<e.length;++t)e[t]=s[t].listener||s[t];return e}function pa(s,e){return new Promise(function(t,r){function i(a){s.removeListener(e,n),r(a)}function n(){typeof s.removeListener=="function"&&s.removeListener("error",i),t([].slice.call(arguments))}Fs(s,e,n,{once:!0}),e!=="error"&&la(s,i,{once:!0})})}function la(s,e,t){typeof s.on=="function"&&Fs(s,"error",e,t)}function Fs(s,e,t,r){if(typeof s.on=="function")r.once?s.once(e,t):s.on(e,t);else if(typeof s.addEventListener=="function")s.addEventListener(e,function i(n){r.once&&s.removeEventListener(e,i),t(n)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof s)}});var V=C(Pt=>{"use strict";Object.defineProperty(Pt,"__esModule",{value:!0});Pt.EnhancedEventEmitter=void 0;var ua=qs(),ha=$(),fa=new ha.Logger("EnhancedEventEmitter"),br=class extends ua.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(r){fa.error("safeEmit() | event listener threw an error [eventName:%s]:%o",e,r);try{super.emit("listenererror",e,r)}catch{}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)}};Pt.EnhancedEventEmitter=br});var Y=C(Ne=>{"use strict";Object.defineProperty(Ne,"__esModule",{value:!0});Ne.InvalidStateError=Ne.UnsupportedError=void 0;var yr=class s extends Error{constructor(e){super(e),this.name="UnsupportedError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,s):this.stack=new Error(e).stack}};Ne.UnsupportedError=yr;var Sr=class s extends Error{constructor(e){super(e),this.name="InvalidStateError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,s):this.stack=new Error(e).stack}};Ne.InvalidStateError=Sr});var Se=C(st=>{"use strict";Object.defineProperty(st,"__esModule",{value:!0});st.clone=ma;st.generateRandomNumber=ga;st.deepFreeze=zs;function ma(s){if(s!==void 0)return Number.isNaN(s)?NaN:typeof structuredClone=="function"?structuredClone(s):JSON.parse(JSON.stringify(s))}function ga(){return Math.round(Math.random()*1e7)}function zs(s){let e=Reflect.ownKeys(s);for(let t of e){let r=s[t];(r&&typeof r=="object"||typeof r=="function")&&zs(r)}return Object.freeze(s)}});var $s=C(Dt=>{"use strict";Object.defineProperty(Dt,"__esModule",{value:!0});Dt.Logger=void 0;var je=rt(),Fe="h264-profile-level-id",Cr=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,je.default)(`${Fe}:${e}`),this._warn=(0,je.default)(`${Fe}:WARN:${e}`),this._error=(0,je.default)(`${Fe}:ERROR:${e}`)):(this._debug=(0,je.default)(Fe),this._warn=(0,je.default)(`${Fe}:WARN`),this._error=(0,je.default)(`${Fe}: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}};Dt.Logger=Cr});var Gs=C(F=>{"use strict";Object.defineProperty(F,"__esModule",{value:!0});F.ProfileLevelId=F.Level=F.Profile=void 0;F.parseProfileLevelId=Ws;F.profileLevelIdToString=Vs;F.profileToString=ba;F.levelToString=ya;F.parseSdpProfileLevelId=Ce;F.isSameProfile=Sa;F.isSameProfileAndLevel=Ca;F.generateProfileLevelIdStringForAnswer=Ra;F.supportedLevel=Ta;var _a=$s(),re=new _a.Logger,I;(function(s){s[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"})(I||(F.Profile=I={}));var _;(function(s){s[s.L1_b=0]="L1_b",s[s.L1=10]="L1",s[s.L1_1=11]="L1_1",s[s.L1_2=12]="L1_2",s[s.L1_3=13]="L1_3",s[s.L2=20]="L2",s[s.L2_1=21]="L2_1",s[s.L2_2=22]="L2_2",s[s.L3=30]="L3",s[s.L3_1=31]="L3_1",s[s.L3_2=32]="L3_2",s[s.L4=40]="L4",s[s.L4_1=41]="L4_1",s[s.L4_2=42]="L4_2",s[s.L5=50]="L5",s[s.L5_1=51]="L5_1",s[s.L5_2=52]="L5_2"})(_||(F.Level=_={}));var qe=class{profile;level;constructor(e,t){this.profile=e,this.level=t}};F.ProfileLevelId=qe;var va=new qe(I.ConstrainedBaseline,_.L3_1),ee=class{mask;masked_value;constructor(e){this.mask=~Us("x",e),this.masked_value=Us("1",e)}isMatch(e){return this.masked_value===(e&this.mask)}},te=class{profile_idc;profile_iop;profile;constructor(e,t,r){this.profile_idc=e,this.profile_iop=t,this.profile=r}},wa=[new te(66,new ee("x1xx0000"),I.ConstrainedBaseline),new te(77,new ee("1xxx0000"),I.ConstrainedBaseline),new te(88,new ee("11xx0000"),I.ConstrainedBaseline),new te(66,new ee("x0xx0000"),I.Baseline),new te(88,new ee("10xx0000"),I.Baseline),new te(77,new ee("0x0x0000"),I.Main),new te(100,new ee("00000000"),I.High),new te(100,new ee("00001100"),I.ConstrainedHigh),new te(244,new ee("00000000"),I.PredictiveHigh444)],Bs=[{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:_.L1},{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:_.L1_b},{max_macroblocks_per_second:3e3,max_macroblock_frame_size:396,level:_.L1_1},{max_macroblocks_per_second:6e3,max_macroblock_frame_size:396,level:_.L1_2},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:_.L1_3},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:_.L2},{max_macroblocks_per_second:19800,max_macroblock_frame_size:792,level:_.L2_1},{max_macroblocks_per_second:20250,max_macroblock_frame_size:1620,level:_.L2_2},{max_macroblocks_per_second:40500,max_macroblock_frame_size:1620,level:_.L3},{max_macroblocks_per_second:108e3,max_macroblock_frame_size:3600,level:_.L3_1},{max_macroblocks_per_second:216e3,max_macroblock_frame_size:5120,level:_.L3_2},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:_.L4},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:_.L4_1},{max_macroblocks_per_second:522240,max_macroblock_frame_size:8704,level:_.L4_2},{max_macroblocks_per_second:589824,max_macroblock_frame_size:22080,level:_.L5},{max_macroblocks_per_second:983040,max_macroblock_frame_size:36864,level:_.L5_1},{max_macroblocks_per_second:2073600,max_macroblock_frame_size:36864,level:_.L5_2}];function Ws(s){if(typeof s!="string"||s.length!==6)return;let t=parseInt(s,16);if(t===0)return;let r=t&255,i=t>>8&255,n=t>>16&255,a;switch(r){case _.L1_1:{a=(i&16)!==0?_.L1_b:_.L1_1;break}case _.L1:case _.L1_2:case _.L1_3:case _.L2:case _.L2_1:case _.L2_2:case _.L3:case _.L3_1:case _.L3_2:case _.L4:case _.L4_1:case _.L4_2:case _.L5:case _.L5_1:case _.L5_2:{a=r;break}default:{re.warn(`parseProfileLevelId() | unrecognized level_idc [str:${s}, level_idc:${r}]`);return}}for(let o of wa)if(n===o.profile_idc&&o.profile_iop.isMatch(i))return re.debug(`parseProfileLevelId() | result [str:${s}, profile:${o.profile}, level:${a}]`),new qe(o.profile,a);re.warn(`parseProfileLevelId() | unrecognized profile_idc/profile_iop combination [str:${s}, profile_idc:${n}, profile_iop:${i}]`)}function Vs(s){if(s.level==_.L1_b)switch(s.profile){case I.ConstrainedBaseline:return"42f00b";case I.Baseline:return"42100b";case I.Main:return"4d100b";default:{re.warn(`profileLevelIdToString() | Level 1_b not is allowed for profile ${s.profile}`);return}}let e;switch(s.profile){case I.ConstrainedBaseline:{e="42e0";break}case I.Baseline:{e="4200";break}case I.Main:{e="4d00";break}case I.ConstrainedHigh:{e="640c";break}case I.High:{e="6400";break}case I.PredictiveHigh444:{e="f400";break}default:{re.warn(`profileLevelIdToString() | unrecognized profile ${s.profile}`);return}}let t=s.level.toString(16);return t.length===1&&(t=`0${t}`),`${e}${t}`}function ba(s){switch(s){case I.ConstrainedBaseline:return"ConstrainedBaseline";case I.Baseline:return"Baseline";case I.Main:return"Main";case I.ConstrainedHigh:return"ConstrainedHigh";case I.High:return"High";case I.PredictiveHigh444:return"PredictiveHigh444";default:{re.warn(`profileToString() | unrecognized profile ${s}`);return}}}function ya(s){switch(s){case _.L1_b:return"1b";case _.L1:return"1";case _.L1_1:return"1.1";case _.L1_2:return"1.2";case _.L1_3:return"1.3";case _.L2:return"2";case _.L2_1:return"2.1";case _.L2_2:return"2.2";case _.L3:return"3";case _.L3_1:return"3.1";case _.L3_2:return"3.2";case _.L4:return"4";case _.L4_1:return"4.1";case _.L4_2:return"4.2";case _.L5:return"5";case _.L5_1:return"5.1";case _.L5_2:return"5.2";default:{re.warn(`levelToString() | unrecognized level ${s}`);return}}}function Ce(s={}){let e=s["profile-level-id"];return e?Ws(e):va}function Sa(s={},e={}){let t=Ce(s),r=Ce(e);return!!(t&&r&&t.profile===r.profile)}function Ca(s={},e={}){let t=Ce(s),r=Ce(e);return!!(t&&r&&t.profile===r.profile&&t.level==r.level)}function Ra(s={},e={}){if(!s["profile-level-id"]&&!e["profile-level-id"]){re.warn("generateProfileLevelIdStringForAnswer() | profile-level-id missing in local and remote params");return}let t=Ce(s),r=Ce(e);if(!t)throw new TypeError("invalid local_profile_level_id");if(!r)throw new TypeError("invalid remote_profile_level_id");if(t.profile!==r.profile)throw new TypeError("H264 Profile mismatch");let i=Hs(s)&&Hs(e),n=t.level,a=r.level,o=xa(n,a),c=i?n:o;return re.debug(`generateProfileLevelIdStringForAnswer() | result [profile:${t.profile}, level:${c}]`),Vs(new qe(t.profile,c))}function Ta(s,e){for(let r=Bs.length-1;r>=0;--r){let i=Bs[r];if(i.max_macroblock_frame_size*256<=s&&i.max_macroblocks_per_second<=e*i.max_macroblock_frame_size)return re.debug(`supportedLevel() | result [max_frame_pixel_count:${s}, max_fps:${e}, level:${i.level}]`),i.level}re.warn(`supportedLevel() | no level supported [max_frame_pixel_count:${s}, max_fps:${e}]`)}function Us(s,e){return+(e[0]===s)<<7|+(e[1]===s)<<6|+(e[2]===s)<<5|+(e[3]===s)<<4|+(e[4]===s)<<3|+(e[5]===s)<<2|+(e[6]===s)<<1|+(e[7]===s)<<0}function Ea(s,e){return s===_.L1_b?e!==_.L1&&e!==_.L1_b:e===_.L1_b?s!==_.L1:s<e}function xa(s,e){return Ea(s,e)?s:e}function Hs(s={}){let e=s["level-asymmetry-allowed"];return e===!0||e===1||e==="1"}});var ie=C(B=>{"use strict";Object.defineProperty(B,"__esModule",{value:!0});B.validateAndNormalizeRtpCapabilities=La;B.validateAndNormalizeRtpParameters=Tr;B.validateAndNormalizeSctpStreamParameters=Ma;B.validateSctpCapabilities=Oa;B.getExtendedRtpCapabilities=Aa;B.getRecvRtpCapabilities=Na;B.getSendRtpCapabilities=ja;B.getSendingRtpParameters=Fa;B.getSendingRemoteRtpParameters=qa;B.reduceCodecs=za;B.generateProbatorRtpParameters=$a;B.canSend=Ba;B.canReceive=Ua;var Ks=Gs(),ka=Se(),Pa="probator",Da=1234,Ia=127;function La(s){if(typeof s!="object")throw new TypeError("caps is not an object");if(s.codecs&&!Array.isArray(s.codecs))throw new TypeError("caps.codecs is not an array");s.codecs||(s.codecs=[]);for(let e of s.codecs)Ha(e);if(s.headerExtensions&&!Array.isArray(s.headerExtensions))throw new TypeError("caps.headerExtensions is not an array");s.headerExtensions||(s.headerExtensions=[]);for(let e of s.headerExtensions)Wa(e)}function Tr(s){if(typeof s!="object")throw new TypeError("params is not an object");if(s.mid&&typeof s.mid!="string")throw new TypeError("params.mid is not a string");if(!Array.isArray(s.codecs))throw new TypeError("missing params.codecs");for(let e of s.codecs)Va(e);if(s.headerExtensions&&!Array.isArray(s.headerExtensions))throw new TypeError("params.headerExtensions is not an array");s.headerExtensions||(s.headerExtensions=[]);for(let e of s.headerExtensions)Ga(e);if(s.encodings&&!Array.isArray(s.encodings))throw new TypeError("params.encodings is not an array");s.encodings||(s.encodings=[]);for(let e of s.encodings)Ka(e);if(s.rtcp&&typeof s.rtcp!="object")throw new TypeError("params.rtcp is not an object");s.rtcp||(s.rtcp={}),Qa(s.rtcp)}function Ma(s){if(typeof s!="object")throw new TypeError("params is not an object");if(typeof s.streamId!="number")throw new TypeError("missing params.streamId");let e=!1;if(typeof s.ordered=="boolean"?e=!0:s.ordered=!0,s.maxPacketLifeTime&&typeof s.maxPacketLifeTime!="number")throw new TypeError("invalid params.maxPacketLifeTime");if(s.maxRetransmits&&typeof s.maxRetransmits!="number")throw new TypeError("invalid params.maxRetransmits");if(s.maxPacketLifeTime&&s.maxRetransmits)throw new TypeError("cannot provide both maxPacketLifeTime and maxRetransmits");if(e&&s.ordered&&(s.maxPacketLifeTime||s.maxRetransmits))throw new TypeError("cannot be ordered with maxPacketLifeTime or maxRetransmits");if(!e&&(s.maxPacketLifeTime||s.maxRetransmits)&&(s.ordered=!1),s.label&&typeof s.label!="string")throw new TypeError("invalid params.label");if(s.protocol&&typeof s.protocol!="string")throw new TypeError("invalid params.protocol")}function Oa(s){if(typeof s!="object")throw new TypeError("caps is not an object");if(!s.numStreams||typeof s.numStreams!="object")throw new TypeError("missing caps.numStreams");Ya(s.numStreams)}function Aa(s,e,t){let r={codecs:[],headerExtensions:[]};if(t)for(let i of s.codecs??[]){if(ze(i))continue;let n=(e.codecs??[]).find(o=>Rr(o,i,{strict:!0,modify:!0}));if(!n)continue;let a={kind:i.kind,mimeType:i.mimeType,clockRate:i.clockRate,channels:i.channels,localPayloadType:i.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:n.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:i.parameters??{},remoteParameters:n.parameters??{},rtcpFeedback:Qs(i,n)};r.codecs.push(a)}else for(let i of e.codecs??[]){if(ze(i))continue;let n=(s.codecs??[]).find(o=>Rr(o,i,{strict:!0,modify:!0}));if(!n)continue;let a={kind:n.kind,mimeType:n.mimeType,clockRate:n.clockRate,channels:n.channels,localPayloadType:n.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:i.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:n.parameters??{},remoteParameters:i.parameters??{},rtcpFeedback:Qs(n,i)};r.codecs.push(a)}for(let i of r.codecs){let n=s.codecs.find(o=>ze(o)&&o.parameters?.apt===i.localPayloadType),a=e.codecs.find(o=>ze(o)&&o.parameters?.apt===i.remotePayloadType);n&&a&&(i.localRtxPayloadType=n.preferredPayloadType,i.remoteRtxPayloadType=a.preferredPayloadType)}for(let i of e.headerExtensions){let n=s.headerExtensions.find(o=>Ja(o,i));if(!n)continue;let a={kind:i.kind,uri:i.uri,sendId:n.preferredId,recvId:i.preferredId,encrypt:n.preferredEncrypt??!1,direction:"sendrecv"};switch(i.direction){case"sendrecv":{a.direction="sendrecv";break}case"recvonly":{a.direction="sendonly";break}case"sendonly":{a.direction="recvonly";break}case"inactive":{a.direction="inactive";break}}r.headerExtensions.push(a)}return r}function Na(s){return Js({direction:"recvonly",extendedRtpCapabilities:s})}function ja(s){return Js({direction:"sendonly",extendedRtpCapabilities:s})}function Fa(s,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let r of e.codecs){if(r.kind!==s)continue;let i={mimeType:r.mimeType,payloadType:r.localPayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.localParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(i),r.localRtxPayloadType){let n={mimeType:`${r.kind}/rtx`,payloadType:r.localRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.localPayloadType},rtcpFeedback:[]};t.codecs.push(n)}}for(let r of e.headerExtensions){if(r.kind&&r.kind!==s||r.direction!=="sendrecv"&&r.direction!=="sendonly")continue;let i={uri:r.uri,id:r.sendId,encrypt:r.encrypt,parameters:{}};t.headerExtensions.push(i)}return t}function qa(s,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let r of e.codecs){if(r.kind!==s)continue;let i={mimeType:r.mimeType,payloadType:r.localPayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.remoteParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(i),r.localRtxPayloadType){let n={mimeType:`${r.kind}/rtx`,payloadType:r.localRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.localPayloadType},rtcpFeedback:[]};t.codecs.push(n)}}for(let r of e.headerExtensions){if(r.kind&&r.kind!==s||r.direction!=="sendrecv"&&r.direction!=="sendonly")continue;let i={uri:r.uri,id:r.sendId,encrypt:r.encrypt,parameters:{}};t.headerExtensions.push(i)}if(t.headerExtensions.some(r=>r.uri==="http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"))for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(i=>i.type!=="goog-remb");else if(t.headerExtensions.some(r=>r.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"))for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(i=>i.type!=="transport-cc");else for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(i=>i.type!=="transport-cc"&&i.type!=="goog-remb");return t}function za(s,e){let t=[];if(!e)t.push(s[0]),ze(s[1])&&t.push(s[1]);else{for(let r=0;r<s.length;++r)if(Rr(s[r],e,{strict:!0})){t.push(s[r]),ze(s[r+1])&&t.push(s[r+1]);break}if(t.length===0)throw new TypeError("no matching codec found")}return t}function $a(s){s=ka.clone(s),Tr(s);let e={mid:Pa,codecs:[],headerExtensions:[],encodings:[{ssrc:Da}],rtcp:{cname:"probator"}};return e.codecs.push(s.codecs[0]),e.codecs[0].payloadType=Ia,e.headerExtensions=s.headerExtensions,e}function Ba(s,e){return(e.codecs??[]).some(t=>t.kind===s)}function Ua(s,e){if(Tr(s),s.codecs.length===0)return!1;let t=s.codecs[0];return(e.codecs??[]).some(r=>r.preferredPayloadType===t.payloadType)}function Ha(s){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof s!="object")throw new TypeError("codec is not an object");if(!s.mimeType||typeof s.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(s.kind=t[1].toLowerCase(),typeof s.preferredPayloadType!="number")throw new TypeError("missing codec.preferredPayloadType");if(typeof s.clockRate!="number")throw new TypeError("missing codec.clockRate");s.kind==="audio"?typeof s.channels!="number"&&(s.channels=1):delete s.channels,(!s.parameters||typeof s.parameters!="object")&&(s.parameters={});for(let r of Object.keys(s.parameters)){let i=s.parameters[r];if(i===void 0&&(s.parameters[r]="",i=""),typeof i!="string"&&typeof i!="number")throw new TypeError(`invalid codec parameter [key:${r}s, value:${i}]`);if(r==="apt"&&typeof i!="number")throw new TypeError("invalid codec apt parameter")}(!s.rtcpFeedback||!Array.isArray(s.rtcpFeedback))&&(s.rtcpFeedback=[]);for(let r of s.rtcpFeedback)Ys(r)}function Ys(s){if(typeof s!="object")throw new TypeError("fb is not an object");if(!s.type||typeof s.type!="string")throw new TypeError("missing fb.type");(!s.parameter||typeof s.parameter!="string")&&(s.parameter="")}function Wa(s){if(typeof s!="object")throw new TypeError("ext is not an object");if(s.kind!=="audio"&&s.kind!=="video")throw new TypeError("invalid ext.kind");if(!s.uri||typeof s.uri!="string")throw new TypeError("missing ext.uri");if(typeof s.preferredId!="number")throw new TypeError("missing ext.preferredId");if(s.preferredEncrypt&&typeof s.preferredEncrypt!="boolean")throw new TypeError("invalid ext.preferredEncrypt");if(s.preferredEncrypt||(s.preferredEncrypt=!1),s.direction&&typeof s.direction!="string")throw new TypeError("invalid ext.direction");s.direction||(s.direction="sendrecv")}function Va(s){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof s!="object")throw new TypeError("codec is not an object");if(!s.mimeType||typeof s.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(typeof s.payloadType!="number")throw new TypeError("missing codec.payloadType");if(typeof s.clockRate!="number")throw new TypeError("missing codec.clockRate");t[1].toLowerCase()==="audio"?typeof s.channels!="number"&&(s.channels=1):delete s.channels,(!s.parameters||typeof s.parameters!="object")&&(s.parameters={});for(let i of Object.keys(s.parameters)){let n=s.parameters[i];if(n===void 0&&(s.parameters[i]="",n=""),typeof n!="string"&&typeof n!="number")throw new TypeError(`invalid codec parameter [key:${i}s, value:${n}]`);if(i==="apt"&&typeof n!="number")throw new TypeError("invalid codec apt parameter")}(!s.rtcpFeedback||!Array.isArray(s.rtcpFeedback))&&(s.rtcpFeedback=[]);for(let i of s.rtcpFeedback)Ys(i)}function Ga(s){if(typeof s!="object")throw new TypeError("ext is not an object");if(!s.uri||typeof s.uri!="string")throw new TypeError("missing ext.uri");if(typeof s.id!="number")throw new TypeError("missing ext.id");if(s.encrypt&&typeof s.encrypt!="boolean")throw new TypeError("invalid ext.encrypt");s.encrypt||(s.encrypt=!1),(!s.parameters||typeof s.parameters!="object")&&(s.parameters={});for(let e of Object.keys(s.parameters)){let t=s.parameters[e];if(t===void 0&&(s.parameters[e]="",t=""),typeof t!="string"&&typeof t!="number")throw new TypeError("invalid header extension parameter")}}function Ka(s){if(typeof s!="object")throw new TypeError("encoding is not an object");if(s.ssrc&&typeof s.ssrc!="number")throw new TypeError("invalid encoding.ssrc");if(s.rid&&typeof s.rid!="string")throw new TypeError("invalid encoding.rid");if(s.rtx&&typeof s.rtx!="object")throw new TypeError("invalid encoding.rtx");if(s.rtx&&typeof s.rtx.ssrc!="number")throw new TypeError("missing encoding.rtx.ssrc");if((!s.dtx||typeof s.dtx!="boolean")&&(s.dtx=!1),s.scalabilityMode&&typeof s.scalabilityMode!="string")throw new TypeError("invalid encoding.scalabilityMode")}function Qa(s){if(typeof s!="object")throw new TypeError("rtcp is not an object");if(s.cname&&typeof s.cname!="string")throw new TypeError("invalid rtcp.cname");(!s.reducedSize||typeof s.reducedSize!="boolean")&&(s.reducedSize=!0)}function Ya(s){if(typeof s!="object")throw new TypeError("numStreams is not an object");if(typeof s.OS!="number")throw new TypeError("missing numStreams.OS");if(typeof s.MIS!="number")throw new TypeError("missing numStreams.MIS")}function Js({direction:s,extendedRtpCapabilities:e}){let t={codecs:[],headerExtensions:[]};for(let r of e.codecs){let i={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(i),!r.remoteRtxPayloadType)continue;let n={kind:r.kind,mimeType:`${r.kind}/rtx`,preferredPayloadType:r.remoteRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.remotePayloadType},rtcpFeedback:[]};t.codecs.push(n)}for(let r of e.headerExtensions){if(r.direction!=="sendrecv"&&r.direction!==s)continue;let i={kind:r.kind,uri:r.uri,preferredId:r.recvId,preferredEncrypt:r.encrypt??!1,direction:r.direction};t.headerExtensions.push(i)}return t}function ze(s){return s?/.+\/rtx$/i.test(s.mimeType):!1}function Rr(s,e,{strict:t=!1,modify:r=!1}={}){let i=s.mimeType.toLowerCase(),n=e.mimeType.toLowerCase();if(i!==n||s.clockRate!==e.clockRate||s.channels!==e.channels)return!1;switch(i){case"video/h264":{if(t){let a=s.parameters["packetization-mode"]??0,o=e.parameters["packetization-mode"]??0;if(a!==o||!Ks.isSameProfile(s.parameters,e.parameters))return!1;let c;try{c=Ks.generateProfileLevelIdStringForAnswer(s.parameters,e.parameters)}catch{return!1}r&&(c?(s.parameters["profile-level-id"]=c,e.parameters["profile-level-id"]=c):(delete s.parameters["profile-level-id"],delete e.parameters["profile-level-id"]))}break}case"video/vp9":{if(t){let a=s.parameters["profile-id"]??0,o=e.parameters["profile-id"]??0;if(a!==o)return!1}break}}return!0}function Ja(s,e){return!(s.kind&&e.kind&&s.kind!==e.kind||s.uri!==e.uri)}function Qs(s,e){let t=[];for(let r of s.rtcpFeedback??[]){let i=(e.rtcpFeedback??[]).find(n=>n.type===r.type&&(n.parameter===r.parameter||!n.parameter&&!r.parameter));i&&t.push(i)}return t}});var Xs=C(It=>{"use strict";Object.defineProperty(It,"__esModule",{value:!0});It.Logger=void 0;var $e=rt(),Be="awaitqueue",Er=class{_debug;_warn;_error;constructor(e){e?(this._debug=$e(`${Be}:${e}`),this._warn=$e(`${Be}:WARN:${e}`),this._error=$e(`${Be}:ERROR:${e}`)):(this._debug=$e(Be),this._warn=$e(`${Be}:WARN`),this._error=$e(`${Be}: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}};It.Logger=Er});var Pr=C(Ue=>{"use strict";Object.defineProperty(Ue,"__esModule",{value:!0});Ue.AwaitQueueRemovedTaskError=Ue.AwaitQueueStoppedError=void 0;var xr=class s extends Error{constructor(e){super(e??"queue stopped"),this.name="AwaitQueueStoppedError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,s)}};Ue.AwaitQueueStoppedError=xr;var kr=class s extends Error{constructor(e){super(e??"queue task removed"),this.name="AwaitQueueRemovedTaskError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,s)}};Ue.AwaitQueueRemovedTaskError=kr});var Zs=C(Lt=>{"use strict";Object.defineProperty(Lt,"__esModule",{value:!0});Lt.AwaitQueue=void 0;var Xa=Xs(),Dr=Pr(),de=new Xa.Logger("AwaitQueue"),Ir=class{pendingTasks=new Map;nextTaskId=0;constructor(){de.debug("constructor()")}get size(){return this.pendingTasks.size}async push(e,t,r){if(t=t??e.name,de.debug(`push() [name:${t}, options:%o]`,r),typeof e!="function")throw new TypeError("given task is not a function");if(t)try{Object.defineProperty(e,"name",{value:t})}catch{}return new Promise((i,n)=>{if(t&&r?.removeOngoingTasksWithSameName)for(let o of this.pendingTasks.values())o.name===t&&o.reject(new Dr.AwaitQueueRemovedTaskError,{canExecuteNextTask:!1});let a={id:this.nextTaskId++,task:e,name:t,enqueuedAt:Date.now(),executedAt:void 0,completed:!1,resolve:o=>{if(a.completed)return;a.completed=!0,this.pendingTasks.delete(a.id),de.debug(`resolving task [name:${a.name}]`),i(o);let[c]=this.pendingTasks.values();c&&!c.executedAt&&this.execute(c)},reject:(o,{canExecuteNextTask:c})=>{if(!a.completed&&(a.completed=!0,this.pendingTasks.delete(a.id),de.debug(`rejecting task [name:${a.name}]: %s`,String(o)),n(o),c)){let[p]=this.pendingTasks.values();p&&!p.executedAt&&this.execute(p)}}};this.pendingTasks.set(a.id,a),this.pendingTasks.size===1&&this.execute(a)})}stop(){de.debug("stop()");for(let e of this.pendingTasks.values())de.debug(`stop() | stopping task [name:${e.name}]`),e.reject(new Dr.AwaitQueueStoppedError,{canExecuteNextTask:!1})}remove(e){de.debug(`remove() [taskIdx:${e}]`);let t=Array.from(this.pendingTasks.values())[e];if(!t){de.debug(`stop() | no task with given idx [taskIdx:${e}]`);return}t.reject(new Dr.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(de.debug(`execute() [name:${e.name}]`),e.executedAt)throw new 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})}}};Lt.AwaitQueue=Ir});var ti=C(ge=>{"use strict";Object.defineProperty(ge,"__esModule",{value:!0});ge.AwaitQueueRemovedTaskError=ge.AwaitQueueStoppedError=ge.AwaitQueue=void 0;var Za=Zs();Object.defineProperty(ge,"AwaitQueue",{enumerable:!0,get:function(){return Za.AwaitQueue}});var ei=Pr();Object.defineProperty(ge,"AwaitQueueStoppedError",{enumerable:!0,get:function(){return ei.AwaitQueueStoppedError}});Object.defineProperty(ge,"AwaitQueueRemovedTaskError",{enumerable:!0,get:function(){return ei.AwaitQueueRemovedTaskError}})});var si=C(Mt=>{"use strict";Object.defineProperty(Mt,"__esModule",{value:!0});Mt.Producer=void 0;var eo=$(),ri=V(),He=Y(),ne=new eo.Logger("Producer"),Lr=class extends ri.EnhancedEventEmitter{_id;_localId;_closed=!1;_rtpSender;_track;_kind;_rtpParameters;_paused;_maxSpatialLayer;_stopTracks;_disableTrackOnPause;_zeroRtpOnPause;_appData;_observer=new ri.EnhancedEventEmitter;constructor({id:e,localId:t,rtpSender:r,track:i,rtpParameters:n,stopTracks:a,disableTrackOnPause:o,zeroRtpOnPause:c,appData:p}){super(),ne.debug("constructor()"),this._id=e,this._localId=t,this._rtpSender=r,this._track=i,this._kind=i.kind,this._rtpParameters=n,this._paused=o?!i.enabled:!1,this._maxSpatialLayer=void 0,this._stopTracks=a,this._disableTrackOnPause=o,this._zeroRtpOnPause=c,this._appData=p??{},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||(ne.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(ne.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new He.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(ne.debug("pause()"),this._closed){ne.error("pause() | Producer closed");return}this._paused=!0,this._track&&this._disableTrackOnPause&&(this._track.enabled=!1),this._zeroRtpOnPause&&new Promise((e,t)=>{this.safeEmit("@pause",e,t)}).catch(()=>{}),this._observer.safeEmit("pause")}resume(){if(ne.debug("resume()"),this._closed){ne.error("resume() | Producer closed");return}this._paused=!1,this._track&&this._disableTrackOnPause&&(this._track.enabled=!0),this._zeroRtpOnPause&&new Promise((e,t)=>{this.safeEmit("@resume",e,t)}).catch(()=>{}),this._observer.safeEmit("resume")}async replaceTrack({track:e}){if(ne.debug("replaceTrack() [track:%o]",e),this._closed){if(e&&this._stopTracks)try{e.stop()}catch{}throw new He.InvalidStateError("closed")}else if(e?.readyState==="ended")throw new He.InvalidStateError("track ended");if(e===this._track){ne.debug("replaceTrack() | same track, ignored");return}await new Promise((t,r)=>{this.safeEmit("@replacetrack",e,t,r)}),this.destroyTrack(),this._track=e,this._track&&this._disableTrackOnPause&&(this._paused?this._paused&&(this._track.enabled=!1):this._track.enabled=!0),this.handleTrack()}async setMaxSpatialLayer(e){if(this._closed)throw new He.InvalidStateError("closed");if(this._kind!=="video")throw new He.UnsupportedError("not a video Producer");if(typeof e!="number")throw new 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 He.InvalidStateError("closed");if(typeof e!="object")throw new TypeError("invalid params");await new Promise((t,r)=>{this.safeEmit("@setrtpencodingparameters",e,t,r)})}onTrackEnded(){ne.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{}}};Mt.Producer=Lr});var ni=C(Ot=>{"use strict";Object.defineProperty(Ot,"__esModule",{value:!0});Ot.Consumer=void 0;var to=$(),ii=V(),ro=Y(),ae=new to.Logger("Consumer"),Mr=class extends ii.EnhancedEventEmitter{_id;_localId;_producerId;_closed=!1;_rtpReceiver;_track;_rtpParameters;_paused;_appData;_observer=new ii.EnhancedEventEmitter;constructor({id:e,localId:t,producerId:r,rtpReceiver:i,track:n,rtpParameters:a,appData:o}){super(),ae.debug("constructor()"),this._id=e,this._localId=t,this._producerId=r,this._rtpReceiver=i,this._track=n,this._rtpParameters=a,this._paused=!n.enabled,this._appData=o??{},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||(ae.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(ae.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new ro.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(ae.debug("pause()"),this._closed){ae.error("pause() | Consumer closed");return}if(this._paused){ae.debug("pause() | Consumer is already paused");return}this._paused=!0,this._track.enabled=!1,this.emit("@pause"),this._observer.safeEmit("pause")}resume(){if(ae.debug("resume()"),this._closed){ae.error("resume() | Consumer closed");return}if(!this._paused){ae.debug("resume() | Consumer is already resumed");return}this._paused=!1,this._track.enabled=!0,this.emit("@resume"),this._observer.safeEmit("resume")}onTrackEnded(){ae.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{}}};Ot.Consumer=Mr});var oi=C(At=>{"use strict";Object.defineProperty(At,"__esModule",{value:!0});At.DataProducer=void 0;var so=$(),ai=V(),io=Y(),pe=new so.Logger("DataProducer"),Or=class extends ai.EnhancedEventEmitter{_id;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new ai.EnhancedEventEmitter;constructor({id:e,dataChannel:t,sctpStreamParameters:r,appData:i}){super(),pe.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||(pe.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(pe.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}send(e){if(pe.debug("send()"),this._closed)throw new io.InvalidStateError("closed");this._dataChannel.send(e)}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(pe.debug('DataChannel "open" event'),this.safeEmit("open"))}),this._dataChannel.addEventListener("error",e=>{if(this._closed)return;let t=e.error??new Error("unknown DataChannel error");e.error?.errorDetail==="sctp-failure"?pe.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):pe.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(pe.warn('DataChannel "close" event'),this._closed=!0,this.emit("@close"),this.safeEmit("close"),this._observer.safeEmit("close"))}),this._dataChannel.addEventListener("message",()=>{this._closed||pe.warn('DataChannel "message" event in a DataProducer, message discarded')}),this._dataChannel.addEventListener("bufferedamountlow",()=>{this._closed||this.safeEmit("bufferedamountlow")})}};At.DataProducer=Or});var di=C(Nt=>{"use strict";Object.defineProperty(Nt,"__esModule",{value:!0});Nt.DataConsumer=void 0;var no=$(),ci=V(),Re=new no.Logger("DataConsumer"),Ar=class extends ci.EnhancedEventEmitter{_id;_dataProducerId;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new ci.EnhancedEventEmitter;constructor({id:e,dataProducerId:t,dataChannel:r,sctpStreamParameters:i,appData:n}){super(),Re.debug("constructor()"),this._id=e,this._dataProducerId=t,this._dataChannel=r,this._sctpStreamParameters=i,this._appData=n??{},this.handleDataChannel()}get id(){return this._id}get dataProducerId(){return this._dataProducerId}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get binaryType(){return this._dataChannel.binaryType}set binaryType(e){this._dataChannel.binaryType=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(Re.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(Re.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(Re.debug('DataChannel "open" event'),this.safeEmit("open"))}),this._dataChannel.addEventListener("error",e=>{if(this._closed)return;let t=e.error??new Error("unknown DataChannel error");e.error?.errorDetail==="sctp-failure"?Re.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):Re.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(Re.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)})}};Nt.DataConsumer=Ar});var li=C(jt=>{"use strict";Object.defineProperty(jt,"__esModule",{value:!0});jt.Transport=void 0;var ao=ti(),oo=$(),pi=V(),N=Y(),Nr=Se(),it=ie(),co=si(),po=ni(),lo=oi(),uo=di(),A=new oo.Logger("Transport"),jr=class{consumerOptions;promise;resolve;reject;constructor(e){this.consumerOptions=e,this.promise=new Promise((t,r)=>{this.resolve=t,this.reject=r})}},Fr=class extends pi.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 ao.AwaitQueue;_pendingConsumerTasks=[];_consumerCreationInProgress=!1;_pendingPauseConsumers=new Map;_consumerPauseInProgress=!1;_pendingResumeConsumers=new Map;_consumerResumeInProgress=!1;_pendingCloseConsumers=new Map;_consumerCloseInProgress=!1;_observer=new pi.EnhancedEventEmitter;constructor({direction:e,id:t,iceParameters:r,iceCandidates:i,dtlsParameters:n,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:p,appData:d,handlerFactory:l,getSendExtendedRtpCapabilities:u,recvRtpCapabilities:f,canProduceByKind:m}){super(),A.debug("constructor() [id:%s, direction:%s]",t,e),this._id=t,this._direction=e,this._getSendExtendedRtpCapabilities=u,this._recvRtpCapabilities=f,this._canProduceByKind=m,this._maxSctpMessageSize=a?.maxMessageSize;let h=Nr.clone(p)??{};delete h.iceServers,delete h.iceTransportPolicy,delete h.bundlePolicy,delete h.rtcpMuxPolicy,this._handler=l.factory({direction:e,iceParameters:r,iceCandidates:i,dtlsParameters:n,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:h,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){A.debug("close()"),this._closed=!0,this._awaitQueue.stop(),this._handler.close(),this._connectionState="closed";for(let e of this._producers.values())e.transportClosed();this._producers.clear();for(let e of this._consumers.values())e.transportClosed();this._consumers.clear();for(let e of this._dataProducers.values())e.transportClosed();this._dataProducers.clear();for(let e of this._dataConsumers.values())e.transportClosed();this._dataConsumers.clear(),this._observer.safeEmit("close"),super.close(),this._observer.close()}}async getStats(){if(this._closed)throw new N.InvalidStateError("closed");return this._handler.getTransportStats()}async restartIce({iceParameters:e}){if(A.debug("restartIce()"),this._closed)throw new N.InvalidStateError("closed");if(!e)throw new TypeError("missing iceParameters");return this._awaitQueue.push(async()=>await this._handler.restartIce(e),"transport.restartIce()")}async updateIceServers({iceServers:e}={}){if(A.debug("updateIceServers()"),this._closed)throw new N.InvalidStateError("closed");if(!Array.isArray(e))throw new 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:n,codec:a,stopTracks:o=!0,disableTrackOnPause:c=!0,zeroRtpOnPause:p=!1,onRtpSender:d,appData:l={}}={}){if(A.debug("produce() [track:%o]",e),this._closed)throw new N.InvalidStateError("closed");if(e){if(this._direction!=="send")throw new N.UnsupportedError("not a sending Transport");if(this._canProduceByKind[e.kind]){if(e.readyState==="ended")throw new N.InvalidStateError("track ended");if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(this.listenerCount("produce")===0)throw new TypeError('no "produce" listener set into this transport');if(l&&typeof l!="object")throw new TypeError("if given, appData must be an object")}else throw new N.UnsupportedError(`cannot produce ${e.kind}`)}else throw new TypeError("missing track");return this._awaitQueue.push(async()=>{let u;if(r&&!Array.isArray(r))throw TypeError("encodings must be an array");r?.length===0?u=void 0:r&&(u=r.map(g=>{let w={active:!0};return g.active===!1&&(w.active=!1),typeof g.dtx=="boolean"&&(w.dtx=g.dtx),typeof g.scalabilityMode=="string"&&(w.scalabilityMode=g.scalabilityMode),typeof g.scaleResolutionDownBy=="number"&&(w.scaleResolutionDownBy=g.scaleResolutionDownBy),typeof g.maxBitrate=="number"&&(w.maxBitrate=g.maxBitrate),typeof g.maxFramerate=="number"&&(w.maxFramerate=g.maxFramerate),typeof g.adaptivePtime=="boolean"&&(w.adaptivePtime=g.adaptivePtime),typeof g.priority=="string"&&(w.priority=g.priority),typeof g.networkPriority=="string"&&(w.networkPriority=g.networkPriority),w}));let{localId:f,rtpParameters:m,rtpSender:h}=await this._handler.send({track:e,streamId:t,encodings:u,codecOptions:i,headerExtensionOptions:n,codec:a,onRtpSender:d});try{it.validateAndNormalizeRtpParameters(m);let{id:g}=await new Promise((E,P)=>{this.safeEmit("produce",{kind:e.kind,rtpParameters:m,appData:l},E,P)}),w=new co.Producer({id:g,localId:f,rtpSender:h,track:e,rtpParameters:m,stopTracks:o,disableTrackOnPause:c,zeroRtpOnPause:p,appData:l});return this._producers.set(w.id,w),this.handleProducer(w),this._observer.safeEmit("newproducer",w),w}catch(g){throw this._handler.stopSending(f).catch(()=>{}),g}},"transport.produce()").catch(u=>{if(o)try{e.stop()}catch{}throw u})}async consume({id:e,producerId:t,kind:r,rtpParameters:i,streamId:n,onRtpReceiver:a,appData:o={}}){if(A.debug("consume()"),this._closed)throw new N.InvalidStateError("closed");if(this._direction!=="recv")throw new N.UnsupportedError("not a receiving Transport");if(typeof e!="string")throw new TypeError("missing id");if(typeof t!="string")throw new TypeError("missing producerId");if(r!=="audio"&&r!=="video")throw new TypeError(`invalid kind '${r}'`);if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(o&&typeof o!="object")throw new TypeError("if given, appData must be an object");let c=Nr.clone(i);if(!it.canReceive(c,this._recvRtpCapabilities))throw new N.UnsupportedError("cannot consume this Producer");let d=new jr({id:e,producerId:t,kind:r,rtpParameters:c,streamId:n,onRtpReceiver:a,appData:o});return this._pendingConsumerTasks.push(d),queueMicrotask(()=>{this._closed||this._consumerCreationInProgress===!1&&this.createPendingConsumers()}),d.promise}async produceData({ordered:e=!0,maxPacketLifeTime:t,maxRetransmits:r,label:i="",protocol:n="",appData:a={}}={}){if(A.debug("produceData()"),this._closed)throw new N.InvalidStateError("closed");if(this._direction!=="send")throw new N.UnsupportedError("not a sending Transport");if(this._maxSctpMessageSize){if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(this.listenerCount("producedata")===0)throw new TypeError('no "producedata" listener set into this transport');if(a&&typeof a!="object")throw new TypeError("if given, appData must be an object")}else throw new N.UnsupportedError("SCTP not enabled by remote Transport");return(t||r)&&(e=!1),this._awaitQueue.push(async()=>{let{dataChannel:o,sctpStreamParameters:c}=await this._handler.sendDataChannel({sctpStreamParameters:{ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:n}});it.validateAndNormalizeSctpStreamParameters(c);let{id:p}=await new Promise((l,u)=>{this.safeEmit("producedata",{sctpStreamParameters:c,label:i,protocol:n,appData:a},l,u)}),d=new lo.DataProducer({id:p,dataChannel:o,sctpStreamParameters:c,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:n="",appData:a={}}){if(A.debug("consumeData()"),this._closed)throw new N.InvalidStateError("closed");if(this._direction!=="recv")throw new N.UnsupportedError("not a receiving Transport");if(this._maxSctpMessageSize){if(typeof e!="string")throw new TypeError("missing id");if(typeof t!="string")throw new TypeError("missing dataProducerId");if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(a&&typeof a!="object")throw new TypeError("if given, appData must be an object")}else throw new N.UnsupportedError("SCTP not enabled by remote Transport");let o=Nr.clone(r);return it.validateAndNormalizeSctpStreamParameters(o),this._awaitQueue.push(async()=>{let{dataChannel:c}=await this._handler.receiveDataChannel({maxMessageSize:this._maxSctpMessageSize,sctpStreamParameters:o,label:i,protocol:n}),p=new uo.DataConsumer({id:e,dataProducerId:t,dataChannel:c,sctpStreamParameters:o,appData:a});return this._dataConsumers.set(p.id,p),this.handleDataConsumer(p),this._observer.safeEmit("newdataconsumer",p),p},"transport.consumeData()")}getDataChannelMaxMessageSize(){return this._handler.getDataChannelMaxMessageSize()}createPendingConsumers(){this._consumerCreationInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingConsumerTasks.length===0){A.debug("createPendingConsumers() | there is no Consumer to be created");return}let e=[...this._pendingConsumerTasks];this._pendingConsumerTasks=[];let t,r=[];for(let i of e){let{id:n,kind:a,rtpParameters:o,streamId:c,onRtpReceiver:p}=i.consumerOptions;r.push({trackId:n,kind:a,rtpParameters:o,streamId:c,onRtpReceiver:p})}try{let i=await this._handler.receive(r);for(let n=0;n<i.length;++n){let a=e[n],o=i[n],{id:c,producerId:p,kind:d,rtpParameters:l,appData:u}=a.consumerOptions,{localId:f,rtpReceiver:m,track:h}=o,g=new po.Consumer({id:c,localId:f,producerId:p,rtpReceiver:m,track:h,rtpParameters:l,appData:u});this._consumers.set(g.id,g),this.handleConsumer(g),!this._probatorConsumerCreated&&!t&&d==="video"&&(t=g),this._observer.safeEmit("newconsumer",g),a.resolve(g)}}catch(i){for(let n of e)n.reject(i)}if(t)try{let i=it.generateProbatorRtpParameters(t.rtpParameters);await this._handler.receive([{trackId:"probator",kind:"video",rtpParameters:i}]),A.debug("createPendingConsumers() | Consumer for RTP probation created"),this._probatorConsumerCreated=!0}catch(i){A.error("createPendingConsumers() | failed to create Consumer for RTP probation:%o",i)}},"transport.createPendingConsumers()").then(()=>{this._consumerCreationInProgress=!1,this._pendingConsumerTasks.length>0&&this.createPendingConsumers()}).catch(()=>{})}pausePendingConsumers(){this._consumerPauseInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingPauseConsumers.size===0){A.debug("pausePendingConsumers() | there is no Consumer to be paused");return}let e=Array.from(this._pendingPauseConsumers.values());this._pendingPauseConsumers.clear();try{let t=e.map(r=>r.localId);await this._handler.pauseReceiving(t)}catch(t){A.error("pausePendingConsumers() | failed to pause Consumers:",t)}},"transport.pausePendingConsumers()").then(()=>{this._consumerPauseInProgress=!1,this._pendingPauseConsumers.size>0&&this.pausePendingConsumers()}).catch(()=>{})}resumePendingConsumers(){this._consumerResumeInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingResumeConsumers.size===0){A.debug("resumePendingConsumers() | there is no Consumer to be resumed");return}let e=Array.from(this._pendingResumeConsumers.values());this._pendingResumeConsumers.clear();try{let t=e.map(r=>r.localId);await this._handler.resumeReceiving(t)}catch(t){A.error("resumePendingConsumers() | failed to resume Consumers:",t)}},"transport.resumePendingConsumers()").then(()=>{this._consumerResumeInProgress=!1,this._pendingResumeConsumers.size>0&&this.resumePendingConsumers()}).catch(()=>{})}closePendingConsumers(){this._consumerCloseInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingCloseConsumers.size===0){A.debug("closePendingConsumers() | there is no Consumer to be closed");return}let e=Array.from(this._pendingCloseConsumers.values());this._pendingCloseConsumers.clear();try{await this._handler.stopReceiving(e.map(t=>t.localId))}catch(t){A.error("closePendingConsumers() | failed to close Consumers:",t)}},"transport.closePendingConsumers()").then(()=>{this._consumerCloseInProgress=!1,this._pendingCloseConsumers.size>0&&this.closePendingConsumers()}).catch(()=>{})}handleHandler(){let e=this._handler;e.on("@connect",({dtlsParameters:t},r,i)=>{if(this._closed){i(new N.InvalidStateError("closed"));return}this.safeEmit("connect",{dtlsParameters:t},r,i)}),e.on("@icegatheringstatechange",t=>{t!==this._iceGatheringState&&(A.debug("ICE gathering state changed to %s",t),this._iceGatheringState=t,this._closed||this.safeEmit("icegatheringstatechange",t))}),e.on("@icecandidateerror",t=>{A.warn(`ICE candidate error [url:${t.url}, localAddress:${t.address}, localPort:${t.port}]: ${t.errorCode} "${t.errorText}"`),this.safeEmit("icecandidateerror",t)}),e.on("@connectionstatechange",t=>{t!==this._connectionState&&(A.debug("connection state changed to %s",t),this._connectionState=t,this._closed||this.safeEmit("connectionstatechange",t))})}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(t=>A.warn("producer.close() failed:%o",t))}),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 N.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),this._consumerCloseInProgress===!1&&this.closePendingConsumers())}),e.on("@pause",()=>{this._pendingResumeConsumers.has(e.id)&&this._pendingResumeConsumers.delete(e.id),this._pendingPauseConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerPauseInProgress===!1&&this.pausePendingConsumers()})}),e.on("@resume",()=>{this._pendingPauseConsumers.has(e.id)&&this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerResumeInProgress===!1&&this.resumePendingConsumers()})}),e.on("@getstats",(t,r)=>{if(this._closed)return r(new N.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)})}};jt.Transport=Fr});var Ft=C((kd,hi)=>{"use strict";var ui=hi.exports={v:[{name:"version",reg:/^(\d*)$/}],o:[{name:"origin",reg:/^(\S*) (\d*) (\d*) (\S*) IP(\d) (\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\d*) (\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\d) (\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\w*) (\d*) ([\w/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\d*) ([\w\-.]*)(?:\s*\/(\d*)(?:\s*\/(\S*))?)?/,names:["payload","codec","rate","encoding"],format:function(s){return s.encoding?"rtpmap:%d %s/%s/%s":s.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(s){return s.address!=null?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\*|\d*) trr-int (\d*)/,names:["payload","value"],format:"rtcp-fb:%s trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,names:["payload","type","subtype"],format:function(s){return s.subtype!=null?"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(s){return"extmap:%d"+(s.direction?"/%s":"%v")+(s["encrypt-uri"]?" %s":"%v")+" %s"+(s.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(s){return s.sessionConfig!=null?"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(s){var e="candidate:%s %d %s %d %s %d typ %s";return e+=s.raddr!=null?" raddr %s rport %d":"%v%v",e+=s.tcptype!=null?" tcptype %s":"%v",s.generation!=null&&(e+=" generation %d"),e+=s["network-id"]!=null?" network-id %d":"%v",e+=s["network-cost"]!=null?" network-cost %d":"%v",e}},{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(s){var e="ssrc:%d";return s.attribute!=null&&(e+=" %s",s.value!=null&&(e+=":%s")),e}},{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(s){return s.maxMessageSize!=null?"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(s){return s.params?"rid:%s %s %s":"rid:%s %s"}},{push:"imageattrs",reg:new 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(s){return"imageattr:%s %s %s"+(s.dir2?" %s %s":"")}},{name:"simulcast",reg:new RegExp("^simulcast:(send|recv) ([a-zA-Z0-9\\-_~;,]+)(?:\\s?(send|recv) ([a-zA-Z0-9\\-_~;,]+))?$"),names:["dir1","list1","dir2","list2"],format:function(s){return"simulcast:%s %s"+(s.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(s){return"ts-refclk:%s"+(s.clksrcExt!=null?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(s){var e="mediaclk:";return e+=s.id!=null?"id=%s %s":"%v%s",e+=s.mediaClockValue!=null?"=%s":"",e+=s.rateNumerator!=null?" rate=%s":"",e+=s.rateDenominator!=null?"/%s":"",e}},{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(ui).forEach(function(s){var e=ui[s];e.forEach(function(t){t.reg||(t.reg=/(.*)/),t.format||(t.format="%s")})})});var gi=C(le=>{"use strict";var We=function(s){return String(Number(s))===s?Number(s):s},ho=function(s,e,t,r){if(r&&!t)e[r]=We(s[1]);else for(var i=0;i<t.length;i+=1)s[i+1]!=null&&(e[t[i]]=We(s[i+1]))},fo=function(s,e,t){var r=s.name&&s.names;s.push&&!e[s.push]?e[s.push]=[]:r&&!e[s.name]&&(e[s.name]={});var i=s.push?{}:r?e[s.name]:e;ho(t.match(s.reg),i,s.names,s.name),s.push&&e[s.push].push(i)},fi=Ft(),mo=RegExp.prototype.test.bind(/^([a-z])=(.*)/);le.parse=function(s){var e={},t=[],r=e;return s.split(/(\r\n|\r|\n)/).filter(mo).forEach(function(i){var n=i[0],a=i.slice(2);n==="m"&&(t.push({rtp:[],fmtp:[]}),r=t[t.length-1]);for(var o=0;o<(fi[n]||[]).length;o+=1){var c=fi[n][o];if(c.reg.test(a))return fo(c,r,a)}}),e.media=t,e};var mi=function(s,e){var t=e.split(/=(.+)/,2);return t.length===2?s[t[0]]=We(t[1]):t.length===1&&e.length>1&&(s[t[0]]=void 0),s};le.parseParams=function(s){return s.split(/;\s?/).reduce(mi,{})};le.parseFmtpConfig=le.parseParams;le.parsePayloads=function(s){return s.toString().split(" ").map(Number)};le.parseRemoteCandidates=function(s){for(var e=[],t=s.split(" ").map(We),r=0;r<t.length;r+=3)e.push({component:t[r],ip:t[r+1],port:t[r+2]});return e};le.parseImageAttributes=function(s){return s.split(" ").map(function(e){return e.substring(1,e.length-1).split(",").reduce(mi,{})})};le.parseSimulcastStreamList=function(s){return s.split(";").map(function(e){return e.split(",").map(function(t){var r,i=!1;return t[0]!=="~"?r=We(t):(r=We(t.substring(1,t.length)),i=!0),{scid:r,paused:i}})})}});var vi=C((Dd,_i)=>{"use strict";var qr=Ft(),go=/%[sdv%]/g,_o=function(s){var e=1,t=arguments,r=t.length;return s.replace(go,function(i){if(e>=r)return i;var n=t[e];switch(e+=1,i){case"%%":return"%";case"%s":return String(n);case"%d":return Number(n);case"%v":return""}})},nt=function(s,e,t){var r=e.format instanceof Function?e.format(e.push?t:t[e.name]):e.format,i=[s+"="+r];if(e.names)for(var n=0;n<e.names.length;n+=1){var a=e.names[n];e.name?i.push(t[e.name][a]):i.push(t[e.names[n]])}else i.push(t[e.name]);return _o.apply(null,i)},vo=["v","o","s","i","u","e","p","c","b","t","r","z","a"],wo=["i","c","b","a"];_i.exports=function(s,e){e=e||{},s.version==null&&(s.version=0),s.name==null&&(s.name=" "),s.media.forEach(function(n){n.payloads==null&&(n.payloads="")});var t=e.outerOrder||vo,r=e.innerOrder||wo,i=[];return t.forEach(function(n){qr[n].forEach(function(a){a.name in s&&s[a.name]!=null?i.push(nt(n,a,s)):a.push in s&&s[a.push]!=null&&s[a.push].forEach(function(o){i.push(nt(n,a,o))})})}),s.media.forEach(function(n){i.push(nt("m",qr.m[0],n)),r.forEach(function(a){qr[a].forEach(function(o){o.name in n&&n[o.name]!=null?i.push(nt(a,o,n)):o.push in n&&n[o.push]!=null&&n[o.push].forEach(function(c){i.push(nt(a,o,c))})})})}),i.join(`\r
1
+ "use strict";var ln=Object.create;var ut=Object.defineProperty;var un=Object.getOwnPropertyDescriptor;var hn=Object.getOwnPropertyNames;var mn=Object.getPrototypeOf,fn=Object.prototype.hasOwnProperty;var C=(s,e)=>()=>{try{return e||s((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}},_n=(s,e)=>{for(var t in e)ut(s,t,{get:e[t],enumerable:!0})},ns=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of hn(e))!fn.call(s,i)&&i!==t&&ut(s,i,{get:()=>e[i],enumerable:!(r=un(e,i))||r.enumerable});return s};var He=(s,e,t)=>(t=s!=null?ln(mn(s)):{},ns(e||!s||!s.__esModule?ut(t,"default",{value:s,enumerable:!0}):t,s)),gn=s=>ns(ut({},"__esModule",{value:!0}),s);var os=C(as=>{"use strict";Object.defineProperty(as,"__esModule",{value:!0})});var q=C(ht=>{"use strict";Object.defineProperty(ht,"__esModule",{value:!0});ht.Logger=void 0;var Re=require("debug"),Te="media-client",sr=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,Re.default)(`${Te}:${e}`),this._warn=(0,Re.default)(`${Te}:WARN:${e}`),this._error=(0,Re.default)(`${Te}:ERROR:${e}`)):(this._debug=(0,Re.default)(Te),this._warn=(0,Re.default)(`${Te}:WARN`),this._error=(0,Re.default)(`${Te}: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}};ht.Logger=sr});var vs=C((xc,ir)=>{"use strict";var Ce=typeof Reflect=="object"?Reflect:null,cs=Ce&&typeof Ce.apply=="function"?Ce.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)},mt;Ce&&typeof Ce.ownKeys=="function"?mt=Ce.ownKeys:Object.getOwnPropertySymbols?mt=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:mt=function(e){return Object.getOwnPropertyNames(e)};function vn(s){console&&console.warn&&console.warn(s)}var ps=Number.isNaN||function(e){return e!==e};function x(){x.init.call(this)}ir.exports=x;ir.exports.once=Sn;x.EventEmitter=x;x.prototype._events=void 0;x.prototype._eventsCount=0;x.prototype._maxListeners=void 0;var ds=10;function ft(s){if(typeof s!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof s)}Object.defineProperty(x,"defaultMaxListeners",{enumerable:!0,get:function(){return ds},set:function(s){if(typeof s!="number"||s<0||ps(s))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+s+".");ds=s}});x.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};x.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||ps(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this};function ls(s){return s._maxListeners===void 0?x.defaultMaxListeners:s._maxListeners}x.prototype.getMaxListeners=function(){return ls(this)};x.prototype.emit=function(e){for(var t=[],r=1;r<arguments.length;r++)t.push(arguments[r]);var i=e==="error",n=this._events;if(n!==void 0)i=i&&n.error===void 0;else if(!i)return!1;if(i){var a;if(t.length>0&&(a=t[0]),a instanceof Error)throw a;var o=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw o.context=a,o}var c=n[e];if(c===void 0)return!1;if(typeof c=="function")cs(c,this,t);else for(var d=c.length,p=_s(c,d),r=0;r<d;++r)cs(p[r],this,t);return!0};function us(s,e,t,r){var i,n,a;if(ft(t),n=s._events,n===void 0?(n=s._events=Object.create(null),s._eventsCount=0):(n.newListener!==void 0&&(s.emit("newListener",e,t.listener?t.listener:t),n=s._events),a=n[e]),a===void 0)a=n[e]=t,++s._eventsCount;else if(typeof a=="function"?a=n[e]=r?[t,a]:[a,t]:r?a.unshift(t):a.push(t),i=ls(s),i>0&&a.length>i&&!a.warned){a.warned=!0;var o=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");o.name="MaxListenersExceededWarning",o.emitter=s,o.type=e,o.count=a.length,vn(o)}return s}x.prototype.addListener=function(e,t){return us(this,e,t,!1)};x.prototype.on=x.prototype.addListener;x.prototype.prependListener=function(e,t){return us(this,e,t,!0)};function wn(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function hs(s,e,t){var r={fired:!1,wrapFn:void 0,target:s,type:e,listener:t},i=wn.bind(r);return i.listener=t,r.wrapFn=i,i}x.prototype.once=function(e,t){return ft(t),this.on(e,hs(this,e,t)),this};x.prototype.prependOnceListener=function(e,t){return ft(t),this.prependListener(e,hs(this,e,t)),this};x.prototype.removeListener=function(e,t){var r,i,n,a,o;if(ft(t),i=this._events,i===void 0)return this;if(r=i[e],r===void 0)return this;if(r===t||r.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete i[e],i.removeListener&&this.emit("removeListener",e,r.listener||t));else if(typeof r!="function"){for(n=-1,a=r.length-1;a>=0;a--)if(r[a]===t||r[a].listener===t){o=r[a].listener,n=a;break}if(n<0)return this;n===0?r.shift():yn(r,n),r.length===1&&(i[e]=r[0]),i.removeListener!==void 0&&this.emit("removeListener",e,o||t)}return this};x.prototype.off=x.prototype.removeListener;x.prototype.removeAllListeners=function(e){var t,r,i;if(r=this._events,r===void 0)return this;if(r.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):r[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete r[e]),this;if(arguments.length===0){var n=Object.keys(r),a;for(i=0;i<n.length;++i)a=n[i],a!=="removeListener"&&this.removeAllListeners(a);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(t=r[e],typeof t=="function")this.removeListener(e,t);else if(t!==void 0)for(i=t.length-1;i>=0;i--)this.removeListener(e,t[i]);return this};function ms(s,e,t){var r=s._events;if(r===void 0)return[];var i=r[e];return i===void 0?[]:typeof i=="function"?t?[i.listener||i]:[i]:t?bn(i):_s(i,i.length)}x.prototype.listeners=function(e){return ms(this,e,!0)};x.prototype.rawListeners=function(e){return ms(this,e,!1)};x.listenerCount=function(s,e){return typeof s.listenerCount=="function"?s.listenerCount(e):fs.call(s,e)};x.prototype.listenerCount=fs;function fs(s){var e=this._events;if(e!==void 0){var t=e[s];if(typeof t=="function")return 1;if(t!==void 0)return t.length}return 0}x.prototype.eventNames=function(){return this._eventsCount>0?mt(this._events):[]};function _s(s,e){for(var t=new Array(e),r=0;r<e;++r)t[r]=s[r];return t}function yn(s,e){for(;e+1<s.length;e++)s[e]=s[e+1];s.pop()}function bn(s){for(var e=new Array(s.length),t=0;t<e.length;++t)e[t]=s[t].listener||s[t];return e}function Sn(s,e){return new Promise(function(t,r){function i(a){s.removeListener(e,n),r(a)}function n(){typeof s.removeListener=="function"&&s.removeListener("error",i),t([].slice.call(arguments))}gs(s,e,n,{once:!0}),e!=="error"&&Rn(s,i,{once:!0})})}function Rn(s,e,t){typeof s.on=="function"&&gs(s,"error",e,t)}function gs(s,e,t,r){if(typeof s.on=="function")r.once?s.once(e,t):s.on(e,t);else if(typeof s.addEventListener=="function")s.addEventListener(e,function i(n){r.once&&s.removeEventListener(e,i),t(n)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof s)}});var U=C(_t=>{"use strict";Object.defineProperty(_t,"__esModule",{value:!0});_t.EnhancedEventEmitter=void 0;var Tn=vs(),Cn=q(),En=new Cn.Logger("EnhancedEventEmitter"),nr=class extends Tn.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(r){En.error("safeEmit() | event listener threw an error [eventName:%s]:%o",e,r);try{super.emit("listenererror",e,r)}catch{}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)}};_t.EnhancedEventEmitter=nr});var V=C(Ee=>{"use strict";Object.defineProperty(Ee,"__esModule",{value:!0});Ee.InvalidStateError=Ee.UnsupportedError=void 0;var ar=class s extends Error{constructor(e){super(e),this.name="UnsupportedError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,s):this.stack=new Error(e).stack}};Ee.UnsupportedError=ar;var or=class s extends Error{constructor(e){super(e),this.name="InvalidStateError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,s):this.stack=new Error(e).stack}};Ee.InvalidStateError=or});var fe=C(Ve=>{"use strict";Object.defineProperty(Ve,"__esModule",{value:!0});Ve.clone=kn;Ve.generateRandomNumber=xn;Ve.deepFreeze=ws;function kn(s){if(s!==void 0)return Number.isNaN(s)?NaN:typeof structuredClone=="function"?structuredClone(s):JSON.parse(JSON.stringify(s))}function xn(){return Math.round(Math.random()*1e7)}function ws(s){let e=Reflect.ownKeys(s);for(let t of e){let r=s[t];(r&&typeof r=="object"||typeof r=="function")&&ws(r)}return Object.freeze(s)}});var ys=C(gt=>{"use strict";Object.defineProperty(gt,"__esModule",{value:!0});gt.Logger=void 0;var ke=require("debug"),xe="h264-profile-level-id",cr=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,ke.default)(`${xe}:${e}`),this._warn=(0,ke.default)(`${xe}:WARN:${e}`),this._error=(0,ke.default)(`${xe}:ERROR:${e}`)):(this._debug=(0,ke.default)(xe),this._warn=(0,ke.default)(`${xe}:WARN`),this._error=(0,ke.default)(`${xe}: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}};gt.Logger=cr});var Es=C(N=>{"use strict";Object.defineProperty(N,"__esModule",{value:!0});N.ProfileLevelId=N.Level=N.Profile=void 0;N.parseProfileLevelId=Ts;N.profileLevelIdToString=Cs;N.profileToString=Ln;N.levelToString=Mn;N.parseSdpProfileLevelId=_e;N.isSameProfile=On;N.isSameProfileAndLevel=An;N.generateProfileLevelIdStringForAnswer=Nn;N.supportedLevel=jn;var Pn=ys(),X=new Pn.Logger,D;(function(s){s[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"})(D||(N.Profile=D={}));var g;(function(s){s[s.L1_b=0]="L1_b",s[s.L1=10]="L1",s[s.L1_1=11]="L1_1",s[s.L1_2=12]="L1_2",s[s.L1_3=13]="L1_3",s[s.L2=20]="L2",s[s.L2_1=21]="L2_1",s[s.L2_2=22]="L2_2",s[s.L3=30]="L3",s[s.L3_1=31]="L3_1",s[s.L3_2=32]="L3_2",s[s.L4=40]="L4",s[s.L4_1=41]="L4_1",s[s.L4_2=42]="L4_2",s[s.L5=50]="L5",s[s.L5_1=51]="L5_1",s[s.L5_2=52]="L5_2"})(g||(N.Level=g={}));var Pe=class{profile;level;constructor(e,t){this.profile=e,this.level=t}};N.ProfileLevelId=Pe;var Dn=new Pe(D.ConstrainedBaseline,g.L3_1),Y=class{mask;masked_value;constructor(e){this.mask=~Ss("x",e),this.masked_value=Ss("1",e)}isMatch(e){return this.masked_value===(e&this.mask)}},J=class{profile_idc;profile_iop;profile;constructor(e,t,r){this.profile_idc=e,this.profile_iop=t,this.profile=r}},In=[new J(66,new Y("x1xx0000"),D.ConstrainedBaseline),new J(77,new Y("1xxx0000"),D.ConstrainedBaseline),new J(88,new Y("11xx0000"),D.ConstrainedBaseline),new J(66,new Y("x0xx0000"),D.Baseline),new J(88,new Y("10xx0000"),D.Baseline),new J(77,new Y("0x0x0000"),D.Main),new J(100,new Y("00000000"),D.High),new J(100,new Y("00001100"),D.ConstrainedHigh),new J(244,new Y("00000000"),D.PredictiveHigh444)],bs=[{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:g.L1},{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:g.L1_b},{max_macroblocks_per_second:3e3,max_macroblock_frame_size:396,level:g.L1_1},{max_macroblocks_per_second:6e3,max_macroblock_frame_size:396,level:g.L1_2},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:g.L1_3},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:g.L2},{max_macroblocks_per_second:19800,max_macroblock_frame_size:792,level:g.L2_1},{max_macroblocks_per_second:20250,max_macroblock_frame_size:1620,level:g.L2_2},{max_macroblocks_per_second:40500,max_macroblock_frame_size:1620,level:g.L3},{max_macroblocks_per_second:108e3,max_macroblock_frame_size:3600,level:g.L3_1},{max_macroblocks_per_second:216e3,max_macroblock_frame_size:5120,level:g.L3_2},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:g.L4},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:g.L4_1},{max_macroblocks_per_second:522240,max_macroblock_frame_size:8704,level:g.L4_2},{max_macroblocks_per_second:589824,max_macroblock_frame_size:22080,level:g.L5},{max_macroblocks_per_second:983040,max_macroblock_frame_size:36864,level:g.L5_1},{max_macroblocks_per_second:2073600,max_macroblock_frame_size:36864,level:g.L5_2}];function Ts(s){if(typeof s!="string"||s.length!==6)return;let t=parseInt(s,16);if(t===0)return;let r=t&255,i=t>>8&255,n=t>>16&255,a;switch(r){case g.L1_1:{a=(i&16)!==0?g.L1_b:g.L1_1;break}case g.L1:case g.L1_2:case g.L1_3:case g.L2:case g.L2_1:case g.L2_2:case g.L3:case g.L3_1:case g.L3_2:case g.L4:case g.L4_1:case g.L4_2:case g.L5:case g.L5_1:case g.L5_2:{a=r;break}default:{X.warn(`parseProfileLevelId() | unrecognized level_idc [str:${s}, level_idc:${r}]`);return}}for(let o of In)if(n===o.profile_idc&&o.profile_iop.isMatch(i))return X.debug(`parseProfileLevelId() | result [str:${s}, profile:${o.profile}, level:${a}]`),new Pe(o.profile,a);X.warn(`parseProfileLevelId() | unrecognized profile_idc/profile_iop combination [str:${s}, profile_idc:${n}, profile_iop:${i}]`)}function Cs(s){if(s.level==g.L1_b)switch(s.profile){case D.ConstrainedBaseline:return"42f00b";case D.Baseline:return"42100b";case D.Main:return"4d100b";default:{X.warn(`profileLevelIdToString() | Level 1_b not is allowed for profile ${s.profile}`);return}}let e;switch(s.profile){case D.ConstrainedBaseline:{e="42e0";break}case D.Baseline:{e="4200";break}case D.Main:{e="4d00";break}case D.ConstrainedHigh:{e="640c";break}case D.High:{e="6400";break}case D.PredictiveHigh444:{e="f400";break}default:{X.warn(`profileLevelIdToString() | unrecognized profile ${s.profile}`);return}}let t=s.level.toString(16);return t.length===1&&(t=`0${t}`),`${e}${t}`}function Ln(s){switch(s){case D.ConstrainedBaseline:return"ConstrainedBaseline";case D.Baseline:return"Baseline";case D.Main:return"Main";case D.ConstrainedHigh:return"ConstrainedHigh";case D.High:return"High";case D.PredictiveHigh444:return"PredictiveHigh444";default:{X.warn(`profileToString() | unrecognized profile ${s}`);return}}}function Mn(s){switch(s){case g.L1_b:return"1b";case g.L1:return"1";case g.L1_1:return"1.1";case g.L1_2:return"1.2";case g.L1_3:return"1.3";case g.L2:return"2";case g.L2_1:return"2.1";case g.L2_2:return"2.2";case g.L3:return"3";case g.L3_1:return"3.1";case g.L3_2:return"3.2";case g.L4:return"4";case g.L4_1:return"4.1";case g.L4_2:return"4.2";case g.L5:return"5";case g.L5_1:return"5.1";case g.L5_2:return"5.2";default:{X.warn(`levelToString() | unrecognized level ${s}`);return}}}function _e(s={}){let e=s["profile-level-id"];return e?Ts(e):Dn}function On(s={},e={}){let t=_e(s),r=_e(e);return!!(t&&r&&t.profile===r.profile)}function An(s={},e={}){let t=_e(s),r=_e(e);return!!(t&&r&&t.profile===r.profile&&t.level==r.level)}function Nn(s={},e={}){if(!s["profile-level-id"]&&!e["profile-level-id"]){X.warn("generateProfileLevelIdStringForAnswer() | profile-level-id missing in local and remote params");return}let t=_e(s),r=_e(e);if(!t)throw new TypeError("invalid local_profile_level_id");if(!r)throw new TypeError("invalid remote_profile_level_id");if(t.profile!==r.profile)throw new TypeError("H264 Profile mismatch");let i=Rs(s)&&Rs(e),n=t.level,a=r.level,o=qn(n,a),c=i?n:o;return X.debug(`generateProfileLevelIdStringForAnswer() | result [profile:${t.profile}, level:${c}]`),Cs(new Pe(t.profile,c))}function jn(s,e){for(let r=bs.length-1;r>=0;--r){let i=bs[r];if(i.max_macroblock_frame_size*256<=s&&i.max_macroblocks_per_second<=e*i.max_macroblock_frame_size)return X.debug(`supportedLevel() | result [max_frame_pixel_count:${s}, max_fps:${e}, level:${i.level}]`),i.level}X.warn(`supportedLevel() | no level supported [max_frame_pixel_count:${s}, max_fps:${e}]`)}function Ss(s,e){return+(e[0]===s)<<7|+(e[1]===s)<<6|+(e[2]===s)<<5|+(e[3]===s)<<4|+(e[4]===s)<<3|+(e[5]===s)<<2|+(e[6]===s)<<1|+(e[7]===s)<<0}function Fn(s,e){return s===g.L1_b?e!==g.L1&&e!==g.L1_b:e===g.L1_b?s!==g.L1:s<e}function qn(s,e){return Fn(s,e)?s:e}function Rs(s={}){let e=s["level-asymmetry-allowed"];return e===!0||e===1||e==="1"}});var ee=C(z=>{"use strict";Object.defineProperty(z,"__esModule",{value:!0});z.validateAndNormalizeRtpCapabilities=Wn;z.validateAndNormalizeRtpParameters=pr;z.validateAndNormalizeSctpStreamParameters=Hn;z.validateSctpCapabilities=Vn;z.getExtendedRtpCapabilities=Gn;z.getRecvRtpCapabilities=Qn;z.getSendRtpCapabilities=Kn;z.getSendingRtpParameters=Yn;z.getSendingRemoteRtpParameters=Jn;z.reduceCodecs=Xn;z.generateProbatorRtpParameters=Zn;z.canSend=ea;z.canReceive=ta;var ks=Es(),zn=fe(),$n="probator",Bn=1234,Un=127;function Wn(s){if(typeof s!="object")throw new TypeError("caps is not an object");if(s.codecs&&!Array.isArray(s.codecs))throw new TypeError("caps.codecs is not an array");s.codecs||(s.codecs=[]);for(let e of s.codecs)ra(e);if(s.headerExtensions&&!Array.isArray(s.headerExtensions))throw new TypeError("caps.headerExtensions is not an array");s.headerExtensions||(s.headerExtensions=[]);for(let e of s.headerExtensions)sa(e)}function pr(s){if(typeof s!="object")throw new TypeError("params is not an object");if(s.mid&&typeof s.mid!="string")throw new TypeError("params.mid is not a string");if(!Array.isArray(s.codecs))throw new TypeError("missing params.codecs");for(let e of s.codecs)ia(e);if(s.headerExtensions&&!Array.isArray(s.headerExtensions))throw new TypeError("params.headerExtensions is not an array");s.headerExtensions||(s.headerExtensions=[]);for(let e of s.headerExtensions)na(e);if(s.encodings&&!Array.isArray(s.encodings))throw new TypeError("params.encodings is not an array");s.encodings||(s.encodings=[]);for(let e of s.encodings)aa(e);if(s.rtcp&&typeof s.rtcp!="object")throw new TypeError("params.rtcp is not an object");s.rtcp||(s.rtcp={}),oa(s.rtcp)}function Hn(s){if(typeof s!="object")throw new TypeError("params is not an object");if(typeof s.streamId!="number")throw new TypeError("missing params.streamId");let e=!1;if(typeof s.ordered=="boolean"?e=!0:s.ordered=!0,s.maxPacketLifeTime&&typeof s.maxPacketLifeTime!="number")throw new TypeError("invalid params.maxPacketLifeTime");if(s.maxRetransmits&&typeof s.maxRetransmits!="number")throw new TypeError("invalid params.maxRetransmits");if(s.maxPacketLifeTime&&s.maxRetransmits)throw new TypeError("cannot provide both maxPacketLifeTime and maxRetransmits");if(e&&s.ordered&&(s.maxPacketLifeTime||s.maxRetransmits))throw new TypeError("cannot be ordered with maxPacketLifeTime or maxRetransmits");if(!e&&(s.maxPacketLifeTime||s.maxRetransmits)&&(s.ordered=!1),s.label&&typeof s.label!="string")throw new TypeError("invalid params.label");if(s.protocol&&typeof s.protocol!="string")throw new TypeError("invalid params.protocol")}function Vn(s){if(typeof s!="object")throw new TypeError("caps is not an object");if(!s.numStreams||typeof s.numStreams!="object")throw new TypeError("missing caps.numStreams");ca(s.numStreams)}function Gn(s,e,t){let r={codecs:[],headerExtensions:[]};if(t)for(let i of s.codecs??[]){if(De(i))continue;let n=(e.codecs??[]).find(o=>dr(o,i,{strict:!0,modify:!0}));if(!n)continue;let a={kind:i.kind,mimeType:i.mimeType,clockRate:i.clockRate,channels:i.channels,localPayloadType:i.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:n.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:i.parameters??{},remoteParameters:n.parameters??{},rtcpFeedback:xs(i,n)};r.codecs.push(a)}else for(let i of e.codecs??[]){if(De(i))continue;let n=(s.codecs??[]).find(o=>dr(o,i,{strict:!0,modify:!0}));if(!n)continue;let a={kind:n.kind,mimeType:n.mimeType,clockRate:n.clockRate,channels:n.channels,localPayloadType:n.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:i.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:n.parameters??{},remoteParameters:i.parameters??{},rtcpFeedback:xs(n,i)};r.codecs.push(a)}for(let i of r.codecs){let n=s.codecs.find(o=>De(o)&&o.parameters?.apt===i.localPayloadType),a=e.codecs.find(o=>De(o)&&o.parameters?.apt===i.remotePayloadType);n&&a&&(i.localRtxPayloadType=n.preferredPayloadType,i.remoteRtxPayloadType=a.preferredPayloadType)}for(let i of e.headerExtensions){let n=s.headerExtensions.find(o=>da(o,i));if(!n)continue;let a={kind:i.kind,uri:i.uri,sendId:n.preferredId,recvId:i.preferredId,encrypt:n.preferredEncrypt??!1,direction:"sendrecv"};switch(i.direction){case"sendrecv":{a.direction="sendrecv";break}case"recvonly":{a.direction="sendonly";break}case"sendonly":{a.direction="recvonly";break}case"inactive":{a.direction="inactive";break}}r.headerExtensions.push(a)}return r}function Qn(s){return Ds({direction:"recvonly",extendedRtpCapabilities:s})}function Kn(s){return Ds({direction:"sendonly",extendedRtpCapabilities:s})}function Yn(s,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let r of e.codecs){if(r.kind!==s)continue;let i={mimeType:r.mimeType,payloadType:r.localPayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.localParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(i),r.localRtxPayloadType){let n={mimeType:`${r.kind}/rtx`,payloadType:r.localRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.localPayloadType},rtcpFeedback:[]};t.codecs.push(n)}}for(let r of e.headerExtensions){if(r.kind&&r.kind!==s||r.direction!=="sendrecv"&&r.direction!=="sendonly")continue;let i={uri:r.uri,id:r.sendId,encrypt:r.encrypt,parameters:{}};t.headerExtensions.push(i)}return t}function Jn(s,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let r of e.codecs){if(r.kind!==s)continue;let i={mimeType:r.mimeType,payloadType:r.localPayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.remoteParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(i),r.localRtxPayloadType){let n={mimeType:`${r.kind}/rtx`,payloadType:r.localRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.localPayloadType},rtcpFeedback:[]};t.codecs.push(n)}}for(let r of e.headerExtensions){if(r.kind&&r.kind!==s||r.direction!=="sendrecv"&&r.direction!=="sendonly")continue;let i={uri:r.uri,id:r.sendId,encrypt:r.encrypt,parameters:{}};t.headerExtensions.push(i)}if(t.headerExtensions.some(r=>r.uri==="http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"))for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(i=>i.type!=="goog-remb");else if(t.headerExtensions.some(r=>r.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"))for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(i=>i.type!=="transport-cc");else for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(i=>i.type!=="transport-cc"&&i.type!=="goog-remb");return t}function Xn(s,e){let t=[];if(!e)t.push(s[0]),De(s[1])&&t.push(s[1]);else{for(let r=0;r<s.length;++r)if(dr(s[r],e,{strict:!0})){t.push(s[r]),De(s[r+1])&&t.push(s[r+1]);break}if(t.length===0)throw new TypeError("no matching codec found")}return t}function Zn(s){s=zn.clone(s),pr(s);let e={mid:$n,codecs:[],headerExtensions:[],encodings:[{ssrc:Bn}],rtcp:{cname:"probator"}};return e.codecs.push(s.codecs[0]),e.codecs[0].payloadType=Un,e.headerExtensions=s.headerExtensions,e}function ea(s,e){return(e.codecs??[]).some(t=>t.kind===s)}function ta(s,e){if(pr(s),s.codecs.length===0)return!1;let t=s.codecs[0];return(e.codecs??[]).some(r=>r.preferredPayloadType===t.payloadType)}function ra(s){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof s!="object")throw new TypeError("codec is not an object");if(!s.mimeType||typeof s.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(s.kind=t[1].toLowerCase(),typeof s.preferredPayloadType!="number")throw new TypeError("missing codec.preferredPayloadType");if(typeof s.clockRate!="number")throw new TypeError("missing codec.clockRate");s.kind==="audio"?typeof s.channels!="number"&&(s.channels=1):delete s.channels,(!s.parameters||typeof s.parameters!="object")&&(s.parameters={});for(let r of Object.keys(s.parameters)){let i=s.parameters[r];if(i===void 0&&(s.parameters[r]="",i=""),typeof i!="string"&&typeof i!="number")throw new TypeError(`invalid codec parameter [key:${r}s, value:${i}]`);if(r==="apt"&&typeof i!="number")throw new TypeError("invalid codec apt parameter")}(!s.rtcpFeedback||!Array.isArray(s.rtcpFeedback))&&(s.rtcpFeedback=[]);for(let r of s.rtcpFeedback)Ps(r)}function Ps(s){if(typeof s!="object")throw new TypeError("fb is not an object");if(!s.type||typeof s.type!="string")throw new TypeError("missing fb.type");(!s.parameter||typeof s.parameter!="string")&&(s.parameter="")}function sa(s){if(typeof s!="object")throw new TypeError("ext is not an object");if(s.kind!=="audio"&&s.kind!=="video")throw new TypeError("invalid ext.kind");if(!s.uri||typeof s.uri!="string")throw new TypeError("missing ext.uri");if(typeof s.preferredId!="number")throw new TypeError("missing ext.preferredId");if(s.preferredEncrypt&&typeof s.preferredEncrypt!="boolean")throw new TypeError("invalid ext.preferredEncrypt");if(s.preferredEncrypt||(s.preferredEncrypt=!1),s.direction&&typeof s.direction!="string")throw new TypeError("invalid ext.direction");s.direction||(s.direction="sendrecv")}function ia(s){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof s!="object")throw new TypeError("codec is not an object");if(!s.mimeType||typeof s.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(typeof s.payloadType!="number")throw new TypeError("missing codec.payloadType");if(typeof s.clockRate!="number")throw new TypeError("missing codec.clockRate");t[1].toLowerCase()==="audio"?typeof s.channels!="number"&&(s.channels=1):delete s.channels,(!s.parameters||typeof s.parameters!="object")&&(s.parameters={});for(let i of Object.keys(s.parameters)){let n=s.parameters[i];if(n===void 0&&(s.parameters[i]="",n=""),typeof n!="string"&&typeof n!="number")throw new TypeError(`invalid codec parameter [key:${i}s, value:${n}]`);if(i==="apt"&&typeof n!="number")throw new TypeError("invalid codec apt parameter")}(!s.rtcpFeedback||!Array.isArray(s.rtcpFeedback))&&(s.rtcpFeedback=[]);for(let i of s.rtcpFeedback)Ps(i)}function na(s){if(typeof s!="object")throw new TypeError("ext is not an object");if(!s.uri||typeof s.uri!="string")throw new TypeError("missing ext.uri");if(typeof s.id!="number")throw new TypeError("missing ext.id");if(s.encrypt&&typeof s.encrypt!="boolean")throw new TypeError("invalid ext.encrypt");s.encrypt||(s.encrypt=!1),(!s.parameters||typeof s.parameters!="object")&&(s.parameters={});for(let e of Object.keys(s.parameters)){let t=s.parameters[e];if(t===void 0&&(s.parameters[e]="",t=""),typeof t!="string"&&typeof t!="number")throw new TypeError("invalid header extension parameter")}}function aa(s){if(typeof s!="object")throw new TypeError("encoding is not an object");if(s.ssrc&&typeof s.ssrc!="number")throw new TypeError("invalid encoding.ssrc");if(s.rid&&typeof s.rid!="string")throw new TypeError("invalid encoding.rid");if(s.rtx&&typeof s.rtx!="object")throw new TypeError("invalid encoding.rtx");if(s.rtx&&typeof s.rtx.ssrc!="number")throw new TypeError("missing encoding.rtx.ssrc");if((!s.dtx||typeof s.dtx!="boolean")&&(s.dtx=!1),s.scalabilityMode&&typeof s.scalabilityMode!="string")throw new TypeError("invalid encoding.scalabilityMode")}function oa(s){if(typeof s!="object")throw new TypeError("rtcp is not an object");if(s.cname&&typeof s.cname!="string")throw new TypeError("invalid rtcp.cname");(!s.reducedSize||typeof s.reducedSize!="boolean")&&(s.reducedSize=!0)}function ca(s){if(typeof s!="object")throw new TypeError("numStreams is not an object");if(typeof s.OS!="number")throw new TypeError("missing numStreams.OS");if(typeof s.MIS!="number")throw new TypeError("missing numStreams.MIS")}function Ds({direction:s,extendedRtpCapabilities:e}){let t={codecs:[],headerExtensions:[]};for(let r of e.codecs){let i={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(i),!r.remoteRtxPayloadType)continue;let n={kind:r.kind,mimeType:`${r.kind}/rtx`,preferredPayloadType:r.remoteRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.remotePayloadType},rtcpFeedback:[]};t.codecs.push(n)}for(let r of e.headerExtensions){if(r.direction!=="sendrecv"&&r.direction!==s)continue;let i={kind:r.kind,uri:r.uri,preferredId:r.recvId,preferredEncrypt:r.encrypt??!1,direction:r.direction};t.headerExtensions.push(i)}return t}function De(s){return s?/.+\/rtx$/i.test(s.mimeType):!1}function dr(s,e,{strict:t=!1,modify:r=!1}={}){let i=s.mimeType.toLowerCase(),n=e.mimeType.toLowerCase();if(i!==n||s.clockRate!==e.clockRate||s.channels!==e.channels)return!1;switch(i){case"video/h264":{if(t){let a=s.parameters["packetization-mode"]??0,o=e.parameters["packetization-mode"]??0;if(a!==o||!ks.isSameProfile(s.parameters,e.parameters))return!1;let c;try{c=ks.generateProfileLevelIdStringForAnswer(s.parameters,e.parameters)}catch{return!1}r&&(c?(s.parameters["profile-level-id"]=c,e.parameters["profile-level-id"]=c):(delete s.parameters["profile-level-id"],delete e.parameters["profile-level-id"]))}break}case"video/vp9":{if(t){let a=s.parameters["profile-id"]??0,o=e.parameters["profile-id"]??0;if(a!==o)return!1}break}}return!0}function da(s,e){return!(s.kind&&e.kind&&s.kind!==e.kind||s.uri!==e.uri)}function xs(s,e){let t=[];for(let r of s.rtcpFeedback??[]){let i=(e.rtcpFeedback??[]).find(n=>n.type===r.type&&(n.parameter===r.parameter||!n.parameter&&!r.parameter));i&&t.push(i)}return t}});var Is=C(vt=>{"use strict";Object.defineProperty(vt,"__esModule",{value:!0});vt.Logger=void 0;var Ie=require("debug"),Le="awaitqueue",lr=class{_debug;_warn;_error;constructor(e){e?(this._debug=Ie(`${Le}:${e}`),this._warn=Ie(`${Le}:WARN:${e}`),this._error=Ie(`${Le}:ERROR:${e}`)):(this._debug=Ie(Le),this._warn=Ie(`${Le}:WARN`),this._error=Ie(`${Le}: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}};vt.Logger=lr});var mr=C(Me=>{"use strict";Object.defineProperty(Me,"__esModule",{value:!0});Me.AwaitQueueRemovedTaskError=Me.AwaitQueueStoppedError=void 0;var ur=class s extends Error{constructor(e){super(e??"queue stopped"),this.name="AwaitQueueStoppedError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,s)}};Me.AwaitQueueStoppedError=ur;var hr=class s extends Error{constructor(e){super(e??"queue task removed"),this.name="AwaitQueueRemovedTaskError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,s)}};Me.AwaitQueueRemovedTaskError=hr});var Ls=C(wt=>{"use strict";Object.defineProperty(wt,"__esModule",{value:!0});wt.AwaitQueue=void 0;var pa=Is(),fr=mr(),ne=new pa.Logger("AwaitQueue"),_r=class{pendingTasks=new Map;nextTaskId=0;constructor(){ne.debug("constructor()")}get size(){return this.pendingTasks.size}async push(e,t,r){if(t=t??e.name,ne.debug(`push() [name:${t}, options:%o]`,r),typeof e!="function")throw new TypeError("given task is not a function");if(t)try{Object.defineProperty(e,"name",{value:t})}catch{}return new Promise((i,n)=>{if(t&&r?.removeOngoingTasksWithSameName)for(let o of this.pendingTasks.values())o.name===t&&o.reject(new fr.AwaitQueueRemovedTaskError,{canExecuteNextTask:!1});let a={id:this.nextTaskId++,task:e,name:t,enqueuedAt:Date.now(),executedAt:void 0,completed:!1,resolve:o=>{if(a.completed)return;a.completed=!0,this.pendingTasks.delete(a.id),ne.debug(`resolving task [name:${a.name}]`),i(o);let[c]=this.pendingTasks.values();c&&!c.executedAt&&this.execute(c)},reject:(o,{canExecuteNextTask:c})=>{if(!a.completed&&(a.completed=!0,this.pendingTasks.delete(a.id),ne.debug(`rejecting task [name:${a.name}]: %s`,String(o)),n(o),c)){let[d]=this.pendingTasks.values();d&&!d.executedAt&&this.execute(d)}}};this.pendingTasks.set(a.id,a),this.pendingTasks.size===1&&this.execute(a)})}stop(){ne.debug("stop()");for(let e of this.pendingTasks.values())ne.debug(`stop() | stopping task [name:${e.name}]`),e.reject(new fr.AwaitQueueStoppedError,{canExecuteNextTask:!1})}remove(e){ne.debug(`remove() [taskIdx:${e}]`);let t=Array.from(this.pendingTasks.values())[e];if(!t){ne.debug(`stop() | no task with given idx [taskIdx:${e}]`);return}t.reject(new fr.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(ne.debug(`execute() [name:${e.name}]`),e.executedAt)throw new 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})}}};wt.AwaitQueue=_r});var Os=C(le=>{"use strict";Object.defineProperty(le,"__esModule",{value:!0});le.AwaitQueueRemovedTaskError=le.AwaitQueueStoppedError=le.AwaitQueue=void 0;var la=Ls();Object.defineProperty(le,"AwaitQueue",{enumerable:!0,get:function(){return la.AwaitQueue}});var Ms=mr();Object.defineProperty(le,"AwaitQueueStoppedError",{enumerable:!0,get:function(){return Ms.AwaitQueueStoppedError}});Object.defineProperty(le,"AwaitQueueRemovedTaskError",{enumerable:!0,get:function(){return Ms.AwaitQueueRemovedTaskError}})});var Ns=C(yt=>{"use strict";Object.defineProperty(yt,"__esModule",{value:!0});yt.Producer=void 0;var ua=q(),As=U(),Oe=V(),te=new ua.Logger("Producer"),gr=class extends As.EnhancedEventEmitter{_id;_localId;_closed=!1;_rtpSender;_track;_kind;_rtpParameters;_paused;_maxSpatialLayer;_stopTracks;_disableTrackOnPause;_zeroRtpOnPause;_appData;_observer=new As.EnhancedEventEmitter;constructor({id:e,localId:t,rtpSender:r,track:i,rtpParameters:n,stopTracks:a,disableTrackOnPause:o,zeroRtpOnPause:c,appData:d}){super(),te.debug("constructor()"),this._id=e,this._localId=t,this._rtpSender=r,this._track=i,this._kind=i.kind,this._rtpParameters=n,this._paused=o?!i.enabled:!1,this._maxSpatialLayer=void 0,this._stopTracks=a,this._disableTrackOnPause=o,this._zeroRtpOnPause=c,this._appData=d??{},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||(te.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(te.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new Oe.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(te.debug("pause()"),this._closed){te.error("pause() | Producer closed");return}this._paused=!0,this._track&&this._disableTrackOnPause&&(this._track.enabled=!1),this._zeroRtpOnPause&&new Promise((e,t)=>{this.safeEmit("@pause",e,t)}).catch(()=>{}),this._observer.safeEmit("pause")}resume(){if(te.debug("resume()"),this._closed){te.error("resume() | Producer closed");return}this._paused=!1,this._track&&this._disableTrackOnPause&&(this._track.enabled=!0),this._zeroRtpOnPause&&new Promise((e,t)=>{this.safeEmit("@resume",e,t)}).catch(()=>{}),this._observer.safeEmit("resume")}async replaceTrack({track:e}){if(te.debug("replaceTrack() [track:%o]",e),this._closed){if(e&&this._stopTracks)try{e.stop()}catch{}throw new Oe.InvalidStateError("closed")}else if(e?.readyState==="ended")throw new Oe.InvalidStateError("track ended");if(e===this._track){te.debug("replaceTrack() | same track, ignored");return}await new Promise((t,r)=>{this.safeEmit("@replacetrack",e,t,r)}),this.destroyTrack(),this._track=e,this._track&&this._disableTrackOnPause&&(this._paused?this._paused&&(this._track.enabled=!1):this._track.enabled=!0),this.handleTrack()}async setMaxSpatialLayer(e){if(this._closed)throw new Oe.InvalidStateError("closed");if(this._kind!=="video")throw new Oe.UnsupportedError("not a video Producer");if(typeof e!="number")throw new 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 Oe.InvalidStateError("closed");if(typeof e!="object")throw new TypeError("invalid params");await new Promise((t,r)=>{this.safeEmit("@setrtpencodingparameters",e,t,r)})}onTrackEnded(){te.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{}}};yt.Producer=gr});var Fs=C(bt=>{"use strict";Object.defineProperty(bt,"__esModule",{value:!0});bt.Consumer=void 0;var ha=q(),js=U(),ma=V(),re=new ha.Logger("Consumer"),vr=class extends js.EnhancedEventEmitter{_id;_localId;_producerId;_closed=!1;_rtpReceiver;_track;_rtpParameters;_paused;_appData;_observer=new js.EnhancedEventEmitter;constructor({id:e,localId:t,producerId:r,rtpReceiver:i,track:n,rtpParameters:a,appData:o}){super(),re.debug("constructor()"),this._id=e,this._localId=t,this._producerId=r,this._rtpReceiver=i,this._track=n,this._rtpParameters=a,this._paused=!n.enabled,this._appData=o??{},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||(re.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(re.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new ma.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(re.debug("pause()"),this._closed){re.error("pause() | Consumer closed");return}if(this._paused){re.debug("pause() | Consumer is already paused");return}this._paused=!0,this._track.enabled=!1,this.emit("@pause"),this._observer.safeEmit("pause")}resume(){if(re.debug("resume()"),this._closed){re.error("resume() | Consumer closed");return}if(!this._paused){re.debug("resume() | Consumer is already resumed");return}this._paused=!1,this._track.enabled=!0,this.emit("@resume"),this._observer.safeEmit("resume")}onTrackEnded(){re.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{}}};bt.Consumer=vr});var zs=C(St=>{"use strict";Object.defineProperty(St,"__esModule",{value:!0});St.DataProducer=void 0;var fa=q(),qs=U(),_a=V(),ae=new fa.Logger("DataProducer"),wr=class extends qs.EnhancedEventEmitter{_id;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new qs.EnhancedEventEmitter;constructor({id:e,dataChannel:t,sctpStreamParameters:r,appData:i}){super(),ae.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||(ae.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(ae.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}send(e){if(ae.debug("send()"),this._closed)throw new _a.InvalidStateError("closed");this._dataChannel.send(e)}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(ae.debug('DataChannel "open" event'),this.safeEmit("open"))}),this._dataChannel.addEventListener("error",e=>{if(this._closed)return;let t=e.error??new Error("unknown DataChannel error");e.error?.errorDetail==="sctp-failure"?ae.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):ae.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(ae.warn('DataChannel "close" event'),this._closed=!0,this.emit("@close"),this.safeEmit("close"),this._observer.safeEmit("close"))}),this._dataChannel.addEventListener("message",()=>{this._closed||ae.warn('DataChannel "message" event in a DataProducer, message discarded')}),this._dataChannel.addEventListener("bufferedamountlow",()=>{this._closed||this.safeEmit("bufferedamountlow")})}};St.DataProducer=wr});var Bs=C(Rt=>{"use strict";Object.defineProperty(Rt,"__esModule",{value:!0});Rt.DataConsumer=void 0;var ga=q(),$s=U(),ge=new ga.Logger("DataConsumer"),yr=class extends $s.EnhancedEventEmitter{_id;_dataProducerId;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new $s.EnhancedEventEmitter;constructor({id:e,dataProducerId:t,dataChannel:r,sctpStreamParameters:i,appData:n}){super(),ge.debug("constructor()"),this._id=e,this._dataProducerId=t,this._dataChannel=r,this._sctpStreamParameters=i,this._appData=n??{},this.handleDataChannel()}get id(){return this._id}get dataProducerId(){return this._dataProducerId}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get binaryType(){return this._dataChannel.binaryType}set binaryType(e){this._dataChannel.binaryType=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(ge.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(ge.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(ge.debug('DataChannel "open" event'),this.safeEmit("open"))}),this._dataChannel.addEventListener("error",e=>{if(this._closed)return;let t=e.error??new Error("unknown DataChannel error");e.error?.errorDetail==="sctp-failure"?ge.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):ge.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(ge.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)})}};Rt.DataConsumer=yr});var Ws=C(Tt=>{"use strict";Object.defineProperty(Tt,"__esModule",{value:!0});Tt.Transport=void 0;var va=Os(),wa=q(),Us=U(),A=V(),br=fe(),Ge=ee(),ya=Ns(),ba=Fs(),Sa=zs(),Ra=Bs(),O=new wa.Logger("Transport"),Sr=class{consumerOptions;promise;resolve;reject;constructor(e){this.consumerOptions=e,this.promise=new Promise((t,r)=>{this.resolve=t,this.reject=r})}},Rr=class extends Us.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 va.AwaitQueue;_pendingConsumerTasks=[];_consumerCreationInProgress=!1;_pendingPauseConsumers=new Map;_consumerPauseInProgress=!1;_pendingResumeConsumers=new Map;_consumerResumeInProgress=!1;_pendingCloseConsumers=new Map;_consumerCloseInProgress=!1;_observer=new Us.EnhancedEventEmitter;constructor({direction:e,id:t,iceParameters:r,iceCandidates:i,dtlsParameters:n,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:d,appData:p,handlerFactory:l,getSendExtendedRtpCapabilities:u,recvRtpCapabilities:f,canProduceByKind:m}){super(),O.debug("constructor() [id:%s, direction:%s]",t,e),this._id=t,this._direction=e,this._getSendExtendedRtpCapabilities=u,this._recvRtpCapabilities=f,this._canProduceByKind=m,this._maxSctpMessageSize=a?.maxMessageSize;let h=br.clone(d)??{};delete h.iceServers,delete h.iceTransportPolicy,delete h.bundlePolicy,delete h.rtcpMuxPolicy,this._handler=l.factory({direction:e,iceParameters:r,iceCandidates:i,dtlsParameters:n,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:h,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities}),this._appData=p??{},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){O.debug("close()"),this._closed=!0,this._awaitQueue.stop(),this._handler.close(),this._connectionState="closed";for(let e of this._producers.values())e.transportClosed();this._producers.clear();for(let e of this._consumers.values())e.transportClosed();this._consumers.clear();for(let e of this._dataProducers.values())e.transportClosed();this._dataProducers.clear();for(let e of this._dataConsumers.values())e.transportClosed();this._dataConsumers.clear(),this._observer.safeEmit("close"),super.close(),this._observer.close()}}async getStats(){if(this._closed)throw new A.InvalidStateError("closed");return this._handler.getTransportStats()}async restartIce({iceParameters:e}){if(O.debug("restartIce()"),this._closed)throw new A.InvalidStateError("closed");if(!e)throw new TypeError("missing iceParameters");return this._awaitQueue.push(async()=>await this._handler.restartIce(e),"transport.restartIce()")}async updateIceServers({iceServers:e}={}){if(O.debug("updateIceServers()"),this._closed)throw new A.InvalidStateError("closed");if(!Array.isArray(e))throw new 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:n,codec:a,stopTracks:o=!0,disableTrackOnPause:c=!0,zeroRtpOnPause:d=!1,onRtpSender:p,appData:l={}}={}){if(O.debug("produce() [track:%o]",e),this._closed)throw new A.InvalidStateError("closed");if(e){if(this._direction!=="send")throw new A.UnsupportedError("not a sending Transport");if(this._canProduceByKind[e.kind]){if(e.readyState==="ended")throw new A.InvalidStateError("track ended");if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(this.listenerCount("produce")===0)throw new TypeError('no "produce" listener set into this transport');if(l&&typeof l!="object")throw new TypeError("if given, appData must be an object")}else throw new A.UnsupportedError(`cannot produce ${e.kind}`)}else throw new TypeError("missing track");return this._awaitQueue.push(async()=>{let u;if(r&&!Array.isArray(r))throw TypeError("encodings must be an array");r?.length===0?u=void 0:r&&(u=r.map(_=>{let S={active:!0};return _.active===!1&&(S.active=!1),typeof _.dtx=="boolean"&&(S.dtx=_.dtx),typeof _.scalabilityMode=="string"&&(S.scalabilityMode=_.scalabilityMode),typeof _.scaleResolutionDownBy=="number"&&(S.scaleResolutionDownBy=_.scaleResolutionDownBy),typeof _.maxBitrate=="number"&&(S.maxBitrate=_.maxBitrate),typeof _.maxFramerate=="number"&&(S.maxFramerate=_.maxFramerate),typeof _.adaptivePtime=="boolean"&&(S.adaptivePtime=_.adaptivePtime),typeof _.priority=="string"&&(S.priority=_.priority),typeof _.networkPriority=="string"&&(S.networkPriority=_.networkPriority),S}));let{localId:f,rtpParameters:m,rtpSender:h}=await this._handler.send({track:e,streamId:t,encodings:u,codecOptions:i,headerExtensionOptions:n,codec:a,onRtpSender:p});try{Ge.validateAndNormalizeRtpParameters(m);let{id:_}=await new Promise((k,P)=>{this.safeEmit("produce",{kind:e.kind,rtpParameters:m,appData:l},k,P)}),S=new ya.Producer({id:_,localId:f,rtpSender:h,track:e,rtpParameters:m,stopTracks:o,disableTrackOnPause:c,zeroRtpOnPause:d,appData:l});return this._producers.set(S.id,S),this.handleProducer(S),this._observer.safeEmit("newproducer",S),S}catch(_){throw this._handler.stopSending(f).catch(()=>{}),_}},"transport.produce()").catch(u=>{if(o)try{e.stop()}catch{}throw u})}async consume({id:e,producerId:t,kind:r,rtpParameters:i,streamId:n,onRtpReceiver:a,appData:o={}}){if(O.debug("consume()"),this._closed)throw new A.InvalidStateError("closed");if(this._direction!=="recv")throw new A.UnsupportedError("not a receiving Transport");if(typeof e!="string")throw new TypeError("missing id");if(typeof t!="string")throw new TypeError("missing producerId");if(r!=="audio"&&r!=="video")throw new TypeError(`invalid kind '${r}'`);if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(o&&typeof o!="object")throw new TypeError("if given, appData must be an object");let c=br.clone(i);if(!Ge.canReceive(c,this._recvRtpCapabilities))throw new A.UnsupportedError("cannot consume this Producer");let p=new Sr({id:e,producerId:t,kind:r,rtpParameters:c,streamId:n,onRtpReceiver:a,appData:o});return this._pendingConsumerTasks.push(p),queueMicrotask(()=>{this._closed||this._consumerCreationInProgress===!1&&this.createPendingConsumers()}),p.promise}async produceData({ordered:e=!0,maxPacketLifeTime:t,maxRetransmits:r,label:i="",protocol:n="",appData:a={}}={}){if(O.debug("produceData()"),this._closed)throw new A.InvalidStateError("closed");if(this._direction!=="send")throw new A.UnsupportedError("not a sending Transport");if(this._maxSctpMessageSize){if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(this.listenerCount("producedata")===0)throw new TypeError('no "producedata" listener set into this transport');if(a&&typeof a!="object")throw new TypeError("if given, appData must be an object")}else throw new A.UnsupportedError("SCTP not enabled by remote Transport");return(t||r)&&(e=!1),this._awaitQueue.push(async()=>{let{dataChannel:o,sctpStreamParameters:c}=await this._handler.sendDataChannel({sctpStreamParameters:{ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:n}});Ge.validateAndNormalizeSctpStreamParameters(c);let{id:d}=await new Promise((l,u)=>{this.safeEmit("producedata",{sctpStreamParameters:c,label:i,protocol:n,appData:a},l,u)}),p=new Sa.DataProducer({id:d,dataChannel:o,sctpStreamParameters:c,appData:a});return this._dataProducers.set(p.id,p),this.handleDataProducer(p),this._observer.safeEmit("newdataproducer",p),p},"transport.produceData()")}async consumeData({id:e,dataProducerId:t,sctpStreamParameters:r,label:i="",protocol:n="",appData:a={}}){if(O.debug("consumeData()"),this._closed)throw new A.InvalidStateError("closed");if(this._direction!=="recv")throw new A.UnsupportedError("not a receiving Transport");if(this._maxSctpMessageSize){if(typeof e!="string")throw new TypeError("missing id");if(typeof t!="string")throw new TypeError("missing dataProducerId");if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(a&&typeof a!="object")throw new TypeError("if given, appData must be an object")}else throw new A.UnsupportedError("SCTP not enabled by remote Transport");let o=br.clone(r);return Ge.validateAndNormalizeSctpStreamParameters(o),this._awaitQueue.push(async()=>{let{dataChannel:c}=await this._handler.receiveDataChannel({maxMessageSize:this._maxSctpMessageSize,sctpStreamParameters:o,label:i,protocol:n}),d=new Ra.DataConsumer({id:e,dataProducerId:t,dataChannel:c,sctpStreamParameters:o,appData:a});return this._dataConsumers.set(d.id,d),this.handleDataConsumer(d),this._observer.safeEmit("newdataconsumer",d),d},"transport.consumeData()")}getDataChannelMaxMessageSize(){return this._handler.getDataChannelMaxMessageSize()}createPendingConsumers(){this._consumerCreationInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingConsumerTasks.length===0){O.debug("createPendingConsumers() | there is no Consumer to be created");return}let e=[...this._pendingConsumerTasks];this._pendingConsumerTasks=[];let t,r=[];for(let i of e){let{id:n,kind:a,rtpParameters:o,streamId:c,onRtpReceiver:d}=i.consumerOptions;r.push({trackId:n,kind:a,rtpParameters:o,streamId:c,onRtpReceiver:d})}try{let i=await this._handler.receive(r);for(let n=0;n<i.length;++n){let a=e[n],o=i[n],{id:c,producerId:d,kind:p,rtpParameters:l,appData:u}=a.consumerOptions,{localId:f,rtpReceiver:m,track:h}=o,_=new ba.Consumer({id:c,localId:f,producerId:d,rtpReceiver:m,track:h,rtpParameters:l,appData:u});this._consumers.set(_.id,_),this.handleConsumer(_),!this._probatorConsumerCreated&&!t&&p==="video"&&(t=_),this._observer.safeEmit("newconsumer",_),a.resolve(_)}}catch(i){for(let n of e)n.reject(i)}if(t)try{let i=Ge.generateProbatorRtpParameters(t.rtpParameters);await this._handler.receive([{trackId:"probator",kind:"video",rtpParameters:i}]),O.debug("createPendingConsumers() | Consumer for RTP probation created"),this._probatorConsumerCreated=!0}catch(i){O.error("createPendingConsumers() | failed to create Consumer for RTP probation:%o",i)}},"transport.createPendingConsumers()").then(()=>{this._consumerCreationInProgress=!1,this._pendingConsumerTasks.length>0&&this.createPendingConsumers()}).catch(()=>{})}pausePendingConsumers(){this._consumerPauseInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingPauseConsumers.size===0){O.debug("pausePendingConsumers() | there is no Consumer to be paused");return}let e=Array.from(this._pendingPauseConsumers.values());this._pendingPauseConsumers.clear();try{let t=e.map(r=>r.localId);await this._handler.pauseReceiving(t)}catch(t){O.error("pausePendingConsumers() | failed to pause Consumers:",t)}},"transport.pausePendingConsumers()").then(()=>{this._consumerPauseInProgress=!1,this._pendingPauseConsumers.size>0&&this.pausePendingConsumers()}).catch(()=>{})}resumePendingConsumers(){this._consumerResumeInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingResumeConsumers.size===0){O.debug("resumePendingConsumers() | there is no Consumer to be resumed");return}let e=Array.from(this._pendingResumeConsumers.values());this._pendingResumeConsumers.clear();try{let t=e.map(r=>r.localId);await this._handler.resumeReceiving(t)}catch(t){O.error("resumePendingConsumers() | failed to resume Consumers:",t)}},"transport.resumePendingConsumers()").then(()=>{this._consumerResumeInProgress=!1,this._pendingResumeConsumers.size>0&&this.resumePendingConsumers()}).catch(()=>{})}closePendingConsumers(){this._consumerCloseInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingCloseConsumers.size===0){O.debug("closePendingConsumers() | there is no Consumer to be closed");return}let e=Array.from(this._pendingCloseConsumers.values());this._pendingCloseConsumers.clear();try{await this._handler.stopReceiving(e.map(t=>t.localId))}catch(t){O.error("closePendingConsumers() | failed to close Consumers:",t)}},"transport.closePendingConsumers()").then(()=>{this._consumerCloseInProgress=!1,this._pendingCloseConsumers.size>0&&this.closePendingConsumers()}).catch(()=>{})}handleHandler(){let e=this._handler;e.on("@connect",({dtlsParameters:t},r,i)=>{if(this._closed){i(new A.InvalidStateError("closed"));return}this.safeEmit("connect",{dtlsParameters:t},r,i)}),e.on("@icegatheringstatechange",t=>{t!==this._iceGatheringState&&(O.debug("ICE gathering state changed to %s",t),this._iceGatheringState=t,this._closed||this.safeEmit("icegatheringstatechange",t))}),e.on("@icecandidateerror",t=>{O.warn(`ICE candidate error [url:${t.url}, localAddress:${t.address}, localPort:${t.port}]: ${t.errorCode} "${t.errorText}"`),this.safeEmit("icecandidateerror",t)}),e.on("@connectionstatechange",t=>{t!==this._connectionState&&(O.debug("connection state changed to %s",t),this._connectionState=t,this._closed||this.safeEmit("connectionstatechange",t))})}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(t=>O.warn("producer.close() failed:%o",t))}),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 A.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),this._consumerCloseInProgress===!1&&this.closePendingConsumers())}),e.on("@pause",()=>{this._pendingResumeConsumers.has(e.id)&&this._pendingResumeConsumers.delete(e.id),this._pendingPauseConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerPauseInProgress===!1&&this.pausePendingConsumers()})}),e.on("@resume",()=>{this._pendingPauseConsumers.has(e.id)&&this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerResumeInProgress===!1&&this.resumePendingConsumers()})}),e.on("@getstats",(t,r)=>{if(this._closed)return r(new A.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)})}};Tt.Transport=Rr});var Ct=C((Wc,Vs)=>{"use strict";var Hs=Vs.exports={v:[{name:"version",reg:/^(\d*)$/}],o:[{name:"origin",reg:/^(\S*) (\d*) (\d*) (\S*) IP(\d) (\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\d*) (\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\d) (\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\w*) (\d*) ([\w/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\d*) ([\w\-.]*)(?:\s*\/(\d*)(?:\s*\/(\S*))?)?/,names:["payload","codec","rate","encoding"],format:function(s){return s.encoding?"rtpmap:%d %s/%s/%s":s.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(s){return s.address!=null?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\*|\d*) trr-int (\d*)/,names:["payload","value"],format:"rtcp-fb:%s trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,names:["payload","type","subtype"],format:function(s){return s.subtype!=null?"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(s){return"extmap:%d"+(s.direction?"/%s":"%v")+(s["encrypt-uri"]?" %s":"%v")+" %s"+(s.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(s){return s.sessionConfig!=null?"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(s){var e="candidate:%s %d %s %d %s %d typ %s";return e+=s.raddr!=null?" raddr %s rport %d":"%v%v",e+=s.tcptype!=null?" tcptype %s":"%v",s.generation!=null&&(e+=" generation %d"),e+=s["network-id"]!=null?" network-id %d":"%v",e+=s["network-cost"]!=null?" network-cost %d":"%v",e}},{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(s){var e="ssrc:%d";return s.attribute!=null&&(e+=" %s",s.value!=null&&(e+=":%s")),e}},{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(s){return s.maxMessageSize!=null?"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(s){return s.params?"rid:%s %s %s":"rid:%s %s"}},{push:"imageattrs",reg:new 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(s){return"imageattr:%s %s %s"+(s.dir2?" %s %s":"")}},{name:"simulcast",reg:new RegExp("^simulcast:(send|recv) ([a-zA-Z0-9\\-_~;,]+)(?:\\s?(send|recv) ([a-zA-Z0-9\\-_~;,]+))?$"),names:["dir1","list1","dir2","list2"],format:function(s){return"simulcast:%s %s"+(s.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(s){return"ts-refclk:%s"+(s.clksrcExt!=null?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(s){var e="mediaclk:";return e+=s.id!=null?"id=%s %s":"%v%s",e+=s.mediaClockValue!=null?"=%s":"",e+=s.rateNumerator!=null?" rate=%s":"",e+=s.rateDenominator!=null?"/%s":"",e}},{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(Hs).forEach(function(s){var e=Hs[s];e.forEach(function(t){t.reg||(t.reg=/(.*)/),t.format||(t.format="%s")})})});var Ks=C(oe=>{"use strict";var Ae=function(s){return String(Number(s))===s?Number(s):s},Ta=function(s,e,t,r){if(r&&!t)e[r]=Ae(s[1]);else for(var i=0;i<t.length;i+=1)s[i+1]!=null&&(e[t[i]]=Ae(s[i+1]))},Ca=function(s,e,t){var r=s.name&&s.names;s.push&&!e[s.push]?e[s.push]=[]:r&&!e[s.name]&&(e[s.name]={});var i=s.push?{}:r?e[s.name]:e;Ta(t.match(s.reg),i,s.names,s.name),s.push&&e[s.push].push(i)},Gs=Ct(),Ea=RegExp.prototype.test.bind(/^([a-z])=(.*)/);oe.parse=function(s){var e={},t=[],r=e;return s.split(/(\r\n|\r|\n)/).filter(Ea).forEach(function(i){var n=i[0],a=i.slice(2);n==="m"&&(t.push({rtp:[],fmtp:[]}),r=t[t.length-1]);for(var o=0;o<(Gs[n]||[]).length;o+=1){var c=Gs[n][o];if(c.reg.test(a))return Ca(c,r,a)}}),e.media=t,e};var Qs=function(s,e){var t=e.split(/=(.+)/,2);return t.length===2?s[t[0]]=Ae(t[1]):t.length===1&&e.length>1&&(s[t[0]]=void 0),s};oe.parseParams=function(s){return s.split(/;\s?/).reduce(Qs,{})};oe.parseFmtpConfig=oe.parseParams;oe.parsePayloads=function(s){return s.toString().split(" ").map(Number)};oe.parseRemoteCandidates=function(s){for(var e=[],t=s.split(" ").map(Ae),r=0;r<t.length;r+=3)e.push({component:t[r],ip:t[r+1],port:t[r+2]});return e};oe.parseImageAttributes=function(s){return s.split(" ").map(function(e){return e.substring(1,e.length-1).split(",").reduce(Qs,{})})};oe.parseSimulcastStreamList=function(s){return s.split(";").map(function(e){return e.split(",").map(function(t){var r,i=!1;return t[0]!=="~"?r=Ae(t):(r=Ae(t.substring(1,t.length)),i=!0),{scid:r,paused:i}})})}});var Js=C((Vc,Ys)=>{"use strict";var Tr=Ct(),ka=/%[sdv%]/g,xa=function(s){var e=1,t=arguments,r=t.length;return s.replace(ka,function(i){if(e>=r)return i;var n=t[e];switch(e+=1,i){case"%%":return"%";case"%s":return String(n);case"%d":return Number(n);case"%v":return""}})},Qe=function(s,e,t){var r=e.format instanceof Function?e.format(e.push?t:t[e.name]):e.format,i=[s+"="+r];if(e.names)for(var n=0;n<e.names.length;n+=1){var a=e.names[n];e.name?i.push(t[e.name][a]):i.push(t[e.names[n]])}else i.push(t[e.name]);return xa.apply(null,i)},Pa=["v","o","s","i","u","e","p","c","b","t","r","z","a"],Da=["i","c","b","a"];Ys.exports=function(s,e){e=e||{},s.version==null&&(s.version=0),s.name==null&&(s.name=" "),s.media.forEach(function(n){n.payloads==null&&(n.payloads="")});var t=e.outerOrder||Pa,r=e.innerOrder||Da,i=[];return t.forEach(function(n){Tr[n].forEach(function(a){a.name in s&&s[a.name]!=null?i.push(Qe(n,a,s)):a.push in s&&s[a.push]!=null&&s[a.push].forEach(function(o){i.push(Qe(n,a,o))})})}),s.media.forEach(function(n){i.push(Qe("m",Tr.m[0],n)),r.forEach(function(a){Tr[a].forEach(function(o){o.name in n&&n[o.name]!=null?i.push(Qe(a,o,n)):o.push in n&&n[o.push]!=null&&n[o.push].forEach(function(c){i.push(Qe(a,o,c))})})})}),i.join(`\r
6
2
  `)+`\r
7
- `}});var ue=C(oe=>{"use strict";var Te=gi(),bo=vi(),yo=Ft();oe.grammar=yo;oe.write=bo;oe.parse=Te.parse;oe.parseParams=Te.parseParams;oe.parseFmtpConfig=Te.parseFmtpConfig;oe.parsePayloads=Te.parsePayloads;oe.parseRemoteCandidates=Te.parseRemoteCandidates;oe.parseImageAttributes=Te.parseImageAttributes;oe.parseSimulcastStreamList=Te.parseSimulcastStreamList});var Ee=C(zr=>{"use strict";Object.defineProperty(zr,"__esModule",{value:!0});zr.parse=Co;var So=new RegExp("^[LS]([1-9]\\d{0,1})T([1-9]\\d{0,1})");function Co(s){let e=So.exec(s??"");return e?{spatialLayers:Number(e[1]),temporalLayers:Number(e[2])}:{spatialLayers:1,temporalLayers:1}}});var yi=C(_e=>{"use strict";Object.defineProperty(_e,"__esModule",{value:!0});_e.OfferMediaSection=_e.AnswerMediaSection=_e.MediaSection=void 0;var Ro=ue(),wi=Se(),at=class{_mediaObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r}){if(this._mediaObject={type:"",port:0,protocol:"",payloads:"",rtp:[],fmtp:[]},e&&this.setIceParameters(e),t){this._mediaObject.candidates=[];for(let i of t){let n={foundation:i.foundation,component:1,ip:i.address??i.ip,port:i.port,priority:i.priority,transport:i.protocol,type:i.type};i.tcpType&&(n.tcptype=i.tcpType),this._mediaObject.candidates.push(n)}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 this._mediaObject.port===0}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}};_e.MediaSection=at;var $r=class extends at{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:i,plainRtpParameters:n,offerMediaObject:a,offerRtpParameters:o,answerRtpParameters:c,codecOptions:p}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r}),this._mediaObject.mid=String(a.mid),this._mediaObject.type=a.type,this._mediaObject.protocol=a.protocol,n?(this._mediaObject.connection={ip:n.ip,version:n.ipVersion},this._mediaObject.port=n.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},this._mediaObject.port=7),a.type){case"audio":case"video":{this._mediaObject.direction="recvonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[];for(let d of c.codecs){let l={payload:d.payloadType,codec:bi(d),rate:d.clockRate};d.channels>1&&(l.encoding=d.channels),this._mediaObject.rtp.push(l);let u=wi.clone(d.parameters)??{},f=wi.clone(d.rtcpFeedback)??[];if(p){let{opusStereo:h,opusFec:g,opusDtx:w,opusMaxPlaybackRate:E,opusMaxAverageBitrate:P,opusPtime:k,opusNack:x,videoGoogleStartBitrate:L,videoGoogleMaxBitrate:Pe,videoGoogleMinBitrate:tt}=p,me=o.codecs.find(we=>we.payloadType===d.payloadType);switch(d.mimeType.toLowerCase()){case"audio/opus":case"audio/multiopus":{h!==void 0&&(me.parameters["sprop-stereo"]=h?1:0,u.stereo=h?1:0),g!==void 0&&(me.parameters.useinbandfec=g?1:0,u.useinbandfec=g?1:0),w!==void 0&&(me.parameters.usedtx=w?1:0,u.usedtx=w?1:0),E!==void 0&&(u.maxplaybackrate=E),P!==void 0&&(u.maxaveragebitrate=P),k!==void 0&&(me.parameters.ptime=k,u.ptime=k),x||(me.rtcpFeedback=me.rtcpFeedback.filter(we=>we.type!=="nack"||we.parameter),f=f.filter(we=>we.type!=="nack"||we.parameter));break}case"video/vp8":case"video/vp9":case"video/h264":case"video/h265":case"video/av1":{L!==void 0&&(u["x-google-start-bitrate"]=L),Pe!==void 0&&(u["x-google-max-bitrate"]=Pe),tt!==void 0&&(u["x-google-min-bitrate"]=tt);break}}}let m={payload:d.payloadType,config:""};for(let h of Object.keys(u))m.config&&(m.config+=";"),m.config+=`${h}=${u[h]}`;m.config&&this._mediaObject.fmtp.push(m);for(let h of f)this._mediaObject.rtcpFb.push({payload:d.payloadType,type:h.type,subtype:h.parameter})}this._mediaObject.payloads=c.codecs.map(d=>d.payloadType).join(" "),this._mediaObject.ext=[];for(let d of c.headerExtensions)(a.ext??[]).some(u=>u.uri===d.uri)&&this._mediaObject.ext.push({uri:d.uri,value:d.id});if(a.extmapAllowMixed==="extmap-allow-mixed"&&(this._mediaObject.extmapAllowMixed="extmap-allow-mixed"),a.simulcast){this._mediaObject.simulcast={dir1:"recv",list1:a.simulcast.list1},this._mediaObject.rids=[];for(let d of a.rids??[])d.direction==="send"&&this._mediaObject.rids.push({id:d.id,direction:"recv"})}else if(a.simulcast_03){this._mediaObject.simulcast_03={value:a.simulcast_03.value.replace(/send/g,"recv")},this._mediaObject.rids=[];for(let d of a.rids??[])d.direction==="send"&&this._mediaObject.rids.push({id:d.id,direction:"recv"})}this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";break}case"application":{typeof a.sctpPort=="number"?(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});break}}}setDtlsRole(e){switch(e){case"client":{this._mediaObject.setup="active";break}case"server":{this._mediaObject.setup="passive";break}case"auto":{this._mediaObject.setup="actpass";break}}}resume(){this._mediaObject.direction="recvonly"}muxSimulcastStreams(e){if(!this._mediaObject.simulcast?.list1)return;let t={};for(let n of e)n.rid&&(t[n.rid]=n);let r=this._mediaObject.simulcast.list1,i=Ro.parseSimulcastStreamList(r);for(let n of i)for(let a of n)a.paused=!t[a.scid]?.active;this._mediaObject.simulcast.list1=i.map(n=>n.map(a=>`${a.paused?"~":""}${a.scid}`).join(",")).join(";")}};_e.AnswerMediaSection=$r;var Br=class extends at{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:i,plainRtpParameters:n,mid:a,kind:o,offerRtpParameters:c,streamId:p,trackId:d}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r}),this._mediaObject.mid=String(a),this._mediaObject.type=o,n?(this._mediaObject.connection={ip:n.ip,version:n.ipVersion},this._mediaObject.protocol="RTP/AVP",this._mediaObject.port=n.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",o){case"audio":case"video":{this._mediaObject.direction="sendonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[],this._mediaObject.msid=[{id:p,appdata:d}];for(let m of c.codecs){let h={payload:m.payloadType,codec:bi(m),rate:m.clockRate};m.channels>1&&(h.encoding=m.channels),this._mediaObject.rtp.push(h);let g={payload:m.payloadType,config:""};for(let w of Object.keys(m.parameters??{}))g.config&&(g.config+=";"),g.config+=`${w}=${m.parameters[w]}`;g.config&&this._mediaObject.fmtp.push(g);for(let w of m.rtcpFeedback)this._mediaObject.rtcpFb.push({payload:m.payloadType,type:w.type,subtype:w.parameter})}this._mediaObject.payloads=c.codecs.map(m=>m.payloadType).join(" "),this._mediaObject.ext=[];for(let m of c.headerExtensions)this._mediaObject.ext.push({uri:m.uri,value:m.id});this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";let l=c.encodings[0],u=l.ssrc,f=l.rtx?.ssrc;this._mediaObject.ssrcs=[],this._mediaObject.ssrcGroups=[],u&&c.rtcp.cname&&this._mediaObject.ssrcs.push({id:u,attribute:"cname",value:c.rtcp.cname}),f&&(c.rtcp.cname&&this._mediaObject.ssrcs.push({id:f,attribute:"cname",value:c.rtcp.cname}),u&&this._mediaObject.ssrcGroups.push({semantics:"FID",ssrcs:`${u} ${f}`}));break}case"application":{this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=i.port,this._mediaObject.maxMessageSize=i.maxMessageSize;break}}}setDtlsRole(e){this._mediaObject.setup="actpass"}resume(){this._mediaObject.direction="sendonly"}};_e.OfferMediaSection=Br;function bi(s){let t=new RegExp("^(audio|video)/(.+)","i").exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");return t[2]}});var Ve=C($t=>{"use strict";Object.defineProperty($t,"__esModule",{value:!0});$t.RemoteSdp=void 0;var To=ue(),Eo=$(),qt=yi(),xo=Hr(),ko=["av1","h264"],zt=new Eo.Logger("RemoteSdp"),Ur=class{_iceParameters;_iceCandidates;_dtlsParameters;_sctpParameters;_plainRtpParameters;_mediaSections=[];_midToIndex=new Map;_firstMid;_sdpObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:i,plainRtpParameters:n}){if(this._iceParameters=e,this._iceCandidates=t,this._dtlsParameters=r,this._sctpParameters=i,this._plainRtpParameters=n,this._sdpObject={version:0,origin:{address:"0.0.0.0",ipVer:4,netType:"IN",sessionId:"10000",sessionVersion:0,username:`media-client-v${xo.version}`},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 a=this._dtlsParameters.fingerprints.length;this._sdpObject.fingerprint={type:r.fingerprints[a-1].algorithm,hash:r.fingerprints[a-1].value},this._sdpObject.groups=[{type:"BUNDLE",mids:""}]}n&&(this._sdpObject.origin.address=n.ip,this._sdpObject.origin.ipVer=n.ipVersion)}updateIceParameters(e){zt.debug("updateIceParameters() [iceParameters:%o]",e),this._iceParameters=e,this._sdpObject.icelite=e.iceLite?"ice-lite":void 0;for(let t of this._mediaSections)t.setIceParameters(e)}updateDtlsRole(e){zt.debug("updateDtlsRole() [role:%s]",e),this._dtlsParameters.role=e;for(let t of this._mediaSections)t.setDtlsRole(e)}setSessionExtmapAllowMixed(){zt.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:n}){let a=new qt.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,offerMediaObject:e,offerRtpParameters:r,answerRtpParameters:i,codecOptions:n}),o=a.getObject();o.rtp.find(p=>ko.includes(p.codec.toLowerCase()))||(o.ext=o.ext?.filter(p=>p.uri!=="https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension")),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:n}){this.setSessionExtmapAllowMixed();let a=new qt.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,mid:e,kind:t,offerRtpParameters:r,streamId:i,trackId:n}),o=this._mediaSections.find(c=>c.closed&&c.getObject().type===t);o?this.replaceMediaSection(a,o.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?(zt.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 qt.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 qt.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++,To.write(this._sdpObject)}addMediaSection(e){this._firstMid||(this._firstMid=e.mid),this._mediaSections.push(e),this._midToIndex.set(e.mid,this._mediaSections.length-1),this._sdpObject.media.push(e.getObject()),this.regenerateBundleMids()}replaceMediaSection(e,t){if(typeof t=="string"){let r=this._midToIndex.get(t);if(r===void 0)throw new 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 r=this._midToIndex.get(e.mid);if(r===void 0)throw new Error(`no media section found with mid '${e.mid}'`);this._mediaSections[r]=e,this._sdpObject.media[r]=e.getObject()}}findMediaSection(e){let t=this._midToIndex.get(e);if(t===void 0)throw new 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(" "))}};$t.RemoteSdp=Ur});var Ge=C(xe=>{"use strict";Object.defineProperty(xe,"__esModule",{value:!0});xe.extractRtpCapabilities=Po;xe.extractDtlsParameters=Do;xe.getCname=Io;xe.applyCodecParameters=Lo;xe.addHeaderExtension=Mo;var Si=ue();function Po({sdpObject:s}){let e=new Map,t=new Map;for(let i of s.media){let n=i.type;switch(n){case"audio":case"video":break;default:continue}for(let a of i.rtp){let o={kind:n,mimeType:`${n}/${a.codec}`,preferredPayloadType:a.payload,clockRate:a.rate,channels:a.encoding,parameters:{},rtcpFeedback:[]};e.set(o.preferredPayloadType,o)}for(let a of i.fmtp??[]){let o=Si.parseParams(a.config),c=e.get(a.payload);c&&(o?.hasOwnProperty("profile-level-id")&&(o["profile-level-id"]=String(o["profile-level-id"])),c.parameters=o)}for(let a of i.rtcpFb??[]){let o={type:a.type,parameter:a.subtype};if(o.parameter||delete o.parameter,a.payload!=="*"){let c=e.get(Number(a.payload));if(!c)continue;c.rtcpFeedback.push(o)}else for(let c of e.values())c.kind===n&&!/.+\/rtx$/i.test(c.mimeType)&&c.rtcpFeedback.push(o)}for(let a of i.ext??[]){if(a["encrypt-uri"])continue;let o={kind:n,uri:a.uri,preferredId:a.value};t.set(o.preferredId,o)}}return{codecs:Array.from(e.values()),headerExtensions:Array.from(t.values())}}function Do({sdpObject:s}){let e=s.setup,t=s.fingerprint;if(!e||!t){let n=(s.media??[]).find(a=>a.port!==0);n&&(e=e??n.setup,t=t??n.fingerprint)}if(e){if(!t)throw new Error("no a=fingerprint found at SDP session or media level")}else throw new Error("no a=setup found at SDP session or media level");let r;switch(e){case"active":{r="client";break}case"passive":{r="server";break}case"actpass":{r="auto";break}}return{role:r,fingerprints:[{algorithm:t.type,value:t.hash}]}}function Io({offerMediaObject:s}){let e=(s.ssrcs??[]).find(t=>t.attribute==="cname");return e?e.value:""}function Lo({offerRtpParameters:s,answerMediaObject:e}){for(let t of s.codecs){let r=t.mimeType.toLowerCase();if(r!=="audio/opus"||!(e.rtp??[]).find(o=>o.payload===t.payloadType))continue;e.fmtp=e.fmtp??[];let n=e.fmtp.find(o=>o.payload===t.payloadType);n||(n={payload:t.payloadType,config:""},e.fmtp.push(n));let a=Si.parseParams(n.config);if(r==="audio/opus"){let o=t.parameters?.["sprop-stereo"];o!==void 0&&(a.stereo=Number(o)?1:0)}n.config="";for(let o of Object.keys(a))n.config&&(n.config+=";"),n.config+=`${o}=${a[o]}`}}function Mo({offerMediaObject:s,headerExtensionUri:e,headerExtensionId:t}){s.ext||(s.ext=[]),s.ext.push({uri:e,value:t})}});var Ke=C(Bt=>{"use strict";Object.defineProperty(Bt,"__esModule",{value:!0});Bt.getRtpEncodings=Oo;Bt.addLegacySimulcast=Ao;function Oo({offerMediaObject:s,codecs:e}){let t=new Set;for(let n of s.ssrcs??[]){let a=n.id;a&&t.add(a)}if(t.size===0)throw new Error("no a=ssrc lines found");let r=new Map;for(let n of s.ssrcGroups??[]){if(n.semantics!=="FID")continue;let a=n.ssrcs.split(/\s+/),o=Number(a[0]),c=Number(a[1]);t.has(o)&&(t.delete(o),t.delete(c),r.set(o,c))}for(let n of t)r.set(n,void 0);let i=[];for(let[n,a]of r){let o={ssrc:n};a&&e.length>1&&(o.rtx={ssrc:a}),i.push(o)}return i}function Ao({offerMediaObject:s,numStreams:e}){if(e<=1)throw new TypeError("numStreams must be greater than 1");let t=(s.ssrcs??[]).find(l=>l.attribute==="msid");if(!t)throw new Error("a=ssrc line with msid information not found");let[r,i]=t.value.split(" "),n=Number(t.id),a;(s.ssrcGroups??[]).some(l=>{if(l.semantics!=="FID")return!1;let u=l.ssrcs.split(/\s+/);return Number(u[0])===n?(a=Number(u[1]),!0):!1});let o=(s.ssrcs??[]).find(l=>l.attribute==="cname");if(!o)throw new Error("a=ssrc line with cname information not found");let c=o.value,p=[],d=[];for(let l=0;l<e;++l)p.push(n+l),a&&d.push(a+l);s.ssrcGroups=[],s.ssrcs=[],s.ssrcGroups.push({semantics:"SIM",ssrcs:p.join(" ")});for(let l of p)s.ssrcs.push({id:l,attribute:"cname",value:c}),s.ssrcs.push({id:l,attribute:"msid",value:`${r} ${i}`});for(let l=0;l<d.length;++l){let u=p[l],f=d[l];s.ssrcs.push({id:f,attribute:"cname",value:c}),s.ssrcs.push({id:f,attribute:"msid",value:`${r} ${i}`}),s.ssrcGroups.push({semantics:"FID",ssrcs:`${u} ${f}`})}}});var Qe=C(ot=>{"use strict";Object.defineProperty(ot,"__esModule",{value:!0});ot.addNackSupportForOpus=No;ot.addHeaderExtensionSupport=jo;ot.getMsidStreamIdAndTrackId=Fo;function No(s){for(let e of s.codecs??[])(e.mimeType.toLowerCase()==="audio/opus"||e.mimeType.toLowerCase()==="audio/multiopus")&&!e.rtcpFeedback?.some(t=>t.type==="nack"&&!t.parameter)&&(e.rtcpFeedback||(e.rtcpFeedback=[]),e.rtcpFeedback.push({type:"nack"}))}function jo(s,e){let t,r=s.headerExtensions?.find(n=>n.uri===e.uri);if(r){if(r.kind===e.kind)return;t=r.preferredId}if(s.headerExtensions||(s.headerExtensions=[]),t===void 0){t=1;let n=new Set(s.headerExtensions.map(a=>a.preferredId));for(;n.has(t);)++t}let i={kind:e.kind,uri:e.uri,preferredId:t,preferredEncrypt:!1,direction:e.direction};s.headerExtensions.push(i)}function Fo(s){if(!s||typeof s!="string")return{msidStreamId:void 0,msidTrackId:void 0};let[e,t]=s.trim().split(/\s+/);return e?{msidStreamId:e,msidTrackId:t}:{msidStreamId:void 0,msidTrackId:void 0}}});var Ei=C(Ut=>{"use strict";Object.defineProperty(Ut,"__esModule",{value:!0});Ut.Chrome111=void 0;var ce=ue(),qo=V(),zo=$(),ct=ie(),$o=Y(),Bo=Ee(),Uo=Ve(),dt=Ge(),Ci=Ke(),Wr=Qe(),R=new zo.Logger("Chrome111"),Ri="Chrome111",Ti={OS:65535,MIS:65535},Vr=class s extends qo.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Ri,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{R.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e,sendEncodings:[{scalabilityMode:"L3T3"}]});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let i=ce.parse(r.sdp);return s.getLocalRtpCapabilities(i)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(R.debug("getNativeSctpCapabilities()"),{numStreams:Ti})}}static getLocalRtpCapabilities(e,t=[]){let r=dt.extractRtpCapabilities({sdpObject:e});ct.validateAndNormalizeRtpCapabilities(r),Wr.addNackSupportForOpus(r);for(let i of t)Wr.addHeaderExtensionSupport(r,i);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),R.debug("constructor()"),this._direction=e,this._remoteSdp=new Uo.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=p,i.role&&i.role!=="auto"&&(this._forcedLocalDtlsRole=i.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(R.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Ri}close(){if(R.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}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(),R.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),R.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});R.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:n,codec:a,onRtpSender:o}){if(this.assertNotClosed(),this.assertSendDirection(),R.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1){let k=1;for(let x of r){let L=x.scalabilityMode?(0,Bo.parse)(x.scalabilityMode).temporalLayers:3;L>k&&(k=L)}r.forEach((x,L)=>{x.rid=`r${L}`,x.scalabilityMode=`L1T${k}`})}let c=this._remoteSdp.getNextMediaSectionIdx(),p=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});o&&o(p.sender);let d=await this._pc.createOffer(),l=ce.parse(d.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let u=[];u.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let f=s.getLocalRtpCapabilities(l,u),m=this._getSendExtendedRtpCapabilities(f),h=ct.getSendingRtpParameters(e.kind,m);h.codecs=ct.reduceCodecs(h.codecs,a);let g=ct.getSendingRemoteRtpParameters(e.kind,m);if(g.codecs=ct.reduceCodecs(g.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l}),n?.absCaptureTime){let k=l.media[c.idx];dt.addHeaderExtension({offerMediaObject:k,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(x=>x.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:ce.write(l)}}R.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let w=p.mid;h.mid=w,l=ce.parse(this._pc.localDescription.sdp);let E=l.media[c.idx];if(h.rtcp.cname=dt.getCname({offerMediaObject:E}),h.msid=`${t??this._sendStream.id} ${e.id}`,!r)h.encodings=Ci.getRtpEncodings({offerMediaObject:E,codecs:h.codecs});else if(r.length===1){let k=Ci.getRtpEncodings({offerMediaObject:E,codecs:h.codecs});Object.assign(k[0],r[0]),h.encodings=k}else h.encodings=r;this._remoteSdp.send({offerMediaObject:E,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:g,codecOptions:i});let P={type:"answer",sdp:this._remoteSdp.getSdp()};return R.debug("send() | calling pc.setRemoteDescription() [answer:%o]",P),await this._pc.setRemoteDescription(P),this._mapMidTransceiver.set(w,p),{localId:w,rtpParameters:h,rtpSender:p.sender}}async stopSending(e){if(this.assertSendDirection(),R.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let i=await this._pc.createOffer();R.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let n={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),R.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();R.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),R.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();R.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?R.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):R.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),R.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();R.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),R.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();R.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};R.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 new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};R.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Ti.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=ce.parse(n.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),R.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;R.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:f}=Wr.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??f??d.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(let o of e){let{trackId:c,onRtpReceiver:p}=o;if(p){let d=r.get(c),l=this._pc.getTransceivers().find(u=>u.mid===d);if(!l)throw new Error("transceiver not found");p(l.receiver)}}let n=await this._pc.createAnswer(),a=ce.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=r.get(c),l=a.media.find(u=>String(u.mid)===d);dt.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l})}n={type:"answer",sdp:ce.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),R.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,p=r.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(d)this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){R.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){R.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){R.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.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 new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};R.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(r,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),f=ce.parse(u.sdp),m=f.media.find(h=>h.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f}),u={type:"answer",sdp:ce.write(f)},R.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=ce.parse(this._pc.localDescription.sdp));let r=dt.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),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");break}}};assertNotClosed(){if(this._closed)throw new $o.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};Ut.Chrome111=Vr});var Pi=C(Ht=>{"use strict";Object.defineProperty(Ht,"__esModule",{value:!0});Ht.Chrome74=void 0;var J=ue(),Ho=$(),Wo=V(),pt=ie(),Vo=Y(),Go=Ee(),Ko=Ve(),lt=Ge(),Gr=Ke(),Kr=Qe(),y=new Ho.Logger("Chrome74"),xi="Chrome74",ki={OS:1024,MIS:1024},Qr=class s extends Wo.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:xi,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{y.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let i=J.parse(r.sdp);return s.getLocalRtpCapabilities(i)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(y.debug("getNativeSctpCapabilities()"),{numStreams:ki})}}static getLocalRtpCapabilities(e,t=[]){let r=lt.extractRtpCapabilities({sdpObject:e});pt.validateAndNormalizeRtpCapabilities(r),Kr.addNackSupportForOpus(r);for(let i of t)Kr.addHeaderExtensionSupport(r,i);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),y.debug("constructor()"),this._direction=e,this._remoteSdp=new Ko.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=p,i.role&&i.role!=="auto"&&(this._forcedLocalDtlsRole=i.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(y.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return xi}close(){if(y.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}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(),y.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),y.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});y.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();y.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:n,codec:a}){this.assertNotClosed(),this.assertSendDirection(),y.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((x,L)=>{x.rid=`r${L}`});let o=this._remoteSdp.getNextMediaSectionIdx(),c=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r}),p=await this._pc.createOffer(),d=J.parse(p.sdp);d.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let l=[];l.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let u=s.getLocalRtpCapabilities(d,l),f=this._getSendExtendedRtpCapabilities(u),m=pt.getSendingRtpParameters(e.kind,f);m.codecs=pt.reduceCodecs(m.codecs,a);let h=pt.getSendingRemoteRtpParameters(e.kind,f);h.codecs=pt.reduceCodecs(h.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:d});let g=!1,w=(0,Go.parse)((r??[{}])[0].scalabilityMode),E;r?.length===1&&w.spatialLayers>1&&m.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(y.debug("send() | enabling legacy simulcast for VP9 SVC"),g=!0,d=J.parse(p.sdp),E=d.media[o.idx],Gr.addLegacySimulcast({offerMediaObject:E,numStreams:w.spatialLayers}),p={type:"offer",sdp:J.write(d)}),y.debug("send() | calling pc.setLocalDescription() [offer:%o]",p),n?.absCaptureTime&&(E=d.media[o.idx],lt.addHeaderExtension({offerMediaObject:E,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:h.headerExtensions.find(x=>x.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),p={type:"offer",sdp:J.write(d)}),await this._pc.setLocalDescription(p);let P=c.mid;if(m.mid=P,d=J.parse(this._pc.localDescription.sdp),E=d.media[o.idx],m.rtcp.cname=lt.getCname({offerMediaObject:E}),m.msid=`${t??this._sendStream.id} ${e.id}`,!r)m.encodings=Gr.getRtpEncodings({offerMediaObject:E,codecs:m.codecs});else if(r.length===1){let x=Gr.getRtpEncodings({offerMediaObject:E,codecs:m.codecs});Object.assign(x[0],r[0]),g&&(x=[x[0]]),m.encodings=x}else m.encodings=r;if(m.encodings.length>1&&(m.codecs[0].mimeType.toLowerCase()==="video/vp8"||m.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let x of m.encodings)x.scalabilityMode?x.scalabilityMode=`L1T${w.temporalLayers}`:x.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:E,reuseMid:o.reuseMid,offerRtpParameters:m,answerRtpParameters:h,codecOptions:i});let k={type:"answer",sdp:this._remoteSdp.getSdp()};return y.debug("send() | calling pc.setRemoteDescription() [answer:%o]",k),await this._pc.setRemoteDescription(k),this._mapMidTransceiver.set(P,c),{localId:P,rtpParameters:m,rtpSender:c.sender}}async stopSending(e){if(this.assertSendDirection(),y.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let i=await this._pc.createOffer();y.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let n={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),y.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();y.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),y.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();y.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?y.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):y.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),y.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();y.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),y.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();y.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};y.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 new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};y.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%ki.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=J.parse(n.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),y.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;y.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:f}=Kr.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??f??d.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);let n=await this._pc.createAnswer(),a=J.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=r.get(c),l=a.media.find(u=>String(u.mid)===d);lt.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l})}n={type:"answer",sdp:J.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),y.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,p=r.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(d)this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){y.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();y.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){y.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();y.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){y.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();y.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 new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};y.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(r,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),f=J.parse(u.sdp),m=f.media.find(h=>h.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f}),u={type:"answer",sdp:J.write(f)},y.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=J.parse(this._pc.localDescription.sdp));let r=lt.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),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");break}}};assertNotClosed(){if(this._closed)throw new Vo.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};Ht.Chrome74=Qr});var Oi=C(Vt=>{"use strict";Object.defineProperty(Vt,"__esModule",{value:!0});Vt.Firefox120=void 0;var he=ue(),Qo=V(),Yo=$(),Di=Y(),ut=ie(),Jo=Ee(),Xo=Ve(),Wt=Ge(),Ii=Ke(),Zo=Qe(),T=new Yo.Logger("Firefox120"),Li="Firefox120",Mi={OS:16,MIS:2048},Yr=class s extends Qo.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Li,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{T.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"}),r=document.createElement("canvas");r.getContext("2d");let n=r.captureStream().getVideoTracks()[0];try{t.addTransceiver("audio",{direction:e}),t.addTransceiver(n,{direction:e,sendEncodings:[{rid:"r0",maxBitrate:1e5},{rid:"r1",maxBitrate:5e5}]});let a=await t.createOffer();try{r.remove()}catch{}try{n.stop()}catch{}try{t.close()}catch{}t=void 0;let o=he.parse(a.sdp);return s.getLocalRtpCapabilities(o)}catch(a){try{r.remove()}catch{}try{n.stop()}catch{}try{t?.close()}catch{}throw t=void 0,a}},getNativeSctpCapabilities:async()=>(T.debug("getNativeSctpCapabilities()"),{numStreams:Mi})}}static getLocalRtpCapabilities(e){let t=Wt.extractRtpCapabilities({sdpObject:e});return ut.validateAndNormalizeRtpCapabilities(t),t}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),T.debug("constructor()"),this._direction=e,this._remoteSdp=new Xo.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=p,this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(T.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Li}close(){if(T.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}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 Di.UnsupportedError("not supported")}async restartIce(e){if(this.assertNotClosed(),T.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});T.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();T.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,codec:n,onRtpSender:a}){this.assertNotClosed(),this.assertSendDirection(),T.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((E,P)=>{E.rid=`r${P}`});let o=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});a&&a(o.sender);let c=await this._pc.createOffer(),p=he.parse(c.sdp);p.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let d=s.getLocalRtpCapabilities(p),l=this._getSendExtendedRtpCapabilities(d),u=ut.getSendingRtpParameters(e.kind,l);u.codecs=ut.reduceCodecs(u.codecs,n);let f=ut.getSendingRemoteRtpParameters(e.kind,l);f.codecs=ut.reduceCodecs(f.codecs,n),this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:p});let m=(0,Jo.parse)((r??[{}])[0].scalabilityMode);T.debug("send() | calling pc.setLocalDescription() [offer:%o]",c),await this._pc.setLocalDescription(c);let h=o.mid;u.mid=h,p=he.parse(this._pc.localDescription.sdp);let g=p.media[p.media.length-1];if(u.rtcp.cname=Wt.getCname({offerMediaObject:g}),u.msid=`${t??this._sendStream.id} ${e.id}`,!r)u.encodings=Ii.getRtpEncodings({offerMediaObject:g,codecs:u.codecs});else if(r.length===1){let E=Ii.getRtpEncodings({offerMediaObject:g,codecs:u.codecs});Object.assign(E[0],r[0]),u.encodings=E}else u.encodings=r;if(u.encodings.length>1&&(u.codecs[0].mimeType.toLowerCase()==="video/vp8"||u.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let E of u.encodings)E.scalabilityMode?E.scalabilityMode=`L1T${m.temporalLayers}`:E.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:g,offerRtpParameters:u,answerRtpParameters:f,codecOptions:i});let w={type:"answer",sdp:this._remoteSdp.getSdp()};return T.debug("send() | calling pc.setRemoteDescription() [answer:%o]",w),await this._pc.setRemoteDescription(w),this._mapMidTransceiver.set(h,o),{localId:h,rtpParameters:u,rtpSender:o.sender}}async stopSending(e){if(this.assertSendDirection(),T.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new 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();T.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),T.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();T.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),T.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let r=await this._pc.createOffer();T.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?T.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):T.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),T.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated transceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();T.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),T.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();T.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};T.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 new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};T.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Mi.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=he.parse(n.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:a}),T.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;T.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:f}=Zo.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??f??d.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(let o of e){let{trackId:c,onRtpReceiver:p}=o;if(p){let d=r.get(c),l=this._pc.getTransceivers().find(u=>u.mid===d);if(!l)throw new Error("transceiver not found");p(l.receiver)}}let n=await this._pc.createAnswer(),a=he.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=r.get(c),l=a.media.find(u=>String(u.mid)===d);Wt.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l}),n={type:"answer",sdp:he.write(a)}}this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:a}),T.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,p=r.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(!d)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){T.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();T.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){T.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();T.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){T.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();T.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 new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};T.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(r,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),f=he.parse(u.sdp),m=f.media.find(h=>h.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:f}),u={type:"answer",sdp:he.write(f)},T.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=he.parse(this._pc.localDescription.sdp));let r=Wt.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),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");break}}};assertNotClosed(){if(this._closed)throw new Di.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};Vt.Firefox120=Yr});var Fi=C(Gt=>{"use strict";Object.defineProperty(Gt,"__esModule",{value:!0});Gt.Safari12=void 0;var X=ue(),ec=V(),tc=$(),ht=ie(),rc=Y(),sc=Ee(),ic=Ve(),ft=Ge(),Ai=Ke(),Jr=Qe(),S=new tc.Logger("Safari12"),Ni="Safari12",ji={OS:65535,MIS:65535},Xr=class s extends ec.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Ni,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{S.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let i=X.parse(r.sdp);return s.getLocalRtpCapabilities(i)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(S.debug("getNativeSctpCapabilities()"),{numStreams:ji})}}static getLocalRtpCapabilities(e,t=[]){let r=ft.extractRtpCapabilities({sdpObject:e});ht.validateAndNormalizeRtpCapabilities(r),Jr.addNackSupportForOpus(r);for(let i of t)Jr.addHeaderExtensionSupport(r,i);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),S.debug("constructor()"),this._direction=e,this._remoteSdp=new ic.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=p,i.role&&i.role!=="auto"&&(this._forcedLocalDtlsRole=i.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)}),this._pc.addEventListener("icecandidateerror",d=>{this.emit("@icecandidateerror",d)}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(S.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Ni}close(){if(S.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}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(),S.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),S.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});S.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();S.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:n,codec:a,onRtpSender:o}){this.assertNotClosed(),this.assertSendDirection(),S.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t);let c=this._remoteSdp.getNextMediaSectionIdx(),p=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream]});o&&o(p.sender);let d=await this._pc.createOffer(),l=X.parse(d.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let u=[];u.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let f=s.getLocalRtpCapabilities(l,u),m=this._getSendExtendedRtpCapabilities(f),h=ht.getSendingRtpParameters(e.kind,m);h.codecs=ht.reduceCodecs(h.codecs,a);let g=ht.getSendingRemoteRtpParameters(e.kind,m);g.codecs=ht.reduceCodecs(g.codecs,a);let w;this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l});let E=(0,sc.parse)((r??[{}])[0].scalabilityMode);r&&r.length>1&&(S.debug("send() | enabling legacy simulcast"),l=X.parse(d.sdp),w=l.media[c.idx],Ai.addLegacySimulcast({offerMediaObject:w,numStreams:r.length}),d={type:"offer",sdp:X.write(l)}),n?.absCaptureTime&&(w=l.media[c.idx],ft.addHeaderExtension({offerMediaObject:w,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(x=>x.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:X.write(l)}),S.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let P=p.mid;if(h.mid=P,l=X.parse(this._pc.localDescription.sdp),w=l.media[c.idx],h.rtcp.cname=ft.getCname({offerMediaObject:w}),h.msid=`${t??this._sendStream.id} ${e.id}`,h.encodings=Ai.getRtpEncodings({offerMediaObject:w,codecs:h.codecs}),r)for(let x=0;x<h.encodings.length;++x)r[x]&&Object.assign(h.encodings[x],r[x]);if(h.encodings.length>1&&(h.codecs[0].mimeType.toLowerCase()==="video/vp8"||h.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let x of h.encodings)x.scalabilityMode?x.scalabilityMode=`L1T${E.temporalLayers}`:x.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:w,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:g,codecOptions:i});let k={type:"answer",sdp:this._remoteSdp.getSdp()};return S.debug("send() | calling pc.setRemoteDescription() [answer:%o]",k),await this._pc.setRemoteDescription(k),this._mapMidTransceiver.set(P,p),{localId:P,rtpParameters:h,rtpSender:p.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;S.debug("stopSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let i=await this._pc.createOffer();S.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let n={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),S.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();S.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),S.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let r=await this._pc.createOffer();S.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?S.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):S.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),S.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();S.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),S.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();S.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};S.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 new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};S.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%ji.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=X.parse(n.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),S.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;S.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:f}=Jr.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??f??d.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(let o of e){let{trackId:c,onRtpReceiver:p}=o;if(p){let d=r.get(c),l=this._pc.getTransceivers().find(u=>u.mid===d);if(!l)throw new Error("transceiver not found");p(l.receiver)}}let n=await this._pc.createAnswer(),a=X.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=r.get(c),l=a.media.find(u=>String(u.mid)===d);ft.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l})}n={type:"answer",sdp:X.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),S.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,p=r.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(!d)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){S.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();S.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){S.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();S.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){S.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();S.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 new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};S.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(r,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),f=X.parse(u.sdp),m=f.media.find(h=>h.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f}),u={type:"answer",sdp:X.write(f)},S.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=X.parse(this._pc.localDescription.sdp));let r=ft.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),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");break}}};assertNotClosed(){if(this._closed)throw new rc.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};Gt.Safari12=Xr});var $i=C(Kt=>{"use strict";Object.defineProperty(Kt,"__esModule",{value:!0});Kt.ReactNative106=void 0;var Z=ue(),nc=V(),ac=$(),mt=ie(),oc=Y(),cc=Ee(),dc=Ve(),gt=Ge(),Zr=Ke(),es=Qe(),b=new ac.Logger("ReactNative106"),qi="ReactNative106",zi={OS:65535,MIS:65535},ts=class s extends nc.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:qi,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{b.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let i=Z.parse(r.sdp);return s.getLocalRtpCapabilities(i)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(b.debug("getNativeSctpCapabilities()"),{numStreams:zi})}}static getLocalRtpCapabilities(e,t=[]){let r=gt.extractRtpCapabilities({sdpObject:e});mt.validateAndNormalizeRtpCapabilities(r),es.addNackSupportForOpus(r);for(let i of t)es.addHeaderExtensionSupport(r,i);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),b.debug("constructor()"),this._direction=e,this._remoteSdp=new dc.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=p,i.role&&i.role!=="auto"&&(this._forcedLocalDtlsRole=i.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(b.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return qi}close(){if(b.debug("close()"),!this._closed){this._closed=!0,this._sendStream.release(!1);try{this._pc.close()}catch{}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(),b.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),b.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});b.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:n,codec:a,onRtpSender:o}){this.assertNotClosed(),this.assertSendDirection(),b.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((L,Pe)=>{L.rid=`r${Pe}`});let c=this._remoteSdp.getNextMediaSectionIdx(),p=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});o&&o(p.sender);let d=await this._pc.createOffer(),l=Z.parse(d.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let u=[];u.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let f=s.getLocalRtpCapabilities(l,u),m=this._getSendExtendedRtpCapabilities(f),h=mt.getSendingRtpParameters(e.kind,m);h.codecs=mt.reduceCodecs(h.codecs,a);let g=mt.getSendingRemoteRtpParameters(e.kind,m);g.codecs=mt.reduceCodecs(g.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l});let w=!1,E=(0,cc.parse)((r??[{}])[0].scalabilityMode),P;r?.length===1&&E.spatialLayers>1&&h.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(b.debug("send() | enabling legacy simulcast for VP9 SVC"),w=!0,l=Z.parse(d.sdp),P=l.media[c.idx],Zr.addLegacySimulcast({offerMediaObject:P,numStreams:E.spatialLayers}),d={type:"offer",sdp:Z.write(l)}),n?.absCaptureTime&&(P=l.media[c.idx],gt.addHeaderExtension({offerMediaObject:P,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(L=>L.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:Z.write(l)}),b.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let k=p.mid??void 0;if(k||b.warn("send() | missing transceiver.mid (bug in react-native-webrtc, using a workaround"),h.mid=k,l=Z.parse(this._pc.localDescription.sdp),P=l.media[c.idx],h.rtcp.cname=gt.getCname({offerMediaObject:P}),h.msid=`${t??this._sendStream.id} ${e.id}`,!r)h.encodings=Zr.getRtpEncodings({offerMediaObject:P,codecs:h.codecs});else if(r.length===1){let L=Zr.getRtpEncodings({offerMediaObject:P,codecs:h.codecs});Object.assign(L[0],r[0]),w&&(L=[L[0]]),h.encodings=L}else h.encodings=r;if(h.encodings.length>1&&(h.codecs[0].mimeType.toLowerCase()==="video/vp8"||h.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let L of h.encodings)L.scalabilityMode?L.scalabilityMode=`L1T${E.temporalLayers}`:L.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:P,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:g,codecOptions:i});let x={type:"answer",sdp:this._remoteSdp.getSdp()};return b.debug("send() | calling pc.setRemoteDescription() [answer:%o]",x),await this._pc.setRemoteDescription(x),k||(k=p.mid,h.mid=k),this._mapMidTransceiver.set(k,p),{localId:k,rtpParameters:h,rtpSender:p.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;b.debug("stopSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let i=await this._pc.createOffer();b.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let n={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),b.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();b.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),b.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();b.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?b.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):b.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),b.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();b.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),b.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();b.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};b.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 new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};b.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%zi.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=Z.parse(n.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),b.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;b.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:f}=es.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??f??d.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(let o of e){let{trackId:c,onRtpReceiver:p}=o;if(p){let d=r.get(c),l=this._pc.getTransceivers().find(u=>u.mid===d);if(!l)throw new Error("transceiver not found");p(l.receiver)}}let n=await this._pc.createAnswer(),a=Z.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=r.get(c),l=a.media.find(u=>String(u.mid)===d);gt.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l})}n={type:"answer",sdp:Z.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),b.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,p=r.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(d)this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){b.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){b.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){b.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.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 new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};b.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(r,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),f=Z.parse(u.sdp),m=f.media.find(h=>h.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f}),u={type:"answer",sdp:Z.write(f)},b.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=Z.parse(this._pc.localDescription.sdp));let r=gt.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),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");break}}};assertNotClosed(){if(this._closed)throw new oc.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};Kt.ReactNative106=ts});var Wi=C(Ye=>{"use strict";Object.defineProperty(Ye,"__esModule",{value:!0});Ye.Device=void 0;Ye.detectDevice=Bi;Ye.detectDeviceAsync=Ui;var pc=$(),lc=V(),ve=Y(),Qt=Se(),G=ie(),uc=li(),hc=Ei(),fc=Pi(),mc=Oi(),gc=Fi(),_c=$i(),v=new pc.Logger("Device");function Bi(s,e){return v.debug("detectDevice()"),!s&&typeof navigator=="object"&&(s=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),Hi(s,e)}async function Ui(s,e){return v.debug("detectDeviceAsync()"),!s&&typeof navigator=="object"&&(s=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),Hi(s,e)}var rs=class s{_handlerFactory;_handlerName;_loaded=!1;_getSendExtendedRtpCapabilities;_recvRtpCapabilities;_sendRtpCapabilities;_canProduceByKind={audio:!1,video:!1};_sctpCapabilities;_observer=new lc.EnhancedEventEmitter;static async factory({handlerName:e,handlerFactory:t}={}){if(v.debug("factory()"),e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(!e&&!t&&(e=await Ui(),!e))throw new ve.UnsupportedError("device not supported");return new s({handlerName:e,handlerFactory:t})}constructor({handlerName:e,handlerFactory:t}={}){if(v.debug("constructor()"),e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(t)this._handlerFactory=t;else{if(e)v.debug("constructor() | handler given: %s",e);else if(e=Bi(),e)v.debug("constructor() | detected handler: %s",e);else throw new ve.UnsupportedError("device not supported");switch(e){case"Chrome111":{this._handlerFactory=hc.Chrome111.createFactory();break}case"Chrome74":{this._handlerFactory=fc.Chrome74.createFactory();break}case"Firefox120":{this._handlerFactory=mc.Firefox120.createFactory();break}case"Safari12":{this._handlerFactory=gc.Safari12.createFactory();break}case"ReactNative106":{this._handlerFactory=_c.ReactNative106.createFactory();break}default:throw new TypeError(`unknown handlerName "${e}"`)}}this._handlerName=this._handlerFactory.name}get handlerName(){return this._handlerName}get loaded(){return this._loaded}get rtpCapabilities(){return this.recvRtpCapabilities}get recvRtpCapabilities(){if(!this._loaded)throw new ve.InvalidStateError("not loaded");return this._recvRtpCapabilities}get sendRtpCapabilities(){if(!this._loaded)throw new ve.InvalidStateError("not loaded");return this._sendRtpCapabilities}get sctpCapabilities(){if(!this._loaded)throw new ve.InvalidStateError("not loaded");return this._sctpCapabilities}get observer(){return this._observer}async load({routerRtpCapabilities:e,preferLocalCodecsOrder:t=!1}){if(v.debug("load() [routerRtpCapabilities:%o]",e),this._loaded)throw new ve.InvalidStateError("already loaded");let r=Qt.clone(e);G.validateAndNormalizeRtpCapabilities(r);let{getNativeRtpCapabilities:i,getNativeSctpCapabilities:n}=this._handlerFactory,a=Qt.clone(await i({direction:"recvonly"}));v.debug("load() | got native receiving RTP capabilities:%o",a),G.validateAndNormalizeRtpCapabilities(a);let o=Qt.clone(await i({direction:"sendonly"}));v.debug("load() | got native sending RTP capabilities:%o",o),G.validateAndNormalizeRtpCapabilities(o),this._getSendExtendedRtpCapabilities=d=>Qt.clone(G.getExtendedRtpCapabilities(d,r,t));let c=G.getExtendedRtpCapabilities(a,r,!1);this._recvRtpCapabilities=G.getRecvRtpCapabilities(c),v.debug("load() | got receiving RTP capabilities:%o",this._recvRtpCapabilities),G.validateAndNormalizeRtpCapabilities(this._recvRtpCapabilities);let p=G.getExtendedRtpCapabilities(o,r,t);this._sendRtpCapabilities=G.getSendRtpCapabilities(p),v.debug("load() | got sending RTP capabilities:%o",this._sendRtpCapabilities),G.validateAndNormalizeRtpCapabilities(this._sendRtpCapabilities),this._canProduceByKind.audio=G.canSend("audio",this._sendRtpCapabilities),this._canProduceByKind.video=G.canSend("video",this._sendRtpCapabilities),this._sctpCapabilities=await n(),G.validateSctpCapabilities(this._sctpCapabilities),v.debug("load() | got native SCTP capabilities:%o",this._sctpCapabilities),v.debug("load() succeeded"),this._loaded=!0}canProduce(e){if(this._loaded){if(e!=="audio"&&e!=="video")throw new TypeError(`invalid kind "${e}"`)}else throw new ve.InvalidStateError("not loaded");return this._canProduceByKind[e]}createSendTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:p}){return v.debug("createSendTransport()"),this.createTransport({direction:"send",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:p})}createRecvTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:p}){return v.debug("createRecvTransport()"),this.createTransport({direction:"recv",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:p})}createTransport({direction:e,id:t,iceParameters:r,iceCandidates:i,dtlsParameters:n,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:p,appData:d}){if(this._loaded){if(typeof t!="string")throw new TypeError("missing id");if(typeof r!="object")throw new TypeError("missing iceParameters");if(Array.isArray(i)){if(typeof n!="object")throw new TypeError("missing dtlsParameters");if(a&&typeof a!="object")throw new TypeError("wrong sctpParameters");if(d&&typeof d!="object")throw new TypeError("if given, appData must be an object")}else throw new TypeError("missing iceCandidates")}else throw new ve.InvalidStateError("not loaded");let l=new uc.Transport({direction:e,id:t,iceParameters:r,iceCandidates:i,dtlsParameters:n,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:p,appData:d,handlerFactory:this._handlerFactory,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities,recvRtpCapabilities:this._recvRtpCapabilities,canProduceByKind:this._canProduceByKind});return this._observer.safeEmit("newtransport",l),l}};Ye.Device=rs;function Hi(s,e){v.debug('detectDeviceImpl() [userAgent:"%s", userAgentData:%o]',s,e);let t=vc(s,e);if(t){if(t>=111)return v.debug("detectDeviceImpl() | using Chrome111 handler"),"Chrome111";if(t>=74)return v.debug("detectDeviceImpl() | using Chrome74 handler"),"Chrome74";v.warn("detectDeviceImpl() | unsupported Chromium based browser/version");return}let r=wc(s);if(r){if(r>=120)return v.debug("detectDeviceImpl() | using Firefox120 handler"),"Firefox120";v.warn("detectDeviceImpl() | unsupported Firefox browser/version");return}let i=bc(s);if(i){if(i>=605)return v.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";v.warn("detectDeviceImpl() | unsupported desktop Safari browser/version");return}let n=yc(s);if(n){if(n>=605)return v.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";v.warn("detectDeviceImpl() | unsupported iOS Safari based browser/version");return}if(_t()){if(typeof RTCPeerConnection<"u"&&typeof RTCRtpTransceiver<"u")return v.debug("detectDeviceImpl() | using ReactNative106 handler"),"ReactNative106";v.warn("detectDeviceImpl() | unsupported react-native-webrtc version without RTCPeerConnection or RTCRtpTransceiver, forgot to call registerGlobals() on it?");return}v.warn('detectDeviceImpl() | device not supported [userAgent:"%s", userAgentData:%o]',s,e)}function vc(s,e){if(v.debug("getChromiumMajorVersion()"),Yt(s,e)){v.debug("getChromiumMajorVersion() | this is iOS => undefined");return}if(_t()){v.debug("getChromiumMajorVersion() | this is React-Native => undefined");return}if(e){let i=(Array.isArray(e.brands)?e.brands:[]).find(n=>n.brand==="Chromium");if(i){let n=Number(i.version);return v.debug(`getChromiumMajorVersion() | Chromium major version based on NavigatorUAData => ${n}`),n}}let t=s?.match(/\b(?:Chrome|Chromium)\/(\w+)/i);if(t?.[1]){let r=Number(t[1]);return v.debug(`getChromiumMajorVersion() | Chromium major version based on User-Agent => ${r}`),r}v.debug("getChromiumMajorVersion() | this is not Chromium => undefined")}function wc(s){if(v.debug("getFirefoxMajorVersion()"),Yt(s)){v.debug("getFirefoxMajorVersion() | this is iOS => undefined");return}if(_t()){v.debug("getFirefoxMajorVersion() | this is React-Native => undefined");return}let e=s?.match(/\bFirefox\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return v.debug(`getFirefoxMajorVersion() | Firefox major version based on User-Agent => ${t}`),t}v.debug("getFirefoxMajorVersion() | this is not Firefox => undefined")}function bc(s){if(v.debug("getMacOSWebKitMajorVersion()"),Yt(s)){v.debug("getMacOSWebKitMajorVersion() | this is iOS => undefined");return}if(_t()){v.debug("getMacOSWebKitMajorVersion() | this is React-Native => undefined");return}if(!(s&&/\bSafari\b/i.test(s)&&!/\bChrome\b/i.test(s)&&!/\bChromium\b/i.test(s)&&!/\bFirefox\b/i.test(s))){v.debug("getMacOSWebKitMajorVersion() | this is not Safari => undefined");return}let t=s.match(/AppleWebKit\/(\w+)/i);if(t?.[1]){let r=Number(t[1]);return v.debug(`getMacOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${r}`),r}v.debug("getMacOSWebKitMajorVersion() | this is not WebKit => undefined")}function yc(s){if(v.debug("getIOSWebKitMajorVersion()"),!Yt(s)){v.debug("getIOSWebKitMajorVersion() | this is not iOS => undefined");return}if(_t()){v.debug("getIOSWebKitMajorVersion() | this is React-Native => undefined");return}let e=s?.match(/AppleWebKit\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return v.debug(`getIOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${t}`),t}v.debug("getIOSWebKitMajorVersion() | this is not WebKit => undefined")}function Yt(s,e){return v.debug("isIOS()"),e?.platform==="iOS"?(v.debug("isIOS() | this is iOS based on NavigatorUAData.platform => true"),!0):e?.platform?(v.debug("isIOS() | this is not iOS based on NavigatorUAData.platform => false"),!1):s&&/iPad|iPhone|iPod/.test(s)?(v.debug("isIOS() | this is iOS based on User-Agent => true"),!0):typeof navigator=="object"&&navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1?(v.debug("isIOS() | this is iPadOS 13+ based on User-Agent => true"),!0):(v.debug("isIOS() | this is not iOS => false"),!1)}function _t(){return v.debug("isReactNative()"),typeof navigator=="object"&&navigator.product==="ReactNative"?(v.debug("isReactNative() | this is React-Native based on navigator.product"),!0):(v.debug("isReactNative() | this is not React-Native => false"),!1)}});var Gi=C(Vi=>{"use strict";var ke=256,Xt=[],Jt;for(;ke--;)Xt[ke]=(ke+256).toString(16).substring(1);function Sc(){var s=0,e,t="";if(!Jt||ke+16>256){for(Jt=Array(s=256);s--;)Jt[s]=256*Math.random()|0;s=ke=0}for(;s<16;s++)e=Jt[ke+s],s==6?t+=Xt[e&15|64]:s==8?t+=Xt[e&63|128]:t+=Xt[e],s&1&&s>1&&s<11&&(t+="-");return ke++,t}Vi.v4=Sc});var Ki=C(Zt=>{"use strict";Object.defineProperty(Zt,"__esModule",{value:!0});Zt.FakeEventTarget=void 0;var ss=class{listeners={};addEventListener(e,t,r){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof r=="object"&&r.once===!0}))}removeEventListener(e,t,r){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(i=>i.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new 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(i){setTimeout(()=>{throw i},0)}r.once&&this.removeEventListener(e.type,r.callback)}return!e.defaultPrevented}};Zt.FakeEventTarget=ss});var Qi=C(er=>{"use strict";Object.defineProperty(er,"__esModule",{value:!0});er.FakeEvent=void 0;var is=class{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){}};er.FakeEvent=is});var Yi=C(ns=>{"use strict";Object.defineProperty(ns,"__esModule",{value:!0});ns.clone=Cc;function Cc(s){if(s!==void 0)return Number.isNaN(s)?NaN:typeof structuredClone=="function"?structuredClone(s):JSON.parse(JSON.stringify(s))}});var Xi=C(rr=>{"use strict";Object.defineProperty(rr,"__esModule",{value:!0});rr.FakeMediaStreamTrack=void 0;var Ji=Gi(),Rc=Ki(),Je=Qi(),tr=Yi(),as=class s extends Rc.FakeEventTarget{#m;#l;#u;#e;#r;#t;#s;#h;#i;#f;#n;#a=null;#o=null;#c=null;#d=null;#p=null;constructor({kind:e,id:t,label:r,contentHint:i,enabled:n,muted:a,readyState:o,capabilities:c,constraints:p,settings:d,data:l}){super(),this.#m=t??(0,Ji.v4)(),this.#l=e,this.#u=r??"",this.#s=i??"",this.#r=n??!0,this.#t=a??!1,this.#e=o??"live",this.#h=c??{},this.#i=p??{},this.#f=d??{},this.#n=l??{}}get id(){return this.#m}get kind(){return this.#l}get label(){return this.#u}get contentHint(){return this.#s}set contentHint(e){this.#s=e}get enabled(){return this.#r}set enabled(e){let t=this.#r!==e;this.#r=e,t&&this.dispatchEvent(new Je.FakeEvent("enabledchange"))}get muted(){return this.#t}get readyState(){return this.#e}get data(){return this.#n}set data(e){this.#n=e}get onmute(){return this.#a}set onmute(e){this.#a&&this.removeEventListener("mute",this.#a),this.#a=e,e&&this.addEventListener("mute",e)}get onunmute(){return this.#o}set onunmute(e){this.#o&&this.removeEventListener("unmute",this.#o),this.#o=e,e&&this.addEventListener("unmute",e)}get onended(){return this.#c}set onended(e){this.#c&&this.removeEventListener("ended",this.#c),this.#c=e,e&&this.addEventListener("ended",e)}get onenabledchange(){return this.#d}set onenabledchange(e){this.#d&&this.removeEventListener("enabledchange",this.#d),this.#d=e,e&&this.addEventListener("enabledchange",e)}get onstopped(){return this.#p}set onstopped(e){this.#p&&this.removeEventListener("stopped",this.#p),this.#p=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(){this.#e!=="ended"&&(this.#e="ended",this.dispatchEvent(new Je.FakeEvent("stopped")))}clone({id:e,data:t}={}){return new s({id:e??(0,Ji.v4)(),kind:this.#l,label:this.#u,contentHint:this.#s,enabled:this.#r,muted:this.#t,readyState:this.#e,capabilities:(0,tr.clone)(this.#h),constraints:(0,tr.clone)(this.#i),settings:(0,tr.clone)(this.#f),data:t??(0,tr.clone)(this.#n)})}getCapabilities(){return this.#h}getConstraints(){return this.#i}async applyConstraints(e={}){return this.#i=e,Promise.resolve()}getSettings(){return this.#f}remoteStop(){this.#e!=="ended"&&(this.#e="ended",this.dispatchEvent(new Je.FakeEvent("stopped")),this.dispatchEvent(new Je.FakeEvent("ended")))}remoteMute(){this.#t||(this.#t=!0,this.dispatchEvent(new Je.FakeEvent("mute")))}remoteUnmute(){this.#t&&(this.#t=!1,this.dispatchEvent(new Je.FakeEvent("unmute")))}};rr.FakeMediaStreamTrack=as});var Zi=C(sr=>{"use strict";Object.defineProperty(sr,"__esModule",{value:!0});sr.FakeEventTarget=void 0;var os=class{listeners={};addEventListener(e,t,r){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof r=="object"&&r.once===!0}))}removeEventListener(e,t,r){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(i=>i.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new 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(i){setTimeout(()=>{throw i},0)}r.once&&this.removeEventListener(e.type,r.callback)}return!e.defaultPrevented}};sr.FakeEventTarget=os});var rn=C(nr=>{"use strict";Object.defineProperty(nr,"__esModule",{value:!0});nr.FakeHandler=void 0;var Tc=Xi(),Ec=V(),xc=$(),Xe=Se(),cs=ie(),tn=Y(),kc=Zi(),q=new xc.Logger("FakeHandler"),en="FakeHandler",ds=class s extends Ec.EnhancedEventEmitter{_closed=!1;_fakeParameters;_getSendExtendedRtpCapabilities;_cname=`CNAME-${Xe.generateRandomNumber()}`;_defaultSendStreamId=`${Xe.generateRandomNumber()}`;_transportReady=!1;_nextLocalId=1;_tracks=new Map;_nextSctpStreamId=0;static createFactory(e){return{name:en,factory:t=>new s(t,e),getNativeRtpCapabilities:async({direction:t})=>(q.debug("getNativeRtpCapabilities() [direction:%o]",t),s.getLocalRtpCapabilities(e)),getNativeSctpCapabilities:async()=>(q.debug("getNativeSctpCapabilities()"),e.generateNativeSctpCapabilities())}}static getLocalRtpCapabilities(e){let t=e.generateNativeRtpCapabilities();return cs.validateAndNormalizeRtpCapabilities(t),t}constructor({getSendExtendedRtpCapabilities:e},t){super(),q.debug("constructor()"),this._getSendExtendedRtpCapabilities=e,this._fakeParameters=t}get name(){return en}close(){q.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(),q.debug("updateIceServers()")}async restartIce(e){this.assertNotClosed(),q.debug("restartIce()")}async getTransportStats(){return this.assertNotClosed(),new Map}async send({track:e,streamId:t,encodings:r,codecOptions:i,codec:n}){this.assertNotClosed(),q.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),this._transportReady||await this.setupTransport({localDtlsRole:"server"});let a=s.getLocalRtpCapabilities(this._fakeParameters),o=this._getSendExtendedRtpCapabilities(a),c=cs.getSendingRtpParameters(e.kind,o);c.codecs=cs.reduceCodecs(c.codecs,n);let p=c.codecs.some(l=>/.+\/rtx$/i.test(l.mimeType));c.mid=`mid-${Xe.generateRandomNumber()}`,c.msid=`${t??"-"} ${e.id}`,r||(r=[{}]);for(let l of r)l.ssrc=Xe.generateRandomNumber(),p&&(l.rtx={ssrc:Xe.generateRandomNumber()});c.encodings=r,c.rtcp={cname:this._cname,reducedSize:!0,mux:!0},c.msid=`${t??this._defaultSendStreamId} ${e.id}`;let d=this._nextLocalId++;return this._tracks.set(d,e),{localId:String(d),rtpParameters:c}}async stopSending(e){if(q.debug("stopSending() [localId:%s]",e),!this._closed){if(!this._tracks.has(Number(e)))throw new 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?q.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):q.debug("replaceTrack() [localId:%s, no track]",e),this._tracks.delete(Number(e)),this._tracks.set(Number(e),t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),q.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),q.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t)}async getSenderStats(e){return this.assertNotClosed(),new Map}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this._transportReady||await this.setupTransport({localDtlsRole:"server"}),q.debug("sendDataChannel()");let t=new ir({id:this._nextSctpStreamId++,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:e.label,protocol:e.protocol}),r={streamId:this._nextSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits};return{dataChannel:t,sctpStreamParameters:r}}async receive(e){this.assertNotClosed();let t=[];for(let r of e){let{trackId:i,kind:n}=r;this._transportReady||await this.setupTransport({localDtlsRole:"client"}),q.debug("receive() [trackId:%s, kind:%s]",i,n);let a=this._nextLocalId++,o=new Tc.FakeMediaStreamTrack({kind:n});this._tracks.set(a,o),t.push({localId:String(a),track:o})}return t}async stopReceiving(e){if(!this._closed)for(let t of e)q.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"}),q.debug("receiveDataChannel()"),{dataChannel:new ir({id:e.streamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:t,protocol:r})}}getDataChannelMaxMessageSize(){return 5e5}async setupTransport({localDtlsRole:e,localSdpObject:t}){let r=Xe.clone(this._fakeParameters.generateLocalDtlsParameters());e&&(r.role=e),this.emit("@connectionstatechange","connecting"),await new Promise((i,n)=>this.emit("@connect",{dtlsParameters:r},i,n)),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new tn.InvalidStateError("method called in a closed handler")}};nr.FakeHandler=ds;var ir=class extends kc.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:n="",protocol:a=""}){super(),q.debug(`constructor() [id:${e}, ordered:${t}, maxPacketLifeTime:${r}, maxRetransmits:${i}, label:${n}, protocol:${a}`),this._id=e,this._ordered=t,this._maxPacketLifeTime=r,this._maxRetransmits=i,this._label=n,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(this._readyState!=="open")throw new tn.InvalidStateError("not open")}}});var sn=C(se=>{"use strict";Object.defineProperty(se,"__esModule",{value:!0});se.generateRouterRtpCapabilities=Pc;se.generateNativeRtpCapabilities=Dc;se.generateNativeSctpCapabilities=Ic;se.generateLocalDtlsParameters=Lc;se.generateTransportRemoteParameters=Mc;se.generateProducerRemoteParameters=Oc;se.generateConsumerRemoteParameters=Ac;se.generateDataProducerRemoteParameters=Nc;se.generateDataConsumerRemoteParameters=jc;var U=Se();function K(){return String(U.generateRandomNumber())}function Pc(){return U.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"}]})}function Dc(){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}]}}function Ic(){return U.deepFreeze({numStreams:{OS:2048,MIS:2048}})}function Lc(){return U.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"})}function Mc(){return{id:K(),iceParameters:U.deepFreeze({iceLite:!0,password:"yku5ej8nvfaor28lvtrabcx0wkrpkztz",usernameFragment:"h3hk1iz6qqlnqlne"}),iceCandidates:U.deepFreeze([{foundation:"udpcandidate",address:"9.9.9.9",ip:"9.9.9.9",port:40533,priority:1078862079,protocol:"udp",type:"host",tcpType:"passive"},{foundation:"udpcandidate",address:"9.9.9.9",ip:"9:9:9:9:9:9",port:41333,priority:1078862089,protocol:"udp",type:"host",tcpType:"passive"}]),dtlsParameters:U.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:U.deepFreeze({port:5e3,OS:2048,MIS:2048,maxMessageSize:2e6})}}function Oc(){return U.deepFreeze({id:K()})}function Ac({id:s,codecMimeType:e}={}){switch(e){case"audio/opus":return{id:s??K(),producerId:K(),kind:"audio",rtpParameters:U.deepFreeze({codecs:[{mimeType:"audio/opus",payloadType:100,clockRate:48e3,channels:2,rtcpFeedback:[{type:"transport-cc"}],parameters:{useinbandfec:1,foo:"bar"}}],encodings:[{ssrc:46687003}],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:s??K(),producerId:K(),kind:"audio",rtpParameters:U.deepFreeze({codecs:[{mimeType:"audio/ISAC",payloadType:111,clockRate:16e3,channels:1,rtcpFeedback:[{type:"transport-cc"}],parameters:{}}],encodings:[{ssrc:46687004}],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:s??K(),producerId:K(),kind:"video",rtpParameters:U.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:99991111,rtx:{ssrc:99991112}}],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:s??K(),producerId:K(),kind:"video",rtpParameters:U.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:99991113,rtx:{ssrc:99991114}}],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 new TypeError(`unknown codecMimeType '${e}'`)}}function Nc(){return U.deepFreeze({id:K()})}function jc({id:s}={}){return{id:s??K(),dataProducerId:K(),sctpStreamParameters:U.deepFreeze({streamId:666,maxPacketLifeTime:5e3,maxRetransmits:void 0})}}});var Hr=C(O=>{"use strict";Object.defineProperty(O,"__esModule",{value:!0});O.debug=O.testFakeParameters=O.FakeHandler=O.enhancedEvents=O.ortc=O.parseScalabilityMode=O.detectDeviceAsync=O.detectDevice=O.Device=O.version=O.types=void 0;var Fc=rt();O.debug=Fc.default;O.types=ks();O.version="3.20.0";var ps=Wi();Object.defineProperty(O,"Device",{enumerable:!0,get:function(){return ps.Device}});Object.defineProperty(O,"detectDevice",{enumerable:!0,get:function(){return ps.detectDevice}});Object.defineProperty(O,"detectDeviceAsync",{enumerable:!0,get:function(){return ps.detectDeviceAsync}});var qc=Ee();Object.defineProperty(O,"parseScalabilityMode",{enumerable:!0,get:function(){return qc.parse}});O.ortc=ie();O.enhancedEvents=V();var zc=rn();Object.defineProperty(O,"FakeHandler",{enumerable:!0,get:function(){return zc.FakeHandler}});O.testFakeParameters=sn()});var an=C((Zd,ls)=>{"use strict";var $c=Object.prototype.hasOwnProperty,H="~";function vt(){}Object.create&&(vt.prototype=Object.create(null),new vt().__proto__||(H=!1));function Bc(s,e,t){this.fn=s,this.context=e,this.once=t||!1}function nn(s,e,t,r,i){if(typeof t!="function")throw new TypeError("The listener must be a function");var n=new Bc(t,r||s,i),a=H?H+e:e;return s._events[a]?s._events[a].fn?s._events[a]=[s._events[a],n]:s._events[a].push(n):(s._events[a]=n,s._eventsCount++),s}function ar(s,e){--s._eventsCount===0?s._events=new vt:delete s._events[e]}function z(){this._events=new vt,this._eventsCount=0}z.prototype.eventNames=function(){var e=[],t,r;if(this._eventsCount===0)return e;for(r in t=this._events)$c.call(t,r)&&e.push(H?r.slice(1):r);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};z.prototype.listeners=function(e){var t=H?H+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var i=0,n=r.length,a=new Array(n);i<n;i++)a[i]=r[i].fn;return a};z.prototype.listenerCount=function(e){var t=H?H+e:e,r=this._events[t];return r?r.fn?1:r.length:0};z.prototype.emit=function(e,t,r,i,n,a){var o=H?H+e:e;if(!this._events[o])return!1;var c=this._events[o],p=arguments.length,d,l;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),p){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,r),!0;case 4:return c.fn.call(c.context,t,r,i),!0;case 5:return c.fn.call(c.context,t,r,i,n),!0;case 6:return c.fn.call(c.context,t,r,i,n,a),!0}for(l=1,d=new Array(p-1);l<p;l++)d[l-1]=arguments[l];c.fn.apply(c.context,d)}else{var u=c.length,f;for(l=0;l<u;l++)switch(c[l].once&&this.removeListener(e,c[l].fn,void 0,!0),p){case 1:c[l].fn.call(c[l].context);break;case 2:c[l].fn.call(c[l].context,t);break;case 3:c[l].fn.call(c[l].context,t,r);break;case 4:c[l].fn.call(c[l].context,t,r,i);break;default:if(!d)for(f=1,d=new Array(p-1);f<p;f++)d[f-1]=arguments[f];c[l].fn.apply(c[l].context,d)}}return!0};z.prototype.on=function(e,t,r){return nn(this,e,t,r,!1)};z.prototype.once=function(e,t,r){return nn(this,e,t,r,!0)};z.prototype.removeListener=function(e,t,r,i){var n=H?H+e:e;if(!this._events[n])return this;if(!t)return ar(this,n),this;var a=this._events[n];if(a.fn)a.fn===t&&(!i||a.once)&&(!r||a.context===r)&&ar(this,n);else{for(var o=0,c=[],p=a.length;o<p;o++)(a[o].fn!==t||i&&!a[o].once||r&&a[o].context!==r)&&c.push(a[o]);c.length?this._events[n]=c.length===1?c[0]:c:ar(this,n)}return this};z.prototype.removeAllListeners=function(e){var t;return e?(t=H?H+e:e,this._events[t]&&ar(this,t)):(this._events=new vt,this._eventsCount=0),this};z.prototype.off=z.prototype.removeListener;z.prototype.addListener=z.prototype.on;z.prefixed=H;z.EventEmitter=z;typeof ls<"u"&&(ls.exports=z)});var nd={};ms(nd,{ChannelMultiplexer:()=>Ze,DeferredChannelMultiplexer:()=>or,DeferredDocConnector:()=>hr,LoopbackStreamData:()=>lr,TransportSession:()=>ur,createPresence:()=>kn,createWebsocketDocConnector:()=>xn,deriveYjsServerUrl:()=>En,ensureNodeWebRTC:()=>pr,isNodeRuntime:()=>et,nodeMediasoupHandlerName:()=>dr,streamDataLabel:()=>Rn,transportStreamData:()=>mn});module.exports=_s(nd);var Cn=be(Hr());var us=be(an(),1);var Ze=class{_handlers=new Map;_ws;_onMessage;_onOpen;_listeningForOpen=!1;_pendingSends=[];_disposed=!1;constructor(e){this._ws=e,this._onMessage=t=>{if(typeof t.data!="string")return;let r;try{r=JSON.parse(t.data)}catch{console.warn("[ChannelMultiplexer] Failed to parse WebSocket message as JSON");return}if(!r.channel)return;let i=this._handlers.get(r.channel);if(i)for(let n of i)n(r)},this._ws.addEventListener("message",this._onMessage),this._onOpen=()=>{this.flushPendingSends()}}on(e,t){let r=this._handlers.get(e);return r||(r=new Set,this._handlers.set(e,r)),r.add(t),()=>{r.delete(t),r.size===0&&this._handlers.delete(e)}}emit(e,t){if(this._disposed)return;let r=JSON.stringify({channel:e,...t});if(this._ws.readyState===WebSocket.OPEN){this._ws.send(r);return}this._ws.readyState===WebSocket.CONNECTING&&(this._pendingSends.push(r),this.listenForOpen())}dispose(){this._disposed=!0,this._pendingSends=[],this._handlers.clear(),this._ws.removeEventListener("message",this._onMessage),this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1}flushPendingSends(){if(this._disposed||this._ws.readyState!==WebSocket.OPEN)return;this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1;let e=this._pendingSends;this._pendingSends=[];for(let t of e)this._ws.send(t)}listenForOpen(){this._listeningForOpen||(this._listeningForOpen=!0,this._ws.addEventListener("open",this._onOpen))}},or=class{_handlers=new Map;_pendingSends=[];_target=null;_targetUnsubscribes=[];_disposed=!1;setTarget(e){if(this._disposed)return;this.detachTarget(),this._target=e;for(let[r,i]of this._handlers)for(let n of i)this._targetUnsubscribes.push(e.on(r,n));let t=this._pendingSends;this._pendingSends=[];for(let r of t)e.emit(r.channel,r.data)}rewriteSessionChannels(e,t){if(e===t)return;let r=`session:${e}:`,i=`session:${t}:`,n=new Map;for(let[a,o]of this._handlers)n.set(a.startsWith(r)?i+a.slice(r.length):a,o);this._handlers=n,this._pendingSends=this._pendingSends.map(a=>({...a,channel:a.channel.startsWith(r)?i+a.channel.slice(r.length):a.channel}))}on(e,t){if(this._disposed)return()=>{};let r=this._handlers.get(e);r||(r=new Set,this._handlers.set(e,r)),r.add(t);let i=this._target?.on(e,t);return i&&this._targetUnsubscribes.push(i),()=>{r?.delete(t),r?.size===0&&this._handlers.delete(e),i?.(),i&&(this._targetUnsubscribes=this._targetUnsubscribes.filter(n=>n!==i))}}emit(e,t){if(!this._disposed){if(this._target){this._target.emit(e,t);return}this._pendingSends.push({channel:e,data:t})}}dispose(){this._disposed=!0,this._pendingSends=[],this._handlers.clear(),this.detachTarget()}detachTarget(){for(let e of this._targetUnsubscribes)e();this._targetUnsubscribes=[],this._target=null}};function et(){return typeof window>"u"&&typeof process<"u"&&process.versions!=null&&process.versions.node!=null}function dr(){return et()?"Chrome111":void 0}var Uc=["RTCSessionDescription","RTCIceCandidate","RTCRtpReceiver","RTCRtpSender","RTCRtpTransceiver","RTCDataChannel","MediaStream","MediaStreamTrack"],cr=null;function pr(){return et()?cr||(cr=Hc(),cr):Promise.resolve()}async function Hc(){let s=globalThis;if(typeof s.WebSocket>"u")try{let e=await import("ws"),t=e.default??e;s.WebSocket=t}catch(e){on("WebSocket",e)}if(typeof s.RTCPeerConnection>"u")try{let e=await import("werift");Wc(s,e)}catch(e){on("werift",e)}}function Wc(s,e){let{RTCPeerConnection:t,useH264:r,useVP8:i,useOPUS:n,useSdesMid:a,useSdesRTPStreamId:o,useAbsSendTime:c,useTransportWideCC:p,useVideoOrientation:d}=e,l=()=>({video:[r(),i()],audio:[n()]}),u=()=>({video:[a(),o(),c(),p(),d()],audio:[a(),c(),p()]});class f extends t{constructor(h){super({...h,codecs:h?.codecs??l(),headerExtensions:h?.headerExtensions??u()})}}s.RTCPeerConnection=f;for(let m of Uc)e[m]!=null&&typeof s[m]>"u"&&(s[m]=e[m])}function on(s,e){let t=e instanceof Error?e.message:String(e);console.warn(`[urun-sh/core] Node WebRTC support: optional dependency "${s}" unavailable (${t}). Realtime media will not work in this Node process; install "${s}" to enable it. Doc/KV transport over WebSocket is unaffected.`)}var cn="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";function Vc(s){let e=globalThis.crypto,t=new Uint8Array(s);if(e?.getRandomValues)return e.getRandomValues(t),t;for(let r=0;r<s;r++)t[r]=Math.floor(Math.random()*256);return t}function dn(s=16){let e=Vc(s),t="";for(let r=0;r<s;r++)t+=cn[e[r]%cn.length];return t}function pn(s){return`stream:${s}`}var ln="urun-stream-v1";var hs=1,fe={BINARY:0,TEXT:1,JSON:2,END:3},un=Symbol("urun:stream:end");function hn(s){if(s===un)return Uint8Array.from([hs,fe.END]);let e,t;s instanceof Uint8Array?(e=fe.BINARY,t=s):s instanceof ArrayBuffer?(e=fe.BINARY,t=new Uint8Array(s)):typeof s=="string"?(e=fe.TEXT,t=new TextEncoder().encode(s)):(e=fe.JSON,t=new TextEncoder().encode(JSON.stringify(s)));let r=new Uint8Array(2+t.length);return r[0]=hs,r[1]=e,r.set(t,2),r}function fn(s){let e=s instanceof Uint8Array?s:new Uint8Array(s);if(e.length<2||e[0]!==hs)throw new Error(`[urun] bad stream envelope (version=${e[0]}, len=${e.length})`);let t=e[1],r=e.subarray(2);switch(t){case fe.BINARY:return r.slice();case fe.TEXT:return new TextDecoder().decode(r);case fe.JSON:return JSON.parse(new TextDecoder().decode(r));case fe.END:return un;default:throw new Error(`[urun] unknown stream envelope KIND 0x${t.toString(16)}`)}}var lr=class{consumerId;_handlers=new Map;constructor(e="loopback"){this.consumerId=e}onData(e,t){let r=this._handlers.get(e);return r||(r=new Set,this._handlers.set(e,r)),r.add(t),()=>r.delete(t)}sendData(e,t,r={}){r.to&&(r.to,this.consumerId);for(let i of this._handlers.get(e)??[])i(t)}};function mn(s){return{get consumerId(){return s.consumerId},onData(e,t){return s.onStreamData(e,t)},sendData(e,t,r){s.sendStreamData(e,t,r)}}}var gn=[1e3,2e3,4e3,8e3,3e4],_n=5,Gc=15e3,Kc=2e3,Qc=6e3,Yc=2,Jc=750,Xc=3,vn=[1e3,2e3,4e3],Zc=15e3;function Rn(s){return`stream:${s}`}var ed={queued:"queued",pending:"provisioning",allocating:"provisioning",provisioning:"provisioning",allocated:"connecting",connecting:"connecting",live:"live",running:"live",failed:"error",rejected:"error",expired:"error",cancelled:"ended",canceled:"ended",closed:"ended"},wn=3,bn=4e3,yn=[{urls:"stun:stun.l.google.com:19302"},{urls:"stun:stun1.l.google.com:19302"}],ur=class{_state="disconnected";_sessionId=null;_tracks=new Map;_tracksByName=new Map;_options;_emitter=new us.default;_ws=null;_device=null;_recvTransport=null;_sendTransport=null;_consumers=new Map;_audioProducer=null;_videoProducer=null;_pendingProduce=null;_multiplexer=null;_reconnectAttempts=0;_intentionalDisconnect=!1;_reconnectTimer=null;_cancelPendingDial=null;_stableResetTimer=null;_generation=0;_lastStartOptions;_resolveConnection=null;_recvIceRestartAttempts=0;_recvIceRestartTimer=null;_sendIceRestartAttempts=0;_sendIceRestartTimer=null;_phase={name:"idle"};_requestId;_liveReached=!1;_lastServerStatus;_forceResolveOnNextConnect=!1;_connectStartedAt;_mediaMonitorTimer=null;_lastInboundTotal=0;_mediaEverFlowed=!1;_lastInboundAdvanceAt=0;_mediaDeathHandled=!1;_decodeSignalSeen=!1;_lastFramesDecoded=0;_lastDecodeAdvanceAt=0;_decodeDeathHandled=!1;_currentEpoch=0;_consumerId=null;_pendingStreamSubscribes=new Set;_streamDataHandlers=new Map;_dataProducers=new Map;_dataProducerPromises=new Map;_dataConsumers=new Map;_pendingDataProduce=new Map;get consumerId(){return this._consumerId===null&&(this._consumerId=td()),this._consumerId}get state(){return this._state}get currentIncarnation(){return this._currentEpoch}get phase(){return this._phase}get status(){let e={phase:this._phase.name,transportState:this._state};return this._sessionId&&(e.sessionId=this._sessionId),this._requestId&&(e.requestId=this._requestId),this._lastServerStatus!==void 0&&(e.lastServerStatus=this._lastServerStatus),this._connectStartedAt!==void 0&&(e.elapsedMs=Date.now()-this._connectStartedAt),this._phase.queue&&(e.queue=this._phase.queue),this._phase.error&&(e.error=this._phase.error),e}get sessionId(){return this._sessionId}get tracks(){return this._tracks}get multiplexer(){return this._multiplexer}get isOpen(){return this._ws?.readyState===WebSocket.OPEN}getTrackByName(e){let t=this._tracksByName.get(e);if(t&&t.readyState!=="ended")return t;for(let r of this._tracks.values())if(r.kind===e&&r.readyState!=="ended")return r;return t}setAuth(e){this._options={...this._options,...e},this.isOpen&&this._send({type:"auth",orgId:this._options.orgId,jwt:this._options.jwt,authProvider:this._options.authProvider})}constructor(e){this._options=e??{url:""},e?.sessionId&&(this._sessionId=e.sessionId)}setConnection(e){if(this.isOpen)throw new Error("TransportSession: cannot change connection while connected");this._options={...this._options,...e},e.sessionId&&(this._sessionId=e.sessionId)}setConnectionResolver(e){this._resolveConnection=e}applyControlDocState(e){let t=e&&typeof e=="object"?e.session:void 0,r=sd(t);r!==void 0&&this.setIncarnation(r)}setIncarnation(e){if(!Number.isFinite(e)||e<=this._currentEpoch)return;let t=this._currentEpoch>0,r=this._state==="connected";this._currentEpoch=e,t&&r&&!this._intentionalDisconnect&&this._renegotiate()}isStaleIncarnation(e){return Number.isFinite(e)?e<this._currentEpoch:!1}isStaleClosedMarker(e){if(!e)return!1;let t=typeof e.status=="string"?e.status:void 0;if(t!=="closed"&&t!=="ended")return!1;let r=e.status_epoch??e.statusEpoch,i=typeof r=="number"?r:Number(r);return Number.isFinite(i)?i<this._currentEpoch:!1}async connect(e){this._lastStartOptions=e,this._intentionalDisconnect=!1,this._connectStartedAt??=Date.now(),this._cancelPendingDial?.(new Error("TransportSession: connect superseded by a newer connect()"));let t=++this._generation,r=this._state==="reconnecting"||this._state==="renegotiating";r||this._setState("connecting");let i=null,n=()=>t!==this._generation||this._intentionalDisconnect,a=()=>{if(n())throw new Error("TransportSession: connect cancelled")},o=async()=>{for(let l of this._connectUrls()){a();try{return await this._connectOnce(l,t,e),!0}catch(u){i=u instanceof Error?u:new Error(String(u)),n()||this._cleanupSocket()}}return!1},c=this._forceResolveOnNextConnect&&this._resolveConnection!==null;this._forceResolveOnNextConnect=!1;let p=c?0:this._resolveConnection?Yc:1;for(let l=0;l<p;l++)if(l>0&&(await Sn(Jc),a()),await o())return;if(this._resolveConnection)for(let l=0;l<Xc;l++){this._setState("reconnecting"),await Sn(vn[Math.min(l,vn.length-1)]),a();try{let u=await this._resolveConnection();a(),this.setAuth({jwt:u.jwt??this._options.jwt,authProvider:this._options.authProvider,orgId:this._options.orgId}),this.setConnection({url:u.url,sessionId:u.sessionId,iceServers:u.iceServers??this._options.iceServers})}catch(u){if(n())throw new Error("TransportSession: connect cancelled");i=u instanceof Error?u:new Error(String(u));continue}if(await o())return}if(n())throw i??new Error("TransportSession: connect cancelled");this._setState("failed");let d=i??new Error("TransportSession: connect failed");throw r||this._emitError(d),d}disconnect(){if(this._generation+=1,this._intentionalDisconnect=!0,this._cancelPendingDial?.(new Error("TransportSession: connect cancelled by disconnect()")),this._stopMediaMonitor(),this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null),this._clearReconnectBudgetReset(),this._reconnectAttempts=0,this._audioProducer){this._send({type:"stopAudio"});try{this._audioProducer.close()}catch{}this._audioProducer=null}if(this._videoProducer){this._send({type:"stopVideo"});try{this._videoProducer.close()}catch{}this._videoProducer=null}for(let e of this._consumers.values())try{e.close()}catch{}if(this._consumers.clear(),this._cleanupDataChannels(),this._sendTransport){try{this._sendTransport.close()}catch{}this._sendTransport=null}if(this._recvTransport){try{this._recvTransport.close()}catch{}this._recvTransport=null}if(this._pendingProduce&&(clearTimeout(this._pendingProduce.timeoutId),this._pendingProduce.reject(new Error("TransportSession: disconnected")),this._pendingProduce=null),this._device=null,this._multiplexer&&(this._multiplexer.dispose(),this._multiplexer=null),this._ws){let e=this._ws;this._ws=null;try{e.close(1e3,"intentional disconnect")}catch{}}this._tracks.clear(),this._tracksByName.clear(),this._setState("disconnected"),this._liveReached=!1,this._setPhase("ended"),this._emitter.emit("disconnected")}on(e,t){return this._emitter.on(e,t),()=>{this._emitter.off(e,t)}}sendInput(e,t){this._send({type:"input",data:e,sequence:t})}onStreamData(e,t){let r=this._streamDataHandlers.get(e);return r||(r=new Set,this._streamDataHandlers.set(e,r)),r.add(t),()=>{let i=this._streamDataHandlers.get(e);i?.delete(t),i&&i.size===0&&this._streamDataHandlers.delete(e)}}sendStreamData(e,t,r){this._ensureDataProducer(e).then(i=>i.send(hn(t)),i=>this._emitter.emit("error",i instanceof Error?i:new Error(String(i))))}_ensureDataProducer(e){let t=this._dataProducers.get(e);if(t&&!t.closed)return Promise.resolve(t);let r=this._dataProducerPromises.get(e);if(r)return r;if(!this._sendTransport)return Promise.reject(new Error("[urun] sendStreamData: send transport not ready"));let i=this._sendTransport.produceData({label:pn(e),protocol:ln,ordered:!0}).then(n=>(this._dataProducers.set(e,n),this._dataProducerPromises.delete(e),n)).catch(n=>{throw this._dataProducerPromises.delete(e),n});return this._dataProducerPromises.set(e,i),i}_dispatchStreamData(e,t){for(let r of this._streamDataHandlers.get(e)??[])r(t)}_streamNameFromLabel(e){if(e)return e.startsWith("stream:")?e.slice(7):void 0}async addTrack(e,t){if(!this._sendTransport)throw new Error("TransportSession: send transport not ready");this._audioProducer=await this._sendTransport.produce({track:e,codecOptions:{opusStereo:!1,opusDtx:!1,opusFec:!1},...t?{appData:{name:t}}:{}})}removeTrack(){this._audioProducer&&(this._send({type:"stopAudio"}),this._audioProducer.close(),this._audioProducer=null)}async addVideoTrack(e,t){let r=this._videoProducer;if(r&&!r.closed){await r.replaceTrack({track:e});return}if(!this._sendTransport)throw new Error("TransportSession: send transport not ready");this._videoProducer=await this._sendTransport.produce({track:e,...t?{appData:{name:t}}:{}})}stopVideo(){this._videoProducer&&(this._send({type:"stopVideo"}),this._videoProducer.close(),this._videoProducer=null)}requestDiagnostics(){this._send({type:"diagnostics"})}seekStream(e,t){this._send({type:"stream.seek",stream:e,target:t})}subscribeStream(e){this._pendingStreamSubscribes.add(e),this._sendStreamSubscribe(e)}unsubscribeStream(e){this._pendingStreamSubscribes.delete(e),this._send({t:"stream.unsubscribe",name:e,consumerId:this.consumerId})}_sendStreamSubscribe(e){this._send({t:"stream.subscribe",name:e,consumerId:this.consumerId})}_flushStreamSubscribes(){for(let e of this._pendingStreamSubscribes)this._sendStreamSubscribe(e)}async _handleMessage(e){switch(e.type){case"routerRtpCapabilities":await this._onRouterCapabilities(e.rtpCapabilities);break;case"createWebRtcTransport":await this._onCreateRecvTransport(e);break;case"createSendTransport":await this._onCreateSendTransport(e);break;case"consume":await this._onConsume(e);break;case"consumerClosed":this._closeConsumer(e.consumerId);break;case"producerClosed":this._closeConsumersByProducer(e.producerId);break;case"consumerPaused":this._consumers.get(e.consumerId)?.pause();break;case"consumerResumed":this._consumers.get(e.consumerId)?.resume();break;case"iceRestarted":this._onIceRestarted(e);break;case"produced":if(this._pendingProduce){let t=this._pendingProduce;this._pendingProduce=null,clearTimeout(t.timeoutId),t.resolve(e.id)}break;case"dataProduced":{let t=e.label,r=t?this._pendingDataProduce.get(t):void 0;r&&t&&(this._pendingDataProduce.delete(t),r.resolve(e.id));break}case"consumeData":await this._onConsumeData(e);break;case"started":this._emitter.emit("started");break;case"status":this._onStatus(e);break;case"stream.seeked":this._onStreamSeeked(e);break;case"error":this._onServerError(e);break}}_onServerError(e){let t=typeof e.message=="string"?e.message:"signaling error",r=typeof e.code=="string"?e.code:void 0;if(/connect\(\) already called/i.test(t)){if(this._resolveConnection){this._generation++;let i=this._ws;this._ws=null;try{i?.close()}catch{}this._cleanupMedia(),this._forceResolveOnNextConnect=!0,this._renegotiate();return}this._setPhase("error",{error:{reason:t,code:"transport-consumed",kind:"transport-failed"}}),this._emitter.emit("error",new Error(t));return}if(r==="TRANSPORT_BIND_FAILED"){this._emitError(new Error(t),r);return}console.warn("[urun] signaling error from server:",t)}_onStreamSeeked(e){let t=typeof e.stream=="string"?e.stream:void 0;if(!t)return;let r=e.target,i=r==="live"?"live":typeof r=="number"?r:Number(r);this._emitter.emit("seeked",t,i)}_onStatus(e){let t=e.request_id??e.requestId;if(t&&(this._requestId=t),this._liveReached)return;let r=typeof e.status=="string"?e.status:void 0;r!==void 0&&(this._lastServerStatus=r);let i=(r&&ed[r])??"provisioning",n=e.queue_position??e.queuePosition,a=e.queue_depth??e.queueDepth,o=typeof n=="number"&&typeof a=="number";if(i==="error"){this._setPhase("error",{error:{reason:r??"admission failed",code:r,kind:r==="expired"?"never-live":"create-failed"}});return}if(i==="ended"){this._setPhase("ended");return}if(i==="queued"){this._setPhase("queued",o?{queue:{position:n,depth:a}}:void 0);return}if(i==="connecting"){this._setPhase("connecting");return}this._setPhase("provisioning")}async _onRouterCapabilities(e){et()&&await pr();let t=dr(),r=new Cn.Device(t?{handlerName:t}:void 0);await r.load({routerRtpCapabilities:e}),this._device=r,this._send({type:"rtpCapabilities",rtpCapabilities:r.rtpCapabilities})}async _onCreateRecvTransport(e){this._device&&this._buildRecvTransport(e)}_buildRecvTransport(e){if(!this._device)return;let t=e.iceCandidates,r=this._device.createRecvTransport({id:e.id,iceParameters:e.iceParameters,iceCandidates:t,dtlsParameters:e.dtlsParameters,...e.sctpParameters?{sctpParameters:e.sctpParameters}:{},iceServers:this._options.iceServers??yn});this._recvIceRestartAttempts=0,this._clearRecvIceRestart();let i=this._generation;r.on("connect",({dtlsParameters:n},a,o)=>{try{this._send({type:"connectTransport",transportId:r.id,dtlsParameters:n}),a()}catch(c){o(c)}}),r.on("connectionstatechange",n=>{if(i===this._generation){if(n==="connected"){this._clearRecvIceRestart(),this._recvIceRestartAttempts=0;return}if(!(this._intentionalDisconnect&&n==="closed")&&(n==="failed"||n==="disconnected")){if(this._tryRestartRecvIce())return;n==="failed"&&this._emitError(new Error(`media transport ${n}`),n)}}}),this._recvTransport=r}_tryRestartRecvIce(){let e=this._recvTransport;return!e||e.closed?!1:this._recvIceRestartTimer?!0:this._recvIceRestartAttempts>=wn?!1:(this._recvIceRestartAttempts++,this._armRecvIceRestartWatchdog(),this._requestIceRestart(e.id),!0)}_trySendIceRestart(){let e=this._sendTransport;return!e||e.closed?!1:this._sendIceRestartTimer?!0:this._sendIceRestartAttempts>=wn?!1:(this._sendIceRestartAttempts++,this._armSendIceRestartWatchdog(),this._requestIceRestart(e.id),!0)}_requestIceRestart(e){this._send({type:"restartIce",transportId:e})}_onIceRestarted(e){let t=e.transportId??e.id,r=e.iceParameters;if(!r)return;let i=!!this._recvTransport&&this._recvTransport.id===t,n=!i&&!!this._sendTransport&&this._sendTransport.id===t,a=i?this._recvTransport:n?this._sendTransport:null;a&&(Promise.resolve(a.restartIce({iceParameters:r})).catch(o=>{this._emitter.emit("error",o instanceof Error?o:new Error(String(o)))}),i&&this._recvIceRestartTimer?this._armRecvIceRestartWatchdog():n&&this._sendIceRestartTimer&&this._armSendIceRestartWatchdog())}_armRecvIceRestartWatchdog(){this._clearRecvIceRestart();let e=this._generation;this._recvIceRestartTimer=setTimeout(()=>{this._recvIceRestartTimer=null,!(e!==this._generation||this._intentionalDisconnect)&&this._recvTransport?.connectionState!=="connected"&&this._emitError(new Error("media transport failed (ice restart timeout)"),"failed")},bn)}_armSendIceRestartWatchdog(){this._clearSendIceRestart();let e=this._generation;this._sendIceRestartTimer=setTimeout(()=>{this._sendIceRestartTimer=null,!(e!==this._generation||this._intentionalDisconnect)&&this._sendTransport?.connectionState!=="connected"&&this._emitError(new Error("media send transport failed (ice restart timeout)"),"failed")},bn)}_clearRecvIceRestart(){this._recvIceRestartTimer&&(clearTimeout(this._recvIceRestartTimer),this._recvIceRestartTimer=null)}_clearSendIceRestart(){this._sendIceRestartTimer&&(clearTimeout(this._sendIceRestartTimer),this._sendIceRestartTimer=null)}async _onCreateSendTransport(e){if(!this._device)return;let t=this._device.createSendTransport({id:e.id,iceParameters:e.iceParameters,iceCandidates:e.iceCandidates,dtlsParameters:e.dtlsParameters,...e.sctpParameters?{sctpParameters:e.sctpParameters}:{},iceServers:this._options.iceServers??yn});this._sendIceRestartAttempts=0,this._clearSendIceRestart();let r=this._generation;t.on("connect",({dtlsParameters:i},n,a)=>{try{this._send({type:"connectSendTransport",transportId:t.id,dtlsParameters:i}),n()}catch(o){a(o)}}),t.on("produce",({kind:i,rtpParameters:n,appData:a},o,c)=>{if(this._pendingProduce){c(new Error("produce already pending"));return}let p=setTimeout(()=>{let l=this._pendingProduce;!l||l.timeoutId!==p||(this._pendingProduce=null,l.reject(new Error("Produce timed out")))},15e3);this._pendingProduce={timeoutId:p,resolve:l=>{o({id:l})},reject:c};let d=a&&typeof a.name=="string"?a.name:void 0;try{this._send(d?{type:"produce",kind:i,name:d,rtpParameters:n}:{type:"produce",kind:i,rtpParameters:n})}catch(l){this._pendingProduce?.timeoutId===p&&(this._pendingProduce=null,clearTimeout(p)),c(l)}}),t.on("producedata",({sctpStreamParameters:i,label:n,protocol:a},o,c)=>{try{n&&this._pendingDataProduce.set(n,{resolve:p=>o({id:p}),reject:c}),this._send({type:"produceData",sctpStreamParameters:i,label:n,protocol:a})}catch(p){n&&this._pendingDataProduce.delete(n),c(p)}}),t.on("connectionstatechange",i=>{if(r===this._generation){if(i==="connected"){this._clearSendIceRestart(),this._sendIceRestartAttempts=0;return}this._intentionalDisconnect&&i==="closed"||(i==="failed"||i==="disconnected")&&this._trySendIceRestart()||(i==="failed"||i==="closed")&&this._emitError(new Error(`media send transport ${i}`),i)}}),this._sendTransport=t,this._emitter.emit("audioTransportReady")}async _onConsumeData(e){if(!this._recvTransport)return;let t=e.label,r=this._streamNameFromLabel(t);if(!r)return;let i=await this._recvTransport.consumeData({id:e.id,dataProducerId:e.dataProducerId,sctpStreamParameters:e.sctpStreamParameters,label:t,protocol:e.protocol});this._dataConsumers.set(r,i),i.on("message",n=>{try{let a=typeof n=="string"?new TextEncoder().encode(n):new Uint8Array(n);this._dispatchStreamData(r,fn(a))}catch(a){this._emitter.emit("error",a instanceof Error?a:new Error(String(a)))}})}async _onConsume(e){if(!this._recvTransport)return;let t=this._generation,r=await this._recvTransport.consume({id:e.id,producerId:e.producerId,kind:e.kind,rtpParameters:e.rtpParameters});this._consumers.set(r.id,r),this._tracks.set(r.track.id,r.track);let i=e.streamName??e.label;i&&this._tracksByName.set(i,r.track),this._liveReached||this._setPhase("live"),this._emitter.emit("track",r.track);let n=r.id;r.track.addEventListener("ended",()=>{t!==this._generation||this._intentionalDisconnect||this._closeConsumer(n)},{once:!0}),this._send({type:"resumeConsumer",consumerId:r.id}),this._startMediaMonitor()}_closeConsumer(e){let t=this._consumers.get(e);if(!t)return;this._consumers.delete(e);let r=t.track;try{t.close()}catch{}if(r){this._tracks.delete(r.id);for(let[i,n]of this._tracksByName)n===r&&this._tracksByName.delete(i)}}_closeConsumersByProducer(e){for(let[t,r]of this._consumers)r.producerId===e&&this._closeConsumer(t)}_mediaPollMs(){let e=this._options.mediaLiveness?.pollMs;return e===void 0?Kc:e}_mediaStallTimeoutMs(){let e=this._options.mediaLiveness?.stallTimeoutMs;return e===void 0?Qc:e}_startMediaMonitor(){let e=this._mediaPollMs();if(e<=0||this._mediaMonitorTimer)return;this._lastInboundTotal=0,this._mediaEverFlowed=!1,this._lastInboundAdvanceAt=Date.now(),this._mediaDeathHandled=!1,this._decodeSignalSeen=!1,this._lastFramesDecoded=0,this._lastDecodeAdvanceAt=0,this._decodeDeathHandled=!1;let t=this._generation;this._mediaMonitorTimer=setInterval(()=>{t!==this._generation||this._intentionalDisconnect||this._sampleMediaLiveness(t)},e)}_stopMediaMonitor(){this._mediaMonitorTimer&&(clearInterval(this._mediaMonitorTimer),this._mediaMonitorTimer=null)}async _sampleMediaLiveness(e){if(this._consumers.size===0)return;let t=0,r=null;for(let n of this._consumers.values()){let a=await rd(n);t+=a.total,a.framesDecoded!==null&&(r=(r??0)+a.framesDecoded)}if(e!==this._generation||this._intentionalDisconnect)return;let i=Date.now();if(t>this._lastInboundTotal){this._lastInboundTotal=t,this._lastInboundAdvanceAt=i,t>0&&(this._mediaEverFlowed=!0),this._checkDecodeLiveness(r,i);return}this._mediaEverFlowed&&(this._mediaDeathHandled||i-this._lastInboundAdvanceAt>=this._mediaStallTimeoutMs()&&(this._mediaDeathHandled=!0,this._renegotiate()))}_checkDecodeLiveness(e,t){if(e!==null){if(!this._decodeSignalSeen){this._decodeSignalSeen=!0,this._lastFramesDecoded=e,this._lastDecodeAdvanceAt=t;return}if(e>this._lastFramesDecoded){this._lastFramesDecoded=e,this._lastDecodeAdvanceAt=t;return}this._decodeDeathHandled||t-this._lastDecodeAdvanceAt>=this._mediaStallTimeoutMs()&&(this._decodeDeathHandled=!0,this._renegotiate())}}_renegotiate(){this._intentionalDisconnect||this._reconnectTimer||(this._stopMediaMonitor(),this._setState("renegotiating"),this._attemptReconnect())}_attemptReconnect(e){if(this._intentionalDisconnect||this._reconnectTimer)return;if(this._reconnectAttempts>=_n){this._setState("failed"),this._emitError(new Error(`Failed after ${_n} attempts`));return}let t=gn[Math.min(this._reconnectAttempts,gn.length-1)];this._reconnectAttempts++,this._state!=="renegotiating"&&this._setState("reconnecting"),this._reconnectTimer=setTimeout(async()=>{this._reconnectTimer=null,this._cleanupMedia();try{await this.connect(e??this._lastStartOptions)}catch(r){if(r instanceof Error&&r.message==="TransportSession: connect cancelled")return;this._attemptReconnect(e)}},t)}_connectUrls(){let e=[],t=r=>{if(!r)return;let i=/\/ws\/rtc\/[^/?#]+/.test(r),n=this._sessionId&&!i?`${r}${r.includes("?")?"&":"?"}sessionId=${encodeURIComponent(this._sessionId)}`:r;e.includes(n)||e.push(n)};t(this._options.url);for(let r of this._options.fallbackUrls??[])t(r);return e}_connectOnce(e,t,r){return new Promise((i,n)=>{let a=!1,o=!1,c=null,p=new WebSocket(e);this._ws=p;let d=()=>this._ws!==p||t!==this._generation,l=f=>{o||(o=!0,c&&clearTimeout(c),this._cancelPendingDial===u&&(this._cancelPendingDial=null),n(f))},u=f=>{try{p.close()}catch{}l(f)};this._cancelPendingDial=u,c=setTimeout(()=>{try{p.close()}catch{}l(new Error("TransportSession: connect timed out"))},Gc),p.onopen=()=>{if(!o){if(d()){try{p.close()}catch{}l(new Error("TransportSession: connect superseded during dial"));return}a=!0,c&&clearTimeout(c),this._multiplexer=new Ze(p),p.send(JSON.stringify(this._startMessage(r))),this._flushStreamSubscribes(),this._scheduleReconnectBudgetReset(),this._setState("connected"),this._liveReached||this._setPhase("connecting"),this._emitter.emit("connected"),o=!0,this._cancelPendingDial===u&&(this._cancelPendingDial=null),i()}},p.onerror=()=>{a||l(new Error("WebSocket connection error"))},p.onclose=()=>{if(!a){l(new Error("WebSocket closed before connecting"));return}d()||(this._clearReconnectBudgetReset(),c&&clearTimeout(c),this._setState("disconnected"),this._intentionalDisconnect||(this._emitter.emit("disconnected"),this._attemptReconnect(r)))},p.onmessage=f=>{if(!(this._ws!==p||t!==this._generation)&&typeof f.data=="string")try{this._handleMessage(JSON.parse(f.data))}catch(m){this._emitter.emit("error",m instanceof Error?m:new Error(String(m)))}}})}_startMessage(e){let t={type:"start",video:e?.video??{width:854,height:480,frameRate:16}};return e?.prompt&&(t.prompt=e.prompt),e?.cameraControl&&(t.camera_control=e.cameraControl),e?.args&&(t.args=e.args),e?.app&&(t.app=e.app),e?.functionName&&(t.function=e.functionName),e?.role&&(t.role=e.role),this._options.orgId&&(t.orgId=this._options.orgId),this._options.jwt&&(t.jwt=this._options.jwt),this._options.authProvider&&(t.authProvider=this._options.authProvider),t}_cleanupSocket(){if(this._clearReconnectBudgetReset(),!this._ws)return;let e=this._ws;this._ws=null;try{e.close()}catch{}}_scheduleReconnectBudgetReset(){this._clearReconnectBudgetReset(),this._reconnectAttempts!==0&&(this._stableResetTimer=setTimeout(()=>{this._stableResetTimer=null,this._reconnectAttempts=0},Zc))}_clearReconnectBudgetReset(){this._stableResetTimer&&(clearTimeout(this._stableResetTimer),this._stableResetTimer=null)}_cleanupDataChannels(){for(let e of this._dataProducers.values())try{e.close()}catch{}this._dataProducers.clear(),this._dataProducerPromises.clear();for(let e of this._dataConsumers.values())try{e.close()}catch{}this._dataConsumers.clear();for(let e of this._pendingDataProduce.values())try{e.reject(new Error("TransportSession: disconnected"))}catch{}this._pendingDataProduce.clear()}_cleanupMedia(){this._stopMediaMonitor();for(let e of this._consumers.values())try{e.close()}catch{}if(this._consumers.clear(),this._cleanupDataChannels(),this._audioProducer){try{this._audioProducer.close()}catch{}this._audioProducer=null}if(this._clearRecvIceRestart(),this._clearSendIceRestart(),this._recvTransport){try{this._recvTransport.close()}catch{}this._recvTransport=null}if(this._sendTransport){try{this._sendTransport.close()}catch{}this._sendTransport=null}this._pendingProduce&&(clearTimeout(this._pendingProduce.timeoutId),this._pendingProduce=null),this._device=null,this._tracks.clear(),this._tracksByName.clear(),this._multiplexer&&(this._multiplexer.dispose(),this._multiplexer=null)}_send(e){!this._ws||this._ws.readyState!==WebSocket.OPEN||this._ws.send(JSON.stringify(e))}_setState(e){this._state!==e&&(this._state=e,this._emitter.emit("stateChange",e))}_setPhase(e,t){e==="live"&&(this._liveReached=!0);let r={name:e};t?.queue&&(r.queue=t.queue),this._requestId&&(r.requestId=this._requestId),this._sessionId&&(r.sessionId=this._sessionId),t?.error&&(r.error=t.error),this._phase=r,this._emitter.emit("phase",r)}_emitError(e,t){this._setPhase("error",{error:{reason:e.message,code:t,kind:"transport-failed"}}),this._emitter.emit("error",e)}reportAllocationFailure(e,t){this._setPhase("error",{error:{reason:e.message,code:"allocation-failed",kind:"create-failed",httpStatus:t}}),this._emitter.emit("error",e)}};function Sn(s){return new Promise(e=>setTimeout(e,s))}function td(){return dn()}async function rd(s){if(typeof s.getStats!="function")return{total:0,framesDecoded:null};let e;try{e=await s.getStats()}catch{return{total:0,framesDecoded:null}}let t=0,r=null,i=n=>{if(!n||typeof n!="object")return;let a=n;if(a.type==="inbound-rtp"){let o=typeof a.bytesReceived=="number"?a.bytesReceived:0,c=typeof a.packetsReceived=="number"?a.packetsReceived:0;t+=o+c,typeof a.framesDecoded=="number"&&(r=(r??0)+a.framesDecoded)}};if(e instanceof Map)for(let n of e.values())i(n);else if(Array.isArray(e))for(let n of e)i(n);else e&&typeof e.forEach=="function"&&e.forEach(i);return{total:t,framesDecoded:r}}function sd(s){if(!s||typeof s!="object")return;let e=s.epoch,t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:void 0}var Tn=require("y-websocket"),id=require("y-protocols/awareness");function En(s){let e=new URL(s);return`${e.protocol}//${e.host}/doc`}function xn(s){let e=s.WebSocketPolyfill??globalThis.WebSocket;if(!e)throw new Error("[urun] no WebSocket implementation available for the yjs doc provider (browser global missing and no WebSocketPolyfill passed)");return(t,r,i)=>{let n=`${s.sessionId}/${t}`,a=new Tn.WebsocketProvider(s.serverUrl,n,r,{awareness:i,params:s.token?{token:s.token}:{},WebSocketPolyfill:e,disableBc:!0});return{get awareness(){return a.awareness},get synced(){return a.synced},onSync(o){let c=p=>o(p);return a.on("sync",c),()=>a.off("sync",c)},destroy(){a.destroy()}}}}var fs=class{constructor(e,t,r){this._name=e;this._doc=t;this.awareness=r}_name;_doc;awareness;_inner=null;_innerUnsub=null;_syncHandlers=new Set;_destroyed=!1;get synced(){return this._inner?.synced??!1}onSync(e){return this._syncHandlers.add(e),()=>this._syncHandlers.delete(e)}attach(e){if(!(this._destroyed||this._inner)&&(this._inner=e(this._name,this._doc,this.awareness),this._innerUnsub=this._inner.onSync(t=>{for(let r of[...this._syncHandlers])r(t)}),this._inner.synced))for(let t of[...this._syncHandlers])t(!0)}destroy(){this._destroyed=!0,this._innerUnsub?.(),this._innerUnsub=null,this._inner?.destroy(),this._inner=null,this._syncHandlers.clear()}},hr=class{_target=null;_bridges=[];connect=(e,t,r)=>{let i=new fs(e,t,r);return this._target?i.attach(this._target):this._bridges.push(i),i};get connected(){return this._target!==null}setTarget(e){if(this._target)return;this._target=e;let t=this._bridges.splice(0);for(let r of t)r.attach(e)}};function kn(s){return{get clientId(){return s.clientID},set(e){s.setLocalState(e)},setField(e,t){s.setLocalStateField(e,t)},getLocal(){return s.getLocalState()??null},getStates(){return s.getStates()},on(e,t){let r=()=>t(s.getStates());return s.on("change",r),r(),()=>s.off("change",r)}}}0&&(module.exports={ChannelMultiplexer,DeferredChannelMultiplexer,DeferredDocConnector,LoopbackStreamData,TransportSession,createPresence,createWebsocketDocConnector,deriveYjsServerUrl,ensureNodeWebRTC,isNodeRuntime,nodeMediasoupHandlerName,streamDataLabel,transportStreamData});
3
+ `}});var ce=C(se=>{"use strict";var ve=Ks(),Ia=Js(),La=Ct();se.grammar=La;se.write=Ia;se.parse=ve.parse;se.parseParams=ve.parseParams;se.parseFmtpConfig=ve.parseFmtpConfig;se.parsePayloads=ve.parsePayloads;se.parseRemoteCandidates=ve.parseRemoteCandidates;se.parseImageAttributes=ve.parseImageAttributes;se.parseSimulcastStreamList=ve.parseSimulcastStreamList});var we=C(Cr=>{"use strict";Object.defineProperty(Cr,"__esModule",{value:!0});Cr.parse=Oa;var Ma=new RegExp("^[LS]([1-9]\\d{0,1})T([1-9]\\d{0,1})");function Oa(s){let e=Ma.exec(s??"");return e?{spatialLayers:Number(e[1]),temporalLayers:Number(e[2])}:{spatialLayers:1,temporalLayers:1}}});var ei=C(ue=>{"use strict";Object.defineProperty(ue,"__esModule",{value:!0});ue.OfferMediaSection=ue.AnswerMediaSection=ue.MediaSection=void 0;var Aa=ce(),Xs=fe(),Ke=class{_mediaObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r}){if(this._mediaObject={type:"",port:0,protocol:"",payloads:"",rtp:[],fmtp:[]},e&&this.setIceParameters(e),t){this._mediaObject.candidates=[];for(let i of t){let n={foundation:i.foundation,component:1,ip:i.address??i.ip,port:i.port,priority:i.priority,transport:i.protocol,type:i.type};i.tcpType&&(n.tcptype=i.tcpType),this._mediaObject.candidates.push(n)}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 this._mediaObject.port===0}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}};ue.MediaSection=Ke;var Er=class extends Ke{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:i,plainRtpParameters:n,offerMediaObject:a,offerRtpParameters:o,answerRtpParameters:c,codecOptions:d}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r}),this._mediaObject.mid=String(a.mid),this._mediaObject.type=a.type,this._mediaObject.protocol=a.protocol,n?(this._mediaObject.connection={ip:n.ip,version:n.ipVersion},this._mediaObject.port=n.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},this._mediaObject.port=7),a.type){case"audio":case"video":{this._mediaObject.direction="recvonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[];for(let p of c.codecs){let l={payload:p.payloadType,codec:Zs(p),rate:p.clockRate};p.channels>1&&(l.encoding=p.channels),this._mediaObject.rtp.push(l);let u=Xs.clone(p.parameters)??{},f=Xs.clone(p.rtcpFeedback)??[];if(d){let{opusStereo:h,opusFec:_,opusDtx:S,opusMaxPlaybackRate:k,opusMaxAverageBitrate:P,opusPtime:I,opusNack:E,videoGoogleStartBitrate:M,videoGoogleMaxBitrate:lt,videoGoogleMinBitrate:is}=d,Se=o.codecs.find(me=>me.payloadType===p.payloadType);switch(p.mimeType.toLowerCase()){case"audio/opus":case"audio/multiopus":{h!==void 0&&(Se.parameters["sprop-stereo"]=h?1:0,u.stereo=h?1:0),_!==void 0&&(Se.parameters.useinbandfec=_?1:0,u.useinbandfec=_?1:0),S!==void 0&&(Se.parameters.usedtx=S?1:0,u.usedtx=S?1:0),k!==void 0&&(u.maxplaybackrate=k),P!==void 0&&(u.maxaveragebitrate=P),I!==void 0&&(Se.parameters.ptime=I,u.ptime=I),E||(Se.rtcpFeedback=Se.rtcpFeedback.filter(me=>me.type!=="nack"||me.parameter),f=f.filter(me=>me.type!=="nack"||me.parameter));break}case"video/vp8":case"video/vp9":case"video/h264":case"video/h265":case"video/av1":{M!==void 0&&(u["x-google-start-bitrate"]=M),lt!==void 0&&(u["x-google-max-bitrate"]=lt),is!==void 0&&(u["x-google-min-bitrate"]=is);break}}}let m={payload:p.payloadType,config:""};for(let h of Object.keys(u))m.config&&(m.config+=";"),m.config+=`${h}=${u[h]}`;m.config&&this._mediaObject.fmtp.push(m);for(let h of f)this._mediaObject.rtcpFb.push({payload:p.payloadType,type:h.type,subtype:h.parameter})}this._mediaObject.payloads=c.codecs.map(p=>p.payloadType).join(" "),this._mediaObject.ext=[];for(let p of c.headerExtensions)(a.ext??[]).some(u=>u.uri===p.uri)&&this._mediaObject.ext.push({uri:p.uri,value:p.id});if(a.extmapAllowMixed==="extmap-allow-mixed"&&(this._mediaObject.extmapAllowMixed="extmap-allow-mixed"),a.simulcast){this._mediaObject.simulcast={dir1:"recv",list1:a.simulcast.list1},this._mediaObject.rids=[];for(let p of a.rids??[])p.direction==="send"&&this._mediaObject.rids.push({id:p.id,direction:"recv"})}else if(a.simulcast_03){this._mediaObject.simulcast_03={value:a.simulcast_03.value.replace(/send/g,"recv")},this._mediaObject.rids=[];for(let p of a.rids??[])p.direction==="send"&&this._mediaObject.rids.push({id:p.id,direction:"recv"})}this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";break}case"application":{typeof a.sctpPort=="number"?(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});break}}}setDtlsRole(e){switch(e){case"client":{this._mediaObject.setup="active";break}case"server":{this._mediaObject.setup="passive";break}case"auto":{this._mediaObject.setup="actpass";break}}}resume(){this._mediaObject.direction="recvonly"}muxSimulcastStreams(e){if(!this._mediaObject.simulcast?.list1)return;let t={};for(let n of e)n.rid&&(t[n.rid]=n);let r=this._mediaObject.simulcast.list1,i=Aa.parseSimulcastStreamList(r);for(let n of i)for(let a of n)a.paused=!t[a.scid]?.active;this._mediaObject.simulcast.list1=i.map(n=>n.map(a=>`${a.paused?"~":""}${a.scid}`).join(",")).join(";")}};ue.AnswerMediaSection=Er;var kr=class extends Ke{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:i,plainRtpParameters:n,mid:a,kind:o,offerRtpParameters:c,streamId:d,trackId:p}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r}),this._mediaObject.mid=String(a),this._mediaObject.type=o,n?(this._mediaObject.connection={ip:n.ip,version:n.ipVersion},this._mediaObject.protocol="RTP/AVP",this._mediaObject.port=n.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",o){case"audio":case"video":{this._mediaObject.direction="sendonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[],this._mediaObject.msid=[{id:d,appdata:p}];for(let m of c.codecs){let h={payload:m.payloadType,codec:Zs(m),rate:m.clockRate};m.channels>1&&(h.encoding=m.channels),this._mediaObject.rtp.push(h);let _={payload:m.payloadType,config:""};for(let S of Object.keys(m.parameters??{}))_.config&&(_.config+=";"),_.config+=`${S}=${m.parameters[S]}`;_.config&&this._mediaObject.fmtp.push(_);for(let S of m.rtcpFeedback)this._mediaObject.rtcpFb.push({payload:m.payloadType,type:S.type,subtype:S.parameter})}this._mediaObject.payloads=c.codecs.map(m=>m.payloadType).join(" "),this._mediaObject.ext=[];for(let m of c.headerExtensions)this._mediaObject.ext.push({uri:m.uri,value:m.id});this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";let l=c.encodings[0],u=l.ssrc,f=l.rtx?.ssrc;this._mediaObject.ssrcs=[],this._mediaObject.ssrcGroups=[],u&&c.rtcp.cname&&this._mediaObject.ssrcs.push({id:u,attribute:"cname",value:c.rtcp.cname}),f&&(c.rtcp.cname&&this._mediaObject.ssrcs.push({id:f,attribute:"cname",value:c.rtcp.cname}),u&&this._mediaObject.ssrcGroups.push({semantics:"FID",ssrcs:`${u} ${f}`}));break}case"application":{this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=i.port,this._mediaObject.maxMessageSize=i.maxMessageSize;break}}}setDtlsRole(e){this._mediaObject.setup="actpass"}resume(){this._mediaObject.direction="sendonly"}};ue.OfferMediaSection=kr;function Zs(s){let t=new RegExp("^(audio|video)/(.+)","i").exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");return t[2]}});var Ne=C(xt=>{"use strict";Object.defineProperty(xt,"__esModule",{value:!0});xt.RemoteSdp=void 0;var Na=ce(),ja=q(),Et=ei(),Fa=Pr(),qa=["av1","h264"],kt=new ja.Logger("RemoteSdp"),xr=class{_iceParameters;_iceCandidates;_dtlsParameters;_sctpParameters;_plainRtpParameters;_mediaSections=[];_midToIndex=new Map;_firstMid;_sdpObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:i,plainRtpParameters:n}){if(this._iceParameters=e,this._iceCandidates=t,this._dtlsParameters=r,this._sctpParameters=i,this._plainRtpParameters=n,this._sdpObject={version:0,origin:{address:"0.0.0.0",ipVer:4,netType:"IN",sessionId:"10000",sessionVersion:0,username:`media-client-v${Fa.version}`},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 a=this._dtlsParameters.fingerprints.length;this._sdpObject.fingerprint={type:r.fingerprints[a-1].algorithm,hash:r.fingerprints[a-1].value},this._sdpObject.groups=[{type:"BUNDLE",mids:""}]}n&&(this._sdpObject.origin.address=n.ip,this._sdpObject.origin.ipVer=n.ipVersion)}updateIceParameters(e){kt.debug("updateIceParameters() [iceParameters:%o]",e),this._iceParameters=e,this._sdpObject.icelite=e.iceLite?"ice-lite":void 0;for(let t of this._mediaSections)t.setIceParameters(e)}updateDtlsRole(e){kt.debug("updateDtlsRole() [role:%s]",e),this._dtlsParameters.role=e;for(let t of this._mediaSections)t.setDtlsRole(e)}setSessionExtmapAllowMixed(){kt.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:n}){let a=new Et.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,offerMediaObject:e,offerRtpParameters:r,answerRtpParameters:i,codecOptions:n}),o=a.getObject();o.rtp.find(d=>qa.includes(d.codec.toLowerCase()))||(o.ext=o.ext?.filter(d=>d.uri!=="https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension")),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:n}){this.setSessionExtmapAllowMixed();let a=new Et.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,mid:e,kind:t,offerRtpParameters:r,streamId:i,trackId:n}),o=this._mediaSections.find(c=>c.closed&&c.getObject().type===t);o?this.replaceMediaSection(a,o.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?(kt.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 Et.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 Et.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++,Na.write(this._sdpObject)}addMediaSection(e){this._firstMid||(this._firstMid=e.mid),this._mediaSections.push(e),this._midToIndex.set(e.mid,this._mediaSections.length-1),this._sdpObject.media.push(e.getObject()),this.regenerateBundleMids()}replaceMediaSection(e,t){if(typeof t=="string"){let r=this._midToIndex.get(t);if(r===void 0)throw new 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 r=this._midToIndex.get(e.mid);if(r===void 0)throw new Error(`no media section found with mid '${e.mid}'`);this._mediaSections[r]=e,this._sdpObject.media[r]=e.getObject()}}findMediaSection(e){let t=this._midToIndex.get(e);if(t===void 0)throw new 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(" "))}};xt.RemoteSdp=xr});var je=C(ye=>{"use strict";Object.defineProperty(ye,"__esModule",{value:!0});ye.extractRtpCapabilities=za;ye.extractDtlsParameters=$a;ye.getCname=Ba;ye.applyCodecParameters=Ua;ye.addHeaderExtension=Wa;var ti=ce();function za({sdpObject:s}){let e=new Map,t=new Map;for(let i of s.media){let n=i.type;switch(n){case"audio":case"video":break;default:continue}for(let a of i.rtp){let o={kind:n,mimeType:`${n}/${a.codec}`,preferredPayloadType:a.payload,clockRate:a.rate,channels:a.encoding,parameters:{},rtcpFeedback:[]};e.set(o.preferredPayloadType,o)}for(let a of i.fmtp??[]){let o=ti.parseParams(a.config),c=e.get(a.payload);c&&(o?.hasOwnProperty("profile-level-id")&&(o["profile-level-id"]=String(o["profile-level-id"])),c.parameters=o)}for(let a of i.rtcpFb??[]){let o={type:a.type,parameter:a.subtype};if(o.parameter||delete o.parameter,a.payload!=="*"){let c=e.get(Number(a.payload));if(!c)continue;c.rtcpFeedback.push(o)}else for(let c of e.values())c.kind===n&&!/.+\/rtx$/i.test(c.mimeType)&&c.rtcpFeedback.push(o)}for(let a of i.ext??[]){if(a["encrypt-uri"])continue;let o={kind:n,uri:a.uri,preferredId:a.value};t.set(o.preferredId,o)}}return{codecs:Array.from(e.values()),headerExtensions:Array.from(t.values())}}function $a({sdpObject:s}){let e=s.setup,t=s.fingerprint;if(!e||!t){let n=(s.media??[]).find(a=>a.port!==0);n&&(e=e??n.setup,t=t??n.fingerprint)}if(e){if(!t)throw new Error("no a=fingerprint found at SDP session or media level")}else throw new Error("no a=setup found at SDP session or media level");let r;switch(e){case"active":{r="client";break}case"passive":{r="server";break}case"actpass":{r="auto";break}}return{role:r,fingerprints:[{algorithm:t.type,value:t.hash}]}}function Ba({offerMediaObject:s}){let e=(s.ssrcs??[]).find(t=>t.attribute==="cname");return e?e.value:""}function Ua({offerRtpParameters:s,answerMediaObject:e}){for(let t of s.codecs){let r=t.mimeType.toLowerCase();if(r!=="audio/opus"||!(e.rtp??[]).find(o=>o.payload===t.payloadType))continue;e.fmtp=e.fmtp??[];let n=e.fmtp.find(o=>o.payload===t.payloadType);n||(n={payload:t.payloadType,config:""},e.fmtp.push(n));let a=ti.parseParams(n.config);if(r==="audio/opus"){let o=t.parameters?.["sprop-stereo"];o!==void 0&&(a.stereo=Number(o)?1:0)}n.config="";for(let o of Object.keys(a))n.config&&(n.config+=";"),n.config+=`${o}=${a[o]}`}}function Wa({offerMediaObject:s,headerExtensionUri:e,headerExtensionId:t}){s.ext||(s.ext=[]),s.ext.push({uri:e,value:t})}});var Fe=C(Pt=>{"use strict";Object.defineProperty(Pt,"__esModule",{value:!0});Pt.getRtpEncodings=Ha;Pt.addLegacySimulcast=Va;function Ha({offerMediaObject:s,codecs:e}){let t=new Set;for(let n of s.ssrcs??[]){let a=n.id;a&&t.add(a)}if(t.size===0)throw new Error("no a=ssrc lines found");let r=new Map;for(let n of s.ssrcGroups??[]){if(n.semantics!=="FID")continue;let a=n.ssrcs.split(/\s+/),o=Number(a[0]),c=Number(a[1]);t.has(o)&&(t.delete(o),t.delete(c),r.set(o,c))}for(let n of t)r.set(n,void 0);let i=[];for(let[n,a]of r){let o={ssrc:n};a&&e.length>1&&(o.rtx={ssrc:a}),i.push(o)}return i}function Va({offerMediaObject:s,numStreams:e}){if(e<=1)throw new TypeError("numStreams must be greater than 1");let t=(s.ssrcs??[]).find(l=>l.attribute==="msid");if(!t)throw new Error("a=ssrc line with msid information not found");let[r,i]=t.value.split(" "),n=Number(t.id),a;(s.ssrcGroups??[]).some(l=>{if(l.semantics!=="FID")return!1;let u=l.ssrcs.split(/\s+/);return Number(u[0])===n?(a=Number(u[1]),!0):!1});let o=(s.ssrcs??[]).find(l=>l.attribute==="cname");if(!o)throw new Error("a=ssrc line with cname information not found");let c=o.value,d=[],p=[];for(let l=0;l<e;++l)d.push(n+l),a&&p.push(a+l);s.ssrcGroups=[],s.ssrcs=[],s.ssrcGroups.push({semantics:"SIM",ssrcs:d.join(" ")});for(let l of d)s.ssrcs.push({id:l,attribute:"cname",value:c}),s.ssrcs.push({id:l,attribute:"msid",value:`${r} ${i}`});for(let l=0;l<p.length;++l){let u=d[l],f=p[l];s.ssrcs.push({id:f,attribute:"cname",value:c}),s.ssrcs.push({id:f,attribute:"msid",value:`${r} ${i}`}),s.ssrcGroups.push({semantics:"FID",ssrcs:`${u} ${f}`})}}});var qe=C(Ye=>{"use strict";Object.defineProperty(Ye,"__esModule",{value:!0});Ye.addNackSupportForOpus=Ga;Ye.addHeaderExtensionSupport=Qa;Ye.getMsidStreamIdAndTrackId=Ka;function Ga(s){for(let e of s.codecs??[])(e.mimeType.toLowerCase()==="audio/opus"||e.mimeType.toLowerCase()==="audio/multiopus")&&!e.rtcpFeedback?.some(t=>t.type==="nack"&&!t.parameter)&&(e.rtcpFeedback||(e.rtcpFeedback=[]),e.rtcpFeedback.push({type:"nack"}))}function Qa(s,e){let t,r=s.headerExtensions?.find(n=>n.uri===e.uri);if(r){if(r.kind===e.kind)return;t=r.preferredId}if(s.headerExtensions||(s.headerExtensions=[]),t===void 0){t=1;let n=new Set(s.headerExtensions.map(a=>a.preferredId));for(;n.has(t);)++t}let i={kind:e.kind,uri:e.uri,preferredId:t,preferredEncrypt:!1,direction:e.direction};s.headerExtensions.push(i)}function Ka(s){if(!s||typeof s!="string")return{msidStreamId:void 0,msidTrackId:void 0};let[e,t]=s.trim().split(/\s+/);return e?{msidStreamId:e,msidTrackId:t}:{msidStreamId:void 0,msidTrackId:void 0}}});var ni=C(Dt=>{"use strict";Object.defineProperty(Dt,"__esModule",{value:!0});Dt.Chrome111=void 0;var ie=ce(),Ya=U(),Ja=q(),Je=ee(),Xa=V(),Za=we(),eo=Ne(),Xe=je(),ri=Fe(),Dr=qe(),R=new Ja.Logger("Chrome111"),si="Chrome111",ii={OS:65535,MIS:65535},Ir=class s extends Ya.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:si,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{R.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e,sendEncodings:[{scalabilityMode:"L3T3"}]});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let i=ie.parse(r.sdp);return s.getLocalRtpCapabilities(i)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(R.debug("getNativeSctpCapabilities()"),{numStreams:ii})}}static getLocalRtpCapabilities(e,t=[]){let r=Xe.extractRtpCapabilities({sdpObject:e});Je.validateAndNormalizeRtpCapabilities(r),Dr.addNackSupportForOpus(r);for(let i of t)Dr.addHeaderExtensionSupport(r,i);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:d}){super(),R.debug("constructor()"),this._direction=e,this._remoteSdp=new eo.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=d,i.role&&i.role!=="auto"&&(this._forcedLocalDtlsRole=i.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(R.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return si}close(){if(R.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}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(),R.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),R.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});R.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:n,codec:a,onRtpSender:o}){if(this.assertNotClosed(),this.assertSendDirection(),R.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1){let I=1;for(let E of r){let M=E.scalabilityMode?(0,Za.parse)(E.scalabilityMode).temporalLayers:3;M>I&&(I=M)}r.forEach((E,M)=>{E.rid=`r${M}`,E.scalabilityMode=`L1T${I}`})}let c=this._remoteSdp.getNextMediaSectionIdx(),d=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});o&&o(d.sender);let p=await this._pc.createOffer(),l=ie.parse(p.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let u=[];u.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let f=s.getLocalRtpCapabilities(l,u),m=this._getSendExtendedRtpCapabilities(f),h=Je.getSendingRtpParameters(e.kind,m);h.codecs=Je.reduceCodecs(h.codecs,a);let _=Je.getSendingRemoteRtpParameters(e.kind,m);if(_.codecs=Je.reduceCodecs(_.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l}),n?.absCaptureTime){let I=l.media[c.idx];Xe.addHeaderExtension({offerMediaObject:I,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:_.headerExtensions.find(E=>E.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),p={type:"offer",sdp:ie.write(l)}}R.debug("send() | calling pc.setLocalDescription() [offer:%o]",p),await this._pc.setLocalDescription(p);let S=d.mid;h.mid=S,l=ie.parse(this._pc.localDescription.sdp);let k=l.media[c.idx];if(h.rtcp.cname=Xe.getCname({offerMediaObject:k}),h.msid=`${t??this._sendStream.id} ${e.id}`,!r)h.encodings=ri.getRtpEncodings({offerMediaObject:k,codecs:h.codecs});else if(r.length===1){let I=ri.getRtpEncodings({offerMediaObject:k,codecs:h.codecs});Object.assign(I[0],r[0]),h.encodings=I}else h.encodings=r;this._remoteSdp.send({offerMediaObject:k,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:_,codecOptions:i});let P={type:"answer",sdp:this._remoteSdp.getSdp()};return R.debug("send() | calling pc.setRemoteDescription() [answer:%o]",P),await this._pc.setRemoteDescription(P),this._mapMidTransceiver.set(S,d),{localId:S,rtpParameters:h,rtpSender:d.sender}}async stopSending(e){if(this.assertSendDirection(),R.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let i=await this._pc.createOffer();R.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let n={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),R.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();R.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),R.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();R.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?R.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):R.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),R.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();R.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),R.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();R.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};R.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 new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};R.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%ii.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=ie.parse(n.sdp),o=a.media.find(d=>d.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),R.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:d,rtpParameters:p,streamId:l}=o;R.debug("receive() [trackId:%s, kind:%s]",c,d);let u=p.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:f}=Dr.getMsidStreamIdAndTrackId(p.msid);this._remoteSdp.receive({mid:u,kind:d,offerRtpParameters:p,streamId:l??f??p.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(let o of e){let{trackId:c,onRtpReceiver:d}=o;if(d){let p=r.get(c),l=this._pc.getTransceivers().find(u=>u.mid===p);if(!l)throw new Error("transceiver not found");d(l.receiver)}}let n=await this._pc.createAnswer(),a=ie.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:d}=o,p=r.get(c),l=a.media.find(u=>String(u.mid)===p);Xe.applyCodecParameters({offerRtpParameters:d,answerMediaObject:l})}n={type:"answer",sdp:ie.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),R.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,d=r.get(c),p=this._pc.getTransceivers().find(l=>l.mid===d);if(p)this._mapMidTransceiver.set(d,p),t.push({localId:d,track:p.receiver.track,rtpReceiver:p.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){R.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){R.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){R.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.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 new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,d={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};R.debug("receiveDataChannel() [options:%o]",d);let p=this._pc.createDataChannel(r,d);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),f=ie.parse(u.sdp),m=f.media.find(h=>h.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f}),u={type:"answer",sdp:ie.write(f)},R.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:p}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=ie.parse(this._pc.localDescription.sdp));let r=Xe.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),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");break}}};assertNotClosed(){if(this._closed)throw new Xa.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};Dt.Chrome111=Ir});var ci=C(It=>{"use strict";Object.defineProperty(It,"__esModule",{value:!0});It.Chrome74=void 0;var G=ce(),to=q(),ro=U(),Ze=ee(),so=V(),io=we(),no=Ne(),et=je(),Lr=Fe(),Mr=qe(),y=new to.Logger("Chrome74"),ai="Chrome74",oi={OS:1024,MIS:1024},Or=class s extends ro.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:ai,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{y.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let i=G.parse(r.sdp);return s.getLocalRtpCapabilities(i)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(y.debug("getNativeSctpCapabilities()"),{numStreams:oi})}}static getLocalRtpCapabilities(e,t=[]){let r=et.extractRtpCapabilities({sdpObject:e});Ze.validateAndNormalizeRtpCapabilities(r),Mr.addNackSupportForOpus(r);for(let i of t)Mr.addHeaderExtensionSupport(r,i);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:d}){super(),y.debug("constructor()"),this._direction=e,this._remoteSdp=new no.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=d,i.role&&i.role!=="auto"&&(this._forcedLocalDtlsRole=i.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(y.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return ai}close(){if(y.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}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(),y.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),y.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});y.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();y.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:n,codec:a}){this.assertNotClosed(),this.assertSendDirection(),y.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((E,M)=>{E.rid=`r${M}`});let o=this._remoteSdp.getNextMediaSectionIdx(),c=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r}),d=await this._pc.createOffer(),p=G.parse(d.sdp);p.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let l=[];l.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let u=s.getLocalRtpCapabilities(p,l),f=this._getSendExtendedRtpCapabilities(u),m=Ze.getSendingRtpParameters(e.kind,f);m.codecs=Ze.reduceCodecs(m.codecs,a);let h=Ze.getSendingRemoteRtpParameters(e.kind,f);h.codecs=Ze.reduceCodecs(h.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:p});let _=!1,S=(0,io.parse)((r??[{}])[0].scalabilityMode),k;r?.length===1&&S.spatialLayers>1&&m.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(y.debug("send() | enabling legacy simulcast for VP9 SVC"),_=!0,p=G.parse(d.sdp),k=p.media[o.idx],Lr.addLegacySimulcast({offerMediaObject:k,numStreams:S.spatialLayers}),d={type:"offer",sdp:G.write(p)}),y.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),n?.absCaptureTime&&(k=p.media[o.idx],et.addHeaderExtension({offerMediaObject:k,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:h.headerExtensions.find(E=>E.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:G.write(p)}),await this._pc.setLocalDescription(d);let P=c.mid;if(m.mid=P,p=G.parse(this._pc.localDescription.sdp),k=p.media[o.idx],m.rtcp.cname=et.getCname({offerMediaObject:k}),m.msid=`${t??this._sendStream.id} ${e.id}`,!r)m.encodings=Lr.getRtpEncodings({offerMediaObject:k,codecs:m.codecs});else if(r.length===1){let E=Lr.getRtpEncodings({offerMediaObject:k,codecs:m.codecs});Object.assign(E[0],r[0]),_&&(E=[E[0]]),m.encodings=E}else m.encodings=r;if(m.encodings.length>1&&(m.codecs[0].mimeType.toLowerCase()==="video/vp8"||m.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let E of m.encodings)E.scalabilityMode?E.scalabilityMode=`L1T${S.temporalLayers}`:E.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:k,reuseMid:o.reuseMid,offerRtpParameters:m,answerRtpParameters:h,codecOptions:i});let I={type:"answer",sdp:this._remoteSdp.getSdp()};return y.debug("send() | calling pc.setRemoteDescription() [answer:%o]",I),await this._pc.setRemoteDescription(I),this._mapMidTransceiver.set(P,c),{localId:P,rtpParameters:m,rtpSender:c.sender}}async stopSending(e){if(this.assertSendDirection(),y.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let i=await this._pc.createOffer();y.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let n={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),y.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();y.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),y.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();y.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?y.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):y.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),y.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();y.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),y.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();y.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};y.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 new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};y.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%oi.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=G.parse(n.sdp),o=a.media.find(d=>d.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),y.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:d,rtpParameters:p,streamId:l}=o;y.debug("receive() [trackId:%s, kind:%s]",c,d);let u=p.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:f}=Mr.getMsidStreamIdAndTrackId(p.msid);this._remoteSdp.receive({mid:u,kind:d,offerRtpParameters:p,streamId:l??f??p.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);let n=await this._pc.createAnswer(),a=G.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:d}=o,p=r.get(c),l=a.media.find(u=>String(u.mid)===p);et.applyCodecParameters({offerRtpParameters:d,answerMediaObject:l})}n={type:"answer",sdp:G.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),y.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,d=r.get(c),p=this._pc.getTransceivers().find(l=>l.mid===d);if(p)this._mapMidTransceiver.set(d,p),t.push({localId:d,track:p.receiver.track,rtpReceiver:p.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){y.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();y.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){y.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();y.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){y.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();y.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 new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,d={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};y.debug("receiveDataChannel() [options:%o]",d);let p=this._pc.createDataChannel(r,d);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),f=G.parse(u.sdp),m=f.media.find(h=>h.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f}),u={type:"answer",sdp:G.write(f)},y.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:p}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=G.parse(this._pc.localDescription.sdp));let r=et.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),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");break}}};assertNotClosed(){if(this._closed)throw new so.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};It.Chrome74=Or});var hi=C(Mt=>{"use strict";Object.defineProperty(Mt,"__esModule",{value:!0});Mt.Firefox120=void 0;var de=ce(),ao=U(),oo=q(),di=V(),tt=ee(),co=we(),po=Ne(),Lt=je(),pi=Fe(),lo=qe(),T=new oo.Logger("Firefox120"),li="Firefox120",ui={OS:16,MIS:2048},Ar=class s extends ao.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:li,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{T.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"}),r=document.createElement("canvas");r.getContext("2d");let n=r.captureStream().getVideoTracks()[0];try{t.addTransceiver("audio",{direction:e}),t.addTransceiver(n,{direction:e,sendEncodings:[{rid:"r0",maxBitrate:1e5},{rid:"r1",maxBitrate:5e5}]});let a=await t.createOffer();try{r.remove()}catch{}try{n.stop()}catch{}try{t.close()}catch{}t=void 0;let o=de.parse(a.sdp);return s.getLocalRtpCapabilities(o)}catch(a){try{r.remove()}catch{}try{n.stop()}catch{}try{t?.close()}catch{}throw t=void 0,a}},getNativeSctpCapabilities:async()=>(T.debug("getNativeSctpCapabilities()"),{numStreams:ui})}}static getLocalRtpCapabilities(e){let t=Lt.extractRtpCapabilities({sdpObject:e});return tt.validateAndNormalizeRtpCapabilities(t),t}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:d}){super(),T.debug("constructor()"),this._direction=e,this._remoteSdp=new po.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=d,this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(T.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return li}close(){if(T.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}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 di.UnsupportedError("not supported")}async restartIce(e){if(this.assertNotClosed(),T.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});T.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();T.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,codec:n,onRtpSender:a}){this.assertNotClosed(),this.assertSendDirection(),T.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((k,P)=>{k.rid=`r${P}`});let o=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});a&&a(o.sender);let c=await this._pc.createOffer(),d=de.parse(c.sdp);d.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let p=s.getLocalRtpCapabilities(d),l=this._getSendExtendedRtpCapabilities(p),u=tt.getSendingRtpParameters(e.kind,l);u.codecs=tt.reduceCodecs(u.codecs,n);let f=tt.getSendingRemoteRtpParameters(e.kind,l);f.codecs=tt.reduceCodecs(f.codecs,n),this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:d});let m=(0,co.parse)((r??[{}])[0].scalabilityMode);T.debug("send() | calling pc.setLocalDescription() [offer:%o]",c),await this._pc.setLocalDescription(c);let h=o.mid;u.mid=h,d=de.parse(this._pc.localDescription.sdp);let _=d.media[d.media.length-1];if(u.rtcp.cname=Lt.getCname({offerMediaObject:_}),u.msid=`${t??this._sendStream.id} ${e.id}`,!r)u.encodings=pi.getRtpEncodings({offerMediaObject:_,codecs:u.codecs});else if(r.length===1){let k=pi.getRtpEncodings({offerMediaObject:_,codecs:u.codecs});Object.assign(k[0],r[0]),u.encodings=k}else u.encodings=r;if(u.encodings.length>1&&(u.codecs[0].mimeType.toLowerCase()==="video/vp8"||u.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let k of u.encodings)k.scalabilityMode?k.scalabilityMode=`L1T${m.temporalLayers}`:k.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:_,offerRtpParameters:u,answerRtpParameters:f,codecOptions:i});let S={type:"answer",sdp:this._remoteSdp.getSdp()};return T.debug("send() | calling pc.setRemoteDescription() [answer:%o]",S),await this._pc.setRemoteDescription(S),this._mapMidTransceiver.set(h,o),{localId:h,rtpParameters:u,rtpSender:o.sender}}async stopSending(e){if(this.assertSendDirection(),T.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new 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();T.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),T.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();T.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),T.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let r=await this._pc.createOffer();T.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?T.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):T.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),T.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated transceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();T.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),T.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();T.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};T.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 new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};T.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%ui.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=de.parse(n.sdp),o=a.media.find(d=>d.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:a}),T.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:d,rtpParameters:p,streamId:l}=o;T.debug("receive() [trackId:%s, kind:%s]",c,d);let u=p.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:f}=lo.getMsidStreamIdAndTrackId(p.msid);this._remoteSdp.receive({mid:u,kind:d,offerRtpParameters:p,streamId:l??f??p.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(let o of e){let{trackId:c,onRtpReceiver:d}=o;if(d){let p=r.get(c),l=this._pc.getTransceivers().find(u=>u.mid===p);if(!l)throw new Error("transceiver not found");d(l.receiver)}}let n=await this._pc.createAnswer(),a=de.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:d}=o,p=r.get(c),l=a.media.find(u=>String(u.mid)===p);Lt.applyCodecParameters({offerRtpParameters:d,answerMediaObject:l}),n={type:"answer",sdp:de.write(a)}}this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:a}),T.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,d=r.get(c),p=this._pc.getTransceivers().find(l=>l.mid===d);if(!p)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(d,p),t.push({localId:d,track:p.receiver.track,rtpReceiver:p.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){T.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();T.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){T.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();T.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){T.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();T.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 new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,d={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};T.debug("receiveDataChannel() [options:%o]",d);let p=this._pc.createDataChannel(r,d);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),f=de.parse(u.sdp),m=f.media.find(h=>h.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:f}),u={type:"answer",sdp:de.write(f)},T.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:p}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=de.parse(this._pc.localDescription.sdp));let r=Lt.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),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");break}}};assertNotClosed(){if(this._closed)throw new di.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};Mt.Firefox120=Ar});var gi=C(Ot=>{"use strict";Object.defineProperty(Ot,"__esModule",{value:!0});Ot.Safari12=void 0;var Q=ce(),uo=U(),ho=q(),rt=ee(),mo=V(),fo=we(),_o=Ne(),st=je(),mi=Fe(),Nr=qe(),b=new ho.Logger("Safari12"),fi="Safari12",_i={OS:65535,MIS:65535},jr=class s extends uo.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:fi,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{b.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let i=Q.parse(r.sdp);return s.getLocalRtpCapabilities(i)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(b.debug("getNativeSctpCapabilities()"),{numStreams:_i})}}static getLocalRtpCapabilities(e,t=[]){let r=st.extractRtpCapabilities({sdpObject:e});rt.validateAndNormalizeRtpCapabilities(r),Nr.addNackSupportForOpus(r);for(let i of t)Nr.addHeaderExtensionSupport(r,i);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:d}){super(),b.debug("constructor()"),this._direction=e,this._remoteSdp=new _o.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=d,i.role&&i.role!=="auto"&&(this._forcedLocalDtlsRole=i.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)}),this._pc.addEventListener("icecandidateerror",p=>{this.emit("@icecandidateerror",p)}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(b.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return fi}close(){if(b.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}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(),b.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),b.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});b.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:n,codec:a,onRtpSender:o}){this.assertNotClosed(),this.assertSendDirection(),b.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]});o&&o(d.sender);let p=await this._pc.createOffer(),l=Q.parse(p.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let u=[];u.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let f=s.getLocalRtpCapabilities(l,u),m=this._getSendExtendedRtpCapabilities(f),h=rt.getSendingRtpParameters(e.kind,m);h.codecs=rt.reduceCodecs(h.codecs,a);let _=rt.getSendingRemoteRtpParameters(e.kind,m);_.codecs=rt.reduceCodecs(_.codecs,a);let S;this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l});let k=(0,fo.parse)((r??[{}])[0].scalabilityMode);r&&r.length>1&&(b.debug("send() | enabling legacy simulcast"),l=Q.parse(p.sdp),S=l.media[c.idx],mi.addLegacySimulcast({offerMediaObject:S,numStreams:r.length}),p={type:"offer",sdp:Q.write(l)}),n?.absCaptureTime&&(S=l.media[c.idx],st.addHeaderExtension({offerMediaObject:S,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:_.headerExtensions.find(E=>E.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),p={type:"offer",sdp:Q.write(l)}),b.debug("send() | calling pc.setLocalDescription() [offer:%o]",p),await this._pc.setLocalDescription(p);let P=d.mid;if(h.mid=P,l=Q.parse(this._pc.localDescription.sdp),S=l.media[c.idx],h.rtcp.cname=st.getCname({offerMediaObject:S}),h.msid=`${t??this._sendStream.id} ${e.id}`,h.encodings=mi.getRtpEncodings({offerMediaObject:S,codecs:h.codecs}),r)for(let E=0;E<h.encodings.length;++E)r[E]&&Object.assign(h.encodings[E],r[E]);if(h.encodings.length>1&&(h.codecs[0].mimeType.toLowerCase()==="video/vp8"||h.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let E of h.encodings)E.scalabilityMode?E.scalabilityMode=`L1T${k.temporalLayers}`:E.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:S,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:_,codecOptions:i});let I={type:"answer",sdp:this._remoteSdp.getSdp()};return b.debug("send() | calling pc.setRemoteDescription() [answer:%o]",I),await this._pc.setRemoteDescription(I),this._mapMidTransceiver.set(P,d),{localId:P,rtpParameters:h,rtpSender:d.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;b.debug("stopSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let i=await this._pc.createOffer();b.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let n={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),b.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();b.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),b.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let r=await this._pc.createOffer();b.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?b.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):b.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),b.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();b.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),b.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();b.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};b.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 new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};b.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%_i.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=Q.parse(n.sdp),o=a.media.find(d=>d.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),b.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:d,rtpParameters:p,streamId:l}=o;b.debug("receive() [trackId:%s, kind:%s]",c,d);let u=p.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:f}=Nr.getMsidStreamIdAndTrackId(p.msid);this._remoteSdp.receive({mid:u,kind:d,offerRtpParameters:p,streamId:l??f??p.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(let o of e){let{trackId:c,onRtpReceiver:d}=o;if(d){let p=r.get(c),l=this._pc.getTransceivers().find(u=>u.mid===p);if(!l)throw new Error("transceiver not found");d(l.receiver)}}let n=await this._pc.createAnswer(),a=Q.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:d}=o,p=r.get(c),l=a.media.find(u=>String(u.mid)===p);st.applyCodecParameters({offerRtpParameters:d,answerMediaObject:l})}n={type:"answer",sdp:Q.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),b.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,d=r.get(c),p=this._pc.getTransceivers().find(l=>l.mid===d);if(!p)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(d,p),t.push({localId:d,track:p.receiver.track,rtpReceiver:p.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){b.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){b.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){b.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.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 new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,d={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};b.debug("receiveDataChannel() [options:%o]",d);let p=this._pc.createDataChannel(r,d);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),f=Q.parse(u.sdp),m=f.media.find(h=>h.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f}),u={type:"answer",sdp:Q.write(f)},b.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:p}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=Q.parse(this._pc.localDescription.sdp));let r=st.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),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");break}}};assertNotClosed(){if(this._closed)throw new mo.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};Ot.Safari12=jr});var yi=C(At=>{"use strict";Object.defineProperty(At,"__esModule",{value:!0});At.ReactNative106=void 0;var K=ce(),go=U(),vo=q(),it=ee(),wo=V(),yo=we(),bo=Ne(),nt=je(),Fr=Fe(),qr=qe(),w=new vo.Logger("ReactNative106"),vi="ReactNative106",wi={OS:65535,MIS:65535},zr=class s extends go.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:vi,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{w.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let i=K.parse(r.sdp);return s.getLocalRtpCapabilities(i)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(w.debug("getNativeSctpCapabilities()"),{numStreams:wi})}}static getLocalRtpCapabilities(e,t=[]){let r=nt.extractRtpCapabilities({sdpObject:e});it.validateAndNormalizeRtpCapabilities(r),qr.addNackSupportForOpus(r);for(let i of t)qr.addHeaderExtensionSupport(r,i);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:d}){super(),w.debug("constructor()"),this._direction=e,this._remoteSdp=new bo.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=d,i.role&&i.role!=="auto"&&(this._forcedLocalDtlsRole=i.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(w.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return vi}close(){if(w.debug("close()"),!this._closed){this._closed=!0,this._sendStream.release(!1);try{this._pc.close()}catch{}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(),w.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),w.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});w.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};w.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};w.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();w.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:n,codec:a,onRtpSender:o}){this.assertNotClosed(),this.assertSendDirection(),w.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((M,lt)=>{M.rid=`r${lt}`});let c=this._remoteSdp.getNextMediaSectionIdx(),d=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});o&&o(d.sender);let p=await this._pc.createOffer(),l=K.parse(p.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let u=[];u.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let f=s.getLocalRtpCapabilities(l,u),m=this._getSendExtendedRtpCapabilities(f),h=it.getSendingRtpParameters(e.kind,m);h.codecs=it.reduceCodecs(h.codecs,a);let _=it.getSendingRemoteRtpParameters(e.kind,m);_.codecs=it.reduceCodecs(_.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l});let S=!1,k=(0,yo.parse)((r??[{}])[0].scalabilityMode),P;r?.length===1&&k.spatialLayers>1&&h.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(w.debug("send() | enabling legacy simulcast for VP9 SVC"),S=!0,l=K.parse(p.sdp),P=l.media[c.idx],Fr.addLegacySimulcast({offerMediaObject:P,numStreams:k.spatialLayers}),p={type:"offer",sdp:K.write(l)}),n?.absCaptureTime&&(P=l.media[c.idx],nt.addHeaderExtension({offerMediaObject:P,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:_.headerExtensions.find(M=>M.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),p={type:"offer",sdp:K.write(l)}),w.debug("send() | calling pc.setLocalDescription() [offer:%o]",p),await this._pc.setLocalDescription(p);let I=d.mid??void 0;if(I||w.warn("send() | missing transceiver.mid (bug in react-native-webrtc, using a workaround"),h.mid=I,l=K.parse(this._pc.localDescription.sdp),P=l.media[c.idx],h.rtcp.cname=nt.getCname({offerMediaObject:P}),h.msid=`${t??this._sendStream.id} ${e.id}`,!r)h.encodings=Fr.getRtpEncodings({offerMediaObject:P,codecs:h.codecs});else if(r.length===1){let M=Fr.getRtpEncodings({offerMediaObject:P,codecs:h.codecs});Object.assign(M[0],r[0]),S&&(M=[M[0]]),h.encodings=M}else h.encodings=r;if(h.encodings.length>1&&(h.codecs[0].mimeType.toLowerCase()==="video/vp8"||h.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let M of h.encodings)M.scalabilityMode?M.scalabilityMode=`L1T${k.temporalLayers}`:M.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:P,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:_,codecOptions:i});let E={type:"answer",sdp:this._remoteSdp.getSdp()};return w.debug("send() | calling pc.setRemoteDescription() [answer:%o]",E),await this._pc.setRemoteDescription(E),I||(I=d.mid,h.mid=I),this._mapMidTransceiver.set(I,d),{localId:I,rtpParameters:h,rtpSender:d.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;w.debug("stopSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let i=await this._pc.createOffer();w.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let n={type:"answer",sdp:this._remoteSdp.getSdp()};w.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),w.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();w.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};w.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),w.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();w.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};w.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?w.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):w.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),w.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();w.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};w.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),w.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();w.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};w.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 new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};w.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%wi.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=K.parse(n.sdp),o=a.media.find(d=>d.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),w.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};w.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:d,rtpParameters:p,streamId:l}=o;w.debug("receive() [trackId:%s, kind:%s]",c,d);let u=p.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:f}=qr.getMsidStreamIdAndTrackId(p.msid);this._remoteSdp.receive({mid:u,kind:d,offerRtpParameters:p,streamId:l??f??p.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};w.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(let o of e){let{trackId:c,onRtpReceiver:d}=o;if(d){let p=r.get(c),l=this._pc.getTransceivers().find(u=>u.mid===p);if(!l)throw new Error("transceiver not found");d(l.receiver)}}let n=await this._pc.createAnswer(),a=K.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:d}=o,p=r.get(c),l=a.media.find(u=>String(u.mid)===p);nt.applyCodecParameters({offerRtpParameters:d,answerMediaObject:l})}n={type:"answer",sdp:K.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),w.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,d=r.get(c),p=this._pc.getTransceivers().find(l=>l.mid===d);if(p)this._mapMidTransceiver.set(d,p),t.push({localId:d,track:p.receiver.track,rtpReceiver:p.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){w.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};w.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();w.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){w.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};w.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();w.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){w.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};w.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();w.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 new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,d={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};w.debug("receiveDataChannel() [options:%o]",d);let p=this._pc.createDataChannel(r,d);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};w.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),f=K.parse(u.sdp),m=f.media.find(h=>h.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f}),u={type:"answer",sdp:K.write(f)},w.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:p}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=K.parse(this._pc.localDescription.sdp));let r=nt.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),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");break}}};assertNotClosed(){if(this._closed)throw new wo.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};At.ReactNative106=zr});var Ti=C(ze=>{"use strict";Object.defineProperty(ze,"__esModule",{value:!0});ze.Device=void 0;ze.detectDevice=bi;ze.detectDeviceAsync=Si;var So=q(),Ro=U(),he=V(),Nt=fe(),W=ee(),To=Ws(),Co=ni(),Eo=ci(),ko=hi(),xo=gi(),Po=yi(),v=new So.Logger("Device");function bi(s,e){return v.debug("detectDevice()"),!s&&typeof navigator=="object"&&(s=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),Ri(s,e)}async function Si(s,e){return v.debug("detectDeviceAsync()"),!s&&typeof navigator=="object"&&(s=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),Ri(s,e)}var $r=class s{_handlerFactory;_handlerName;_loaded=!1;_getSendExtendedRtpCapabilities;_recvRtpCapabilities;_sendRtpCapabilities;_canProduceByKind={audio:!1,video:!1};_sctpCapabilities;_observer=new Ro.EnhancedEventEmitter;static async factory({handlerName:e,handlerFactory:t}={}){if(v.debug("factory()"),e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(!e&&!t&&(e=await Si(),!e))throw new he.UnsupportedError("device not supported");return new s({handlerName:e,handlerFactory:t})}constructor({handlerName:e,handlerFactory:t}={}){if(v.debug("constructor()"),e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(t)this._handlerFactory=t;else{if(e)v.debug("constructor() | handler given: %s",e);else if(e=bi(),e)v.debug("constructor() | detected handler: %s",e);else throw new he.UnsupportedError("device not supported");switch(e){case"Chrome111":{this._handlerFactory=Co.Chrome111.createFactory();break}case"Chrome74":{this._handlerFactory=Eo.Chrome74.createFactory();break}case"Firefox120":{this._handlerFactory=ko.Firefox120.createFactory();break}case"Safari12":{this._handlerFactory=xo.Safari12.createFactory();break}case"ReactNative106":{this._handlerFactory=Po.ReactNative106.createFactory();break}default:throw new TypeError(`unknown handlerName "${e}"`)}}this._handlerName=this._handlerFactory.name}get handlerName(){return this._handlerName}get loaded(){return this._loaded}get rtpCapabilities(){return this.recvRtpCapabilities}get recvRtpCapabilities(){if(!this._loaded)throw new he.InvalidStateError("not loaded");return this._recvRtpCapabilities}get sendRtpCapabilities(){if(!this._loaded)throw new he.InvalidStateError("not loaded");return this._sendRtpCapabilities}get sctpCapabilities(){if(!this._loaded)throw new he.InvalidStateError("not loaded");return this._sctpCapabilities}get observer(){return this._observer}async load({routerRtpCapabilities:e,preferLocalCodecsOrder:t=!1}){if(v.debug("load() [routerRtpCapabilities:%o]",e),this._loaded)throw new he.InvalidStateError("already loaded");let r=Nt.clone(e);W.validateAndNormalizeRtpCapabilities(r);let{getNativeRtpCapabilities:i,getNativeSctpCapabilities:n}=this._handlerFactory,a=Nt.clone(await i({direction:"recvonly"}));v.debug("load() | got native receiving RTP capabilities:%o",a),W.validateAndNormalizeRtpCapabilities(a);let o=Nt.clone(await i({direction:"sendonly"}));v.debug("load() | got native sending RTP capabilities:%o",o),W.validateAndNormalizeRtpCapabilities(o),this._getSendExtendedRtpCapabilities=p=>Nt.clone(W.getExtendedRtpCapabilities(p,r,t));let c=W.getExtendedRtpCapabilities(a,r,!1);this._recvRtpCapabilities=W.getRecvRtpCapabilities(c),v.debug("load() | got receiving RTP capabilities:%o",this._recvRtpCapabilities),W.validateAndNormalizeRtpCapabilities(this._recvRtpCapabilities);let d=W.getExtendedRtpCapabilities(o,r,t);this._sendRtpCapabilities=W.getSendRtpCapabilities(d),v.debug("load() | got sending RTP capabilities:%o",this._sendRtpCapabilities),W.validateAndNormalizeRtpCapabilities(this._sendRtpCapabilities),this._canProduceByKind.audio=W.canSend("audio",this._sendRtpCapabilities),this._canProduceByKind.video=W.canSend("video",this._sendRtpCapabilities),this._sctpCapabilities=await n(),W.validateSctpCapabilities(this._sctpCapabilities),v.debug("load() | got native SCTP capabilities:%o",this._sctpCapabilities),v.debug("load() succeeded"),this._loaded=!0}canProduce(e){if(this._loaded){if(e!=="audio"&&e!=="video")throw new TypeError(`invalid kind "${e}"`)}else throw new he.InvalidStateError("not loaded");return this._canProduceByKind[e]}createSendTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:d}){return v.debug("createSendTransport()"),this.createTransport({direction:"send",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:d})}createRecvTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:d}){return v.debug("createRecvTransport()"),this.createTransport({direction:"recv",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:d})}createTransport({direction:e,id:t,iceParameters:r,iceCandidates:i,dtlsParameters:n,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:d,appData:p}){if(this._loaded){if(typeof t!="string")throw new TypeError("missing id");if(typeof r!="object")throw new TypeError("missing iceParameters");if(Array.isArray(i)){if(typeof n!="object")throw new TypeError("missing dtlsParameters");if(a&&typeof a!="object")throw new TypeError("wrong sctpParameters");if(p&&typeof p!="object")throw new TypeError("if given, appData must be an object")}else throw new TypeError("missing iceCandidates")}else throw new he.InvalidStateError("not loaded");let l=new To.Transport({direction:e,id:t,iceParameters:r,iceCandidates:i,dtlsParameters:n,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:d,appData:p,handlerFactory:this._handlerFactory,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities,recvRtpCapabilities:this._recvRtpCapabilities,canProduceByKind:this._canProduceByKind});return this._observer.safeEmit("newtransport",l),l}};ze.Device=$r;function Ri(s,e){v.debug('detectDeviceImpl() [userAgent:"%s", userAgentData:%o]',s,e);let t=Do(s,e);if(t){if(t>=111)return v.debug("detectDeviceImpl() | using Chrome111 handler"),"Chrome111";if(t>=74)return v.debug("detectDeviceImpl() | using Chrome74 handler"),"Chrome74";v.warn("detectDeviceImpl() | unsupported Chromium based browser/version");return}let r=Io(s);if(r){if(r>=120)return v.debug("detectDeviceImpl() | using Firefox120 handler"),"Firefox120";v.warn("detectDeviceImpl() | unsupported Firefox browser/version");return}let i=Lo(s);if(i){if(i>=605)return v.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";v.warn("detectDeviceImpl() | unsupported desktop Safari browser/version");return}let n=Mo(s);if(n){if(n>=605)return v.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";v.warn("detectDeviceImpl() | unsupported iOS Safari based browser/version");return}if(at()){if(typeof RTCPeerConnection<"u"&&typeof RTCRtpTransceiver<"u")return v.debug("detectDeviceImpl() | using ReactNative106 handler"),"ReactNative106";v.warn("detectDeviceImpl() | unsupported react-native-webrtc version without RTCPeerConnection or RTCRtpTransceiver, forgot to call registerGlobals() on it?");return}v.warn('detectDeviceImpl() | device not supported [userAgent:"%s", userAgentData:%o]',s,e)}function Do(s,e){if(v.debug("getChromiumMajorVersion()"),jt(s,e)){v.debug("getChromiumMajorVersion() | this is iOS => undefined");return}if(at()){v.debug("getChromiumMajorVersion() | this is React-Native => undefined");return}if(e){let i=(Array.isArray(e.brands)?e.brands:[]).find(n=>n.brand==="Chromium");if(i){let n=Number(i.version);return v.debug(`getChromiumMajorVersion() | Chromium major version based on NavigatorUAData => ${n}`),n}}let t=s?.match(/\b(?:Chrome|Chromium)\/(\w+)/i);if(t?.[1]){let r=Number(t[1]);return v.debug(`getChromiumMajorVersion() | Chromium major version based on User-Agent => ${r}`),r}v.debug("getChromiumMajorVersion() | this is not Chromium => undefined")}function Io(s){if(v.debug("getFirefoxMajorVersion()"),jt(s)){v.debug("getFirefoxMajorVersion() | this is iOS => undefined");return}if(at()){v.debug("getFirefoxMajorVersion() | this is React-Native => undefined");return}let e=s?.match(/\bFirefox\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return v.debug(`getFirefoxMajorVersion() | Firefox major version based on User-Agent => ${t}`),t}v.debug("getFirefoxMajorVersion() | this is not Firefox => undefined")}function Lo(s){if(v.debug("getMacOSWebKitMajorVersion()"),jt(s)){v.debug("getMacOSWebKitMajorVersion() | this is iOS => undefined");return}if(at()){v.debug("getMacOSWebKitMajorVersion() | this is React-Native => undefined");return}if(!(s&&/\bSafari\b/i.test(s)&&!/\bChrome\b/i.test(s)&&!/\bChromium\b/i.test(s)&&!/\bFirefox\b/i.test(s))){v.debug("getMacOSWebKitMajorVersion() | this is not Safari => undefined");return}let t=s.match(/AppleWebKit\/(\w+)/i);if(t?.[1]){let r=Number(t[1]);return v.debug(`getMacOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${r}`),r}v.debug("getMacOSWebKitMajorVersion() | this is not WebKit => undefined")}function Mo(s){if(v.debug("getIOSWebKitMajorVersion()"),!jt(s)){v.debug("getIOSWebKitMajorVersion() | this is not iOS => undefined");return}if(at()){v.debug("getIOSWebKitMajorVersion() | this is React-Native => undefined");return}let e=s?.match(/AppleWebKit\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return v.debug(`getIOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${t}`),t}v.debug("getIOSWebKitMajorVersion() | this is not WebKit => undefined")}function jt(s,e){return v.debug("isIOS()"),e?.platform==="iOS"?(v.debug("isIOS() | this is iOS based on NavigatorUAData.platform => true"),!0):e?.platform?(v.debug("isIOS() | this is not iOS based on NavigatorUAData.platform => false"),!1):s&&/iPad|iPhone|iPod/.test(s)?(v.debug("isIOS() | this is iOS based on User-Agent => true"),!0):typeof navigator=="object"&&navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1?(v.debug("isIOS() | this is iPadOS 13+ based on User-Agent => true"),!0):(v.debug("isIOS() | this is not iOS => false"),!1)}function at(){return v.debug("isReactNative()"),typeof navigator=="object"&&navigator.product==="ReactNative"?(v.debug("isReactNative() | this is React-Native based on navigator.product"),!0):(v.debug("isReactNative() | this is not React-Native => false"),!1)}});var Ei=C(Ci=>{"use strict";var be=256,qt=[],Ft;for(;be--;)qt[be]=(be+256).toString(16).substring(1);function Oo(){var s=0,e,t="";if(!Ft||be+16>256){for(Ft=Array(s=256);s--;)Ft[s]=256*Math.random()|0;s=be=0}for(;s<16;s++)e=Ft[be+s],s==6?t+=qt[e&15|64]:s==8?t+=qt[e&63|128]:t+=qt[e],s&1&&s>1&&s<11&&(t+="-");return be++,t}Ci.v4=Oo});var ki=C(zt=>{"use strict";Object.defineProperty(zt,"__esModule",{value:!0});zt.FakeEventTarget=void 0;var Br=class{listeners={};addEventListener(e,t,r){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof r=="object"&&r.once===!0}))}removeEventListener(e,t,r){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(i=>i.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new 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(i){setTimeout(()=>{throw i},0)}r.once&&this.removeEventListener(e.type,r.callback)}return!e.defaultPrevented}};zt.FakeEventTarget=Br});var xi=C($t=>{"use strict";Object.defineProperty($t,"__esModule",{value:!0});$t.FakeEvent=void 0;var Ur=class{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){}};$t.FakeEvent=Ur});var Pi=C(Wr=>{"use strict";Object.defineProperty(Wr,"__esModule",{value:!0});Wr.clone=Ao;function Ao(s){if(s!==void 0)return Number.isNaN(s)?NaN:typeof structuredClone=="function"?structuredClone(s):JSON.parse(JSON.stringify(s))}});var Ii=C(Ut=>{"use strict";Object.defineProperty(Ut,"__esModule",{value:!0});Ut.FakeMediaStreamTrack=void 0;var Di=Ei(),No=ki(),$e=xi(),Bt=Pi(),Hr=class s extends No.FakeEventTarget{#f;#l;#u;#e;#r;#t;#s;#h;#i;#m;#n;#a=null;#o=null;#c=null;#d=null;#p=null;constructor({kind:e,id:t,label:r,contentHint:i,enabled:n,muted:a,readyState:o,capabilities:c,constraints:d,settings:p,data:l}){super(),this.#f=t??(0,Di.v4)(),this.#l=e,this.#u=r??"",this.#s=i??"",this.#r=n??!0,this.#t=a??!1,this.#e=o??"live",this.#h=c??{},this.#i=d??{},this.#m=p??{},this.#n=l??{}}get id(){return this.#f}get kind(){return this.#l}get label(){return this.#u}get contentHint(){return this.#s}set contentHint(e){this.#s=e}get enabled(){return this.#r}set enabled(e){let t=this.#r!==e;this.#r=e,t&&this.dispatchEvent(new $e.FakeEvent("enabledchange"))}get muted(){return this.#t}get readyState(){return this.#e}get data(){return this.#n}set data(e){this.#n=e}get onmute(){return this.#a}set onmute(e){this.#a&&this.removeEventListener("mute",this.#a),this.#a=e,e&&this.addEventListener("mute",e)}get onunmute(){return this.#o}set onunmute(e){this.#o&&this.removeEventListener("unmute",this.#o),this.#o=e,e&&this.addEventListener("unmute",e)}get onended(){return this.#c}set onended(e){this.#c&&this.removeEventListener("ended",this.#c),this.#c=e,e&&this.addEventListener("ended",e)}get onenabledchange(){return this.#d}set onenabledchange(e){this.#d&&this.removeEventListener("enabledchange",this.#d),this.#d=e,e&&this.addEventListener("enabledchange",e)}get onstopped(){return this.#p}set onstopped(e){this.#p&&this.removeEventListener("stopped",this.#p),this.#p=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(){this.#e!=="ended"&&(this.#e="ended",this.dispatchEvent(new $e.FakeEvent("stopped")))}clone({id:e,data:t}={}){return new s({id:e??(0,Di.v4)(),kind:this.#l,label:this.#u,contentHint:this.#s,enabled:this.#r,muted:this.#t,readyState:this.#e,capabilities:(0,Bt.clone)(this.#h),constraints:(0,Bt.clone)(this.#i),settings:(0,Bt.clone)(this.#m),data:t??(0,Bt.clone)(this.#n)})}getCapabilities(){return this.#h}getConstraints(){return this.#i}async applyConstraints(e={}){return this.#i=e,Promise.resolve()}getSettings(){return this.#m}remoteStop(){this.#e!=="ended"&&(this.#e="ended",this.dispatchEvent(new $e.FakeEvent("stopped")),this.dispatchEvent(new $e.FakeEvent("ended")))}remoteMute(){this.#t||(this.#t=!0,this.dispatchEvent(new $e.FakeEvent("mute")))}remoteUnmute(){this.#t&&(this.#t=!1,this.dispatchEvent(new $e.FakeEvent("unmute")))}};Ut.FakeMediaStreamTrack=Hr});var Li=C(Wt=>{"use strict";Object.defineProperty(Wt,"__esModule",{value:!0});Wt.FakeEventTarget=void 0;var Vr=class{listeners={};addEventListener(e,t,r){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof r=="object"&&r.once===!0}))}removeEventListener(e,t,r){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(i=>i.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new 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(i){setTimeout(()=>{throw i},0)}r.once&&this.removeEventListener(e.type,r.callback)}return!e.defaultPrevented}};Wt.FakeEventTarget=Vr});var Ai=C(Vt=>{"use strict";Object.defineProperty(Vt,"__esModule",{value:!0});Vt.FakeHandler=void 0;var jo=Ii(),Fo=U(),qo=q(),Be=fe(),Gr=ee(),Oi=V(),zo=Li(),j=new qo.Logger("FakeHandler"),Mi="FakeHandler",Qr=class s extends Fo.EnhancedEventEmitter{_closed=!1;_fakeParameters;_getSendExtendedRtpCapabilities;_cname=`CNAME-${Be.generateRandomNumber()}`;_defaultSendStreamId=`${Be.generateRandomNumber()}`;_transportReady=!1;_nextLocalId=1;_tracks=new Map;_nextSctpStreamId=0;static createFactory(e){return{name:Mi,factory:t=>new s(t,e),getNativeRtpCapabilities:async({direction:t})=>(j.debug("getNativeRtpCapabilities() [direction:%o]",t),s.getLocalRtpCapabilities(e)),getNativeSctpCapabilities:async()=>(j.debug("getNativeSctpCapabilities()"),e.generateNativeSctpCapabilities())}}static getLocalRtpCapabilities(e){let t=e.generateNativeRtpCapabilities();return Gr.validateAndNormalizeRtpCapabilities(t),t}constructor({getSendExtendedRtpCapabilities:e},t){super(),j.debug("constructor()"),this._getSendExtendedRtpCapabilities=e,this._fakeParameters=t}get name(){return Mi}close(){j.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(),j.debug("updateIceServers()")}async restartIce(e){this.assertNotClosed(),j.debug("restartIce()")}async getTransportStats(){return this.assertNotClosed(),new Map}async send({track:e,streamId:t,encodings:r,codecOptions:i,codec:n}){this.assertNotClosed(),j.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),this._transportReady||await this.setupTransport({localDtlsRole:"server"});let a=s.getLocalRtpCapabilities(this._fakeParameters),o=this._getSendExtendedRtpCapabilities(a),c=Gr.getSendingRtpParameters(e.kind,o);c.codecs=Gr.reduceCodecs(c.codecs,n);let d=c.codecs.some(l=>/.+\/rtx$/i.test(l.mimeType));c.mid=`mid-${Be.generateRandomNumber()}`,c.msid=`${t??"-"} ${e.id}`,r||(r=[{}]);for(let l of r)l.ssrc=Be.generateRandomNumber(),d&&(l.rtx={ssrc:Be.generateRandomNumber()});c.encodings=r,c.rtcp={cname:this._cname,reducedSize:!0,mux:!0},c.msid=`${t??this._defaultSendStreamId} ${e.id}`;let p=this._nextLocalId++;return this._tracks.set(p,e),{localId:String(p),rtpParameters:c}}async stopSending(e){if(j.debug("stopSending() [localId:%s]",e),!this._closed){if(!this._tracks.has(Number(e)))throw new 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?j.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):j.debug("replaceTrack() [localId:%s, no track]",e),this._tracks.delete(Number(e)),this._tracks.set(Number(e),t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),j.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),j.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t)}async getSenderStats(e){return this.assertNotClosed(),new Map}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this._transportReady||await this.setupTransport({localDtlsRole:"server"}),j.debug("sendDataChannel()");let t=new Ht({id:this._nextSctpStreamId++,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:e.label,protocol:e.protocol}),r={streamId:this._nextSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits};return{dataChannel:t,sctpStreamParameters:r}}async receive(e){this.assertNotClosed();let t=[];for(let r of e){let{trackId:i,kind:n}=r;this._transportReady||await this.setupTransport({localDtlsRole:"client"}),j.debug("receive() [trackId:%s, kind:%s]",i,n);let a=this._nextLocalId++,o=new jo.FakeMediaStreamTrack({kind:n});this._tracks.set(a,o),t.push({localId:String(a),track:o})}return t}async stopReceiving(e){if(!this._closed)for(let t of e)j.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"}),j.debug("receiveDataChannel()"),{dataChannel:new Ht({id:e.streamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:t,protocol:r})}}getDataChannelMaxMessageSize(){return 5e5}async setupTransport({localDtlsRole:e,localSdpObject:t}){let r=Be.clone(this._fakeParameters.generateLocalDtlsParameters());e&&(r.role=e),this.emit("@connectionstatechange","connecting"),await new Promise((i,n)=>this.emit("@connect",{dtlsParameters:r},i,n)),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new Oi.InvalidStateError("method called in a closed handler")}};Vt.FakeHandler=Qr;var Ht=class extends zo.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:n="",protocol:a=""}){super(),j.debug(`constructor() [id:${e}, ordered:${t}, maxPacketLifeTime:${r}, maxRetransmits:${i}, label:${n}, protocol:${a}`),this._id=e,this._ordered=t,this._maxPacketLifeTime=r,this._maxRetransmits=i,this._label=n,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(this._readyState!=="open")throw new Oi.InvalidStateError("not open")}}});var Ni=C(Z=>{"use strict";Object.defineProperty(Z,"__esModule",{value:!0});Z.generateRouterRtpCapabilities=$o;Z.generateNativeRtpCapabilities=Bo;Z.generateNativeSctpCapabilities=Uo;Z.generateLocalDtlsParameters=Wo;Z.generateTransportRemoteParameters=Ho;Z.generateProducerRemoteParameters=Vo;Z.generateConsumerRemoteParameters=Go;Z.generateDataProducerRemoteParameters=Qo;Z.generateDataConsumerRemoteParameters=Ko;var $=fe();function H(){return String($.generateRandomNumber())}function $o(){return $.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"}]})}function Bo(){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}]}}function Uo(){return $.deepFreeze({numStreams:{OS:2048,MIS:2048}})}function Wo(){return $.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"})}function Ho(){return{id:H(),iceParameters:$.deepFreeze({iceLite:!0,password:"yku5ej8nvfaor28lvtrabcx0wkrpkztz",usernameFragment:"h3hk1iz6qqlnqlne"}),iceCandidates:$.deepFreeze([{foundation:"udpcandidate",address:"9.9.9.9",ip:"9.9.9.9",port:40533,priority:1078862079,protocol:"udp",type:"host",tcpType:"passive"},{foundation:"udpcandidate",address:"9.9.9.9",ip:"9:9:9:9:9:9",port:41333,priority:1078862089,protocol:"udp",type:"host",tcpType:"passive"}]),dtlsParameters:$.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:$.deepFreeze({port:5e3,OS:2048,MIS:2048,maxMessageSize:2e6})}}function Vo(){return $.deepFreeze({id:H()})}function Go({id:s,codecMimeType:e}={}){switch(e){case"audio/opus":return{id:s??H(),producerId:H(),kind:"audio",rtpParameters:$.deepFreeze({codecs:[{mimeType:"audio/opus",payloadType:100,clockRate:48e3,channels:2,rtcpFeedback:[{type:"transport-cc"}],parameters:{useinbandfec:1,foo:"bar"}}],encodings:[{ssrc:46687003}],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:s??H(),producerId:H(),kind:"audio",rtpParameters:$.deepFreeze({codecs:[{mimeType:"audio/ISAC",payloadType:111,clockRate:16e3,channels:1,rtcpFeedback:[{type:"transport-cc"}],parameters:{}}],encodings:[{ssrc:46687004}],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:s??H(),producerId:H(),kind:"video",rtpParameters:$.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:99991111,rtx:{ssrc:99991112}}],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:s??H(),producerId:H(),kind:"video",rtpParameters:$.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:99991113,rtx:{ssrc:99991114}}],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 new TypeError(`unknown codecMimeType '${e}'`)}}function Qo(){return $.deepFreeze({id:H()})}function Ko({id:s}={}){return{id:s??H(),dataProducerId:H(),sctpStreamParameters:$.deepFreeze({streamId:666,maxPacketLifeTime:5e3,maxRetransmits:void 0})}}});var Pr=C(L=>{"use strict";Object.defineProperty(L,"__esModule",{value:!0});L.debug=L.testFakeParameters=L.FakeHandler=L.enhancedEvents=L.ortc=L.parseScalabilityMode=L.detectDeviceAsync=L.detectDevice=L.Device=L.version=L.types=void 0;var Yo=require("debug");L.debug=Yo.default;L.types=os();L.version="3.20.0";var Kr=Ti();Object.defineProperty(L,"Device",{enumerable:!0,get:function(){return Kr.Device}});Object.defineProperty(L,"detectDevice",{enumerable:!0,get:function(){return Kr.detectDevice}});Object.defineProperty(L,"detectDeviceAsync",{enumerable:!0,get:function(){return Kr.detectDeviceAsync}});var Jo=we();Object.defineProperty(L,"parseScalabilityMode",{enumerable:!0,get:function(){return Jo.parse}});L.ortc=ee();L.enhancedEvents=U();var Xo=Ai();Object.defineProperty(L,"FakeHandler",{enumerable:!0,get:function(){return Xo.FakeHandler}});L.testFakeParameters=Ni()});var Fi=C((fd,Yr)=>{"use strict";var Zo=Object.prototype.hasOwnProperty,B="~";function ot(){}Object.create&&(ot.prototype=Object.create(null),new ot().__proto__||(B=!1));function ec(s,e,t){this.fn=s,this.context=e,this.once=t||!1}function ji(s,e,t,r,i){if(typeof t!="function")throw new TypeError("The listener must be a function");var n=new ec(t,r||s,i),a=B?B+e:e;return s._events[a]?s._events[a].fn?s._events[a]=[s._events[a],n]:s._events[a].push(n):(s._events[a]=n,s._eventsCount++),s}function Gt(s,e){--s._eventsCount===0?s._events=new ot:delete s._events[e]}function F(){this._events=new ot,this._eventsCount=0}F.prototype.eventNames=function(){var e=[],t,r;if(this._eventsCount===0)return e;for(r in t=this._events)Zo.call(t,r)&&e.push(B?r.slice(1):r);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};F.prototype.listeners=function(e){var t=B?B+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var i=0,n=r.length,a=new Array(n);i<n;i++)a[i]=r[i].fn;return a};F.prototype.listenerCount=function(e){var t=B?B+e:e,r=this._events[t];return r?r.fn?1:r.length:0};F.prototype.emit=function(e,t,r,i,n,a){var o=B?B+e:e;if(!this._events[o])return!1;var c=this._events[o],d=arguments.length,p,l;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),d){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,r),!0;case 4:return c.fn.call(c.context,t,r,i),!0;case 5:return c.fn.call(c.context,t,r,i,n),!0;case 6:return c.fn.call(c.context,t,r,i,n,a),!0}for(l=1,p=new Array(d-1);l<d;l++)p[l-1]=arguments[l];c.fn.apply(c.context,p)}else{var u=c.length,f;for(l=0;l<u;l++)switch(c[l].once&&this.removeListener(e,c[l].fn,void 0,!0),d){case 1:c[l].fn.call(c[l].context);break;case 2:c[l].fn.call(c[l].context,t);break;case 3:c[l].fn.call(c[l].context,t,r);break;case 4:c[l].fn.call(c[l].context,t,r,i);break;default:if(!p)for(f=1,p=new Array(d-1);f<d;f++)p[f-1]=arguments[f];c[l].fn.apply(c[l].context,p)}}return!0};F.prototype.on=function(e,t,r){return ji(this,e,t,r,!1)};F.prototype.once=function(e,t,r){return ji(this,e,t,r,!0)};F.prototype.removeListener=function(e,t,r,i){var n=B?B+e:e;if(!this._events[n])return this;if(!t)return Gt(this,n),this;var a=this._events[n];if(a.fn)a.fn===t&&(!i||a.once)&&(!r||a.context===r)&&Gt(this,n);else{for(var o=0,c=[],d=a.length;o<d;o++)(a[o].fn!==t||i&&!a[o].once||r&&a[o].context!==r)&&c.push(a[o]);c.length?this._events[n]=c.length===1?c[0]:c:Gt(this,n)}return this};F.prototype.removeAllListeners=function(e){var t;return e?(t=B?B+e:e,this._events[t]&&Gt(this,t)):(this._events=new ot,this._eventsCount=0),this};F.prototype.off=F.prototype.removeListener;F.prototype.addListener=F.prototype.on;F.prefixed=B;F.EventEmitter=F;typeof Yr<"u"&&(Yr.exports=F)});var Tc={};_n(Tc,{ChannelMultiplexer:()=>Ue,DeferredChannelMultiplexer:()=>Qt,DeferredDocConnector:()=>er,LoopbackStreamData:()=>Xt,SessionDocumentImpl:()=>rr,TransportSession:()=>Zt,createPresence:()=>pn,createWebsocketDocConnector:()=>cn,deriveYjsServerUrl:()=>on,ensureNodeWebRTC:()=>Jt,isNodeRuntime:()=>We,nodeMediasoupHandlerName:()=>Yt,streamDataLabel:()=>nn,transportStreamData:()=>Gi});module.exports=gn(Tc);var sn=He(Pr());var Jr=He(Fi(),1);var Ue=class{_handlers=new Map;_ws;_onMessage;_onOpen;_listeningForOpen=!1;_pendingSends=[];_disposed=!1;constructor(e){this._ws=e,this._onMessage=t=>{if(typeof t.data!="string")return;let r;try{r=JSON.parse(t.data)}catch{console.warn("[ChannelMultiplexer] Failed to parse WebSocket message as JSON");return}if(!r.channel)return;let i=this._handlers.get(r.channel);if(i)for(let n of i)n(r)},this._ws.addEventListener("message",this._onMessage),this._onOpen=()=>{this.flushPendingSends()}}on(e,t){let r=this._handlers.get(e);return r||(r=new Set,this._handlers.set(e,r)),r.add(t),()=>{r.delete(t),r.size===0&&this._handlers.delete(e)}}emit(e,t){if(this._disposed)return;let r=JSON.stringify({channel:e,...t});if(this._ws.readyState===WebSocket.OPEN){this._ws.send(r);return}this._ws.readyState===WebSocket.CONNECTING&&(this._pendingSends.push(r),this.listenForOpen())}dispose(){this._disposed=!0,this._pendingSends=[],this._handlers.clear(),this._ws.removeEventListener("message",this._onMessage),this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1}flushPendingSends(){if(this._disposed||this._ws.readyState!==WebSocket.OPEN)return;this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1;let e=this._pendingSends;this._pendingSends=[];for(let t of e)this._ws.send(t)}listenForOpen(){this._listeningForOpen||(this._listeningForOpen=!0,this._ws.addEventListener("open",this._onOpen))}},Qt=class{_handlers=new Map;_pendingSends=[];_target=null;_targetUnsubscribes=[];_disposed=!1;setTarget(e){if(this._disposed)return;this.detachTarget(),this._target=e;for(let[r,i]of this._handlers)for(let n of i)this._targetUnsubscribes.push(e.on(r,n));let t=this._pendingSends;this._pendingSends=[];for(let r of t)e.emit(r.channel,r.data)}rewriteSessionChannels(e,t){if(e===t)return;let r=`session:${e}:`,i=`session:${t}:`,n=new Map;for(let[a,o]of this._handlers)n.set(a.startsWith(r)?i+a.slice(r.length):a,o);this._handlers=n,this._pendingSends=this._pendingSends.map(a=>({...a,channel:a.channel.startsWith(r)?i+a.channel.slice(r.length):a.channel}))}on(e,t){if(this._disposed)return()=>{};let r=this._handlers.get(e);r||(r=new Set,this._handlers.set(e,r)),r.add(t);let i=this._target?.on(e,t);return i&&this._targetUnsubscribes.push(i),()=>{r?.delete(t),r?.size===0&&this._handlers.delete(e),i?.(),i&&(this._targetUnsubscribes=this._targetUnsubscribes.filter(n=>n!==i))}}emit(e,t){if(!this._disposed){if(this._target){this._target.emit(e,t);return}this._pendingSends.push({channel:e,data:t})}}dispose(){this._disposed=!0,this._pendingSends=[],this._handlers.clear(),this.detachTarget()}detachTarget(){for(let e of this._targetUnsubscribes)e();this._targetUnsubscribes=[],this._target=null}};function We(){return typeof window>"u"&&typeof process<"u"&&process.versions!=null&&process.versions.node!=null}function Yt(){return We()?"Chrome111":void 0}var tc=["RTCSessionDescription","RTCIceCandidate","RTCRtpReceiver","RTCRtpSender","RTCRtpTransceiver","RTCDataChannel","MediaStream","MediaStreamTrack"],Kt=null;function Jt(){return We()?Kt||(Kt=rc(),Kt):Promise.resolve()}async function rc(){let s=globalThis;if(typeof s.WebSocket>"u")try{let e=await import("ws"),t=e.default??e;s.WebSocket=t}catch(e){qi("WebSocket",e)}if(typeof s.RTCPeerConnection>"u")try{let e=await import("werift");sc(s,e)}catch(e){qi("werift",e)}}function sc(s,e){let{RTCPeerConnection:t,useH264:r,useVP8:i,useOPUS:n,useSdesMid:a,useSdesRTPStreamId:o,useAbsSendTime:c,useTransportWideCC:d,useVideoOrientation:p}=e,l=()=>({video:[r(),i()],audio:[n()]}),u=()=>({video:[a(),o(),c(),d(),p()],audio:[a(),c(),d()]});class f extends t{constructor(h){super({...h,codecs:h?.codecs??l(),headerExtensions:h?.headerExtensions??u()})}}s.RTCPeerConnection=f;for(let m of tc)e[m]!=null&&typeof s[m]>"u"&&(s[m]=e[m])}function qi(s,e){let t=e instanceof Error?e.message:String(e);console.warn(`[urun-sh/core] Node WebRTC support: optional dependency "${s}" unavailable (${t}). Realtime media will not work in this Node process; install "${s}" to enable it. Doc/KV transport over WebSocket is unaffected.`)}var zi="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";function ic(s){let e=globalThis.crypto,t=new Uint8Array(s);if(e?.getRandomValues)return e.getRandomValues(t),t;for(let r=0;r<s;r++)t[r]=Math.floor(Math.random()*256);return t}function $i(s=16){let e=ic(s),t="";for(let r=0;r<s;r++)t+=zi[e[r]%zi.length];return t}function Bi(s){return`stream:${s}`}var Ui="urun-stream-v1";var Xr=1,pe={BINARY:0,TEXT:1,JSON:2,END:3},Wi=Symbol("urun:stream:end");function Hi(s){if(s===Wi)return Uint8Array.from([Xr,pe.END]);let e,t;s instanceof Uint8Array?(e=pe.BINARY,t=s):s instanceof ArrayBuffer?(e=pe.BINARY,t=new Uint8Array(s)):typeof s=="string"?(e=pe.TEXT,t=new TextEncoder().encode(s)):(e=pe.JSON,t=new TextEncoder().encode(JSON.stringify(s)));let r=new Uint8Array(2+t.length);return r[0]=Xr,r[1]=e,r.set(t,2),r}function Vi(s){let e=s instanceof Uint8Array?s:new Uint8Array(s);if(e.length<2||e[0]!==Xr)throw new Error(`[urun] bad stream envelope (version=${e[0]}, len=${e.length})`);let t=e[1],r=e.subarray(2);switch(t){case pe.BINARY:return r.slice();case pe.TEXT:return new TextDecoder().decode(r);case pe.JSON:return JSON.parse(new TextDecoder().decode(r));case pe.END:return Wi;default:throw new Error(`[urun] unknown stream envelope KIND 0x${t.toString(16)}`)}}var Xt=class{consumerId;_handlers=new Map;constructor(e="loopback"){this.consumerId=e}onData(e,t){let r=this._handlers.get(e);return r||(r=new Set,this._handlers.set(e,r)),r.add(t),()=>r.delete(t)}sendData(e,t,r={}){r.to&&(r.to,this.consumerId);for(let i of this._handlers.get(e)??[])i(t);return Promise.resolve()}};function Gi(s){return{get consumerId(){return s.consumerId},onData(e,t){return s.onStreamData(e,t)},sendData(e,t,r){return s.sendStreamData(e,t,r)}}}var Qi=[1e3,2e3,4e3,8e3,3e4],Ki=5,nc=15e3,Yi=15e3,Ji=15e3,ac=2e3,oc=6e3,cc=2,dc=750,pc=3,Xi=[1e3,2e3,4e3],lc=15e3;function nn(s){return`stream:${s}`}var uc={queued:"queued",pending:"provisioning",allocating:"provisioning",provisioning:"provisioning",allocated:"connecting",connecting:"connecting",live:"live",running:"live",failed:"error",rejected:"error",expired:"error",cancelled:"ended",canceled:"ended",closed:"ended"},Zi=3,en=4e3,tn=[{urls:"stun:stun.l.google.com:19302"},{urls:"stun:stun1.l.google.com:19302"}],Zt=class{_state="disconnected";_sessionId=null;_tracks=new Map;_tracksByName=new Map;_options;_emitter=new Jr.default;_ws=null;_device=null;_recvTransport=null;_sendTransport=null;_consumers=new Map;_audioProducer=null;_videoProducer=null;_pendingProduce=null;_multiplexer=null;_reconnectAttempts=0;_intentionalDisconnect=!1;_reconnectTimer=null;_cancelPendingDial=null;_stableResetTimer=null;_generation=0;_lastStartOptions;_resolveConnection=null;_recvIceRestartAttempts=0;_recvIceRestartTimer=null;_sendIceRestartAttempts=0;_sendIceRestartTimer=null;_phase={name:"idle"};_requestId;_liveReached=!1;_lastServerStatus;_forceResolveOnNextConnect=!1;_connectStartedAt;_mediaMonitorTimer=null;_lastInboundTotal=0;_mediaEverFlowed=!1;_lastInboundAdvanceAt=0;_mediaDeathHandled=!1;_decodeSignalSeen=!1;_lastFramesDecoded=0;_lastDecodeAdvanceAt=0;_decodeDeathHandled=!1;_currentEpoch=0;_consumerId=null;_pendingStreamSubscribes=new Set;_streamDataHandlers=new Map;_dataProducers=new Map;_dataProducerPromises=new Map;_dataConsumers=new Map;_pendingDataProduce=new Map;_sendTransportWaiters=[];get consumerId(){return this._consumerId===null&&(this._consumerId=hc()),this._consumerId}get state(){return this._state}get currentIncarnation(){return this._currentEpoch}get phase(){return this._phase}get status(){let e={phase:this._phase.name,transportState:this._state};return this._sessionId&&(e.sessionId=this._sessionId),this._requestId&&(e.requestId=this._requestId),this._lastServerStatus!==void 0&&(e.lastServerStatus=this._lastServerStatus),this._connectStartedAt!==void 0&&(e.elapsedMs=Date.now()-this._connectStartedAt),this._phase.queue&&(e.queue=this._phase.queue),this._phase.runtime&&(e.runtime=this._phase.runtime),this._phase.error&&(e.error=this._phase.error),e}get sessionId(){return this._sessionId}get tracks(){return this._tracks}get multiplexer(){return this._multiplexer}get isOpen(){return this._ws?.readyState===WebSocket.OPEN}getTrackByName(e){let t=this._tracksByName.get(e);if(t&&t.readyState!=="ended")return t;for(let r of this._tracks.values())if(r.kind===e&&r.readyState!=="ended")return r;return t}setAuth(e){this._options={...this._options,...e},this.isOpen&&this._send({type:"auth",orgId:this._options.orgId,jwt:this._options.jwt,authProvider:this._options.authProvider})}constructor(e){this._options=e??{url:""},e?.sessionId&&(this._sessionId=e.sessionId)}setConnection(e){if(this.isOpen)throw new Error("TransportSession: cannot change connection while connected");this._options={...this._options,...e},e.sessionId&&(this._sessionId=e.sessionId)}setConnectionResolver(e){this._resolveConnection=e}applyControlDocState(e){let t=e&&typeof e=="object"?e.session:void 0,r=fc(t);r!==void 0&&this.setIncarnation(r)}setIncarnation(e){if(!Number.isFinite(e)||e<=this._currentEpoch)return;let t=this._currentEpoch>0,r=this._state==="connected";this._currentEpoch=e,t&&r&&!this._intentionalDisconnect&&this._renegotiate()}isStaleIncarnation(e){return Number.isFinite(e)?e<this._currentEpoch:!1}isStaleClosedMarker(e){if(!e)return!1;let t=typeof e.status=="string"?e.status:void 0;if(t!=="closed"&&t!=="ended")return!1;let r=e.status_epoch??e.statusEpoch,i=typeof r=="number"?r:Number(r);return Number.isFinite(i)?i<this._currentEpoch:!1}async connect(e){this._lastStartOptions=e,this._intentionalDisconnect=!1,this._connectStartedAt??=Date.now(),this._cancelPendingDial?.(new Error("TransportSession: connect superseded by a newer connect()"));let t=++this._generation,r=this._state==="reconnecting"||this._state==="renegotiating";r||this._setState("connecting");let i=null,n=()=>t!==this._generation||this._intentionalDisconnect,a=()=>{if(n())throw new Error("TransportSession: connect cancelled")},o=async()=>{for(let l of this._connectUrls()){a();try{return await this._connectOnce(l,t,e),!0}catch(u){i=u instanceof Error?u:new Error(String(u)),n()||this._cleanupSocket()}}return!1},c=this._forceResolveOnNextConnect&&this._resolveConnection!==null;this._forceResolveOnNextConnect=!1;let d=c?0:this._resolveConnection?cc:1;for(let l=0;l<d;l++)if(l>0&&(await rn(dc),a()),await o())return;if(this._resolveConnection)for(let l=0;l<pc;l++){this._setState("reconnecting"),await rn(Xi[Math.min(l,Xi.length-1)]),a();try{let u=await this._resolveConnection();a(),this.setAuth({jwt:u.jwt??this._options.jwt,authProvider:this._options.authProvider,orgId:this._options.orgId}),this.setConnection({url:u.url,sessionId:u.sessionId,iceServers:u.iceServers??this._options.iceServers})}catch(u){if(n())throw new Error("TransportSession: connect cancelled");i=u instanceof Error?u:new Error(String(u));continue}if(await o())return}if(n())throw i??new Error("TransportSession: connect cancelled");this._setState("failed");let p=i??new Error("TransportSession: connect failed");throw r||this._emitError(p),p}disconnect(){if(this._generation+=1,this._intentionalDisconnect=!0,this._cancelPendingDial?.(new Error("TransportSession: connect cancelled by disconnect()")),this._stopMediaMonitor(),this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null),this._clearReconnectBudgetReset(),this._reconnectAttempts=0,this._audioProducer){this._send({type:"stopAudio"});try{this._audioProducer.close()}catch{}this._audioProducer=null}if(this._videoProducer){this._send({type:"stopVideo"});try{this._videoProducer.close()}catch{}this._videoProducer=null}for(let e of this._consumers.values())try{e.close()}catch{}if(this._consumers.clear(),this._cleanupDataChannels(),this._settleSendTransportWaiters(null,new Error("[urun] sendStreamData: transport disconnected before the send transport arrived")),this._sendTransport){try{this._sendTransport.close()}catch{}this._sendTransport=null}if(this._recvTransport){try{this._recvTransport.close()}catch{}this._recvTransport=null}if(this._pendingProduce&&(clearTimeout(this._pendingProduce.timeoutId),this._pendingProduce.reject(new Error("TransportSession: disconnected")),this._pendingProduce=null),this._device=null,this._multiplexer&&(this._multiplexer.dispose(),this._multiplexer=null),this._ws){let e=this._ws;this._ws=null;try{e.close(1e3,"intentional disconnect")}catch{}}this._tracks.clear(),this._tracksByName.clear(),this._setState("disconnected"),this._liveReached=!1,this._setPhase("ended"),this._emitter.emit("disconnected")}on(e,t){return this._emitter.on(e,t),()=>{this._emitter.off(e,t)}}sendInput(e,t){this._send({type:"input",data:e,sequence:t})}onStreamData(e,t){let r=this._streamDataHandlers.get(e);return r||(r=new Set,this._streamDataHandlers.set(e,r)),r.add(t),()=>{let i=this._streamDataHandlers.get(e);i?.delete(t),i&&i.size===0&&this._streamDataHandlers.delete(e)}}sendStreamData(e,t,r){return this._ensureDataProducer(e).then(i=>{i.send(Hi(t))})}_awaitSendTransport(){return this._sendTransport?Promise.resolve(this._sendTransport):new Promise((e,t)=>{let r={resolve:n=>{clearTimeout(i),e(n)},reject:n=>{clearTimeout(i),t(n)}},i=setTimeout(()=>{let n=this._sendTransportWaiters.indexOf(r);n>=0&&this._sendTransportWaiters.splice(n,1),t(new Error(`[urun] sendStreamData: no send transport after ${Yi}ms (the server never offered createSendTransport \u2014 data-up produce is impossible on this leg)`))},Yi);this._sendTransportWaiters.push(r)})}_settleSendTransportWaiters(e,t){let r=this._sendTransportWaiters;this._sendTransportWaiters=[];for(let i of r)e?i.resolve(e):i.reject(t??new Error("TransportSession: disconnected"))}_ensureDataProducer(e){let t=this._dataProducers.get(e);if(t&&!t.closed)return Promise.resolve(t);let r=this._dataProducerPromises.get(e);if(r)return r;let i=this._awaitSendTransport().then(n=>n.produceData({label:Bi(e),protocol:Ui,ordered:!0})).then(n=>this._awaitDataChannelOpen(n)).then(n=>(this._dataProducers.set(e,n),this._dataProducerPromises.delete(e),n)).catch(n=>{throw this._dataProducerPromises.delete(e),n});return this._dataProducerPromises.set(e,i),i}_awaitDataChannelOpen(e){if(e.closed)return Promise.reject(new Error("[urun] sendStreamData: DataProducer closed before its DataChannel opened"));let t=e.readyState;return t==="open"?Promise.resolve(e):t==="closing"||t==="closed"?Promise.reject(new Error(`[urun] sendStreamData: DataChannel is ${t} \u2014 cannot deliver data-up payloads`)):new Promise((r,i)=>{let n=()=>{d(),r(e)},a=l=>{p(new Error(`[urun] sendStreamData: DataChannel error before open: ${l.message}`))},o=()=>{d(),i(new Error("[urun] sendStreamData: DataProducer closed before its DataChannel opened"))},c=setTimeout(()=>{p(new Error(`[urun] sendStreamData: DataChannel not open after ${Ji}ms (the SCTP handshake never completed \u2014 data-up produce is impossible on this channel)`))},Ji),d=()=>{clearTimeout(c),e.off("open",n),e.off("error",a),e.observer.off("close",o)},p=l=>{d();try{e.close()}catch{}i(l)};e.on("open",n),e.on("error",a),e.observer.on("close",o)})}_dispatchStreamData(e,t){for(let r of this._streamDataHandlers.get(e)??[])r(t)}_streamNameFromLabel(e){if(e)return e.startsWith("stream:")?e.slice(7):void 0}async addTrack(e,t){if(!this._sendTransport)throw new Error("TransportSession: send transport not ready");this._audioProducer=await this._sendTransport.produce({track:e,codecOptions:{opusStereo:!1,opusDtx:!1,opusFec:!1},...t?{appData:{name:t}}:{}})}removeTrack(){this._audioProducer&&(this._send({type:"stopAudio"}),this._audioProducer.close(),this._audioProducer=null)}async addVideoTrack(e,t){let r=this._videoProducer;if(r&&!r.closed){await r.replaceTrack({track:e});return}if(!this._sendTransport)throw new Error("TransportSession: send transport not ready");this._videoProducer=await this._sendTransport.produce({track:e,...t?{appData:{name:t}}:{}})}stopVideo(){this._videoProducer&&(this._send({type:"stopVideo"}),this._videoProducer.close(),this._videoProducer=null)}requestDiagnostics(){this._send({type:"diagnostics"})}seekStream(e,t){this._send({type:"stream.seek",stream:e,target:t})}subscribeStream(e){this._pendingStreamSubscribes.add(e),this._sendStreamSubscribe(e)}unsubscribeStream(e){this._pendingStreamSubscribes.delete(e),this._send({t:"stream.unsubscribe",name:e,consumerId:this.consumerId})}_sendStreamSubscribe(e){this._send({t:"stream.subscribe",name:e,consumerId:this.consumerId})}_flushStreamSubscribes(){for(let e of this._pendingStreamSubscribes)this._sendStreamSubscribe(e)}async _handleMessage(e){switch(e.type){case"routerRtpCapabilities":await this._onRouterCapabilities(e.rtpCapabilities);break;case"createWebRtcTransport":await this._onCreateRecvTransport(e);break;case"createSendTransport":await this._onCreateSendTransport(e);break;case"consume":await this._onConsume(e);break;case"consumerClosed":this._closeConsumer(e.consumerId);break;case"producerClosed":this._closeConsumersByProducer(e.producerId);break;case"consumerPaused":this._consumers.get(e.consumerId)?.pause();break;case"consumerResumed":this._consumers.get(e.consumerId)?.resume();break;case"iceRestarted":this._onIceRestarted(e);break;case"produced":if(this._pendingProduce){let t=this._pendingProduce;this._pendingProduce=null,clearTimeout(t.timeoutId),t.resolve(e.id)}break;case"dataProduced":{let t=e.label,r=t?this._pendingDataProduce.get(t):void 0;r&&t&&(this._pendingDataProduce.delete(t),r.resolve(e.id));break}case"consumeData":await this._onConsumeData(e);break;case"started":this._emitter.emit("started");break;case"status":this._onStatus(e);break;case"stream.seeked":this._onStreamSeeked(e);break;case"error":this._onServerError(e);break}}_onServerError(e){let t=typeof e.message=="string"?e.message:"signaling error",r=typeof e.code=="string"?e.code:void 0;if(/connect\(\) already called/i.test(t)){if(this._resolveConnection){this._generation++;let i=this._ws;this._ws=null;try{i?.close()}catch{}this._cleanupMedia(),this._forceResolveOnNextConnect=!0,this._renegotiate();return}this._setPhase("error",{error:{reason:t,code:"transport-consumed",kind:"transport-failed"}}),this._emitter.emit("error",new Error(t));return}if(r==="TRANSPORT_BIND_FAILED"){this._emitError(new Error(t),r);return}console.warn("[urun] signaling error from server:",t)}_onStreamSeeked(e){let t=typeof e.stream=="string"?e.stream:void 0;if(!t)return;let r=e.target,i=r==="live"?"live":typeof r=="number"?r:Number(r);this._emitter.emit("seeked",t,i)}_onStatus(e){let t=e.request_id??e.requestId;if(t&&(this._requestId=t),this._liveReached)return;let r=typeof e.status=="string"?e.status:void 0;r!==void 0&&(this._lastServerStatus=r);let i=(r&&uc[r])??"provisioning",n=e.queue_position??e.queuePosition,a=e.queue_depth??e.queueDepth,o=typeof n=="number"&&typeof a=="number";if(i==="error"){this._setPhase("error",{error:{reason:r??"admission failed",code:r,kind:r==="expired"?"never-live":"create-failed"}});return}if(i==="ended"){this._setPhase("ended");return}if(i==="queued"){this._setPhase("queued",o?{queue:{position:n,depth:a}}:void 0);return}if(i==="connecting"){this._setPhase("connecting");return}this._setPhase("provisioning")}async _onRouterCapabilities(e){We()&&await Jt();let t=Yt(),r=new sn.Device(t?{handlerName:t}:void 0);await r.load({routerRtpCapabilities:e}),this._device=r,this._send({type:"rtpCapabilities",rtpCapabilities:r.rtpCapabilities})}async _onCreateRecvTransport(e){this._device&&this._buildRecvTransport(e)}_buildRecvTransport(e){if(!this._device)return;let t=e.iceCandidates,r=this._device.createRecvTransport({id:e.id,iceParameters:e.iceParameters,iceCandidates:t,dtlsParameters:e.dtlsParameters,...e.sctpParameters?{sctpParameters:e.sctpParameters}:{},iceServers:this._options.iceServers??tn});this._recvIceRestartAttempts=0,this._clearRecvIceRestart();let i=this._generation;r.on("connect",({dtlsParameters:n},a,o)=>{try{this._send({type:"connectTransport",transportId:r.id,dtlsParameters:n}),a()}catch(c){o(c)}}),r.on("connectionstatechange",n=>{if(i===this._generation){if(n==="connected"){this._clearRecvIceRestart(),this._recvIceRestartAttempts=0;return}if(!(this._intentionalDisconnect&&n==="closed")&&(n==="failed"||n==="disconnected")){if(this._tryRestartRecvIce())return;n==="failed"&&this._emitError(new Error(`media transport ${n}`),n)}}}),this._recvTransport=r}_tryRestartRecvIce(){let e=this._recvTransport;return!e||e.closed?!1:this._recvIceRestartTimer?!0:this._recvIceRestartAttempts>=Zi?!1:(this._recvIceRestartAttempts++,this._armRecvIceRestartWatchdog(),this._requestIceRestart(e.id),!0)}_trySendIceRestart(){let e=this._sendTransport;return!e||e.closed?!1:this._sendIceRestartTimer?!0:this._sendIceRestartAttempts>=Zi?!1:(this._sendIceRestartAttempts++,this._armSendIceRestartWatchdog(),this._requestIceRestart(e.id),!0)}_requestIceRestart(e){this._send({type:"restartIce",transportId:e})}_onIceRestarted(e){let t=e.transportId??e.id,r=e.iceParameters;if(!r)return;let i=!!this._recvTransport&&this._recvTransport.id===t,n=!i&&!!this._sendTransport&&this._sendTransport.id===t,a=i?this._recvTransport:n?this._sendTransport:null;a&&(Promise.resolve(a.restartIce({iceParameters:r})).catch(o=>{this._emitter.emit("error",o instanceof Error?o:new Error(String(o)))}),i&&this._recvIceRestartTimer?this._armRecvIceRestartWatchdog():n&&this._sendIceRestartTimer&&this._armSendIceRestartWatchdog())}_armRecvIceRestartWatchdog(){this._clearRecvIceRestart();let e=this._generation;this._recvIceRestartTimer=setTimeout(()=>{this._recvIceRestartTimer=null,!(e!==this._generation||this._intentionalDisconnect)&&this._recvTransport?.connectionState!=="connected"&&this._emitError(new Error("media transport failed (ice restart timeout)"),"failed")},en)}_armSendIceRestartWatchdog(){this._clearSendIceRestart();let e=this._generation;this._sendIceRestartTimer=setTimeout(()=>{this._sendIceRestartTimer=null,!(e!==this._generation||this._intentionalDisconnect)&&this._sendTransport?.connectionState!=="connected"&&this._emitError(new Error("media send transport failed (ice restart timeout)"),"failed")},en)}_clearRecvIceRestart(){this._recvIceRestartTimer&&(clearTimeout(this._recvIceRestartTimer),this._recvIceRestartTimer=null)}_clearSendIceRestart(){this._sendIceRestartTimer&&(clearTimeout(this._sendIceRestartTimer),this._sendIceRestartTimer=null)}async _onCreateSendTransport(e){if(!this._device)return;let t=this._device.createSendTransport({id:e.id,iceParameters:e.iceParameters,iceCandidates:e.iceCandidates,dtlsParameters:e.dtlsParameters,...e.sctpParameters?{sctpParameters:e.sctpParameters}:{},iceServers:this._options.iceServers??tn});this._sendIceRestartAttempts=0,this._clearSendIceRestart();let r=this._generation;t.on("connect",({dtlsParameters:i},n,a)=>{try{this._send({type:"connectSendTransport",transportId:t.id,dtlsParameters:i}),n()}catch(o){a(o)}}),t.on("produce",({kind:i,rtpParameters:n,appData:a},o,c)=>{if(this._pendingProduce){c(new Error("produce already pending"));return}let d=setTimeout(()=>{let l=this._pendingProduce;!l||l.timeoutId!==d||(this._pendingProduce=null,l.reject(new Error("Produce timed out")))},15e3);this._pendingProduce={timeoutId:d,resolve:l=>{o({id:l})},reject:c};let p=a&&typeof a.name=="string"?a.name:void 0;try{this._send(p?{type:"produce",kind:i,name:p,rtpParameters:n}:{type:"produce",kind:i,rtpParameters:n})}catch(l){this._pendingProduce?.timeoutId===d&&(this._pendingProduce=null,clearTimeout(d)),c(l)}}),t.on("producedata",({sctpStreamParameters:i,label:n,protocol:a},o,c)=>{try{n&&this._pendingDataProduce.set(n,{resolve:d=>o({id:d}),reject:c}),this._send({type:"produceData",sctpStreamParameters:i,label:n,protocol:a})}catch(d){n&&this._pendingDataProduce.delete(n),c(d)}}),t.on("connectionstatechange",i=>{if(r===this._generation){if(i==="connected"){this._clearSendIceRestart(),this._sendIceRestartAttempts=0;return}this._intentionalDisconnect&&i==="closed"||(i==="failed"||i==="disconnected")&&this._trySendIceRestart()||(i==="failed"||i==="closed")&&this._emitError(new Error(`media send transport ${i}`),i)}}),this._sendTransport=t,this._settleSendTransportWaiters(t),this._emitter.emit("audioTransportReady")}async _onConsumeData(e){if(!this._recvTransport)return;let t=e.label,r=this._streamNameFromLabel(t);if(!r)return;let i=await this._recvTransport.consumeData({id:e.id,dataProducerId:e.dataProducerId,sctpStreamParameters:e.sctpStreamParameters,label:t,protocol:e.protocol});this._dataConsumers.set(r,i),this._send({type:"dataConsumerReady",id:e.id}),i.on("message",n=>{try{let a=typeof n=="string"?new TextEncoder().encode(n):new Uint8Array(n);this._dispatchStreamData(r,Vi(a))}catch(a){this._emitter.emit("error",a instanceof Error?a:new Error(String(a)))}})}async _onConsume(e){if(!this._recvTransport)return;let t=this._generation,r=await this._recvTransport.consume({id:e.id,producerId:e.producerId,kind:e.kind,rtpParameters:e.rtpParameters});this._consumers.set(r.id,r),this._tracks.set(r.track.id,r.track);let i=e.streamName??e.label;i&&this._tracksByName.set(i,r.track),this._liveReached||this._setPhase("live"),this._emitter.emit("track",r.track);let n=r.id;r.track.addEventListener("ended",()=>{t!==this._generation||this._intentionalDisconnect||this._closeConsumer(n)},{once:!0}),this._send({type:"resumeConsumer",consumerId:r.id}),this._startMediaMonitor()}_closeConsumer(e){let t=this._consumers.get(e);if(!t)return;this._consumers.delete(e);let r=t.track;try{t.close()}catch{}if(r){this._tracks.delete(r.id);for(let[i,n]of this._tracksByName)n===r&&this._tracksByName.delete(i)}}_closeConsumersByProducer(e){for(let[t,r]of this._consumers)r.producerId===e&&this._closeConsumer(t)}_mediaPollMs(){let e=this._options.mediaLiveness?.pollMs;return e===void 0?ac:e}_mediaStallTimeoutMs(){let e=this._options.mediaLiveness?.stallTimeoutMs;return e===void 0?oc:e}_startMediaMonitor(){let e=this._mediaPollMs();if(e<=0||this._mediaMonitorTimer)return;this._lastInboundTotal=0,this._mediaEverFlowed=!1,this._lastInboundAdvanceAt=Date.now(),this._mediaDeathHandled=!1,this._decodeSignalSeen=!1,this._lastFramesDecoded=0,this._lastDecodeAdvanceAt=0,this._decodeDeathHandled=!1;let t=this._generation;this._mediaMonitorTimer=setInterval(()=>{t!==this._generation||this._intentionalDisconnect||this._sampleMediaLiveness(t)},e)}_stopMediaMonitor(){this._mediaMonitorTimer&&(clearInterval(this._mediaMonitorTimer),this._mediaMonitorTimer=null)}async _sampleMediaLiveness(e){if(this._consumers.size===0)return;let t=0,r=null;for(let n of this._consumers.values()){let a=await mc(n);t+=a.total,a.framesDecoded!==null&&(r=(r??0)+a.framesDecoded)}if(e!==this._generation||this._intentionalDisconnect)return;let i=Date.now();if(t>this._lastInboundTotal){this._lastInboundTotal=t,this._lastInboundAdvanceAt=i,t>0&&(this._mediaEverFlowed=!0),this._checkDecodeLiveness(r,i);return}this._mediaEverFlowed&&(this._mediaDeathHandled||i-this._lastInboundAdvanceAt>=this._mediaStallTimeoutMs()&&(this._mediaDeathHandled=!0,this._renegotiate()))}_checkDecodeLiveness(e,t){if(e!==null){if(!this._decodeSignalSeen){this._decodeSignalSeen=!0,this._lastFramesDecoded=e,this._lastDecodeAdvanceAt=t;return}if(e>this._lastFramesDecoded){this._lastFramesDecoded=e,this._lastDecodeAdvanceAt=t;return}this._decodeDeathHandled||t-this._lastDecodeAdvanceAt>=this._mediaStallTimeoutMs()&&(this._decodeDeathHandled=!0,this._renegotiate())}}_renegotiate(){this._intentionalDisconnect||this._reconnectTimer||(this._stopMediaMonitor(),this._setState("renegotiating"),this._attemptReconnect())}_attemptReconnect(e){if(this._intentionalDisconnect||this._reconnectTimer)return;if(this._reconnectAttempts>=Ki){this._setState("failed"),this._emitError(new Error(`Failed after ${Ki} attempts`));return}let t=Qi[Math.min(this._reconnectAttempts,Qi.length-1)];this._reconnectAttempts++,this._state!=="renegotiating"&&this._setState("reconnecting"),this._reconnectTimer=setTimeout(async()=>{this._reconnectTimer=null,this._cleanupMedia();try{await this.connect(e??this._lastStartOptions)}catch(r){if(r instanceof Error&&r.message==="TransportSession: connect cancelled")return;this._attemptReconnect(e)}},t)}_connectUrls(){let e=[],t=r=>{if(!r)return;let i=/\/ws\/rtc\/[^/?#]+/.test(r),n=this._sessionId&&!i?`${r}${r.includes("?")?"&":"?"}sessionId=${encodeURIComponent(this._sessionId)}`:r;e.includes(n)||e.push(n)};t(this._options.url);for(let r of this._options.fallbackUrls??[])t(r);return e}_connectOnce(e,t,r){return new Promise((i,n)=>{let a=!1,o=!1,c=null,d=new WebSocket(e);this._ws=d;let p=()=>this._ws!==d||t!==this._generation,l=f=>{o||(o=!0,c&&clearTimeout(c),this._cancelPendingDial===u&&(this._cancelPendingDial=null),n(f))},u=f=>{try{d.close()}catch{}l(f)};this._cancelPendingDial=u,c=setTimeout(()=>{try{d.close()}catch{}l(new Error("TransportSession: connect timed out"))},nc),d.onopen=()=>{if(!o){if(p()){try{d.close()}catch{}l(new Error("TransportSession: connect superseded during dial"));return}a=!0,c&&clearTimeout(c),this._multiplexer=new Ue(d),d.send(JSON.stringify(this._startMessage(r))),this._flushStreamSubscribes(),this._scheduleReconnectBudgetReset(),this._setState("connected"),this._liveReached||this._setPhase("connecting"),this._emitter.emit("connected"),o=!0,this._cancelPendingDial===u&&(this._cancelPendingDial=null),i()}},d.onerror=()=>{a||l(new Error("WebSocket connection error"))},d.onclose=()=>{if(!a){l(new Error("WebSocket closed before connecting"));return}p()||(this._clearReconnectBudgetReset(),c&&clearTimeout(c),this._setState("disconnected"),this._intentionalDisconnect||(this._emitter.emit("disconnected"),this._attemptReconnect(r)))},d.onmessage=f=>{if(!(this._ws!==d||t!==this._generation)&&typeof f.data=="string")try{this._handleMessage(JSON.parse(f.data))}catch(m){this._emitter.emit("error",m instanceof Error?m:new Error(String(m)))}}})}_startMessage(e){let t={type:"start",video:e?.video??{width:854,height:480,frameRate:16}};return e?.prompt&&(t.prompt=e.prompt),e?.cameraControl&&(t.camera_control=e.cameraControl),e?.args&&(t.args=e.args),e?.app&&(t.app=e.app),e?.functionName&&(t.function=e.functionName),e?.role&&(t.role=e.role),this._options.orgId&&(t.orgId=this._options.orgId),this._options.jwt&&(t.jwt=this._options.jwt),this._options.authProvider&&(t.authProvider=this._options.authProvider),t}_cleanupSocket(){if(this._clearReconnectBudgetReset(),!this._ws)return;let e=this._ws;this._ws=null;try{e.close()}catch{}}_scheduleReconnectBudgetReset(){this._clearReconnectBudgetReset(),this._reconnectAttempts!==0&&(this._stableResetTimer=setTimeout(()=>{this._stableResetTimer=null,this._reconnectAttempts=0},lc))}_clearReconnectBudgetReset(){this._stableResetTimer&&(clearTimeout(this._stableResetTimer),this._stableResetTimer=null)}_cleanupDataChannels(){for(let e of this._dataProducers.values())try{e.close()}catch{}this._dataProducers.clear(),this._dataProducerPromises.clear();for(let e of this._dataConsumers.values())try{e.close()}catch{}this._dataConsumers.clear();for(let e of this._pendingDataProduce.values())try{e.reject(new Error("TransportSession: disconnected"))}catch{}this._pendingDataProduce.clear()}_cleanupMedia(){this._stopMediaMonitor();for(let e of this._consumers.values())try{e.close()}catch{}if(this._consumers.clear(),this._cleanupDataChannels(),this._audioProducer){try{this._audioProducer.close()}catch{}this._audioProducer=null}if(this._clearRecvIceRestart(),this._clearSendIceRestart(),this._recvTransport){try{this._recvTransport.close()}catch{}this._recvTransport=null}if(this._sendTransport){try{this._sendTransport.close()}catch{}this._sendTransport=null}this._pendingProduce&&(clearTimeout(this._pendingProduce.timeoutId),this._pendingProduce=null),this._device=null,this._tracks.clear(),this._tracksByName.clear(),this._multiplexer&&(this._multiplexer.dispose(),this._multiplexer=null)}_send(e){!this._ws||this._ws.readyState!==WebSocket.OPEN||this._ws.send(JSON.stringify(e))}_setState(e){this._state!==e&&(this._state=e,this._emitter.emit("stateChange",e))}_setPhase(e,t){e==="live"&&(this._liveReached=!0);let r={name:e};t?.queue&&(r.queue=t.queue),t?.runtime&&(r.runtime=t.runtime),this._requestId&&(r.requestId=this._requestId),this._sessionId&&(r.sessionId=this._sessionId),t?.error&&(r.error=t.error),this._phase=r,this._emitter.emit("phase",r)}reportAdmission(e){if(e.requestId&&(this._requestId=e.requestId),this._lastServerStatus=e.status,this._liveReached||this._phase.name==="ended"||this._phase.name==="error")return;let{runtime:t,queue:r}=e;if(t?.state==="unavailable"){this._setPhase("unavailable",{runtime:t});return}if(t?.state==="starting"){this._setPhase("provisioning",{runtime:t});return}if(t?.state==="busy"||e.status==="queued"){this._setPhase("queued",{queue:r,runtime:t});return}this._setPhase("provisioning")}_emitError(e,t){this._setPhase("error",{error:{reason:e.message,code:t,kind:"transport-failed"}}),this._emitter.emit("error",e)}reportAllocationFailure(e,t){this._setPhase("error",{error:{reason:e.message,code:"allocation-failed",kind:"create-failed",httpStatus:t}}),this._emitter.emit("error",e)}};function rn(s){return new Promise(e=>setTimeout(e,s))}function hc(){return $i()}async function mc(s){if(typeof s.getStats!="function")return{total:0,framesDecoded:null};let e;try{e=await s.getStats()}catch{return{total:0,framesDecoded:null}}let t=0,r=null,i=n=>{if(!n||typeof n!="object")return;let a=n;if(a.type==="inbound-rtp"){let o=typeof a.bytesReceived=="number"?a.bytesReceived:0,c=typeof a.packetsReceived=="number"?a.packetsReceived:0;t+=o+c,typeof a.framesDecoded=="number"&&(r=(r??0)+a.framesDecoded)}};if(e instanceof Map)for(let n of e.values())i(n);else if(Array.isArray(e))for(let n of e)i(n);else e&&typeof e.forEach=="function"&&e.forEach(i);return{total:t,framesDecoded:r}}function fc(s){if(!s||typeof s!="object")return;let e=s.epoch,t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:void 0}var an=require("y-websocket"),es=require("y-protocols/awareness");function on(s){let e=new URL(s);return`${e.protocol}//${e.host}/doc`}function cn(s){let e=s.WebSocketPolyfill??globalThis.WebSocket;if(!e)throw new Error("[urun] no WebSocket implementation available for the yjs doc provider (browser global missing and no WebSocketPolyfill passed)");return(t,r,i)=>{let n=`${s.sessionId}/${t}`,a=new an.WebsocketProvider(s.serverUrl,n,r,{awareness:i,params:s.token?{token:s.token}:{},WebSocketPolyfill:e,disableBc:!0});return{get awareness(){return a.awareness},get synced(){return a.synced},onSync(o){let c=d=>o(d);return a.on("sync",c),()=>a.off("sync",c)},destroy(){a.destroy()}}}}var Zr=class{constructor(e,t,r){this._name=e;this._doc=t;this.awareness=r}_name;_doc;awareness;_inner=null;_innerUnsub=null;_syncHandlers=new Set;_destroyed=!1;get synced(){return this._inner?.synced??!1}onSync(e){return this._syncHandlers.add(e),()=>this._syncHandlers.delete(e)}attach(e){if(!(this._destroyed||this._inner)&&(this._inner=e(this._name,this._doc,this.awareness),this._innerUnsub=this._inner.onSync(t=>{for(let r of[...this._syncHandlers])r(t)}),this._inner.synced))for(let t of[...this._syncHandlers])t(!0)}destroy(){this._destroyed=!0,this._innerUnsub?.(),this._innerUnsub=null,this._inner?.destroy(),this._inner=null,this._syncHandlers.clear()}},er=class{_target=null;_bridges=[];connect=(e,t,r)=>{let i=new Zr(e,t,r);return this._target?i.attach(this._target):this._bridges.push(i),i};get connected(){return this._target!==null}setTarget(e){if(this._target)return;this._target=e;let t=this._bridges.splice(0);for(let r of t)r.attach(e)}};var dt=He(require("yjs"));function pt(s){if(s===null||typeof s!="object"||Array.isArray(s))return!1;let e=Object.getPrototypeOf(s);return e===Object.prototype||e===null}var tr="$bytes";function _c(s){return s instanceof Uint8Array||s instanceof ArrayBuffer}function gc(s){if(!pt(s))return!1;let e=Object.keys(s);return e.length===1&&e[0]===tr&&typeof s[tr]=="string"}function vc(s){return s instanceof ArrayBuffer?new Uint8Array(s):s}function wc(s){if(typeof Buffer<"u")return Buffer.from(s).toString("base64");let e="";for(let t=0;t<s.length;t++)e+=String.fromCharCode(s[t]);return btoa(e)}function yc(s){if(typeof Buffer<"u")return new Uint8Array(Buffer.from(s,"base64"));let e=atob(s),t=new Uint8Array(e.length);for(let r=0;r<e.length;r++)t[r]=e.charCodeAt(r);return t}function ts(s){if(_c(s))return{[tr]:wc(vc(s))};if(Array.isArray(s))return s.map(ts);if(pt(s)){let e={};for(let[t,r]of Object.entries(s))e[t]=ts(r);return e}return s}function ct(s){if(gc(s))return yc(s[tr]);if(Array.isArray(s))return s.map(ct);if(pt(s)){let e={};for(let[t,r]of Object.entries(s))e[t]=ct(r);return e}return s}var dn=Symbol("urun:doc:path-absent");function bc(s,e){let t=e.split("."),r=s;for(let i of t){if(r===null||typeof r!="object"||!(i in r))return dn;r=r[i]}return r}function Sc(s,e){return s===e?!0:JSON.stringify(s)===JSON.stringify(e)}function rs(s,e){for(let[t,r]of Object.entries(e))if(pt(r)){let i=s.get(t);if(!(i instanceof dt.Map)){let n=i;i=new dt.Map,s.set(t,i),pt(n)&&rs(i,n)}rs(i,r)}else{if(Sc(s.get(t),r))continue;s.set(t,r)}}var Rc=Symbol("urun:doc:local"),rr=class{_doc=new dt.Doc;_root=this._doc.getMap("session");_awareness=new es.Awareness(this._doc);_listeners=new Set;_key;_sessionId;_connection=null;_connUnsub=null;_synced;_syncWaiters=new Set;_texts=new Map;_observer=()=>this.notify();constructor(e,t,r){this._key=e,this._sessionId=t,this._root.observeDeep(this._observer),r?(this._connection=r(e,this._doc,this._awareness),this._synced=this._connection.synced,this._connUnsub=this._connection.onSync(i=>{i&&this._markSynced()}),this._synced&&this._markSynced()):this._synced=!0}get awareness(){return this._awareness}setSessionId(e){this._sessionId=e}get synced(){return this._synced}onSynced(e){return this._synced?(e(),()=>{}):(this._syncWaiters.add(e),()=>this._syncWaiters.delete(e))}set(e){e=ts(e),this.applyPatch(e)}get(e,t){let r=this.snapshot();if(!e)return ct(r);let i=bc(r,e);return i===dn?t:ct(i)}on(e,t){return this._listeners.add(t),()=>this._listeners.delete(t)}text(e){let t=this._texts.get(e);return t||(t=new ss(this._doc.getText(`text:${e}`)),this._texts.set(e,t)),t}dispose(){this._root.unobserveDeep(this._observer),this._connUnsub?.(),this._connUnsub=null,this._connection?.destroy(),this._connection=null,this._listeners.clear(),this._syncWaiters.clear();for(let e of this._texts.values())e.dispose();this._texts.clear(),this._awareness.destroy(),this._doc.destroy()}_markSynced(){let e=[...this._syncWaiters];this._synced=!0,this._syncWaiters.clear();for(let t of e)t()}applyPatch(e){this._doc.transact(()=>{rs(this._root,e)},Rc)}snapshot(){return this._root.toJSON()}notify(){let e=ct(this.snapshot());for(let t of this._listeners)t(e)}},ss=class{constructor(e){this._ytext=e;this._observer=t=>{for(let r of t.delta)if(typeof r.insert=="string"&&r.insert.length>0){let i=r.insert;for(let n of this._delta)n(i)}},this._ytext.observe(this._observer)}_ytext;_delta=new Set;_observer;append(e){e.length!==0&&this._ytext.insert(this._ytext.length,e)}toString(){return this._ytext.toString()}get length(){return this._ytext.length}on(e,t){return this._delta.add(t),()=>this._delta.delete(t)}dispose(){this._ytext.unobserve(this._observer),this._delta.clear()}};function pn(s){return{get clientId(){return s.clientID},set(e){s.setLocalState(e)},setField(e,t){s.setLocalStateField(e,t)},getLocal(){return s.getLocalState()??null},getStates(){return s.getStates()},on(e,t){let r=()=>t(s.getStates());return s.on("change",r),r(),()=>s.off("change",r)}}}0&&(module.exports={ChannelMultiplexer,DeferredChannelMultiplexer,DeferredDocConnector,LoopbackStreamData,SessionDocumentImpl,TransportSession,createPresence,createWebsocketDocConnector,deriveYjsServerUrl,ensureNodeWebRTC,isNodeRuntime,nodeMediasoupHandlerName,streamDataLabel,transportStreamData});