@urun-sh/core 0.2.46 → 0.2.48
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/CHANGELOG.md +45 -0
- package/dist/chunk-BQIH7RYF.mjs +8 -0
- package/dist/chunk-PQCL4SUQ.mjs +3 -0
- package/dist/index.browser.d.mts +4 -4
- package/dist/index.browser.d.ts +4 -4
- package/dist/index.browser.js +2 -2
- package/dist/index.browser.mjs +1 -1
- package/dist/index.d.mts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +5 -5
- package/dist/index.mjs +1 -1
- package/dist/internal.browser.d.mts +1 -1
- package/dist/internal.browser.d.ts +1 -1
- package/dist/internal.browser.js +2 -2
- package/dist/internal.browser.mjs +1 -1
- package/dist/internal.d.mts +1 -1
- package/dist/internal.d.ts +1 -1
- package/dist/internal.js +5 -5
- package/dist/internal.mjs +1 -1
- package/dist/{stream-data-a_RrPi2p.d.mts → stream-data-TWBl_kh7.d.mts} +66 -25
- package/dist/{stream-data-a_RrPi2p.d.ts → stream-data-TWBl_kh7.d.ts} +66 -25
- package/package.json +1 -1
- package/dist/chunk-DUCJ3UFC.mjs +0 -8
- package/dist/chunk-OXPELTWD.mjs +0 -3
package/dist/chunk-DUCJ3UFC.mjs
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { createRequire as __urunCreateRequire } from 'node:module'; const require = globalThis.require ?? __urunCreateRequire(import.meta.url);
|
|
2
|
-
var Ra=Object.create;var It=Object.defineProperty;var Ca=Object.getOwnPropertyDescriptor;var Ta=Object.getOwnPropertyNames;var Ea=Object.getPrototypeOf,ka=Object.prototype.hasOwnProperty;var js=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});var Pa=(r,e,t)=>()=>{if(t)throw t[0];try{return r&&(e=r(r=0)),e}catch(s){throw t=[s],s}};var C=(r,e)=>()=>{try{return e||r((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}},xa=(r,e)=>{for(var t in e)It(r,t,{get:e[t],enumerable:!0})},Fs=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Ta(e))!ka.call(r,n)&&n!==t&&It(r,n,{get:()=>e[n],enumerable:!(s=Ca(e,n))||s.enumerable});return r};var qs=(r,e,t)=>(t=r!=null?Ra(Ea(r)):{},Fs(e||!r||!r.__esModule?It(t,"default",{value:r,enumerable:!0}):t,r)),Da=r=>Fs(It({},"__esModule",{value:!0}),r);var fn=C((ol,hn)=>{"use strict";var je=1e3,Fe=je*60,qe=Fe*60,ke=qe*24,no=ke*7,io=ke*365.25;hn.exports=function(r,e){e=e||{};var t=typeof r;if(t==="string"&&r.length>0)return ao(r);if(t==="number"&&isFinite(r))return e.long?co(r):oo(r);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(r))};function ao(r){if(r=String(r),!(r.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(r);if(e){var t=parseFloat(e[1]),s=(e[2]||"ms").toLowerCase();switch(s){case"years":case"year":case"yrs":case"yr":case"y":return t*io;case"weeks":case"week":case"w":return t*no;case"days":case"day":case"d":return t*ke;case"hours":case"hour":case"hrs":case"hr":case"h":return t*qe;case"minutes":case"minute":case"mins":case"min":case"m":return t*Fe;case"seconds":case"second":case"secs":case"sec":case"s":return t*je;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:return}}}}function oo(r){var e=Math.abs(r);return e>=ke?Math.round(r/ke)+"d":e>=qe?Math.round(r/qe)+"h":e>=Fe?Math.round(r/Fe)+"m":e>=je?Math.round(r/je)+"s":r+"ms"}function co(r){var e=Math.abs(r);return e>=ke?$t(r,e,ke,"day"):e>=qe?$t(r,e,qe,"hour"):e>=Fe?$t(r,e,Fe,"minute"):e>=je?$t(r,e,je,"second"):r+" ms"}function $t(r,e,t,s){var n=e>=t*1.5;return Math.round(r/t)+" "+s+(n?"s":"")}});var Lr=C((cl,mn)=>{"use strict";function po(r){t.debug=t,t.default=t,t.coerce=c,t.disable=a,t.enable=n,t.enabled=o,t.humanize=fn(),t.destroy=p,Object.keys(r).forEach(d=>{t[d]=r[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,m,f;function h(...g){if(!h.enabled)return;let v=h,b=Number(new Date),P=b-(l||b);v.diff=P,v.prev=l,v.curr=b,l=b,g[0]=t.coerce(g[0]),typeof g[0]!="string"&&g.unshift("%O");let x=0;g[0]=g[0].replace(/%([a-zA-Z%])/g,(L,Ae)=>{if(L==="%%")return"%";x++;let ot=t.formatters[Ae];if(typeof ot=="function"){let ve=g[x];L=ot.call(v,ve),g.splice(x,1),x--}return L}),t.formatArgs.call(v,g),(v.log||t.log).apply(v,g)}return h.namespace=d,h.useColors=t.useColors(),h.color=t.selectColor(d),h.extend=s,h.destroy=t.destroy,Object.defineProperty(h,"enabled",{enumerable:!0,configurable:!1,get:()=>u!==null?u:(m!==t.namespaces&&(m=t.namespaces,f=t.enabled(d)),f),set:g=>{u=g}}),typeof t.init=="function"&&t.init(h),h}function s(d,l){let u=t(this.namespace+(typeof l>"u"?":":l)+d);return u.log=this.log,u}function n(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 i(d,l){let u=0,m=0,f=-1,h=0;for(;u<d.length;)if(m<l.length&&(l[m]===d[u]||l[m]==="*"))l[m]==="*"?(f=m,h=u,m++):(u++,m++);else if(f!==-1)m=f+1,h++,u=h;else return!1;for(;m<l.length&&l[m]==="*";)m++;return m===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(i(d,l))return!1;for(let l of t.names)if(i(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}mn.exports=po});var gn=C((H,Ut)=>{"use strict";H.formatArgs=uo;H.save=ho;H.load=fo;H.useColors=lo;H.storage=mo();H.destroy=(()=>{let r=!1;return()=>{r||(r=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();H.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 lo(){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 r;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&&(r=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(r[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function uo(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+Ut.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;r.splice(1,0,e,"color: inherit");let t=0,s=0;r[0].replace(/%[a-zA-Z%]/g,n=>{n!=="%%"&&(t++,n==="%c"&&(s=t))}),r.splice(s,0,e)}H.log=console.debug||console.log||(()=>{});function ho(r){try{r?H.storage.setItem("debug",r):H.storage.removeItem("debug")}catch{}}function fo(){let r;try{r=H.storage.getItem("debug")||H.storage.getItem("DEBUG")}catch{}return!r&&typeof process<"u"&&"env"in process&&(r=process.env.DEBUG),r}function mo(){try{return localStorage}catch{}}Ut.exports=Lr()(H);var{formatters:go}=Ut.exports;go.j=function(r){try{return JSON.stringify(r)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var vn={};xa(vn,{createSupportsColor:()=>Mr,default:()=>So});import Or from"process";import _o from"os";import _n from"tty";function Y(r,e=globalThis.Deno?globalThis.Deno.args:Or.argv){let t=r.startsWith("-")?"":r.length===1?"-":"--",s=e.indexOf(t+r),n=e.indexOf("--");return s!==-1&&(n===-1||s<n)}function vo(){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 r=Math.min(Number.parseInt(M.FORCE_COLOR,10),3);if([0,1,2,3].includes(r))return r}function wo(r){return r===0?!1:{level:r,hasBasic:!0,has256:r>=2,has16m:r>=3}}function yo(r,{streamIsTTY:e,sniffFlags:t=!0}={}){let s=vo();s!==void 0&&(zt=s);let n=t?zt:s;if(n===0)return 0;if(t){if(Y("color=16m")||Y("color=full")||Y("color=truecolor"))return 3;if(Y("color=256"))return 2}if("TF_BUILD"in M&&"AGENT_NAME"in M)return 1;if(r&&!e&&n===void 0)return 0;let i=n||0;if(M.TERM==="dumb")return i;if(Or.platform==="win32"){let a=_o.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:i;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:i}function Mr(r,e={}){let t=yo(r,{streamIsTTY:r&&r.isTTY,...e});return wo(t)}var M,zt,bo,So,wn=Pa(()=>{"use strict";({env:M}=Or);Y("no-color")||Y("no-colors")||Y("color=false")||Y("color=never")?zt=0:(Y("color")||Y("colors")||Y("color=true")||Y("color=always"))&&(zt=1);bo={stdout:Mr({isTTY:_n.isatty(1)}),stderr:Mr({isTTY:_n.isatty(2)})},So=bo});var bn=C((j,Wt)=>{"use strict";var Ro=js("tty"),Bt=js("util");j.init=Do;j.log=ko;j.formatArgs=To;j.save=Po;j.load=xo;j.useColors=Co;j.destroy=Bt.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 r=(wn(),Da(vn));r&&(r.stderr||r).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(r=>/^debug_/i.test(r)).reduce((r,e)=>{let t=e.substring(6).toLowerCase().replace(/_([a-z])/g,(n,i)=>i.toUpperCase()),s=process.env[e];return/^(yes|on|true|enabled)$/i.test(s)?s=!0:/^(no|off|false|disabled)$/i.test(s)?s=!1:s==="null"?s=null:s=Number(s),r[t]=s,r},{});function Co(){return"colors"in j.inspectOpts?!!j.inspectOpts.colors:Ro.isatty(process.stderr.fd)}function To(r){let{namespace:e,useColors:t}=this;if(t){let s=this.color,n="\x1B[3"+(s<8?s:"8;5;"+s),i=` ${n};1m${e} \x1B[0m`;r[0]=i+r[0].split(`
|
|
3
|
-
`).join(`
|
|
4
|
-
`+i),r.push(n+"m+"+Wt.exports.humanize(this.diff)+"\x1B[0m")}else r[0]=Eo()+e+" "+r[0]}function Eo(){return j.inspectOpts.hideDate?"":new Date().toISOString()+" "}function ko(...r){return process.stderr.write(Bt.formatWithOptions(j.inspectOpts,...r)+`
|
|
5
|
-
`)}function Po(r){r?process.env.DEBUG=r:delete process.env.DEBUG}function xo(){return process.env.DEBUG}function Do(r){r.inspectOpts={};let e=Object.keys(j.inspectOpts);for(let t=0;t<e.length;t++)r.inspectOpts[e[t]]=j.inspectOpts[e[t]]}Wt.exports=Lr()(j);var{formatters:yn}=Wt.exports;yn.o=function(r){return this.inspectOpts.colors=this.useColors,Bt.inspect(r,this.inspectOpts).split(`
|
|
6
|
-
`).map(e=>e.trim()).join(" ")};yn.O=function(r){return this.inspectOpts.colors=this.useColors,Bt.inspect(r,this.inspectOpts)}});var pt=C((ul,Ar)=>{"use strict";typeof process>"u"||process.type==="renderer"||process.browser===!0||process.__nwjs?Ar.exports=gn():Ar.exports=bn()});var Rn=C(Sn=>{"use strict";Object.defineProperty(Sn,"__esModule",{value:!0})});var U=C(Ht=>{"use strict";Object.defineProperty(Ht,"__esModule",{value:!0});Ht.Logger=void 0;var $e=pt(),Ue="media-client",Nr=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,$e.default)(`${Ue}:${e}`),this._warn=(0,$e.default)(`${Ue}:WARN:${e}`),this._error=(0,$e.default)(`${Ue}:ERROR:${e}`)):(this._debug=(0,$e.default)(Ue),this._warn=(0,$e.default)(`${Ue}:WARN`),this._error=(0,$e.default)(`${Ue}: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=Nr});var On=C((ml,jr)=>{"use strict";var ze=typeof Reflect=="object"?Reflect:null,Cn=ze&&typeof ze.apply=="function"?ze.apply:function(e,t,s){return Function.prototype.apply.call(e,t,s)},Vt;ze&&typeof ze.ownKeys=="function"?Vt=ze.ownKeys:Object.getOwnPropertySymbols?Vt=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Vt=function(e){return Object.getOwnPropertyNames(e)};function Io(r){console&&console.warn&&console.warn(r)}var En=Number.isNaN||function(e){return e!==e};function D(){D.init.call(this)}jr.exports=D;jr.exports.once=Ao;D.EventEmitter=D;D.prototype._events=void 0;D.prototype._eventsCount=0;D.prototype._maxListeners=void 0;var Tn=10;function Gt(r){if(typeof r!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof r)}Object.defineProperty(D,"defaultMaxListeners",{enumerable:!0,get:function(){return Tn},set:function(r){if(typeof r!="number"||r<0||En(r))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+r+".");Tn=r}});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||En(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 kn(r){return r._maxListeners===void 0?D.defaultMaxListeners:r._maxListeners}D.prototype.getMaxListeners=function(){return kn(this)};D.prototype.emit=function(e){for(var t=[],s=1;s<arguments.length;s++)t.push(arguments[s]);var n=e==="error",i=this._events;if(i!==void 0)n=n&&i.error===void 0;else if(!n)return!1;if(n){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=i[e];if(c===void 0)return!1;if(typeof c=="function")Cn(c,this,t);else for(var p=c.length,d=Ln(c,p),s=0;s<p;++s)Cn(d[s],this,t);return!0};function Pn(r,e,t,s){var n,i,a;if(Gt(t),i=r._events,i===void 0?(i=r._events=Object.create(null),r._eventsCount=0):(i.newListener!==void 0&&(r.emit("newListener",e,t.listener?t.listener:t),i=r._events),a=i[e]),a===void 0)a=i[e]=t,++r._eventsCount;else if(typeof a=="function"?a=i[e]=s?[t,a]:[a,t]:s?a.unshift(t):a.push(t),n=kn(r),n>0&&a.length>n&&!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=r,o.type=e,o.count=a.length,Io(o)}return r}D.prototype.addListener=function(e,t){return Pn(this,e,t,!1)};D.prototype.on=D.prototype.addListener;D.prototype.prependListener=function(e,t){return Pn(this,e,t,!0)};function Lo(){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 xn(r,e,t){var s={fired:!1,wrapFn:void 0,target:r,type:e,listener:t},n=Lo.bind(s);return n.listener=t,s.wrapFn=n,n}D.prototype.once=function(e,t){return Gt(t),this.on(e,xn(this,e,t)),this};D.prototype.prependOnceListener=function(e,t){return Gt(t),this.prependListener(e,xn(this,e,t)),this};D.prototype.removeListener=function(e,t){var s,n,i,a,o;if(Gt(t),n=this._events,n===void 0)return this;if(s=n[e],s===void 0)return this;if(s===t||s.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete n[e],n.removeListener&&this.emit("removeListener",e,s.listener||t));else if(typeof s!="function"){for(i=-1,a=s.length-1;a>=0;a--)if(s[a]===t||s[a].listener===t){o=s[a].listener,i=a;break}if(i<0)return this;i===0?s.shift():Mo(s,i),s.length===1&&(n[e]=s[0]),n.removeListener!==void 0&&this.emit("removeListener",e,o||t)}return this};D.prototype.off=D.prototype.removeListener;D.prototype.removeAllListeners=function(e){var t,s,n;if(s=this._events,s===void 0)return this;if(s.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):s[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete s[e]),this;if(arguments.length===0){var i=Object.keys(s),a;for(n=0;n<i.length;++n)a=i[n],a!=="removeListener"&&this.removeAllListeners(a);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(t=s[e],typeof t=="function")this.removeListener(e,t);else if(t!==void 0)for(n=t.length-1;n>=0;n--)this.removeListener(e,t[n]);return this};function Dn(r,e,t){var s=r._events;if(s===void 0)return[];var n=s[e];return n===void 0?[]:typeof n=="function"?t?[n.listener||n]:[n]:t?Oo(n):Ln(n,n.length)}D.prototype.listeners=function(e){return Dn(this,e,!0)};D.prototype.rawListeners=function(e){return Dn(this,e,!1)};D.listenerCount=function(r,e){return typeof r.listenerCount=="function"?r.listenerCount(e):In.call(r,e)};D.prototype.listenerCount=In;function In(r){var e=this._events;if(e!==void 0){var t=e[r];if(typeof t=="function")return 1;if(t!==void 0)return t.length}return 0}D.prototype.eventNames=function(){return this._eventsCount>0?Vt(this._events):[]};function Ln(r,e){for(var t=new Array(e),s=0;s<e;++s)t[s]=r[s];return t}function Mo(r,e){for(;e+1<r.length;e++)r[e]=r[e+1];r.pop()}function Oo(r){for(var e=new Array(r.length),t=0;t<e.length;++t)e[t]=r[t].listener||r[t];return e}function Ao(r,e){return new Promise(function(t,s){function n(a){r.removeListener(e,i),s(a)}function i(){typeof r.removeListener=="function"&&r.removeListener("error",n),t([].slice.call(arguments))}Mn(r,e,i,{once:!0}),e!=="error"&&No(r,n,{once:!0})})}function No(r,e,t){typeof r.on=="function"&&Mn(r,"error",e,t)}function Mn(r,e,t,s){if(typeof r.on=="function")s.once?r.once(e,t):r.on(e,t);else if(typeof r.addEventListener=="function")r.addEventListener(e,function n(i){s.once&&r.removeEventListener(e,n),t(i)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof r)}});var V=C(Kt=>{"use strict";Object.defineProperty(Kt,"__esModule",{value:!0});Kt.EnhancedEventEmitter=void 0;var jo=On(),Fo=U(),qo=new Fo.Logger("EnhancedEventEmitter"),Fr=class extends jo.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(s){qo.error("safeEmit() | event listener threw an error [eventName:%s]:%o",e,s);try{super.emit("listenererror",e,s)}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)}};Kt.EnhancedEventEmitter=Fr});var Q=C(Be=>{"use strict";Object.defineProperty(Be,"__esModule",{value:!0});Be.InvalidStateError=Be.UnsupportedError=void 0;var qr=class r extends Error{constructor(e){super(e),this.name="UnsupportedError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,r):this.stack=new Error(e).stack}};Be.UnsupportedError=qr;var $r=class r extends Error{constructor(e){super(e),this.name="InvalidStateError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,r):this.stack=new Error(e).stack}};Be.InvalidStateError=$r});var Pe=C(lt=>{"use strict";Object.defineProperty(lt,"__esModule",{value:!0});lt.clone=$o;lt.generateRandomNumber=Uo;lt.deepFreeze=An;function $o(r){if(r!==void 0)return Number.isNaN(r)?NaN:typeof structuredClone=="function"?structuredClone(r):JSON.parse(JSON.stringify(r))}function Uo(){return Math.round(Math.random()*1e7)}function An(r){let e=Reflect.ownKeys(r);for(let t of e){let s=r[t];(s&&typeof s=="object"||typeof s=="function")&&An(s)}return Object.freeze(r)}});var Nn=C(Yt=>{"use strict";Object.defineProperty(Yt,"__esModule",{value:!0});Yt.Logger=void 0;var We=pt(),He="h264-profile-level-id",Ur=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,We.default)(`${He}:${e}`),this._warn=(0,We.default)(`${He}:WARN:${e}`),this._error=(0,We.default)(`${He}:ERROR:${e}`)):(this._debug=(0,We.default)(He),this._warn=(0,We.default)(`${He}:WARN`),this._error=(0,We.default)(`${He}: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}};Yt.Logger=Ur});var zn=C(F=>{"use strict";Object.defineProperty(F,"__esModule",{value:!0});F.ProfileLevelId=F.Level=F.Profile=void 0;F.parseProfileLevelId=$n;F.profileLevelIdToString=Un;F.profileToString=Ho;F.levelToString=Vo;F.parseSdpProfileLevelId=xe;F.isSameProfile=Go;F.isSameProfileAndLevel=Ko;F.generateProfileLevelIdStringForAnswer=Yo;F.supportedLevel=Qo;var zo=Nn(),se=new zo.Logger,I;(function(r){r[r.ConstrainedBaseline=1]="ConstrainedBaseline",r[r.Baseline=2]="Baseline",r[r.Main=3]="Main",r[r.ConstrainedHigh=4]="ConstrainedHigh",r[r.High=5]="High",r[r.PredictiveHigh444=6]="PredictiveHigh444"})(I||(F.Profile=I={}));var _;(function(r){r[r.L1_b=0]="L1_b",r[r.L1=10]="L1",r[r.L1_1=11]="L1_1",r[r.L1_2=12]="L1_2",r[r.L1_3=13]="L1_3",r[r.L2=20]="L2",r[r.L2_1=21]="L2_1",r[r.L2_2=22]="L2_2",r[r.L3=30]="L3",r[r.L3_1=31]="L3_1",r[r.L3_2=32]="L3_2",r[r.L4=40]="L4",r[r.L4_1=41]="L4_1",r[r.L4_2=42]="L4_2",r[r.L5=50]="L5",r[r.L5_1=51]="L5_1",r[r.L5_2=52]="L5_2"})(_||(F.Level=_={}));var Ve=class{profile;level;constructor(e,t){this.profile=e,this.level=t}};F.ProfileLevelId=Ve;var Bo=new Ve(I.ConstrainedBaseline,_.L3_1),te=class{mask;masked_value;constructor(e){this.mask=~Fn("x",e),this.masked_value=Fn("1",e)}isMatch(e){return this.masked_value===(e&this.mask)}},re=class{profile_idc;profile_iop;profile;constructor(e,t,s){this.profile_idc=e,this.profile_iop=t,this.profile=s}},Wo=[new re(66,new te("x1xx0000"),I.ConstrainedBaseline),new re(77,new te("1xxx0000"),I.ConstrainedBaseline),new re(88,new te("11xx0000"),I.ConstrainedBaseline),new re(66,new te("x0xx0000"),I.Baseline),new re(88,new te("10xx0000"),I.Baseline),new re(77,new te("0x0x0000"),I.Main),new re(100,new te("00000000"),I.High),new re(100,new te("00001100"),I.ConstrainedHigh),new re(244,new te("00000000"),I.PredictiveHigh444)],jn=[{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 $n(r){if(typeof r!="string"||r.length!==6)return;let t=parseInt(r,16);if(t===0)return;let s=t&255,n=t>>8&255,i=t>>16&255,a;switch(s){case _.L1_1:{a=(n&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=s;break}default:{se.warn(`parseProfileLevelId() | unrecognized level_idc [str:${r}, level_idc:${s}]`);return}}for(let o of Wo)if(i===o.profile_idc&&o.profile_iop.isMatch(n))return se.debug(`parseProfileLevelId() | result [str:${r}, profile:${o.profile}, level:${a}]`),new Ve(o.profile,a);se.warn(`parseProfileLevelId() | unrecognized profile_idc/profile_iop combination [str:${r}, profile_idc:${i}, profile_iop:${n}]`)}function Un(r){if(r.level==_.L1_b)switch(r.profile){case I.ConstrainedBaseline:return"42f00b";case I.Baseline:return"42100b";case I.Main:return"4d100b";default:{se.warn(`profileLevelIdToString() | Level 1_b not is allowed for profile ${r.profile}`);return}}let e;switch(r.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:{se.warn(`profileLevelIdToString() | unrecognized profile ${r.profile}`);return}}let t=r.level.toString(16);return t.length===1&&(t=`0${t}`),`${e}${t}`}function Ho(r){switch(r){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:{se.warn(`profileToString() | unrecognized profile ${r}`);return}}}function Vo(r){switch(r){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:{se.warn(`levelToString() | unrecognized level ${r}`);return}}}function xe(r={}){let e=r["profile-level-id"];return e?$n(e):Bo}function Go(r={},e={}){let t=xe(r),s=xe(e);return!!(t&&s&&t.profile===s.profile)}function Ko(r={},e={}){let t=xe(r),s=xe(e);return!!(t&&s&&t.profile===s.profile&&t.level==s.level)}function Yo(r={},e={}){if(!r["profile-level-id"]&&!e["profile-level-id"]){se.warn("generateProfileLevelIdStringForAnswer() | profile-level-id missing in local and remote params");return}let t=xe(r),s=xe(e);if(!t)throw new TypeError("invalid local_profile_level_id");if(!s)throw new TypeError("invalid remote_profile_level_id");if(t.profile!==s.profile)throw new TypeError("H264 Profile mismatch");let n=qn(r)&&qn(e),i=t.level,a=s.level,o=Xo(i,a),c=n?i:o;return se.debug(`generateProfileLevelIdStringForAnswer() | result [profile:${t.profile}, level:${c}]`),Un(new Ve(t.profile,c))}function Qo(r,e){for(let s=jn.length-1;s>=0;--s){let n=jn[s];if(n.max_macroblock_frame_size*256<=r&&n.max_macroblocks_per_second<=e*n.max_macroblock_frame_size)return se.debug(`supportedLevel() | result [max_frame_pixel_count:${r}, max_fps:${e}, level:${n.level}]`),n.level}se.warn(`supportedLevel() | no level supported [max_frame_pixel_count:${r}, max_fps:${e}]`)}function Fn(r,e){return+(e[0]===r)<<7|+(e[1]===r)<<6|+(e[2]===r)<<5|+(e[3]===r)<<4|+(e[4]===r)<<3|+(e[5]===r)<<2|+(e[6]===r)<<1|+(e[7]===r)<<0}function Jo(r,e){return r===_.L1_b?e!==_.L1&&e!==_.L1_b:e===_.L1_b?r!==_.L1:r<e}function Xo(r,e){return Jo(r,e)?r:e}function qn(r={}){let e=r["level-asymmetry-allowed"];return e===!0||e===1||e==="1"}});var ie=C(z=>{"use strict";Object.defineProperty(z,"__esModule",{value:!0});z.validateAndNormalizeRtpCapabilities=sc;z.validateAndNormalizeRtpParameters=Br;z.validateAndNormalizeSctpStreamParameters=nc;z.validateSctpCapabilities=ic;z.getExtendedRtpCapabilities=ac;z.getRecvRtpCapabilities=oc;z.getSendRtpCapabilities=cc;z.getSendingRtpParameters=dc;z.getSendingRemoteRtpParameters=pc;z.reduceCodecs=lc;z.generateProbatorRtpParameters=uc;z.canSend=hc;z.canReceive=fc;var Bn=zn(),Zo=Pe(),ec="probator",tc=1234,rc=127;function sc(r){if(typeof r!="object")throw new TypeError("caps is not an object");if(r.codecs&&!Array.isArray(r.codecs))throw new TypeError("caps.codecs is not an array");r.codecs||(r.codecs=[]);for(let e of r.codecs)mc(e);if(r.headerExtensions&&!Array.isArray(r.headerExtensions))throw new TypeError("caps.headerExtensions is not an array");r.headerExtensions||(r.headerExtensions=[]);for(let e of r.headerExtensions)gc(e)}function Br(r){if(typeof r!="object")throw new TypeError("params is not an object");if(r.mid&&typeof r.mid!="string")throw new TypeError("params.mid is not a string");if(!Array.isArray(r.codecs))throw new TypeError("missing params.codecs");for(let e of r.codecs)_c(e);if(r.headerExtensions&&!Array.isArray(r.headerExtensions))throw new TypeError("params.headerExtensions is not an array");r.headerExtensions||(r.headerExtensions=[]);for(let e of r.headerExtensions)vc(e);if(r.encodings&&!Array.isArray(r.encodings))throw new TypeError("params.encodings is not an array");r.encodings||(r.encodings=[]);for(let e of r.encodings)wc(e);if(r.rtcp&&typeof r.rtcp!="object")throw new TypeError("params.rtcp is not an object");r.rtcp||(r.rtcp={}),yc(r.rtcp)}function nc(r){if(typeof r!="object")throw new TypeError("params is not an object");if(typeof r.streamId!="number")throw new TypeError("missing params.streamId");let e=!1;if(typeof r.ordered=="boolean"?e=!0:r.ordered=!0,r.maxPacketLifeTime&&typeof r.maxPacketLifeTime!="number")throw new TypeError("invalid params.maxPacketLifeTime");if(r.maxRetransmits&&typeof r.maxRetransmits!="number")throw new TypeError("invalid params.maxRetransmits");if(r.maxPacketLifeTime&&r.maxRetransmits)throw new TypeError("cannot provide both maxPacketLifeTime and maxRetransmits");if(e&&r.ordered&&(r.maxPacketLifeTime||r.maxRetransmits))throw new TypeError("cannot be ordered with maxPacketLifeTime or maxRetransmits");if(!e&&(r.maxPacketLifeTime||r.maxRetransmits)&&(r.ordered=!1),r.label&&typeof r.label!="string")throw new TypeError("invalid params.label");if(r.protocol&&typeof r.protocol!="string")throw new TypeError("invalid params.protocol")}function ic(r){if(typeof r!="object")throw new TypeError("caps is not an object");if(!r.numStreams||typeof r.numStreams!="object")throw new TypeError("missing caps.numStreams");bc(r.numStreams)}function ac(r,e,t){let s={codecs:[],headerExtensions:[]};if(t)for(let n of r.codecs??[]){if(Ge(n))continue;let i=(e.codecs??[]).find(o=>zr(o,n,{strict:!0,modify:!0}));if(!i)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:Wn(n,i)};s.codecs.push(a)}else for(let n of e.codecs??[]){if(Ge(n))continue;let i=(r.codecs??[]).find(o=>zr(o,n,{strict:!0,modify:!0}));if(!i)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:Wn(i,n)};s.codecs.push(a)}for(let n of s.codecs){let i=r.codecs.find(o=>Ge(o)&&o.parameters?.apt===n.localPayloadType),a=e.codecs.find(o=>Ge(o)&&o.parameters?.apt===n.remotePayloadType);i&&a&&(n.localRtxPayloadType=i.preferredPayloadType,n.remoteRtxPayloadType=a.preferredPayloadType)}for(let n of e.headerExtensions){let i=r.headerExtensions.find(o=>Sc(o,n));if(!i)continue;let a={kind:n.kind,uri:n.uri,sendId:i.preferredId,recvId:n.preferredId,encrypt:i.preferredEncrypt??!1,direction:"sendrecv"};switch(n.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}}s.headerExtensions.push(a)}return s}function oc(r){return Vn({direction:"recvonly",extendedRtpCapabilities:r})}function cc(r){return Vn({direction:"sendonly",extendedRtpCapabilities:r})}function dc(r,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let s of e.codecs){if(s.kind!==r)continue;let n={mimeType:s.mimeType,payloadType:s.localPayloadType,clockRate:s.clockRate,channels:s.channels,parameters:s.localParameters,rtcpFeedback:s.rtcpFeedback};if(t.codecs.push(n),s.localRtxPayloadType){let i={mimeType:`${s.kind}/rtx`,payloadType:s.localRtxPayloadType,clockRate:s.clockRate,parameters:{apt:s.localPayloadType},rtcpFeedback:[]};t.codecs.push(i)}}for(let s of e.headerExtensions){if(s.kind&&s.kind!==r||s.direction!=="sendrecv"&&s.direction!=="sendonly")continue;let n={uri:s.uri,id:s.sendId,encrypt:s.encrypt,parameters:{}};t.headerExtensions.push(n)}return t}function pc(r,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let s of e.codecs){if(s.kind!==r)continue;let n={mimeType:s.mimeType,payloadType:s.localPayloadType,clockRate:s.clockRate,channels:s.channels,parameters:s.remoteParameters,rtcpFeedback:s.rtcpFeedback};if(t.codecs.push(n),s.localRtxPayloadType){let i={mimeType:`${s.kind}/rtx`,payloadType:s.localRtxPayloadType,clockRate:s.clockRate,parameters:{apt:s.localPayloadType},rtcpFeedback:[]};t.codecs.push(i)}}for(let s of e.headerExtensions){if(s.kind&&s.kind!==r||s.direction!=="sendrecv"&&s.direction!=="sendonly")continue;let n={uri:s.uri,id:s.sendId,encrypt:s.encrypt,parameters:{}};t.headerExtensions.push(n)}if(t.headerExtensions.some(s=>s.uri==="http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"))for(let s of t.codecs)s.rtcpFeedback=(s.rtcpFeedback??[]).filter(n=>n.type!=="goog-remb");else if(t.headerExtensions.some(s=>s.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"))for(let s of t.codecs)s.rtcpFeedback=(s.rtcpFeedback??[]).filter(n=>n.type!=="transport-cc");else for(let s of t.codecs)s.rtcpFeedback=(s.rtcpFeedback??[]).filter(n=>n.type!=="transport-cc"&&n.type!=="goog-remb");return t}function lc(r,e){let t=[];if(!e)t.push(r[0]),Ge(r[1])&&t.push(r[1]);else{for(let s=0;s<r.length;++s)if(zr(r[s],e,{strict:!0})){t.push(r[s]),Ge(r[s+1])&&t.push(r[s+1]);break}if(t.length===0)throw new TypeError("no matching codec found")}return t}function uc(r){r=Zo.clone(r),Br(r);let e={mid:ec,codecs:[],headerExtensions:[],encodings:[{ssrc:tc}],rtcp:{cname:"probator"}};return e.codecs.push(r.codecs[0]),e.codecs[0].payloadType=rc,e.headerExtensions=r.headerExtensions,e}function hc(r,e){return(e.codecs??[]).some(t=>t.kind===r)}function fc(r,e){if(Br(r),r.codecs.length===0)return!1;let t=r.codecs[0];return(e.codecs??[]).some(s=>s.preferredPayloadType===t.payloadType)}function mc(r){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof r!="object")throw new TypeError("codec is not an object");if(!r.mimeType||typeof r.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(r.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(r.kind=t[1].toLowerCase(),typeof r.preferredPayloadType!="number")throw new TypeError("missing codec.preferredPayloadType");if(typeof r.clockRate!="number")throw new TypeError("missing codec.clockRate");r.kind==="audio"?typeof r.channels!="number"&&(r.channels=1):delete r.channels,(!r.parameters||typeof r.parameters!="object")&&(r.parameters={});for(let s of Object.keys(r.parameters)){let n=r.parameters[s];if(n===void 0&&(r.parameters[s]="",n=""),typeof n!="string"&&typeof n!="number")throw new TypeError(`invalid codec parameter [key:${s}s, value:${n}]`);if(s==="apt"&&typeof n!="number")throw new TypeError("invalid codec apt parameter")}(!r.rtcpFeedback||!Array.isArray(r.rtcpFeedback))&&(r.rtcpFeedback=[]);for(let s of r.rtcpFeedback)Hn(s)}function Hn(r){if(typeof r!="object")throw new TypeError("fb is not an object");if(!r.type||typeof r.type!="string")throw new TypeError("missing fb.type");(!r.parameter||typeof r.parameter!="string")&&(r.parameter="")}function gc(r){if(typeof r!="object")throw new TypeError("ext is not an object");if(r.kind!=="audio"&&r.kind!=="video")throw new TypeError("invalid ext.kind");if(!r.uri||typeof r.uri!="string")throw new TypeError("missing ext.uri");if(typeof r.preferredId!="number")throw new TypeError("missing ext.preferredId");if(r.preferredEncrypt&&typeof r.preferredEncrypt!="boolean")throw new TypeError("invalid ext.preferredEncrypt");if(r.preferredEncrypt||(r.preferredEncrypt=!1),r.direction&&typeof r.direction!="string")throw new TypeError("invalid ext.direction");r.direction||(r.direction="sendrecv")}function _c(r){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof r!="object")throw new TypeError("codec is not an object");if(!r.mimeType||typeof r.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(r.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(typeof r.payloadType!="number")throw new TypeError("missing codec.payloadType");if(typeof r.clockRate!="number")throw new TypeError("missing codec.clockRate");t[1].toLowerCase()==="audio"?typeof r.channels!="number"&&(r.channels=1):delete r.channels,(!r.parameters||typeof r.parameters!="object")&&(r.parameters={});for(let n of Object.keys(r.parameters)){let i=r.parameters[n];if(i===void 0&&(r.parameters[n]="",i=""),typeof i!="string"&&typeof i!="number")throw new TypeError(`invalid codec parameter [key:${n}s, value:${i}]`);if(n==="apt"&&typeof i!="number")throw new TypeError("invalid codec apt parameter")}(!r.rtcpFeedback||!Array.isArray(r.rtcpFeedback))&&(r.rtcpFeedback=[]);for(let n of r.rtcpFeedback)Hn(n)}function vc(r){if(typeof r!="object")throw new TypeError("ext is not an object");if(!r.uri||typeof r.uri!="string")throw new TypeError("missing ext.uri");if(typeof r.id!="number")throw new TypeError("missing ext.id");if(r.encrypt&&typeof r.encrypt!="boolean")throw new TypeError("invalid ext.encrypt");r.encrypt||(r.encrypt=!1),(!r.parameters||typeof r.parameters!="object")&&(r.parameters={});for(let e of Object.keys(r.parameters)){let t=r.parameters[e];if(t===void 0&&(r.parameters[e]="",t=""),typeof t!="string"&&typeof t!="number")throw new TypeError("invalid header extension parameter")}}function wc(r){if(typeof r!="object")throw new TypeError("encoding is not an object");if(r.ssrc&&typeof r.ssrc!="number")throw new TypeError("invalid encoding.ssrc");if(r.rid&&typeof r.rid!="string")throw new TypeError("invalid encoding.rid");if(r.rtx&&typeof r.rtx!="object")throw new TypeError("invalid encoding.rtx");if(r.rtx&&typeof r.rtx.ssrc!="number")throw new TypeError("missing encoding.rtx.ssrc");if((!r.dtx||typeof r.dtx!="boolean")&&(r.dtx=!1),r.scalabilityMode&&typeof r.scalabilityMode!="string")throw new TypeError("invalid encoding.scalabilityMode")}function yc(r){if(typeof r!="object")throw new TypeError("rtcp is not an object");if(r.cname&&typeof r.cname!="string")throw new TypeError("invalid rtcp.cname");(!r.reducedSize||typeof r.reducedSize!="boolean")&&(r.reducedSize=!0)}function bc(r){if(typeof r!="object")throw new TypeError("numStreams is not an object");if(typeof r.OS!="number")throw new TypeError("missing numStreams.OS");if(typeof r.MIS!="number")throw new TypeError("missing numStreams.MIS")}function Vn({direction:r,extendedRtpCapabilities:e}){let t={codecs:[],headerExtensions:[]};for(let s of e.codecs){let n={kind:s.kind,mimeType:s.mimeType,preferredPayloadType:s.remotePayloadType,clockRate:s.clockRate,channels:s.channels,parameters:s.localParameters,rtcpFeedback:s.rtcpFeedback};if(t.codecs.push(n),!s.remoteRtxPayloadType)continue;let i={kind:s.kind,mimeType:`${s.kind}/rtx`,preferredPayloadType:s.remoteRtxPayloadType,clockRate:s.clockRate,parameters:{apt:s.remotePayloadType},rtcpFeedback:[]};t.codecs.push(i)}for(let s of e.headerExtensions){if(s.direction!=="sendrecv"&&s.direction!==r)continue;let n={kind:s.kind,uri:s.uri,preferredId:s.recvId,preferredEncrypt:s.encrypt??!1,direction:s.direction};t.headerExtensions.push(n)}return t}function Ge(r){return r?/.+\/rtx$/i.test(r.mimeType):!1}function zr(r,e,{strict:t=!1,modify:s=!1}={}){let n=r.mimeType.toLowerCase(),i=e.mimeType.toLowerCase();if(n!==i||r.clockRate!==e.clockRate||r.channels!==e.channels)return!1;switch(n){case"video/h264":{if(t){let a=r.parameters["packetization-mode"]??0,o=e.parameters["packetization-mode"]??0;if(a!==o||!Bn.isSameProfile(r.parameters,e.parameters))return!1;let c;try{c=Bn.generateProfileLevelIdStringForAnswer(r.parameters,e.parameters)}catch{return!1}s&&(c?(r.parameters["profile-level-id"]=c,e.parameters["profile-level-id"]=c):(delete r.parameters["profile-level-id"],delete e.parameters["profile-level-id"]))}break}case"video/vp9":{if(t){let a=r.parameters["profile-id"]??0,o=e.parameters["profile-id"]??0;if(a!==o)return!1}break}}return!0}function Sc(r,e){return!(r.kind&&e.kind&&r.kind!==e.kind||r.uri!==e.uri)}function Wn(r,e){let t=[];for(let s of r.rtcpFeedback??[]){let n=(e.rtcpFeedback??[]).find(i=>i.type===s.type&&(i.parameter===s.parameter||!i.parameter&&!s.parameter));n&&t.push(n)}return t}});var Gn=C(Qt=>{"use strict";Object.defineProperty(Qt,"__esModule",{value:!0});Qt.Logger=void 0;var Ke=pt(),Ye="awaitqueue",Wr=class{_debug;_warn;_error;constructor(e){e?(this._debug=Ke(`${Ye}:${e}`),this._warn=Ke(`${Ye}:WARN:${e}`),this._error=Ke(`${Ye}:ERROR:${e}`)):(this._debug=Ke(Ye),this._warn=Ke(`${Ye}:WARN`),this._error=Ke(`${Ye}: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}};Qt.Logger=Wr});var Gr=C(Qe=>{"use strict";Object.defineProperty(Qe,"__esModule",{value:!0});Qe.AwaitQueueRemovedTaskError=Qe.AwaitQueueStoppedError=void 0;var Hr=class r extends Error{constructor(e){super(e??"queue stopped"),this.name="AwaitQueueStoppedError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,r)}};Qe.AwaitQueueStoppedError=Hr;var Vr=class r extends Error{constructor(e){super(e??"queue task removed"),this.name="AwaitQueueRemovedTaskError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,r)}};Qe.AwaitQueueRemovedTaskError=Vr});var Kn=C(Jt=>{"use strict";Object.defineProperty(Jt,"__esModule",{value:!0});Jt.AwaitQueue=void 0;var Rc=Gn(),Kr=Gr(),he=new Rc.Logger("AwaitQueue"),Yr=class{pendingTasks=new Map;nextTaskId=0;constructor(){he.debug("constructor()")}get size(){return this.pendingTasks.size}async push(e,t,s){if(t=t??e.name,he.debug(`push() [name:${t}, options:%o]`,s),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((n,i)=>{if(t&&s?.removeOngoingTasksWithSameName)for(let o of this.pendingTasks.values())o.name===t&&o.reject(new Kr.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),he.debug(`resolving task [name:${a.name}]`),n(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),he.debug(`rejecting task [name:${a.name}]: %s`,String(o)),i(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(){he.debug("stop()");for(let e of this.pendingTasks.values())he.debug(`stop() | stopping task [name:${e.name}]`),e.reject(new Kr.AwaitQueueStoppedError,{canExecuteNextTask:!1})}remove(e){he.debug(`remove() [taskIdx:${e}]`);let t=Array.from(this.pendingTasks.values())[e];if(!t){he.debug(`stop() | no task with given idx [taskIdx:${e}]`);return}t.reject(new Kr.AwaitQueueRemovedTaskError,{canExecuteNextTask:!0})}dump(){let e=Date.now(),t=0;return Array.from(this.pendingTasks.values()).map(s=>({idx:t++,task:s.task,name:s.name,enqueuedTime:s.executedAt?s.executedAt-s.enqueuedAt:e-s.enqueuedAt,executionTime:s.executedAt?e-s.executedAt:0}))}async execute(e){if(he.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})}}};Jt.AwaitQueue=Yr});var Qn=C(Re=>{"use strict";Object.defineProperty(Re,"__esModule",{value:!0});Re.AwaitQueueRemovedTaskError=Re.AwaitQueueStoppedError=Re.AwaitQueue=void 0;var Cc=Kn();Object.defineProperty(Re,"AwaitQueue",{enumerable:!0,get:function(){return Cc.AwaitQueue}});var Yn=Gr();Object.defineProperty(Re,"AwaitQueueStoppedError",{enumerable:!0,get:function(){return Yn.AwaitQueueStoppedError}});Object.defineProperty(Re,"AwaitQueueRemovedTaskError",{enumerable:!0,get:function(){return Yn.AwaitQueueRemovedTaskError}})});var Xn=C(Xt=>{"use strict";Object.defineProperty(Xt,"__esModule",{value:!0});Xt.Producer=void 0;var Tc=U(),Jn=V(),Je=Q(),ae=new Tc.Logger("Producer"),Qr=class extends Jn.EnhancedEventEmitter{_id;_localId;_closed=!1;_rtpSender;_track;_kind;_rtpParameters;_paused;_maxSpatialLayer;_stopTracks;_disableTrackOnPause;_zeroRtpOnPause;_appData;_observer=new Jn.EnhancedEventEmitter;constructor({id:e,localId:t,rtpSender:s,track:n,rtpParameters:i,stopTracks:a,disableTrackOnPause:o,zeroRtpOnPause:c,appData:p}){super(),ae.debug("constructor()"),this._id=e,this._localId=t,this._rtpSender=s,this._track=n,this._kind=n.kind,this._rtpParameters=i,this._paused=o?!n.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||(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 Je.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(ae.debug("pause()"),this._closed){ae.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(ae.debug("resume()"),this._closed){ae.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(ae.debug("replaceTrack() [track:%o]",e),this._closed){if(e&&this._stopTracks)try{e.stop()}catch{}throw new Je.InvalidStateError("closed")}else if(e?.readyState==="ended")throw new Je.InvalidStateError("track ended");if(e===this._track){ae.debug("replaceTrack() | same track, ignored");return}await new Promise((t,s)=>{this.safeEmit("@replacetrack",e,t,s)}),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 Je.InvalidStateError("closed");if(this._kind!=="video")throw new Je.UnsupportedError("not a video Producer");if(typeof e!="number")throw new TypeError("invalid spatialLayer");e!==this._maxSpatialLayer&&(await new Promise((t,s)=>{this.safeEmit("@setmaxspatiallayer",e,t,s)}).catch(()=>{}),this._maxSpatialLayer=e)}async setRtpEncodingParameters(e){if(this._closed)throw new Je.InvalidStateError("closed");if(typeof e!="object")throw new TypeError("invalid params");await new Promise((t,s)=>{this.safeEmit("@setrtpencodingparameters",e,t,s)})}onTrackEnded(){ae.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{}}};Xt.Producer=Qr});var ei=C(Zt=>{"use strict";Object.defineProperty(Zt,"__esModule",{value:!0});Zt.Consumer=void 0;var Ec=U(),Zn=V(),kc=Q(),oe=new Ec.Logger("Consumer"),Jr=class extends Zn.EnhancedEventEmitter{_id;_localId;_producerId;_closed=!1;_rtpReceiver;_track;_rtpParameters;_paused;_appData;_observer=new Zn.EnhancedEventEmitter;constructor({id:e,localId:t,producerId:s,rtpReceiver:n,track:i,rtpParameters:a,appData:o}){super(),oe.debug("constructor()"),this._id=e,this._localId=t,this._producerId=s,this._rtpReceiver=n,this._track=i,this._rtpParameters=a,this._paused=!i.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||(oe.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(oe.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new kc.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(oe.debug("pause()"),this._closed){oe.error("pause() | Consumer closed");return}if(this._paused){oe.debug("pause() | Consumer is already paused");return}this._paused=!0,this._track.enabled=!1,this.emit("@pause"),this._observer.safeEmit("pause")}resume(){if(oe.debug("resume()"),this._closed){oe.error("resume() | Consumer closed");return}if(!this._paused){oe.debug("resume() | Consumer is already resumed");return}this._paused=!1,this._track.enabled=!0,this.emit("@resume"),this._observer.safeEmit("resume")}onTrackEnded(){oe.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{}}};Zt.Consumer=Jr});var ri=C(er=>{"use strict";Object.defineProperty(er,"__esModule",{value:!0});er.DataProducer=void 0;var Pc=U(),ti=V(),xc=Q(),fe=new Pc.Logger("DataProducer"),Xr=class extends ti.EnhancedEventEmitter{_id;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new ti.EnhancedEventEmitter;constructor({id:e,dataChannel:t,sctpStreamParameters:s,appData:n}){super(),fe.debug("constructor()"),this._id=e,this._dataChannel=t,this._sctpStreamParameters=s,this._appData=n??{},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||(fe.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(fe.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}send(e){if(fe.debug("send()"),this._closed)throw new xc.InvalidStateError("closed");this._dataChannel.send(e)}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(fe.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"?fe.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):fe.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(fe.warn('DataChannel "close" event'),this._closed=!0,this.emit("@close"),this.safeEmit("close"),this._observer.safeEmit("close"))}),this._dataChannel.addEventListener("message",()=>{this._closed||fe.warn('DataChannel "message" event in a DataProducer, message discarded')}),this._dataChannel.addEventListener("bufferedamountlow",()=>{this._closed||this.safeEmit("bufferedamountlow")})}};er.DataProducer=Xr});var ni=C(tr=>{"use strict";Object.defineProperty(tr,"__esModule",{value:!0});tr.DataConsumer=void 0;var Dc=U(),si=V(),De=new Dc.Logger("DataConsumer"),Zr=class extends si.EnhancedEventEmitter{_id;_dataProducerId;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new si.EnhancedEventEmitter;constructor({id:e,dataProducerId:t,dataChannel:s,sctpStreamParameters:n,appData:i}){super(),De.debug("constructor()"),this._id=e,this._dataProducerId=t,this._dataChannel=s,this._sctpStreamParameters=n,this._appData=i??{},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||(De.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(De.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(De.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"?De.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):De.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(De.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)})}};tr.DataConsumer=Zr});var ai=C(rr=>{"use strict";Object.defineProperty(rr,"__esModule",{value:!0});rr.Transport=void 0;var Ic=Qn(),Lc=U(),ii=V(),N=Q(),es=Pe(),ut=ie(),Mc=Xn(),Oc=ei(),Ac=ri(),Nc=ni(),A=new Lc.Logger("Transport"),ts=class{consumerOptions;promise;resolve;reject;constructor(e){this.consumerOptions=e,this.promise=new Promise((t,s)=>{this.resolve=t,this.reject=s})}},rs=class extends ii.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 Ic.AwaitQueue;_pendingConsumerTasks=[];_consumerCreationInProgress=!1;_pendingPauseConsumers=new Map;_consumerPauseInProgress=!1;_pendingResumeConsumers=new Map;_consumerResumeInProgress=!1;_pendingCloseConsumers=new Map;_consumerCloseInProgress=!1;_observer=new ii.EnhancedEventEmitter;constructor({direction:e,id:t,iceParameters:s,iceCandidates:n,dtlsParameters:i,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:p,appData:d,handlerFactory:l,getSendExtendedRtpCapabilities:u,recvRtpCapabilities:m,canProduceByKind:f}){super(),A.debug("constructor() [id:%s, direction:%s]",t,e),this._id=t,this._direction=e,this._getSendExtendedRtpCapabilities=u,this._recvRtpCapabilities=m,this._canProduceByKind=f,this._maxSctpMessageSize=a?.maxMessageSize;let h=es.clone(p)??{};delete h.iceServers,delete h.iceTransportPolicy,delete h.bundlePolicy,delete h.rtcpMuxPolicy,this._handler=l.factory({direction:e,iceParameters:s,iceCandidates:n,dtlsParameters:i,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:s,codecOptions:n,headerExtensionOptions:i,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(s&&!Array.isArray(s))throw TypeError("encodings must be an array");s?.length===0?u=void 0:s&&(u=s.map(g=>{let v={active:!0};return g.active===!1&&(v.active=!1),typeof g.dtx=="boolean"&&(v.dtx=g.dtx),typeof g.scalabilityMode=="string"&&(v.scalabilityMode=g.scalabilityMode),typeof g.scaleResolutionDownBy=="number"&&(v.scaleResolutionDownBy=g.scaleResolutionDownBy),typeof g.maxBitrate=="number"&&(v.maxBitrate=g.maxBitrate),typeof g.maxFramerate=="number"&&(v.maxFramerate=g.maxFramerate),typeof g.adaptivePtime=="boolean"&&(v.adaptivePtime=g.adaptivePtime),typeof g.priority=="string"&&(v.priority=g.priority),typeof g.networkPriority=="string"&&(v.networkPriority=g.networkPriority),v}));let{localId:m,rtpParameters:f,rtpSender:h}=await this._handler.send({track:e,streamId:t,encodings:u,codecOptions:n,headerExtensionOptions:i,codec:a,onRtpSender:d});try{ut.validateAndNormalizeRtpParameters(f);let{id:g}=await new Promise((b,P)=>{this.safeEmit("produce",{kind:e.kind,rtpParameters:f,appData:l},b,P)}),v=new Mc.Producer({id:g,localId:m,rtpSender:h,track:e,rtpParameters:f,stopTracks:o,disableTrackOnPause:c,zeroRtpOnPause:p,appData:l});return this._producers.set(v.id,v),this.handleProducer(v),this._observer.safeEmit("newproducer",v),v}catch(g){throw this._handler.stopSending(m).catch(()=>{}),g}},"transport.produce()").catch(u=>{if(o)try{e.stop()}catch{}throw u})}async consume({id:e,producerId:t,kind:s,rtpParameters:n,streamId:i,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(s!=="audio"&&s!=="video")throw new TypeError(`invalid kind '${s}'`);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=es.clone(n);if(!ut.canReceive(c,this._recvRtpCapabilities))throw new N.UnsupportedError("cannot consume this Producer");let d=new ts({id:e,producerId:t,kind:s,rtpParameters:c,streamId:i,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:s,label:n="",protocol:i="",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||s)&&(e=!1),this._awaitQueue.push(async()=>{let{dataChannel:o,sctpStreamParameters:c}=await this._handler.sendDataChannel({sctpStreamParameters:{ordered:e,maxPacketLifeTime:t,maxRetransmits:s,label:n,protocol:i}});ut.validateAndNormalizeSctpStreamParameters(c);let{id:p}=await new Promise((l,u)=>{this.safeEmit("producedata",{sctpStreamParameters:c,label:n,protocol:i,appData:a},l,u)}),d=new Ac.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:s,label:n="",protocol:i="",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=es.clone(s);return ut.validateAndNormalizeSctpStreamParameters(o),this._awaitQueue.push(async()=>{let{dataChannel:c}=await this._handler.receiveDataChannel({maxMessageSize:this._maxSctpMessageSize,sctpStreamParameters:o,label:n,protocol:i}),p=new Nc.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,s=[];for(let n of e){let{id:i,kind:a,rtpParameters:o,streamId:c,onRtpReceiver:p}=n.consumerOptions;s.push({trackId:i,kind:a,rtpParameters:o,streamId:c,onRtpReceiver:p})}try{let n=await this._handler.receive(s);for(let i=0;i<n.length;++i){let a=e[i],o=n[i],{id:c,producerId:p,kind:d,rtpParameters:l,appData:u}=a.consumerOptions,{localId:m,rtpReceiver:f,track:h}=o,g=new Oc.Consumer({id:c,localId:m,producerId:p,rtpReceiver:f,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(n){for(let i of e)i.reject(n)}if(t)try{let n=ut.generateProbatorRtpParameters(t.rtpParameters);await this._handler.receive([{trackId:"probator",kind:"video",rtpParameters:n}]),A.debug("createPendingConsumers() | Consumer for RTP probation created"),this._probatorConsumerCreated=!0}catch(n){A.error("createPendingConsumers() | failed to create Consumer for RTP probation:%o",n)}},"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(s=>s.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(s=>s.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},s,n)=>{if(this._closed){n(new N.InvalidStateError("closed"));return}this.safeEmit("connect",{dtlsParameters:t},s,n)}),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,s)=>{this._awaitQueue.push(async()=>await this._handler.pauseSending(e.localId),"producer @pause event").then(t).catch(s)}),e.on("@resume",(t,s)=>{this._awaitQueue.push(async()=>await this._handler.resumeSending(e.localId),"producer @resume event").then(t).catch(s)}),e.on("@replacetrack",(t,s,n)=>{this._awaitQueue.push(async()=>await this._handler.replaceTrack(e.localId,t),"producer @replacetrack event").then(s).catch(n)}),e.on("@setmaxspatiallayer",(t,s,n)=>{this._awaitQueue.push(async()=>await this._handler.setMaxSpatialLayer(e.localId,t),"producer @setmaxspatiallayer event").then(s).catch(n)}),e.on("@setrtpencodingparameters",(t,s,n)=>{this._awaitQueue.push(async()=>await this._handler.setRtpEncodingParameters(e.localId,t),"producer @setrtpencodingparameters event").then(s).catch(n)}),e.on("@getstats",(t,s)=>{if(this._closed)return s(new N.InvalidStateError("closed"));this._handler.getSenderStats(e.localId).then(t).catch(s)})}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,s)=>{if(this._closed)return s(new N.InvalidStateError("closed"));this._handler.getReceiverStats(e.localId).then(t).catch(s)})}handleDataProducer(e){e.on("@close",()=>{this._dataProducers.delete(e.id)})}handleDataConsumer(e){e.on("@close",()=>{this._dataConsumers.delete(e.id)})}};rr.Transport=rs});var sr=C((Il,ci)=>{"use strict";var oi=ci.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(r){return r.encoding?"rtpmap:%d %s/%s/%s":r.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(r){return r.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(r){return r.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(r){return"extmap:%d"+(r.direction?"/%s":"%v")+(r["encrypt-uri"]?" %s":"%v")+" %s"+(r.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(r){return r.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(r){var e="candidate:%s %d %s %d %s %d typ %s";return e+=r.raddr!=null?" raddr %s rport %d":"%v%v",e+=r.tcptype!=null?" tcptype %s":"%v",r.generation!=null&&(e+=" generation %d"),e+=r["network-id"]!=null?" network-id %d":"%v",e+=r["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(r){var e="ssrc:%d";return r.attribute!=null&&(e+=" %s",r.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(r){return r.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(r){return r.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(r){return"imageattr:%s %s %s"+(r.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(r){return"simulcast:%s %s"+(r.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(r){return"ts-refclk:%s"+(r.clksrcExt!=null?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(r){var e="mediaclk:";return e+=r.id!=null?"id=%s %s":"%v%s",e+=r.mediaClockValue!=null?"=%s":"",e+=r.rateNumerator!=null?" rate=%s":"",e+=r.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(oi).forEach(function(r){var e=oi[r];e.forEach(function(t){t.reg||(t.reg=/(.*)/),t.format||(t.format="%s")})})});var li=C(me=>{"use strict";var Xe=function(r){return String(Number(r))===r?Number(r):r},jc=function(r,e,t,s){if(s&&!t)e[s]=Xe(r[1]);else for(var n=0;n<t.length;n+=1)r[n+1]!=null&&(e[t[n]]=Xe(r[n+1]))},Fc=function(r,e,t){var s=r.name&&r.names;r.push&&!e[r.push]?e[r.push]=[]:s&&!e[r.name]&&(e[r.name]={});var n=r.push?{}:s?e[r.name]:e;jc(t.match(r.reg),n,r.names,r.name),r.push&&e[r.push].push(n)},di=sr(),qc=RegExp.prototype.test.bind(/^([a-z])=(.*)/);me.parse=function(r){var e={},t=[],s=e;return r.split(/(\r\n|\r|\n)/).filter(qc).forEach(function(n){var i=n[0],a=n.slice(2);i==="m"&&(t.push({rtp:[],fmtp:[]}),s=t[t.length-1]);for(var o=0;o<(di[i]||[]).length;o+=1){var c=di[i][o];if(c.reg.test(a))return Fc(c,s,a)}}),e.media=t,e};var pi=function(r,e){var t=e.split(/=(.+)/,2);return t.length===2?r[t[0]]=Xe(t[1]):t.length===1&&e.length>1&&(r[t[0]]=void 0),r};me.parseParams=function(r){return r.split(/;\s?/).reduce(pi,{})};me.parseFmtpConfig=me.parseParams;me.parsePayloads=function(r){return r.toString().split(" ").map(Number)};me.parseRemoteCandidates=function(r){for(var e=[],t=r.split(" ").map(Xe),s=0;s<t.length;s+=3)e.push({component:t[s],ip:t[s+1],port:t[s+2]});return e};me.parseImageAttributes=function(r){return r.split(" ").map(function(e){return e.substring(1,e.length-1).split(",").reduce(pi,{})})};me.parseSimulcastStreamList=function(r){return r.split(";").map(function(e){return e.split(",").map(function(t){var s,n=!1;return t[0]!=="~"?s=Xe(t):(s=Xe(t.substring(1,t.length)),n=!0),{scid:s,paused:n}})})}});var hi=C((Ml,ui)=>{"use strict";var ss=sr(),$c=/%[sdv%]/g,Uc=function(r){var e=1,t=arguments,s=t.length;return r.replace($c,function(n){if(e>=s)return n;var i=t[e];switch(e+=1,n){case"%%":return"%";case"%s":return String(i);case"%d":return Number(i);case"%v":return""}})},ht=function(r,e,t){var s=e.format instanceof Function?e.format(e.push?t:t[e.name]):e.format,n=[r+"="+s];if(e.names)for(var i=0;i<e.names.length;i+=1){var a=e.names[i];e.name?n.push(t[e.name][a]):n.push(t[e.names[i]])}else n.push(t[e.name]);return Uc.apply(null,n)},zc=["v","o","s","i","u","e","p","c","b","t","r","z","a"],Bc=["i","c","b","a"];ui.exports=function(r,e){e=e||{},r.version==null&&(r.version=0),r.name==null&&(r.name=" "),r.media.forEach(function(i){i.payloads==null&&(i.payloads="")});var t=e.outerOrder||zc,s=e.innerOrder||Bc,n=[];return t.forEach(function(i){ss[i].forEach(function(a){a.name in r&&r[a.name]!=null?n.push(ht(i,a,r)):a.push in r&&r[a.push]!=null&&r[a.push].forEach(function(o){n.push(ht(i,a,o))})})}),r.media.forEach(function(i){n.push(ht("m",ss.m[0],i)),s.forEach(function(a){ss[a].forEach(function(o){o.name in i&&i[o.name]!=null?n.push(ht(a,o,i)):o.push in i&&i[o.push]!=null&&i[o.push].forEach(function(c){n.push(ht(a,o,c))})})})}),n.join(`\r
|
|
7
|
-
`)+`\r
|
|
8
|
-
`}});var ge=C(ce=>{"use strict";var Ie=li(),Wc=hi(),Hc=sr();ce.grammar=Hc;ce.write=Wc;ce.parse=Ie.parse;ce.parseParams=Ie.parseParams;ce.parseFmtpConfig=Ie.parseFmtpConfig;ce.parsePayloads=Ie.parsePayloads;ce.parseRemoteCandidates=Ie.parseRemoteCandidates;ce.parseImageAttributes=Ie.parseImageAttributes;ce.parseSimulcastStreamList=Ie.parseSimulcastStreamList});var Le=C(ns=>{"use strict";Object.defineProperty(ns,"__esModule",{value:!0});ns.parse=Gc;var Vc=new RegExp("^[LS]([1-9]\\d{0,1})T([1-9]\\d{0,1})");function Gc(r){let e=Vc.exec(r??"");return e?{spatialLayers:Number(e[1]),temporalLayers:Number(e[2])}:{spatialLayers:1,temporalLayers:1}}});var gi=C(Ce=>{"use strict";Object.defineProperty(Ce,"__esModule",{value:!0});Ce.OfferMediaSection=Ce.AnswerMediaSection=Ce.MediaSection=void 0;var Kc=ge(),fi=Pe(),ft=class{_mediaObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:s}){if(this._mediaObject={type:"",port:0,protocol:"",payloads:"",rtp:[],fmtp:[]},e&&this.setIceParameters(e),t){this._mediaObject.candidates=[];for(let n of t){let i={foundation:n.foundation,component:1,ip:n.address??n.ip,port:n.port,priority:n.priority,transport:n.protocol,type:n.type};n.tcpType&&(i.tcptype=n.tcpType),this._mediaObject.candidates.push(i)}this._mediaObject.endOfCandidates="end-of-candidates",this._mediaObject.iceOptions="renomination"}s&&this.setDtlsRole(s.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}};Ce.MediaSection=ft;var is=class extends ft{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:s,sctpParameters:n,plainRtpParameters:i,offerMediaObject:a,offerRtpParameters:o,answerRtpParameters:c,codecOptions:p}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:s}),this._mediaObject.mid=String(a.mid),this._mediaObject.type=a.type,this._mediaObject.protocol=a.protocol,i?(this._mediaObject.connection={ip:i.ip,version:i.ipVersion},this._mediaObject.port=i.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:mi(d),rate:d.clockRate};d.channels>1&&(l.encoding=d.channels),this._mediaObject.rtp.push(l);let u=fi.clone(d.parameters)??{},m=fi.clone(d.rtcpFeedback)??[];if(p){let{opusStereo:h,opusFec:g,opusDtx:v,opusMaxPlaybackRate:b,opusMaxAverageBitrate:P,opusPtime:x,opusNack:k,videoGoogleStartBitrate:L,videoGoogleMaxBitrate:Ae,videoGoogleMinBitrate:ot}=p,ve=o.codecs.find(Ee=>Ee.payloadType===d.payloadType);switch(d.mimeType.toLowerCase()){case"audio/opus":case"audio/multiopus":{h!==void 0&&(ve.parameters["sprop-stereo"]=h?1:0,u.stereo=h?1:0),g!==void 0&&(ve.parameters.useinbandfec=g?1:0,u.useinbandfec=g?1:0),v!==void 0&&(ve.parameters.usedtx=v?1:0,u.usedtx=v?1:0),b!==void 0&&(u.maxplaybackrate=b),P!==void 0&&(u.maxaveragebitrate=P),x!==void 0&&(ve.parameters.ptime=x,u.ptime=x),k||(ve.rtcpFeedback=ve.rtcpFeedback.filter(Ee=>Ee.type!=="nack"||Ee.parameter),m=m.filter(Ee=>Ee.type!=="nack"||Ee.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),Ae!==void 0&&(u["x-google-max-bitrate"]=Ae),ot!==void 0&&(u["x-google-min-bitrate"]=ot);break}}}let f={payload:d.payloadType,config:""};for(let h of Object.keys(u))f.config&&(f.config+=";"),f.config+=`${h}=${u[h]}`;f.config&&this._mediaObject.fmtp.push(f);for(let h of m)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=n.port,this._mediaObject.maxMessageSize=n.maxMessageSize):a.sctpmap&&(this._mediaObject.payloads=String(n.port),this._mediaObject.sctpmap={app:"webrtc-datachannel",sctpmapNumber:n.port,maxMessageSize:n.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 i of e)i.rid&&(t[i.rid]=i);let s=this._mediaObject.simulcast.list1,n=Kc.parseSimulcastStreamList(s);for(let i of n)for(let a of i)a.paused=!t[a.scid]?.active;this._mediaObject.simulcast.list1=n.map(i=>i.map(a=>`${a.paused?"~":""}${a.scid}`).join(",")).join(";")}};Ce.AnswerMediaSection=is;var as=class extends ft{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:s,sctpParameters:n,plainRtpParameters:i,mid:a,kind:o,offerRtpParameters:c,streamId:p,trackId:d}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:s}),this._mediaObject.mid=String(a),this._mediaObject.type=o,i?(this._mediaObject.connection={ip:i.ip,version:i.ipVersion},this._mediaObject.protocol="RTP/AVP",this._mediaObject.port=i.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},n?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 f of c.codecs){let h={payload:f.payloadType,codec:mi(f),rate:f.clockRate};f.channels>1&&(h.encoding=f.channels),this._mediaObject.rtp.push(h);let g={payload:f.payloadType,config:""};for(let v of Object.keys(f.parameters??{}))g.config&&(g.config+=";"),g.config+=`${v}=${f.parameters[v]}`;g.config&&this._mediaObject.fmtp.push(g);for(let v of f.rtcpFeedback)this._mediaObject.rtcpFb.push({payload:f.payloadType,type:v.type,subtype:v.parameter})}this._mediaObject.payloads=c.codecs.map(f=>f.payloadType).join(" "),this._mediaObject.ext=[];for(let f of c.headerExtensions)this._mediaObject.ext.push({uri:f.uri,value:f.id});this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";let l=c.encodings[0],u=l.ssrc,m=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}),m&&(c.rtcp.cname&&this._mediaObject.ssrcs.push({id:m,attribute:"cname",value:c.rtcp.cname}),u&&this._mediaObject.ssrcGroups.push({semantics:"FID",ssrcs:`${u} ${m}`}));break}case"application":{this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=n.port,this._mediaObject.maxMessageSize=n.maxMessageSize;break}}}setDtlsRole(e){this._mediaObject.setup="actpass"}resume(){this._mediaObject.direction="sendonly"}};Ce.OfferMediaSection=as;function mi(r){let t=new RegExp("^(audio|video)/(.+)","i").exec(r.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");return t[2]}});var Ze=C(ar=>{"use strict";Object.defineProperty(ar,"__esModule",{value:!0});ar.RemoteSdp=void 0;var Yc=ge(),Qc=U(),nr=gi(),Jc=cs(),Xc=["av1","h264"],ir=new Qc.Logger("RemoteSdp"),os=class{_iceParameters;_iceCandidates;_dtlsParameters;_sctpParameters;_plainRtpParameters;_mediaSections=[];_midToIndex=new Map;_firstMid;_sdpObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:s,sctpParameters:n,plainRtpParameters:i}){if(this._iceParameters=e,this._iceCandidates=t,this._dtlsParameters=s,this._sctpParameters=n,this._plainRtpParameters=i,this._sdpObject={version:0,origin:{address:"0.0.0.0",ipVer:4,netType:"IN",sessionId:"10000",sessionVersion:0,username:`media-client-v${Jc.version}`},name:"-",timing:{start:0,stop:0},media:[]},this._sdpObject.iceOptions="ice2",e?.iceLite&&(this._sdpObject.icelite="ice-lite"),s){this._sdpObject.msidSemantic={semantic:"WMS",token:"*"};let a=this._dtlsParameters.fingerprints.length;this._sdpObject.fingerprint={type:s.fingerprints[a-1].algorithm,hash:s.fingerprints[a-1].value},this._sdpObject.groups=[{type:"BUNDLE",mids:""}]}i&&(this._sdpObject.origin.address=i.ip,this._sdpObject.origin.ipVer=i.ipVersion)}updateIceParameters(e){ir.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){ir.debug("updateDtlsRole() [role:%s]",e),this._dtlsParameters.role=e;for(let t of this._mediaSections)t.setDtlsRole(e)}setSessionExtmapAllowMixed(){ir.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:s,answerRtpParameters:n,codecOptions:i}){let a=new nr.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,offerMediaObject:e,offerRtpParameters:s,answerRtpParameters:n,codecOptions:i}),o=a.getObject();o.rtp.find(p=>Xc.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:s,streamId:n,trackId:i}){this.setSessionExtmapAllowMixed();let a=new nr.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,mid:e,kind:t,offerRtpParameters:s,streamId:n,trackId:i}),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?(ir.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 s=this.findMediaSection(e);s.muxSimulcastStreams(t),this.replaceMediaSection(s)}sendSctpAssociation({offerMediaObject:e}){let t=new nr.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 nr.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++,Yc.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 s=this._midToIndex.get(t);if(s===void 0)throw new Error(`no media section found for reuseMid '${t}'`);let n=this._mediaSections[s];this._mediaSections[s]=e,this._midToIndex.delete(n.mid),this._midToIndex.set(e.mid,s),this._sdpObject.media[s]=e.getObject(),this.regenerateBundleMids()}else{let s=this._midToIndex.get(e.mid);if(s===void 0)throw new Error(`no media section found with mid '${e.mid}'`);this._mediaSections[s]=e,this._sdpObject.media[s]=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(" "))}};ar.RemoteSdp=os});var et=C(Me=>{"use strict";Object.defineProperty(Me,"__esModule",{value:!0});Me.extractRtpCapabilities=Zc;Me.extractDtlsParameters=ed;Me.getCname=td;Me.applyCodecParameters=rd;Me.addHeaderExtension=sd;var _i=ge();function Zc({sdpObject:r}){let e=new Map,t=new Map;for(let n of r.media){let i=n.type;switch(i){case"audio":case"video":break;default:continue}for(let a of n.rtp){let o={kind:i,mimeType:`${i}/${a.codec}`,preferredPayloadType:a.payload,clockRate:a.rate,channels:a.encoding,parameters:{},rtcpFeedback:[]};e.set(o.preferredPayloadType,o)}for(let a of n.fmtp??[]){let o=_i.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 n.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===i&&!/.+\/rtx$/i.test(c.mimeType)&&c.rtcpFeedback.push(o)}for(let a of n.ext??[]){if(a["encrypt-uri"])continue;let o={kind:i,uri:a.uri,preferredId:a.value};t.set(o.preferredId,o)}}return{codecs:Array.from(e.values()),headerExtensions:Array.from(t.values())}}function ed({sdpObject:r}){let e=r.setup,t=r.fingerprint;if(!e||!t){let i=(r.media??[]).find(a=>a.port!==0);i&&(e=e??i.setup,t=t??i.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 s;switch(e){case"active":{s="client";break}case"passive":{s="server";break}case"actpass":{s="auto";break}}return{role:s,fingerprints:[{algorithm:t.type,value:t.hash}]}}function td({offerMediaObject:r}){let e=(r.ssrcs??[]).find(t=>t.attribute==="cname");return e?e.value:""}function rd({offerRtpParameters:r,answerMediaObject:e}){for(let t of r.codecs){let s=t.mimeType.toLowerCase();if(s!=="audio/opus"||!(e.rtp??[]).find(o=>o.payload===t.payloadType))continue;e.fmtp=e.fmtp??[];let i=e.fmtp.find(o=>o.payload===t.payloadType);i||(i={payload:t.payloadType,config:""},e.fmtp.push(i));let a=_i.parseParams(i.config);if(s==="audio/opus"){let o=t.parameters?.["sprop-stereo"];o!==void 0&&(a.stereo=Number(o)?1:0)}i.config="";for(let o of Object.keys(a))i.config&&(i.config+=";"),i.config+=`${o}=${a[o]}`}}function sd({offerMediaObject:r,headerExtensionUri:e,headerExtensionId:t}){r.ext||(r.ext=[]),r.ext.push({uri:e,value:t})}});var tt=C(or=>{"use strict";Object.defineProperty(or,"__esModule",{value:!0});or.getRtpEncodings=nd;or.addLegacySimulcast=id;function nd({offerMediaObject:r,codecs:e}){let t=new Set;for(let i of r.ssrcs??[]){let a=i.id;a&&t.add(a)}if(t.size===0)throw new Error("no a=ssrc lines found");let s=new Map;for(let i of r.ssrcGroups??[]){if(i.semantics!=="FID")continue;let a=i.ssrcs.split(/\s+/),o=Number(a[0]),c=Number(a[1]);t.has(o)&&(t.delete(o),t.delete(c),s.set(o,c))}for(let i of t)s.set(i,void 0);let n=[];for(let[i,a]of s){let o={ssrc:i};a&&e.length>1&&(o.rtx={ssrc:a}),n.push(o)}return n}function id({offerMediaObject:r,numStreams:e}){if(e<=1)throw new TypeError("numStreams must be greater than 1");let t=(r.ssrcs??[]).find(l=>l.attribute==="msid");if(!t)throw new Error("a=ssrc line with msid information not found");let[s,n]=t.value.split(" "),i=Number(t.id),a;(r.ssrcGroups??[]).some(l=>{if(l.semantics!=="FID")return!1;let u=l.ssrcs.split(/\s+/);return Number(u[0])===i?(a=Number(u[1]),!0):!1});let o=(r.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(i+l),a&&d.push(a+l);r.ssrcGroups=[],r.ssrcs=[],r.ssrcGroups.push({semantics:"SIM",ssrcs:p.join(" ")});for(let l of p)r.ssrcs.push({id:l,attribute:"cname",value:c}),r.ssrcs.push({id:l,attribute:"msid",value:`${s} ${n}`});for(let l=0;l<d.length;++l){let u=p[l],m=d[l];r.ssrcs.push({id:m,attribute:"cname",value:c}),r.ssrcs.push({id:m,attribute:"msid",value:`${s} ${n}`}),r.ssrcGroups.push({semantics:"FID",ssrcs:`${u} ${m}`})}}});var rt=C(mt=>{"use strict";Object.defineProperty(mt,"__esModule",{value:!0});mt.addNackSupportForOpus=ad;mt.addHeaderExtensionSupport=od;mt.getMsidStreamIdAndTrackId=cd;function ad(r){for(let e of r.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 od(r,e){let t,s=r.headerExtensions?.find(i=>i.uri===e.uri);if(s){if(s.kind===e.kind)return;t=s.preferredId}if(r.headerExtensions||(r.headerExtensions=[]),t===void 0){t=1;let i=new Set(r.headerExtensions.map(a=>a.preferredId));for(;i.has(t);)++t}let n={kind:e.kind,uri:e.uri,preferredId:t,preferredEncrypt:!1,direction:e.direction};r.headerExtensions.push(n)}function cd(r){if(!r||typeof r!="string")return{msidStreamId:void 0,msidTrackId:void 0};let[e,t]=r.trim().split(/\s+/);return e?{msidStreamId:e,msidTrackId:t}:{msidStreamId:void 0,msidTrackId:void 0}}});var bi=C(cr=>{"use strict";Object.defineProperty(cr,"__esModule",{value:!0});cr.Chrome111=void 0;var de=ge(),dd=V(),pd=U(),gt=ie(),ld=Q(),ud=Le(),hd=Ze(),_t=et(),vi=tt(),ds=rt(),T=new pd.Logger("Chrome111"),wi="Chrome111",yi={OS:65535,MIS:65535},ps=class r extends dd.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:wi,factory:e=>new r(e),getNativeRtpCapabilities:async({direction:e})=>{T.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 s=await t.createOffer();try{t.close()}catch{}t=void 0;let n=de.parse(s.sdp);return r.getLocalRtpCapabilities(n)}catch(s){try{t?.close()}catch{}throw t=void 0,s}},getNativeSctpCapabilities:async()=>(T.debug("getNativeSctpCapabilities()"),{numStreams:yi})}}static getLocalRtpCapabilities(e,t=[]){let s=_t.extractRtpCapabilities({sdpObject:e});gt.validateAndNormalizeRtpCapabilities(s),ds.addNackSupportForOpus(s);for(let n of t)ds.addHeaderExtensionSupport(s,n);return s}constructor({direction:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),T.debug("constructor()"),this._direction=e,this._remoteSdp=new hd.RemoteSdp({iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=p,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.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):(T.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return wi}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){this.assertNotClosed(),T.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}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 s={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();T.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:s,codecOptions:n,headerExtensionOptions:i,codec:a,onRtpSender:o}){if(this.assertNotClosed(),this.assertSendDirection(),T.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),s&&s.length>1){let x=1;for(let k of s){let L=k.scalabilityMode?(0,ud.parse)(k.scalabilityMode).temporalLayers:3;L>x&&(x=L)}s.forEach((k,L)=>{k.rid=`r${L}`,k.scalabilityMode=`L1T${x}`})}let c=this._remoteSdp.getNextMediaSectionIdx(),p=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:s});o&&o(p.sender);let d=await this._pc.createOffer(),l=de.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 m=r.getLocalRtpCapabilities(l,u),f=this._getSendExtendedRtpCapabilities(m),h=gt.getSendingRtpParameters(e.kind,f);h.codecs=gt.reduceCodecs(h.codecs,a);let g=gt.getSendingRemoteRtpParameters(e.kind,f);if(g.codecs=gt.reduceCodecs(g.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l}),i?.absCaptureTime){let x=l.media[c.idx];_t.addHeaderExtension({offerMediaObject:x,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(k=>k.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:de.write(l)}}T.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let v=p.mid;h.mid=v,l=de.parse(this._pc.localDescription.sdp);let b=l.media[c.idx];if(h.rtcp.cname=_t.getCname({offerMediaObject:b}),h.msid=`${t??this._sendStream.id} ${e.id}`,!s)h.encodings=vi.getRtpEncodings({offerMediaObject:b,codecs:h.codecs});else if(s.length===1){let x=vi.getRtpEncodings({offerMediaObject:b,codecs:h.codecs});Object.assign(x[0],s[0]),h.encodings=x}else h.encodings=s;this._remoteSdp.send({offerMediaObject:b,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:g,codecOptions:n});let P={type:"answer",sdp:this._remoteSdp.getSdp()};return T.debug("send() | calling pc.setRemoteDescription() [answer:%o]",P),await this._pc.setRemoteDescription(P),this._mapMidTransceiver.set(v,p),{localId:v,rtpParameters:h,rtpSender:p.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 RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let n=await this._pc.createOffer();T.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);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 s=await this._pc.createOffer();T.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),T.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 s=await this._pc.createOffer();T.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}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 s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");await s.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),T.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();T.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);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 s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();T.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);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 s=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%yi.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),a=de.parse(i.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),T.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),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 n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:s,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],s=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);s.set(c,u);let{msidStreamId:m}=ds.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??m??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let o of e){let{trackId:c,onRtpReceiver:p}=o;if(p){let d=s.get(c),l=this._pc.getTransceivers().find(u=>u.mid===d);if(!l)throw new Error("transceiver not found");p(l.receiver)}}let i=await this._pc.createAnswer(),a=de.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=s.get(c),l=a.media.find(u=>String(u.mid)===d);_t.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l})}i={type:"answer",sdp:de.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),T.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let o of e){let{trackId:c}=o,p=s.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 n of e){T.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();T.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){T.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();T.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){T.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();T.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}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:s,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};T.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(s,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(),m=de.parse(u.sdp),f=m.media.find(h=>h.type==="application");f.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),u={type:"answer",sdp:de.write(m)},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=de.parse(this._pc.localDescription.sdp));let s=_t.extractDtlsParameters({sdpObject:t});s.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:s},n,i)}),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 ld.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')}};cr.Chrome111=ps});var Ci=C(dr=>{"use strict";Object.defineProperty(dr,"__esModule",{value:!0});dr.Chrome74=void 0;var J=ge(),fd=U(),md=V(),vt=ie(),gd=Q(),_d=Le(),vd=Ze(),wt=et(),ls=tt(),us=rt(),S=new fd.Logger("Chrome74"),Si="Chrome74",Ri={OS:1024,MIS:1024},hs=class r extends md.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 r(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 s=await t.createOffer();try{t.close()}catch{}t=void 0;let n=J.parse(s.sdp);return r.getLocalRtpCapabilities(n)}catch(s){try{t?.close()}catch{}throw t=void 0,s}},getNativeSctpCapabilities:async()=>(S.debug("getNativeSctpCapabilities()"),{numStreams:Ri})}}static getLocalRtpCapabilities(e,t=[]){let s=wt.extractRtpCapabilities({sdpObject:e});vt.validateAndNormalizeRtpCapabilities(s),us.addNackSupportForOpus(s);for(let n of t)us.addHeaderExtensionSupport(s,n);return s}constructor({direction:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),S.debug("constructor()"),this._direction=e,this._remoteSdp=new vd.RemoteSdp({iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=p,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.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):(S.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Si}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 s={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();S.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:s,codecOptions:n,headerExtensionOptions:i,codec:a}){this.assertNotClosed(),this.assertSendDirection(),S.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),s&&s.length>1&&s.forEach((k,L)=>{k.rid=`r${L}`});let o=this._remoteSdp.getNextMediaSectionIdx(),c=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:s}),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=r.getLocalRtpCapabilities(d,l),m=this._getSendExtendedRtpCapabilities(u),f=vt.getSendingRtpParameters(e.kind,m);f.codecs=vt.reduceCodecs(f.codecs,a);let h=vt.getSendingRemoteRtpParameters(e.kind,m);h.codecs=vt.reduceCodecs(h.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:d});let g=!1,v=(0,_d.parse)((s??[{}])[0].scalabilityMode),b;s?.length===1&&v.spatialLayers>1&&f.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(S.debug("send() | enabling legacy simulcast for VP9 SVC"),g=!0,d=J.parse(p.sdp),b=d.media[o.idx],ls.addLegacySimulcast({offerMediaObject:b,numStreams:v.spatialLayers}),p={type:"offer",sdp:J.write(d)}),S.debug("send() | calling pc.setLocalDescription() [offer:%o]",p),i?.absCaptureTime&&(b=d.media[o.idx],wt.addHeaderExtension({offerMediaObject:b,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:h.headerExtensions.find(k=>k.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(f.mid=P,d=J.parse(this._pc.localDescription.sdp),b=d.media[o.idx],f.rtcp.cname=wt.getCname({offerMediaObject:b}),f.msid=`${t??this._sendStream.id} ${e.id}`,!s)f.encodings=ls.getRtpEncodings({offerMediaObject:b,codecs:f.codecs});else if(s.length===1){let k=ls.getRtpEncodings({offerMediaObject:b,codecs:f.codecs});Object.assign(k[0],s[0]),g&&(k=[k[0]]),f.encodings=k}else f.encodings=s;if(f.encodings.length>1&&(f.codecs[0].mimeType.toLowerCase()==="video/vp8"||f.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let k of f.encodings)k.scalabilityMode?k.scalabilityMode=`L1T${v.temporalLayers}`:k.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:b,reuseMid:o.reuseMid,offerRtpParameters:f,answerRtpParameters:h,codecOptions:n});let x={type:"answer",sdp:this._remoteSdp.getSdp()};return S.debug("send() | calling pc.setRemoteDescription() [answer:%o]",x),await this._pc.setRemoteDescription(x),this._mapMidTransceiver.set(P,c),{localId:P,rtpParameters:f,rtpSender:c.sender}}async stopSending(e){if(this.assertSendDirection(),S.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 n=await this._pc.createOffer();S.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),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 s=await this._pc.createOffer();S.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),S.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 s=await this._pc.createOffer();S.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}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 s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");await s.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),S.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();S.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);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 s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();S.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);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 s=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Ri.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),a=J.parse(i.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]",i),await this._pc.setLocalDescription(i),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 n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:s,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],s=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);s.set(c,u);let{msidStreamId:m}=us.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??m??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);let i=await this._pc.createAnswer(),a=J.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=s.get(c),l=a.media.find(u=>String(u.mid)===d);wt.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l})}i={type:"answer",sdp:J.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),S.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let o of e){let{trackId:c}=o,p=s.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 n of e){S.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();S.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){S.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();S.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){S.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();S.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}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:s,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};S.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(s,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(),m=J.parse(u.sdp),f=m.media.find(h=>h.type==="application");f.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),u={type:"answer",sdp:J.write(m)},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=J.parse(this._pc.localDescription.sdp));let s=wt.extractDtlsParameters({sdpObject:t});s.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:s},n,i)}),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 gd.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')}};dr.Chrome74=hs});var xi=C(lr=>{"use strict";Object.defineProperty(lr,"__esModule",{value:!0});lr.Firefox120=void 0;var _e=ge(),wd=V(),yd=U(),Ti=Q(),yt=ie(),bd=Le(),Sd=Ze(),pr=et(),Ei=tt(),Rd=rt(),E=new yd.Logger("Firefox120"),ki="Firefox120",Pi={OS:16,MIS:2048},fs=class r extends wd.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:ki,factory:e=>new r(e),getNativeRtpCapabilities:async({direction:e})=>{E.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"}),s=document.createElement("canvas");s.getContext("2d");let i=s.captureStream().getVideoTracks()[0];try{t.addTransceiver("audio",{direction:e}),t.addTransceiver(i,{direction:e,sendEncodings:[{rid:"r0",maxBitrate:1e5},{rid:"r1",maxBitrate:5e5}]});let a=await t.createOffer();try{s.remove()}catch{}try{i.stop()}catch{}try{t.close()}catch{}t=void 0;let o=_e.parse(a.sdp);return r.getLocalRtpCapabilities(o)}catch(a){try{s.remove()}catch{}try{i.stop()}catch{}try{t?.close()}catch{}throw t=void 0,a}},getNativeSctpCapabilities:async()=>(E.debug("getNativeSctpCapabilities()"),{numStreams:Pi})}}static getLocalRtpCapabilities(e){let t=pr.extractRtpCapabilities({sdpObject:e});return yt.validateAndNormalizeRtpCapabilities(t),t}constructor({direction:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),E.debug("constructor()"),this._direction=e,this._remoteSdp=new Sd.RemoteSdp({iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i}),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):(E.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return ki}close(){if(E.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 Ti.UnsupportedError("not supported")}async restartIce(e){if(this.assertNotClosed(),E.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});E.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let s={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();E.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:s,codecOptions:n,codec:i,onRtpSender:a}){this.assertNotClosed(),this.assertSendDirection(),E.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),s&&s.length>1&&s.forEach((b,P)=>{b.rid=`r${P}`});let o=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:s});a&&a(o.sender);let c=await this._pc.createOffer(),p=_e.parse(c.sdp);p.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let d=r.getLocalRtpCapabilities(p),l=this._getSendExtendedRtpCapabilities(d),u=yt.getSendingRtpParameters(e.kind,l);u.codecs=yt.reduceCodecs(u.codecs,i);let m=yt.getSendingRemoteRtpParameters(e.kind,l);m.codecs=yt.reduceCodecs(m.codecs,i),this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:p});let f=(0,bd.parse)((s??[{}])[0].scalabilityMode);E.debug("send() | calling pc.setLocalDescription() [offer:%o]",c),await this._pc.setLocalDescription(c);let h=o.mid;u.mid=h,p=_e.parse(this._pc.localDescription.sdp);let g=p.media[p.media.length-1];if(u.rtcp.cname=pr.getCname({offerMediaObject:g}),u.msid=`${t??this._sendStream.id} ${e.id}`,!s)u.encodings=Ei.getRtpEncodings({offerMediaObject:g,codecs:u.codecs});else if(s.length===1){let b=Ei.getRtpEncodings({offerMediaObject:g,codecs:u.codecs});Object.assign(b[0],s[0]),u.encodings=b}else u.encodings=s;if(u.encodings.length>1&&(u.codecs[0].mimeType.toLowerCase()==="video/vp8"||u.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let b of u.encodings)b.scalabilityMode?b.scalabilityMode=`L1T${f.temporalLayers}`:b.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:g,offerRtpParameters:u,answerRtpParameters:m,codecOptions:n});let v={type:"answer",sdp:this._remoteSdp.getSdp()};return E.debug("send() | calling pc.setRemoteDescription() [answer:%o]",v),await this._pc.setRemoteDescription(v),this._mapMidTransceiver.set(h,o),{localId:h,rtpParameters:u,rtpSender:o.sender}}async stopSending(e){if(this.assertSendDirection(),E.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 s=await this._pc.createOffer();E.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),E.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 s=await this._pc.createOffer();E.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),E.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 s=await this._pc.createOffer();E.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?E.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):E.debug("replaceTrack() [localId:%s, no track]",e);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");await s.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),E.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated transceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();E.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),E.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();E.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};E.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};E.debug("sendDataChannel() [options:%o]",t);let s=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Pi.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),a=_e.parse(i.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:a}),E.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:s,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],s=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;E.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);s.set(c,u);let{msidStreamId:m}=Rd.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??m??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let o of e){let{trackId:c,onRtpReceiver:p}=o;if(p){let d=s.get(c),l=this._pc.getTransceivers().find(u=>u.mid===d);if(!l)throw new Error("transceiver not found");p(l.receiver)}}let i=await this._pc.createAnswer(),a=_e.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=s.get(c),l=a.media.find(u=>String(u.mid)===d);pr.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l}),i={type:"answer",sdp:_e.write(a)}}this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:a}),E.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let o of e){let{trackId:c}=o,p=s.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 n of e){E.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();E.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){E.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();E.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){E.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();E.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}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:s,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};E.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(s,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),m=_e.parse(u.sdp),f=m.media.find(h=>h.type==="application");f.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:m}),u={type:"answer",sdp:_e.write(m)},E.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=_e.parse(this._pc.localDescription.sdp));let s=pr.extractDtlsParameters({sdpObject:t});s.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:s},n,i)}),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 Ti.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')}};lr.Firefox120=fs});var Mi=C(ur=>{"use strict";Object.defineProperty(ur,"__esModule",{value:!0});ur.Safari12=void 0;var X=ge(),Cd=V(),Td=U(),bt=ie(),Ed=Q(),kd=Le(),Pd=Ze(),St=et(),Di=tt(),ms=rt(),R=new Td.Logger("Safari12"),Ii="Safari12",Li={OS:65535,MIS:65535},gs=class r extends Cd.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Ii,factory:e=>new r(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});let s=await t.createOffer();try{t.close()}catch{}t=void 0;let n=X.parse(s.sdp);return r.getLocalRtpCapabilities(n)}catch(s){try{t?.close()}catch{}throw t=void 0,s}},getNativeSctpCapabilities:async()=>(R.debug("getNativeSctpCapabilities()"),{numStreams:Li})}}static getLocalRtpCapabilities(e,t=[]){let s=St.extractRtpCapabilities({sdpObject:e});bt.validateAndNormalizeRtpCapabilities(s),ms.addNackSupportForOpus(s);for(let n of t)ms.addHeaderExtensionSupport(s,n);return s}constructor({direction:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),R.debug("constructor()"),this._direction=e,this._remoteSdp=new Pd.RemoteSdp({iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=p,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.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):(R.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Ii}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 s={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();R.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:s,codecOptions:n,headerExtensionOptions:i,codec:a,onRtpSender:o}){this.assertNotClosed(),this.assertSendDirection(),R.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 m=r.getLocalRtpCapabilities(l,u),f=this._getSendExtendedRtpCapabilities(m),h=bt.getSendingRtpParameters(e.kind,f);h.codecs=bt.reduceCodecs(h.codecs,a);let g=bt.getSendingRemoteRtpParameters(e.kind,f);g.codecs=bt.reduceCodecs(g.codecs,a);let v;this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l});let b=(0,kd.parse)((s??[{}])[0].scalabilityMode);s&&s.length>1&&(R.debug("send() | enabling legacy simulcast"),l=X.parse(d.sdp),v=l.media[c.idx],Di.addLegacySimulcast({offerMediaObject:v,numStreams:s.length}),d={type:"offer",sdp:X.write(l)}),i?.absCaptureTime&&(v=l.media[c.idx],St.addHeaderExtension({offerMediaObject:v,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(k=>k.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:X.write(l)}),R.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),v=l.media[c.idx],h.rtcp.cname=St.getCname({offerMediaObject:v}),h.msid=`${t??this._sendStream.id} ${e.id}`,h.encodings=Di.getRtpEncodings({offerMediaObject:v,codecs:h.codecs}),s)for(let k=0;k<h.encodings.length;++k)s[k]&&Object.assign(h.encodings[k],s[k]);if(h.encodings.length>1&&(h.codecs[0].mimeType.toLowerCase()==="video/vp8"||h.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let k of h.encodings)k.scalabilityMode?k.scalabilityMode=`L1T${b.temporalLayers}`:k.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:v,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:g,codecOptions:n});let x={type:"answer",sdp:this._remoteSdp.getSdp()};return R.debug("send() | calling pc.setRemoteDescription() [answer:%o]",x),await this._pc.setRemoteDescription(x),this._mapMidTransceiver.set(P,p),{localId:P,rtpParameters:h,rtpSender:p.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;R.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 n=await this._pc.createOffer();R.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),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 s=await this._pc.createOffer();R.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),R.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 s=await this._pc.createOffer();R.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}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 s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");await s.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),R.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();R.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);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 s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();R.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);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 s=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Li.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),a=X.parse(i.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]",i),await this._pc.setLocalDescription(i),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 n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:s,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],s=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);s.set(c,u);let{msidStreamId:m}=ms.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??m??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let o of e){let{trackId:c,onRtpReceiver:p}=o;if(p){let d=s.get(c),l=this._pc.getTransceivers().find(u=>u.mid===d);if(!l)throw new Error("transceiver not found");p(l.receiver)}}let i=await this._pc.createAnswer(),a=X.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=s.get(c),l=a.media.find(u=>String(u.mid)===d);St.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l})}i={type:"answer",sdp:X.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),R.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let o of e){let{trackId:c}=o,p=s.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 n of e){R.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();R.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){R.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();R.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){R.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();R.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}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:s,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};R.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(s,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(),m=X.parse(u.sdp),f=m.media.find(h=>h.type==="application");f.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),u={type:"answer",sdp:X.write(m)},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=X.parse(this._pc.localDescription.sdp));let s=St.extractDtlsParameters({sdpObject:t});s.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:s},n,i)}),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 Ed.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')}};ur.Safari12=gs});var Ni=C(hr=>{"use strict";Object.defineProperty(hr,"__esModule",{value:!0});hr.ReactNative106=void 0;var Z=ge(),xd=V(),Dd=U(),Rt=ie(),Id=Q(),Ld=Le(),Md=Ze(),Ct=et(),_s=tt(),vs=rt(),y=new Dd.Logger("ReactNative106"),Oi="ReactNative106",Ai={OS:65535,MIS:65535},ws=class r extends xd.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Oi,factory:e=>new r(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 s=await t.createOffer();try{t.close()}catch{}t=void 0;let n=Z.parse(s.sdp);return r.getLocalRtpCapabilities(n)}catch(s){try{t?.close()}catch{}throw t=void 0,s}},getNativeSctpCapabilities:async()=>(y.debug("getNativeSctpCapabilities()"),{numStreams:Ai})}}static getLocalRtpCapabilities(e,t=[]){let s=Ct.extractRtpCapabilities({sdpObject:e});Rt.validateAndNormalizeRtpCapabilities(s),vs.addNackSupportForOpus(s);for(let n of t)vs.addHeaderExtensionSupport(s,n);return s}constructor({direction:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),y.debug("constructor()"),this._direction=e,this._remoteSdp=new Md.RemoteSdp({iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=p,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.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 Oi}close(){if(y.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(),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 s={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();y.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:s,codecOptions:n,headerExtensionOptions:i,codec:a,onRtpSender:o}){this.assertNotClosed(),this.assertSendDirection(),y.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),s&&s.length>1&&s.forEach((L,Ae)=>{L.rid=`r${Ae}`});let c=this._remoteSdp.getNextMediaSectionIdx(),p=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:s});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 m=r.getLocalRtpCapabilities(l,u),f=this._getSendExtendedRtpCapabilities(m),h=Rt.getSendingRtpParameters(e.kind,f);h.codecs=Rt.reduceCodecs(h.codecs,a);let g=Rt.getSendingRemoteRtpParameters(e.kind,f);g.codecs=Rt.reduceCodecs(g.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l});let v=!1,b=(0,Ld.parse)((s??[{}])[0].scalabilityMode),P;s?.length===1&&b.spatialLayers>1&&h.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(y.debug("send() | enabling legacy simulcast for VP9 SVC"),v=!0,l=Z.parse(d.sdp),P=l.media[c.idx],_s.addLegacySimulcast({offerMediaObject:P,numStreams:b.spatialLayers}),d={type:"offer",sdp:Z.write(l)}),i?.absCaptureTime&&(P=l.media[c.idx],Ct.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)}),y.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let x=p.mid??void 0;if(x||y.warn("send() | missing transceiver.mid (bug in react-native-webrtc, using a workaround"),h.mid=x,l=Z.parse(this._pc.localDescription.sdp),P=l.media[c.idx],h.rtcp.cname=Ct.getCname({offerMediaObject:P}),h.msid=`${t??this._sendStream.id} ${e.id}`,!s)h.encodings=_s.getRtpEncodings({offerMediaObject:P,codecs:h.codecs});else if(s.length===1){let L=_s.getRtpEncodings({offerMediaObject:P,codecs:h.codecs});Object.assign(L[0],s[0]),v&&(L=[L[0]]),h.encodings=L}else h.encodings=s;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${b.temporalLayers}`:L.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:P,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:g,codecOptions:n});let k={type:"answer",sdp:this._remoteSdp.getSdp()};return y.debug("send() | calling pc.setRemoteDescription() [answer:%o]",k),await this._pc.setRemoteDescription(k),x||(x=p.mid,h.mid=x),this._mapMidTransceiver.set(x,p),{localId:x,rtpParameters:h,rtpSender:p.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;y.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 n=await this._pc.createOffer();y.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),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 s=await this._pc.createOffer();y.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}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 s=await this._pc.createOffer();y.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}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 s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");await s.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),y.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();y.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);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 s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();y.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);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 s=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Ai.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),a=Z.parse(i.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]",i),await this._pc.setLocalDescription(i),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 n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:s,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],s=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);s.set(c,u);let{msidStreamId:m}=vs.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??m??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let o of e){let{trackId:c,onRtpReceiver:p}=o;if(p){let d=s.get(c),l=this._pc.getTransceivers().find(u=>u.mid===d);if(!l)throw new Error("transceiver not found");p(l.receiver)}}let i=await this._pc.createAnswer(),a=Z.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=s.get(c),l=a.media.find(u=>String(u.mid)===d);Ct.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l})}i={type:"answer",sdp:Z.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),y.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let o of e){let{trackId:c}=o,p=s.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 n of e){y.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();y.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){y.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();y.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){y.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();y.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}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:s,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};y.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(s,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(),m=Z.parse(u.sdp),f=m.media.find(h=>h.type==="application");f.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),u={type:"answer",sdp:Z.write(m)},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=Z.parse(this._pc.localDescription.sdp));let s=Ct.extractDtlsParameters({sdpObject:t});s.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:s},n,i)}),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 Id.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')}};hr.ReactNative106=ws});var $i=C(st=>{"use strict";Object.defineProperty(st,"__esModule",{value:!0});st.Device=void 0;st.detectDevice=ji;st.detectDeviceAsync=Fi;var Od=U(),Ad=V(),Te=Q(),fr=Pe(),G=ie(),Nd=ai(),jd=bi(),Fd=Ci(),qd=xi(),$d=Mi(),Ud=Ni(),w=new Od.Logger("Device");function ji(r,e){return w.debug("detectDevice()"),!r&&typeof navigator=="object"&&(r=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),qi(r,e)}async function Fi(r,e){return w.debug("detectDeviceAsync()"),!r&&typeof navigator=="object"&&(r=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),qi(r,e)}var ys=class r{_handlerFactory;_handlerName;_loaded=!1;_getSendExtendedRtpCapabilities;_recvRtpCapabilities;_sendRtpCapabilities;_canProduceByKind={audio:!1,video:!1};_sctpCapabilities;_observer=new Ad.EnhancedEventEmitter;static async factory({handlerName:e,handlerFactory:t}={}){if(w.debug("factory()"),e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(!e&&!t&&(e=await Fi(),!e))throw new Te.UnsupportedError("device not supported");return new r({handlerName:e,handlerFactory:t})}constructor({handlerName:e,handlerFactory:t}={}){if(w.debug("constructor()"),e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(t)this._handlerFactory=t;else{if(e)w.debug("constructor() | handler given: %s",e);else if(e=ji(),e)w.debug("constructor() | detected handler: %s",e);else throw new Te.UnsupportedError("device not supported");switch(e){case"Chrome111":{this._handlerFactory=jd.Chrome111.createFactory();break}case"Chrome74":{this._handlerFactory=Fd.Chrome74.createFactory();break}case"Firefox120":{this._handlerFactory=qd.Firefox120.createFactory();break}case"Safari12":{this._handlerFactory=$d.Safari12.createFactory();break}case"ReactNative106":{this._handlerFactory=Ud.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 Te.InvalidStateError("not loaded");return this._recvRtpCapabilities}get sendRtpCapabilities(){if(!this._loaded)throw new Te.InvalidStateError("not loaded");return this._sendRtpCapabilities}get sctpCapabilities(){if(!this._loaded)throw new Te.InvalidStateError("not loaded");return this._sctpCapabilities}get observer(){return this._observer}async load({routerRtpCapabilities:e,preferLocalCodecsOrder:t=!1}){if(w.debug("load() [routerRtpCapabilities:%o]",e),this._loaded)throw new Te.InvalidStateError("already loaded");let s=fr.clone(e);G.validateAndNormalizeRtpCapabilities(s);let{getNativeRtpCapabilities:n,getNativeSctpCapabilities:i}=this._handlerFactory,a=fr.clone(await n({direction:"recvonly"}));w.debug("load() | got native receiving RTP capabilities:%o",a),G.validateAndNormalizeRtpCapabilities(a);let o=fr.clone(await n({direction:"sendonly"}));w.debug("load() | got native sending RTP capabilities:%o",o),G.validateAndNormalizeRtpCapabilities(o),this._getSendExtendedRtpCapabilities=d=>fr.clone(G.getExtendedRtpCapabilities(d,s,t));let c=G.getExtendedRtpCapabilities(a,s,!1);this._recvRtpCapabilities=G.getRecvRtpCapabilities(c),w.debug("load() | got receiving RTP capabilities:%o",this._recvRtpCapabilities),G.validateAndNormalizeRtpCapabilities(this._recvRtpCapabilities);let p=G.getExtendedRtpCapabilities(o,s,t);this._sendRtpCapabilities=G.getSendRtpCapabilities(p),w.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 i(),G.validateSctpCapabilities(this._sctpCapabilities),w.debug("load() | got native SCTP capabilities:%o",this._sctpCapabilities),w.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 Te.InvalidStateError("not loaded");return this._canProduceByKind[e]}createSendTransport({id:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:p}){return w.debug("createSendTransport()"),this.createTransport({direction:"send",id:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:p})}createRecvTransport({id:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:p}){return w.debug("createRecvTransport()"),this.createTransport({direction:"recv",id:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:p})}createTransport({direction:e,id:t,iceParameters:s,iceCandidates:n,dtlsParameters:i,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:p,appData:d}){if(this._loaded){if(typeof t!="string")throw new TypeError("missing id");if(typeof s!="object")throw new TypeError("missing iceParameters");if(Array.isArray(n)){if(typeof i!="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 Te.InvalidStateError("not loaded");let l=new Nd.Transport({direction:e,id:t,iceParameters:s,iceCandidates:n,dtlsParameters:i,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}};st.Device=ys;function qi(r,e){w.debug('detectDeviceImpl() [userAgent:"%s", userAgentData:%o]',r,e);let t=zd(r,e);if(t){if(t>=111)return w.debug("detectDeviceImpl() | using Chrome111 handler"),"Chrome111";if(t>=74)return w.debug("detectDeviceImpl() | using Chrome74 handler"),"Chrome74";w.warn("detectDeviceImpl() | unsupported Chromium based browser/version");return}let s=Bd(r);if(s){if(s>=120)return w.debug("detectDeviceImpl() | using Firefox120 handler"),"Firefox120";w.warn("detectDeviceImpl() | unsupported Firefox browser/version");return}let n=Wd(r);if(n){if(n>=605)return w.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";w.warn("detectDeviceImpl() | unsupported desktop Safari browser/version");return}let i=Hd(r);if(i){if(i>=605)return w.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";w.warn("detectDeviceImpl() | unsupported iOS Safari based browser/version");return}if(Tt()){if(typeof RTCPeerConnection<"u"&&typeof RTCRtpTransceiver<"u")return w.debug("detectDeviceImpl() | using ReactNative106 handler"),"ReactNative106";w.warn("detectDeviceImpl() | unsupported react-native-webrtc version without RTCPeerConnection or RTCRtpTransceiver, forgot to call registerGlobals() on it?");return}w.warn('detectDeviceImpl() | device not supported [userAgent:"%s", userAgentData:%o]',r,e)}function zd(r,e){if(w.debug("getChromiumMajorVersion()"),mr(r,e)){w.debug("getChromiumMajorVersion() | this is iOS => undefined");return}if(Tt()){w.debug("getChromiumMajorVersion() | this is React-Native => undefined");return}if(e){let n=(Array.isArray(e.brands)?e.brands:[]).find(i=>i.brand==="Chromium");if(n){let i=Number(n.version);return w.debug(`getChromiumMajorVersion() | Chromium major version based on NavigatorUAData => ${i}`),i}}let t=r?.match(/\b(?:Chrome|Chromium)\/(\w+)/i);if(t?.[1]){let s=Number(t[1]);return w.debug(`getChromiumMajorVersion() | Chromium major version based on User-Agent => ${s}`),s}w.debug("getChromiumMajorVersion() | this is not Chromium => undefined")}function Bd(r){if(w.debug("getFirefoxMajorVersion()"),mr(r)){w.debug("getFirefoxMajorVersion() | this is iOS => undefined");return}if(Tt()){w.debug("getFirefoxMajorVersion() | this is React-Native => undefined");return}let e=r?.match(/\bFirefox\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return w.debug(`getFirefoxMajorVersion() | Firefox major version based on User-Agent => ${t}`),t}w.debug("getFirefoxMajorVersion() | this is not Firefox => undefined")}function Wd(r){if(w.debug("getMacOSWebKitMajorVersion()"),mr(r)){w.debug("getMacOSWebKitMajorVersion() | this is iOS => undefined");return}if(Tt()){w.debug("getMacOSWebKitMajorVersion() | this is React-Native => undefined");return}if(!(r&&/\bSafari\b/i.test(r)&&!/\bChrome\b/i.test(r)&&!/\bChromium\b/i.test(r)&&!/\bFirefox\b/i.test(r))){w.debug("getMacOSWebKitMajorVersion() | this is not Safari => undefined");return}let t=r.match(/AppleWebKit\/(\w+)/i);if(t?.[1]){let s=Number(t[1]);return w.debug(`getMacOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${s}`),s}w.debug("getMacOSWebKitMajorVersion() | this is not WebKit => undefined")}function Hd(r){if(w.debug("getIOSWebKitMajorVersion()"),!mr(r)){w.debug("getIOSWebKitMajorVersion() | this is not iOS => undefined");return}if(Tt()){w.debug("getIOSWebKitMajorVersion() | this is React-Native => undefined");return}let e=r?.match(/AppleWebKit\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return w.debug(`getIOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${t}`),t}w.debug("getIOSWebKitMajorVersion() | this is not WebKit => undefined")}function mr(r,e){return w.debug("isIOS()"),e?.platform==="iOS"?(w.debug("isIOS() | this is iOS based on NavigatorUAData.platform => true"),!0):e?.platform?(w.debug("isIOS() | this is not iOS based on NavigatorUAData.platform => false"),!1):r&&/iPad|iPhone|iPod/.test(r)?(w.debug("isIOS() | this is iOS based on User-Agent => true"),!0):typeof navigator=="object"&&navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1?(w.debug("isIOS() | this is iPadOS 13+ based on User-Agent => true"),!0):(w.debug("isIOS() | this is not iOS => false"),!1)}function Tt(){return w.debug("isReactNative()"),typeof navigator=="object"&&navigator.product==="ReactNative"?(w.debug("isReactNative() | this is React-Native based on navigator.product"),!0):(w.debug("isReactNative() | this is not React-Native => false"),!1)}});var zi=C(Ui=>{"use strict";var Oe=256,_r=[],gr;for(;Oe--;)_r[Oe]=(Oe+256).toString(16).substring(1);function Vd(){var r=0,e,t="";if(!gr||Oe+16>256){for(gr=Array(r=256);r--;)gr[r]=256*Math.random()|0;r=Oe=0}for(;r<16;r++)e=gr[Oe+r],r==6?t+=_r[e&15|64]:r==8?t+=_r[e&63|128]:t+=_r[e],r&1&&r>1&&r<11&&(t+="-");return Oe++,t}Ui.v4=Vd});var Bi=C(vr=>{"use strict";Object.defineProperty(vr,"__esModule",{value:!0});vr.FakeEventTarget=void 0;var bs=class{listeners={};addEventListener(e,t,s){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof s=="object"&&s.once===!0}))}removeEventListener(e,t,s){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(n=>n.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 s of[...t]){try{s.callback.call(this,e)}catch(n){setTimeout(()=>{throw n},0)}s.once&&this.removeEventListener(e.type,s.callback)}return!e.defaultPrevented}};vr.FakeEventTarget=bs});var Wi=C(wr=>{"use strict";Object.defineProperty(wr,"__esModule",{value:!0});wr.FakeEvent=void 0;var Ss=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,s){}};wr.FakeEvent=Ss});var Hi=C(Rs=>{"use strict";Object.defineProperty(Rs,"__esModule",{value:!0});Rs.clone=Gd;function Gd(r){if(r!==void 0)return Number.isNaN(r)?NaN:typeof structuredClone=="function"?structuredClone(r):JSON.parse(JSON.stringify(r))}});var Gi=C(br=>{"use strict";Object.defineProperty(br,"__esModule",{value:!0});br.FakeMediaStreamTrack=void 0;var Vi=zi(),Kd=Bi(),nt=Wi(),yr=Hi(),Cs=class r extends Kd.FakeEventTarget{#m;#l;#u;#e;#r;#t;#s;#h;#n;#f;#i;#a=null;#o=null;#c=null;#d=null;#p=null;constructor({kind:e,id:t,label:s,contentHint:n,enabled:i,muted:a,readyState:o,capabilities:c,constraints:p,settings:d,data:l}){super(),this.#m=t??(0,Vi.v4)(),this.#l=e,this.#u=s??"",this.#s=n??"",this.#r=i??!0,this.#t=a??!1,this.#e=o??"live",this.#h=c??{},this.#n=p??{},this.#f=d??{},this.#i=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 nt.FakeEvent("enabledchange"))}get muted(){return this.#t}get readyState(){return this.#e}get data(){return this.#i}set data(e){this.#i=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,s){super.addEventListener(e,t,s)}removeEventListener(e,t,s){super.removeEventListener(e,t,s)}stop(){this.#e!=="ended"&&(this.#e="ended",this.dispatchEvent(new nt.FakeEvent("stopped")))}clone({id:e,data:t}={}){return new r({id:e??(0,Vi.v4)(),kind:this.#l,label:this.#u,contentHint:this.#s,enabled:this.#r,muted:this.#t,readyState:this.#e,capabilities:(0,yr.clone)(this.#h),constraints:(0,yr.clone)(this.#n),settings:(0,yr.clone)(this.#f),data:t??(0,yr.clone)(this.#i)})}getCapabilities(){return this.#h}getConstraints(){return this.#n}async applyConstraints(e={}){return this.#n=e,Promise.resolve()}getSettings(){return this.#f}remoteStop(){this.#e!=="ended"&&(this.#e="ended",this.dispatchEvent(new nt.FakeEvent("stopped")),this.dispatchEvent(new nt.FakeEvent("ended")))}remoteMute(){this.#t||(this.#t=!0,this.dispatchEvent(new nt.FakeEvent("mute")))}remoteUnmute(){this.#t&&(this.#t=!1,this.dispatchEvent(new nt.FakeEvent("unmute")))}};br.FakeMediaStreamTrack=Cs});var Ki=C(Sr=>{"use strict";Object.defineProperty(Sr,"__esModule",{value:!0});Sr.FakeEventTarget=void 0;var Ts=class{listeners={};addEventListener(e,t,s){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof s=="object"&&s.once===!0}))}removeEventListener(e,t,s){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(n=>n.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 s of[...t]){try{s.callback.call(this,e)}catch(n){setTimeout(()=>{throw n},0)}s.once&&this.removeEventListener(e.type,s.callback)}return!e.defaultPrevented}};Sr.FakeEventTarget=Ts});var Ji=C(Cr=>{"use strict";Object.defineProperty(Cr,"__esModule",{value:!0});Cr.FakeHandler=void 0;var Yd=Gi(),Qd=V(),Jd=U(),it=Pe(),Es=ie(),Qi=Q(),Xd=Ki(),q=new Jd.Logger("FakeHandler"),Yi="FakeHandler",ks=class r extends Qd.EnhancedEventEmitter{_closed=!1;_fakeParameters;_getSendExtendedRtpCapabilities;_cname=`CNAME-${it.generateRandomNumber()}`;_defaultSendStreamId=`${it.generateRandomNumber()}`;_transportReady=!1;_nextLocalId=1;_tracks=new Map;_nextSctpStreamId=0;static createFactory(e){return{name:Yi,factory:t=>new r(t,e),getNativeRtpCapabilities:async({direction:t})=>(q.debug("getNativeRtpCapabilities() [direction:%o]",t),r.getLocalRtpCapabilities(e)),getNativeSctpCapabilities:async()=>(q.debug("getNativeSctpCapabilities()"),e.generateNativeSctpCapabilities())}}static getLocalRtpCapabilities(e){let t=e.generateNativeRtpCapabilities();return Es.validateAndNormalizeRtpCapabilities(t),t}constructor({getSendExtendedRtpCapabilities:e},t){super(),q.debug("constructor()"),this._getSendExtendedRtpCapabilities=e,this._fakeParameters=t}get name(){return Yi}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:s,codecOptions:n,codec:i}){this.assertNotClosed(),q.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),this._transportReady||await this.setupTransport({localDtlsRole:"server"});let a=r.getLocalRtpCapabilities(this._fakeParameters),o=this._getSendExtendedRtpCapabilities(a),c=Es.getSendingRtpParameters(e.kind,o);c.codecs=Es.reduceCodecs(c.codecs,i);let p=c.codecs.some(l=>/.+\/rtx$/i.test(l.mimeType));c.mid=`mid-${it.generateRandomNumber()}`,c.msid=`${t??"-"} ${e.id}`,s||(s=[{}]);for(let l of s)l.ssrc=it.generateRandomNumber(),p&&(l.rtx={ssrc:it.generateRandomNumber()});c.encodings=s,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 Rr({id:this._nextSctpStreamId++,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:e.label,protocol:e.protocol}),s={streamId:this._nextSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits};return{dataChannel:t,sctpStreamParameters:s}}async receive(e){this.assertNotClosed();let t=[];for(let s of e){let{trackId:n,kind:i}=s;this._transportReady||await this.setupTransport({localDtlsRole:"client"}),q.debug("receive() [trackId:%s, kind:%s]",n,i);let a=this._nextLocalId++,o=new Yd.FakeMediaStreamTrack({kind:i});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:s}){return this.assertNotClosed(),this._transportReady||await this.setupTransport({localDtlsRole:"client"}),q.debug("receiveDataChannel()"),{dataChannel:new Rr({id:e.streamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:t,protocol:s})}}getDataChannelMaxMessageSize(){return 5e5}async setupTransport({localDtlsRole:e,localSdpObject:t}){let s=it.clone(this._fakeParameters.generateLocalDtlsParameters());e&&(s.role=e),this.emit("@connectionstatechange","connecting"),await new Promise((n,i)=>this.emit("@connect",{dtlsParameters:s},n,i)),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new Qi.InvalidStateError("method called in a closed handler")}};Cr.FakeHandler=ks;var Rr=class extends Xd.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:s=null,maxRetransmits:n=null,label:i="",protocol:a=""}){super(),q.debug(`constructor() [id:${e}, ordered:${t}, maxPacketLifeTime:${s}, maxRetransmits:${n}, label:${i}, protocol:${a}`),this._id=e,this._ordered=t,this._maxPacketLifeTime=s,this._maxRetransmits=n,this._label=i,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,s){super.addEventListener(e,t,s)}removeEventListener(e,t,s){super.removeEventListener(e,t,s)}close(){["closing","closed"].includes(this._readyState)||(this._readyState="closed")}send(e){if(this._readyState!=="open")throw new Qi.InvalidStateError("not open")}}});var Xi=C(ne=>{"use strict";Object.defineProperty(ne,"__esModule",{value:!0});ne.generateRouterRtpCapabilities=Zd;ne.generateNativeRtpCapabilities=ep;ne.generateNativeSctpCapabilities=tp;ne.generateLocalDtlsParameters=rp;ne.generateTransportRemoteParameters=sp;ne.generateProducerRemoteParameters=np;ne.generateConsumerRemoteParameters=ip;ne.generateDataProducerRemoteParameters=ap;ne.generateDataConsumerRemoteParameters=op;var B=Pe();function K(){return String(B.generateRandomNumber())}function Zd(){return B.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 ep(){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 tp(){return B.deepFreeze({numStreams:{OS:2048,MIS:2048}})}function rp(){return B.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 sp(){return{id:K(),iceParameters:B.deepFreeze({iceLite:!0,password:"yku5ej8nvfaor28lvtrabcx0wkrpkztz",usernameFragment:"h3hk1iz6qqlnqlne"}),iceCandidates:B.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:B.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:B.deepFreeze({port:5e3,OS:2048,MIS:2048,maxMessageSize:2e6})}}function np(){return B.deepFreeze({id:K()})}function ip({id:r,codecMimeType:e}={}){switch(e){case"audio/opus":return{id:r??K(),producerId:K(),kind:"audio",rtpParameters:B.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:r??K(),producerId:K(),kind:"audio",rtpParameters:B.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:r??K(),producerId:K(),kind:"video",rtpParameters:B.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:r??K(),producerId:K(),kind:"video",rtpParameters:B.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 ap(){return B.deepFreeze({id:K()})}function op({id:r}={}){return{id:r??K(),dataProducerId:K(),sctpStreamParameters:B.deepFreeze({streamId:666,maxPacketLifeTime:5e3,maxRetransmits:void 0})}}});var cs=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 cp=pt();O.debug=cp.default;O.types=Rn();O.version="3.20.0";var Ps=$i();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 dp=Le();Object.defineProperty(O,"parseScalabilityMode",{enumerable:!0,get:function(){return dp.parse}});O.ortc=ie();O.enhancedEvents=V();var pp=Ji();Object.defineProperty(O,"FakeHandler",{enumerable:!0,get:function(){return pp.FakeHandler}});O.testFakeParameters=Xi()});var ea=C((ru,xs)=>{"use strict";var lp=Object.prototype.hasOwnProperty,W="~";function Et(){}Object.create&&(Et.prototype=Object.create(null),new Et().__proto__||(W=!1));function up(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function Zi(r,e,t,s,n){if(typeof t!="function")throw new TypeError("The listener must be a function");var i=new up(t,s||r,n),a=W?W+e:e;return r._events[a]?r._events[a].fn?r._events[a]=[r._events[a],i]:r._events[a].push(i):(r._events[a]=i,r._eventsCount++),r}function Tr(r,e){--r._eventsCount===0?r._events=new Et:delete r._events[e]}function $(){this._events=new Et,this._eventsCount=0}$.prototype.eventNames=function(){var e=[],t,s;if(this._eventsCount===0)return e;for(s in t=this._events)lp.call(t,s)&&e.push(W?s.slice(1):s);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};$.prototype.listeners=function(e){var t=W?W+e:e,s=this._events[t];if(!s)return[];if(s.fn)return[s.fn];for(var n=0,i=s.length,a=new Array(i);n<i;n++)a[n]=s[n].fn;return a};$.prototype.listenerCount=function(e){var t=W?W+e:e,s=this._events[t];return s?s.fn?1:s.length:0};$.prototype.emit=function(e,t,s,n,i,a){var o=W?W+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,s),!0;case 4:return c.fn.call(c.context,t,s,n),!0;case 5:return c.fn.call(c.context,t,s,n,i),!0;case 6:return c.fn.call(c.context,t,s,n,i,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,m;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,s);break;case 4:c[l].fn.call(c[l].context,t,s,n);break;default:if(!d)for(m=1,d=new Array(p-1);m<p;m++)d[m-1]=arguments[m];c[l].fn.apply(c[l].context,d)}}return!0};$.prototype.on=function(e,t,s){return Zi(this,e,t,s,!1)};$.prototype.once=function(e,t,s){return Zi(this,e,t,s,!0)};$.prototype.removeListener=function(e,t,s,n){var i=W?W+e:e;if(!this._events[i])return this;if(!t)return Tr(this,i),this;var a=this._events[i];if(a.fn)a.fn===t&&(!n||a.once)&&(!s||a.context===s)&&Tr(this,i);else{for(var o=0,c=[],p=a.length;o<p;o++)(a[o].fn!==t||n&&!a[o].once||s&&a[o].context!==s)&&c.push(a[o]);c.length?this._events[i]=c.length===1?c[0]:c:Tr(this,i)}return this};$.prototype.removeAllListeners=function(e){var t;return e?(t=W?W+e:e,this._events[t]&&Tr(this,t)):(this._events=new Et,this._eventsCount=0),this};$.prototype.off=$.prototype.removeListener;$.prototype.addListener=$.prototype.on;$.prefixed=W;$.EventEmitter=$;typeof xs<"u"&&(xs.exports=$)});var Lt=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 s;try{s=JSON.parse(t.data)}catch{console.warn("[ChannelMultiplexer] Failed to parse WebSocket message as JSON");return}if(!s.channel)return;let n=this._handlers.get(s.channel);if(n)for(let i of n)i(s)},this._ws.addEventListener("message",this._onMessage),this._onOpen=()=>{this.flushPendingSends()}}on(e,t){let s=this._handlers.get(e);return s||(s=new Set,this._handlers.set(e,s)),s.add(t),()=>{s.delete(t),s.size===0&&this._handlers.delete(e)}}emit(e,t){if(this._disposed)return;let s=JSON.stringify({channel:e,...t});if(this._ws.readyState===WebSocket.OPEN){this._ws.send(s);return}this._ws.readyState===WebSocket.CONNECTING&&(this._pendingSends.push(s),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))}},$s=class{_handlers=new Map;_pendingSends=[];_target=null;_targetUnsubscribes=[];_disposed=!1;setTarget(e){if(this._disposed)return;this.detachTarget(),this._target=e;for(let[s,n]of this._handlers)for(let i of n)this._targetUnsubscribes.push(e.on(s,i));let t=this._pendingSends;this._pendingSends=[];for(let s of t)e.emit(s.channel,s.data)}rewriteSessionChannels(e,t){if(e===t)return;let s=`session:${e}:`,n=`session:${t}:`,i=new Map;for(let[a,o]of this._handlers)i.set(a.startsWith(s)?n+a.slice(s.length):a,o);this._handlers=i,this._pendingSends=this._pendingSends.map(a=>({...a,channel:a.channel.startsWith(s)?n+a.channel.slice(s.length):a.channel}))}on(e,t){if(this._disposed)return()=>{};let s=this._handlers.get(e);s||(s=new Set,this._handlers.set(e,s)),s.add(t);let n=this._target?.on(e,t);return n&&this._targetUnsubscribes.push(n),()=>{s?.delete(t),s?.size===0&&this._handlers.delete(e),n?.(),n&&(this._targetUnsubscribes=this._targetUnsubscribes.filter(i=>i!==n))}}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}};var Us=class extends Error{code="session_end_unavailable";constructor(e="[urun] this session handle cannot terminally end the session; disconnect the viewer instead",t){super(e),this.name="SessionEndUnavailableError",t?.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}},we=class extends Error{code;httpStatus;requestId;constructor(e,t){super(e),this.name="SessionEndError",this.code=t.code??"session_end_failed",this.httpStatus=t.httpStatus,this.requestId=t.requestId,t.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}},Ne=class extends Error{requestId;code;constructor(e,t){super(e),this.name="RequestError",this.requestId=t?.requestId,this.code=t?.code,t?.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}},zs=class extends Ne{timeoutMs;constructor(e,t){super(`[urun] request timed out after ${e}ms`,{requestId:t}),this.name="RequestTimeoutError",this.timeoutMs=e,Object.setPrototypeOf(this,new.target.prototype)}},Bs=class extends Ne{timeoutMs;constructor(e,t){super(`[urun] request doc-sync did not establish within ${e}ms \u2014 the request was never delivered to the runtime (the session doc never synced with the session-server; check the doc-sync transport / connection)`,{requestId:t}),this.name="RequestDocSyncError",this.timeoutMs=e,Object.setPrototypeOf(this,new.target.prototype)}},Ws=class extends Error{stream;owner;attempted;constructor(e,t,s){super(`[urun] stream "${e}" is already produced by the ${t}; this (${s}) peer cannot also produce it \u2014 a named stream has exactly one producer (consume it instead, or use a distinct name for the reverse direction)`),this.name="StreamDirectionConflict",this.stream=e,this.owner=t,this.attempted=s,Object.setPrototypeOf(this,new.target.prototype)}},Ot=15e3,Mt=class extends Error{kind;stream;timeoutMs;constructor(e,t){let s=t?.timeoutMs??Ot,n=t?.stream??e,i=n!==e?` "${n}"`:"";super(`[urun] SFU did not ack producer ${e}${i} within ${Math.round(s/1e3)}s \u2014 the server never replied to 'produce'. The runtime's inbound port for this stream is likely unadvertised (a cold or capacity-queued runtime), so the SFU has nothing to forward the track to; the published track never reached the runtime.`),this.name="ProduceAckTimeout",this.kind=e,this.stream=n,this.timeoutMs=s,Object.setPrototypeOf(this,new.target.prototype)}},Hs=class extends Ne{constructor(e){super("[urun] request aborted",{requestId:e}),this.name="RequestAbortError",Object.setPrototypeOf(this,new.target.prototype)}},Vs=class extends Ne{constructor(e){super("[urun] request cancelled: session disconnected",{requestId:e}),this.name="RequestCancelledError",Object.setPrototypeOf(this,new.target.prototype)}};function Ia(r,e){let t=e.error?.reason,s=e.elapsedMs!==void 0?Math.round(e.elapsedMs/1e3):void 0;switch(r){case"create-failed":return{message:`[urun] session create failed${e.error?.httpStatus!==void 0?` (HTTP ${e.error.httpStatus})`:""}${t?`: ${t}`:""}`,hint:e.error?.httpStatus===401||e.error?.httpStatus===403?"The backend rejected this client \u2014 sign in again or check the auth token / org access.":"The backend could not create a session \u2014 check the app/function name and auth, then retry."};case"never-live":{let n=s!==void 0?` after ${s}s`:"",i=` (last server status: ${e.lastServerStatus??"none"})`;return e.error?.code==="expired"?{message:`[urun] session${e.sessionId?` ${e.sessionId}`:""} expired before media connected${n} \u2014 the control plane reclaims sessions whose media transport never establishes (~80s after create)`,hint:"Retry to mint a fresh session, and connect promptly after start (a backgrounded tab or paused debugger can miss the window)."}:e.sessionId?{message:`[urun] session ${e.sessionId} was created but never went live${n}${i} \u2014 the backend is busy or wedged (no runtime picked the session up)`,hint:"The backend is at capacity or stuck. Retry in a moment; if it persists, the session id above is what to report."}:{message:`[urun] no session went live${n} (phase=${e.phase}${e.lastServerStatus?`, last server status: ${e.lastServerStatus}`:""})`,hint:"The session never got past admission. Retry; if it persists, check the backend deployment."}}case"transport-failed":return e.error?.code==="transport-consumed"?{message:`[urun] the retry reused a session whose media transport was already connected${e.sessionId?` (id ${e.sessionId})`:""} \u2014 the session was consumed by an earlier attempt`,hint:"Start a fresh session (reload the page) \u2014 this session leg cannot be connected again."}:{message:`[urun] media/transport connection failed${t?`: ${t}`:""} (transport state: ${e.transportState})`,hint:"The network is likely blocking the media connection (WebRTC/WebSocket) \u2014 try a different network or disable VPN/proxy, then retry."};case"media-permission":return{message:`[urun] microphone/camera unavailable${t?`: ${t}`:""}`,hint:e.error?.code==="NotFoundError"||e.error?.code==="OverconstrainedError"?"No matching input device was found \u2014 connect or select a microphone/camera and retry.":"Allow microphone/camera access for this site (browser permission \u2014 or, when embedded, the parent page's permissions policy), then retry."};case"ended":return{message:`[urun] session ended before going live${e.sessionId?` (id ${e.sessionId})`:""}`,hint:"The session was closed (server-side, or superseded by another connection). Start a new session."};case"runtime-failed":return{message:`[urun] session${e.sessionId?` ${e.sessionId}`:""} failed at runtime${t?`: ${t}`:""}`,hint:"The session function crashed on the backend \u2014 check the app logs, then start a new session."};case"produce-timeout":return{message:`[urun] publishing a track timed out${t?`: ${t}`:""} \u2014 the SFU never acked the produce (the runtime\u2019s inbound port for the stream was not advertised in time)`,hint:"The runtime was still cold or the backend was at capacity when the track was published. Retry in a moment; if it persists, the backend never opened the stream to receive it."};case"expired":return{message:`[urun] session${e.sessionId?` ${e.sessionId}`:""} ended \u2014 ${t??"it reached its maximum length"}`,hint:"The session reached its end. Start a new session to continue."}}}var ye=class extends Error{kind;status;hint;constructor(e,t,s){let{message:n,hint:i}=Ia(e,t);super(n),this.name="SessionFailedError",this.kind=e,this.status=t,this.hint=i,s?.cause!==void 0&&(this.cause=s.cause),Object.setPrototypeOf(this,new.target.prototype)}};function zp(r,e){if(r instanceof ye)return r;let t=r instanceof Error?r:new Error(String(r)),s={phase:e?.phase??"idle",transportState:e?.transportState??"disconnected",...e,error:{reason:t.message,code:t.name,kind:"media-permission"}};return new ye("media-permission",s,{cause:r})}var ct=class extends Error{code="transport_session_mismatch";connectedSessionId;requestedSessionId;constructor(e,t){super(`[urun] cannot retarget a connected transport to a different session: this leg is live on ${e??"(unknown)"} but setConnection() asked for ${t} \u2014 disconnect() this leg first (or use a fresh session handle)`),this.name="TransportSessionMismatchError",this.connectedSessionId=e,this.requestedSessionId=t,Object.setPrototypeOf(this,new.target.prototype)}},ee=class extends Error{httpStatus;constructor(e,t){super(e),this.name="SessionAllocationError",this.httpStatus=t?.httpStatus,t?.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}};function Gs(r){if(!r)return!1;let e=typeof r=="string"?r:r.name;return e==="queued"||e==="unavailable"||e==="provisioning"}var La=45e3;function Hp(r,e={}){let{timeout:t=La,signal:s}=e;return new Promise((n,i)=>{if(s?.aborted){i(s.reason instanceof Error?s.reason:new Error("whenLive aborted"));return}if(r.phase?.name==="live"){n();return}let a=r.phase?.name;if(a==="error"||a==="ended"||a==="expired"){let f=r.phase,h=r.status??{phase:f.name,transportState:"disconnected",sessionId:f.sessionId,requestId:f.requestId,queue:f.queue,error:f.error};i(new ye(a==="ended"?"ended":a==="expired"?"expired":f.error?.kind??"transport-failed",h));return}let o,c,p=!1,d=f=>{p||(p=!0,c!==void 0&&clearTimeout(c),s?.removeEventListener("abort",l),o?.(),f?i(f):n())},l=()=>{d(s?.reason instanceof Error?s.reason:new Error("whenLive aborted"))};s?.addEventListener("abort",l,{once:!0});let u=()=>{let f=r.phase;return r.status??{phase:f?.name??"idle",transportState:"disconnected",sessionId:f?.sessionId,requestId:f?.requestId,queue:f?.queue,error:f?.error}},m=f=>d(new ye(f,u()));t>0&&(c=setTimeout(()=>{let f=u();f.elapsedMs===void 0&&(f.elapsedMs=t),d(new ye("never-live",f))},t)),o=r.onPhase(f=>{f?.name==="live"?d():f?.name==="error"?m(f.error?.kind??"transport-failed"):f?.name==="ended"?m("ended"):f?.name==="expired"&&m("expired")}),p&&o()})}function Vp(r){switch(r.name){case"idle":return"Initializing\u2026";case"unavailable":return"Starting the app\u2026";case"queued":return r.queue?`Waiting in queue (position ${r.queue.position} of ${r.queue.depth})\u2026`:r.runtime?.state==="busy"?"All runtimes are busy \u2014 waiting for capacity\u2026":"Waiting for capacity\u2026";case"provisioning":return r.runtime?.state==="starting"?"Starting model\u2026":"Provisioning\u2026";case"connecting":return"Connecting\u2026";case"live":return"Live";case"error":return r.error?.reason?`Session failed \u2014 ${r.error.reason}`:"Session failed";case"ended":return"Session ended";case"expired":return"Session ended \u2014 reached its maximum length. Start a new session."}}var Ma=500,Oa=15e3,dt=6;function kr(r,e=Math.random){if(!Number.isFinite(r)||r<0)throw new Error(`[urun] computeBackoffDelay: attempt must be a non-negative number, got ${r}`);let t=Math.min(Oa,Ma*2**r);return Math.round(e()*t)}function Pr(r){if(r instanceof ee){let e=r.httpStatus;return e===408||e===429||e!==void 0&&e>=500}return r instanceof Error?r.name==="TypeError"||r.name==="TimeoutError"||r.name==="AbortError":!1}var Ks=10,Aa=.5,At=Ks;function xr(){return At<1?!1:(At-=1,!0)}function Dr(){At=Math.min(Ks,At+Aa)}var Na="session-api.prod.cloud.urun.sh",ja=["https://session-api.use2.prod.cloud.urun.sh","https://session-api.usw2.prod.cloud.urun.sh"];function le(r){return r.trim().replace(/\/+$/,"")}function Zs(r,e){let t=[],s=n=>{if(!n)return;let i=le(n);i&&!t.includes(i)&&t.push(i)};s(r);for(let n of e??[])s(n);for(let n of eo(r))s(n);return t}function Xp(r){try{if(typeof fetch!="function")return;let e=`${le(r.baseUrl)}/api/session-requests/${encodeURIComponent(r.requestId)}/release`;fetch(e,{method:"POST",headers:be(r,r.jwt),keepalive:!0}).catch(()=>{})}catch{}}async function Zp(r){try{let e=`${le(r.baseUrl)}/api/session-requests/${encodeURIComponent(r.requestId)}/release`,t=await Se(r);if(r.getAccessToken&&!t)throw new we("[urun] session release refused: getAccessToken resolved no token (an unauthenticated release is never sent)",{requestId:r.requestId,code:"no_access_token"});let s=await fetch(e,{method:"POST",headers:be(r,t)});if((s.status===401||s.status===403)&&r.getAccessToken){let o=await Se(r,{forceRefresh:!0,reason:"unauthorized"});o&&o!==t&&(s=await fetch(e,{method:"POST",headers:be(r,o)}))}let n=await Nt(s);if(!s.ok)throw new we(n.error_message||n.error_code||`[urun] session release failed: HTTP ${s.status}`,{requestId:r.requestId,code:n.error_code,httpStatus:s.status});let i=String(n.status??"");if(i!=="closed"&&i!=="cancelled"&&i!=="canceled")throw new we("[urun] session release returned an unrecognized terminal status",{requestId:r.requestId,code:"invalid_release_response",httpStatus:s.status});return{status:i==="closed"?"ended":"canceled",requestId:r.requestId}}catch(e){throw e instanceof we?e:new we("[urun] session release request failed",{requestId:r.requestId,cause:e})}}function en(r){if(typeof r!="string"||r.length===0)return null;let e=new Date(r);return Number.isFinite(e.getTime())?e:null}var Fa=120,qa=1e3,$a=20,Ua=5,za=500,tn=1e4,Ba=3,Wa=50,Ys=1e4;async function Qs(r,e){let t=Date.now()+Ys;for(;;){await jt(Wa);let s=await Se(r);if(s)return s;if(Date.now()>=t)throw new ee(`[urun] session allocation at ${e} never got an access token: the wired getAccessToken resolved nothing within ${Math.round(Ys/1e3)}s (no unauthenticated request was sent)`)}}function Ha(r,e){if(!r)return null;try{let t=new URL(r),s=e?new URL(le(e)):null,n=t.pathname==="/api/sessions/create"||t.pathname==="/api/sessions/create/";return t.protocol!=="https:"||!n||!Va(t,s)?null:le(t.origin)}catch{return null}}function Va(r,e){return Js(r.hostname)&&(!e||Js(e.hostname))}function Js(r){let e=r.toLowerCase();return e==="urun.sh"||e.endsWith(".urun.sh")}async function el(r){let e=Zs(r.baseUrl,r.fallbackUrls),t=null,s=e.length>1;for(let n=0;n<dt;n++){for(let i of e)try{let a=await Ga(i,r,{pollAttempts:Fa,retryAfterLimitMs:s?qa:void 0});return Dr(),a}catch(a){if(t=a instanceof Error?a:new Error(String(a)),t instanceof pe)throw t}if(!Pr(t))break;if(n+1<dt){if(!xr())break;await jt(kr(n))}}throw t??new Error("[urun] session allocation failed")}async function Ga(r,e,t){let s,n,i,a=r,o=0,c=new Set,p=Date.now()+t.pollAttempts*tn;for(let d=0;d<t.pollAttempts;d++){n=i??await Se(e),i=void 0,e.getAccessToken&&!n&&(n=await Qs(e,a));let l=Math.max(1,Math.min($a,Math.floor((p-Date.now())/1e3))),u=!!s,m=Date.now(),f=s?await fetch(`${a}/api/session-requests/${encodeURIComponent(s)}?wait_s=${l}`,{headers:be(e,n),signal:Ja((l+Ua)*1e3)}):await fetch(`${a}/api/sessions/create`,{method:"POST",redirect:"manual",headers:{...be(e,n),"Content-Type":"application/json","Idempotency-Key":e.idempotencyKey},body:JSON.stringify(Ka(e))});if(!s&&(f.status===307||f.status===308)){let b=Ha(f.headers.get("location"),a);if(b&&b!==a&&o<Ba){o+=1,a=b;continue}throw new ee(`[urun] session create redirected from ${a} without a usable target`,{httpStatus:f.status})}let h=await Nt(f);if(h.request_id)try{e.onRequest?.({requestId:h.request_id,baseUrl:a})}catch{}if(f.ok&&(h.status==="allocated"||!h.status&&!!h.session_id)&&!!h.session_id){let b=h.session_id,P=rn(h.ws_url,a,b,"gateway allocated session");return{baseUrl:a,sessionId:b,wsUrl:P,endsAt:en(h.ends_at),response:h}}if(f.status===202||h.status==="pending"||h.status==="queued"||h.queued){if(s=h.request_id||s,!s)throw new Error("[urun] gateway queued session without request_id");if(e.onAdmission)try{e.onAdmission(Ya(h,s))}catch{}let b=Date.now()-m<za;u&&b&&await jt(Qa(f,h,t.retryAfterLimitMs));continue}if((f.status===401||f.status===403)&&e.getAccessToken){let b=n??"";c.add(b);let P=await Se(e,{forceRefresh:!0,reason:"unauthorized"});if(P&&!c.has(P)){i=P;continue}if(P===void 0){let x=await Qs(e,a);if(!c.has(x)){i=x;continue}}}let v=h.error_message||h.error_code||`HTTP ${f.status}`;throw new ee(`[urun] session allocation failed at ${a}: ${v}`,{httpStatus:f.status})}throw new ee(`[urun] timed out waiting for session allocation at ${a}`)}function be(r,e){let t={"X-Tenant-Id":r.orgId,"X-Auth-Provider":r.authProvider||"default","X-User-Id":"anonymous"};return e&&(t.Authorization=`Bearer ${e}`),t}async function Se(r,e){return r.getAccessToken?await r.getAccessToken(e)??void 0:r.jwt}function Ka(r){let e=r.priority==="preempt";return{app:r.app,function:r.functionName,gpus:1,idempotency_key:r.idempotencyKey,...r.sessionKey&&!e?{logical_id:r.sessionKey}:{},...e?{priority:"preempt"}:{}}}async function tl(r){let e=Zs(r.baseUrl,r.fallbackUrls),t=null;for(let s=0;s<dt;s++){for(let n of e)try{let i={baseUrl:n,app:"",functionName:"",orgId:r.orgId,jwt:r.jwt,getAccessToken:r.getAccessToken,authProvider:r.authProvider,idempotencyKey:""},a=`${le(n)}/api/sessions/${encodeURIComponent(r.sessionId)}/viewer-connect`,o=await Se(i);if(r.getAccessToken&&!o)throw new ee(`[urun] viewer-connect for ${r.sessionId} refused: getAccessToken resolved no token (an unauthenticated viewer-connect is never sent)`);let c=await fetch(a,{headers:be(i,o)});if((c.status===401||c.status===403)&&r.getAccessToken){let l=await Se(i,{forceRefresh:!0,reason:"unauthorized"});l&&l!==o&&(c=await fetch(a,{headers:be(i,l)}))}if(!c.ok)throw new ee(`[urun] viewer-connect for ${r.sessionId} failed: HTTP ${c.status}`,{httpStatus:c.status});let p=await Nt(c),d=rn(p.ws_url,n,r.sessionId,"viewer-connect");return Dr(),{baseUrl:le(n),sessionId:r.sessionId,wsUrl:d,endsAt:en(p.ends_at),response:p}}catch(i){if(t=i instanceof Error?i:new Error(String(i)),t instanceof pe)throw t}if(!Pr(t))break;if(s+1<dt){if(!xr())break;await jt(kr(s))}}throw t??new Error("[urun] viewer-connect failed")}async function rl(r){try{let e=le(r.baseUrl),t=await Se(r);if(r.getAccessToken&&!t)return{status:"unavailable"};let s=await fetch(`${e}/api/sessions/prewake`,{method:"POST",headers:{...be(r,t),"Content-Type":"application/json"},body:JSON.stringify({app:r.app,function:r.functionName})});if(s.status===404)return{status:"unknown-app"};if(!s.ok)return{status:"unavailable"};let n=await Nt(s),i={status:n.status==="prebound"?"prebound":"warming"};return typeof n.expires_at=="string"&&(i.expiresAt=n.expires_at),typeof n.warm_capable=="boolean"&&(i.warmCapable=n.warm_capable),i}catch(e){return console.debug?.("[urun] prewake failed (advisory, ignored):",e),{status:"unavailable"}}}async function Nt(r){try{let e=await r.json();return e&&typeof e=="object"?e:{}}catch{return{}}}function Ya(r,e){let t={status:r.status==="queued"||r.queued?"queued":"pending",requestId:e};typeof r.queue_position=="number"&&typeof r.queue_depth=="number"&&(t.queue={position:r.queue_position,depth:r.queue_depth});let s=r.runtime_state;return(s==="unavailable"||s==="starting"||s==="busy")&&(t.runtime={state:s},typeof r.runtime_reason=="string"&&r.runtime_reason.length>0&&(t.runtime.reason=r.runtime_reason)),t}function Qa(r,e,t){let s=Number(r.headers.get("Retry-After")||""),n=Number(e.retry_after_seconds??s),i=t??tn;return Number.isFinite(n)&&n>0?Math.min(n*1e3,i):1e3}function jt(r){return new Promise(e=>setTimeout(e,r))}function Ja(r){let e=typeof AbortSignal<"u"?AbortSignal:void 0;return typeof e?.timeout=="function"?e.timeout(r):void 0}var pe=class extends Error{};function rn(r,e,t,s){if(!r)throw new pe(`[urun] ${s} ${t} without ws_url`);let n,i;try{n=new URL(r)}catch{throw new pe(s==="viewer-connect"?`[urun] viewer-connect returned no usable ws_url for ${t}`:`[urun] ${s} ${t} with non-absolute ws_url`)}try{i=new URL(le(e))}catch{throw new pe(`[urun] ${s} ${t} has invalid gateway base URL`)}let a=Xa(i.hostname)&&i.protocol==="http:";if(!(a&&n.protocol==="ws:"||n.protocol==="wss:"))throw new pe(`[urun] ${s} ${t} with insecure ws_url`);if(!Za(n,i,a))throw new pe(`[urun] ${s} ${t} with cross-origin ws_url`);return n.toString()}function Xa(r){return r==="localhost"||r==="127.0.0.1"||r==="::1"||r.endsWith(".localhost")}function Za(r,e,t){return!!(t||r.hostname===e.hostname&&r.port===e.port||Xs(r.hostname)&&Xs(e.hostname))}function Xs(r){return r==="urun.sh"||r.endsWith(".urun.sh")}function eo(r){try{return new URL(r).hostname!==Na?[]:ja}catch{return[]}}function qt(){return typeof window>"u"&&typeof process<"u"&&process.versions!=null&&process.versions.node!=null}function nn(){return qt()?"Chrome111":void 0}var to=["RTCSessionDescription","RTCIceCandidate","RTCRtpReceiver","RTCRtpSender","RTCRtpTransceiver","RTCDataChannel","MediaStream","MediaStreamTrack"],Ft=null;function an(){return qt()?Ft||(Ft=ro(),Ft):Promise.resolve()}async function ro(){let r=globalThis;if(typeof r.WebSocket>"u")try{let e=await import("ws"),t=e.default??e;r.WebSocket=t}catch(e){sn("WebSocket",e)}if(typeof r.RTCPeerConnection>"u")try{let e=await import("werift");so(r,e)}catch(e){sn("werift",e)}}function so(r,e){let{RTCPeerConnection:t,useH264:s,useVP8:n,useOPUS:i,useSdesMid:a,useSdesRTPStreamId:o,useAbsSendTime:c,useTransportWideCC:p,useVideoOrientation:d}=e,l=()=>({video:[s(),n()],audio:[i()]}),u=()=>({video:[a(),o(),c(),p(),d()],audio:[a(),c(),p()]});class m extends t{constructor(h){super({...h,codecs:h?.codecs??l(),headerExtensions:h?.headerExtensions??u()})}}r.RTCPeerConnection=m;for(let f of to)e[f]!=null&&typeof r[f]>"u"&&(r[f]=e[f])}function sn(r,e){let t=e instanceof Error?e.message:String(e);console.warn(`[urun-sh/core] Node WebRTC support: optional dependency "${r}" unavailable (${t}). Realtime media will not work in this Node process; install "${r}" to enable it. Doc/KV transport over WebSocket is unaffected.`)}function cn(r){return`stream:${r}`}var dn="urun-stream-v1";var Ir=1,ue={BINARY:0,TEXT:1,JSON:2,END:3},pn=Symbol("urun:stream:end");function ln(r){if(r===pn)return Uint8Array.from([Ir,ue.END]);let e,t;r instanceof Uint8Array?(e=ue.BINARY,t=r):r instanceof ArrayBuffer?(e=ue.BINARY,t=new Uint8Array(r)):typeof r=="string"?(e=ue.TEXT,t=new TextEncoder().encode(r)):(e=ue.JSON,t=new TextEncoder().encode(JSON.stringify(r)));let s=new Uint8Array(2+t.length);return s[0]=Ir,s[1]=e,s.set(t,2),s}function un(r){let e=r instanceof Uint8Array?r:new Uint8Array(r);if(e.length<2||e[0]!==Ir)throw new Error(`[urun] bad stream envelope (version=${e[0]}, len=${e.length})`);let t=e[1],s=e.subarray(2);switch(t){case ue.BINARY:return s.slice();case ue.TEXT:return new TextDecoder().decode(s);case ue.JSON:return JSON.parse(new TextDecoder().decode(s));case ue.END:return pn;default:throw new Error(`[urun] unknown stream envelope KIND 0x${t.toString(16)}`)}}var on=class{consumerId;_handlers=new Map;constructor(e="loopback"){this.consumerId=e}onData(e,t){let s=this._handlers.get(e);return s||(s=new Set,this._handlers.set(e,s)),s.add(t),()=>s.delete(t)}sendData(e,t,s={}){s.to&&(s.to,this.consumerId);for(let n of this._handlers.get(e)??[])n(t);return Promise.resolve()}};function il(r){return{get consumerId(){return r.consumerId},onData(e,t){return r.onStreamData(e,t)},sendData(e,t,s){return r.sendStreamData(e,t,s)}}}var ga=qs(cs());var Ds=qs(ea(),1);var ta="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";function hp(r){let e=globalThis.crypto,t=new Uint8Array(r);if(e?.getRandomValues)return e.getRandomValues(t),t;for(let s=0;s<r;s++)t[s]=Math.floor(Math.random()*256);return t}function ra(r=16){let e=hp(r),t="";for(let s=0;s<r;s++)t+=ta[e[s]%ta.length];return t}var sa=[1e3,2e3,4e3,8e3,3e4],na=5,fp=15e3,ia=15e3,aa=15e3,mp=2e3,gp=6e3,_p=2,vp=750,wp=3,oa=[1e3,2e3,4e3],yp=15e3;function uu(r){return`stream:${r}`}var Is="--",bp=["video","audio"];function Sp(r){let e=r.lastIndexOf(Is);if(e<=0)return;let t=r.slice(e+Is.length);return bp.includes(t)?t:void 0}function hu(r,e){return`${r}${Is}${e}`}var Rp={queued:"queued",pending:"provisioning",allocating:"provisioning",provisioning:"provisioning",allocated:"connecting",connecting:"connecting",live:"live",running:"live",error:"error",failed:"error",rejected:"error",expired:"expired",cancelled:"ended",canceled:"ended",closed:"ended"};function at(r){return r==="error"||r==="ended"||r==="expired"}var ca=3,da=4e3,pa=[{urls:"stun:stun.l.google.com:19302"},{urls:"stun:stun1.l.google.com:19302"}];function la(r){if(!r)return;let e=/\/(?:ws\/)?rtc\/([^/?#]+)/.exec(r);if(e)try{return decodeURIComponent(e[1])}catch{return e[1]}}var ua=class{_state="disconnected";_sessionId=null;_tracks=new Map;_tracksByName=new Map;_options;_emitter=new Ds.default;_ws=null;_connectedUrl=null;_device=null;_recvTransport=null;_sendTransport=null;_consumers=new Map;_audioProducer=null;_videoProducer=null;_publishedAudio=null;_publishedVideo=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;_endsAt=null;_forceResolveOnNextConnect=!1;_connectStartedAt;_wakingSince;_mediaMonitorTimer=null;_lastInboundTotal=0;_mediaEverFlowed=!1;_lastInboundAdvanceAt=0;_mediaDeathHandled=!1;_decodeSignalSeen=!1;_lastFramesDecoded=0;_lastDecodeAdvanceAt=0;_decodeDeathHandled=!1;_latestInboundSample=kt();_decodeWindowStartSample=kt();_selectedCandidatePair=_a();_candidatePairDiagnosticEmitted=!1;_currentEpoch=0;_consumerId=null;_streamDataHandlers=new Map;_dataProducers=new Map;_dataProducerPromises=new Map;_dataConsumers=new Map;_pendingDataProduce=new Map;_sendTransportWaiters=[];get consumerId(){return this._consumerId===null&&(this._consumerId=Cp()),this._consumerId}get state(){return this._state}get currentIncarnation(){return this._currentEpoch}get phase(){return this._phase}get isProducingMedia(){let e=t=>t!==null&&!t.closed&&!t.paused;return e(this._audioProducer)||e(this._videoProducer)}get endsAt(){return this._endsAt}setEndsAt(e){this._endsAt=e}_pastDeadline(){return this._endsAt!==null&&Date.now()>=this._endsAt.getTime()}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._endsAt!==null&&(e.endsAt=this._endsAt),this._phase.queue&&(e.queue=this._phase.queue),this._phase.runtime&&(e.runtime=this._phase.runtime),this._phase.wakingSince!==void 0&&(e.wakingSince=this._phase.wakingSince),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!==null&&this._ws.readyState===WebSocket.OPEN}get connectedUrl(){return this._connectedUrl}getTrackByName(e){if(Sp(e)!==void 0)return;let t=this._tracksByName.get(e);if(t&&t.readyState!=="ended")return t;for(let s of this._tracks.values())if(!(s.kind!==e||s.readyState==="ended")&&this._streamNameOf(s)===void 0)return s;return t}_streamNameOf(e){for(let[t,s]of this._tracksByName)if(s===e)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){let t=la(e.url);if(e.sessionId!==void 0&&e.sessionId!==this._sessionId)throw new ct(this._sessionId,e.sessionId);if(t!==void 0&&t!==this._sessionId)throw new ct(this._sessionId,t);this._options={...this._options,...e};return}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,s=xp(t);if(s!==void 0&&this.setIncarnation(s),!t||typeof t!="object")return;let n=t,i=typeof n.status=="string"?n.status:void 0;if(i&&!at(this._phase.name)&&!this.isStaleClosedMarker(n))if(i==="error"){let a=n.error_reason??n.errorReason,o=typeof a=="string"&&a?a:"session failed";this._setPhase("error",{error:{reason:o,code:"runtime-failed",kind:"runtime-failed"}})}else(i==="closed"||i==="ended")&&(this._pastDeadline()?this._setPhase("expired",{error:{reason:"session reached its maximum length",code:i,kind:"expired"}}):this._setPhase("ended"))}setIncarnation(e){if(!Number.isFinite(e)||e<=this._currentEpoch)return;let t=this._currentEpoch>0,s=this._state==="connected";this._currentEpoch=e,t&&s&&!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"&&t!=="error")return!1;let s=e.status_epoch??e.statusEpoch,n=typeof s=="number"?s:Number(s);return Number.isFinite(n)?n<this._currentEpoch:!1}async connect(e){if(this.isOpen&&this._state==="connected"&&!this._intentionalDisconnect){e!==void 0&&(this._lastStartOptions=e);return}this._lastStartOptions=e,this._intentionalDisconnect=!1,at(this._phase.name)&&(this._phase={name:"idle"}),this._connectStartedAt??=Date.now(),this._cancelPendingDial?.(new Error("TransportSession: connect superseded by a newer connect()"));let t=++this._generation,s=this._state==="reconnecting"||this._state==="renegotiating";s||this._setState("connecting");let n=null,i=()=>t!==this._generation||this._intentionalDisconnect,a=()=>{if(i())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){n=u instanceof Error?u:new Error(String(u)),i()||this._cleanupSocket()}}return!1},c=this._forceResolveOnNextConnect&&this._resolveConnection!==null;this._forceResolveOnNextConnect=!1;let p=c?0:this._resolveConnection?_p:1;for(let l=0;l<p;l++)if(l>0&&(await ha(vp),a()),await o())return;if(this._resolveConnection)for(let l=0;l<wp;l++){this._setState("reconnecting"),await ha(oa[Math.min(l,oa.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}),u.endsAt!==void 0&&(this._endsAt=u.endsAt)}catch(u){if(i())throw new Error("TransportSession: connect cancelled");n=u instanceof Error?u:new Error(String(u));continue}if(await o())return}if(i())throw n??new Error("TransportSession: connect cancelled");this._setState("failed");let d=n??new Error("TransportSession: connect failed");throw s||this._emitError(d),d}leaveLeg(){if(!this.isOpen)return!1;this._intentionalDisconnect=!0,this._stopMediaMonitor(),this._clearRecvIceRestart(),this._clearSendIceRestart(),this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null);try{this._send({type:"leave"})}catch{}try{this._ws?.close()}catch{}return!0}disconnect(){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;try{this._publishedAudio?.track.stop()}catch{}try{this._publishedVideo?.track.stop()}catch{}if(this._publishedAudio=null,this._publishedVideo=null,this._audioProducer){this._send({type:"stopAudio"});try{this._audioProducer.track?.stop()}catch{}try{this._audioProducer.close()}catch{}this._audioProducer=null}if(this._videoProducer){this._send({type:"stopVideo"});try{this._videoProducer.track?.stop()}catch{}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}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._cleanupSocket(),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)}}_emitDiagnostic(e){console.warn(`[urun] ${e.message}`,e.detail??{}),this._emitter.emit("diagnostic",e)}sendInput(e,t){this._send({type:"input",data:e,sequence:t})}sendSignal(e){this._send(e)}onSignal(e){return this.on("signal",e)}onStreamData(e,t){let s=this._streamDataHandlers.get(e);return s||(s=new Set,this._streamDataHandlers.set(e,s)),s.add(t),()=>{let n=this._streamDataHandlers.get(e);n?.delete(t),n&&n.size===0&&this._streamDataHandlers.delete(e)}}sendStreamData(e,t,s){return this._ensureDataProducer(e).then(n=>{n.send(ln(t))})}_awaitSendTransport(){return this._sendTransport?Promise.resolve(this._sendTransport):new Promise((e,t)=>{let s={resolve:i=>{clearTimeout(n),e(i)},reject:i=>{clearTimeout(n),t(i)}},n=setTimeout(()=>{let i=this._sendTransportWaiters.indexOf(s);i>=0&&this._sendTransportWaiters.splice(i,1),t(new Error(`[urun] sendStreamData: no send transport after ${ia}ms (the server never offered createSendTransport \u2014 data-up produce is impossible on this leg)`))},ia);this._sendTransportWaiters.push(s)})}_settleSendTransportWaiters(e,t){let s=this._sendTransportWaiters;this._sendTransportWaiters=[];for(let n of s)e?n.resolve(e):n.reject(t??new Error("TransportSession: disconnected"))}_ensureDataProducer(e){let t=this._dataProducers.get(e);if(t&&!t.closed)return Promise.resolve(t);let s=this._dataProducerPromises.get(e);if(s)return s;let n=this._awaitSendTransport().then(i=>i.produceData({label:cn(e),protocol:dn,ordered:!0})).then(i=>this._awaitDataChannelOpen(i)).then(i=>(this._dataProducers.set(e,i),this._dataProducerPromises.delete(e),i)).catch(i=>{throw this._dataProducerPromises.delete(e),i});return this._dataProducerPromises.set(e,n),n}_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((s,n)=>{let i=()=>{p(),s(e)},a=l=>{d(new Error(`[urun] sendStreamData: DataChannel error before open: ${l.message}`))},o=()=>{p(),n(new Error("[urun] sendStreamData: DataProducer closed before its DataChannel opened"))},c=setTimeout(()=>{d(new Error(`[urun] sendStreamData: DataChannel not open after ${aa}ms (the SCTP handshake never completed \u2014 data-up produce is impossible on this channel)`))},aa),p=()=>{clearTimeout(c),e.off("open",i),e.off("error",a),e.observer.off("close",o)},d=l=>{p();try{e.close()}catch{}n(l)};e.on("open",i),e.on("error",a),e.observer.on("close",o)})}_dispatchStreamData(e,t){for(let s of this._streamDataHandlers.get(e)??[])s(t)}_streamNameFromLabel(e){if(e)return e.startsWith("stream:")?e.slice(7):void 0}async addTrack(e,t){await this._publishTrack(e,t)}async _publishTrack(e,t){let s=e.kind==="video",n=s?this._videoProducer:this._audioProducer;if(n&&!n.closed){if(n.track===e)return;await n.replaceTrack({track:e}),this._rememberPublishIntent(s,e,t);return}if(!this._sendTransport)throw new Error("TransportSession: send transport not ready");let i=await this._sendTransport.produce({track:e,...s?{}:{codecOptions:{opusStereo:!1,opusDtx:!1,opusFec:!1}},stopTracks:!1,...t?{appData:{name:t}}:{}});s?this._videoProducer=i:this._audioProducer=i,this._rememberPublishIntent(s,e,t)}_rememberPublishIntent(e,t,s){let n={track:t,...s!==void 0?{name:s}:{}};e?this._publishedVideo=n:this._publishedAudio=n}removeTrack(){if(this._publishedAudio=null,this._audioProducer){this._send({type:"stopAudio"});try{this._audioProducer.track?.stop()}catch{}this._audioProducer.close(),this._audioProducer=null}}async addVideoTrack(e,t){await this._publishTrack(e,t)}stopVideo(){if(this._publishedVideo=null,this._videoProducer){this._send({type:"stopVideo"});try{this._videoProducer.track?.stop()}catch{}this._videoProducer.close(),this._videoProducer=null}}requestDiagnostics(){this._send({type:"diagnostics"})}seekStream(e,t){this._send({type:"stream.seek",stream:e,target:t})}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,s=t?this._pendingDataProduce.get(t):void 0;s&&t&&(this._pendingDataProduce.delete(t),s.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;default:this._emitter.emit("signal",e);break}}_onServerError(e){let t=typeof e.message=="string"?e.message:"signaling error",s=typeof e.code=="string"?e.code:void 0;if(/connect\(\) already called/i.test(t)){if(this._resolveConnection){this._generation++;let n=this._ws;this._ws=null;try{n?.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(s==="TRANSPORT_BIND_FAILED"){this._emitError(new Error(t),s);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 s=e.target,n=s==="live"?"live":typeof s=="number"?s:Number(s);this._emitter.emit("seeked",t,n)}_onStatus(e){let t=e.request_id??e.requestId;t&&(this._requestId=t);let s=typeof e.status=="string"?e.status:void 0,n=(s?Rp[s]:void 0)??"provisioning",i=at(n);if(this._liveReached&&!i||at(this._phase.name))return;s!==void 0&&(this._lastServerStatus=s);let a=e.queue_position??e.queuePosition,o=e.queue_depth??e.queueDepth,c=typeof a=="number"&&typeof o=="number";if(n==="expired"){let p=typeof e.reason=="string"&&e.reason?e.reason:this._endsAt!==null?"session reached its maximum length":"session expired";this._setPhase("expired",{error:{reason:p,code:s,kind:"expired"}});return}if(n==="error"){let p=typeof e.reason=="string"&&e.reason?e.reason:s??"admission failed";this._setPhase("error",{error:{reason:p,code:s,kind:s==="error"?"runtime-failed":"create-failed"}});return}if(n==="ended"){this._pastDeadline()?this._setPhase("expired",{error:{reason:"session reached its maximum length",code:s,kind:"expired"}}):this._setPhase("ended");return}if(n==="queued"){this._setPhase("queued",c?{queue:{position:a,depth:o}}:void 0);return}if(n==="connecting"){this._setPhase("connecting");return}this._setPhase("provisioning")}async _onRouterCapabilities(e){qt()&&await an();let t=nn(),s=new ga.Device(t?{handlerName:t}:void 0);await s.load({routerRtpCapabilities:e}),this._device=s,this._send({type:"rtpCapabilities",rtpCapabilities:s.rtpCapabilities})}async _onCreateRecvTransport(e){this._device&&this._buildRecvTransport(e)}_buildRecvTransport(e){if(!this._device)return;let t=e.iceCandidates,s=this._device.createRecvTransport({id:e.id,iceParameters:e.iceParameters,iceCandidates:t,dtlsParameters:e.dtlsParameters,...e.sctpParameters?{sctpParameters:e.sctpParameters}:{},iceServers:this._options.iceServers??pa});this._recvIceRestartAttempts=0,this._clearRecvIceRestart();let n=this._generation;s.on("connect",({dtlsParameters:i},a,o)=>{try{this._send({type:"connectTransport",transportId:s.id,dtlsParameters:i}),a()}catch(c){o(c)}}),s.on("connectionstatechange",i=>{if(n===this._generation){if(i==="connected"){this._clearRecvIceRestart(),this._recvIceRestartAttempts=0,this._reportSelectedCandidatePair(s);return}if(!(this._intentionalDisconnect&&i==="closed")&&(i==="failed"||i==="disconnected")){if(this._tryRestartRecvIce())return;i==="failed"&&this._emitError(new Error(`media transport ${i}`),i)}}}),this._recvTransport=s}async _reportSelectedCandidatePair(e){let t=null;if(typeof e.getStats=="function")try{t=await e.getStats()}catch{}this._recvTransport===e&&(this._selectedCandidatePair=kp(t),!this._candidatePairDiagnosticEmitted&&(this._candidatePairDiagnosticEmitted=!0,this._emitDiagnostic({level:"info",kind:"ice-candidate-pair",message:`selected ICE candidate pair: local=${this._selectedCandidatePair.localType??"unknown"} remote=${this._selectedCandidatePair.remoteType??"unknown"} protocol=${this._selectedCandidatePair.protocol??"unknown"} remote=${this._selectedCandidatePair.remoteAddress??"unknown"}:${this._selectedCandidatePair.remotePort??"unknown"}`,detail:{sessionId:this._options.sessionId,...this._selectedCandidatePair}})))}_tryRestartRecvIce(){let e=this._recvTransport;return!e||e.closed?!1:this._recvIceRestartTimer?!0:this._recvIceRestartAttempts>=ca?!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>=ca?!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,s=e.iceParameters;if(!s)return;let n=!!this._recvTransport&&this._recvTransport.id===t,i=!n&&!!this._sendTransport&&this._sendTransport.id===t,a=n?this._recvTransport:i?this._sendTransport:null;a&&(Promise.resolve(a.restartIce({iceParameters:s})).catch(o=>{this._emitter.emit("error",o instanceof Error?o:new Error(String(o)))}),n&&this._recvIceRestartTimer?this._armRecvIceRestartWatchdog():i&&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")},da)}_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")},da)}_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??pa});this._sendIceRestartAttempts=0,this._clearSendIceRestart();let s=this._generation;t.on("connect",({dtlsParameters:n},i,a)=>{try{this._send({type:"connectSendTransport",transportId:t.id,dtlsParameters:n}),i()}catch(o){a(o)}}),t.on("produce",({kind:n,rtpParameters:i,appData:a},o,c)=>{if(this._pendingProduce){c(new Error("produce already pending"));return}let p=a&&typeof a.name=="string"?a.name:void 0,d=setTimeout(()=>{let l=this._pendingProduce;if(!l||l.timeoutId!==d)return;this._pendingProduce=null;let u=new Mt(n,{stream:p,timeoutMs:Ot});this._setPhase("error",{error:{reason:u.message,code:"produce-ack-timeout",kind:"produce-timeout"}}),this._emitter.emit("error",u),l.reject(u)},Ot);this._pendingProduce={timeoutId:d,resolve:l=>{o({id:l})},reject:c};try{this._send(p?{type:"produce",kind:n,name:p,rtpParameters:i}:{type:"produce",kind:n,rtpParameters:i})}catch(l){this._pendingProduce?.timeoutId===d&&(this._pendingProduce=null,clearTimeout(d)),c(l)}}),t.on("producedata",({sctpStreamParameters:n,label:i,protocol:a},o,c)=>{try{i&&this._pendingDataProduce.set(i,{resolve:p=>o({id:p}),reject:c}),this._send({type:"produceData",sctpStreamParameters:n,label:i,protocol:a})}catch(p){i&&this._pendingDataProduce.delete(i),c(p)}}),t.on("connectionstatechange",n=>{if(s===this._generation){if(n==="connected"){this._clearSendIceRestart(),this._sendIceRestartAttempts=0;return}this._intentionalDisconnect&&n==="closed"||(n==="failed"||n==="disconnected")&&this._trySendIceRestart()||(n==="failed"||n==="closed")&&this._emitError(new Error(`media send transport ${n}`),n)}}),this._sendTransport=t,this._settleSendTransportWaiters(t),this._emitter.emit("audioTransportReady"),this._republishPublishedTracks()}async _republishPublishedTracks(){let e=this._publishedAudio;if(e&&e.track.readyState!=="ended"&&(!this._audioProducer||this._audioProducer.closed))try{await this.addTrack(e.track,e.name)}catch(s){console.warn("[urun] republish: mic re-produce after reconnect failed",s)}else e&&e.track.readyState==="ended"&&console.warn("[urun] republish: published mic track is ended \u2014 not republishing (device re-acquisition is the app/page-recovery pass)");let t=this._publishedVideo;if(t&&t.track.readyState!=="ended"&&(!this._videoProducer||this._videoProducer.closed))try{await this.addVideoTrack(t.track,t.name)}catch(s){console.warn("[urun] republish: camera re-produce after reconnect failed",s)}else t&&t.track.readyState==="ended"&&console.warn("[urun] republish: published camera track is ended \u2014 not republishing (device re-acquisition is the app/page-recovery pass)")}async _onConsumeData(e){if(!this._recvTransport)return;let t=e.label,s=this._streamNameFromLabel(t);if(!s)return;let n=await this._recvTransport.consumeData({id:e.id,dataProducerId:e.dataProducerId,sctpStreamParameters:e.sctpStreamParameters,label:t,protocol:e.protocol});this._dataConsumers.set(s,n),n.on("message",o=>{try{let c=typeof o=="string"?new TextEncoder().encode(o):new Uint8Array(o);this._dispatchStreamData(s,un(c))}catch(c){this._emitter.emit("error",c instanceof Error?c:new Error(String(c)))}});let i=!1,a=()=>{i||n.closed||(i=!0,this._send({type:"dataConsumerReady",id:e.id}))};n.readyState==="open"?a():n.on("open",a)}async _onConsume(e){if(!this._recvTransport)return;let t=this._generation,s=await this._recvTransport.consume({id:e.id,producerId:e.producerId,kind:e.kind,rtpParameters:e.rtpParameters});this._consumers.set(s.id,s),this._tracks.set(s.track.id,s.track);let n=e.streamName??e.label;n&&this._tracksByName.set(n,s.track),s.track.addEventListener?.("unmute",()=>{t!==this._generation||this._intentionalDisconnect||this._isTerminalPhase()||this._liveReached||this._setPhase("live")},{once:!0}),this._emitter.emit("track",s.track);let i=s.id;s.track.addEventListener("ended",()=>{t!==this._generation||this._intentionalDisconnect||this._closeConsumer(i)},{once:!0}),this._send({type:"resumeConsumer",consumerId:s.id}),this._startMediaMonitor()}_closeConsumer(e){let t=this._consumers.get(e);if(!t)return;this._consumers.delete(e);let s=t.track;try{t.close()}catch{}if(s){this._tracks.delete(s.id);for(let[n,i]of this._tracksByName)i===s&&this._tracksByName.delete(n)}}_closeConsumersByProducer(e){for(let[t,s]of this._consumers)s.producerId===e&&this._closeConsumer(t)}_mediaPollMs(){let e=this._options.mediaLiveness?.pollMs;return e===void 0?mp:e}_mediaStallTimeoutMs(){let e=this._options.mediaLiveness?.stallTimeoutMs;return e===void 0?gp: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,this._decodeWindowStartSample=kt();let t=this._generation;this._mediaMonitorTimer=setInterval(()=>{t!==this._generation||this._intentionalDisconnect||this._isTerminalPhase()||this._sampleMediaLiveness(t)},e)}_stopMediaMonitor(){this._mediaMonitorTimer&&(clearInterval(this._mediaMonitorTimer),this._mediaMonitorTimer=null)}async _sampleMediaLiveness(e){if(this._consumers.size===0)return;let t=kt(),s=await Promise.all(Array.from(this._consumers.values(),d=>Pp(d)));for(let d of s)Tp(t,d);if(e!==this._generation||this._intentionalDisconnect||this._isTerminalPhase())return;this._latestInboundSample=t;let n=Date.now(),{total:i,framesDecoded:a}=t;if(i>this._lastInboundTotal){this._lastInboundTotal=i,this._lastInboundAdvanceAt=n,i>0&&(this._mediaEverFlowed=!0,this._liveReached||this._setPhase("live")),this._checkDecodeLiveness(a,n);return}if(!this._mediaEverFlowed||this._mediaDeathHandled||n-this._lastInboundAdvanceAt<this._mediaStallTimeoutMs())return;let o=this._mediaStallTimeoutMs(),c={sessionId:this._options.sessionId,stallWindowMs:o,inboundTotal:i,...fa(this._latestInboundSample),...this._selectedCandidatePair};if(this._recvTransport?.connectionState==="connected"){this._emitDiagnostic({level:"info",kind:"media-idle",message:`no inbound media for ${o/1e3}s, but the ICE path is connected \u2014 the sender is idle, not dead; holding the transport`,detail:c}),this._lastInboundAdvanceAt=n,this._lastDecodeAdvanceAt=n;return}this._mediaDeathHandled=!0,this._emitDiagnostic({level:"warning",kind:"media-stall",message:`inbound media stopped advancing for ${o/1e3}s and the ICE path is ${this._recvTransport?.connectionState??"gone"}; reconnecting`,detail:c}),this._renegotiate()}_checkDecodeLiveness(e,t){if(e!==null){if(!this._decodeSignalSeen){this._decodeSignalSeen=!0,this._lastFramesDecoded=e,this._lastDecodeAdvanceAt=t,this._decodeWindowStartSample=this._latestInboundSample;return}if(e>this._lastFramesDecoded){this._lastFramesDecoded=e,this._lastDecodeAdvanceAt=t,this._decodeWindowStartSample=this._latestInboundSample;return}if(!this._decodeDeathHandled&&t-this._lastDecodeAdvanceAt>=this._mediaStallTimeoutMs()){this._decodeDeathHandled=!0;let s=this._mediaStallTimeoutMs(),n=Ep(this._decodeWindowStartSample,this._latestInboundSample),i=n.lossPct!==null&&n.lossPct>=5?" \u2014 stall is consistent with network packet loss between the SFU and this browser":"";this._emitDiagnostic({level:"warning",kind:"decode-wall",message:`video is arriving but no new frames decoded for ${s/1e3}s (framesDecoded stuck at ${e}) \u2014 decoder stalled${i}; reconnecting the stream`,detail:{sessionId:this._options.sessionId,stallWindowMs:s,inboundTotal:this._lastInboundTotal,framesDecoded:e,...fa(this._latestInboundSample),...n,likelyCause:n.lossPct!==null&&n.lossPct>=5?"network-packet-loss":null,...this._selectedCandidatePair}}),this._renegotiate()}}}_renegotiate(){this._intentionalDisconnect||this._isTerminalPhase()||this._reconnectTimer||(this._stopMediaMonitor(),this._setState("renegotiating"),this._attemptReconnect())}recover(){if(this._intentionalDisconnect||this._isTerminalPhase()||this._connectStartedAt===void 0||this._cancelPendingDial)return;if(!this.isOpen){this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null),this._reconnectAttempts=0,this._attemptReconnect(void 0,!0);return}let e=this._recvTransport?.connectionState;(e==="disconnected"||e==="failed")&&(this._recvIceRestartTimer||(this._recvIceRestartAttempts=0),this._tryRestartRecvIce()||this._renegotiate());let t=this._sendTransport?.connectionState;(t==="disconnected"||t==="failed")&&(this._sendIceRestartTimer||(this._sendIceRestartAttempts=0),this._trySendIceRestart())}_attemptReconnect(e,t=!1){if(this._intentionalDisconnect||this._isTerminalPhase()||this._reconnectTimer)return;if(this._reconnectAttempts>=na){this._setState("failed"),this._emitError(new Error(`Failed after ${na} attempts`));return}let s=t?0:sa[Math.min(this._reconnectAttempts,sa.length-1)];this._reconnectAttempts++,this._state!=="renegotiating"&&this._setState("reconnecting"),this._reconnectTimer=setTimeout(async()=>{this._reconnectTimer=null,this._replaceCurrentLegForReconnect();try{await this.connect(e??this._lastStartOptions)}catch(n){if(n instanceof Error&&n.message==="TransportSession: connect cancelled")return;this._attemptReconnect(e)}},s)}_connectUrls(){let e=[],t=s=>{if(!s)return;let n=la(s)!==void 0,i=this._sessionId&&!n?`${s}${s.includes("?")?"&":"?"}sessionId=${encodeURIComponent(this._sessionId)}`:s;e.includes(i)||e.push(i)};t(this._options.url);for(let s of this._options.fallbackUrls??[])t(s);return e}_connectOnce(e,t,s){return new Promise((n,i)=>{let a=!1,o=!1,c=null,p=new WebSocket(e);this._ws=p;let d=()=>this._ws!==p||t!==this._generation,l=m=>{o||(o=!0,c&&clearTimeout(c),this._cancelPendingDial===u&&(this._cancelPendingDial=null),i(m))},u=m=>{try{p.close()}catch{}l(m)};this._cancelPendingDial=u,c=setTimeout(()=>{try{p.close()}catch{}l(new Error("TransportSession: connect timed out"))},fp),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._connectedUrl=e,this._multiplexer=new Lt(p),p.send(JSON.stringify(this._startMessage(s))),this._scheduleReconnectBudgetReset(),this._setState("connected"),this._liveReached||this._setPhase("connecting"),this._emitter.emit("connected"),o=!0,this._cancelPendingDial===u&&(this._cancelPendingDial=null),n()}},p.onerror=()=>{a||l(new Error("WebSocket connection error"))},p.onclose=()=>{if(!a){l(new Error("WebSocket closed before connecting"));return}if(!d()&&(this._clearReconnectBudgetReset(),c&&clearTimeout(c),this._setState("disconnected"),!this._intentionalDisconnect)){if(this._pastDeadline()&&!at(this._phase.name)){this._setPhase("expired",{error:{reason:"session reached its maximum length",kind:"expired"}}),this._emitter.emit("disconnected");return}this._emitter.emit("disconnected"),!this._isTerminalPhase()&&this._attemptReconnect(s)}},p.onmessage=m=>{if(!(this._ws!==p||t!==this._generation)&&typeof m.data=="string")try{this._handleMessage(JSON.parse(m.data))}catch(f){this._emitter.emit("error",f instanceof Error?f:new Error(String(f)))}}})}_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,e.onopen=null,e.onmessage=null,e.onerror=null,e.onclose=null;try{e.close()}catch{}}_replaceCurrentLegForReconnect(){this._cleanupSocket(),this._cancelPendingDial?.(new Error("TransportSession: reconnect replacing current dial")),this._cleanupMedia()}_scheduleReconnectBudgetReset(){this._clearReconnectBudgetReset(),this._reconnectAttempts!==0&&(this._stableResetTimer=setTimeout(()=>{this._stableResetTimer=null,this._reconnectAttempts=0},yp))}_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._videoProducer){try{this._videoProducer.close()}catch{}this._videoProducer=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))}_isTerminalPhase(){return this._phase.name==="ended"||this._phase.name==="expired"?!0:this._phase.name!=="error"?!1:this._phase.error?.kind!=="transport-failed"}_setPhase(e,t){e==="live"&&(this._liveReached=!0);let s={name:e};t?.queue&&(s.queue=t.queue),t?.runtime&&(s.runtime=t.runtime),Gs(e)?(this._wakingSince??=Date.now(),s.wakingSince=this._wakingSince):this._wakingSince=void 0,this._requestId&&(s.requestId=this._requestId),this._sessionId&&(s.sessionId=this._sessionId),this._endsAt!==null&&(s.endsAt=this._endsAt),t?.error&&(s.error=t.error),this._phase=s,this._isTerminalPhase()&&(this._stopMediaMonitor(),this._clearRecvIceRestart(),this._clearSendIceRestart(),this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null)),this._emitter.emit("phase",s)}reportAdmission(e){if(e.requestId&&(this._requestId=e.requestId),this._lastServerStatus=e.status,this._liveReached||at(this._phase.name))return;let{runtime:t,queue:s}=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:s,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 ha(r){return new Promise(e=>setTimeout(e,r))}function Cp(){return ra()}var Ls=["packetsReceived","packetsLost","nackCount","pliCount","firCount","keyFramesDecoded","framesReceived","framesDropped","retransmittedPacketsReceived","retransmittedBytesReceived","jitterBufferDelay","jitterBufferEmittedCount"];function kt(){return{total:0,framesDecoded:null,packetsReceived:null,packetsLost:null,nackCount:null,jitter:null,pliCount:null,firCount:null,keyFramesDecoded:null,framesReceived:null,framesDropped:null,retransmittedPacketsReceived:null,retransmittedBytesReceived:null,jitterBufferDelay:null,jitterBufferEmittedCount:null}}function Tp(r,e){r.total+=e.total,e.framesDecoded!==null&&(r.framesDecoded=(r.framesDecoded??0)+e.framesDecoded),e.jitter!==null&&(r.jitter=r.jitter===null?e.jitter:Math.max(r.jitter,e.jitter));for(let t of Ls)e[t]!==null&&(r[t]=(r[t]??0)+e[t])}function fa(r){return Object.fromEntries(Ls.map(e=>[e,r[e]]))}function ma(r,e){return r===null||e===null||e<r?null:e-r}function Ep(r,e){let t=r.packetsLost!==null&&e.packetsLost!==null?e.packetsLost-r.packetsLost:null,s=ma(r.packetsReceived,e.packetsReceived),n=ma(r.nackCount,e.nackCount),i=t===null?null:Math.max(0,t),a=i!==null&&s!==null?i+s:0;return{packetsLostWindow:t,packetsReceivedWindow:s,nackCountWindow:n,jitterSec:e.jitter,lossPct:a>0&&i!==null?i/a*100:null}}function _a(){return{localType:null,remoteType:null,protocol:null,remoteAddress:null,remotePort:null}}function kp(r){let e=new Map;va(r,o=>{let c=typeof o.id=="string"?o.id:null;c&&e.set(c,o)});let t=Array.from(e.values()).find(o=>o.type==="transport"),s=typeof t?.selectedCandidatePairId=="string"?t.selectedCandidatePairId:null,n=(s?e.get(s):void 0)??Array.from(e.values()).find(o=>o.type==="candidate-pair"&&o.selected===!0);if(!n)return _a();let i=typeof n.localCandidateId=="string"?e.get(n.localCandidateId):void 0,a=typeof n.remoteCandidateId=="string"?e.get(n.remoteCandidateId):void 0;return{localType:typeof i?.candidateType=="string"?i.candidateType:null,remoteType:typeof a?.candidateType=="string"?a.candidateType:null,protocol:typeof i?.protocol=="string"?i.protocol:typeof a?.protocol=="string"?a.protocol:null,remoteAddress:typeof a?.address=="string"?a.address:typeof a?.ip=="string"?a.ip:null,remotePort:typeof a?.port=="number"?a.port:null}}function va(r,e){let t=s=>{s&&typeof s=="object"&&e(s)};if(r instanceof Map)for(let[s,n]of r.entries()){if(!n||typeof n!="object")continue;let i=n;e(typeof i.id=="string"?i:{...i,id:s})}else(Array.isArray(r)||r&&typeof r.forEach=="function")&&r.forEach(t)}async function Pp(r){let e=kt();if(typeof r.getStats!="function")return e;let t;try{t=await r.getStats()}catch{return e}return va(t,n=>{if(n.type==="inbound-rtp"){let i=typeof n.bytesReceived=="number"?n.bytesReceived:0,a=typeof n.packetsReceived=="number"?n.packetsReceived:0;if(e.total+=i+a,typeof n.framesDecoded=="number"&&(e.framesDecoded=(e.framesDecoded??0)+n.framesDecoded),n.kind==="video"||n.mediaType==="video"){typeof n.jitter=="number"&&(e.jitter=e.jitter===null?n.jitter:Math.max(e.jitter,n.jitter));for(let o of Ls)typeof n[o]=="number"&&(e[o]=(e[o]??0)+n[o])}}}),e}function xp(r){if(!r||typeof r!="object")return;let e=r.epoch,t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:void 0}import{WebsocketProvider as Dp}from"y-websocket";import{Awareness as ya}from"y-protocols/awareness";var Ip=1;function _u(r){let e=new URL(r);return`${e.protocol}//${e.host}/doc`}function vu(r){let e=r.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,s,n)=>{let i=`${r.sessionId}/${t}`,a=new Dp(r.serverUrl,i,s,{awareness:n,params:{dsv:String(Ip),...r.token?{token:r.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)},ensureConnected(){a.wsconnected||a.connect()},destroy(){a.destroy()}}}}var Ms=class{constructor(e,t,s){this._name=e;this._doc=t;this.awareness=s}_name;_doc;awareness;_inner=null;_innerUnsub=null;_syncHandlers=new Set;_destroyed=!1;get synced(){return this._inner?.synced??!1}get destroyed(){return this._destroyed}onSync(e){return this._syncHandlers.add(e),()=>this._syncHandlers.delete(e)}attach(e){if(!this._destroyed&&(this._inner&&(this._innerUnsub?.(),this._innerUnsub=null,this._inner.destroy(),this._inner=null),this._inner=e(this._name,this._doc,this.awareness),this._innerUnsub=this._inner.onSync(t=>{for(let s of[...this._syncHandlers])s(t)}),this._inner.synced))for(let t of[...this._syncHandlers])t(!0)}ensureConnected(){this._inner?.ensureConnected?.()}destroy(){this._destroyed=!0,this._innerUnsub?.(),this._innerUnsub=null,this._inner?.destroy(),this._inner=null,this._syncHandlers.clear()}},wa=class{_target=null;_bridges=[];connect=(e,t,s)=>{let n=new Ms(e,t,s);return this._bridges.push(n),this._target&&n.attach(this._target),n};get connected(){return this._target!==null}setTarget(e){if(this._target!==e){this._target=e,this._bridges=this._bridges.filter(t=>!t.destroyed);for(let t of this._bridges)t.attach(e)}}};import*as xt from"yjs";function Dt(r){if(r===null||typeof r!="object"||Array.isArray(r))return!1;let e=Object.getPrototypeOf(r);return e===Object.prototype||e===null}var Er="$bytes";function Lp(r){return r instanceof Uint8Array||r instanceof ArrayBuffer}function Mp(r){if(!Dt(r))return!1;let e=Object.keys(r);return e.length===1&&e[0]===Er&&typeof r[Er]=="string"}function Op(r){return r instanceof ArrayBuffer?new Uint8Array(r):r}function Ap(r){if(typeof Buffer<"u")return Buffer.from(r).toString("base64");let e="";for(let t=0;t<r.length;t++)e+=String.fromCharCode(r[t]);return btoa(e)}function Np(r){if(typeof Buffer<"u")return new Uint8Array(Buffer.from(r,"base64"));let e=atob(r),t=new Uint8Array(e.length);for(let s=0;s<e.length;s++)t[s]=e.charCodeAt(s);return t}function Os(r){if(Lp(r))return{[Er]:Ap(Op(r))};if(Array.isArray(r))return r.map(Os);if(Dt(r)){let e={};for(let[t,s]of Object.entries(r))e[t]=Os(s);return e}return r}function Pt(r){if(Mp(r))return Np(r[Er]);if(Array.isArray(r))return r.map(Pt);if(Dt(r)){let e={};for(let[t,s]of Object.entries(r))e[t]=Pt(s);return e}return r}var Sa=Symbol("urun:doc:path-absent");function jp(r,e){let t=e.split("."),s=r;for(let n of t){if(s===null||typeof s!="object"||!(n in s))return Sa;s=s[n]}return s}function Fp(r,e){return r===e?!0:JSON.stringify(r)===JSON.stringify(e)}function As(r,e){for(let[t,s]of Object.entries(e))if(Dt(s)){let n=r.get(t);if(!(n instanceof xt.Map)){let i=n;n=new xt.Map,r.set(t,n),Dt(i)&&As(n,i)}As(n,s)}else{if(Fp(r.get(t),s))continue;r.set(t,s)}}var qp=Symbol("urun:doc:local"),ba=class{_doc=new xt.Doc;_root=this._doc.getMap("session");_awareness=new ya(this._doc);_listeners=new Set;_key;_sessionId;_connection=null;_connUnsub=null;_synced;_syncWaiters=new Set;_texts=new Map;_observer=()=>this.notify();constructor(e,t,s){this._key=e,this._sessionId=t,this._root.observeDeep(this._observer),s?(this._connection=s(e,this._doc,this._awareness),this._synced=this._connection.synced,this._connUnsub=this._connection.onSync(n=>{n&&this._markSynced()}),this._synced&&this._markSynced()):this._synced=!0}get awareness(){return this._awareness}setSessionId(e){this._sessionId=e}get synced(){return this._synced}ensureConnected(){this._connection?.ensureConnected?.()}onSynced(e){return this._synced?(e(),()=>{}):(this._syncWaiters.add(e),()=>this._syncWaiters.delete(e))}set(e){e=Os(e),this.applyPatch(e)}get(e,t){let s=this.snapshot();if(!e)return Pt(s);let n=jp(s,e);return n===Sa?t:Pt(n)}on(e,t){return this._listeners.add(t),()=>this._listeners.delete(t)}text(e){let t=this._texts.get(e);return t||(t=new Ns(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(()=>{As(this._root,e)},qp)}snapshot(){return this._root.toJSON()}notify(){let e=Pt(this.snapshot());for(let t of this._listeners)t(e)}},Ns=class{constructor(e){this._ytext=e;this._observer=t=>{for(let s of t.delta)if(typeof s.insert=="string"&&s.insert.length>0){let n=s.insert;for(let i of this._delta)i(n)}},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 Su(r){return{get clientId(){return r.clientID},set(e){r.setLocalState(e)},setField(e,t){r.setLocalStateField(e,t)},getLocal(){return r.getLocalState()??null},getStates(){return r.getStates()},on(e,t){let s=()=>t(r.getStates());return r.on("change",s),s(),()=>r.off("change",s)}}}export{Lt as a,$s as b,Us as c,we as d,Ne as e,zs as f,Bs as g,Ws as h,Ot as i,Mt as j,Hs as k,Vs as l,Ia as m,ye as n,zp as o,ct as p,ee as q,Gs as r,La as s,Hp as t,Vp as u,Ma as v,Oa as w,dt as x,kr as y,Pr as z,le as A,Zs as B,Xp as C,Zp as D,el as E,tl as F,rl as G,qt as H,nn as I,an as J,ra as K,on as L,il as M,uu as N,Is as O,Sp as P,hu as Q,ua as R,Ip as S,_u as T,vu as U,wa as V,ba as W,Su as X};
|