@urun-sh/core 0.2.46 → 0.2.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-FFQBRQM7.mjs +3 -0
- package/dist/chunk-MFBAY7ST.mjs +8 -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-DVQgPiJ2.d.mts} +25 -2
- package/dist/{stream-data-a_RrPi2p.d.ts → stream-data-DVQgPiJ2.d.ts} +25 -2
- package/package.json +1 -1
- package/dist/chunk-DUCJ3UFC.mjs +0 -8
- package/dist/chunk-OXPELTWD.mjs +0 -3
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";var Xc=Object.create;var Er=Object.defineProperty;var Zc=Object.getOwnPropertyDescriptor;var ed=Object.getOwnPropertyNames;var td=Object.getPrototypeOf,rd=Object.prototype.hasOwnProperty;var sd=(s,e,t)=>()=>{if(t)throw t[0];try{return s&&(e=s(s=0)),e}catch(r){throw t=[r],r}};var E=(s,e)=>()=>{try{return e||s((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}},Ti=(s,e)=>{for(var t in e)Er(s,t,{get:e[t],enumerable:!0})},Ri=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of ed(e))!rd.call(s,n)&&n!==t&&Er(s,n,{get:()=>e[n],enumerable:!(r=Zc(e,n))||r.enumerable});return s};var De=(s,e,t)=>(t=s!=null?Xc(td(s)):{},Ri(e||!s||!s.__esModule?Er(t,"default",{value:s,enumerable:!0}):t,s)),Ci=s=>Ri(Er({},"__esModule",{value:!0}),s);var Yi=E((Zh,Ki)=>{"use strict";var pt=1e3,ht=pt*60,ft=ht*60,Ve=ft*24,Id=Ve*7,Dd=Ve*365.25;Ki.exports=function(s,e){e=e||{};var t=typeof s;if(t==="string"&&s.length>0)return Ad(s);if(t==="number"&&isFinite(s))return e.long?Ld(s):Md(s);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(s))};function Ad(s){if(s=String(s),!(s.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(s);if(e){var t=parseFloat(e[1]),r=(e[2]||"ms").toLowerCase();switch(r){case"years":case"year":case"yrs":case"yr":case"y":return t*Dd;case"weeks":case"week":case"w":return t*Id;case"days":case"day":case"d":return t*Ve;case"hours":case"hour":case"hrs":case"hr":case"h":return t*ft;case"minutes":case"minute":case"mins":case"min":case"m":return t*ht;case"seconds":case"second":case"secs":case"sec":case"s":return t*pt;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:return}}}}function Md(s){var e=Math.abs(s);return e>=Ve?Math.round(s/Ve)+"d":e>=ft?Math.round(s/ft)+"h":e>=ht?Math.round(s/ht)+"m":e>=pt?Math.round(s/pt)+"s":s+"ms"}function Ld(s){var e=Math.abs(s);return e>=Ve?Ur(s,e,Ve,"day"):e>=ft?Ur(s,e,ft,"hour"):e>=ht?Ur(s,e,ht,"minute"):e>=pt?Ur(s,e,pt,"second"):s+" ms"}function Ur(s,e,t,r){var n=e>=t*1.5;return Math.round(s/t)+" "+r+(n?"s":"")}});var Ys=E((ef,Qi)=>{"use strict";function Od(s){t.debug=t,t.default=t,t.coerce=c,t.disable=o,t.enable=n,t.enabled=a,t.humanize=Yi(),t.destroy=u,Object.keys(s).forEach(d=>{t[d]=s[d]}),t.names=[],t.skips=[],t.formatters={};function e(d){let l=0;for(let p=0;p<d.length;p++)l=(l<<5)-l+d.charCodeAt(p),l|=0;return t.colors[Math.abs(l)%t.colors.length]}t.selectColor=e;function t(d){let l,p=null,m,h;function f(...g){if(!f.enabled)return;let v=f,y=Number(new Date),k=y-(l||y);v.diff=k,v.prev=l,v.curr=y,l=y,g[0]=t.coerce(g[0]),typeof g[0]!="string"&&g.unshift("%O");let I=0;g[0]=g[0].replace(/%([a-zA-Z%])/g,(w,N)=>{if(w==="%%")return"%";I++;let $=t.formatters[N];if(typeof $=="function"){let X=g[I];w=$.call(v,X),g.splice(I,1),I--}return w}),t.formatArgs.call(v,g),(v.log||t.log).apply(v,g)}return f.namespace=d,f.useColors=t.useColors(),f.color=t.selectColor(d),f.extend=r,f.destroy=t.destroy,Object.defineProperty(f,"enabled",{enumerable:!0,configurable:!1,get:()=>p!==null?p:(m!==t.namespaces&&(m=t.namespaces,h=t.enabled(d)),h),set:g=>{p=g}}),typeof t.init=="function"&&t.init(f),f}function r(d,l){let p=t(this.namespace+(typeof l>"u"?":":l)+d);return p.log=this.log,p}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 p of l)p[0]==="-"?t.skips.push(p.slice(1)):t.names.push(p)}function i(d,l){let p=0,m=0,h=-1,f=0;for(;p<d.length;)if(m<l.length&&(l[m]===d[p]||l[m]==="*"))l[m]==="*"?(h=m,f=p,m++):(p++,m++);else if(h!==-1)m=h+1,f++,p=f;else return!1;for(;m<l.length&&l[m]==="*";)m++;return m===l.length}function o(){let d=[...t.names,...t.skips.map(l=>"-"+l)].join(",");return t.enable(""),d}function a(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 u(){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}Qi.exports=Od});var Ji=E((Z,qr)=>{"use strict";Z.formatArgs=Fd;Z.save=jd;Z.load=Ud;Z.useColors=Nd;Z.storage=qd();Z.destroy=(()=>{let s=!1;return()=>{s||(s=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();Z.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 Nd(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let s;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(s=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(s[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function Fd(s){if(s[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+s[0]+(this.useColors?"%c ":" ")+"+"+qr.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;s.splice(1,0,e,"color: inherit");let t=0,r=0;s[0].replace(/%[a-zA-Z%]/g,n=>{n!=="%%"&&(t++,n==="%c"&&(r=t))}),s.splice(r,0,e)}Z.log=console.debug||console.log||(()=>{});function jd(s){try{s?Z.storage.setItem("debug",s):Z.storage.removeItem("debug")}catch{}}function Ud(){let s;try{s=Z.storage.getItem("debug")||Z.storage.getItem("DEBUG")}catch{}return!s&&typeof process<"u"&&"env"in process&&(s=process.env.DEBUG),s}function qd(){try{return localStorage}catch{}}qr.exports=Ys()(Z);var{formatters:$d}=qr.exports;$d.j=function(s){try{return JSON.stringify(s)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var Zi={};Ti(Zi,{createSupportsColor:()=>Js,default:()=>Vd});function ne(s,e=globalThis.Deno?globalThis.Deno.args:Wr.default.argv){let t=s.startsWith("-")?"":s.length===1?"-":"--",r=e.indexOf(t+s),n=e.indexOf("--");return r!==-1&&(n===-1||r<n)}function Wd(){if(!("FORCE_COLOR"in L))return;if(L.FORCE_COLOR==="true")return 1;if(L.FORCE_COLOR==="false")return 0;if(L.FORCE_COLOR.length===0)return 1;let s=Math.min(Number.parseInt(L.FORCE_COLOR,10),3);if([0,1,2,3].includes(s))return s}function Bd(s){return s===0?!1:{level:s,hasBasic:!0,has256:s>=2,has16m:s>=3}}function zd(s,{streamIsTTY:e,sniffFlags:t=!0}={}){let r=Wd();r!==void 0&&($r=r);let n=t?$r:r;if(n===0)return 0;if(t){if(ne("color=16m")||ne("color=full")||ne("color=truecolor"))return 3;if(ne("color=256"))return 2}if("TF_BUILD"in L&&"AGENT_NAME"in L)return 1;if(s&&!e&&n===void 0)return 0;let i=n||0;if(L.TERM==="dumb")return i;if(Wr.default.platform==="win32"){let o=Xi.default.release().split(".");return Number(o[0])>=10&&Number(o[2])>=10586?Number(o[2])>=14931?3:2:1}if("CI"in L)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(o=>o in L)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(o=>o in L)||L.CI_NAME==="codeship"?1:i;if("TEAMCITY_VERSION"in L)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(L.TEAMCITY_VERSION)?1:0;if(L.COLORTERM==="truecolor"||L.TERM==="xterm-kitty"||L.TERM==="xterm-ghostty"||L.TERM==="wezterm")return 3;if("TERM_PROGRAM"in L){let o=Number.parseInt((L.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(L.TERM_PROGRAM){case"iTerm.app":return o>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(L.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(L.TERM)||"COLORTERM"in L?1:i}function Js(s,e={}){let t=zd(s,{streamIsTTY:s&&s.isTTY,...e});return Bd(t)}var Wr,Xi,Qs,L,$r,Hd,Vd,eo=sd(()=>{"use strict";Wr=De(require("process"),1),Xi=De(require("os"),1),Qs=De(require("tty"),1);({env:L}=Wr.default);ne("no-color")||ne("no-colors")||ne("color=false")||ne("color=never")?$r=0:(ne("color")||ne("colors")||ne("color=true")||ne("color=always"))&&($r=1);Hd={stdout:Js({isTTY:Qs.default.isatty(1)}),stderr:Js({isTTY:Qs.default.isatty(2)})},Vd=Hd});var ro=E((q,zr)=>{"use strict";var Gd=require("tty"),Br=require("util");q.init=eu;q.log=Jd;q.formatArgs=Yd;q.save=Xd;q.load=Zd;q.useColors=Kd;q.destroy=Br.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");q.colors=[6,2,3,4,5,1];try{let s=(eo(),Ci(Zi));s&&(s.stderr||s).level>=2&&(q.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{}q.inspectOpts=Object.keys(process.env).filter(s=>/^debug_/i.test(s)).reduce((s,e)=>{let t=e.substring(6).toLowerCase().replace(/_([a-z])/g,(n,i)=>i.toUpperCase()),r=process.env[e];return/^(yes|on|true|enabled)$/i.test(r)?r=!0:/^(no|off|false|disabled)$/i.test(r)?r=!1:r==="null"?r=null:r=Number(r),s[t]=r,s},{});function Kd(){return"colors"in q.inspectOpts?!!q.inspectOpts.colors:Gd.isatty(process.stderr.fd)}function Yd(s){let{namespace:e,useColors:t}=this;if(t){let r=this.color,n="\x1B[3"+(r<8?r:"8;5;"+r),i=` ${n};1m${e} \x1B[0m`;s[0]=i+s[0].split(`
|
|
1
|
+
"use strict";var Xc=Object.create;var Mr=Object.defineProperty;var Zc=Object.getOwnPropertyDescriptor;var ed=Object.getOwnPropertyNames;var td=Object.getPrototypeOf,rd=Object.prototype.hasOwnProperty;var nd=(n,e,t)=>()=>{if(t)throw t[0];try{return n&&(e=n(n=0)),e}catch(r){throw t=[r],r}};var P=(n,e)=>()=>{try{return e||n((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}},Ci=(n,e)=>{for(var t in e)Mr(n,t,{get:e[t],enumerable:!0})},ki=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of ed(e))!rd.call(n,s)&&s!==t&&Mr(n,s,{get:()=>e[s],enumerable:!(r=Zc(e,s))||r.enumerable});return n};var Ne=(n,e,t)=>(t=n!=null?Xc(td(n)):{},ki(e||!n||!n.__esModule?Mr(t,"default",{value:n,enumerable:!0}):t,n)),Ei=n=>ki(Mr({},"__esModule",{value:!0}),n);var Ji=P((nf,Qi)=>{"use strict";var _t=1e3,vt=_t*60,wt=vt*60,Je=wt*24,Id=Je*7,Dd=Je*365.25;Qi.exports=function(n,e){e=e||{};var t=typeof n;if(t==="string"&&n.length>0)return Md(n);if(t==="number"&&isFinite(n))return e.long?Ld(n):Ad(n);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(n))};function Md(n){if(n=String(n),!(n.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(n);if(e){var t=parseFloat(e[1]),r=(e[2]||"ms").toLowerCase();switch(r){case"years":case"year":case"yrs":case"yr":case"y":return t*Dd;case"weeks":case"week":case"w":return t*Id;case"days":case"day":case"d":return t*Je;case"hours":case"hour":case"hrs":case"hr":case"h":return t*wt;case"minutes":case"minute":case"mins":case"min":case"m":return t*vt;case"seconds":case"second":case"secs":case"sec":case"s":return t*_t;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:return}}}}function Ad(n){var e=Math.abs(n);return e>=Je?Math.round(n/Je)+"d":e>=wt?Math.round(n/wt)+"h":e>=vt?Math.round(n/vt)+"m":e>=_t?Math.round(n/_t)+"s":n+"ms"}function Ld(n){var e=Math.abs(n);return e>=Je?zr(n,e,Je,"day"):e>=wt?zr(n,e,wt,"hour"):e>=vt?zr(n,e,vt,"minute"):e>=_t?zr(n,e,_t,"second"):n+" ms"}function zr(n,e,t,r){var s=e>=t*1.5;return Math.round(n/t)+" "+r+(s?"s":"")}});var es=P((sf,Xi)=>{"use strict";function Od(n){t.debug=t,t.default=t,t.coerce=c,t.disable=o,t.enable=s,t.enabled=a,t.humanize=Ji(),t.destroy=l,Object.keys(n).forEach(d=>{t[d]=n[d]}),t.names=[],t.skips=[],t.formatters={};function e(d){let u=0;for(let p=0;p<d.length;p++)u=(u<<5)-u+d.charCodeAt(p),u|=0;return t.colors[Math.abs(u)%t.colors.length]}t.selectColor=e;function t(d){let u,p=null,m,h;function f(...g){if(!f.enabled)return;let _=f,w=Number(new Date),T=w-(u||w);_.diff=T,_.prev=u,_.curr=w,u=w,g[0]=t.coerce(g[0]),typeof g[0]!="string"&&g.unshift("%O");let R=0;g[0]=g[0].replace(/%([a-zA-Z%])/g,(v,D)=>{if(v==="%%")return"%";R++;let U=t.formatters[D];if(typeof U=="function"){let j=g[R];v=U.call(_,j),g.splice(R,1),R--}return v}),t.formatArgs.call(_,g),(_.log||t.log).apply(_,g)}return f.namespace=d,f.useColors=t.useColors(),f.color=t.selectColor(d),f.extend=r,f.destroy=t.destroy,Object.defineProperty(f,"enabled",{enumerable:!0,configurable:!1,get:()=>p!==null?p:(m!==t.namespaces&&(m=t.namespaces,h=t.enabled(d)),h),set:g=>{p=g}}),typeof t.init=="function"&&t.init(f),f}function r(d,u){let p=t(this.namespace+(typeof u>"u"?":":u)+d);return p.log=this.log,p}function s(d){t.save(d),t.namespaces=d,t.names=[],t.skips=[];let u=(typeof d=="string"?d:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let p of u)p[0]==="-"?t.skips.push(p.slice(1)):t.names.push(p)}function i(d,u){let p=0,m=0,h=-1,f=0;for(;p<d.length;)if(m<u.length&&(u[m]===d[p]||u[m]==="*"))u[m]==="*"?(h=m,f=p,m++):(p++,m++);else if(h!==-1)m=h+1,f++,p=f;else return!1;for(;m<u.length&&u[m]==="*";)m++;return m===u.length}function o(){let d=[...t.names,...t.skips.map(u=>"-"+u)].join(",");return t.enable(""),d}function a(d){for(let u of t.skips)if(i(d,u))return!1;for(let u of t.names)if(i(d,u))return!0;return!1}function c(d){return d instanceof Error?d.stack||d.message:d}function l(){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}Xi.exports=Od});var Zi=P((ne,Hr)=>{"use strict";ne.formatArgs=Fd;ne.save=jd;ne.load=Ud;ne.useColors=Nd;ne.storage=qd();ne.destroy=(()=>{let n=!1;return()=>{n||(n=!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`."))}})();ne.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 Nd(){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 n;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&&(n=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(n[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function Fd(n){if(n[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+n[0]+(this.useColors?"%c ":" ")+"+"+Hr.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;n.splice(1,0,e,"color: inherit");let t=0,r=0;n[0].replace(/%[a-zA-Z%]/g,s=>{s!=="%%"&&(t++,s==="%c"&&(r=t))}),n.splice(r,0,e)}ne.log=console.debug||console.log||(()=>{});function jd(n){try{n?ne.storage.setItem("debug",n):ne.storage.removeItem("debug")}catch{}}function Ud(){let n;try{n=ne.storage.getItem("debug")||ne.storage.getItem("DEBUG")}catch{}return!n&&typeof process<"u"&&"env"in process&&(n=process.env.DEBUG),n}function qd(){try{return localStorage}catch{}}Hr.exports=es()(ne);var{formatters:$d}=Hr.exports;$d.j=function(n){try{return JSON.stringify(n)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var to={};Ci(to,{createSupportsColor:()=>rs,default:()=>Vd});function ce(n,e=globalThis.Deno?globalThis.Deno.args:Gr.default.argv){let t=n.startsWith("-")?"":n.length===1?"-":"--",r=e.indexOf(t+n),s=e.indexOf("--");return r!==-1&&(s===-1||r<s)}function Wd(){if(!("FORCE_COLOR"in N))return;if(N.FORCE_COLOR==="true")return 1;if(N.FORCE_COLOR==="false")return 0;if(N.FORCE_COLOR.length===0)return 1;let n=Math.min(Number.parseInt(N.FORCE_COLOR,10),3);if([0,1,2,3].includes(n))return n}function Bd(n){return n===0?!1:{level:n,hasBasic:!0,has256:n>=2,has16m:n>=3}}function zd(n,{streamIsTTY:e,sniffFlags:t=!0}={}){let r=Wd();r!==void 0&&(Vr=r);let s=t?Vr:r;if(s===0)return 0;if(t){if(ce("color=16m")||ce("color=full")||ce("color=truecolor"))return 3;if(ce("color=256"))return 2}if("TF_BUILD"in N&&"AGENT_NAME"in N)return 1;if(n&&!e&&s===void 0)return 0;let i=s||0;if(N.TERM==="dumb")return i;if(Gr.default.platform==="win32"){let o=eo.default.release().split(".");return Number(o[0])>=10&&Number(o[2])>=10586?Number(o[2])>=14931?3:2:1}if("CI"in N)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(o=>o in N)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(o=>o in N)||N.CI_NAME==="codeship"?1:i;if("TEAMCITY_VERSION"in N)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(N.TEAMCITY_VERSION)?1:0;if(N.COLORTERM==="truecolor"||N.TERM==="xterm-kitty"||N.TERM==="xterm-ghostty"||N.TERM==="wezterm")return 3;if("TERM_PROGRAM"in N){let o=Number.parseInt((N.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(N.TERM_PROGRAM){case"iTerm.app":return o>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(N.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(N.TERM)||"COLORTERM"in N?1:i}function rs(n,e={}){let t=zd(n,{streamIsTTY:n&&n.isTTY,...e});return Bd(t)}var Gr,eo,ts,N,Vr,Hd,Vd,ro=nd(()=>{"use strict";Gr=Ne(require("process"),1),eo=Ne(require("os"),1),ts=Ne(require("tty"),1);({env:N}=Gr.default);ce("no-color")||ce("no-colors")||ce("color=false")||ce("color=never")?Vr=0:(ce("color")||ce("colors")||ce("color=true")||ce("color=always"))&&(Vr=1);Hd={stdout:rs({isTTY:ts.default.isatty(1)}),stderr:rs({isTTY:ts.default.isatty(2)})},Vd=Hd});var so=P((B,Yr)=>{"use strict";var Gd=require("tty"),Kr=require("util");B.init=el;B.log=Jd;B.formatArgs=Yd;B.save=Xd;B.load=Zd;B.useColors=Kd;B.destroy=Kr.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");B.colors=[6,2,3,4,5,1];try{let n=(ro(),Ei(to));n&&(n.stderr||n).level>=2&&(B.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{}B.inspectOpts=Object.keys(process.env).filter(n=>/^debug_/i.test(n)).reduce((n,e)=>{let t=e.substring(6).toLowerCase().replace(/_([a-z])/g,(s,i)=>i.toUpperCase()),r=process.env[e];return/^(yes|on|true|enabled)$/i.test(r)?r=!0:/^(no|off|false|disabled)$/i.test(r)?r=!1:r==="null"?r=null:r=Number(r),n[t]=r,n},{});function Kd(){return"colors"in B.inspectOpts?!!B.inspectOpts.colors:Gd.isatty(process.stderr.fd)}function Yd(n){let{namespace:e,useColors:t}=this;if(t){let r=this.color,s="\x1B[3"+(r<8?r:"8;5;"+r),i=` ${s};1m${e} \x1B[0m`;n[0]=i+n[0].split(`
|
|
2
2
|
`).join(`
|
|
3
|
-
`+i),
|
|
4
|
-
`)}function Xd(
|
|
5
|
-
`).map(e=>e.trim()).join(" ")};to.O=function(s){return this.inspectOpts.colors=this.useColors,Br.inspect(s,this.inspectOpts)}});var sr=E((tf,Xs)=>{"use strict";typeof process>"u"||process.type==="renderer"||process.browser===!0||process.__nwjs?Xs.exports=Ji():Xs.exports=ro()});var no=E(so=>{"use strict";Object.defineProperty(so,"__esModule",{value:!0})});var K=E(Hr=>{"use strict";Object.defineProperty(Hr,"__esModule",{value:!0});Hr.Logger=void 0;var mt=sr(),gt="media-client",Zs=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,mt.default)(`${gt}:${e}`),this._warn=(0,mt.default)(`${gt}:WARN:${e}`),this._error=(0,mt.default)(`${gt}:ERROR:${e}`)):(this._debug=(0,mt.default)(gt),this._warn=(0,mt.default)(`${gt}:WARN`),this._error=(0,mt.default)(`${gt}: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}};Hr.Logger=Zs});var go=E((nf,en)=>{"use strict";var _t=typeof Reflect=="object"?Reflect:null,io=_t&&typeof _t.apply=="function"?_t.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)},Vr;_t&&typeof _t.ownKeys=="function"?Vr=_t.ownKeys:Object.getOwnPropertySymbols?Vr=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Vr=function(e){return Object.getOwnPropertyNames(e)};function tu(s){console&&console.warn&&console.warn(s)}var ao=Number.isNaN||function(e){return e!==e};function A(){A.init.call(this)}en.exports=A;en.exports.once=iu;A.EventEmitter=A;A.prototype._events=void 0;A.prototype._eventsCount=0;A.prototype._maxListeners=void 0;var oo=10;function Gr(s){if(typeof s!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof s)}Object.defineProperty(A,"defaultMaxListeners",{enumerable:!0,get:function(){return oo},set:function(s){if(typeof s!="number"||s<0||ao(s))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+s+".");oo=s}});A.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};A.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||ao(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 co(s){return s._maxListeners===void 0?A.defaultMaxListeners:s._maxListeners}A.prototype.getMaxListeners=function(){return co(this)};A.prototype.emit=function(e){for(var t=[],r=1;r<arguments.length;r++)t.push(arguments[r]);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 o;if(t.length>0&&(o=t[0]),o instanceof Error)throw o;var a=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw a.context=o,a}var c=i[e];if(c===void 0)return!1;if(typeof c=="function")io(c,this,t);else for(var u=c.length,d=fo(c,u),r=0;r<u;++r)io(d[r],this,t);return!0};function uo(s,e,t,r){var n,i,o;if(Gr(t),i=s._events,i===void 0?(i=s._events=Object.create(null),s._eventsCount=0):(i.newListener!==void 0&&(s.emit("newListener",e,t.listener?t.listener:t),i=s._events),o=i[e]),o===void 0)o=i[e]=t,++s._eventsCount;else if(typeof o=="function"?o=i[e]=r?[t,o]:[o,t]:r?o.unshift(t):o.push(t),n=co(s),n>0&&o.length>n&&!o.warned){o.warned=!0;var a=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");a.name="MaxListenersExceededWarning",a.emitter=s,a.type=e,a.count=o.length,tu(a)}return s}A.prototype.addListener=function(e,t){return uo(this,e,t,!1)};A.prototype.on=A.prototype.addListener;A.prototype.prependListener=function(e,t){return uo(this,e,t,!0)};function ru(){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 lo(s,e,t){var r={fired:!1,wrapFn:void 0,target:s,type:e,listener:t},n=ru.bind(r);return n.listener=t,r.wrapFn=n,n}A.prototype.once=function(e,t){return Gr(t),this.on(e,lo(this,e,t)),this};A.prototype.prependOnceListener=function(e,t){return Gr(t),this.prependListener(e,lo(this,e,t)),this};A.prototype.removeListener=function(e,t){var r,n,i,o,a;if(Gr(t),n=this._events,n===void 0)return this;if(r=n[e],r===void 0)return this;if(r===t||r.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete n[e],n.removeListener&&this.emit("removeListener",e,r.listener||t));else if(typeof r!="function"){for(i=-1,o=r.length-1;o>=0;o--)if(r[o]===t||r[o].listener===t){a=r[o].listener,i=o;break}if(i<0)return this;i===0?r.shift():su(r,i),r.length===1&&(n[e]=r[0]),n.removeListener!==void 0&&this.emit("removeListener",e,a||t)}return this};A.prototype.off=A.prototype.removeListener;A.prototype.removeAllListeners=function(e){var t,r,n;if(r=this._events,r===void 0)return this;if(r.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):r[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete r[e]),this;if(arguments.length===0){var i=Object.keys(r),o;for(n=0;n<i.length;++n)o=i[n],o!=="removeListener"&&this.removeAllListeners(o);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(t=r[e],typeof t=="function")this.removeListener(e,t);else if(t!==void 0)for(n=t.length-1;n>=0;n--)this.removeListener(e,t[n]);return this};function po(s,e,t){var r=s._events;if(r===void 0)return[];var n=r[e];return n===void 0?[]:typeof n=="function"?t?[n.listener||n]:[n]:t?nu(n):fo(n,n.length)}A.prototype.listeners=function(e){return po(this,e,!0)};A.prototype.rawListeners=function(e){return po(this,e,!1)};A.listenerCount=function(s,e){return typeof s.listenerCount=="function"?s.listenerCount(e):ho.call(s,e)};A.prototype.listenerCount=ho;function ho(s){var e=this._events;if(e!==void 0){var t=e[s];if(typeof t=="function")return 1;if(t!==void 0)return t.length}return 0}A.prototype.eventNames=function(){return this._eventsCount>0?Vr(this._events):[]};function fo(s,e){for(var t=new Array(e),r=0;r<e;++r)t[r]=s[r];return t}function su(s,e){for(;e+1<s.length;e++)s[e]=s[e+1];s.pop()}function nu(s){for(var e=new Array(s.length),t=0;t<e.length;++t)e[t]=s[t].listener||s[t];return e}function iu(s,e){return new Promise(function(t,r){function n(o){s.removeListener(e,i),r(o)}function i(){typeof s.removeListener=="function"&&s.removeListener("error",n),t([].slice.call(arguments))}mo(s,e,i,{once:!0}),e!=="error"&&ou(s,n,{once:!0})})}function ou(s,e,t){typeof s.on=="function"&&mo(s,"error",e,t)}function mo(s,e,t,r){if(typeof s.on=="function")r.once?s.once(e,t):s.on(e,t);else if(typeof s.addEventListener=="function")s.addEventListener(e,function n(i){r.once&&s.removeEventListener(e,n),t(i)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof s)}});var ee=E(Kr=>{"use strict";Object.defineProperty(Kr,"__esModule",{value:!0});Kr.EnhancedEventEmitter=void 0;var au=go(),cu=K(),du=new cu.Logger("EnhancedEventEmitter"),tn=class extends au.EventEmitter{constructor(){super(),this.setMaxListeners(1/0)}close(){super.removeAllListeners()}emit(e,...t){return super.emit(e,...t)}safeEmit(e,...t){try{return super.emit(e,...t)}catch(r){du.error("safeEmit() | event listener threw an error [eventName:%s]:%o",e,r);try{super.emit("listenererror",e,r)}catch{}return!!super.listenerCount(e)}}on(e,t){return super.on(e,t),this}off(e,t){return super.off(e,t),this}addListener(e,t){return super.on(e,t),this}prependListener(e,t){return super.prependListener(e,t),this}once(e,t){return super.once(e,t),this}prependOnceListener(e,t){return super.prependOnceListener(e,t),this}removeListener(e,t){return super.off(e,t),this}removeAllListeners(e){return super.removeAllListeners(e),this}listenerCount(e){return super.listenerCount(e)}listeners(e){return super.listeners(e)}rawListeners(e){return super.rawListeners(e)}};Kr.EnhancedEventEmitter=tn});var ie=E(vt=>{"use strict";Object.defineProperty(vt,"__esModule",{value:!0});vt.InvalidStateError=vt.UnsupportedError=void 0;var rn=class s extends Error{constructor(e){super(e),this.name="UnsupportedError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,s):this.stack=new Error(e).stack}};vt.UnsupportedError=rn;var sn=class s extends Error{constructor(e){super(e),this.name="InvalidStateError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,s):this.stack=new Error(e).stack}};vt.InvalidStateError=sn});var Ge=E(nr=>{"use strict";Object.defineProperty(nr,"__esModule",{value:!0});nr.clone=uu;nr.generateRandomNumber=lu;nr.deepFreeze=_o;function uu(s){if(s!==void 0)return Number.isNaN(s)?NaN:typeof structuredClone=="function"?structuredClone(s):JSON.parse(JSON.stringify(s))}function lu(){return Math.round(Math.random()*1e7)}function _o(s){let e=Reflect.ownKeys(s);for(let t of e){let r=s[t];(r&&typeof r=="object"||typeof r=="function")&&_o(r)}return Object.freeze(s)}});var vo=E(Yr=>{"use strict";Object.defineProperty(Yr,"__esModule",{value:!0});Yr.Logger=void 0;var wt=sr(),yt="h264-profile-level-id",nn=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,wt.default)(`${yt}:${e}`),this._warn=(0,wt.default)(`${yt}:WARN:${e}`),this._error=(0,wt.default)(`${yt}:ERROR:${e}`)):(this._debug=(0,wt.default)(yt),this._warn=(0,wt.default)(`${yt}:WARN`),this._error=(0,wt.default)(`${yt}: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}};Yr.Logger=nn});var Ro=E(W=>{"use strict";Object.defineProperty(W,"__esModule",{value:!0});W.ProfileLevelId=W.Level=W.Profile=void 0;W.parseProfileLevelId=So;W.profileLevelIdToString=To;W.profileToString=mu;W.levelToString=gu;W.parseSdpProfileLevelId=Ke;W.isSameProfile=_u;W.isSameProfileAndLevel=vu;W.generateProfileLevelIdStringForAnswer=wu;W.supportedLevel=yu;var pu=vo(),pe=new pu.Logger,M;(function(s){s[s.ConstrainedBaseline=1]="ConstrainedBaseline",s[s.Baseline=2]="Baseline",s[s.Main=3]="Main",s[s.ConstrainedHigh=4]="ConstrainedHigh",s[s.High=5]="High",s[s.PredictiveHigh444=6]="PredictiveHigh444"})(M||(W.Profile=M={}));var b;(function(s){s[s.L1_b=0]="L1_b",s[s.L1=10]="L1",s[s.L1_1=11]="L1_1",s[s.L1_2=12]="L1_2",s[s.L1_3=13]="L1_3",s[s.L2=20]="L2",s[s.L2_1=21]="L2_1",s[s.L2_2=22]="L2_2",s[s.L3=30]="L3",s[s.L3_1=31]="L3_1",s[s.L3_2=32]="L3_2",s[s.L4=40]="L4",s[s.L4_1=41]="L4_1",s[s.L4_2=42]="L4_2",s[s.L5=50]="L5",s[s.L5_1=51]="L5_1",s[s.L5_2=52]="L5_2"})(b||(W.Level=b={}));var bt=class{profile;level;constructor(e,t){this.profile=e,this.level=t}};W.ProfileLevelId=bt;var hu=new bt(M.ConstrainedBaseline,b.L3_1),ue=class{mask;masked_value;constructor(e){this.mask=~yo("x",e),this.masked_value=yo("1",e)}isMatch(e){return this.masked_value===(e&this.mask)}},le=class{profile_idc;profile_iop;profile;constructor(e,t,r){this.profile_idc=e,this.profile_iop=t,this.profile=r}},fu=[new le(66,new ue("x1xx0000"),M.ConstrainedBaseline),new le(77,new ue("1xxx0000"),M.ConstrainedBaseline),new le(88,new ue("11xx0000"),M.ConstrainedBaseline),new le(66,new ue("x0xx0000"),M.Baseline),new le(88,new ue("10xx0000"),M.Baseline),new le(77,new ue("0x0x0000"),M.Main),new le(100,new ue("00000000"),M.High),new le(100,new ue("00001100"),M.ConstrainedHigh),new le(244,new ue("00000000"),M.PredictiveHigh444)],wo=[{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:b.L1},{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:b.L1_b},{max_macroblocks_per_second:3e3,max_macroblock_frame_size:396,level:b.L1_1},{max_macroblocks_per_second:6e3,max_macroblock_frame_size:396,level:b.L1_2},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:b.L1_3},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:b.L2},{max_macroblocks_per_second:19800,max_macroblock_frame_size:792,level:b.L2_1},{max_macroblocks_per_second:20250,max_macroblock_frame_size:1620,level:b.L2_2},{max_macroblocks_per_second:40500,max_macroblock_frame_size:1620,level:b.L3},{max_macroblocks_per_second:108e3,max_macroblock_frame_size:3600,level:b.L3_1},{max_macroblocks_per_second:216e3,max_macroblock_frame_size:5120,level:b.L3_2},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:b.L4},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:b.L4_1},{max_macroblocks_per_second:522240,max_macroblock_frame_size:8704,level:b.L4_2},{max_macroblocks_per_second:589824,max_macroblock_frame_size:22080,level:b.L5},{max_macroblocks_per_second:983040,max_macroblock_frame_size:36864,level:b.L5_1},{max_macroblocks_per_second:2073600,max_macroblock_frame_size:36864,level:b.L5_2}];function So(s){if(typeof s!="string"||s.length!==6)return;let t=parseInt(s,16);if(t===0)return;let r=t&255,n=t>>8&255,i=t>>16&255,o;switch(r){case b.L1_1:{o=(n&16)!==0?b.L1_b:b.L1_1;break}case b.L1:case b.L1_2:case b.L1_3:case b.L2:case b.L2_1:case b.L2_2:case b.L3:case b.L3_1:case b.L3_2:case b.L4:case b.L4_1:case b.L4_2:case b.L5:case b.L5_1:case b.L5_2:{o=r;break}default:{pe.warn(`parseProfileLevelId() | unrecognized level_idc [str:${s}, level_idc:${r}]`);return}}for(let a of fu)if(i===a.profile_idc&&a.profile_iop.isMatch(n))return pe.debug(`parseProfileLevelId() | result [str:${s}, profile:${a.profile}, level:${o}]`),new bt(a.profile,o);pe.warn(`parseProfileLevelId() | unrecognized profile_idc/profile_iop combination [str:${s}, profile_idc:${i}, profile_iop:${n}]`)}function To(s){if(s.level==b.L1_b)switch(s.profile){case M.ConstrainedBaseline:return"42f00b";case M.Baseline:return"42100b";case M.Main:return"4d100b";default:{pe.warn(`profileLevelIdToString() | Level 1_b not is allowed for profile ${s.profile}`);return}}let e;switch(s.profile){case M.ConstrainedBaseline:{e="42e0";break}case M.Baseline:{e="4200";break}case M.Main:{e="4d00";break}case M.ConstrainedHigh:{e="640c";break}case M.High:{e="6400";break}case M.PredictiveHigh444:{e="f400";break}default:{pe.warn(`profileLevelIdToString() | unrecognized profile ${s.profile}`);return}}let t=s.level.toString(16);return t.length===1&&(t=`0${t}`),`${e}${t}`}function mu(s){switch(s){case M.ConstrainedBaseline:return"ConstrainedBaseline";case M.Baseline:return"Baseline";case M.Main:return"Main";case M.ConstrainedHigh:return"ConstrainedHigh";case M.High:return"High";case M.PredictiveHigh444:return"PredictiveHigh444";default:{pe.warn(`profileToString() | unrecognized profile ${s}`);return}}}function gu(s){switch(s){case b.L1_b:return"1b";case b.L1:return"1";case b.L1_1:return"1.1";case b.L1_2:return"1.2";case b.L1_3:return"1.3";case b.L2:return"2";case b.L2_1:return"2.1";case b.L2_2:return"2.2";case b.L3:return"3";case b.L3_1:return"3.1";case b.L3_2:return"3.2";case b.L4:return"4";case b.L4_1:return"4.1";case b.L4_2:return"4.2";case b.L5:return"5";case b.L5_1:return"5.1";case b.L5_2:return"5.2";default:{pe.warn(`levelToString() | unrecognized level ${s}`);return}}}function Ke(s={}){let e=s["profile-level-id"];return e?So(e):hu}function _u(s={},e={}){let t=Ke(s),r=Ke(e);return!!(t&&r&&t.profile===r.profile)}function vu(s={},e={}){let t=Ke(s),r=Ke(e);return!!(t&&r&&t.profile===r.profile&&t.level==r.level)}function wu(s={},e={}){if(!s["profile-level-id"]&&!e["profile-level-id"]){pe.warn("generateProfileLevelIdStringForAnswer() | profile-level-id missing in local and remote params");return}let t=Ke(s),r=Ke(e);if(!t)throw new TypeError("invalid local_profile_level_id");if(!r)throw new TypeError("invalid remote_profile_level_id");if(t.profile!==r.profile)throw new TypeError("H264 Profile mismatch");let n=bo(s)&&bo(e),i=t.level,o=r.level,a=Su(i,o),c=n?i:a;return pe.debug(`generateProfileLevelIdStringForAnswer() | result [profile:${t.profile}, level:${c}]`),To(new bt(t.profile,c))}function yu(s,e){for(let r=wo.length-1;r>=0;--r){let n=wo[r];if(n.max_macroblock_frame_size*256<=s&&n.max_macroblocks_per_second<=e*n.max_macroblock_frame_size)return pe.debug(`supportedLevel() | result [max_frame_pixel_count:${s}, max_fps:${e}, level:${n.level}]`),n.level}pe.warn(`supportedLevel() | no level supported [max_frame_pixel_count:${s}, max_fps:${e}]`)}function yo(s,e){return+(e[0]===s)<<7|+(e[1]===s)<<6|+(e[2]===s)<<5|+(e[3]===s)<<4|+(e[4]===s)<<3|+(e[5]===s)<<2|+(e[6]===s)<<1|+(e[7]===s)<<0}function bu(s,e){return s===b.L1_b?e!==b.L1&&e!==b.L1_b:e===b.L1_b?s!==b.L1:s<e}function Su(s,e){return bu(s,e)?s:e}function bo(s={}){let e=s["level-asymmetry-allowed"];return e===!0||e===1||e==="1"}});var ge=E(Y=>{"use strict";Object.defineProperty(Y,"__esModule",{value:!0});Y.validateAndNormalizeRtpCapabilities=Eu;Y.validateAndNormalizeRtpParameters=an;Y.validateAndNormalizeSctpStreamParameters=Pu;Y.validateSctpCapabilities=xu;Y.getExtendedRtpCapabilities=Iu;Y.getRecvRtpCapabilities=Du;Y.getSendRtpCapabilities=Au;Y.getSendingRtpParameters=Mu;Y.getSendingRemoteRtpParameters=Lu;Y.reduceCodecs=Ou;Y.generateProbatorRtpParameters=Nu;Y.canSend=Fu;Y.canReceive=ju;var Co=Ro(),Tu=Ge(),Ru="probator",Cu=1234,ku=127;function Eu(s){if(typeof s!="object")throw new TypeError("caps is not an object");if(s.codecs&&!Array.isArray(s.codecs))throw new TypeError("caps.codecs is not an array");s.codecs||(s.codecs=[]);for(let e of s.codecs)Uu(e);if(s.headerExtensions&&!Array.isArray(s.headerExtensions))throw new TypeError("caps.headerExtensions is not an array");s.headerExtensions||(s.headerExtensions=[]);for(let e of s.headerExtensions)qu(e)}function an(s){if(typeof s!="object")throw new TypeError("params is not an object");if(s.mid&&typeof s.mid!="string")throw new TypeError("params.mid is not a string");if(!Array.isArray(s.codecs))throw new TypeError("missing params.codecs");for(let e of s.codecs)$u(e);if(s.headerExtensions&&!Array.isArray(s.headerExtensions))throw new TypeError("params.headerExtensions is not an array");s.headerExtensions||(s.headerExtensions=[]);for(let e of s.headerExtensions)Wu(e);if(s.encodings&&!Array.isArray(s.encodings))throw new TypeError("params.encodings is not an array");s.encodings||(s.encodings=[]);for(let e of s.encodings)Bu(e);if(s.rtcp&&typeof s.rtcp!="object")throw new TypeError("params.rtcp is not an object");s.rtcp||(s.rtcp={}),zu(s.rtcp)}function Pu(s){if(typeof s!="object")throw new TypeError("params is not an object");if(typeof s.streamId!="number")throw new TypeError("missing params.streamId");let e=!1;if(typeof s.ordered=="boolean"?e=!0:s.ordered=!0,s.maxPacketLifeTime&&typeof s.maxPacketLifeTime!="number")throw new TypeError("invalid params.maxPacketLifeTime");if(s.maxRetransmits&&typeof s.maxRetransmits!="number")throw new TypeError("invalid params.maxRetransmits");if(s.maxPacketLifeTime&&s.maxRetransmits)throw new TypeError("cannot provide both maxPacketLifeTime and maxRetransmits");if(e&&s.ordered&&(s.maxPacketLifeTime||s.maxRetransmits))throw new TypeError("cannot be ordered with maxPacketLifeTime or maxRetransmits");if(!e&&(s.maxPacketLifeTime||s.maxRetransmits)&&(s.ordered=!1),s.label&&typeof s.label!="string")throw new TypeError("invalid params.label");if(s.protocol&&typeof s.protocol!="string")throw new TypeError("invalid params.protocol")}function xu(s){if(typeof s!="object")throw new TypeError("caps is not an object");if(!s.numStreams||typeof s.numStreams!="object")throw new TypeError("missing caps.numStreams");Hu(s.numStreams)}function Iu(s,e,t){let r={codecs:[],headerExtensions:[]};if(t)for(let n of s.codecs??[]){if(St(n))continue;let i=(e.codecs??[]).find(a=>on(a,n,{strict:!0,modify:!0}));if(!i)continue;let o={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:ko(n,i)};r.codecs.push(o)}else for(let n of e.codecs??[]){if(St(n))continue;let i=(s.codecs??[]).find(a=>on(a,n,{strict:!0,modify:!0}));if(!i)continue;let o={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:ko(i,n)};r.codecs.push(o)}for(let n of r.codecs){let i=s.codecs.find(a=>St(a)&&a.parameters?.apt===n.localPayloadType),o=e.codecs.find(a=>St(a)&&a.parameters?.apt===n.remotePayloadType);i&&o&&(n.localRtxPayloadType=i.preferredPayloadType,n.remoteRtxPayloadType=o.preferredPayloadType)}for(let n of e.headerExtensions){let i=s.headerExtensions.find(a=>Vu(a,n));if(!i)continue;let o={kind:n.kind,uri:n.uri,sendId:i.preferredId,recvId:n.preferredId,encrypt:i.preferredEncrypt??!1,direction:"sendrecv"};switch(n.direction){case"sendrecv":{o.direction="sendrecv";break}case"recvonly":{o.direction="sendonly";break}case"sendonly":{o.direction="recvonly";break}case"inactive":{o.direction="inactive";break}}r.headerExtensions.push(o)}return r}function Du(s){return Po({direction:"recvonly",extendedRtpCapabilities:s})}function Au(s){return Po({direction:"sendonly",extendedRtpCapabilities:s})}function Mu(s,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let r of e.codecs){if(r.kind!==s)continue;let n={mimeType:r.mimeType,payloadType:r.localPayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.localParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(n),r.localRtxPayloadType){let i={mimeType:`${r.kind}/rtx`,payloadType:r.localRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.localPayloadType},rtcpFeedback:[]};t.codecs.push(i)}}for(let r of e.headerExtensions){if(r.kind&&r.kind!==s||r.direction!=="sendrecv"&&r.direction!=="sendonly")continue;let n={uri:r.uri,id:r.sendId,encrypt:r.encrypt,parameters:{}};t.headerExtensions.push(n)}return t}function Lu(s,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let r of e.codecs){if(r.kind!==s)continue;let n={mimeType:r.mimeType,payloadType:r.localPayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.remoteParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(n),r.localRtxPayloadType){let i={mimeType:`${r.kind}/rtx`,payloadType:r.localRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.localPayloadType},rtcpFeedback:[]};t.codecs.push(i)}}for(let r of e.headerExtensions){if(r.kind&&r.kind!==s||r.direction!=="sendrecv"&&r.direction!=="sendonly")continue;let n={uri:r.uri,id:r.sendId,encrypt:r.encrypt,parameters:{}};t.headerExtensions.push(n)}if(t.headerExtensions.some(r=>r.uri==="http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"))for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(n=>n.type!=="goog-remb");else if(t.headerExtensions.some(r=>r.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"))for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(n=>n.type!=="transport-cc");else for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(n=>n.type!=="transport-cc"&&n.type!=="goog-remb");return t}function Ou(s,e){let t=[];if(!e)t.push(s[0]),St(s[1])&&t.push(s[1]);else{for(let r=0;r<s.length;++r)if(on(s[r],e,{strict:!0})){t.push(s[r]),St(s[r+1])&&t.push(s[r+1]);break}if(t.length===0)throw new TypeError("no matching codec found")}return t}function Nu(s){s=Tu.clone(s),an(s);let e={mid:Ru,codecs:[],headerExtensions:[],encodings:[{ssrc:Cu}],rtcp:{cname:"probator"}};return e.codecs.push(s.codecs[0]),e.codecs[0].payloadType=ku,e.headerExtensions=s.headerExtensions,e}function Fu(s,e){return(e.codecs??[]).some(t=>t.kind===s)}function ju(s,e){if(an(s),s.codecs.length===0)return!1;let t=s.codecs[0];return(e.codecs??[]).some(r=>r.preferredPayloadType===t.payloadType)}function Uu(s){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof s!="object")throw new TypeError("codec is not an object");if(!s.mimeType||typeof s.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(s.kind=t[1].toLowerCase(),typeof s.preferredPayloadType!="number")throw new TypeError("missing codec.preferredPayloadType");if(typeof s.clockRate!="number")throw new TypeError("missing codec.clockRate");s.kind==="audio"?typeof s.channels!="number"&&(s.channels=1):delete s.channels,(!s.parameters||typeof s.parameters!="object")&&(s.parameters={});for(let r of Object.keys(s.parameters)){let n=s.parameters[r];if(n===void 0&&(s.parameters[r]="",n=""),typeof n!="string"&&typeof n!="number")throw new TypeError(`invalid codec parameter [key:${r}s, value:${n}]`);if(r==="apt"&&typeof n!="number")throw new TypeError("invalid codec apt parameter")}(!s.rtcpFeedback||!Array.isArray(s.rtcpFeedback))&&(s.rtcpFeedback=[]);for(let r of s.rtcpFeedback)Eo(r)}function Eo(s){if(typeof s!="object")throw new TypeError("fb is not an object");if(!s.type||typeof s.type!="string")throw new TypeError("missing fb.type");(!s.parameter||typeof s.parameter!="string")&&(s.parameter="")}function qu(s){if(typeof s!="object")throw new TypeError("ext is not an object");if(s.kind!=="audio"&&s.kind!=="video")throw new TypeError("invalid ext.kind");if(!s.uri||typeof s.uri!="string")throw new TypeError("missing ext.uri");if(typeof s.preferredId!="number")throw new TypeError("missing ext.preferredId");if(s.preferredEncrypt&&typeof s.preferredEncrypt!="boolean")throw new TypeError("invalid ext.preferredEncrypt");if(s.preferredEncrypt||(s.preferredEncrypt=!1),s.direction&&typeof s.direction!="string")throw new TypeError("invalid ext.direction");s.direction||(s.direction="sendrecv")}function $u(s){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof s!="object")throw new TypeError("codec is not an object");if(!s.mimeType||typeof s.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(typeof s.payloadType!="number")throw new TypeError("missing codec.payloadType");if(typeof s.clockRate!="number")throw new TypeError("missing codec.clockRate");t[1].toLowerCase()==="audio"?typeof s.channels!="number"&&(s.channels=1):delete s.channels,(!s.parameters||typeof s.parameters!="object")&&(s.parameters={});for(let n of Object.keys(s.parameters)){let i=s.parameters[n];if(i===void 0&&(s.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")}(!s.rtcpFeedback||!Array.isArray(s.rtcpFeedback))&&(s.rtcpFeedback=[]);for(let n of s.rtcpFeedback)Eo(n)}function Wu(s){if(typeof s!="object")throw new TypeError("ext is not an object");if(!s.uri||typeof s.uri!="string")throw new TypeError("missing ext.uri");if(typeof s.id!="number")throw new TypeError("missing ext.id");if(s.encrypt&&typeof s.encrypt!="boolean")throw new TypeError("invalid ext.encrypt");s.encrypt||(s.encrypt=!1),(!s.parameters||typeof s.parameters!="object")&&(s.parameters={});for(let e of Object.keys(s.parameters)){let t=s.parameters[e];if(t===void 0&&(s.parameters[e]="",t=""),typeof t!="string"&&typeof t!="number")throw new TypeError("invalid header extension parameter")}}function Bu(s){if(typeof s!="object")throw new TypeError("encoding is not an object");if(s.ssrc&&typeof s.ssrc!="number")throw new TypeError("invalid encoding.ssrc");if(s.rid&&typeof s.rid!="string")throw new TypeError("invalid encoding.rid");if(s.rtx&&typeof s.rtx!="object")throw new TypeError("invalid encoding.rtx");if(s.rtx&&typeof s.rtx.ssrc!="number")throw new TypeError("missing encoding.rtx.ssrc");if((!s.dtx||typeof s.dtx!="boolean")&&(s.dtx=!1),s.scalabilityMode&&typeof s.scalabilityMode!="string")throw new TypeError("invalid encoding.scalabilityMode")}function zu(s){if(typeof s!="object")throw new TypeError("rtcp is not an object");if(s.cname&&typeof s.cname!="string")throw new TypeError("invalid rtcp.cname");(!s.reducedSize||typeof s.reducedSize!="boolean")&&(s.reducedSize=!0)}function Hu(s){if(typeof s!="object")throw new TypeError("numStreams is not an object");if(typeof s.OS!="number")throw new TypeError("missing numStreams.OS");if(typeof s.MIS!="number")throw new TypeError("missing numStreams.MIS")}function Po({direction:s,extendedRtpCapabilities:e}){let t={codecs:[],headerExtensions:[]};for(let r of e.codecs){let n={kind:r.kind,mimeType:r.mimeType,preferredPayloadType:r.remotePayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.localParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(n),!r.remoteRtxPayloadType)continue;let i={kind:r.kind,mimeType:`${r.kind}/rtx`,preferredPayloadType:r.remoteRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.remotePayloadType},rtcpFeedback:[]};t.codecs.push(i)}for(let r of e.headerExtensions){if(r.direction!=="sendrecv"&&r.direction!==s)continue;let n={kind:r.kind,uri:r.uri,preferredId:r.recvId,preferredEncrypt:r.encrypt??!1,direction:r.direction};t.headerExtensions.push(n)}return t}function St(s){return s?/.+\/rtx$/i.test(s.mimeType):!1}function on(s,e,{strict:t=!1,modify:r=!1}={}){let n=s.mimeType.toLowerCase(),i=e.mimeType.toLowerCase();if(n!==i||s.clockRate!==e.clockRate||s.channels!==e.channels)return!1;switch(n){case"video/h264":{if(t){let o=s.parameters["packetization-mode"]??0,a=e.parameters["packetization-mode"]??0;if(o!==a||!Co.isSameProfile(s.parameters,e.parameters))return!1;let c;try{c=Co.generateProfileLevelIdStringForAnswer(s.parameters,e.parameters)}catch{return!1}r&&(c?(s.parameters["profile-level-id"]=c,e.parameters["profile-level-id"]=c):(delete s.parameters["profile-level-id"],delete e.parameters["profile-level-id"]))}break}case"video/vp9":{if(t){let o=s.parameters["profile-id"]??0,a=e.parameters["profile-id"]??0;if(o!==a)return!1}break}}return!0}function Vu(s,e){return!(s.kind&&e.kind&&s.kind!==e.kind||s.uri!==e.uri)}function ko(s,e){let t=[];for(let r of s.rtcpFeedback??[]){let n=(e.rtcpFeedback??[]).find(i=>i.type===r.type&&(i.parameter===r.parameter||!i.parameter&&!r.parameter));n&&t.push(n)}return t}});var xo=E(Qr=>{"use strict";Object.defineProperty(Qr,"__esModule",{value:!0});Qr.Logger=void 0;var Tt=sr(),Rt="awaitqueue",cn=class{_debug;_warn;_error;constructor(e){e?(this._debug=Tt(`${Rt}:${e}`),this._warn=Tt(`${Rt}:WARN:${e}`),this._error=Tt(`${Rt}:ERROR:${e}`)):(this._debug=Tt(Rt),this._warn=Tt(`${Rt}:WARN`),this._error=Tt(`${Rt}: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}};Qr.Logger=cn});var ln=E(Ct=>{"use strict";Object.defineProperty(Ct,"__esModule",{value:!0});Ct.AwaitQueueRemovedTaskError=Ct.AwaitQueueStoppedError=void 0;var dn=class s extends Error{constructor(e){super(e??"queue stopped"),this.name="AwaitQueueStoppedError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,s)}};Ct.AwaitQueueStoppedError=dn;var un=class s extends Error{constructor(e){super(e??"queue task removed"),this.name="AwaitQueueRemovedTaskError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,s)}};Ct.AwaitQueueRemovedTaskError=un});var Io=E(Jr=>{"use strict";Object.defineProperty(Jr,"__esModule",{value:!0});Jr.AwaitQueue=void 0;var Gu=xo(),pn=ln(),Te=new Gu.Logger("AwaitQueue"),hn=class{pendingTasks=new Map;nextTaskId=0;constructor(){Te.debug("constructor()")}get size(){return this.pendingTasks.size}async push(e,t,r){if(t=t??e.name,Te.debug(`push() [name:${t}, options:%o]`,r),typeof e!="function")throw new TypeError("given task is not a function");if(t)try{Object.defineProperty(e,"name",{value:t})}catch{}return new Promise((n,i)=>{if(t&&r?.removeOngoingTasksWithSameName)for(let a of this.pendingTasks.values())a.name===t&&a.reject(new pn.AwaitQueueRemovedTaskError,{canExecuteNextTask:!1});let o={id:this.nextTaskId++,task:e,name:t,enqueuedAt:Date.now(),executedAt:void 0,completed:!1,resolve:a=>{if(o.completed)return;o.completed=!0,this.pendingTasks.delete(o.id),Te.debug(`resolving task [name:${o.name}]`),n(a);let[c]=this.pendingTasks.values();c&&!c.executedAt&&this.execute(c)},reject:(a,{canExecuteNextTask:c})=>{if(!o.completed&&(o.completed=!0,this.pendingTasks.delete(o.id),Te.debug(`rejecting task [name:${o.name}]: %s`,String(a)),i(a),c)){let[u]=this.pendingTasks.values();u&&!u.executedAt&&this.execute(u)}}};this.pendingTasks.set(o.id,o),this.pendingTasks.size===1&&this.execute(o)})}stop(){Te.debug("stop()");for(let e of this.pendingTasks.values())Te.debug(`stop() | stopping task [name:${e.name}]`),e.reject(new pn.AwaitQueueStoppedError,{canExecuteNextTask:!1})}remove(e){Te.debug(`remove() [taskIdx:${e}]`);let t=Array.from(this.pendingTasks.values())[e];if(!t){Te.debug(`stop() | no task with given idx [taskIdx:${e}]`);return}t.reject(new pn.AwaitQueueRemovedTaskError,{canExecuteNextTask:!0})}dump(){let e=Date.now(),t=0;return Array.from(this.pendingTasks.values()).map(r=>({idx:t++,task:r.task,name:r.name,enqueuedTime:r.executedAt?r.executedAt-r.enqueuedAt:e-r.enqueuedAt,executionTime:r.executedAt?e-r.executedAt:0}))}async execute(e){if(Te.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})}}};Jr.AwaitQueue=hn});var Ao=E(Ne=>{"use strict";Object.defineProperty(Ne,"__esModule",{value:!0});Ne.AwaitQueueRemovedTaskError=Ne.AwaitQueueStoppedError=Ne.AwaitQueue=void 0;var Ku=Io();Object.defineProperty(Ne,"AwaitQueue",{enumerable:!0,get:function(){return Ku.AwaitQueue}});var Do=ln();Object.defineProperty(Ne,"AwaitQueueStoppedError",{enumerable:!0,get:function(){return Do.AwaitQueueStoppedError}});Object.defineProperty(Ne,"AwaitQueueRemovedTaskError",{enumerable:!0,get:function(){return Do.AwaitQueueRemovedTaskError}})});var Lo=E(Xr=>{"use strict";Object.defineProperty(Xr,"__esModule",{value:!0});Xr.Producer=void 0;var Yu=K(),Mo=ee(),kt=ie(),_e=new Yu.Logger("Producer"),fn=class extends Mo.EnhancedEventEmitter{_id;_localId;_closed=!1;_rtpSender;_track;_kind;_rtpParameters;_paused;_maxSpatialLayer;_stopTracks;_disableTrackOnPause;_zeroRtpOnPause;_appData;_observer=new Mo.EnhancedEventEmitter;constructor({id:e,localId:t,rtpSender:r,track:n,rtpParameters:i,stopTracks:o,disableTrackOnPause:a,zeroRtpOnPause:c,appData:u}){super(),_e.debug("constructor()"),this._id=e,this._localId=t,this._rtpSender=r,this._track=n,this._kind=n.kind,this._rtpParameters=i,this._paused=a?!n.enabled:!1,this._maxSpatialLayer=void 0,this._stopTracks=o,this._disableTrackOnPause=a,this._zeroRtpOnPause=c,this._appData=u??{},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||(_e.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(_e.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new kt.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(_e.debug("pause()"),this._closed){_e.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(_e.debug("resume()"),this._closed){_e.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(_e.debug("replaceTrack() [track:%o]",e),this._closed){if(e&&this._stopTracks)try{e.stop()}catch{}throw new kt.InvalidStateError("closed")}else if(e?.readyState==="ended")throw new kt.InvalidStateError("track ended");if(e===this._track){_e.debug("replaceTrack() | same track, ignored");return}await new Promise((t,r)=>{this.safeEmit("@replacetrack",e,t,r)}),this.destroyTrack(),this._track=e,this._track&&this._disableTrackOnPause&&(this._paused?this._paused&&(this._track.enabled=!1):this._track.enabled=!0),this.handleTrack()}async setMaxSpatialLayer(e){if(this._closed)throw new kt.InvalidStateError("closed");if(this._kind!=="video")throw new kt.UnsupportedError("not a video Producer");if(typeof e!="number")throw new TypeError("invalid spatialLayer");e!==this._maxSpatialLayer&&(await new Promise((t,r)=>{this.safeEmit("@setmaxspatiallayer",e,t,r)}).catch(()=>{}),this._maxSpatialLayer=e)}async setRtpEncodingParameters(e){if(this._closed)throw new kt.InvalidStateError("closed");if(typeof e!="object")throw new TypeError("invalid params");await new Promise((t,r)=>{this.safeEmit("@setrtpencodingparameters",e,t,r)})}onTrackEnded(){_e.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{}}};Xr.Producer=fn});var No=E(Zr=>{"use strict";Object.defineProperty(Zr,"__esModule",{value:!0});Zr.Consumer=void 0;var Qu=K(),Oo=ee(),Ju=ie(),ve=new Qu.Logger("Consumer"),mn=class extends Oo.EnhancedEventEmitter{_id;_localId;_producerId;_closed=!1;_rtpReceiver;_track;_rtpParameters;_paused;_appData;_observer=new Oo.EnhancedEventEmitter;constructor({id:e,localId:t,producerId:r,rtpReceiver:n,track:i,rtpParameters:o,appData:a}){super(),ve.debug("constructor()"),this._id=e,this._localId=t,this._producerId=r,this._rtpReceiver=n,this._track=i,this._rtpParameters=o,this._paused=!i.enabled,this._appData=a??{},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||(ve.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(ve.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new Ju.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(ve.debug("pause()"),this._closed){ve.error("pause() | Consumer closed");return}if(this._paused){ve.debug("pause() | Consumer is already paused");return}this._paused=!0,this._track.enabled=!1,this.emit("@pause"),this._observer.safeEmit("pause")}resume(){if(ve.debug("resume()"),this._closed){ve.error("resume() | Consumer closed");return}if(!this._paused){ve.debug("resume() | Consumer is already resumed");return}this._paused=!1,this._track.enabled=!0,this.emit("@resume"),this._observer.safeEmit("resume")}onTrackEnded(){ve.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{}}};Zr.Consumer=mn});var jo=E(es=>{"use strict";Object.defineProperty(es,"__esModule",{value:!0});es.DataProducer=void 0;var Xu=K(),Fo=ee(),Zu=ie(),Re=new Xu.Logger("DataProducer"),gn=class extends Fo.EnhancedEventEmitter{_id;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new Fo.EnhancedEventEmitter;constructor({id:e,dataChannel:t,sctpStreamParameters:r,appData:n}){super(),Re.debug("constructor()"),this._id=e,this._dataChannel=t,this._sctpStreamParameters=r,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||(Re.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(Re.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}send(e){if(Re.debug("send()"),this._closed)throw new Zu.InvalidStateError("closed");this._dataChannel.send(e)}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(Re.debug('DataChannel "open" event'),this.safeEmit("open"))}),this._dataChannel.addEventListener("error",e=>{if(this._closed)return;let t=e.error??new Error("unknown DataChannel error");e.error?.errorDetail==="sctp-failure"?Re.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):Re.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(Re.warn('DataChannel "close" event'),this._closed=!0,this.emit("@close"),this.safeEmit("close"),this._observer.safeEmit("close"))}),this._dataChannel.addEventListener("message",()=>{this._closed||Re.warn('DataChannel "message" event in a DataProducer, message discarded')}),this._dataChannel.addEventListener("bufferedamountlow",()=>{this._closed||this.safeEmit("bufferedamountlow")})}};es.DataProducer=gn});var qo=E(ts=>{"use strict";Object.defineProperty(ts,"__esModule",{value:!0});ts.DataConsumer=void 0;var el=K(),Uo=ee(),Ye=new el.Logger("DataConsumer"),_n=class extends Uo.EnhancedEventEmitter{_id;_dataProducerId;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new Uo.EnhancedEventEmitter;constructor({id:e,dataProducerId:t,dataChannel:r,sctpStreamParameters:n,appData:i}){super(),Ye.debug("constructor()"),this._id=e,this._dataProducerId=t,this._dataChannel=r,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||(Ye.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(Ye.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(Ye.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"?Ye.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):Ye.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(Ye.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)})}};ts.DataConsumer=_n});var Wo=E(rs=>{"use strict";Object.defineProperty(rs,"__esModule",{value:!0});rs.Transport=void 0;var tl=Ao(),rl=K(),$o=ee(),j=ie(),vn=Ge(),ir=ge(),sl=Lo(),nl=No(),il=jo(),ol=qo(),F=new rl.Logger("Transport"),wn=class{consumerOptions;promise;resolve;reject;constructor(e){this.consumerOptions=e,this.promise=new Promise((t,r)=>{this.resolve=t,this.reject=r})}},yn=class extends $o.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 tl.AwaitQueue;_pendingConsumerTasks=[];_consumerCreationInProgress=!1;_pendingPauseConsumers=new Map;_consumerPauseInProgress=!1;_pendingResumeConsumers=new Map;_consumerResumeInProgress=!1;_pendingCloseConsumers=new Map;_consumerCloseInProgress=!1;_observer=new $o.EnhancedEventEmitter;constructor({direction:e,id:t,iceParameters:r,iceCandidates:n,dtlsParameters:i,sctpParameters:o,iceServers:a,iceTransportPolicy:c,additionalSettings:u,appData:d,handlerFactory:l,getSendExtendedRtpCapabilities:p,recvRtpCapabilities:m,canProduceByKind:h}){super(),F.debug("constructor() [id:%s, direction:%s]",t,e),this._id=t,this._direction=e,this._getSendExtendedRtpCapabilities=p,this._recvRtpCapabilities=m,this._canProduceByKind=h,this._maxSctpMessageSize=o?.maxMessageSize;let f=vn.clone(u)??{};delete f.iceServers,delete f.iceTransportPolicy,delete f.bundlePolicy,delete f.rtcpMuxPolicy,this._handler=l.factory({direction:e,iceParameters:r,iceCandidates:n,dtlsParameters:i,sctpParameters:o,iceServers:a,iceTransportPolicy:c,additionalSettings:f,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){F.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 j.InvalidStateError("closed");return this._handler.getTransportStats()}async restartIce({iceParameters:e}){if(F.debug("restartIce()"),this._closed)throw new j.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(F.debug("updateIceServers()"),this._closed)throw new j.InvalidStateError("closed");if(!Array.isArray(e))throw new TypeError("missing iceServers");return this._awaitQueue.push(async()=>this._handler.updateIceServers(e),"transport.updateIceServers()")}async produce({track:e,streamId:t,encodings:r,codecOptions:n,headerExtensionOptions:i,codec:o,stopTracks:a=!0,disableTrackOnPause:c=!0,zeroRtpOnPause:u=!1,onRtpSender:d,appData:l={}}={}){if(F.debug("produce() [track:%o]",e),this._closed)throw new j.InvalidStateError("closed");if(e){if(this._direction!=="send")throw new j.UnsupportedError("not a sending Transport");if(this._canProduceByKind[e.kind]){if(e.readyState==="ended")throw new j.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 j.UnsupportedError(`cannot produce ${e.kind}`)}else throw new TypeError("missing track");return this._awaitQueue.push(async()=>{let p;if(r&&!Array.isArray(r))throw TypeError("encodings must be an array");r?.length===0?p=void 0:r&&(p=r.map(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:h,rtpSender:f}=await this._handler.send({track:e,streamId:t,encodings:p,codecOptions:n,headerExtensionOptions:i,codec:o,onRtpSender:d});try{ir.validateAndNormalizeRtpParameters(h);let{id:g}=await new Promise((y,k)=>{this.safeEmit("produce",{kind:e.kind,rtpParameters:h,appData:l},y,k)}),v=new sl.Producer({id:g,localId:m,rtpSender:f,track:e,rtpParameters:h,stopTracks:a,disableTrackOnPause:c,zeroRtpOnPause:u,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(p=>{if(a)try{e.stop()}catch{}throw p})}async consume({id:e,producerId:t,kind:r,rtpParameters:n,streamId:i,onRtpReceiver:o,appData:a={}}){if(F.debug("consume()"),this._closed)throw new j.InvalidStateError("closed");if(this._direction!=="recv")throw new j.UnsupportedError("not a receiving Transport");if(typeof e!="string")throw new TypeError("missing id");if(typeof t!="string")throw new TypeError("missing producerId");if(r!=="audio"&&r!=="video")throw new TypeError(`invalid kind '${r}'`);if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(a&&typeof a!="object")throw new TypeError("if given, appData must be an object");let c=vn.clone(n);if(!ir.canReceive(c,this._recvRtpCapabilities))throw new j.UnsupportedError("cannot consume this Producer");let d=new wn({id:e,producerId:t,kind:r,rtpParameters:c,streamId:i,onRtpReceiver:o,appData:a});return this._pendingConsumerTasks.push(d),queueMicrotask(()=>{this._closed||this._consumerCreationInProgress===!1&&this.createPendingConsumers()}),d.promise}async produceData({ordered:e=!0,maxPacketLifeTime:t,maxRetransmits:r,label:n="",protocol:i="",appData:o={}}={}){if(F.debug("produceData()"),this._closed)throw new j.InvalidStateError("closed");if(this._direction!=="send")throw new j.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(o&&typeof o!="object")throw new TypeError("if given, appData must be an object")}else throw new j.UnsupportedError("SCTP not enabled by remote Transport");return(t||r)&&(e=!1),this._awaitQueue.push(async()=>{let{dataChannel:a,sctpStreamParameters:c}=await this._handler.sendDataChannel({sctpStreamParameters:{ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:n,protocol:i}});ir.validateAndNormalizeSctpStreamParameters(c);let{id:u}=await new Promise((l,p)=>{this.safeEmit("producedata",{sctpStreamParameters:c,label:n,protocol:i,appData:o},l,p)}),d=new il.DataProducer({id:u,dataChannel:a,sctpStreamParameters:c,appData:o});return this._dataProducers.set(d.id,d),this.handleDataProducer(d),this._observer.safeEmit("newdataproducer",d),d},"transport.produceData()")}async consumeData({id:e,dataProducerId:t,sctpStreamParameters:r,label:n="",protocol:i="",appData:o={}}){if(F.debug("consumeData()"),this._closed)throw new j.InvalidStateError("closed");if(this._direction!=="recv")throw new j.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(o&&typeof o!="object")throw new TypeError("if given, appData must be an object")}else throw new j.UnsupportedError("SCTP not enabled by remote Transport");let a=vn.clone(r);return ir.validateAndNormalizeSctpStreamParameters(a),this._awaitQueue.push(async()=>{let{dataChannel:c}=await this._handler.receiveDataChannel({maxMessageSize:this._maxSctpMessageSize,sctpStreamParameters:a,label:n,protocol:i}),u=new ol.DataConsumer({id:e,dataProducerId:t,dataChannel:c,sctpStreamParameters:a,appData:o});return this._dataConsumers.set(u.id,u),this.handleDataConsumer(u),this._observer.safeEmit("newdataconsumer",u),u},"transport.consumeData()")}getDataChannelMaxMessageSize(){return this._handler.getDataChannelMaxMessageSize()}createPendingConsumers(){this._consumerCreationInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingConsumerTasks.length===0){F.debug("createPendingConsumers() | there is no Consumer to be created");return}let e=[...this._pendingConsumerTasks];this._pendingConsumerTasks=[];let t,r=[];for(let n of e){let{id:i,kind:o,rtpParameters:a,streamId:c,onRtpReceiver:u}=n.consumerOptions;r.push({trackId:i,kind:o,rtpParameters:a,streamId:c,onRtpReceiver:u})}try{let n=await this._handler.receive(r);for(let i=0;i<n.length;++i){let o=e[i],a=n[i],{id:c,producerId:u,kind:d,rtpParameters:l,appData:p}=o.consumerOptions,{localId:m,rtpReceiver:h,track:f}=a,g=new nl.Consumer({id:c,localId:m,producerId:u,rtpReceiver:h,track:f,rtpParameters:l,appData:p});this._consumers.set(g.id,g),this.handleConsumer(g),!this._probatorConsumerCreated&&!t&&d==="video"&&(t=g),this._observer.safeEmit("newconsumer",g),o.resolve(g)}}catch(n){for(let i of e)i.reject(n)}if(t)try{let n=ir.generateProbatorRtpParameters(t.rtpParameters);await this._handler.receive([{trackId:"probator",kind:"video",rtpParameters:n}]),F.debug("createPendingConsumers() | Consumer for RTP probation created"),this._probatorConsumerCreated=!0}catch(n){F.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){F.debug("pausePendingConsumers() | there is no Consumer to be paused");return}let e=Array.from(this._pendingPauseConsumers.values());this._pendingPauseConsumers.clear();try{let t=e.map(r=>r.localId);await this._handler.pauseReceiving(t)}catch(t){F.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){F.debug("resumePendingConsumers() | there is no Consumer to be resumed");return}let e=Array.from(this._pendingResumeConsumers.values());this._pendingResumeConsumers.clear();try{let t=e.map(r=>r.localId);await this._handler.resumeReceiving(t)}catch(t){F.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){F.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){F.error("closePendingConsumers() | failed to close Consumers:",t)}},"transport.closePendingConsumers()").then(()=>{this._consumerCloseInProgress=!1,this._pendingCloseConsumers.size>0&&this.closePendingConsumers()}).catch(()=>{})}handleHandler(){let e=this._handler;e.on("@connect",({dtlsParameters:t},r,n)=>{if(this._closed){n(new j.InvalidStateError("closed"));return}this.safeEmit("connect",{dtlsParameters:t},r,n)}),e.on("@icegatheringstatechange",t=>{t!==this._iceGatheringState&&(F.debug("ICE gathering state changed to %s",t),this._iceGatheringState=t,this._closed||this.safeEmit("icegatheringstatechange",t))}),e.on("@icecandidateerror",t=>{F.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&&(F.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=>F.warn("producer.close() failed:%o",t))}),e.on("@pause",(t,r)=>{this._awaitQueue.push(async()=>await this._handler.pauseSending(e.localId),"producer @pause event").then(t).catch(r)}),e.on("@resume",(t,r)=>{this._awaitQueue.push(async()=>await this._handler.resumeSending(e.localId),"producer @resume event").then(t).catch(r)}),e.on("@replacetrack",(t,r,n)=>{this._awaitQueue.push(async()=>await this._handler.replaceTrack(e.localId,t),"producer @replacetrack event").then(r).catch(n)}),e.on("@setmaxspatiallayer",(t,r,n)=>{this._awaitQueue.push(async()=>await this._handler.setMaxSpatialLayer(e.localId,t),"producer @setmaxspatiallayer event").then(r).catch(n)}),e.on("@setrtpencodingparameters",(t,r,n)=>{this._awaitQueue.push(async()=>await this._handler.setRtpEncodingParameters(e.localId,t),"producer @setrtpencodingparameters event").then(r).catch(n)}),e.on("@getstats",(t,r)=>{if(this._closed)return r(new j.InvalidStateError("closed"));this._handler.getSenderStats(e.localId).then(t).catch(r)})}handleConsumer(e){e.on("@close",()=>{this._consumers.delete(e.id),this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.delete(e.id),!this._closed&&(this._pendingCloseConsumers.set(e.id,e),this._consumerCloseInProgress===!1&&this.closePendingConsumers())}),e.on("@pause",()=>{this._pendingResumeConsumers.has(e.id)&&this._pendingResumeConsumers.delete(e.id),this._pendingPauseConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerPauseInProgress===!1&&this.pausePendingConsumers()})}),e.on("@resume",()=>{this._pendingPauseConsumers.has(e.id)&&this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerResumeInProgress===!1&&this.resumePendingConsumers()})}),e.on("@getstats",(t,r)=>{if(this._closed)return r(new j.InvalidStateError("closed"));this._handler.getReceiverStats(e.localId).then(t).catch(r)})}handleDataProducer(e){e.on("@close",()=>{this._dataProducers.delete(e.id)})}handleDataConsumer(e){e.on("@close",()=>{this._dataConsumers.delete(e.id)})}};rs.Transport=yn});var ss=E((bf,zo)=>{"use strict";var Bo=zo.exports={v:[{name:"version",reg:/^(\d*)$/}],o:[{name:"origin",reg:/^(\S*) (\d*) (\d*) (\S*) IP(\d) (\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\d*) (\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\d) (\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\w*) (\d*) ([\w/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\d*) ([\w\-.]*)(?:\s*\/(\d*)(?:\s*\/(\S*))?)?/,names:["payload","codec","rate","encoding"],format:function(s){return s.encoding?"rtpmap:%d %s/%s/%s":s.rate?"rtpmap:%d %s/%s":"rtpmap:%d %s"}},{push:"fmtp",reg:/^fmtp:(\d*) ([\S| ]*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\d*)(?: (\S*) IP(\d) (\S*))?/,names:["port","netType","ipVer","address"],format:function(s){return s.address!=null?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\*|\d*) trr-int (\d*)/,names:["payload","value"],format:"rtcp-fb:%s trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,names:["payload","type","subtype"],format:function(s){return s.subtype!=null?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:(\d+)(?:\/(\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\S*)(?: (\S*))?/,names:["value","direction","encrypt-uri","uri","config"],format:function(s){return"extmap:%d"+(s.direction?"/%s":"%v")+(s["encrypt-uri"]?" %s":"%v")+" %s"+(s.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(s){return s.sessionConfig!=null?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\w*)/,format:"setup:%s"},{name:"connectionType",reg:/^connection:(new|existing)/,format:"connection:%s"},{name:"mid",reg:/^mid:([^\s]*)/,format:"mid:%s"},{push:"msid",reg:/^msid:([\w-]+)(?: ([\w-]+))?/,names:["id","appdata"],format:"msid:%s %s"},{name:"ptime",reg:/^ptime:(\d*(?:\.\d*)*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\d*(?:\.\d*)*)/,format:"maxptime:%d"},{name:"direction",reg:/^(sendrecv|recvonly|sendonly|inactive)/},{name:"icelite",reg:/^(ice-lite)/},{name:"iceUfrag",reg:/^ice-ufrag:(\S*)/,format:"ice-ufrag:%s"},{name:"icePwd",reg:/^ice-pwd:(\S*)/,format:"ice-pwd:%s"},{name:"fingerprint",reg:/^fingerprint:(\S*) (\S*)/,names:["type","hash"],format:"fingerprint:%s %s"},{push:"candidates",reg:/^candidate:(\S*) (\d*) (\S*) (\d*) (\S*) (\d*) typ (\S*)(?: raddr (\S*) rport (\d*))?(?: tcptype (\S*))?(?: generation (\d*))?(?: network-id (\d*))?(?: network-cost (\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","tcptype","generation","network-id","network-cost"],format:function(s){var e="candidate:%s %d %s %d %s %d typ %s";return e+=s.raddr!=null?" raddr %s rport %d":"%v%v",e+=s.tcptype!=null?" tcptype %s":"%v",s.generation!=null&&(e+=" generation %d"),e+=s["network-id"]!=null?" network-id %d":"%v",e+=s["network-cost"]!=null?" network-cost %d":"%v",e}},{name:"endOfCandidates",reg:/^(end-of-candidates)/},{name:"remoteCandidates",reg:/^remote-candidates:(.*)/,format:"remote-candidates:%s"},{name:"iceOptions",reg:/^ice-options:(\S*)/,format:"ice-options:%s"},{push:"ssrcs",reg:/^ssrc:(\d*) ([\w_-]*)(?::(.*))?/,names:["id","attribute","value"],format:function(s){var e="ssrc:%d";return s.attribute!=null&&(e+=" %s",s.value!=null&&(e+=":%s")),e}},{push:"ssrcGroups",reg:/^ssrc-group:([\x21\x23\x24\x25\x26\x27\x2A\x2B\x2D\x2E\w]*) (.*)/,names:["semantics","ssrcs"],format:"ssrc-group:%s %s"},{name:"msidSemantic",reg:/^msid-semantic:\s?(\w*) (\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{name:"rtcpRsize",reg:/^(rtcp-rsize)/},{name:"sctpmap",reg:/^sctpmap:([\w_/]*) (\S*)(?: (\S*))?/,names:["sctpmapNumber","app","maxMessageSize"],format:function(s){return s.maxMessageSize!=null?"sctpmap:%s %s %s":"sctpmap:%s %s"}},{name:"xGoogleFlag",reg:/^x-google-flag:([^\s]*)/,format:"x-google-flag:%s"},{push:"rids",reg:/^rid:([\d\w]+) (\w+)(?: ([\S| ]*))?/,names:["id","direction","params"],format:function(s){return s.params?"rid:%s %s %s":"rid:%s %s"}},{push:"imageattrs",reg:new RegExp("^imageattr:(\\d+|\\*)[\\s\\t]+(send|recv)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*)(?:[\\s\\t]+(recv|send)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*))?"),names:["pt","dir1","attrs1","dir2","attrs2"],format:function(s){return"imageattr:%s %s %s"+(s.dir2?" %s %s":"")}},{name:"simulcast",reg:new RegExp("^simulcast:(send|recv) ([a-zA-Z0-9\\-_~;,]+)(?:\\s?(send|recv) ([a-zA-Z0-9\\-_~;,]+))?$"),names:["dir1","list1","dir2","list2"],format:function(s){return"simulcast:%s %s"+(s.dir2?" %s %s":"")}},{name:"simulcast_03",reg:/^simulcast:[\s\t]+([\S+\s\t]+)$/,names:["value"],format:"simulcast: %s"},{name:"framerate",reg:/^framerate:(\d+(?:$|\.\d+))/,format:"framerate:%s"},{name:"sourceFilter",reg:/^source-filter: *(excl|incl) (\S*) (IP4|IP6|\*) (\S*) (.*)/,names:["filterMode","netType","addressTypes","destAddress","srcList"],format:"source-filter: %s %s %s %s %s"},{name:"bundleOnly",reg:/^(bundle-only)/},{name:"label",reg:/^label:(.+)/,format:"label:%s"},{name:"sctpPort",reg:/^sctp-port:(\d+)$/,format:"sctp-port:%s"},{name:"maxMessageSize",reg:/^max-message-size:(\d+)$/,format:"max-message-size:%s"},{push:"tsRefClocks",reg:/^ts-refclk:([^\s=]*)(?:=(\S*))?/,names:["clksrc","clksrcExt"],format:function(s){return"ts-refclk:%s"+(s.clksrcExt!=null?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(s){var e="mediaclk:";return e+=s.id!=null?"id=%s %s":"%v%s",e+=s.mediaClockValue!=null?"=%s":"",e+=s.rateNumerator!=null?" rate=%s":"",e+=s.rateDenominator!=null?"/%s":"",e}},{name:"keywords",reg:/^keywds:(.+)$/,format:"keywds:%s"},{name:"content",reg:/^content:(.+)/,format:"content:%s"},{name:"bfcpFloorCtrl",reg:/^floorctrl:(c-only|s-only|c-s)/,format:"floorctrl:%s"},{name:"bfcpConfId",reg:/^confid:(\d+)/,format:"confid:%s"},{name:"bfcpUserId",reg:/^userid:(\d+)/,format:"userid:%s"},{name:"bfcpFloorId",reg:/^floorid:(.+) (?:m-stream|mstrm):(.+)/,names:["id","mStream"],format:"floorid:%s mstrm:%s"},{push:"invalid",names:["value"]}]};Object.keys(Bo).forEach(function(s){var e=Bo[s];e.forEach(function(t){t.reg||(t.reg=/(.*)/),t.format||(t.format="%s")})})});var Go=E(Ce=>{"use strict";var Et=function(s){return String(Number(s))===s?Number(s):s},al=function(s,e,t,r){if(r&&!t)e[r]=Et(s[1]);else for(var n=0;n<t.length;n+=1)s[n+1]!=null&&(e[t[n]]=Et(s[n+1]))},cl=function(s,e,t){var r=s.name&&s.names;s.push&&!e[s.push]?e[s.push]=[]:r&&!e[s.name]&&(e[s.name]={});var n=s.push?{}:r?e[s.name]:e;al(t.match(s.reg),n,s.names,s.name),s.push&&e[s.push].push(n)},Ho=ss(),dl=RegExp.prototype.test.bind(/^([a-z])=(.*)/);Ce.parse=function(s){var e={},t=[],r=e;return s.split(/(\r\n|\r|\n)/).filter(dl).forEach(function(n){var i=n[0],o=n.slice(2);i==="m"&&(t.push({rtp:[],fmtp:[]}),r=t[t.length-1]);for(var a=0;a<(Ho[i]||[]).length;a+=1){var c=Ho[i][a];if(c.reg.test(o))return cl(c,r,o)}}),e.media=t,e};var Vo=function(s,e){var t=e.split(/=(.+)/,2);return t.length===2?s[t[0]]=Et(t[1]):t.length===1&&e.length>1&&(s[t[0]]=void 0),s};Ce.parseParams=function(s){return s.split(/;\s?/).reduce(Vo,{})};Ce.parseFmtpConfig=Ce.parseParams;Ce.parsePayloads=function(s){return s.toString().split(" ").map(Number)};Ce.parseRemoteCandidates=function(s){for(var e=[],t=s.split(" ").map(Et),r=0;r<t.length;r+=3)e.push({component:t[r],ip:t[r+1],port:t[r+2]});return e};Ce.parseImageAttributes=function(s){return s.split(" ").map(function(e){return e.substring(1,e.length-1).split(",").reduce(Vo,{})})};Ce.parseSimulcastStreamList=function(s){return s.split(";").map(function(e){return e.split(",").map(function(t){var r,n=!1;return t[0]!=="~"?r=Et(t):(r=Et(t.substring(1,t.length)),n=!0),{scid:r,paused:n}})})}});var Yo=E((Tf,Ko)=>{"use strict";var bn=ss(),ul=/%[sdv%]/g,ll=function(s){var e=1,t=arguments,r=t.length;return s.replace(ul,function(n){if(e>=r)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""}})},or=function(s,e,t){var r=e.format instanceof Function?e.format(e.push?t:t[e.name]):e.format,n=[s+"="+r];if(e.names)for(var i=0;i<e.names.length;i+=1){var o=e.names[i];e.name?n.push(t[e.name][o]):n.push(t[e.names[i]])}else n.push(t[e.name]);return ll.apply(null,n)},pl=["v","o","s","i","u","e","p","c","b","t","r","z","a"],hl=["i","c","b","a"];Ko.exports=function(s,e){e=e||{},s.version==null&&(s.version=0),s.name==null&&(s.name=" "),s.media.forEach(function(i){i.payloads==null&&(i.payloads="")});var t=e.outerOrder||pl,r=e.innerOrder||hl,n=[];return t.forEach(function(i){bn[i].forEach(function(o){o.name in s&&s[o.name]!=null?n.push(or(i,o,s)):o.push in s&&s[o.push]!=null&&s[o.push].forEach(function(a){n.push(or(i,o,a))})})}),s.media.forEach(function(i){n.push(or("m",bn.m[0],i)),r.forEach(function(o){bn[o].forEach(function(a){a.name in i&&i[a.name]!=null?n.push(or(o,a,i)):a.push in i&&i[a.push]!=null&&i[a.push].forEach(function(c){n.push(or(o,a,c))})})})}),n.join(`\r
|
|
3
|
+
`+i),n.push(s+"m+"+Yr.exports.humanize(this.diff)+"\x1B[0m")}else n[0]=Qd()+e+" "+n[0]}function Qd(){return B.inspectOpts.hideDate?"":new Date().toISOString()+" "}function Jd(...n){return process.stderr.write(Kr.formatWithOptions(B.inspectOpts,...n)+`
|
|
4
|
+
`)}function Xd(n){n?process.env.DEBUG=n:delete process.env.DEBUG}function Zd(){return process.env.DEBUG}function el(n){n.inspectOpts={};let e=Object.keys(B.inspectOpts);for(let t=0;t<e.length;t++)n.inspectOpts[e[t]]=B.inspectOpts[e[t]]}Yr.exports=es()(B);var{formatters:no}=Yr.exports;no.o=function(n){return this.inspectOpts.colors=this.useColors,Kr.inspect(n,this.inspectOpts).split(`
|
|
5
|
+
`).map(e=>e.trim()).join(" ")};no.O=function(n){return this.inspectOpts.colors=this.useColors,Kr.inspect(n,this.inspectOpts)}});var cr=P((of,ns)=>{"use strict";typeof process>"u"||process.type==="renderer"||process.browser===!0||process.__nwjs?ns.exports=Zi():ns.exports=so()});var oo=P(io=>{"use strict";Object.defineProperty(io,"__esModule",{value:!0})});var X=P(Qr=>{"use strict";Object.defineProperty(Qr,"__esModule",{value:!0});Qr.Logger=void 0;var yt=cr(),bt="media-client",ss=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,yt.default)(`${bt}:${e}`),this._warn=(0,yt.default)(`${bt}:WARN:${e}`),this._error=(0,yt.default)(`${bt}:ERROR:${e}`)):(this._debug=(0,yt.default)(bt),this._warn=(0,yt.default)(`${bt}:WARN`),this._error=(0,yt.default)(`${bt}: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}};Qr.Logger=ss});var vo=P((df,is)=>{"use strict";var St=typeof Reflect=="object"?Reflect:null,ao=St&&typeof St.apply=="function"?St.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)},Jr;St&&typeof St.ownKeys=="function"?Jr=St.ownKeys:Object.getOwnPropertySymbols?Jr=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Jr=function(e){return Object.getOwnPropertyNames(e)};function tl(n){console&&console.warn&&console.warn(n)}var lo=Number.isNaN||function(e){return e!==e};function L(){L.init.call(this)}is.exports=L;is.exports.once=il;L.EventEmitter=L;L.prototype._events=void 0;L.prototype._eventsCount=0;L.prototype._maxListeners=void 0;var co=10;function Xr(n){if(typeof n!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof n)}Object.defineProperty(L,"defaultMaxListeners",{enumerable:!0,get:function(){return co},set:function(n){if(typeof n!="number"||n<0||lo(n))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+n+".");co=n}});L.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};L.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||lo(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 uo(n){return n._maxListeners===void 0?L.defaultMaxListeners:n._maxListeners}L.prototype.getMaxListeners=function(){return uo(this)};L.prototype.emit=function(e){for(var t=[],r=1;r<arguments.length;r++)t.push(arguments[r]);var s=e==="error",i=this._events;if(i!==void 0)s=s&&i.error===void 0;else if(!s)return!1;if(s){var o;if(t.length>0&&(o=t[0]),o instanceof Error)throw o;var a=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw a.context=o,a}var c=i[e];if(c===void 0)return!1;if(typeof c=="function")ao(c,this,t);else for(var l=c.length,d=go(c,l),r=0;r<l;++r)ao(d[r],this,t);return!0};function po(n,e,t,r){var s,i,o;if(Xr(t),i=n._events,i===void 0?(i=n._events=Object.create(null),n._eventsCount=0):(i.newListener!==void 0&&(n.emit("newListener",e,t.listener?t.listener:t),i=n._events),o=i[e]),o===void 0)o=i[e]=t,++n._eventsCount;else if(typeof o=="function"?o=i[e]=r?[t,o]:[o,t]:r?o.unshift(t):o.push(t),s=uo(n),s>0&&o.length>s&&!o.warned){o.warned=!0;var a=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");a.name="MaxListenersExceededWarning",a.emitter=n,a.type=e,a.count=o.length,tl(a)}return n}L.prototype.addListener=function(e,t){return po(this,e,t,!1)};L.prototype.on=L.prototype.addListener;L.prototype.prependListener=function(e,t){return po(this,e,t,!0)};function rl(){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 ho(n,e,t){var r={fired:!1,wrapFn:void 0,target:n,type:e,listener:t},s=rl.bind(r);return s.listener=t,r.wrapFn=s,s}L.prototype.once=function(e,t){return Xr(t),this.on(e,ho(this,e,t)),this};L.prototype.prependOnceListener=function(e,t){return Xr(t),this.prependListener(e,ho(this,e,t)),this};L.prototype.removeListener=function(e,t){var r,s,i,o,a;if(Xr(t),s=this._events,s===void 0)return this;if(r=s[e],r===void 0)return this;if(r===t||r.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete s[e],s.removeListener&&this.emit("removeListener",e,r.listener||t));else if(typeof r!="function"){for(i=-1,o=r.length-1;o>=0;o--)if(r[o]===t||r[o].listener===t){a=r[o].listener,i=o;break}if(i<0)return this;i===0?r.shift():nl(r,i),r.length===1&&(s[e]=r[0]),s.removeListener!==void 0&&this.emit("removeListener",e,a||t)}return this};L.prototype.off=L.prototype.removeListener;L.prototype.removeAllListeners=function(e){var t,r,s;if(r=this._events,r===void 0)return this;if(r.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):r[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete r[e]),this;if(arguments.length===0){var i=Object.keys(r),o;for(s=0;s<i.length;++s)o=i[s],o!=="removeListener"&&this.removeAllListeners(o);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(t=r[e],typeof t=="function")this.removeListener(e,t);else if(t!==void 0)for(s=t.length-1;s>=0;s--)this.removeListener(e,t[s]);return this};function fo(n,e,t){var r=n._events;if(r===void 0)return[];var s=r[e];return s===void 0?[]:typeof s=="function"?t?[s.listener||s]:[s]:t?sl(s):go(s,s.length)}L.prototype.listeners=function(e){return fo(this,e,!0)};L.prototype.rawListeners=function(e){return fo(this,e,!1)};L.listenerCount=function(n,e){return typeof n.listenerCount=="function"?n.listenerCount(e):mo.call(n,e)};L.prototype.listenerCount=mo;function mo(n){var e=this._events;if(e!==void 0){var t=e[n];if(typeof t=="function")return 1;if(t!==void 0)return t.length}return 0}L.prototype.eventNames=function(){return this._eventsCount>0?Jr(this._events):[]};function go(n,e){for(var t=new Array(e),r=0;r<e;++r)t[r]=n[r];return t}function nl(n,e){for(;e+1<n.length;e++)n[e]=n[e+1];n.pop()}function sl(n){for(var e=new Array(n.length),t=0;t<e.length;++t)e[t]=n[t].listener||n[t];return e}function il(n,e){return new Promise(function(t,r){function s(o){n.removeListener(e,i),r(o)}function i(){typeof n.removeListener=="function"&&n.removeListener("error",s),t([].slice.call(arguments))}_o(n,e,i,{once:!0}),e!=="error"&&ol(n,s,{once:!0})})}function ol(n,e,t){typeof n.on=="function"&&_o(n,"error",e,t)}function _o(n,e,t,r){if(typeof n.on=="function")r.once?n.once(e,t):n.on(e,t);else if(typeof n.addEventListener=="function")n.addEventListener(e,function s(i){r.once&&n.removeEventListener(e,s),t(i)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof n)}});var se=P(Zr=>{"use strict";Object.defineProperty(Zr,"__esModule",{value:!0});Zr.EnhancedEventEmitter=void 0;var al=vo(),cl=X(),dl=new cl.Logger("EnhancedEventEmitter"),os=class extends al.EventEmitter{constructor(){super(),this.setMaxListeners(1/0)}close(){super.removeAllListeners()}emit(e,...t){return super.emit(e,...t)}safeEmit(e,...t){try{return super.emit(e,...t)}catch(r){dl.error("safeEmit() | event listener threw an error [eventName:%s]:%o",e,r);try{super.emit("listenererror",e,r)}catch{}return!!super.listenerCount(e)}}on(e,t){return super.on(e,t),this}off(e,t){return super.off(e,t),this}addListener(e,t){return super.on(e,t),this}prependListener(e,t){return super.prependListener(e,t),this}once(e,t){return super.once(e,t),this}prependOnceListener(e,t){return super.prependOnceListener(e,t),this}removeListener(e,t){return super.off(e,t),this}removeAllListeners(e){return super.removeAllListeners(e),this}listenerCount(e){return super.listenerCount(e)}listeners(e){return super.listeners(e)}rawListeners(e){return super.rawListeners(e)}};Zr.EnhancedEventEmitter=os});var de=P(Tt=>{"use strict";Object.defineProperty(Tt,"__esModule",{value:!0});Tt.InvalidStateError=Tt.UnsupportedError=void 0;var as=class n extends Error{constructor(e){super(e),this.name="UnsupportedError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,n):this.stack=new Error(e).stack}};Tt.UnsupportedError=as;var cs=class n extends Error{constructor(e){super(e),this.name="InvalidStateError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,n):this.stack=new Error(e).stack}};Tt.InvalidStateError=cs});var Xe=P(dr=>{"use strict";Object.defineProperty(dr,"__esModule",{value:!0});dr.clone=ll;dr.generateRandomNumber=ul;dr.deepFreeze=wo;function ll(n){if(n!==void 0)return Number.isNaN(n)?NaN:typeof structuredClone=="function"?structuredClone(n):JSON.parse(JSON.stringify(n))}function ul(){return Math.round(Math.random()*1e7)}function wo(n){let e=Reflect.ownKeys(n);for(let t of e){let r=n[t];(r&&typeof r=="object"||typeof r=="function")&&wo(r)}return Object.freeze(n)}});var yo=P(en=>{"use strict";Object.defineProperty(en,"__esModule",{value:!0});en.Logger=void 0;var Rt=cr(),Ct="h264-profile-level-id",ds=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,Rt.default)(`${Ct}:${e}`),this._warn=(0,Rt.default)(`${Ct}:WARN:${e}`),this._error=(0,Rt.default)(`${Ct}:ERROR:${e}`)):(this._debug=(0,Rt.default)(Ct),this._warn=(0,Rt.default)(`${Ct}:WARN`),this._error=(0,Rt.default)(`${Ct}: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}};en.Logger=ds});var ko=P(z=>{"use strict";Object.defineProperty(z,"__esModule",{value:!0});z.ProfileLevelId=z.Level=z.Profile=void 0;z.parseProfileLevelId=Ro;z.profileLevelIdToString=Co;z.profileToString=ml;z.levelToString=gl;z.parseSdpProfileLevelId=Ze;z.isSameProfile=_l;z.isSameProfileAndLevel=vl;z.generateProfileLevelIdStringForAnswer=wl;z.supportedLevel=yl;var pl=yo(),ge=new pl.Logger,O;(function(n){n[n.ConstrainedBaseline=1]="ConstrainedBaseline",n[n.Baseline=2]="Baseline",n[n.Main=3]="Main",n[n.ConstrainedHigh=4]="ConstrainedHigh",n[n.High=5]="High",n[n.PredictiveHigh444=6]="PredictiveHigh444"})(O||(z.Profile=O={}));var b;(function(n){n[n.L1_b=0]="L1_b",n[n.L1=10]="L1",n[n.L1_1=11]="L1_1",n[n.L1_2=12]="L1_2",n[n.L1_3=13]="L1_3",n[n.L2=20]="L2",n[n.L2_1=21]="L2_1",n[n.L2_2=22]="L2_2",n[n.L3=30]="L3",n[n.L3_1=31]="L3_1",n[n.L3_2=32]="L3_2",n[n.L4=40]="L4",n[n.L4_1=41]="L4_1",n[n.L4_2=42]="L4_2",n[n.L5=50]="L5",n[n.L5_1=51]="L5_1",n[n.L5_2=52]="L5_2"})(b||(z.Level=b={}));var kt=class{profile;level;constructor(e,t){this.profile=e,this.level=t}};z.ProfileLevelId=kt;var hl=new kt(O.ConstrainedBaseline,b.L3_1),fe=class{mask;masked_value;constructor(e){this.mask=~So("x",e),this.masked_value=So("1",e)}isMatch(e){return this.masked_value===(e&this.mask)}},me=class{profile_idc;profile_iop;profile;constructor(e,t,r){this.profile_idc=e,this.profile_iop=t,this.profile=r}},fl=[new me(66,new fe("x1xx0000"),O.ConstrainedBaseline),new me(77,new fe("1xxx0000"),O.ConstrainedBaseline),new me(88,new fe("11xx0000"),O.ConstrainedBaseline),new me(66,new fe("x0xx0000"),O.Baseline),new me(88,new fe("10xx0000"),O.Baseline),new me(77,new fe("0x0x0000"),O.Main),new me(100,new fe("00000000"),O.High),new me(100,new fe("00001100"),O.ConstrainedHigh),new me(244,new fe("00000000"),O.PredictiveHigh444)],bo=[{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:b.L1},{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:b.L1_b},{max_macroblocks_per_second:3e3,max_macroblock_frame_size:396,level:b.L1_1},{max_macroblocks_per_second:6e3,max_macroblock_frame_size:396,level:b.L1_2},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:b.L1_3},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:b.L2},{max_macroblocks_per_second:19800,max_macroblock_frame_size:792,level:b.L2_1},{max_macroblocks_per_second:20250,max_macroblock_frame_size:1620,level:b.L2_2},{max_macroblocks_per_second:40500,max_macroblock_frame_size:1620,level:b.L3},{max_macroblocks_per_second:108e3,max_macroblock_frame_size:3600,level:b.L3_1},{max_macroblocks_per_second:216e3,max_macroblock_frame_size:5120,level:b.L3_2},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:b.L4},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:b.L4_1},{max_macroblocks_per_second:522240,max_macroblock_frame_size:8704,level:b.L4_2},{max_macroblocks_per_second:589824,max_macroblock_frame_size:22080,level:b.L5},{max_macroblocks_per_second:983040,max_macroblock_frame_size:36864,level:b.L5_1},{max_macroblocks_per_second:2073600,max_macroblock_frame_size:36864,level:b.L5_2}];function Ro(n){if(typeof n!="string"||n.length!==6)return;let t=parseInt(n,16);if(t===0)return;let r=t&255,s=t>>8&255,i=t>>16&255,o;switch(r){case b.L1_1:{o=(s&16)!==0?b.L1_b:b.L1_1;break}case b.L1:case b.L1_2:case b.L1_3:case b.L2:case b.L2_1:case b.L2_2:case b.L3:case b.L3_1:case b.L3_2:case b.L4:case b.L4_1:case b.L4_2:case b.L5:case b.L5_1:case b.L5_2:{o=r;break}default:{ge.warn(`parseProfileLevelId() | unrecognized level_idc [str:${n}, level_idc:${r}]`);return}}for(let a of fl)if(i===a.profile_idc&&a.profile_iop.isMatch(s))return ge.debug(`parseProfileLevelId() | result [str:${n}, profile:${a.profile}, level:${o}]`),new kt(a.profile,o);ge.warn(`parseProfileLevelId() | unrecognized profile_idc/profile_iop combination [str:${n}, profile_idc:${i}, profile_iop:${s}]`)}function Co(n){if(n.level==b.L1_b)switch(n.profile){case O.ConstrainedBaseline:return"42f00b";case O.Baseline:return"42100b";case O.Main:return"4d100b";default:{ge.warn(`profileLevelIdToString() | Level 1_b not is allowed for profile ${n.profile}`);return}}let e;switch(n.profile){case O.ConstrainedBaseline:{e="42e0";break}case O.Baseline:{e="4200";break}case O.Main:{e="4d00";break}case O.ConstrainedHigh:{e="640c";break}case O.High:{e="6400";break}case O.PredictiveHigh444:{e="f400";break}default:{ge.warn(`profileLevelIdToString() | unrecognized profile ${n.profile}`);return}}let t=n.level.toString(16);return t.length===1&&(t=`0${t}`),`${e}${t}`}function ml(n){switch(n){case O.ConstrainedBaseline:return"ConstrainedBaseline";case O.Baseline:return"Baseline";case O.Main:return"Main";case O.ConstrainedHigh:return"ConstrainedHigh";case O.High:return"High";case O.PredictiveHigh444:return"PredictiveHigh444";default:{ge.warn(`profileToString() | unrecognized profile ${n}`);return}}}function gl(n){switch(n){case b.L1_b:return"1b";case b.L1:return"1";case b.L1_1:return"1.1";case b.L1_2:return"1.2";case b.L1_3:return"1.3";case b.L2:return"2";case b.L2_1:return"2.1";case b.L2_2:return"2.2";case b.L3:return"3";case b.L3_1:return"3.1";case b.L3_2:return"3.2";case b.L4:return"4";case b.L4_1:return"4.1";case b.L4_2:return"4.2";case b.L5:return"5";case b.L5_1:return"5.1";case b.L5_2:return"5.2";default:{ge.warn(`levelToString() | unrecognized level ${n}`);return}}}function Ze(n={}){let e=n["profile-level-id"];return e?Ro(e):hl}function _l(n={},e={}){let t=Ze(n),r=Ze(e);return!!(t&&r&&t.profile===r.profile)}function vl(n={},e={}){let t=Ze(n),r=Ze(e);return!!(t&&r&&t.profile===r.profile&&t.level==r.level)}function wl(n={},e={}){if(!n["profile-level-id"]&&!e["profile-level-id"]){ge.warn("generateProfileLevelIdStringForAnswer() | profile-level-id missing in local and remote params");return}let t=Ze(n),r=Ze(e);if(!t)throw new TypeError("invalid local_profile_level_id");if(!r)throw new TypeError("invalid remote_profile_level_id");if(t.profile!==r.profile)throw new TypeError("H264 Profile mismatch");let s=To(n)&&To(e),i=t.level,o=r.level,a=Sl(i,o),c=s?i:a;return ge.debug(`generateProfileLevelIdStringForAnswer() | result [profile:${t.profile}, level:${c}]`),Co(new kt(t.profile,c))}function yl(n,e){for(let r=bo.length-1;r>=0;--r){let s=bo[r];if(s.max_macroblock_frame_size*256<=n&&s.max_macroblocks_per_second<=e*s.max_macroblock_frame_size)return ge.debug(`supportedLevel() | result [max_frame_pixel_count:${n}, max_fps:${e}, level:${s.level}]`),s.level}ge.warn(`supportedLevel() | no level supported [max_frame_pixel_count:${n}, max_fps:${e}]`)}function So(n,e){return+(e[0]===n)<<7|+(e[1]===n)<<6|+(e[2]===n)<<5|+(e[3]===n)<<4|+(e[4]===n)<<3|+(e[5]===n)<<2|+(e[6]===n)<<1|+(e[7]===n)<<0}function bl(n,e){return n===b.L1_b?e!==b.L1&&e!==b.L1_b:e===b.L1_b?n!==b.L1:n<e}function Sl(n,e){return bl(n,e)?n:e}function To(n={}){let e=n["level-asymmetry-allowed"];return e===!0||e===1||e==="1"}});var be=P(Z=>{"use strict";Object.defineProperty(Z,"__esModule",{value:!0});Z.validateAndNormalizeRtpCapabilities=El;Z.validateAndNormalizeRtpParameters=us;Z.validateAndNormalizeSctpStreamParameters=Pl;Z.validateSctpCapabilities=xl;Z.getExtendedRtpCapabilities=Il;Z.getRecvRtpCapabilities=Dl;Z.getSendRtpCapabilities=Ml;Z.getSendingRtpParameters=Al;Z.getSendingRemoteRtpParameters=Ll;Z.reduceCodecs=Ol;Z.generateProbatorRtpParameters=Nl;Z.canSend=Fl;Z.canReceive=jl;var Eo=ko(),Tl=Xe(),Rl="probator",Cl=1234,kl=127;function El(n){if(typeof n!="object")throw new TypeError("caps is not an object");if(n.codecs&&!Array.isArray(n.codecs))throw new TypeError("caps.codecs is not an array");n.codecs||(n.codecs=[]);for(let e of n.codecs)Ul(e);if(n.headerExtensions&&!Array.isArray(n.headerExtensions))throw new TypeError("caps.headerExtensions is not an array");n.headerExtensions||(n.headerExtensions=[]);for(let e of n.headerExtensions)ql(e)}function us(n){if(typeof n!="object")throw new TypeError("params is not an object");if(n.mid&&typeof n.mid!="string")throw new TypeError("params.mid is not a string");if(!Array.isArray(n.codecs))throw new TypeError("missing params.codecs");for(let e of n.codecs)$l(e);if(n.headerExtensions&&!Array.isArray(n.headerExtensions))throw new TypeError("params.headerExtensions is not an array");n.headerExtensions||(n.headerExtensions=[]);for(let e of n.headerExtensions)Wl(e);if(n.encodings&&!Array.isArray(n.encodings))throw new TypeError("params.encodings is not an array");n.encodings||(n.encodings=[]);for(let e of n.encodings)Bl(e);if(n.rtcp&&typeof n.rtcp!="object")throw new TypeError("params.rtcp is not an object");n.rtcp||(n.rtcp={}),zl(n.rtcp)}function Pl(n){if(typeof n!="object")throw new TypeError("params is not an object");if(typeof n.streamId!="number")throw new TypeError("missing params.streamId");let e=!1;if(typeof n.ordered=="boolean"?e=!0:n.ordered=!0,n.maxPacketLifeTime&&typeof n.maxPacketLifeTime!="number")throw new TypeError("invalid params.maxPacketLifeTime");if(n.maxRetransmits&&typeof n.maxRetransmits!="number")throw new TypeError("invalid params.maxRetransmits");if(n.maxPacketLifeTime&&n.maxRetransmits)throw new TypeError("cannot provide both maxPacketLifeTime and maxRetransmits");if(e&&n.ordered&&(n.maxPacketLifeTime||n.maxRetransmits))throw new TypeError("cannot be ordered with maxPacketLifeTime or maxRetransmits");if(!e&&(n.maxPacketLifeTime||n.maxRetransmits)&&(n.ordered=!1),n.label&&typeof n.label!="string")throw new TypeError("invalid params.label");if(n.protocol&&typeof n.protocol!="string")throw new TypeError("invalid params.protocol")}function xl(n){if(typeof n!="object")throw new TypeError("caps is not an object");if(!n.numStreams||typeof n.numStreams!="object")throw new TypeError("missing caps.numStreams");Hl(n.numStreams)}function Il(n,e,t){let r={codecs:[],headerExtensions:[]};if(t)for(let s of n.codecs??[]){if(Et(s))continue;let i=(e.codecs??[]).find(a=>ls(a,s,{strict:!0,modify:!0}));if(!i)continue;let o={kind:s.kind,mimeType:s.mimeType,clockRate:s.clockRate,channels:s.channels,localPayloadType:s.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:i.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:s.parameters??{},remoteParameters:i.parameters??{},rtcpFeedback:Po(s,i)};r.codecs.push(o)}else for(let s of e.codecs??[]){if(Et(s))continue;let i=(n.codecs??[]).find(a=>ls(a,s,{strict:!0,modify:!0}));if(!i)continue;let o={kind:i.kind,mimeType:i.mimeType,clockRate:i.clockRate,channels:i.channels,localPayloadType:i.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:s.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:i.parameters??{},remoteParameters:s.parameters??{},rtcpFeedback:Po(i,s)};r.codecs.push(o)}for(let s of r.codecs){let i=n.codecs.find(a=>Et(a)&&a.parameters?.apt===s.localPayloadType),o=e.codecs.find(a=>Et(a)&&a.parameters?.apt===s.remotePayloadType);i&&o&&(s.localRtxPayloadType=i.preferredPayloadType,s.remoteRtxPayloadType=o.preferredPayloadType)}for(let s of e.headerExtensions){let i=n.headerExtensions.find(a=>Vl(a,s));if(!i)continue;let o={kind:s.kind,uri:s.uri,sendId:i.preferredId,recvId:s.preferredId,encrypt:i.preferredEncrypt??!1,direction:"sendrecv"};switch(s.direction){case"sendrecv":{o.direction="sendrecv";break}case"recvonly":{o.direction="sendonly";break}case"sendonly":{o.direction="recvonly";break}case"inactive":{o.direction="inactive";break}}r.headerExtensions.push(o)}return r}function Dl(n){return Io({direction:"recvonly",extendedRtpCapabilities:n})}function Ml(n){return Io({direction:"sendonly",extendedRtpCapabilities:n})}function Al(n,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let r of e.codecs){if(r.kind!==n)continue;let s={mimeType:r.mimeType,payloadType:r.localPayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.localParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(s),r.localRtxPayloadType){let i={mimeType:`${r.kind}/rtx`,payloadType:r.localRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.localPayloadType},rtcpFeedback:[]};t.codecs.push(i)}}for(let r of e.headerExtensions){if(r.kind&&r.kind!==n||r.direction!=="sendrecv"&&r.direction!=="sendonly")continue;let s={uri:r.uri,id:r.sendId,encrypt:r.encrypt,parameters:{}};t.headerExtensions.push(s)}return t}function Ll(n,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let r of e.codecs){if(r.kind!==n)continue;let s={mimeType:r.mimeType,payloadType:r.localPayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.remoteParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(s),r.localRtxPayloadType){let i={mimeType:`${r.kind}/rtx`,payloadType:r.localRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.localPayloadType},rtcpFeedback:[]};t.codecs.push(i)}}for(let r of e.headerExtensions){if(r.kind&&r.kind!==n||r.direction!=="sendrecv"&&r.direction!=="sendonly")continue;let s={uri:r.uri,id:r.sendId,encrypt:r.encrypt,parameters:{}};t.headerExtensions.push(s)}if(t.headerExtensions.some(r=>r.uri==="http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"))for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(s=>s.type!=="goog-remb");else if(t.headerExtensions.some(r=>r.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"))for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(s=>s.type!=="transport-cc");else for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(s=>s.type!=="transport-cc"&&s.type!=="goog-remb");return t}function Ol(n,e){let t=[];if(!e)t.push(n[0]),Et(n[1])&&t.push(n[1]);else{for(let r=0;r<n.length;++r)if(ls(n[r],e,{strict:!0})){t.push(n[r]),Et(n[r+1])&&t.push(n[r+1]);break}if(t.length===0)throw new TypeError("no matching codec found")}return t}function Nl(n){n=Tl.clone(n),us(n);let e={mid:Rl,codecs:[],headerExtensions:[],encodings:[{ssrc:Cl}],rtcp:{cname:"probator"}};return e.codecs.push(n.codecs[0]),e.codecs[0].payloadType=kl,e.headerExtensions=n.headerExtensions,e}function Fl(n,e){return(e.codecs??[]).some(t=>t.kind===n)}function jl(n,e){if(us(n),n.codecs.length===0)return!1;let t=n.codecs[0];return(e.codecs??[]).some(r=>r.preferredPayloadType===t.payloadType)}function Ul(n){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof n!="object")throw new TypeError("codec is not an object");if(!n.mimeType||typeof n.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(n.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(n.kind=t[1].toLowerCase(),typeof n.preferredPayloadType!="number")throw new TypeError("missing codec.preferredPayloadType");if(typeof n.clockRate!="number")throw new TypeError("missing codec.clockRate");n.kind==="audio"?typeof n.channels!="number"&&(n.channels=1):delete n.channels,(!n.parameters||typeof n.parameters!="object")&&(n.parameters={});for(let r of Object.keys(n.parameters)){let s=n.parameters[r];if(s===void 0&&(n.parameters[r]="",s=""),typeof s!="string"&&typeof s!="number")throw new TypeError(`invalid codec parameter [key:${r}s, value:${s}]`);if(r==="apt"&&typeof s!="number")throw new TypeError("invalid codec apt parameter")}(!n.rtcpFeedback||!Array.isArray(n.rtcpFeedback))&&(n.rtcpFeedback=[]);for(let r of n.rtcpFeedback)xo(r)}function xo(n){if(typeof n!="object")throw new TypeError("fb is not an object");if(!n.type||typeof n.type!="string")throw new TypeError("missing fb.type");(!n.parameter||typeof n.parameter!="string")&&(n.parameter="")}function ql(n){if(typeof n!="object")throw new TypeError("ext is not an object");if(n.kind!=="audio"&&n.kind!=="video")throw new TypeError("invalid ext.kind");if(!n.uri||typeof n.uri!="string")throw new TypeError("missing ext.uri");if(typeof n.preferredId!="number")throw new TypeError("missing ext.preferredId");if(n.preferredEncrypt&&typeof n.preferredEncrypt!="boolean")throw new TypeError("invalid ext.preferredEncrypt");if(n.preferredEncrypt||(n.preferredEncrypt=!1),n.direction&&typeof n.direction!="string")throw new TypeError("invalid ext.direction");n.direction||(n.direction="sendrecv")}function $l(n){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof n!="object")throw new TypeError("codec is not an object");if(!n.mimeType||typeof n.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(n.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(typeof n.payloadType!="number")throw new TypeError("missing codec.payloadType");if(typeof n.clockRate!="number")throw new TypeError("missing codec.clockRate");t[1].toLowerCase()==="audio"?typeof n.channels!="number"&&(n.channels=1):delete n.channels,(!n.parameters||typeof n.parameters!="object")&&(n.parameters={});for(let s of Object.keys(n.parameters)){let i=n.parameters[s];if(i===void 0&&(n.parameters[s]="",i=""),typeof i!="string"&&typeof i!="number")throw new TypeError(`invalid codec parameter [key:${s}s, value:${i}]`);if(s==="apt"&&typeof i!="number")throw new TypeError("invalid codec apt parameter")}(!n.rtcpFeedback||!Array.isArray(n.rtcpFeedback))&&(n.rtcpFeedback=[]);for(let s of n.rtcpFeedback)xo(s)}function Wl(n){if(typeof n!="object")throw new TypeError("ext is not an object");if(!n.uri||typeof n.uri!="string")throw new TypeError("missing ext.uri");if(typeof n.id!="number")throw new TypeError("missing ext.id");if(n.encrypt&&typeof n.encrypt!="boolean")throw new TypeError("invalid ext.encrypt");n.encrypt||(n.encrypt=!1),(!n.parameters||typeof n.parameters!="object")&&(n.parameters={});for(let e of Object.keys(n.parameters)){let t=n.parameters[e];if(t===void 0&&(n.parameters[e]="",t=""),typeof t!="string"&&typeof t!="number")throw new TypeError("invalid header extension parameter")}}function Bl(n){if(typeof n!="object")throw new TypeError("encoding is not an object");if(n.ssrc&&typeof n.ssrc!="number")throw new TypeError("invalid encoding.ssrc");if(n.rid&&typeof n.rid!="string")throw new TypeError("invalid encoding.rid");if(n.rtx&&typeof n.rtx!="object")throw new TypeError("invalid encoding.rtx");if(n.rtx&&typeof n.rtx.ssrc!="number")throw new TypeError("missing encoding.rtx.ssrc");if((!n.dtx||typeof n.dtx!="boolean")&&(n.dtx=!1),n.scalabilityMode&&typeof n.scalabilityMode!="string")throw new TypeError("invalid encoding.scalabilityMode")}function zl(n){if(typeof n!="object")throw new TypeError("rtcp is not an object");if(n.cname&&typeof n.cname!="string")throw new TypeError("invalid rtcp.cname");(!n.reducedSize||typeof n.reducedSize!="boolean")&&(n.reducedSize=!0)}function Hl(n){if(typeof n!="object")throw new TypeError("numStreams is not an object");if(typeof n.OS!="number")throw new TypeError("missing numStreams.OS");if(typeof n.MIS!="number")throw new TypeError("missing numStreams.MIS")}function Io({direction:n,extendedRtpCapabilities:e}){let t={codecs:[],headerExtensions:[]};for(let r of e.codecs){let s={kind:r.kind,mimeType:r.mimeType,preferredPayloadType:r.remotePayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.localParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(s),!r.remoteRtxPayloadType)continue;let i={kind:r.kind,mimeType:`${r.kind}/rtx`,preferredPayloadType:r.remoteRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.remotePayloadType},rtcpFeedback:[]};t.codecs.push(i)}for(let r of e.headerExtensions){if(r.direction!=="sendrecv"&&r.direction!==n)continue;let s={kind:r.kind,uri:r.uri,preferredId:r.recvId,preferredEncrypt:r.encrypt??!1,direction:r.direction};t.headerExtensions.push(s)}return t}function Et(n){return n?/.+\/rtx$/i.test(n.mimeType):!1}function ls(n,e,{strict:t=!1,modify:r=!1}={}){let s=n.mimeType.toLowerCase(),i=e.mimeType.toLowerCase();if(s!==i||n.clockRate!==e.clockRate||n.channels!==e.channels)return!1;switch(s){case"video/h264":{if(t){let o=n.parameters["packetization-mode"]??0,a=e.parameters["packetization-mode"]??0;if(o!==a||!Eo.isSameProfile(n.parameters,e.parameters))return!1;let c;try{c=Eo.generateProfileLevelIdStringForAnswer(n.parameters,e.parameters)}catch{return!1}r&&(c?(n.parameters["profile-level-id"]=c,e.parameters["profile-level-id"]=c):(delete n.parameters["profile-level-id"],delete e.parameters["profile-level-id"]))}break}case"video/vp9":{if(t){let o=n.parameters["profile-id"]??0,a=e.parameters["profile-id"]??0;if(o!==a)return!1}break}}return!0}function Vl(n,e){return!(n.kind&&e.kind&&n.kind!==e.kind||n.uri!==e.uri)}function Po(n,e){let t=[];for(let r of n.rtcpFeedback??[]){let s=(e.rtcpFeedback??[]).find(i=>i.type===r.type&&(i.parameter===r.parameter||!i.parameter&&!r.parameter));s&&t.push(s)}return t}});var Do=P(tn=>{"use strict";Object.defineProperty(tn,"__esModule",{value:!0});tn.Logger=void 0;var Pt=cr(),xt="awaitqueue",ps=class{_debug;_warn;_error;constructor(e){e?(this._debug=Pt(`${xt}:${e}`),this._warn=Pt(`${xt}:WARN:${e}`),this._error=Pt(`${xt}:ERROR:${e}`)):(this._debug=Pt(xt),this._warn=Pt(`${xt}:WARN`),this._error=Pt(`${xt}: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}};tn.Logger=ps});var ms=P(It=>{"use strict";Object.defineProperty(It,"__esModule",{value:!0});It.AwaitQueueRemovedTaskError=It.AwaitQueueStoppedError=void 0;var hs=class n extends Error{constructor(e){super(e??"queue stopped"),this.name="AwaitQueueStoppedError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,n)}};It.AwaitQueueStoppedError=hs;var fs=class n extends Error{constructor(e){super(e??"queue task removed"),this.name="AwaitQueueRemovedTaskError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,n)}};It.AwaitQueueRemovedTaskError=fs});var Mo=P(rn=>{"use strict";Object.defineProperty(rn,"__esModule",{value:!0});rn.AwaitQueue=void 0;var Gl=Do(),gs=ms(),Pe=new Gl.Logger("AwaitQueue"),_s=class{pendingTasks=new Map;nextTaskId=0;constructor(){Pe.debug("constructor()")}get size(){return this.pendingTasks.size}async push(e,t,r){if(t=t??e.name,Pe.debug(`push() [name:${t}, options:%o]`,r),typeof e!="function")throw new TypeError("given task is not a function");if(t)try{Object.defineProperty(e,"name",{value:t})}catch{}return new Promise((s,i)=>{if(t&&r?.removeOngoingTasksWithSameName)for(let a of this.pendingTasks.values())a.name===t&&a.reject(new gs.AwaitQueueRemovedTaskError,{canExecuteNextTask:!1});let o={id:this.nextTaskId++,task:e,name:t,enqueuedAt:Date.now(),executedAt:void 0,completed:!1,resolve:a=>{if(o.completed)return;o.completed=!0,this.pendingTasks.delete(o.id),Pe.debug(`resolving task [name:${o.name}]`),s(a);let[c]=this.pendingTasks.values();c&&!c.executedAt&&this.execute(c)},reject:(a,{canExecuteNextTask:c})=>{if(!o.completed&&(o.completed=!0,this.pendingTasks.delete(o.id),Pe.debug(`rejecting task [name:${o.name}]: %s`,String(a)),i(a),c)){let[l]=this.pendingTasks.values();l&&!l.executedAt&&this.execute(l)}}};this.pendingTasks.set(o.id,o),this.pendingTasks.size===1&&this.execute(o)})}stop(){Pe.debug("stop()");for(let e of this.pendingTasks.values())Pe.debug(`stop() | stopping task [name:${e.name}]`),e.reject(new gs.AwaitQueueStoppedError,{canExecuteNextTask:!1})}remove(e){Pe.debug(`remove() [taskIdx:${e}]`);let t=Array.from(this.pendingTasks.values())[e];if(!t){Pe.debug(`stop() | no task with given idx [taskIdx:${e}]`);return}t.reject(new gs.AwaitQueueRemovedTaskError,{canExecuteNextTask:!0})}dump(){let e=Date.now(),t=0;return Array.from(this.pendingTasks.values()).map(r=>({idx:t++,task:r.task,name:r.name,enqueuedTime:r.executedAt?r.executedAt-r.enqueuedAt:e-r.enqueuedAt,executionTime:r.executedAt?e-r.executedAt:0}))}async execute(e){if(Pe.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})}}};rn.AwaitQueue=_s});var Lo=P($e=>{"use strict";Object.defineProperty($e,"__esModule",{value:!0});$e.AwaitQueueRemovedTaskError=$e.AwaitQueueStoppedError=$e.AwaitQueue=void 0;var Kl=Mo();Object.defineProperty($e,"AwaitQueue",{enumerable:!0,get:function(){return Kl.AwaitQueue}});var Ao=ms();Object.defineProperty($e,"AwaitQueueStoppedError",{enumerable:!0,get:function(){return Ao.AwaitQueueStoppedError}});Object.defineProperty($e,"AwaitQueueRemovedTaskError",{enumerable:!0,get:function(){return Ao.AwaitQueueRemovedTaskError}})});var No=P(nn=>{"use strict";Object.defineProperty(nn,"__esModule",{value:!0});nn.Producer=void 0;var Yl=X(),Oo=se(),Dt=de(),Se=new Yl.Logger("Producer"),vs=class extends Oo.EnhancedEventEmitter{_id;_localId;_closed=!1;_rtpSender;_track;_kind;_rtpParameters;_paused;_maxSpatialLayer;_stopTracks;_disableTrackOnPause;_zeroRtpOnPause;_appData;_observer=new Oo.EnhancedEventEmitter;constructor({id:e,localId:t,rtpSender:r,track:s,rtpParameters:i,stopTracks:o,disableTrackOnPause:a,zeroRtpOnPause:c,appData:l}){super(),Se.debug("constructor()"),this._id=e,this._localId=t,this._rtpSender=r,this._track=s,this._kind=s.kind,this._rtpParameters=i,this._paused=a?!s.enabled:!1,this._maxSpatialLayer=void 0,this._stopTracks=o,this._disableTrackOnPause=a,this._zeroRtpOnPause=c,this._appData=l??{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get closed(){return this._closed}get kind(){return this._kind}get rtpSender(){return this._rtpSender}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get maxSpatialLayer(){return this._maxSpatialLayer}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(Se.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(Se.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new Dt.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(Se.debug("pause()"),this._closed){Se.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(Se.debug("resume()"),this._closed){Se.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(Se.debug("replaceTrack() [track:%o]",e),this._closed){if(e&&this._stopTracks)try{e.stop()}catch{}throw new Dt.InvalidStateError("closed")}else if(e?.readyState==="ended")throw new Dt.InvalidStateError("track ended");if(e===this._track){Se.debug("replaceTrack() | same track, ignored");return}await new Promise((t,r)=>{this.safeEmit("@replacetrack",e,t,r)}),this.destroyTrack(),this._track=e,this._track&&this._disableTrackOnPause&&(this._paused?this._paused&&(this._track.enabled=!1):this._track.enabled=!0),this.handleTrack()}async setMaxSpatialLayer(e){if(this._closed)throw new Dt.InvalidStateError("closed");if(this._kind!=="video")throw new Dt.UnsupportedError("not a video Producer");if(typeof e!="number")throw new TypeError("invalid spatialLayer");e!==this._maxSpatialLayer&&(await new Promise((t,r)=>{this.safeEmit("@setmaxspatiallayer",e,t,r)}).catch(()=>{}),this._maxSpatialLayer=e)}async setRtpEncodingParameters(e){if(this._closed)throw new Dt.InvalidStateError("closed");if(typeof e!="object")throw new TypeError("invalid params");await new Promise((t,r)=>{this.safeEmit("@setrtpencodingparameters",e,t,r)})}onTrackEnded(){Se.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{}}};nn.Producer=vs});var jo=P(sn=>{"use strict";Object.defineProperty(sn,"__esModule",{value:!0});sn.Consumer=void 0;var Ql=X(),Fo=se(),Jl=de(),Te=new Ql.Logger("Consumer"),ws=class extends Fo.EnhancedEventEmitter{_id;_localId;_producerId;_closed=!1;_rtpReceiver;_track;_rtpParameters;_paused;_appData;_observer=new Fo.EnhancedEventEmitter;constructor({id:e,localId:t,producerId:r,rtpReceiver:s,track:i,rtpParameters:o,appData:a}){super(),Te.debug("constructor()"),this._id=e,this._localId=t,this._producerId=r,this._rtpReceiver=s,this._track=i,this._rtpParameters=o,this._paused=!i.enabled,this._appData=a??{},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||(Te.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(Te.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new Jl.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(Te.debug("pause()"),this._closed){Te.error("pause() | Consumer closed");return}if(this._paused){Te.debug("pause() | Consumer is already paused");return}this._paused=!0,this._track.enabled=!1,this.emit("@pause"),this._observer.safeEmit("pause")}resume(){if(Te.debug("resume()"),this._closed){Te.error("resume() | Consumer closed");return}if(!this._paused){Te.debug("resume() | Consumer is already resumed");return}this._paused=!1,this._track.enabled=!0,this.emit("@resume"),this._observer.safeEmit("resume")}onTrackEnded(){Te.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{}}};sn.Consumer=ws});var qo=P(on=>{"use strict";Object.defineProperty(on,"__esModule",{value:!0});on.DataProducer=void 0;var Xl=X(),Uo=se(),Zl=de(),xe=new Xl.Logger("DataProducer"),ys=class extends Uo.EnhancedEventEmitter{_id;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new Uo.EnhancedEventEmitter;constructor({id:e,dataChannel:t,sctpStreamParameters:r,appData:s}){super(),xe.debug("constructor()"),this._id=e,this._dataChannel=t,this._sctpStreamParameters=r,this._appData=s??{},this.handleDataChannel()}get id(){return this._id}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get bufferedAmount(){return this._dataChannel.bufferedAmount}get bufferedAmountLowThreshold(){return this._dataChannel.bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._dataChannel.bufferedAmountLowThreshold=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(xe.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(xe.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}send(e){if(xe.debug("send()"),this._closed)throw new Zl.InvalidStateError("closed");this._dataChannel.send(e)}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(xe.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"?xe.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):xe.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(xe.warn('DataChannel "close" event'),this._closed=!0,this.emit("@close"),this.safeEmit("close"),this._observer.safeEmit("close"))}),this._dataChannel.addEventListener("message",()=>{this._closed||xe.warn('DataChannel "message" event in a DataProducer, message discarded')}),this._dataChannel.addEventListener("bufferedamountlow",()=>{this._closed||this.safeEmit("bufferedamountlow")})}};on.DataProducer=ys});var Wo=P(an=>{"use strict";Object.defineProperty(an,"__esModule",{value:!0});an.DataConsumer=void 0;var eu=X(),$o=se(),et=new eu.Logger("DataConsumer"),bs=class extends $o.EnhancedEventEmitter{_id;_dataProducerId;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new $o.EnhancedEventEmitter;constructor({id:e,dataProducerId:t,dataChannel:r,sctpStreamParameters:s,appData:i}){super(),et.debug("constructor()"),this._id=e,this._dataProducerId=t,this._dataChannel=r,this._sctpStreamParameters=s,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||(et.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(et.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(et.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"?et.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):et.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(et.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)})}};an.DataConsumer=bs});var zo=P(cn=>{"use strict";Object.defineProperty(cn,"__esModule",{value:!0});cn.Transport=void 0;var tu=Lo(),ru=X(),Bo=se(),$=de(),Ss=Xe(),lr=be(),nu=No(),su=jo(),iu=qo(),ou=Wo(),q=new ru.Logger("Transport"),Ts=class{consumerOptions;promise;resolve;reject;constructor(e){this.consumerOptions=e,this.promise=new Promise((t,r)=>{this.resolve=t,this.reject=r})}},Rs=class extends Bo.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 tu.AwaitQueue;_pendingConsumerTasks=[];_consumerCreationInProgress=!1;_pendingPauseConsumers=new Map;_consumerPauseInProgress=!1;_pendingResumeConsumers=new Map;_consumerResumeInProgress=!1;_pendingCloseConsumers=new Map;_consumerCloseInProgress=!1;_observer=new Bo.EnhancedEventEmitter;constructor({direction:e,id:t,iceParameters:r,iceCandidates:s,dtlsParameters:i,sctpParameters:o,iceServers:a,iceTransportPolicy:c,additionalSettings:l,appData:d,handlerFactory:u,getSendExtendedRtpCapabilities:p,recvRtpCapabilities:m,canProduceByKind:h}){super(),q.debug("constructor() [id:%s, direction:%s]",t,e),this._id=t,this._direction=e,this._getSendExtendedRtpCapabilities=p,this._recvRtpCapabilities=m,this._canProduceByKind=h,this._maxSctpMessageSize=o?.maxMessageSize;let f=Ss.clone(l)??{};delete f.iceServers,delete f.iceTransportPolicy,delete f.bundlePolicy,delete f.rtcpMuxPolicy,this._handler=u.factory({direction:e,iceParameters:r,iceCandidates:s,dtlsParameters:i,sctpParameters:o,iceServers:a,iceTransportPolicy:c,additionalSettings:f,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){q.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 $.InvalidStateError("closed");return this._handler.getTransportStats()}async restartIce({iceParameters:e}){if(q.debug("restartIce()"),this._closed)throw new $.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(q.debug("updateIceServers()"),this._closed)throw new $.InvalidStateError("closed");if(!Array.isArray(e))throw new TypeError("missing iceServers");return this._awaitQueue.push(async()=>this._handler.updateIceServers(e),"transport.updateIceServers()")}async produce({track:e,streamId:t,encodings:r,codecOptions:s,headerExtensionOptions:i,codec:o,stopTracks:a=!0,disableTrackOnPause:c=!0,zeroRtpOnPause:l=!1,onRtpSender:d,appData:u={}}={}){if(q.debug("produce() [track:%o]",e),this._closed)throw new $.InvalidStateError("closed");if(e){if(this._direction!=="send")throw new $.UnsupportedError("not a sending Transport");if(this._canProduceByKind[e.kind]){if(e.readyState==="ended")throw new $.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(u&&typeof u!="object")throw new TypeError("if given, appData must be an object")}else throw new $.UnsupportedError(`cannot produce ${e.kind}`)}else throw new TypeError("missing track");return this._awaitQueue.push(async()=>{let p;if(r&&!Array.isArray(r))throw TypeError("encodings must be an array");r?.length===0?p=void 0:r&&(p=r.map(g=>{let _={active:!0};return g.active===!1&&(_.active=!1),typeof g.dtx=="boolean"&&(_.dtx=g.dtx),typeof g.scalabilityMode=="string"&&(_.scalabilityMode=g.scalabilityMode),typeof g.scaleResolutionDownBy=="number"&&(_.scaleResolutionDownBy=g.scaleResolutionDownBy),typeof g.maxBitrate=="number"&&(_.maxBitrate=g.maxBitrate),typeof g.maxFramerate=="number"&&(_.maxFramerate=g.maxFramerate),typeof g.adaptivePtime=="boolean"&&(_.adaptivePtime=g.adaptivePtime),typeof g.priority=="string"&&(_.priority=g.priority),typeof g.networkPriority=="string"&&(_.networkPriority=g.networkPriority),_}));let{localId:m,rtpParameters:h,rtpSender:f}=await this._handler.send({track:e,streamId:t,encodings:p,codecOptions:s,headerExtensionOptions:i,codec:o,onRtpSender:d});try{lr.validateAndNormalizeRtpParameters(h);let{id:g}=await new Promise((w,T)=>{this.safeEmit("produce",{kind:e.kind,rtpParameters:h,appData:u},w,T)}),_=new nu.Producer({id:g,localId:m,rtpSender:f,track:e,rtpParameters:h,stopTracks:a,disableTrackOnPause:c,zeroRtpOnPause:l,appData:u});return this._producers.set(_.id,_),this.handleProducer(_),this._observer.safeEmit("newproducer",_),_}catch(g){throw this._handler.stopSending(m).catch(()=>{}),g}},"transport.produce()").catch(p=>{if(a)try{e.stop()}catch{}throw p})}async consume({id:e,producerId:t,kind:r,rtpParameters:s,streamId:i,onRtpReceiver:o,appData:a={}}){if(q.debug("consume()"),this._closed)throw new $.InvalidStateError("closed");if(this._direction!=="recv")throw new $.UnsupportedError("not a receiving Transport");if(typeof e!="string")throw new TypeError("missing id");if(typeof t!="string")throw new TypeError("missing producerId");if(r!=="audio"&&r!=="video")throw new TypeError(`invalid kind '${r}'`);if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(a&&typeof a!="object")throw new TypeError("if given, appData must be an object");let c=Ss.clone(s);if(!lr.canReceive(c,this._recvRtpCapabilities))throw new $.UnsupportedError("cannot consume this Producer");let d=new Ts({id:e,producerId:t,kind:r,rtpParameters:c,streamId:i,onRtpReceiver:o,appData:a});return this._pendingConsumerTasks.push(d),queueMicrotask(()=>{this._closed||this._consumerCreationInProgress===!1&&this.createPendingConsumers()}),d.promise}async produceData({ordered:e=!0,maxPacketLifeTime:t,maxRetransmits:r,label:s="",protocol:i="",appData:o={}}={}){if(q.debug("produceData()"),this._closed)throw new $.InvalidStateError("closed");if(this._direction!=="send")throw new $.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(o&&typeof o!="object")throw new TypeError("if given, appData must be an object")}else throw new $.UnsupportedError("SCTP not enabled by remote Transport");return(t||r)&&(e=!1),this._awaitQueue.push(async()=>{let{dataChannel:a,sctpStreamParameters:c}=await this._handler.sendDataChannel({sctpStreamParameters:{ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:s,protocol:i}});lr.validateAndNormalizeSctpStreamParameters(c);let{id:l}=await new Promise((u,p)=>{this.safeEmit("producedata",{sctpStreamParameters:c,label:s,protocol:i,appData:o},u,p)}),d=new iu.DataProducer({id:l,dataChannel:a,sctpStreamParameters:c,appData:o});return this._dataProducers.set(d.id,d),this.handleDataProducer(d),this._observer.safeEmit("newdataproducer",d),d},"transport.produceData()")}async consumeData({id:e,dataProducerId:t,sctpStreamParameters:r,label:s="",protocol:i="",appData:o={}}){if(q.debug("consumeData()"),this._closed)throw new $.InvalidStateError("closed");if(this._direction!=="recv")throw new $.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(o&&typeof o!="object")throw new TypeError("if given, appData must be an object")}else throw new $.UnsupportedError("SCTP not enabled by remote Transport");let a=Ss.clone(r);return lr.validateAndNormalizeSctpStreamParameters(a),this._awaitQueue.push(async()=>{let{dataChannel:c}=await this._handler.receiveDataChannel({maxMessageSize:this._maxSctpMessageSize,sctpStreamParameters:a,label:s,protocol:i}),l=new ou.DataConsumer({id:e,dataProducerId:t,dataChannel:c,sctpStreamParameters:a,appData:o});return this._dataConsumers.set(l.id,l),this.handleDataConsumer(l),this._observer.safeEmit("newdataconsumer",l),l},"transport.consumeData()")}getDataChannelMaxMessageSize(){return this._handler.getDataChannelMaxMessageSize()}createPendingConsumers(){this._consumerCreationInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingConsumerTasks.length===0){q.debug("createPendingConsumers() | there is no Consumer to be created");return}let e=[...this._pendingConsumerTasks];this._pendingConsumerTasks=[];let t,r=[];for(let s of e){let{id:i,kind:o,rtpParameters:a,streamId:c,onRtpReceiver:l}=s.consumerOptions;r.push({trackId:i,kind:o,rtpParameters:a,streamId:c,onRtpReceiver:l})}try{let s=await this._handler.receive(r);for(let i=0;i<s.length;++i){let o=e[i],a=s[i],{id:c,producerId:l,kind:d,rtpParameters:u,appData:p}=o.consumerOptions,{localId:m,rtpReceiver:h,track:f}=a,g=new su.Consumer({id:c,localId:m,producerId:l,rtpReceiver:h,track:f,rtpParameters:u,appData:p});this._consumers.set(g.id,g),this.handleConsumer(g),!this._probatorConsumerCreated&&!t&&d==="video"&&(t=g),this._observer.safeEmit("newconsumer",g),o.resolve(g)}}catch(s){for(let i of e)i.reject(s)}if(t)try{let s=lr.generateProbatorRtpParameters(t.rtpParameters);await this._handler.receive([{trackId:"probator",kind:"video",rtpParameters:s}]),q.debug("createPendingConsumers() | Consumer for RTP probation created"),this._probatorConsumerCreated=!0}catch(s){q.error("createPendingConsumers() | failed to create Consumer for RTP probation:%o",s)}},"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){q.debug("pausePendingConsumers() | there is no Consumer to be paused");return}let e=Array.from(this._pendingPauseConsumers.values());this._pendingPauseConsumers.clear();try{let t=e.map(r=>r.localId);await this._handler.pauseReceiving(t)}catch(t){q.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){q.debug("resumePendingConsumers() | there is no Consumer to be resumed");return}let e=Array.from(this._pendingResumeConsumers.values());this._pendingResumeConsumers.clear();try{let t=e.map(r=>r.localId);await this._handler.resumeReceiving(t)}catch(t){q.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){q.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){q.error("closePendingConsumers() | failed to close Consumers:",t)}},"transport.closePendingConsumers()").then(()=>{this._consumerCloseInProgress=!1,this._pendingCloseConsumers.size>0&&this.closePendingConsumers()}).catch(()=>{})}handleHandler(){let e=this._handler;e.on("@connect",({dtlsParameters:t},r,s)=>{if(this._closed){s(new $.InvalidStateError("closed"));return}this.safeEmit("connect",{dtlsParameters:t},r,s)}),e.on("@icegatheringstatechange",t=>{t!==this._iceGatheringState&&(q.debug("ICE gathering state changed to %s",t),this._iceGatheringState=t,this._closed||this.safeEmit("icegatheringstatechange",t))}),e.on("@icecandidateerror",t=>{q.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&&(q.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=>q.warn("producer.close() failed:%o",t))}),e.on("@pause",(t,r)=>{this._awaitQueue.push(async()=>await this._handler.pauseSending(e.localId),"producer @pause event").then(t).catch(r)}),e.on("@resume",(t,r)=>{this._awaitQueue.push(async()=>await this._handler.resumeSending(e.localId),"producer @resume event").then(t).catch(r)}),e.on("@replacetrack",(t,r,s)=>{this._awaitQueue.push(async()=>await this._handler.replaceTrack(e.localId,t),"producer @replacetrack event").then(r).catch(s)}),e.on("@setmaxspatiallayer",(t,r,s)=>{this._awaitQueue.push(async()=>await this._handler.setMaxSpatialLayer(e.localId,t),"producer @setmaxspatiallayer event").then(r).catch(s)}),e.on("@setrtpencodingparameters",(t,r,s)=>{this._awaitQueue.push(async()=>await this._handler.setRtpEncodingParameters(e.localId,t),"producer @setrtpencodingparameters event").then(r).catch(s)}),e.on("@getstats",(t,r)=>{if(this._closed)return r(new $.InvalidStateError("closed"));this._handler.getSenderStats(e.localId).then(t).catch(r)})}handleConsumer(e){e.on("@close",()=>{this._consumers.delete(e.id),this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.delete(e.id),!this._closed&&(this._pendingCloseConsumers.set(e.id,e),this._consumerCloseInProgress===!1&&this.closePendingConsumers())}),e.on("@pause",()=>{this._pendingResumeConsumers.has(e.id)&&this._pendingResumeConsumers.delete(e.id),this._pendingPauseConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerPauseInProgress===!1&&this.pausePendingConsumers()})}),e.on("@resume",()=>{this._pendingPauseConsumers.has(e.id)&&this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerResumeInProgress===!1&&this.resumePendingConsumers()})}),e.on("@getstats",(t,r)=>{if(this._closed)return r(new $.InvalidStateError("closed"));this._handler.getReceiverStats(e.localId).then(t).catch(r)})}handleDataProducer(e){e.on("@close",()=>{this._dataProducers.delete(e.id)})}handleDataConsumer(e){e.on("@close",()=>{this._dataConsumers.delete(e.id)})}};cn.Transport=Rs});var dn=P((Cf,Vo)=>{"use strict";var Ho=Vo.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(n){return n.encoding?"rtpmap:%d %s/%s/%s":n.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(n){return n.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(n){return n.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(n){return"extmap:%d"+(n.direction?"/%s":"%v")+(n["encrypt-uri"]?" %s":"%v")+" %s"+(n.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(n){return n.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(n){var e="candidate:%s %d %s %d %s %d typ %s";return e+=n.raddr!=null?" raddr %s rport %d":"%v%v",e+=n.tcptype!=null?" tcptype %s":"%v",n.generation!=null&&(e+=" generation %d"),e+=n["network-id"]!=null?" network-id %d":"%v",e+=n["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(n){var e="ssrc:%d";return n.attribute!=null&&(e+=" %s",n.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(n){return n.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(n){return n.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(n){return"imageattr:%s %s %s"+(n.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(n){return"simulcast:%s %s"+(n.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(n){return"ts-refclk:%s"+(n.clksrcExt!=null?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(n){var e="mediaclk:";return e+=n.id!=null?"id=%s %s":"%v%s",e+=n.mediaClockValue!=null?"=%s":"",e+=n.rateNumerator!=null?" rate=%s":"",e+=n.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(Ho).forEach(function(n){var e=Ho[n];e.forEach(function(t){t.reg||(t.reg=/(.*)/),t.format||(t.format="%s")})})});var Yo=P(Ie=>{"use strict";var Mt=function(n){return String(Number(n))===n?Number(n):n},au=function(n,e,t,r){if(r&&!t)e[r]=Mt(n[1]);else for(var s=0;s<t.length;s+=1)n[s+1]!=null&&(e[t[s]]=Mt(n[s+1]))},cu=function(n,e,t){var r=n.name&&n.names;n.push&&!e[n.push]?e[n.push]=[]:r&&!e[n.name]&&(e[n.name]={});var s=n.push?{}:r?e[n.name]:e;au(t.match(n.reg),s,n.names,n.name),n.push&&e[n.push].push(s)},Go=dn(),du=RegExp.prototype.test.bind(/^([a-z])=(.*)/);Ie.parse=function(n){var e={},t=[],r=e;return n.split(/(\r\n|\r|\n)/).filter(du).forEach(function(s){var i=s[0],o=s.slice(2);i==="m"&&(t.push({rtp:[],fmtp:[]}),r=t[t.length-1]);for(var a=0;a<(Go[i]||[]).length;a+=1){var c=Go[i][a];if(c.reg.test(o))return cu(c,r,o)}}),e.media=t,e};var Ko=function(n,e){var t=e.split(/=(.+)/,2);return t.length===2?n[t[0]]=Mt(t[1]):t.length===1&&e.length>1&&(n[t[0]]=void 0),n};Ie.parseParams=function(n){return n.split(/;\s?/).reduce(Ko,{})};Ie.parseFmtpConfig=Ie.parseParams;Ie.parsePayloads=function(n){return n.toString().split(" ").map(Number)};Ie.parseRemoteCandidates=function(n){for(var e=[],t=n.split(" ").map(Mt),r=0;r<t.length;r+=3)e.push({component:t[r],ip:t[r+1],port:t[r+2]});return e};Ie.parseImageAttributes=function(n){return n.split(" ").map(function(e){return e.substring(1,e.length-1).split(",").reduce(Ko,{})})};Ie.parseSimulcastStreamList=function(n){return n.split(";").map(function(e){return e.split(",").map(function(t){var r,s=!1;return t[0]!=="~"?r=Mt(t):(r=Mt(t.substring(1,t.length)),s=!0),{scid:r,paused:s}})})}});var Jo=P((Ef,Qo)=>{"use strict";var Cs=dn(),lu=/%[sdv%]/g,uu=function(n){var e=1,t=arguments,r=t.length;return n.replace(lu,function(s){if(e>=r)return s;var i=t[e];switch(e+=1,s){case"%%":return"%";case"%s":return String(i);case"%d":return Number(i);case"%v":return""}})},ur=function(n,e,t){var r=e.format instanceof Function?e.format(e.push?t:t[e.name]):e.format,s=[n+"="+r];if(e.names)for(var i=0;i<e.names.length;i+=1){var o=e.names[i];e.name?s.push(t[e.name][o]):s.push(t[e.names[i]])}else s.push(t[e.name]);return uu.apply(null,s)},pu=["v","o","s","i","u","e","p","c","b","t","r","z","a"],hu=["i","c","b","a"];Qo.exports=function(n,e){e=e||{},n.version==null&&(n.version=0),n.name==null&&(n.name=" "),n.media.forEach(function(i){i.payloads==null&&(i.payloads="")});var t=e.outerOrder||pu,r=e.innerOrder||hu,s=[];return t.forEach(function(i){Cs[i].forEach(function(o){o.name in n&&n[o.name]!=null?s.push(ur(i,o,n)):o.push in n&&n[o.push]!=null&&n[o.push].forEach(function(a){s.push(ur(i,o,a))})})}),n.media.forEach(function(i){s.push(ur("m",Cs.m[0],i)),r.forEach(function(o){Cs[o].forEach(function(a){a.name in i&&i[a.name]!=null?s.push(ur(o,a,i)):a.push in i&&i[a.push]!=null&&i[a.push].forEach(function(c){s.push(ur(o,a,c))})})})}),s.join(`\r
|
|
6
6
|
`)+`\r
|
|
7
|
-
`}});var ke=E(we=>{"use strict";var Qe=Go(),fl=Yo(),ml=ss();we.grammar=ml;we.write=fl;we.parse=Qe.parse;we.parseParams=Qe.parseParams;we.parseFmtpConfig=Qe.parseFmtpConfig;we.parsePayloads=Qe.parsePayloads;we.parseRemoteCandidates=Qe.parseRemoteCandidates;we.parseImageAttributes=Qe.parseImageAttributes;we.parseSimulcastStreamList=Qe.parseSimulcastStreamList});var Je=E(Sn=>{"use strict";Object.defineProperty(Sn,"__esModule",{value:!0});Sn.parse=_l;var gl=new RegExp("^[LS]([1-9]\\d{0,1})T([1-9]\\d{0,1})");function _l(s){let e=gl.exec(s??"");return e?{spatialLayers:Number(e[1]),temporalLayers:Number(e[2])}:{spatialLayers:1,temporalLayers:1}}});var Xo=E(Fe=>{"use strict";Object.defineProperty(Fe,"__esModule",{value:!0});Fe.OfferMediaSection=Fe.AnswerMediaSection=Fe.MediaSection=void 0;var vl=ke(),Qo=Ge(),ar=class{_mediaObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r}){if(this._mediaObject={type:"",port:0,protocol:"",payloads:"",rtp:[],fmtp:[]},e&&this.setIceParameters(e),t){this._mediaObject.candidates=[];for(let 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"}r&&this.setDtlsRole(r.role)}get mid(){return String(this._mediaObject.mid)}get closed(){return this._mediaObject.port===0}getObject(){return this._mediaObject}setIceParameters(e){this._mediaObject.iceUfrag=e.usernameFragment,this._mediaObject.icePwd=e.password}pause(){this._mediaObject.direction="inactive"}disable(){this.pause()}close(){this.disable(),this._mediaObject.port=0,delete this._mediaObject.candidates,delete this._mediaObject.endOfCandidates,delete this._mediaObject.iceUfrag,delete this._mediaObject.icePwd,delete this._mediaObject.iceOptions,this._mediaObject.rtp=[],this._mediaObject.fmtp=[],delete this._mediaObject.rtcp,delete this._mediaObject.rtcpFb,delete this._mediaObject.ssrcs,delete this._mediaObject.ssrcGroups,delete this._mediaObject.simulcast,delete this._mediaObject.simulcast_03,delete this._mediaObject.rids,delete this._mediaObject.extmapAllowMixed}};Fe.MediaSection=ar;var Tn=class extends ar{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:n,plainRtpParameters:i,offerMediaObject:o,offerRtpParameters:a,answerRtpParameters:c,codecOptions:u}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r}),this._mediaObject.mid=String(o.mid),this._mediaObject.type=o.type,this._mediaObject.protocol=o.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),o.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:Jo(d),rate:d.clockRate};d.channels>1&&(l.encoding=d.channels),this._mediaObject.rtp.push(l);let p=Qo.clone(d.parameters)??{},m=Qo.clone(d.rtcpFeedback)??[];if(u){let{opusStereo:f,opusFec:g,opusDtx:v,opusMaxPlaybackRate:y,opusMaxAverageBitrate:k,opusPtime:I,opusNack:_,videoGoogleStartBitrate:w,videoGoogleMaxBitrate:N,videoGoogleMinBitrate:$}=u,X=a.codecs.find(U=>U.payloadType===d.payloadType);switch(d.mimeType.toLowerCase()){case"audio/opus":case"audio/multiopus":{f!==void 0&&(X.parameters["sprop-stereo"]=f?1:0,p.stereo=f?1:0),g!==void 0&&(X.parameters.useinbandfec=g?1:0,p.useinbandfec=g?1:0),v!==void 0&&(X.parameters.usedtx=v?1:0,p.usedtx=v?1:0),y!==void 0&&(p.maxplaybackrate=y),k!==void 0&&(p.maxaveragebitrate=k),I!==void 0&&(X.parameters.ptime=I,p.ptime=I),_||(X.rtcpFeedback=X.rtcpFeedback.filter(U=>U.type!=="nack"||U.parameter),m=m.filter(U=>U.type!=="nack"||U.parameter));break}case"video/vp8":case"video/vp9":case"video/h264":case"video/h265":case"video/av1":{w!==void 0&&(p["x-google-start-bitrate"]=w),N!==void 0&&(p["x-google-max-bitrate"]=N),$!==void 0&&(p["x-google-min-bitrate"]=$);break}}}let h={payload:d.payloadType,config:""};for(let f of Object.keys(p))h.config&&(h.config+=";"),h.config+=`${f}=${p[f]}`;h.config&&this._mediaObject.fmtp.push(h);for(let f of m)this._mediaObject.rtcpFb.push({payload:d.payloadType,type:f.type,subtype:f.parameter})}this._mediaObject.payloads=c.codecs.map(d=>d.payloadType).join(" "),this._mediaObject.ext=[];for(let d of c.headerExtensions)(o.ext??[]).some(p=>p.uri===d.uri)&&this._mediaObject.ext.push({uri:d.uri,value:d.id});if(o.extmapAllowMixed==="extmap-allow-mixed"&&(this._mediaObject.extmapAllowMixed="extmap-allow-mixed"),o.simulcast){this._mediaObject.simulcast={dir1:"recv",list1:o.simulcast.list1},this._mediaObject.rids=[];for(let d of o.rids??[])d.direction==="send"&&this._mediaObject.rids.push({id:d.id,direction:"recv"})}else if(o.simulcast_03){this._mediaObject.simulcast_03={value:o.simulcast_03.value.replace(/send/g,"recv")},this._mediaObject.rids=[];for(let d of o.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 o.sctpPort=="number"?(this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=n.port,this._mediaObject.maxMessageSize=n.maxMessageSize):o.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 r=this._mediaObject.simulcast.list1,n=vl.parseSimulcastStreamList(r);for(let i of n)for(let o of i)o.paused=!t[o.scid]?.active;this._mediaObject.simulcast.list1=n.map(i=>i.map(o=>`${o.paused?"~":""}${o.scid}`).join(",")).join(";")}};Fe.AnswerMediaSection=Tn;var Rn=class extends ar{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:n,plainRtpParameters:i,mid:o,kind:a,offerRtpParameters:c,streamId:u,trackId:d}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r}),this._mediaObject.mid=String(o),this._mediaObject.type=a,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",a){case"audio":case"video":{this._mediaObject.direction="sendonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[],this._mediaObject.msid=[{id:u,appdata:d}];for(let h of c.codecs){let f={payload:h.payloadType,codec:Jo(h),rate:h.clockRate};h.channels>1&&(f.encoding=h.channels),this._mediaObject.rtp.push(f);let g={payload:h.payloadType,config:""};for(let v of Object.keys(h.parameters??{}))g.config&&(g.config+=";"),g.config+=`${v}=${h.parameters[v]}`;g.config&&this._mediaObject.fmtp.push(g);for(let v of h.rtcpFeedback)this._mediaObject.rtcpFb.push({payload:h.payloadType,type:v.type,subtype:v.parameter})}this._mediaObject.payloads=c.codecs.map(h=>h.payloadType).join(" "),this._mediaObject.ext=[];for(let h of c.headerExtensions)this._mediaObject.ext.push({uri:h.uri,value:h.id});this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";let l=c.encodings[0],p=l.ssrc,m=l.rtx?.ssrc;this._mediaObject.ssrcs=[],this._mediaObject.ssrcGroups=[],p&&c.rtcp.cname&&this._mediaObject.ssrcs.push({id:p,attribute:"cname",value:c.rtcp.cname}),m&&(c.rtcp.cname&&this._mediaObject.ssrcs.push({id:m,attribute:"cname",value:c.rtcp.cname}),p&&this._mediaObject.ssrcGroups.push({semantics:"FID",ssrcs:`${p} ${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"}};Fe.OfferMediaSection=Rn;function Jo(s){let t=new RegExp("^(audio|video)/(.+)","i").exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");return t[2]}});var Pt=E(os=>{"use strict";Object.defineProperty(os,"__esModule",{value:!0});os.RemoteSdp=void 0;var wl=ke(),yl=K(),ns=Xo(),bl=kn(),Sl=["av1","h264"],is=new yl.Logger("RemoteSdp"),Cn=class{_iceParameters;_iceCandidates;_dtlsParameters;_sctpParameters;_plainRtpParameters;_mediaSections=[];_midToIndex=new Map;_firstMid;_sdpObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:n,plainRtpParameters:i}){if(this._iceParameters=e,this._iceCandidates=t,this._dtlsParameters=r,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${bl.version}`},name:"-",timing:{start:0,stop:0},media:[]},this._sdpObject.iceOptions="ice2",e?.iceLite&&(this._sdpObject.icelite="ice-lite"),r){this._sdpObject.msidSemantic={semantic:"WMS",token:"*"};let o=this._dtlsParameters.fingerprints.length;this._sdpObject.fingerprint={type:r.fingerprints[o-1].algorithm,hash:r.fingerprints[o-1].value},this._sdpObject.groups=[{type:"BUNDLE",mids:""}]}i&&(this._sdpObject.origin.address=i.ip,this._sdpObject.origin.ipVer=i.ipVersion)}updateIceParameters(e){is.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){is.debug("updateDtlsRole() [role:%s]",e),this._dtlsParameters.role=e;for(let t of this._mediaSections)t.setDtlsRole(e)}setSessionExtmapAllowMixed(){is.debug("setSessionExtmapAllowMixed()"),this._sdpObject.extmapAllowMixed="extmap-allow-mixed"}getNextMediaSectionIdx(){for(let e=0;e<this._mediaSections.length;++e){let t=this._mediaSections[e];if(t.closed)return{idx:e,reuseMid:t.mid}}return{idx:this._mediaSections.length}}send({offerMediaObject:e,reuseMid:t,offerRtpParameters:r,answerRtpParameters:n,codecOptions:i}){let o=new ns.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,offerMediaObject:e,offerRtpParameters:r,answerRtpParameters:n,codecOptions:i}),a=o.getObject();a.rtp.find(u=>Sl.includes(u.codec.toLowerCase()))||(a.ext=a.ext?.filter(u=>u.uri!=="https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension")),t?this.replaceMediaSection(o,t):this._midToIndex.has(o.mid)?this.replaceMediaSection(o):this.addMediaSection(o)}receive({mid:e,kind:t,offerRtpParameters:r,streamId:n,trackId:i}){this.setSessionExtmapAllowMixed();let o=new ns.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,mid:e,kind:t,offerRtpParameters:r,streamId:n,trackId:i}),a=this._mediaSections.find(c=>c.closed&&c.getObject().type===t);a?this.replaceMediaSection(o,a.mid):this.addMediaSection(o)}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?(is.debug("closeMediaSection() | cannot close first media section, disabling it instead [mid:%s]",e),this.disableMediaSection(e),!1):(t.close(),this.regenerateBundleMids(),!0)}muxMediaSectionSimulcast(e,t){let r=this.findMediaSection(e);r.muxSimulcastStreams(t),this.replaceMediaSection(r)}sendSctpAssociation({offerMediaObject:e}){let t=new ns.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 ns.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++,wl.write(this._sdpObject)}addMediaSection(e){this._firstMid||(this._firstMid=e.mid),this._mediaSections.push(e),this._midToIndex.set(e.mid,this._mediaSections.length-1),this._sdpObject.media.push(e.getObject()),this.regenerateBundleMids()}replaceMediaSection(e,t){if(typeof t=="string"){let r=this._midToIndex.get(t);if(r===void 0)throw new Error(`no media section found for reuseMid '${t}'`);let n=this._mediaSections[r];this._mediaSections[r]=e,this._midToIndex.delete(n.mid),this._midToIndex.set(e.mid,r),this._sdpObject.media[r]=e.getObject(),this.regenerateBundleMids()}else{let r=this._midToIndex.get(e.mid);if(r===void 0)throw new Error(`no media section found with mid '${e.mid}'`);this._mediaSections[r]=e,this._sdpObject.media[r]=e.getObject()}}findMediaSection(e){let t=this._midToIndex.get(e);if(t===void 0)throw new Error(`no media section found with mid '${e}'`);return this._mediaSections[t]}regenerateBundleMids(){this._dtlsParameters&&(this._sdpObject.groups[0].mids=this._mediaSections.filter(e=>!e.closed).map(e=>e.mid).join(" "))}};os.RemoteSdp=Cn});var xt=E(Xe=>{"use strict";Object.defineProperty(Xe,"__esModule",{value:!0});Xe.extractRtpCapabilities=Tl;Xe.extractDtlsParameters=Rl;Xe.getCname=Cl;Xe.applyCodecParameters=kl;Xe.addHeaderExtension=El;var Zo=ke();function Tl({sdpObject:s}){let e=new Map,t=new Map;for(let n of s.media){let i=n.type;switch(i){case"audio":case"video":break;default:continue}for(let o of n.rtp){let a={kind:i,mimeType:`${i}/${o.codec}`,preferredPayloadType:o.payload,clockRate:o.rate,channels:o.encoding,parameters:{},rtcpFeedback:[]};e.set(a.preferredPayloadType,a)}for(let o of n.fmtp??[]){let a=Zo.parseParams(o.config),c=e.get(o.payload);c&&(a?.hasOwnProperty("profile-level-id")&&(a["profile-level-id"]=String(a["profile-level-id"])),c.parameters=a)}for(let o of n.rtcpFb??[]){let a={type:o.type,parameter:o.subtype};if(a.parameter||delete a.parameter,o.payload!=="*"){let c=e.get(Number(o.payload));if(!c)continue;c.rtcpFeedback.push(a)}else for(let c of e.values())c.kind===i&&!/.+\/rtx$/i.test(c.mimeType)&&c.rtcpFeedback.push(a)}for(let o of n.ext??[]){if(o["encrypt-uri"])continue;let a={kind:i,uri:o.uri,preferredId:o.value};t.set(a.preferredId,a)}}return{codecs:Array.from(e.values()),headerExtensions:Array.from(t.values())}}function Rl({sdpObject:s}){let e=s.setup,t=s.fingerprint;if(!e||!t){let i=(s.media??[]).find(o=>o.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 r;switch(e){case"active":{r="client";break}case"passive":{r="server";break}case"actpass":{r="auto";break}}return{role:r,fingerprints:[{algorithm:t.type,value:t.hash}]}}function Cl({offerMediaObject:s}){let e=(s.ssrcs??[]).find(t=>t.attribute==="cname");return e?e.value:""}function kl({offerRtpParameters:s,answerMediaObject:e}){for(let t of s.codecs){let r=t.mimeType.toLowerCase();if(r!=="audio/opus"||!(e.rtp??[]).find(a=>a.payload===t.payloadType))continue;e.fmtp=e.fmtp??[];let i=e.fmtp.find(a=>a.payload===t.payloadType);i||(i={payload:t.payloadType,config:""},e.fmtp.push(i));let o=Zo.parseParams(i.config);if(r==="audio/opus"){let a=t.parameters?.["sprop-stereo"];a!==void 0&&(o.stereo=Number(a)?1:0)}i.config="";for(let a of Object.keys(o))i.config&&(i.config+=";"),i.config+=`${a}=${o[a]}`}}function El({offerMediaObject:s,headerExtensionUri:e,headerExtensionId:t}){s.ext||(s.ext=[]),s.ext.push({uri:e,value:t})}});var It=E(as=>{"use strict";Object.defineProperty(as,"__esModule",{value:!0});as.getRtpEncodings=Pl;as.addLegacySimulcast=xl;function Pl({offerMediaObject:s,codecs:e}){let t=new Set;for(let i of s.ssrcs??[]){let o=i.id;o&&t.add(o)}if(t.size===0)throw new Error("no a=ssrc lines found");let r=new Map;for(let i of s.ssrcGroups??[]){if(i.semantics!=="FID")continue;let o=i.ssrcs.split(/\s+/),a=Number(o[0]),c=Number(o[1]);t.has(a)&&(t.delete(a),t.delete(c),r.set(a,c))}for(let i of t)r.set(i,void 0);let n=[];for(let[i,o]of r){let a={ssrc:i};o&&e.length>1&&(a.rtx={ssrc:o}),n.push(a)}return n}function xl({offerMediaObject:s,numStreams:e}){if(e<=1)throw new TypeError("numStreams must be greater than 1");let t=(s.ssrcs??[]).find(l=>l.attribute==="msid");if(!t)throw new Error("a=ssrc line with msid information not found");let[r,n]=t.value.split(" "),i=Number(t.id),o;(s.ssrcGroups??[]).some(l=>{if(l.semantics!=="FID")return!1;let p=l.ssrcs.split(/\s+/);return Number(p[0])===i?(o=Number(p[1]),!0):!1});let a=(s.ssrcs??[]).find(l=>l.attribute==="cname");if(!a)throw new Error("a=ssrc line with cname information not found");let c=a.value,u=[],d=[];for(let l=0;l<e;++l)u.push(i+l),o&&d.push(o+l);s.ssrcGroups=[],s.ssrcs=[],s.ssrcGroups.push({semantics:"SIM",ssrcs:u.join(" ")});for(let l of u)s.ssrcs.push({id:l,attribute:"cname",value:c}),s.ssrcs.push({id:l,attribute:"msid",value:`${r} ${n}`});for(let l=0;l<d.length;++l){let p=u[l],m=d[l];s.ssrcs.push({id:m,attribute:"cname",value:c}),s.ssrcs.push({id:m,attribute:"msid",value:`${r} ${n}`}),s.ssrcGroups.push({semantics:"FID",ssrcs:`${p} ${m}`})}}});var Dt=E(cr=>{"use strict";Object.defineProperty(cr,"__esModule",{value:!0});cr.addNackSupportForOpus=Il;cr.addHeaderExtensionSupport=Dl;cr.getMsidStreamIdAndTrackId=Al;function Il(s){for(let e of s.codecs??[])(e.mimeType.toLowerCase()==="audio/opus"||e.mimeType.toLowerCase()==="audio/multiopus")&&!e.rtcpFeedback?.some(t=>t.type==="nack"&&!t.parameter)&&(e.rtcpFeedback||(e.rtcpFeedback=[]),e.rtcpFeedback.push({type:"nack"}))}function Dl(s,e){let t,r=s.headerExtensions?.find(i=>i.uri===e.uri);if(r){if(r.kind===e.kind)return;t=r.preferredId}if(s.headerExtensions||(s.headerExtensions=[]),t===void 0){t=1;let i=new Set(s.headerExtensions.map(o=>o.preferredId));for(;i.has(t);)++t}let n={kind:e.kind,uri:e.uri,preferredId:t,preferredEncrypt:!1,direction:e.direction};s.headerExtensions.push(n)}function Al(s){if(!s||typeof s!="string")return{msidStreamId:void 0,msidTrackId:void 0};let[e,t]=s.trim().split(/\s+/);return e?{msidStreamId:e,msidTrackId:t}:{msidStreamId:void 0,msidTrackId:void 0}}});var sa=E(cs=>{"use strict";Object.defineProperty(cs,"__esModule",{value:!0});cs.Chrome111=void 0;var ye=ke(),Ml=ee(),Ll=K(),dr=ge(),Ol=ie(),Nl=Je(),Fl=Pt(),ur=xt(),ea=It(),En=Dt(),P=new Ll.Logger("Chrome111"),ta="Chrome111",ra={OS:65535,MIS:65535},Pn=class s extends Ml.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:ta,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{P.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e,sendEncodings:[{scalabilityMode:"L3T3"}]});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let n=ye.parse(r.sdp);return s.getLocalRtpCapabilities(n)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(P.debug("getNativeSctpCapabilities()"),{numStreams:ra})}}static getLocalRtpCapabilities(e,t=[]){let r=ur.extractRtpCapabilities({sdpObject:e});dr.validateAndNormalizeRtpCapabilities(r),En.addNackSupportForOpus(r);for(let n of t)En.addHeaderExtensionSupport(r,n);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,getSendExtendedRtpCapabilities:u}){super(),P.debug("constructor()"),this._direction=e,this._remoteSdp=new Fl.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=u,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:o??[],iceTransportPolicy:a??"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):(P.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return ta}close(){if(P.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(),P.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),P.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});P.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};P.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};P.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();P.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:n,headerExtensionOptions:i,codec:o,onRtpSender:a}){if(this.assertNotClosed(),this.assertSendDirection(),P.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1){let I=1;for(let _ of r){let w=_.scalabilityMode?(0,Nl.parse)(_.scalabilityMode).temporalLayers:3;w>I&&(I=w)}r.forEach((_,w)=>{_.rid=`r${w}`,_.scalabilityMode=`L1T${I}`})}let c=this._remoteSdp.getNextMediaSectionIdx(),u=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});a&&a(u.sender);let d=await this._pc.createOffer(),l=ye.parse(d.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let p=[];p.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let m=s.getLocalRtpCapabilities(l,p),h=this._getSendExtendedRtpCapabilities(m),f=dr.getSendingRtpParameters(e.kind,h);f.codecs=dr.reduceCodecs(f.codecs,o);let g=dr.getSendingRemoteRtpParameters(e.kind,h);if(g.codecs=dr.reduceCodecs(g.codecs,o),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l}),i?.absCaptureTime){let I=l.media[c.idx];ur.addHeaderExtension({offerMediaObject:I,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(_=>_.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:ye.write(l)}}P.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let v=u.mid;f.mid=v,l=ye.parse(this._pc.localDescription.sdp);let y=l.media[c.idx];if(f.rtcp.cname=ur.getCname({offerMediaObject:y}),f.msid=`${t??this._sendStream.id} ${e.id}`,!r)f.encodings=ea.getRtpEncodings({offerMediaObject:y,codecs:f.codecs});else if(r.length===1){let I=ea.getRtpEncodings({offerMediaObject:y,codecs:f.codecs});Object.assign(I[0],r[0]),f.encodings=I}else f.encodings=r;this._remoteSdp.send({offerMediaObject:y,reuseMid:c.reuseMid,offerRtpParameters:f,answerRtpParameters:g,codecOptions:n});let k={type:"answer",sdp:this._remoteSdp.getSdp()};return P.debug("send() | calling pc.setRemoteDescription() [answer:%o]",k),await this._pc.setRemoteDescription(k),this._mapMidTransceiver.set(v,u),{localId:v,rtpParameters:f,rtpSender:u.sender}}async stopSending(e){if(this.assertSendDirection(),P.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();P.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};P.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),P.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();P.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};P.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),P.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();P.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};P.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?P.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):P.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),P.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{c<=t?a.active=!0:a.active=!1}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();P.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};P.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),P.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{n.encodings[c]={...a,...t}}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();P.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};P.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}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};P.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%ra.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),o=ye.parse(i.sdp),a=o.media.find(u=>u.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),P.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:a});let c={type:"answer",sdp:this._remoteSdp.getSdp()};P.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:r,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let a of e){let{trackId:c,kind:u,rtpParameters:d,streamId:l}=a;P.debug("receive() [trackId:%s, kind:%s]",c,u);let p=d.mid??String(this._mapMidTransceiver.size);r.set(c,p);let{msidStreamId:m}=En.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:p,kind:u,offerRtpParameters:d,streamId:l??m??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};P.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let a of e){let{trackId:c,onRtpReceiver:u}=a;if(u){let d=r.get(c),l=this._pc.getTransceivers().find(p=>p.mid===d);if(!l)throw new Error("transceiver not found");u(l.receiver)}}let i=await this._pc.createAnswer(),o=ye.parse(i.sdp);for(let a of e){let{trackId:c,rtpParameters:u}=a,d=r.get(c),l=o.media.find(p=>String(p.mid)===d);ur.applyCodecParameters({offerRtpParameters:u,answerMediaObject:l})}i={type:"answer",sdp:ye.write(o)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),P.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let a of e){let{trackId:c}=a,u=r.get(c),d=this._pc.getTransceivers().find(l=>l.mid===u);if(d)this._mapMidTransceiver.set(u,d),t.push({localId:u,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){P.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()};P.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();P.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){P.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()};P.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();P.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){P.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()};P.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();P.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c}=t,u={negotiated:!0,id:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c,protocol:n};P.debug("receiveDataChannel() [options:%o]",u);let d=this._pc.createDataChannel(r,u);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};P.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let p=await this._pc.createAnswer(),m=ye.parse(p.sdp),h=m.media.find(f=>f.type==="application");h.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),p={type:"answer",sdp:ye.write(m)},P.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",p),await this._pc.setLocalDescription(p),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=ye.parse(this._pc.localDescription.sdp));let r=ur.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:r},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 Ol.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')}};cs.Chrome111=Pn});var oa=E(ds=>{"use strict";Object.defineProperty(ds,"__esModule",{value:!0});ds.Chrome74=void 0;var oe=ke(),jl=K(),Ul=ee(),lr=ge(),ql=ie(),$l=Je(),Wl=Pt(),pr=xt(),xn=It(),In=Dt(),R=new jl.Logger("Chrome74"),na="Chrome74",ia={OS:1024,MIS:1024},Dn=class s extends Ul.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:na,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{R.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let n=oe.parse(r.sdp);return s.getLocalRtpCapabilities(n)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(R.debug("getNativeSctpCapabilities()"),{numStreams:ia})}}static getLocalRtpCapabilities(e,t=[]){let r=pr.extractRtpCapabilities({sdpObject:e});lr.validateAndNormalizeRtpCapabilities(r),In.addNackSupportForOpus(r);for(let n of t)In.addHeaderExtensionSupport(r,n);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,getSendExtendedRtpCapabilities:u}){super(),R.debug("constructor()"),this._direction=e,this._remoteSdp=new Wl.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=u,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:o??[],iceTransportPolicy:a??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(R.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return na}close(){if(R.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),R.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),R.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});R.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:n,headerExtensionOptions:i,codec:o}){this.assertNotClosed(),this.assertSendDirection(),R.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((_,w)=>{_.rid=`r${w}`});let a=this._remoteSdp.getNextMediaSectionIdx(),c=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r}),u=await this._pc.createOffer(),d=oe.parse(u.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 p=s.getLocalRtpCapabilities(d,l),m=this._getSendExtendedRtpCapabilities(p),h=lr.getSendingRtpParameters(e.kind,m);h.codecs=lr.reduceCodecs(h.codecs,o);let f=lr.getSendingRemoteRtpParameters(e.kind,m);f.codecs=lr.reduceCodecs(f.codecs,o),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:d});let g=!1,v=(0,$l.parse)((r??[{}])[0].scalabilityMode),y;r?.length===1&&v.spatialLayers>1&&h.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(R.debug("send() | enabling legacy simulcast for VP9 SVC"),g=!0,d=oe.parse(u.sdp),y=d.media[a.idx],xn.addLegacySimulcast({offerMediaObject:y,numStreams:v.spatialLayers}),u={type:"offer",sdp:oe.write(d)}),R.debug("send() | calling pc.setLocalDescription() [offer:%o]",u),i?.absCaptureTime&&(y=d.media[a.idx],pr.addHeaderExtension({offerMediaObject:y,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:f.headerExtensions.find(_=>_.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),u={type:"offer",sdp:oe.write(d)}),await this._pc.setLocalDescription(u);let k=c.mid;if(h.mid=k,d=oe.parse(this._pc.localDescription.sdp),y=d.media[a.idx],h.rtcp.cname=pr.getCname({offerMediaObject:y}),h.msid=`${t??this._sendStream.id} ${e.id}`,!r)h.encodings=xn.getRtpEncodings({offerMediaObject:y,codecs:h.codecs});else if(r.length===1){let _=xn.getRtpEncodings({offerMediaObject:y,codecs:h.codecs});Object.assign(_[0],r[0]),g&&(_=[_[0]]),h.encodings=_}else h.encodings=r;if(h.encodings.length>1&&(h.codecs[0].mimeType.toLowerCase()==="video/vp8"||h.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let _ of h.encodings)_.scalabilityMode?_.scalabilityMode=`L1T${v.temporalLayers}`:_.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:y,reuseMid:a.reuseMid,offerRtpParameters:h,answerRtpParameters:f,codecOptions:n});let I={type:"answer",sdp:this._remoteSdp.getSdp()};return R.debug("send() | calling pc.setRemoteDescription() [answer:%o]",I),await this._pc.setRemoteDescription(I),this._mapMidTransceiver.set(k,c),{localId:k,rtpParameters:h,rtpSender:c.sender}}async stopSending(e){if(this.assertSendDirection(),R.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let 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 r=await this._pc.createOffer();R.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);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(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();R.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let 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 r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),R.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{c<=t?a.active=!0:a.active=!1}),await r.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 o={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),R.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{n.encodings[c]={...a,...t}}),await r.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 o={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};R.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%ia.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),o=oe.parse(i.sdp),a=o.media.find(u=>u.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),R.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:a});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:r,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let a of e){let{trackId:c,kind:u,rtpParameters:d,streamId:l}=a;R.debug("receive() [trackId:%s, kind:%s]",c,u);let p=d.mid??String(this._mapMidTransceiver.size);r.set(c,p);let{msidStreamId:m}=In.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:p,kind:u,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);let i=await this._pc.createAnswer(),o=oe.parse(i.sdp);for(let a of e){let{trackId:c,rtpParameters:u}=a,d=r.get(c),l=o.media.find(p=>String(p.mid)===d);pr.applyCodecParameters({offerRtpParameters:u,answerMediaObject:l})}i={type:"answer",sdp:oe.write(o)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),R.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let a of e){let{trackId:c}=a,u=r.get(c),d=this._pc.getTransceivers().find(l=>l.mid===u);if(d)this._mapMidTransceiver.set(u,d),t.push({localId:u,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){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 r=await this._pc.createAnswer();R.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);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 r=await this._pc.createAnswer();R.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let 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 r=await this._pc.createAnswer();R.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c}=t,u={negotiated:!0,id:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c,protocol:n};R.debug("receiveDataChannel() [options:%o]",u);let d=this._pc.createDataChannel(r,u);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 p=await this._pc.createAnswer(),m=oe.parse(p.sdp),h=m.media.find(f=>f.type==="application");h.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),p={type:"answer",sdp:oe.write(m)},R.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",p),await this._pc.setLocalDescription(p),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=oe.parse(this._pc.localDescription.sdp));let r=pr.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:r},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 ql.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')}};ds.Chrome74=Dn});var la=E(ls=>{"use strict";Object.defineProperty(ls,"__esModule",{value:!0});ls.Firefox120=void 0;var Ee=ke(),Bl=ee(),zl=K(),aa=ie(),hr=ge(),Hl=Je(),Vl=Pt(),us=xt(),ca=It(),Gl=Dt(),x=new zl.Logger("Firefox120"),da="Firefox120",ua={OS:16,MIS:2048},An=class s extends Bl.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:da,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{x.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"}),r=document.createElement("canvas");r.getContext("2d");let i=r.captureStream().getVideoTracks()[0];try{t.addTransceiver("audio",{direction:e}),t.addTransceiver(i,{direction:e,sendEncodings:[{rid:"r0",maxBitrate:1e5},{rid:"r1",maxBitrate:5e5}]});let o=await t.createOffer();try{r.remove()}catch{}try{i.stop()}catch{}try{t.close()}catch{}t=void 0;let a=Ee.parse(o.sdp);return s.getLocalRtpCapabilities(a)}catch(o){try{r.remove()}catch{}try{i.stop()}catch{}try{t?.close()}catch{}throw t=void 0,o}},getNativeSctpCapabilities:async()=>(x.debug("getNativeSctpCapabilities()"),{numStreams:ua})}}static getLocalRtpCapabilities(e){let t=us.extractRtpCapabilities({sdpObject:e});return hr.validateAndNormalizeRtpCapabilities(t),t}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,getSendExtendedRtpCapabilities:u}){super(),x.debug("constructor()"),this._direction=e,this._remoteSdp=new Vl.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=u,this._pc=new RTCPeerConnection({iceServers:o??[],iceTransportPolicy:a??"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):(x.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return da}close(){if(x.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 aa.UnsupportedError("not supported")}async restartIce(e){if(this.assertNotClosed(),x.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});x.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};x.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};x.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();x.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:n,codec:i,onRtpSender:o}){this.assertNotClosed(),this.assertSendDirection(),x.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((y,k)=>{y.rid=`r${k}`});let a=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});o&&o(a.sender);let c=await this._pc.createOffer(),u=Ee.parse(c.sdp);u.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let d=s.getLocalRtpCapabilities(u),l=this._getSendExtendedRtpCapabilities(d),p=hr.getSendingRtpParameters(e.kind,l);p.codecs=hr.reduceCodecs(p.codecs,i);let m=hr.getSendingRemoteRtpParameters(e.kind,l);m.codecs=hr.reduceCodecs(m.codecs,i),this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:u});let h=(0,Hl.parse)((r??[{}])[0].scalabilityMode);x.debug("send() | calling pc.setLocalDescription() [offer:%o]",c),await this._pc.setLocalDescription(c);let f=a.mid;p.mid=f,u=Ee.parse(this._pc.localDescription.sdp);let g=u.media[u.media.length-1];if(p.rtcp.cname=us.getCname({offerMediaObject:g}),p.msid=`${t??this._sendStream.id} ${e.id}`,!r)p.encodings=ca.getRtpEncodings({offerMediaObject:g,codecs:p.codecs});else if(r.length===1){let y=ca.getRtpEncodings({offerMediaObject:g,codecs:p.codecs});Object.assign(y[0],r[0]),p.encodings=y}else p.encodings=r;if(p.encodings.length>1&&(p.codecs[0].mimeType.toLowerCase()==="video/vp8"||p.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let y of p.encodings)y.scalabilityMode?y.scalabilityMode=`L1T${h.temporalLayers}`:y.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:g,offerRtpParameters:p,answerRtpParameters:m,codecOptions:n});let v={type:"answer",sdp:this._remoteSdp.getSdp()};return x.debug("send() | calling pc.setRemoteDescription() [answer:%o]",v),await this._pc.setRemoteDescription(v),this._mapMidTransceiver.set(f,a),{localId:f,rtpParameters:p,rtpSender:a.sender}}async stopSending(e){if(this.assertSendDirection(),x.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated transceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.disableMediaSection(t.mid);let r=await this._pc.createOffer();x.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};x.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),x.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();x.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};x.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),x.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let r=await this._pc.createOffer();x.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};x.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?x.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):x.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),x.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated transceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{c<=t?a.active=!0:a.active=!1}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();x.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};x.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),x.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{n.encodings[c]={...a,...t}}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();x.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};x.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}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};x.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%ua.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),o=Ee.parse(i.sdp),a=o.media.find(u=>u.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:o}),x.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:a});let c={type:"answer",sdp:this._remoteSdp.getSdp()};x.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:r,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let a of e){let{trackId:c,kind:u,rtpParameters:d,streamId:l}=a;x.debug("receive() [trackId:%s, kind:%s]",c,u);let p=d.mid??String(this._mapMidTransceiver.size);r.set(c,p);let{msidStreamId:m}=Gl.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:p,kind:u,offerRtpParameters:d,streamId:l??m??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};x.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let a of e){let{trackId:c,onRtpReceiver:u}=a;if(u){let d=r.get(c),l=this._pc.getTransceivers().find(p=>p.mid===d);if(!l)throw new Error("transceiver not found");u(l.receiver)}}let i=await this._pc.createAnswer(),o=Ee.parse(i.sdp);for(let a of e){let{trackId:c,rtpParameters:u}=a,d=r.get(c),l=o.media.find(p=>String(p.mid)===d);us.applyCodecParameters({offerRtpParameters:u,answerMediaObject:l}),i={type:"answer",sdp:Ee.write(o)}}this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:o}),x.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let a of e){let{trackId:c}=a,u=r.get(c),d=this._pc.getTransceivers().find(l=>l.mid===u);if(!d)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(u,d),t.push({localId:u,track:d.receiver.track,rtpReceiver:d.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){x.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()};x.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();x.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){x.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()};x.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();x.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){x.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()};x.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();x.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c}=t,u={negotiated:!0,id:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c,protocol:n};x.debug("receiveDataChannel() [options:%o]",u);let d=this._pc.createDataChannel(r,u);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};x.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let p=await this._pc.createAnswer(),m=Ee.parse(p.sdp),h=m.media.find(f=>f.type==="application");h.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:m}),p={type:"answer",sdp:Ee.write(m)},x.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",p),await this._pc.setLocalDescription(p),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=Ee.parse(this._pc.localDescription.sdp));let r=us.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:r},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 aa.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')}};ls.Firefox120=An});var ma=E(ps=>{"use strict";Object.defineProperty(ps,"__esModule",{value:!0});ps.Safari12=void 0;var ae=ke(),Kl=ee(),Yl=K(),fr=ge(),Ql=ie(),Jl=Je(),Xl=Pt(),mr=xt(),pa=It(),Mn=Dt(),C=new Yl.Logger("Safari12"),ha="Safari12",fa={OS:65535,MIS:65535},Ln=class s extends Kl.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:ha,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{C.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let n=ae.parse(r.sdp);return s.getLocalRtpCapabilities(n)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(C.debug("getNativeSctpCapabilities()"),{numStreams:fa})}}static getLocalRtpCapabilities(e,t=[]){let r=mr.extractRtpCapabilities({sdpObject:e});fr.validateAndNormalizeRtpCapabilities(r),Mn.addNackSupportForOpus(r);for(let n of t)Mn.addHeaderExtensionSupport(r,n);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,getSendExtendedRtpCapabilities:u}){super(),C.debug("constructor()"),this._direction=e,this._remoteSdp=new Xl.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=u,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:o??[],iceTransportPolicy:a??"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):(C.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return ha}close(){if(C.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(),C.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),C.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});C.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:n,headerExtensionOptions:i,codec:o,onRtpSender:a}){this.assertNotClosed(),this.assertSendDirection(),C.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t);let c=this._remoteSdp.getNextMediaSectionIdx(),u=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream]});a&&a(u.sender);let d=await this._pc.createOffer(),l=ae.parse(d.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let p=[];p.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let m=s.getLocalRtpCapabilities(l,p),h=this._getSendExtendedRtpCapabilities(m),f=fr.getSendingRtpParameters(e.kind,h);f.codecs=fr.reduceCodecs(f.codecs,o);let g=fr.getSendingRemoteRtpParameters(e.kind,h);g.codecs=fr.reduceCodecs(g.codecs,o);let v;this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l});let y=(0,Jl.parse)((r??[{}])[0].scalabilityMode);r&&r.length>1&&(C.debug("send() | enabling legacy simulcast"),l=ae.parse(d.sdp),v=l.media[c.idx],pa.addLegacySimulcast({offerMediaObject:v,numStreams:r.length}),d={type:"offer",sdp:ae.write(l)}),i?.absCaptureTime&&(v=l.media[c.idx],mr.addHeaderExtension({offerMediaObject:v,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(_=>_.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:ae.write(l)}),C.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let k=u.mid;if(f.mid=k,l=ae.parse(this._pc.localDescription.sdp),v=l.media[c.idx],f.rtcp.cname=mr.getCname({offerMediaObject:v}),f.msid=`${t??this._sendStream.id} ${e.id}`,f.encodings=pa.getRtpEncodings({offerMediaObject:v,codecs:f.codecs}),r)for(let _=0;_<f.encodings.length;++_)r[_]&&Object.assign(f.encodings[_],r[_]);if(f.encodings.length>1&&(f.codecs[0].mimeType.toLowerCase()==="video/vp8"||f.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let _ of f.encodings)_.scalabilityMode?_.scalabilityMode=`L1T${y.temporalLayers}`:_.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:v,reuseMid:c.reuseMid,offerRtpParameters:f,answerRtpParameters:g,codecOptions:n});let I={type:"answer",sdp:this._remoteSdp.getSdp()};return C.debug("send() | calling pc.setRemoteDescription() [answer:%o]",I),await this._pc.setRemoteDescription(I),this._mapMidTransceiver.set(k,u),{localId:k,rtpParameters:f,rtpSender:u.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;C.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();C.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),C.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();C.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),C.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let r=await this._pc.createOffer();C.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?C.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):C.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),C.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{c<=t?a.active=!0:a.active=!1}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();C.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),C.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{n.encodings[c]={...a,...t}}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();C.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}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};C.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%fa.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),o=ae.parse(i.sdp),a=o.media.find(u=>u.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),C.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:a});let c={type:"answer",sdp:this._remoteSdp.getSdp()};C.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:r,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let a of e){let{trackId:c,kind:u,rtpParameters:d,streamId:l}=a;C.debug("receive() [trackId:%s, kind:%s]",c,u);let p=d.mid??String(this._mapMidTransceiver.size);r.set(c,p);let{msidStreamId:m}=Mn.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:p,kind:u,offerRtpParameters:d,streamId:l??m??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let a of e){let{trackId:c,onRtpReceiver:u}=a;if(u){let d=r.get(c),l=this._pc.getTransceivers().find(p=>p.mid===d);if(!l)throw new Error("transceiver not found");u(l.receiver)}}let i=await this._pc.createAnswer(),o=ae.parse(i.sdp);for(let a of e){let{trackId:c,rtpParameters:u}=a,d=r.get(c),l=o.media.find(p=>String(p.mid)===d);mr.applyCodecParameters({offerRtpParameters:u,answerMediaObject:l})}i={type:"answer",sdp:ae.write(o)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),C.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let a of e){let{trackId:c}=a,u=r.get(c),d=this._pc.getTransceivers().find(l=>l.mid===u);if(!d)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(u,d),t.push({localId:u,track:d.receiver.track,rtpReceiver:d.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){C.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()};C.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){C.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()};C.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){C.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()};C.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c}=t,u={negotiated:!0,id:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c,protocol:n};C.debug("receiveDataChannel() [options:%o]",u);let d=this._pc.createDataChannel(r,u);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let p=await this._pc.createAnswer(),m=ae.parse(p.sdp),h=m.media.find(f=>f.type==="application");h.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),p={type:"answer",sdp:ae.write(m)},C.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",p),await this._pc.setLocalDescription(p),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=ae.parse(this._pc.localDescription.sdp));let r=mr.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:r},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 Ql.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')}};ps.Safari12=Ln});var va=E(hs=>{"use strict";Object.defineProperty(hs,"__esModule",{value:!0});hs.ReactNative106=void 0;var ce=ke(),Zl=ee(),ep=K(),gr=ge(),tp=ie(),rp=Je(),sp=Pt(),_r=xt(),On=It(),Nn=Dt(),T=new ep.Logger("ReactNative106"),ga="ReactNative106",_a={OS:65535,MIS:65535},Fn=class s extends Zl.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:ga,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{T.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let n=ce.parse(r.sdp);return s.getLocalRtpCapabilities(n)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(T.debug("getNativeSctpCapabilities()"),{numStreams:_a})}}static getLocalRtpCapabilities(e,t=[]){let r=_r.extractRtpCapabilities({sdpObject:e});gr.validateAndNormalizeRtpCapabilities(r),Nn.addNackSupportForOpus(r);for(let n of t)Nn.addHeaderExtensionSupport(r,n);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,getSendExtendedRtpCapabilities:u}){super(),T.debug("constructor()"),this._direction=e,this._remoteSdp=new sp.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=u,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:o??[],iceTransportPolicy:a??"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 ga}close(){if(T.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(),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 r={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();T.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:n,headerExtensionOptions:i,codec:o,onRtpSender:a}){this.assertNotClosed(),this.assertSendDirection(),T.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((w,N)=>{w.rid=`r${N}`});let c=this._remoteSdp.getNextMediaSectionIdx(),u=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});a&&a(u.sender);let d=await this._pc.createOffer(),l=ce.parse(d.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let p=[];p.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let m=s.getLocalRtpCapabilities(l,p),h=this._getSendExtendedRtpCapabilities(m),f=gr.getSendingRtpParameters(e.kind,h);f.codecs=gr.reduceCodecs(f.codecs,o);let g=gr.getSendingRemoteRtpParameters(e.kind,h);g.codecs=gr.reduceCodecs(g.codecs,o),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l});let v=!1,y=(0,rp.parse)((r??[{}])[0].scalabilityMode),k;r?.length===1&&y.spatialLayers>1&&f.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(T.debug("send() | enabling legacy simulcast for VP9 SVC"),v=!0,l=ce.parse(d.sdp),k=l.media[c.idx],On.addLegacySimulcast({offerMediaObject:k,numStreams:y.spatialLayers}),d={type:"offer",sdp:ce.write(l)}),i?.absCaptureTime&&(k=l.media[c.idx],_r.addHeaderExtension({offerMediaObject:k,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(w=>w.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:ce.write(l)}),T.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let I=u.mid??void 0;if(I||T.warn("send() | missing transceiver.mid (bug in react-native-webrtc, using a workaround"),f.mid=I,l=ce.parse(this._pc.localDescription.sdp),k=l.media[c.idx],f.rtcp.cname=_r.getCname({offerMediaObject:k}),f.msid=`${t??this._sendStream.id} ${e.id}`,!r)f.encodings=On.getRtpEncodings({offerMediaObject:k,codecs:f.codecs});else if(r.length===1){let w=On.getRtpEncodings({offerMediaObject:k,codecs:f.codecs});Object.assign(w[0],r[0]),v&&(w=[w[0]]),f.encodings=w}else f.encodings=r;if(f.encodings.length>1&&(f.codecs[0].mimeType.toLowerCase()==="video/vp8"||f.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let w of f.encodings)w.scalabilityMode?w.scalabilityMode=`L1T${y.temporalLayers}`:w.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:k,reuseMid:c.reuseMid,offerRtpParameters:f,answerRtpParameters:g,codecOptions:n});let _={type:"answer",sdp:this._remoteSdp.getSdp()};return T.debug("send() | calling pc.setRemoteDescription() [answer:%o]",_),await this._pc.setRemoteDescription(_),I||(I=u.mid,f.mid=I),this._mapMidTransceiver.set(I,u),{localId:I,rtpParameters:f,rtpSender:u.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;T.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();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 r=await this._pc.createOffer();T.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);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 r=await this._pc.createOffer();T.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);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 r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),T.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{c<=t?a.active=!0:a.active=!1}),await r.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 o={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),T.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((a,c)=>{n.encodings[c]={...a,...t}}),await r.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 o={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};T.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%_a.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),o=ce.parse(i.sdp),a=o.media.find(u=>u.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),T.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:a});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:r,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let a of e){let{trackId:c,kind:u,rtpParameters:d,streamId:l}=a;T.debug("receive() [trackId:%s, kind:%s]",c,u);let p=d.mid??String(this._mapMidTransceiver.size);r.set(c,p);let{msidStreamId:m}=Nn.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:p,kind:u,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 a of e){let{trackId:c,onRtpReceiver:u}=a;if(u){let d=r.get(c),l=this._pc.getTransceivers().find(p=>p.mid===d);if(!l)throw new Error("transceiver not found");u(l.receiver)}}let i=await this._pc.createAnswer(),o=ce.parse(i.sdp);for(let a of e){let{trackId:c,rtpParameters:u}=a,d=r.get(c),l=o.media.find(p=>String(p.mid)===d);_r.applyCodecParameters({offerRtpParameters:u,answerMediaObject:l})}i={type:"answer",sdp:ce.write(o)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),T.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let a of e){let{trackId:c}=a,u=r.get(c),d=this._pc.getTransceivers().find(l=>l.mid===u);if(d)this._mapMidTransceiver.set(u,d),t.push({localId:u,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 r=await this._pc.createAnswer();T.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);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 r=await this._pc.createAnswer();T.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let 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 r=await this._pc.createAnswer();T.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c}=t,u={negotiated:!0,id:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c,protocol:n};T.debug("receiveDataChannel() [options:%o]",u);let d=this._pc.createDataChannel(r,u);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 p=await this._pc.createAnswer(),m=ce.parse(p.sdp),h=m.media.find(f=>f.type==="application");h.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),p={type:"answer",sdp:ce.write(m)},T.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",p),await this._pc.setLocalDescription(p),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=ce.parse(this._pc.localDescription.sdp));let r=_r.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:r},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 tp.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')}};hs.ReactNative106=Fn});var Sa=E(At=>{"use strict";Object.defineProperty(At,"__esModule",{value:!0});At.Device=void 0;At.detectDevice=wa;At.detectDeviceAsync=ya;var np=K(),ip=ee(),je=ie(),fs=Ge(),te=ge(),op=Wo(),ap=sa(),cp=oa(),dp=la(),up=ma(),lp=va(),S=new np.Logger("Device");function wa(s,e){return S.debug("detectDevice()"),!s&&typeof navigator=="object"&&(s=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),ba(s,e)}async function ya(s,e){return S.debug("detectDeviceAsync()"),!s&&typeof navigator=="object"&&(s=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),ba(s,e)}var jn=class s{_handlerFactory;_handlerName;_loaded=!1;_getSendExtendedRtpCapabilities;_recvRtpCapabilities;_sendRtpCapabilities;_canProduceByKind={audio:!1,video:!1};_sctpCapabilities;_observer=new ip.EnhancedEventEmitter;static async factory({handlerName:e,handlerFactory:t}={}){if(S.debug("factory()"),e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(!e&&!t&&(e=await ya(),!e))throw new je.UnsupportedError("device not supported");return new s({handlerName:e,handlerFactory:t})}constructor({handlerName:e,handlerFactory:t}={}){if(S.debug("constructor()"),e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(t)this._handlerFactory=t;else{if(e)S.debug("constructor() | handler given: %s",e);else if(e=wa(),e)S.debug("constructor() | detected handler: %s",e);else throw new je.UnsupportedError("device not supported");switch(e){case"Chrome111":{this._handlerFactory=ap.Chrome111.createFactory();break}case"Chrome74":{this._handlerFactory=cp.Chrome74.createFactory();break}case"Firefox120":{this._handlerFactory=dp.Firefox120.createFactory();break}case"Safari12":{this._handlerFactory=up.Safari12.createFactory();break}case"ReactNative106":{this._handlerFactory=lp.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 je.InvalidStateError("not loaded");return this._recvRtpCapabilities}get sendRtpCapabilities(){if(!this._loaded)throw new je.InvalidStateError("not loaded");return this._sendRtpCapabilities}get sctpCapabilities(){if(!this._loaded)throw new je.InvalidStateError("not loaded");return this._sctpCapabilities}get observer(){return this._observer}async load({routerRtpCapabilities:e,preferLocalCodecsOrder:t=!1}){if(S.debug("load() [routerRtpCapabilities:%o]",e),this._loaded)throw new je.InvalidStateError("already loaded");let r=fs.clone(e);te.validateAndNormalizeRtpCapabilities(r);let{getNativeRtpCapabilities:n,getNativeSctpCapabilities:i}=this._handlerFactory,o=fs.clone(await n({direction:"recvonly"}));S.debug("load() | got native receiving RTP capabilities:%o",o),te.validateAndNormalizeRtpCapabilities(o);let a=fs.clone(await n({direction:"sendonly"}));S.debug("load() | got native sending RTP capabilities:%o",a),te.validateAndNormalizeRtpCapabilities(a),this._getSendExtendedRtpCapabilities=d=>fs.clone(te.getExtendedRtpCapabilities(d,r,t));let c=te.getExtendedRtpCapabilities(o,r,!1);this._recvRtpCapabilities=te.getRecvRtpCapabilities(c),S.debug("load() | got receiving RTP capabilities:%o",this._recvRtpCapabilities),te.validateAndNormalizeRtpCapabilities(this._recvRtpCapabilities);let u=te.getExtendedRtpCapabilities(a,r,t);this._sendRtpCapabilities=te.getSendRtpCapabilities(u),S.debug("load() | got sending RTP capabilities:%o",this._sendRtpCapabilities),te.validateAndNormalizeRtpCapabilities(this._sendRtpCapabilities),this._canProduceByKind.audio=te.canSend("audio",this._sendRtpCapabilities),this._canProduceByKind.video=te.canSend("video",this._sendRtpCapabilities),this._sctpCapabilities=await i(),te.validateSctpCapabilities(this._sctpCapabilities),S.debug("load() | got native SCTP capabilities:%o",this._sctpCapabilities),S.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 je.InvalidStateError("not loaded");return this._canProduceByKind[e]}createSendTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,appData:u}){return S.debug("createSendTransport()"),this.createTransport({direction:"send",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,appData:u})}createRecvTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,appData:u}){return S.debug("createRecvTransport()"),this.createTransport({direction:"recv",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,appData:u})}createTransport({direction:e,id:t,iceParameters:r,iceCandidates:n,dtlsParameters:i,sctpParameters:o,iceServers:a,iceTransportPolicy:c,additionalSettings:u,appData:d}){if(this._loaded){if(typeof t!="string")throw new TypeError("missing id");if(typeof r!="object")throw new TypeError("missing iceParameters");if(Array.isArray(n)){if(typeof i!="object")throw new TypeError("missing dtlsParameters");if(o&&typeof o!="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 je.InvalidStateError("not loaded");let l=new op.Transport({direction:e,id:t,iceParameters:r,iceCandidates:n,dtlsParameters:i,sctpParameters:o,iceServers:a,iceTransportPolicy:c,additionalSettings:u,appData:d,handlerFactory:this._handlerFactory,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities,recvRtpCapabilities:this._recvRtpCapabilities,canProduceByKind:this._canProduceByKind});return this._observer.safeEmit("newtransport",l),l}};At.Device=jn;function ba(s,e){S.debug('detectDeviceImpl() [userAgent:"%s", userAgentData:%o]',s,e);let t=pp(s,e);if(t){if(t>=111)return S.debug("detectDeviceImpl() | using Chrome111 handler"),"Chrome111";if(t>=74)return S.debug("detectDeviceImpl() | using Chrome74 handler"),"Chrome74";S.warn("detectDeviceImpl() | unsupported Chromium based browser/version");return}let r=hp(s);if(r){if(r>=120)return S.debug("detectDeviceImpl() | using Firefox120 handler"),"Firefox120";S.warn("detectDeviceImpl() | unsupported Firefox browser/version");return}let n=fp(s);if(n){if(n>=605)return S.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";S.warn("detectDeviceImpl() | unsupported desktop Safari browser/version");return}let i=mp(s);if(i){if(i>=605)return S.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";S.warn("detectDeviceImpl() | unsupported iOS Safari based browser/version");return}if(vr()){if(typeof RTCPeerConnection<"u"&&typeof RTCRtpTransceiver<"u")return S.debug("detectDeviceImpl() | using ReactNative106 handler"),"ReactNative106";S.warn("detectDeviceImpl() | unsupported react-native-webrtc version without RTCPeerConnection or RTCRtpTransceiver, forgot to call registerGlobals() on it?");return}S.warn('detectDeviceImpl() | device not supported [userAgent:"%s", userAgentData:%o]',s,e)}function pp(s,e){if(S.debug("getChromiumMajorVersion()"),ms(s,e)){S.debug("getChromiumMajorVersion() | this is iOS => undefined");return}if(vr()){S.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 S.debug(`getChromiumMajorVersion() | Chromium major version based on NavigatorUAData => ${i}`),i}}let t=s?.match(/\b(?:Chrome|Chromium)\/(\w+)/i);if(t?.[1]){let r=Number(t[1]);return S.debug(`getChromiumMajorVersion() | Chromium major version based on User-Agent => ${r}`),r}S.debug("getChromiumMajorVersion() | this is not Chromium => undefined")}function hp(s){if(S.debug("getFirefoxMajorVersion()"),ms(s)){S.debug("getFirefoxMajorVersion() | this is iOS => undefined");return}if(vr()){S.debug("getFirefoxMajorVersion() | this is React-Native => undefined");return}let e=s?.match(/\bFirefox\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return S.debug(`getFirefoxMajorVersion() | Firefox major version based on User-Agent => ${t}`),t}S.debug("getFirefoxMajorVersion() | this is not Firefox => undefined")}function fp(s){if(S.debug("getMacOSWebKitMajorVersion()"),ms(s)){S.debug("getMacOSWebKitMajorVersion() | this is iOS => undefined");return}if(vr()){S.debug("getMacOSWebKitMajorVersion() | this is React-Native => undefined");return}if(!(s&&/\bSafari\b/i.test(s)&&!/\bChrome\b/i.test(s)&&!/\bChromium\b/i.test(s)&&!/\bFirefox\b/i.test(s))){S.debug("getMacOSWebKitMajorVersion() | this is not Safari => undefined");return}let t=s.match(/AppleWebKit\/(\w+)/i);if(t?.[1]){let r=Number(t[1]);return S.debug(`getMacOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${r}`),r}S.debug("getMacOSWebKitMajorVersion() | this is not WebKit => undefined")}function mp(s){if(S.debug("getIOSWebKitMajorVersion()"),!ms(s)){S.debug("getIOSWebKitMajorVersion() | this is not iOS => undefined");return}if(vr()){S.debug("getIOSWebKitMajorVersion() | this is React-Native => undefined");return}let e=s?.match(/AppleWebKit\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return S.debug(`getIOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${t}`),t}S.debug("getIOSWebKitMajorVersion() | this is not WebKit => undefined")}function ms(s,e){return S.debug("isIOS()"),e?.platform==="iOS"?(S.debug("isIOS() | this is iOS based on NavigatorUAData.platform => true"),!0):e?.platform?(S.debug("isIOS() | this is not iOS based on NavigatorUAData.platform => false"),!1):s&&/iPad|iPhone|iPod/.test(s)?(S.debug("isIOS() | this is iOS based on User-Agent => true"),!0):typeof navigator=="object"&&navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1?(S.debug("isIOS() | this is iPadOS 13+ based on User-Agent => true"),!0):(S.debug("isIOS() | this is not iOS => false"),!1)}function vr(){return S.debug("isReactNative()"),typeof navigator=="object"&&navigator.product==="ReactNative"?(S.debug("isReactNative() | this is React-Native based on navigator.product"),!0):(S.debug("isReactNative() | this is not React-Native => false"),!1)}});var Ra=E(Ta=>{"use strict";var Ze=256,_s=[],gs;for(;Ze--;)_s[Ze]=(Ze+256).toString(16).substring(1);function gp(){var s=0,e,t="";if(!gs||Ze+16>256){for(gs=Array(s=256);s--;)gs[s]=256*Math.random()|0;s=Ze=0}for(;s<16;s++)e=gs[Ze+s],s==6?t+=_s[e&15|64]:s==8?t+=_s[e&63|128]:t+=_s[e],s&1&&s>1&&s<11&&(t+="-");return Ze++,t}Ta.v4=gp});var Ca=E(vs=>{"use strict";Object.defineProperty(vs,"__esModule",{value:!0});vs.FakeEventTarget=void 0;var Un=class{listeners={};addEventListener(e,t,r){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof r=="object"&&r.once===!0}))}removeEventListener(e,t,r){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(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 r of[...t]){try{r.callback.call(this,e)}catch(n){setTimeout(()=>{throw n},0)}r.once&&this.removeEventListener(e.type,r.callback)}return!e.defaultPrevented}};vs.FakeEventTarget=Un});var ka=E(ws=>{"use strict";Object.defineProperty(ws,"__esModule",{value:!0});ws.FakeEvent=void 0;var qn=class{NONE=0;CAPTURING_PHASE=1;AT_TARGET=2;BUBBLING_PHASE=3;type;bubbles;cancelable;defaultPrevented=!1;composed=!1;currentTarget=null;eventPhase=this.NONE;isTrusted=!0;target=null;timeStamp=0;cancelBubble=!1;returnValue=!0;srcElement=null;constructor(e,t={}){this.type=e,this.bubbles=t.bubbles??!1,this.cancelable=t.cancelable??!1}preventDefault(){this.cancelable&&(this.defaultPrevented=!0)}stopPropagation(){}stopImmediatePropagation(){}composedPath(){return[]}initEvent(e,t,r){}};ws.FakeEvent=qn});var Ea=E($n=>{"use strict";Object.defineProperty($n,"__esModule",{value:!0});$n.clone=_p;function _p(s){if(s!==void 0)return Number.isNaN(s)?NaN:typeof structuredClone=="function"?structuredClone(s):JSON.parse(JSON.stringify(s))}});var xa=E(bs=>{"use strict";Object.defineProperty(bs,"__esModule",{value:!0});bs.FakeMediaStreamTrack=void 0;var Pa=Ra(),vp=Ca(),Mt=ka(),ys=Ea(),Wn=class s extends vp.FakeEventTarget{#m;#l;#p;#e;#r;#t;#s;#h;#n;#f;#i;#o=null;#a=null;#c=null;#d=null;#u=null;constructor({kind:e,id:t,label:r,contentHint:n,enabled:i,muted:o,readyState:a,capabilities:c,constraints:u,settings:d,data:l}){super(),this.#m=t??(0,Pa.v4)(),this.#l=e,this.#p=r??"",this.#s=n??"",this.#r=i??!0,this.#t=o??!1,this.#e=a??"live",this.#h=c??{},this.#n=u??{},this.#f=d??{},this.#i=l??{}}get id(){return this.#m}get kind(){return this.#l}get label(){return this.#p}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 Mt.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.#o}set onmute(e){this.#o&&this.removeEventListener("mute",this.#o),this.#o=e,e&&this.addEventListener("mute",e)}get onunmute(){return this.#a}set onunmute(e){this.#a&&this.removeEventListener("unmute",this.#a),this.#a=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.#u}set onstopped(e){this.#u&&this.removeEventListener("stopped",this.#u),this.#u=e,e&&this.addEventListener("stopped",e)}addEventListener(e,t,r){super.addEventListener(e,t,r)}removeEventListener(e,t,r){super.removeEventListener(e,t,r)}stop(){this.#e!=="ended"&&(this.#e="ended",this.dispatchEvent(new Mt.FakeEvent("stopped")))}clone({id:e,data:t}={}){return new s({id:e??(0,Pa.v4)(),kind:this.#l,label:this.#p,contentHint:this.#s,enabled:this.#r,muted:this.#t,readyState:this.#e,capabilities:(0,ys.clone)(this.#h),constraints:(0,ys.clone)(this.#n),settings:(0,ys.clone)(this.#f),data:t??(0,ys.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 Mt.FakeEvent("stopped")),this.dispatchEvent(new Mt.FakeEvent("ended")))}remoteMute(){this.#t||(this.#t=!0,this.dispatchEvent(new Mt.FakeEvent("mute")))}remoteUnmute(){this.#t&&(this.#t=!1,this.dispatchEvent(new Mt.FakeEvent("unmute")))}};bs.FakeMediaStreamTrack=Wn});var Ia=E(Ss=>{"use strict";Object.defineProperty(Ss,"__esModule",{value:!0});Ss.FakeEventTarget=void 0;var Bn=class{listeners={};addEventListener(e,t,r){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof r=="object"&&r.once===!0}))}removeEventListener(e,t,r){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(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 r of[...t]){try{r.callback.call(this,e)}catch(n){setTimeout(()=>{throw n},0)}r.once&&this.removeEventListener(e.type,r.callback)}return!e.defaultPrevented}};Ss.FakeEventTarget=Bn});var Ma=E(Rs=>{"use strict";Object.defineProperty(Rs,"__esModule",{value:!0});Rs.FakeHandler=void 0;var wp=xa(),yp=ee(),bp=K(),Lt=Ge(),zn=ge(),Aa=ie(),Sp=Ia(),B=new bp.Logger("FakeHandler"),Da="FakeHandler",Hn=class s extends yp.EnhancedEventEmitter{_closed=!1;_fakeParameters;_getSendExtendedRtpCapabilities;_cname=`CNAME-${Lt.generateRandomNumber()}`;_defaultSendStreamId=`${Lt.generateRandomNumber()}`;_transportReady=!1;_nextLocalId=1;_tracks=new Map;_nextSctpStreamId=0;static createFactory(e){return{name:Da,factory:t=>new s(t,e),getNativeRtpCapabilities:async({direction:t})=>(B.debug("getNativeRtpCapabilities() [direction:%o]",t),s.getLocalRtpCapabilities(e)),getNativeSctpCapabilities:async()=>(B.debug("getNativeSctpCapabilities()"),e.generateNativeSctpCapabilities())}}static getLocalRtpCapabilities(e){let t=e.generateNativeRtpCapabilities();return zn.validateAndNormalizeRtpCapabilities(t),t}constructor({getSendExtendedRtpCapabilities:e},t){super(),B.debug("constructor()"),this._getSendExtendedRtpCapabilities=e,this._fakeParameters=t}get name(){return Da}close(){B.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(),B.debug("updateIceServers()")}async restartIce(e){this.assertNotClosed(),B.debug("restartIce()")}async getTransportStats(){return this.assertNotClosed(),new Map}async send({track:e,streamId:t,encodings:r,codecOptions:n,codec:i}){this.assertNotClosed(),B.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),this._transportReady||await this.setupTransport({localDtlsRole:"server"});let o=s.getLocalRtpCapabilities(this._fakeParameters),a=this._getSendExtendedRtpCapabilities(o),c=zn.getSendingRtpParameters(e.kind,a);c.codecs=zn.reduceCodecs(c.codecs,i);let u=c.codecs.some(l=>/.+\/rtx$/i.test(l.mimeType));c.mid=`mid-${Lt.generateRandomNumber()}`,c.msid=`${t??"-"} ${e.id}`,r||(r=[{}]);for(let l of r)l.ssrc=Lt.generateRandomNumber(),u&&(l.rtx={ssrc:Lt.generateRandomNumber()});c.encodings=r,c.rtcp={cname:this._cname,reducedSize:!0,mux:!0},c.msid=`${t??this._defaultSendStreamId} ${e.id}`;let d=this._nextLocalId++;return this._tracks.set(d,e),{localId:String(d),rtpParameters:c}}async stopSending(e){if(B.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?B.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):B.debug("replaceTrack() [localId:%s, no track]",e),this._tracks.delete(Number(e)),this._tracks.set(Number(e),t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),B.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),B.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"}),B.debug("sendDataChannel()");let t=new Ts({id:this._nextSctpStreamId++,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:e.label,protocol:e.protocol}),r={streamId:this._nextSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits};return{dataChannel:t,sctpStreamParameters:r}}async receive(e){this.assertNotClosed();let t=[];for(let r of e){let{trackId:n,kind:i}=r;this._transportReady||await this.setupTransport({localDtlsRole:"client"}),B.debug("receive() [trackId:%s, kind:%s]",n,i);let o=this._nextLocalId++,a=new wp.FakeMediaStreamTrack({kind:i});this._tracks.set(o,a),t.push({localId:String(o),track:a})}return t}async stopReceiving(e){if(!this._closed)for(let t of e)B.debug("stopReceiving() [localId:%s]",t),this._tracks.delete(Number(t))}async pauseReceiving(e){this.assertNotClosed()}async resumeReceiving(e){this.assertNotClosed()}async getReceiverStats(e){return this.assertNotClosed(),new Map}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){return this.assertNotClosed(),this._transportReady||await this.setupTransport({localDtlsRole:"client"}),B.debug("receiveDataChannel()"),{dataChannel:new Ts({id:e.streamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:t,protocol:r})}}getDataChannelMaxMessageSize(){return 5e5}async setupTransport({localDtlsRole:e,localSdpObject:t}){let r=Lt.clone(this._fakeParameters.generateLocalDtlsParameters());e&&(r.role=e),this.emit("@connectionstatechange","connecting"),await new Promise((n,i)=>this.emit("@connect",{dtlsParameters:r},n,i)),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new Aa.InvalidStateError("method called in a closed handler")}};Rs.FakeHandler=Hn;var Ts=class extends Sp.FakeEventTarget{_id;_negotiated=!0;_ordered;_maxPacketLifeTime;_maxRetransmits;_label;_protocol;_readyState="connecting";_bufferedAmount=0;_bufferedAmountLowThreshold=0;_binaryType="arraybuffer";_onopen=null;_onclosing=null;_onclose=null;_onmessage=null;_onbufferedamountlow=null;_onerror=null;constructor({id:e,ordered:t=!0,maxPacketLifeTime:r=null,maxRetransmits:n=null,label:i="",protocol:o=""}){super(),B.debug(`constructor() [id:${e}, ordered:${t}, maxPacketLifeTime:${r}, maxRetransmits:${n}, label:${i}, protocol:${o}`),this._id=e,this._ordered=t,this._maxPacketLifeTime=r,this._maxRetransmits=n,this._label=i,this._protocol=o}get id(){return this._id}get negotiated(){return this._negotiated}get ordered(){return this._ordered}get maxPacketLifeTime(){return this._maxPacketLifeTime}get maxRetransmits(){return this._maxRetransmits}get label(){return this._label}get protocol(){return this._protocol}get readyState(){return this._readyState}get bufferedAmount(){return this._bufferedAmount}get bufferedAmountLowThreshold(){return this._bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._bufferedAmountLowThreshold=e}get binaryType(){return this._binaryType}set binaryType(e){this._binaryType=e}get onopen(){return this._onopen}set onopen(e){this._onopen&&this.removeEventListener("open",this._onopen),this._onopen=e,e&&this.addEventListener("open",e)}get onclosing(){return this._onclosing}set onclosing(e){this._onclosing&&this.removeEventListener("closing",this._onclosing),this._onclosing=e,e&&this.addEventListener("closing",e)}get onclose(){return this._onclose}set onclose(e){this._onclose&&this.removeEventListener("close",this._onclose),this._onclose=e,e&&this.addEventListener("close",e)}get onmessage(){return this._onmessage}set onmessage(e){this._onmessage&&this.removeEventListener("message",this._onmessage),this._onmessage=e,e&&this.addEventListener("message",e)}get onbufferedamountlow(){return this._onbufferedamountlow}set onbufferedamountlow(e){this._onbufferedamountlow&&this.removeEventListener("bufferedamountlow",this._onbufferedamountlow),this._onbufferedamountlow=e,e&&this.addEventListener("bufferedamountlow",e)}get onerror(){return this._onerror}set onerror(e){this._onerror&&this.removeEventListener("error",this._onerror),this._onerror=e,e&&this.addEventListener("error",e)}addEventListener(e,t,r){super.addEventListener(e,t,r)}removeEventListener(e,t,r){super.removeEventListener(e,t,r)}close(){["closing","closed"].includes(this._readyState)||(this._readyState="closed")}send(e){if(this._readyState!=="open")throw new Aa.InvalidStateError("not open")}}});var La=E(he=>{"use strict";Object.defineProperty(he,"__esModule",{value:!0});he.generateRouterRtpCapabilities=Tp;he.generateNativeRtpCapabilities=Rp;he.generateNativeSctpCapabilities=Cp;he.generateLocalDtlsParameters=kp;he.generateTransportRemoteParameters=Ep;he.generateProducerRemoteParameters=Pp;he.generateConsumerRemoteParameters=xp;he.generateDataProducerRemoteParameters=Ip;he.generateDataConsumerRemoteParameters=Dp;var Q=Ge();function re(){return String(Q.generateRandomNumber())}function Tp(){return Q.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 Rp(){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 Cp(){return Q.deepFreeze({numStreams:{OS:2048,MIS:2048}})}function kp(){return Q.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 Ep(){return{id:re(),iceParameters:Q.deepFreeze({iceLite:!0,password:"yku5ej8nvfaor28lvtrabcx0wkrpkztz",usernameFragment:"h3hk1iz6qqlnqlne"}),iceCandidates:Q.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:Q.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:Q.deepFreeze({port:5e3,OS:2048,MIS:2048,maxMessageSize:2e6})}}function Pp(){return Q.deepFreeze({id:re()})}function xp({id:s,codecMimeType:e}={}){switch(e){case"audio/opus":return{id:s??re(),producerId:re(),kind:"audio",rtpParameters:Q.deepFreeze({codecs:[{mimeType:"audio/opus",payloadType:100,clockRate:48e3,channels:2,rtcpFeedback:[{type:"transport-cc"}],parameters:{useinbandfec:1,foo:"bar"}}],encodings:[{ssrc:46687003}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:ietf:params:rtp-hdrext:ssrc-audio-level",id:10}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"audio/ISAC":return{id:s??re(),producerId:re(),kind:"audio",rtpParameters:Q.deepFreeze({codecs:[{mimeType:"audio/ISAC",payloadType:111,clockRate:16e3,channels:1,rtcpFeedback:[{type:"transport-cc"}],parameters:{}}],encodings:[{ssrc:46687004}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"video/VP8":return{id:s??re(),producerId:re(),kind:"video",rtpParameters:Q.deepFreeze({codecs:[{mimeType:"video/VP8",payloadType:101,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"x-google-start-bitrate":1500}},{mimeType:"video/rtx",payloadType:102,clockRate:9e4,rtcpFeedback:[],parameters:{apt:101}}],encodings:[{ssrc:99991111,rtx:{ssrc:99991112}}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",id:4},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:3gpp:video-orientation",id:11},{uri:"urn:ietf:params:rtp-hdrext:toffset",id:12}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"video/H264":return{id:s??re(),producerId:re(),kind:"video",rtpParameters:Q.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 Ip(){return Q.deepFreeze({id:re()})}function Dp({id:s}={}){return{id:s??re(),dataProducerId:re(),sctpStreamParameters:Q.deepFreeze({streamId:666,maxPacketLifeTime:5e3,maxRetransmits:void 0})}}});var kn=E(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 Ap=sr();O.debug=Ap.default;O.types=no();O.version="3.20.0";var Vn=Sa();Object.defineProperty(O,"Device",{enumerable:!0,get:function(){return Vn.Device}});Object.defineProperty(O,"detectDevice",{enumerable:!0,get:function(){return Vn.detectDevice}});Object.defineProperty(O,"detectDeviceAsync",{enumerable:!0,get:function(){return Vn.detectDeviceAsync}});var Mp=Je();Object.defineProperty(O,"parseScalabilityMode",{enumerable:!0,get:function(){return Mp.parse}});O.ortc=ge();O.enhancedEvents=ee();var Lp=Ma();Object.defineProperty(O,"FakeHandler",{enumerable:!0,get:function(){return Lp.FakeHandler}});O.testFakeParameters=La()});var Na=E((Vf,Gn)=>{"use strict";var Op=Object.prototype.hasOwnProperty,J="~";function wr(){}Object.create&&(wr.prototype=Object.create(null),new wr().__proto__||(J=!1));function Np(s,e,t){this.fn=s,this.context=e,this.once=t||!1}function Oa(s,e,t,r,n){if(typeof t!="function")throw new TypeError("The listener must be a function");var i=new Np(t,r||s,n),o=J?J+e:e;return s._events[o]?s._events[o].fn?s._events[o]=[s._events[o],i]:s._events[o].push(i):(s._events[o]=i,s._eventsCount++),s}function Cs(s,e){--s._eventsCount===0?s._events=new wr:delete s._events[e]}function z(){this._events=new wr,this._eventsCount=0}z.prototype.eventNames=function(){var e=[],t,r;if(this._eventsCount===0)return e;for(r in t=this._events)Op.call(t,r)&&e.push(J?r.slice(1):r);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};z.prototype.listeners=function(e){var t=J?J+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var n=0,i=r.length,o=new Array(i);n<i;n++)o[n]=r[n].fn;return o};z.prototype.listenerCount=function(e){var t=J?J+e:e,r=this._events[t];return r?r.fn?1:r.length:0};z.prototype.emit=function(e,t,r,n,i,o){var a=J?J+e:e;if(!this._events[a])return!1;var c=this._events[a],u=arguments.length,d,l;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),u){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,r),!0;case 4:return c.fn.call(c.context,t,r,n),!0;case 5:return c.fn.call(c.context,t,r,n,i),!0;case 6:return c.fn.call(c.context,t,r,n,i,o),!0}for(l=1,d=new Array(u-1);l<u;l++)d[l-1]=arguments[l];c.fn.apply(c.context,d)}else{var p=c.length,m;for(l=0;l<p;l++)switch(c[l].once&&this.removeListener(e,c[l].fn,void 0,!0),u){case 1:c[l].fn.call(c[l].context);break;case 2:c[l].fn.call(c[l].context,t);break;case 3:c[l].fn.call(c[l].context,t,r);break;case 4:c[l].fn.call(c[l].context,t,r,n);break;default:if(!d)for(m=1,d=new Array(u-1);m<u;m++)d[m-1]=arguments[m];c[l].fn.apply(c[l].context,d)}}return!0};z.prototype.on=function(e,t,r){return Oa(this,e,t,r,!1)};z.prototype.once=function(e,t,r){return Oa(this,e,t,r,!0)};z.prototype.removeListener=function(e,t,r,n){var i=J?J+e:e;if(!this._events[i])return this;if(!t)return Cs(this,i),this;var o=this._events[i];if(o.fn)o.fn===t&&(!n||o.once)&&(!r||o.context===r)&&Cs(this,i);else{for(var a=0,c=[],u=o.length;a<u;a++)(o[a].fn!==t||n&&!o[a].once||r&&o[a].context!==r)&&c.push(o[a]);c.length?this._events[i]=c.length===1?c[0]:c:Cs(this,i)}return this};z.prototype.removeAllListeners=function(e){var t;return e?(t=J?J+e:e,this._events[t]&&Cs(this,t)):(this._events=new wr,this._eventsCount=0),this};z.prototype.off=z.prototype.removeListener;z.prototype.addListener=z.prototype.on;z.prefixed=J;z.EventEmitter=z;typeof Gn<"u"&&(Gn.exports=z)});var Fh={};Ti(Fh,{ACTIVATION_COLD_BOOT_AFTER_MS:()=>xi,ACTIVATION_DEGRADED_AFTER_MS:()=>Ii,ACTIVATION_HINT_PATH:()=>Dr,ACTIVATION_STILL_AFTER_MS:()=>Pi,ACTIVITY_DOM_EVENTS:()=>Is,ACTIVITY_FIELD:()=>si,ACTIVITY_STAMP_MIN_INTERVAL_MS:()=>hc,ActivationMonitor:()=>ut,App:()=>kc,BACKOFF_BASE_MS:()=>Hs,BACKOFF_MAX_ATTEMPTS:()=>Be,BACKOFF_MAX_MS:()=>Vs,CaptureController:()=>kr,CaptureUnavailableError:()=>Cr,ClientTokenError:()=>qe,DATA_CHANNEL_MESSAGE_CEILING:()=>$c,DEFAULT_DOC_SYNC_TIMEOUT_MS:()=>pi,DEFAULT_GATEWAY_URL:()=>fi,DEFAULT_PRODUCE_ACK_TIMEOUT_MS:()=>dt,DEFAULT_REFERENCE_JPEG_QUALITY:()=>qc,DEFAULT_REFERENCE_MAX_SIZE:()=>Uc,DEFAULT_WHEN_LIVE_TIMEOUT_MS:()=>Bs,DERIVED_LEG_SEP:()=>br,DGRAM_HEADER_BYTES:()=>qt,FOREGROUND_COALESCE_MS:()=>fc,FrameReassembler:()=>$t,INPUT_PRESENCE_DEFAULT_HZ:()=>Oc,INPUT_PRESENCE_FIELD:()=>_i,InvalidDurationError:()=>ze,LEGACY_ACTIVATION_HINT_PATH:()=>Ar,PLATFORM_DOC_NAME:()=>Ir,PermanentLockedError:()=>rr,PinRequiresActiveTempError:()=>tr,ProduceAckTimeoutError:()=>at,RecordingNotFoundError:()=>Zt,RecordingsClient:()=>He,RecordingsError:()=>se,RecordingsUnauthorizedError:()=>lt,RequestAbortError:()=>$e,RequestCancelledError:()=>ct,RequestDocSyncError:()=>it,RequestError:()=>de,RequestTimeoutError:()=>nt,RetainNotTempError:()=>er,RuntimeArtifactNotFoundError:()=>Jt,RuntimeArtifactsClient:()=>Oe,RuntimeArtifactsError:()=>G,RuntimeArtifactsUnauthorizedError:()=>Qt,Session:()=>Vt,SessionAllocationError:()=>H,SessionEndError:()=>fe,SessionEndUnavailableError:()=>Ae,SessionFailedError:()=>me,StreamDirectionConflict:()=>ot,TransportNegotiator:()=>Bt,TransportSessionMismatchError:()=>We,TransportSessionSignaling:()=>zt,VISIBILITY_FIELD:()=>ni,WIRE_MESSAGE_BUDGET:()=>Wc,WT_CONTROL_FRAME_MAX:()=>oi,WebRtcSession:()=>Ht,WebTransportSession:()=>Wt,WtControlDecoder:()=>Ut,activationHintFrom:()=>zs,cameraCaptureAvailable:()=>Vc,captureStillFromVideo:()=>Gc,computeBackoffDelay:()=>Kt,createActivityTracker:()=>Ds,createCameraWarp:()=>Kc,createClientToken:()=>Ec,createInputPresencePublisher:()=>Nc,createRecordingsClient:()=>Gi,createRuntimeArtifactsClient:()=>Hi,createStore:()=>Ic,derivedLegName:()=>ic,derivedLegRole:()=>Qn,describeSessionFailure:()=>Ws,describeSessionPhase:()=>Ei,encodeWtControlFrame:()=>Fs,fitWithin:()=>qs,isDurationString:()=>jr,isPendingRecording:()=>Ac,isRetryableSessionError:()=>Yt,isWakingPhase:()=>Pr,mediaRecorderChunkSource:()=>Os,normalizeReferenceImage:()=>zc,normalizeRetention:()=>Vi,observeLeaveConfirm:()=>Ls,observePageLifecycle:()=>As,observePageTeardown:()=>Ms,parseDgramHeader:()=>js,prewake:()=>$i,referenceImageErrorMessage:()=>Hc,releaseSessionBeacon:()=>Or,sessionFailureFromMediaError:()=>ki,sharedCaptureController:()=>Lc,videoStream:()=>Dc,whenLive:()=>xr,writeDgramHeader:()=>_c});module.exports=Ci(Fh);var rt=class{_handlers=new Map;_ws;_onMessage;_onOpen;_listeningForOpen=!1;_pendingSends=[];_disposed=!1;constructor(e){this._ws=e,this._onMessage=t=>{if(typeof t.data!="string")return;let r;try{r=JSON.parse(t.data)}catch{console.warn("[ChannelMultiplexer] Failed to parse WebSocket message as JSON");return}if(!r.channel)return;let n=this._handlers.get(r.channel);if(n)for(let i of n)i(r)},this._ws.addEventListener("message",this._onMessage),this._onOpen=()=>{this.flushPendingSends()}}on(e,t){let r=this._handlers.get(e);return r||(r=new Set,this._handlers.set(e,r)),r.add(t),()=>{r.delete(t),r.size===0&&this._handlers.delete(e)}}emit(e,t){if(this._disposed)return;let r=JSON.stringify({channel:e,...t});if(this._ws.readyState===WebSocket.OPEN){this._ws.send(r);return}this._ws.readyState===WebSocket.CONNECTING&&(this._pendingSends.push(r),this.listenForOpen())}dispose(){this._disposed=!0,this._pendingSends=[],this._handlers.clear(),this._ws.removeEventListener("message",this._onMessage),this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1}flushPendingSends(){if(this._disposed||this._ws.readyState!==WebSocket.OPEN)return;this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1;let e=this._pendingSends;this._pendingSends=[];for(let t of e)this._ws.send(t)}listenForOpen(){this._listeningForOpen||(this._listeningForOpen=!0,this._ws.addEventListener("open",this._onOpen))}},st=class{_handlers=new Map;_pendingSends=[];_target=null;_targetUnsubscribes=[];_disposed=!1;setTarget(e){if(this._disposed)return;this.detachTarget(),this._target=e;for(let[r,n]of this._handlers)for(let i of n)this._targetUnsubscribes.push(e.on(r,i));let t=this._pendingSends;this._pendingSends=[];for(let r of t)e.emit(r.channel,r.data)}rewriteSessionChannels(e,t){if(e===t)return;let r=`session:${e}:`,n=`session:${t}:`,i=new Map;for(let[o,a]of this._handlers)i.set(o.startsWith(r)?n+o.slice(r.length):o,a);this._handlers=i,this._pendingSends=this._pendingSends.map(o=>({...o,channel:o.channel.startsWith(r)?n+o.channel.slice(r.length):o.channel}))}on(e,t){if(this._disposed)return()=>{};let r=this._handlers.get(e);r||(r=new Set,this._handlers.set(e,r)),r.add(t);let n=this._target?.on(e,t);return n&&this._targetUnsubscribes.push(n),()=>{r?.delete(t),r?.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 Ae=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)}},fe=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)}},de=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)}},nt=class extends de{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)}},it=class extends de{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)}},ot=class extends Error{stream;owner;attempted;constructor(e,t,r){super(`[urun] stream "${e}" is already produced by the ${t}; this (${r}) 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=r,Object.setPrototypeOf(this,new.target.prototype)}},dt=15e3,at=class extends Error{kind;stream;timeoutMs;constructor(e,t){let r=t?.timeoutMs??dt,n=t?.stream??e,i=n!==e?` "${n}"`:"";super(`[urun] SFU did not ack producer ${e}${i} within ${Math.round(r/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=r,Object.setPrototypeOf(this,new.target.prototype)}},$e=class extends de{constructor(e){super("[urun] request aborted",{requestId:e}),this.name="RequestAbortError",Object.setPrototypeOf(this,new.target.prototype)}},ct=class extends de{constructor(e){super("[urun] request cancelled: session disconnected",{requestId:e}),this.name="RequestCancelledError",Object.setPrototypeOf(this,new.target.prototype)}};function Ws(s,e){let t=e.error?.reason,r=e.elapsedMs!==void 0?Math.round(e.elapsedMs/1e3):void 0;switch(s){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=r!==void 0?` after ${r}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 me=class extends Error{kind;status;hint;constructor(e,t,r){let{message:n,hint:i}=Ws(e,t);super(n),this.name="SessionFailedError",this.kind=e,this.status=t,this.hint=i,r?.cause!==void 0&&(this.cause=r.cause),Object.setPrototypeOf(this,new.target.prototype)}};function ki(s,e){if(s instanceof me)return s;let t=s instanceof Error?s:new Error(String(s)),r={phase:e?.phase??"idle",transportState:e?.transportState??"disconnected",...e,error:{reason:t.message,code:t.name,kind:"media-permission"}};return new me("media-permission",r,{cause:s})}var We=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)}},H=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 Pr(s){if(!s)return!1;let e=typeof s=="string"?s:s.name;return e==="queued"||e==="unavailable"||e==="provisioning"}var Bs=45e3;function xr(s,e={}){let{timeout:t=Bs,signal:r}=e;return new Promise((n,i)=>{if(r?.aborted){i(r.reason instanceof Error?r.reason:new Error("whenLive aborted"));return}if(s.phase?.name==="live"){n();return}let o=s.phase?.name;if(o==="error"||o==="ended"||o==="expired"){let h=s.phase,f=s.status??{phase:h.name,transportState:"disconnected",sessionId:h.sessionId,requestId:h.requestId,queue:h.queue,error:h.error};i(new me(o==="ended"?"ended":o==="expired"?"expired":h.error?.kind??"transport-failed",f));return}let a,c,u=!1,d=h=>{u||(u=!0,c!==void 0&&clearTimeout(c),r?.removeEventListener("abort",l),a?.(),h?i(h):n())},l=()=>{d(r?.reason instanceof Error?r.reason:new Error("whenLive aborted"))};r?.addEventListener("abort",l,{once:!0});let p=()=>{let h=s.phase;return s.status??{phase:h?.name??"idle",transportState:"disconnected",sessionId:h?.sessionId,requestId:h?.requestId,queue:h?.queue,error:h?.error}},m=h=>d(new me(h,p()));t>0&&(c=setTimeout(()=>{let h=p();h.elapsedMs===void 0&&(h.elapsedMs=t),d(new me("never-live",h))},t)),a=s.onPhase(h=>{h?.name==="live"?d():h?.name==="error"?m(h.error?.kind??"transport-failed"):h?.name==="ended"?m("ended"):h?.name==="expired"&&m("expired")}),u&&a()})}function Ei(s){switch(s.name){case"idle":return"Initializing\u2026";case"unavailable":return"Starting the app\u2026";case"queued":return s.queue?`Waiting in queue (position ${s.queue.position} of ${s.queue.depth})\u2026`:s.runtime?.state==="busy"?"All runtimes are busy \u2014 waiting for capacity\u2026":"Waiting for capacity\u2026";case"provisioning":return s.runtime?.state==="starting"?"Starting model\u2026":"Provisioning\u2026";case"connecting":return"Connecting\u2026";case"live":return"Live";case"error":return s.error?.reason?`Session failed \u2014 ${s.error.reason}`:"Session failed";case"ended":return"Session ended";case"expired":return"Session ended \u2014 reached its maximum length. Start a new session."}}var Pi=15e3,xi=45e3,Ii=12e4,Ir="platform",Dr="activation",Ar="desired.activation";function zs(s){if(typeof s=="string"&&s.length>0)return s;if(s&&typeof s=="object"){let e=s.note;if(typeof e=="string"&&e.length>0)return e}}var nd=[{state:"still-activating",afterMs:15e3},{state:"cold-boot",afterMs:45e3},{state:"degraded",afterMs:12e4}],ut=class{constructor(e){this._options=e;this._offPhase=e.onPhase(t=>{if(!this._stopped)if(t?.name==="live"){if(this._liveAt===null){this._liveAt=Date.now();for(let r of this._watches.values())this._arm(r)}}else(t?.name==="error"||t?.name==="ended"||t?.name==="expired")&&this.dispose()}),this._stopped&&(this._offPhase(),this._offPhase=null)}_options;_watches=new Map;_handlers=new Set;_liveAt=null;_stopped=!1;_offPhase=null;watch(e,t){if(this._stopped||this._watches.has(e))return;let r={name:e,stream:t,startedAt:null,done:!1,timers:[],cleanups:[],lastEvent:null};this._watches.set(e,r),this._hookFirstMediaSignals(r),!r.done&&this._liveAt!==null&&this._arm(r)}unwatch(e){let t=this._watches.get(e);!t||t.done||this._settle(t)}onActivation(e){for(let t of this._watches.values())!t.done&&t.lastEvent&&e(t.lastEvent);return this._handlers.add(e),()=>this._handlers.delete(e)}dispose(){if(!this._stopped){this._stopped=!0;for(let e of this._watches.values())e.done||this._settle(e);this._offPhase?.(),this._offPhase=null,this._handlers.clear()}}_hookFirstMediaSignals(e){let t=r=>{if(!(!r||e.done)){if(r.muted===!0&&typeof r.addEventListener=="function"){let n=()=>this._firstMedia(e);r.addEventListener("unmute",n,{once:!0}),e.cleanups.push(()=>r.removeEventListener?.("unmute",n));return}this._firstMedia(e)}};e.cleanups.push(e.stream.on("track",r=>t(r))),this._options.onData&&e.cleanups.push(this._options.onData(e.name,()=>this._firstMedia(e))),t(e.stream.track)}_arm(e){if(!(e.done||e.startedAt!==null||this._stopped)){e.startedAt=Date.now(),this._emit(e,"activating",0);for(let t of nd){let r=setTimeout(()=>{e.done||this._stopped||this._emit(e,t.state,Date.now()-e.startedAt)},t.afterMs);r.unref?.(),e.timers.push(r)}}}_firstMedia(e){if(e.done||this._stopped)return;let t=e.startedAt;this._settle(e),this._emit(e,"first-media",t===null?0:Date.now()-t)}_settle(e){e.done=!0;for(let t of e.timers)clearTimeout(t);e.timers=[];for(let t of e.cleanups.splice(0))t()}_emit(e,t,r){let n={state:t,elapsedMs:r,stream:e.name},i=zs(this._options.hint());i!==void 0&&(n.hint=i),e.lastEvent=n;for(let o of Array.from(this._handlers))o(n)}};var Hs=500,Vs=15e3,Be=6;function Kt(s,e=Math.random){if(!Number.isFinite(s)||s<0)throw new Error(`[urun] computeBackoffDelay: attempt must be a non-negative number, got ${s}`);let t=Math.min(Vs,Hs*2**s);return Math.round(e()*t)}function Yt(s){if(s instanceof H){let e=s.httpStatus;return e===408||e===429||e!==void 0&&e>=500}return s instanceof Error?s.name==="TypeError"||s.name==="TimeoutError"||s.name==="AbortError":!1}var Di=10,id=.5,Mr=Di;function Gs(){return Mr<1?!1:(Mr-=1,!0)}function Ks(){Mr=Math.min(Di,Mr+id)}var od="session-api.prod.cloud.urun.sh",ad=["https://session-api.use2.prod.cloud.urun.sh","https://session-api.usw2.prod.cloud.urun.sh"];function V(s){return s.trim().replace(/\/+$/,"")}function Lr(s,e){let t=[],r=n=>{if(!n)return;let i=V(n);i&&!t.includes(i)&&t.push(i)};r(s);for(let n of e??[])r(n);for(let n of Rd(s))r(n);return t}function Or(s){try{if(typeof fetch!="function")return;let e=`${V(s.baseUrl)}/api/session-requests/${encodeURIComponent(s.requestId)}/release`;fetch(e,{method:"POST",headers:Me(s,s.jwt),keepalive:!0}).catch(()=>{})}catch{}}async function Ni(s){try{let e=`${V(s.baseUrl)}/api/session-requests/${encodeURIComponent(s.requestId)}/release`,t=await Le(s);if(s.getAccessToken&&!t)throw new fe("[urun] session release refused: getAccessToken resolved no token (an unauthenticated release is never sent)",{requestId:s.requestId,code:"no_access_token"});let r=await fetch(e,{method:"POST",headers:Me(s,t)});if((r.status===401||r.status===403)&&s.getAccessToken){let a=await Le(s,{forceRefresh:!0,reason:"unauthorized"});a&&a!==t&&(r=await fetch(e,{method:"POST",headers:Me(s,a)}))}let n=await Nr(r);if(!r.ok)throw new fe(n.error_message||n.error_code||`[urun] session release failed: HTTP ${r.status}`,{requestId:s.requestId,code:n.error_code,httpStatus:r.status});let i=String(n.status??"");if(i!=="closed"&&i!=="cancelled"&&i!=="canceled")throw new fe("[urun] session release returned an unrecognized terminal status",{requestId:s.requestId,code:"invalid_release_response",httpStatus:r.status});return{status:i==="closed"?"ended":"canceled",requestId:s.requestId}}catch(e){throw e instanceof fe?e:new fe("[urun] session release request failed",{requestId:s.requestId,cause:e})}}function Fi(s){if(typeof s!="string"||s.length===0)return null;let e=new Date(s);return Number.isFinite(e.getTime())?e:null}var cd=120,dd=1e3,ud=20,ld=5,pd=500,ji=1e4,hd=3,fd=50,Ai=1e4;async function Mi(s,e){let t=Date.now()+Ai;for(;;){await Fr(fd);let r=await Le(s);if(r)return r;if(Date.now()>=t)throw new H(`[urun] session allocation at ${e} never got an access token: the wired getAccessToken resolved nothing within ${Math.round(Ai/1e3)}s (no unauthenticated request was sent)`)}}function md(s,e){if(!s)return null;try{let t=new URL(s),r=e?new URL(V(e)):null,n=t.pathname==="/api/sessions/create"||t.pathname==="/api/sessions/create/";return t.protocol!=="https:"||!n||!gd(t,r)?null:V(t.origin)}catch{return null}}function gd(s,e){return Li(s.hostname)&&(!e||Li(e.hostname))}function Li(s){let e=s.toLowerCase();return e==="urun.sh"||e.endsWith(".urun.sh")}async function Ui(s){let e=Lr(s.baseUrl,s.fallbackUrls),t=null,r=e.length>1;for(let n=0;n<Be;n++){for(let i of e)try{let o=await _d(i,s,{pollAttempts:cd,retryAfterLimitMs:r?dd:void 0});return Ks(),o}catch(o){if(t=o instanceof Error?o:new Error(String(o)),t instanceof be)throw t}if(!Yt(t))break;if(n+1<Be){if(!Gs())break;await Fr(Kt(n))}}throw t??new Error("[urun] session allocation failed")}async function _d(s,e,t){let r,n,i,o=s,a=0,c=new Set,u=Date.now()+t.pollAttempts*ji;for(let d=0;d<t.pollAttempts;d++){n=i??await Le(e),i=void 0,e.getAccessToken&&!n&&(n=await Mi(e,o));let l=Math.max(1,Math.min(ud,Math.floor((u-Date.now())/1e3))),p=!!r,m=Date.now(),h=r?await fetch(`${o}/api/session-requests/${encodeURIComponent(r)}?wait_s=${l}`,{headers:Me(e,n),signal:bd((l+ld)*1e3)}):await fetch(`${o}/api/sessions/create`,{method:"POST",redirect:"manual",headers:{...Me(e,n),"Content-Type":"application/json","Idempotency-Key":e.idempotencyKey},body:JSON.stringify(vd(e))});if(!r&&(h.status===307||h.status===308)){let y=md(h.headers.get("location"),o);if(y&&y!==o&&a<hd){a+=1,o=y;continue}throw new H(`[urun] session create redirected from ${o} without a usable target`,{httpStatus:h.status})}let f=await Nr(h);if(f.request_id)try{e.onRequest?.({requestId:f.request_id,baseUrl:o})}catch{}if(h.ok&&(f.status==="allocated"||!f.status&&!!f.session_id)&&!!f.session_id){let y=f.session_id,k=Wi(f.ws_url,o,y,"gateway allocated session");return{baseUrl:o,sessionId:y,wsUrl:k,endsAt:Fi(f.ends_at),response:f}}if(h.status===202||f.status==="pending"||f.status==="queued"||f.queued){if(r=f.request_id||r,!r)throw new Error("[urun] gateway queued session without request_id");if(e.onAdmission)try{e.onAdmission(wd(f,r))}catch{}let y=Date.now()-m<pd;p&&y&&await Fr(yd(h,f,t.retryAfterLimitMs));continue}if((h.status===401||h.status===403)&&e.getAccessToken){let y=n??"";c.add(y);let k=await Le(e,{forceRefresh:!0,reason:"unauthorized"});if(k&&!c.has(k)){i=k;continue}if(k===void 0){let I=await Mi(e,o);if(!c.has(I)){i=I;continue}}}let v=f.error_message||f.error_code||`HTTP ${h.status}`;throw new H(`[urun] session allocation failed at ${o}: ${v}`,{httpStatus:h.status})}throw new H(`[urun] timed out waiting for session allocation at ${o}`)}function Me(s,e){let t={"X-Tenant-Id":s.orgId,"X-Auth-Provider":s.authProvider||"default","X-User-Id":"anonymous"};return e&&(t.Authorization=`Bearer ${e}`),t}async function Le(s,e){return s.getAccessToken?await s.getAccessToken(e)??void 0:s.jwt}function vd(s){let e=s.priority==="preempt";return{app:s.app,function:s.functionName,gpus:1,idempotency_key:s.idempotencyKey,...s.sessionKey&&!e?{logical_id:s.sessionKey}:{},...e?{priority:"preempt"}:{}}}async function qi(s){let e=Lr(s.baseUrl,s.fallbackUrls),t=null;for(let r=0;r<Be;r++){for(let n of e)try{let i={baseUrl:n,app:"",functionName:"",orgId:s.orgId,jwt:s.jwt,getAccessToken:s.getAccessToken,authProvider:s.authProvider,idempotencyKey:""},o=`${V(n)}/api/sessions/${encodeURIComponent(s.sessionId)}/viewer-connect`,a=await Le(i);if(s.getAccessToken&&!a)throw new H(`[urun] viewer-connect for ${s.sessionId} refused: getAccessToken resolved no token (an unauthenticated viewer-connect is never sent)`);let c=await fetch(o,{headers:Me(i,a)});if((c.status===401||c.status===403)&&s.getAccessToken){let l=await Le(i,{forceRefresh:!0,reason:"unauthorized"});l&&l!==a&&(c=await fetch(o,{headers:Me(i,l)}))}if(!c.ok)throw new H(`[urun] viewer-connect for ${s.sessionId} failed: HTTP ${c.status}`,{httpStatus:c.status});let u=await Nr(c),d=Wi(u.ws_url,n,s.sessionId,"viewer-connect");return Ks(),{baseUrl:V(n),sessionId:s.sessionId,wsUrl:d,endsAt:Fi(u.ends_at),response:u}}catch(i){if(t=i instanceof Error?i:new Error(String(i)),t instanceof be)throw t}if(!Yt(t))break;if(r+1<Be){if(!Gs())break;await Fr(Kt(r))}}throw t??new Error("[urun] viewer-connect failed")}async function $i(s){try{let e=V(s.baseUrl),t=await Le(s);if(s.getAccessToken&&!t)return{status:"unavailable"};let r=await fetch(`${e}/api/sessions/prewake`,{method:"POST",headers:{...Me(s,t),"Content-Type":"application/json"},body:JSON.stringify({app:s.app,function:s.functionName})});if(r.status===404)return{status:"unknown-app"};if(!r.ok)return{status:"unavailable"};let n=await Nr(r),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 Nr(s){try{let e=await s.json();return e&&typeof e=="object"?e:{}}catch{return{}}}function wd(s,e){let t={status:s.status==="queued"||s.queued?"queued":"pending",requestId:e};typeof s.queue_position=="number"&&typeof s.queue_depth=="number"&&(t.queue={position:s.queue_position,depth:s.queue_depth});let r=s.runtime_state;return(r==="unavailable"||r==="starting"||r==="busy")&&(t.runtime={state:r},typeof s.runtime_reason=="string"&&s.runtime_reason.length>0&&(t.runtime.reason=s.runtime_reason)),t}function yd(s,e,t){let r=Number(s.headers.get("Retry-After")||""),n=Number(e.retry_after_seconds??r),i=t??ji;return Number.isFinite(n)&&n>0?Math.min(n*1e3,i):1e3}function Fr(s){return new Promise(e=>setTimeout(e,s))}function bd(s){let e=typeof AbortSignal<"u"?AbortSignal:void 0;return typeof e?.timeout=="function"?e.timeout(s):void 0}var be=class extends Error{};function Wi(s,e,t,r){if(!s)throw new be(`[urun] ${r} ${t} without ws_url`);let n,i;try{n=new URL(s)}catch{throw new be(r==="viewer-connect"?`[urun] viewer-connect returned no usable ws_url for ${t}`:`[urun] ${r} ${t} with non-absolute ws_url`)}try{i=new URL(V(e))}catch{throw new be(`[urun] ${r} ${t} has invalid gateway base URL`)}let o=Sd(i.hostname)&&i.protocol==="http:";if(!(o&&n.protocol==="ws:"||n.protocol==="wss:"))throw new be(`[urun] ${r} ${t} with insecure ws_url`);if(!Td(n,i,o))throw new be(`[urun] ${r} ${t} with cross-origin ws_url`);return n.toString()}function Sd(s){return s==="localhost"||s==="127.0.0.1"||s==="::1"||s.endsWith(".localhost")}function Td(s,e,t){return!!(t||s.hostname===e.hostname&&s.port===e.port||Oi(s.hostname)&&Oi(e.hostname))}function Oi(s){return s==="urun.sh"||s.endsWith(".urun.sh")}function Rd(s){try{return new URL(s).hostname!==od?[]:ad}catch{return[]}}var G=class extends Error{status;code;constructor(e,t,r=t>0?`http_${t}`:"runtime_artifacts_error",n){super(e),this.name="RuntimeArtifactsError",this.status=t,this.code=r,n!==void 0&&(this.cause=n),Object.setPrototypeOf(this,new.target.prototype)}},Qt=class extends G{constructor(e="[urun] runtime artifacts: unauthorized",t="unauthorized"){super(e,401,t),this.name="RuntimeArtifactsUnauthorizedError",Object.setPrototypeOf(this,new.target.prototype)}},Jt=class extends G{constructor(e="[urun] runtime artifacts: not found",t="not_found"){super(e,404,t),this.name="RuntimeArtifactNotFoundError",Object.setPrototypeOf(this,new.target.prototype)}};function Xt(s){return{baseUrl:s.baseUrl,fallbackUrls:s.fallbackUrls,orgId:s.orgId,jwt:s.jwt,getAccessToken:s.getAccessToken,authProvider:s.authProvider}}function Hi(s){return new Oe(s)}var Oe=class{_options;constructor(e){this._options=e}async list(e){let r=zi(await this._request(e,"")).artifacts;if(!Array.isArray(r))throw new G("[urun] runtime artifacts: response missing `artifacts`",0,"bad_response");return r.map(Bi)}async getDownloadUrl(e,t){let r=zi(await this._request(t,`/${encodeURIComponent(e)}/download`)),n=r.download_url;if(typeof n!="string"||!kd(n))throw new G("[urun] runtime artifacts: response missing HTTPS download_url",0,"bad_response");return{artifact:Bi(r.artifact),downloadUrl:n}}async _request(e,t){let r=Lr(this._options.baseUrl,this._options.fallbackUrls),n=null;for(let i of r)try{return await this._requestFromBase(i,e,t)}catch(o){if(n=o instanceof Error?o:new Error(String(o)),n instanceof G&&Ed(n.status))throw n}throw n??new G("[urun] runtime artifacts request failed",0)}async _requestFromBase(e,t,r){let n=`${V(e)}/api/sessions/${encodeURIComponent(t)}/artifacts${r}`,i=await this._resolveToken(),o=await fetch(n,{method:"GET",headers:this._headers(i)});if(o.status===401&&this._options.getAccessToken){let a=await this._options.getAccessToken({forceRefresh:!0,reason:"unauthorized"});a&&a!==i&&(i=a,o=await fetch(n,{method:"GET",headers:this._headers(i)}))}if(!o.ok){let{code:a,message:c}=await this._readError(o,e);throw Pd(o.status,a,c)}try{return await o.json()}catch(a){throw new G(`[urun] runtime artifacts: invalid JSON response from ${V(e)}`,0,"bad_response",a)}}async _resolveToken(){return this._options.getAccessToken?await this._options.getAccessToken()??void 0:this._options.jwt}_headers(e){let t={Accept:"application/json","X-Tenant-Id":this._options.orgId,"X-Auth-Provider":this._options.authProvider||"default"};return e&&(t.Authorization=`Bearer ${e}`),t}async _readError(e,t){let r=V(t);try{let i=(await e.json()).error;if(i&&typeof i=="object"){let{code:o,message:a}=i;return{code:typeof o=="string"&&o.length>0?o:`http_${e.status}`,message:typeof a=="string"&&a.length>0?`[urun] runtime artifacts request failed at ${r}: ${a}`:`[urun] runtime artifacts request failed at ${r}: HTTP ${e.status}`}}}catch{}return{code:`http_${e.status}`,message:`[urun] runtime artifacts request failed at ${r}: HTTP ${e.status}`}}};function Bi(s){if(!s||typeof s!="object")throw new G("[urun] runtime artifacts: malformed artifact",0,"malformed_artifact");let e=s,t=Se(e,"artifact_id")||Se(e,"id"),r=Se(e,"filename"),n=Se(e,"kind"),i=Se(e,"status")||"ready",o=Cd(e,"size_bytes"),a=Se(e,"sha256");if(!t||!r||!n||o==null||!a)throw new G("[urun] runtime artifacts: malformed artifact metadata",0,"malformed_artifact");return{artifactId:t,kind:n,filename:r,contentType:Se(e,"content_type")||"application/octet-stream",sizeBytes:o,sha256:a,status:i,createdAt:Se(e,"created_at"),expiresAt:Se(e,"expires_at")}}function Se(s,e){let t=s[e];return typeof t=="string"&&t.length>0?t:void 0}function Cd(s,e){let t=s[e];return typeof t=="number"&&Number.isFinite(t)&&Number.isInteger(t)&&t>=0?t:void 0}function kd(s){try{return new URL(s).protocol==="https:"}catch{return!1}}function Ed(s){return s===401||s===403}function Pd(s,e,t){return s===401?new Qt(t,e):s===404?new Jt(t,e):new G(t,s,e)}function zi(s){if(!s||typeof s!="object"||Array.isArray(s))throw new G("[urun] runtime artifacts: malformed response",0,"bad_response");return s}var se=class extends Error{status;code;constructor(e,t){super(e),this.name="RecordingsError",this.status=t.status,this.code=t.code,t.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}},lt=class extends se{constructor(e="[urun] recordings: unauthorized",t="unauthorized"){super(e,{status:401,code:t}),this.name="RecordingsUnauthorizedError",Object.setPrototypeOf(this,new.target.prototype)}},Zt=class extends se{constructor(e="[urun] recordings: not found",t="not_found"){super(e,{status:404,code:t}),this.name="RecordingNotFoundError",Object.setPrototypeOf(this,new.target.prototype)}},er=class extends se{constructor(e="[urun] recordings: retain requires a temp recording",t="retain_not_temp"){super(e,{status:409,code:t}),this.name="RetainNotTempError",Object.setPrototypeOf(this,new.target.prototype)}},tr=class extends se{constructor(e="[urun] recordings: pin requires an active temp recording",t="pin_requires_active_temp"){super(e,{status:409,code:t}),this.name="PinRequiresActiveTempError",Object.setPrototypeOf(this,new.target.prototype)}},rr=class extends se{constructor(e="[urun] recordings: recording is permanent and locked",t="permanent_locked"){super(e,{status:409,code:t}),this.name="PermanentLockedError",Object.setPrototypeOf(this,new.target.prototype)}},ze=class extends se{constructor(e="[urun] recordings: invalid retention duration",t="bad_duration",r=400){super(e,{status:r,code:t}),this.name="InvalidDurationError",Object.setPrototypeOf(this,new.target.prototype)}};function jr(s){return/^(\d+[smhdw])+$/.test(s)}function Vi(s){if(s==="pin")return{action:"pin"};if(jr(s))return{action:"retain",duration:s};throw new ze(`[urun] recordings: "${s}" is not a duration or "pin"`)}function xd(s,e,t){let r=t||e||`HTTP ${s}`;if(s===401)return new lt(r,e??"unauthorized");if(s===404)return new Zt(r,e??"not_found");if(s===400)return new ze(r,e??"bad_request",400);if(s===409)switch(e){case"retain_not_temp":return new er(r,e);case"pin_requires_active_temp":return new tr(r,e);case"permanent_locked":return new rr(r,e)}return new se(r,{status:s,code:e??`http_${s}`})}var He=class{constructor(e){this._options=e;this._base=`${e.functionsUrl.replace(/\/+$/,"")}/recordings`}_options;_base;async list(e){let r=(await this._request("GET","",{params:e?{session_id:e}:void 0})).recordings;return Array.isArray(r)?r:[]}async get(e){return this._one(await this._request("GET",`/${encodeURIComponent(e)}`))}async retain(e,t){if(!jr(t))throw new ze(`[urun] recordings: "${t}" is not a valid retention duration`);return this._one(await this._request("POST",`/${encodeURIComponent(e)}/retain`,{body:{duration:t}}))}async pin(e){return this._one(await this._request("POST",`/${encodeURIComponent(e)}/pin`))}async unpin(e){return this._one(await this._request("POST",`/${encodeURIComponent(e)}/unpin`))}async permanent(e){return this._one(await this._request("POST",`/${encodeURIComponent(e)}/permanent`))}async delete(e){return this._one(await this._request("POST",`/${encodeURIComponent(e)}/delete`))}_one(e){let t=e.recording;if(!t||typeof t!="object")throw new se("[urun] recordings: response missing `recording`",{status:0,code:"bad_response"});return t}async _request(e,t,r={}){let n=this._buildUrl(t,r.params),i=await this._resolveToken(),o=await this._fetch(n,e,i,r.body);if(o.status===401&&this._options.getAccessToken){let a=await this._options.getAccessToken({forceRefresh:!0,reason:"unauthorized"});a&&a!==i&&(i=a,o=await this._fetch(n,e,i,r.body))}if(!o.ok){let{code:a,message:c}=await this._readError(o);throw xd(o.status,a,c)}return this._readJson(o)}_buildUrl(e,t){let r=`${this._base}${e}`,n=Object.entries(t??{}).filter(([,i])=>i!=null&&i!=="").map(([i,o])=>`${encodeURIComponent(i)}=${encodeURIComponent(o)}`).join("&");return n&&(r+=`?${n}`),r}_fetch(e,t,r,n){let i={Authorization:`Bearer ${r}`,apikey:r,Accept:"application/json","X-Tenant-Id":this._options.orgId};this._options.authProvider&&(i["X-Auth-Provider"]=this._options.authProvider);let o={method:t,headers:i};return n!==void 0&&(i["Content-Type"]="application/json",o.body=JSON.stringify(n)),fetch(e,o)}async _resolveToken(){if(this._options.getAccessToken){let t=await this._options.getAccessToken();if(t)return t}let e=this._options.jwt??this._options.apiKey;if(!e)throw new lt("[urun] recordings: no credential \u2014 provide one of apiKey, jwt, or getAccessToken");return e}async _readJson(e){try{return await e.json()}catch{return{}}}async _readError(e){try{let r=(await e.json()).error;if(r&&typeof r=="object"){let{code:n,message:i}=r;return{code:typeof n=="string"?n:void 0,message:typeof i=="string"?i:`HTTP ${e.status}`}}}catch{}return{message:`HTTP ${e.status}`}}};function Gi(s){return new He(s)}var nc=De(kn());var Kn=De(Na(),1);function Ue(){return typeof window>"u"&&typeof process<"u"&&process.versions!=null&&process.versions.node!=null}function ja(){return Ue()?"Chrome111":void 0}var Fp=["RTCSessionDescription","RTCIceCandidate","RTCRtpReceiver","RTCRtpSender","RTCRtpTransceiver","RTCDataChannel","MediaStream","MediaStreamTrack"],ks=null;function Ot(){return Ue()?ks||(ks=jp(),ks):Promise.resolve()}async function jp(){let s=globalThis;if(typeof s.WebSocket>"u")try{let e=await import("ws"),t=e.default??e;s.WebSocket=t}catch(e){Fa("WebSocket",e)}if(typeof s.RTCPeerConnection>"u")try{let e=await import("werift");Up(s,e)}catch(e){Fa("werift",e)}}function Up(s,e){let{RTCPeerConnection:t,useH264:r,useVP8:n,useOPUS:i,useSdesMid:o,useSdesRTPStreamId:a,useAbsSendTime:c,useTransportWideCC:u,useVideoOrientation:d}=e,l=()=>({video:[r(),n()],audio:[i()]}),p=()=>({video:[o(),a(),c(),u(),d()],audio:[o(),c(),u()]});class m extends t{constructor(f){super({...f,codecs:f?.codecs??l(),headerExtensions:f?.headerExtensions??p()})}}s.RTCPeerConnection=m;for(let h of Fp)e[h]!=null&&typeof s[h]>"u"&&(s[h]=e[h])}function Fa(s,e){let t=e instanceof Error?e.message:String(e);console.warn(`[urun-sh/core] Node WebRTC support: optional dependency "${s}" unavailable (${t}). Realtime media will not work in this Node process; install "${s}" to enable it. Doc/KV transport over WebSocket is unaffected.`)}var Ua="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";function qp(s){let e=globalThis.crypto,t=new Uint8Array(s);if(e?.getRandomValues)return e.getRandomValues(t),t;for(let r=0;r<s;r++)t[r]=Math.floor(Math.random()*256);return t}function Nt(s=16){let e=qp(s),t="";for(let r=0;r<s;r++)t+=Ua[e[r]%Ua.length];return t}function qa(s){return`stream:${s}`}var $a="urun-stream-v1";var Yn=1,Pe={BINARY:0,TEXT:1,JSON:2,END:3},Wa=Symbol("urun:stream:end");function Ba(s){if(s===Wa)return Uint8Array.from([Yn,Pe.END]);let e,t;s instanceof Uint8Array?(e=Pe.BINARY,t=s):s instanceof ArrayBuffer?(e=Pe.BINARY,t=new Uint8Array(s)):typeof s=="string"?(e=Pe.TEXT,t=new TextEncoder().encode(s)):(e=Pe.JSON,t=new TextEncoder().encode(JSON.stringify(s)));let r=new Uint8Array(2+t.length);return r[0]=Yn,r[1]=e,r.set(t,2),r}function za(s){let e=s instanceof Uint8Array?s:new Uint8Array(s);if(e.length<2||e[0]!==Yn)throw new Error(`[urun] bad stream envelope (version=${e[0]}, len=${e.length})`);let t=e[1],r=e.subarray(2);switch(t){case Pe.BINARY:return r.slice();case Pe.TEXT:return new TextDecoder().decode(r);case Pe.JSON:return JSON.parse(new TextDecoder().decode(r));case Pe.END:return Wa;default:throw new Error(`[urun] unknown stream envelope KIND 0x${t.toString(16)}`)}}function Ha(s){return{get consumerId(){return s.consumerId},onData(e,t){return s.onStreamData(e,t)},sendData(e,t,r){return s.sendStreamData(e,t,r)}}}var Va=[1e3,2e3,4e3,8e3,3e4],Ga=5,$p=15e3,Ka=15e3,Ya=15e3,Wp=2e3,Bp=6e3,zp=2,Hp=750,Vp=3,Qa=[1e3,2e3,4e3],Gp=15e3;var br="--",Kp=["video","audio"];function Qn(s){let e=s.lastIndexOf(br);if(e<=0)return;let t=s.slice(e+br.length);return Kp.includes(t)?t:void 0}function ic(s,e){return`${s}${br}${e}`}var Yp={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 Ft(s){return s==="error"||s==="ended"||s==="expired"}var Ja=3,Xa=4e3,Za=[{urls:"stun:stun.l.google.com:19302"},{urls:"stun:stun1.l.google.com:19302"}];function ec(s){if(!s)return;let e=/\/(?:ws\/)?rtc\/([^/?#]+)/.exec(s);if(e)try{return decodeURIComponent(e[1])}catch{return e[1]}}var jt=class{_state="disconnected";_sessionId=null;_tracks=new Map;_tracksByName=new Map;_options;_emitter=new Kn.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=yr();_decodeWindowStartSample=yr();_selectedCandidatePair=oc();_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=Qp()),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(Qn(e)!==void 0)return;let t=this._tracksByName.get(e);if(t&&t.readyState!=="ended")return t;for(let r of this._tracks.values())if(!(r.kind!==e||r.readyState==="ended")&&this._streamNameOf(r)===void 0)return r;return t}_streamNameOf(e){for(let[t,r]of this._tracksByName)if(r===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=ec(e.url);if(e.sessionId!==void 0&&e.sessionId!==this._sessionId)throw new We(this._sessionId,e.sessionId);if(t!==void 0&&t!==this._sessionId)throw new We(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,r=th(t);if(r!==void 0&&this.setIncarnation(r),!t||typeof t!="object")return;let n=t,i=typeof n.status=="string"?n.status:void 0;if(i&&!Ft(this._phase.name)&&!this.isStaleClosedMarker(n))if(i==="error"){let o=n.error_reason??n.errorReason,a=typeof o=="string"&&o?o:"session failed";this._setPhase("error",{error:{reason:a,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,r=this._state==="connected";this._currentEpoch=e,t&&r&&!this._intentionalDisconnect&&this._renegotiate()}isStaleIncarnation(e){return Number.isFinite(e)?e<this._currentEpoch:!1}isStaleClosedMarker(e){if(!e)return!1;let t=typeof e.status=="string"?e.status:void 0;if(t!=="closed"&&t!=="ended"&&t!=="error")return!1;let r=e.status_epoch??e.statusEpoch,n=typeof r=="number"?r:Number(r);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,Ft(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,r=this._state==="reconnecting"||this._state==="renegotiating";r||this._setState("connecting");let n=null,i=()=>t!==this._generation||this._intentionalDisconnect,o=()=>{if(i())throw new Error("TransportSession: connect cancelled")},a=async()=>{for(let l of this._connectUrls()){o();try{return await this._connectOnce(l,t,e),!0}catch(p){n=p instanceof Error?p:new Error(String(p)),i()||this._cleanupSocket()}}return!1},c=this._forceResolveOnNextConnect&&this._resolveConnection!==null;this._forceResolveOnNextConnect=!1;let u=c?0:this._resolveConnection?zp:1;for(let l=0;l<u;l++)if(l>0&&(await tc(Hp),o()),await a())return;if(this._resolveConnection)for(let l=0;l<Vp;l++){this._setState("reconnecting"),await tc(Qa[Math.min(l,Qa.length-1)]),o();try{let p=await this._resolveConnection();o(),this.setAuth({jwt:p.jwt??this._options.jwt,authProvider:this._options.authProvider,orgId:this._options.orgId}),this.setConnection({url:p.url,sessionId:p.sessionId,iceServers:p.iceServers??this._options.iceServers}),p.endsAt!==void 0&&(this._endsAt=p.endsAt)}catch(p){if(i())throw new Error("TransportSession: connect cancelled");n=p instanceof Error?p:new Error(String(p));continue}if(await a())return}if(i())throw n??new Error("TransportSession: connect cancelled");this._setState("failed");let d=n??new Error("TransportSession: connect failed");throw r||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 r=this._streamDataHandlers.get(e);return r||(r=new Set,this._streamDataHandlers.set(e,r)),r.add(t),()=>{let n=this._streamDataHandlers.get(e);n?.delete(t),n&&n.size===0&&this._streamDataHandlers.delete(e)}}sendStreamData(e,t,r){return this._ensureDataProducer(e).then(n=>{n.send(Ba(t))})}_awaitSendTransport(){return this._sendTransport?Promise.resolve(this._sendTransport):new Promise((e,t)=>{let r={resolve:i=>{clearTimeout(n),e(i)},reject:i=>{clearTimeout(n),t(i)}},n=setTimeout(()=>{let i=this._sendTransportWaiters.indexOf(r);i>=0&&this._sendTransportWaiters.splice(i,1),t(new Error(`[urun] sendStreamData: no send transport after ${Ka}ms (the server never offered createSendTransport \u2014 data-up produce is impossible on this leg)`))},Ka);this._sendTransportWaiters.push(r)})}_settleSendTransportWaiters(e,t){let r=this._sendTransportWaiters;this._sendTransportWaiters=[];for(let n of r)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 r=this._dataProducerPromises.get(e);if(r)return r;let n=this._awaitSendTransport().then(i=>i.produceData({label:qa(e),protocol:$a,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((r,n)=>{let i=()=>{u(),r(e)},o=l=>{d(new Error(`[urun] sendStreamData: DataChannel error before open: ${l.message}`))},a=()=>{u(),n(new Error("[urun] sendStreamData: DataProducer closed before its DataChannel opened"))},c=setTimeout(()=>{d(new Error(`[urun] sendStreamData: DataChannel not open after ${Ya}ms (the SCTP handshake never completed \u2014 data-up produce is impossible on this channel)`))},Ya),u=()=>{clearTimeout(c),e.off("open",i),e.off("error",o),e.observer.off("close",a)},d=l=>{u();try{e.close()}catch{}n(l)};e.on("open",i),e.on("error",o),e.observer.on("close",a)})}_dispatchStreamData(e,t){for(let r of this._streamDataHandlers.get(e)??[])r(t)}_streamNameFromLabel(e){if(e)return e.startsWith("stream:")?e.slice(7):void 0}async addTrack(e,t){await this._publishTrack(e,t)}async _publishTrack(e,t){let r=e.kind==="video",n=r?this._videoProducer:this._audioProducer;if(n&&!n.closed){if(n.track===e)return;await n.replaceTrack({track:e}),this._rememberPublishIntent(r,e,t);return}if(!this._sendTransport)throw new Error("TransportSession: send transport not ready");let i=await this._sendTransport.produce({track:e,...r?{}:{codecOptions:{opusStereo:!1,opusDtx:!1,opusFec:!1}},stopTracks:!1,...t?{appData:{name:t}}:{}});r?this._videoProducer=i:this._audioProducer=i,this._rememberPublishIntent(r,e,t)}_rememberPublishIntent(e,t,r){let n={track:t,...r!==void 0?{name:r}:{}};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,r=t?this._pendingDataProduce.get(t):void 0;r&&t&&(this._pendingDataProduce.delete(t),r.resolve(e.id));break}case"consumeData":await this._onConsumeData(e);break;case"started":this._emitter.emit("started");break;case"status":this._onStatus(e);break;case"stream.seeked":this._onStreamSeeked(e);break;case"error":this._onServerError(e);break;default:this._emitter.emit("signal",e);break}}_onServerError(e){let t=typeof e.message=="string"?e.message:"signaling error",r=typeof e.code=="string"?e.code:void 0;if(/connect\(\) already called/i.test(t)){if(this._resolveConnection){this._generation++;let 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(r==="TRANSPORT_BIND_FAILED"){this._emitError(new Error(t),r);return}console.warn("[urun] signaling error from server:",t)}_onStreamSeeked(e){let t=typeof e.stream=="string"?e.stream:void 0;if(!t)return;let r=e.target,n=r==="live"?"live":typeof r=="number"?r:Number(r);this._emitter.emit("seeked",t,n)}_onStatus(e){let t=e.request_id??e.requestId;t&&(this._requestId=t);let r=typeof e.status=="string"?e.status:void 0,n=(r?Yp[r]:void 0)??"provisioning",i=Ft(n);if(this._liveReached&&!i||Ft(this._phase.name))return;r!==void 0&&(this._lastServerStatus=r);let o=e.queue_position??e.queuePosition,a=e.queue_depth??e.queueDepth,c=typeof o=="number"&&typeof a=="number";if(n==="expired"){let u=typeof e.reason=="string"&&e.reason?e.reason:this._endsAt!==null?"session reached its maximum length":"session expired";this._setPhase("expired",{error:{reason:u,code:r,kind:"expired"}});return}if(n==="error"){let u=typeof e.reason=="string"&&e.reason?e.reason:r??"admission failed";this._setPhase("error",{error:{reason:u,code:r,kind:r==="error"?"runtime-failed":"create-failed"}});return}if(n==="ended"){this._pastDeadline()?this._setPhase("expired",{error:{reason:"session reached its maximum length",code:r,kind:"expired"}}):this._setPhase("ended");return}if(n==="queued"){this._setPhase("queued",c?{queue:{position:o,depth:a}}:void 0);return}if(n==="connecting"){this._setPhase("connecting");return}this._setPhase("provisioning")}async _onRouterCapabilities(e){Ue()&&await Ot();let t=ja(),r=new nc.Device(t?{handlerName:t}:void 0);await r.load({routerRtpCapabilities:e}),this._device=r,this._send({type:"rtpCapabilities",rtpCapabilities:r.rtpCapabilities})}async _onCreateRecvTransport(e){this._device&&this._buildRecvTransport(e)}_buildRecvTransport(e){if(!this._device)return;let t=e.iceCandidates,r=this._device.createRecvTransport({id:e.id,iceParameters:e.iceParameters,iceCandidates:t,dtlsParameters:e.dtlsParameters,...e.sctpParameters?{sctpParameters:e.sctpParameters}:{},iceServers:this._options.iceServers??Za});this._recvIceRestartAttempts=0,this._clearRecvIceRestart();let n=this._generation;r.on("connect",({dtlsParameters:i},o,a)=>{try{this._send({type:"connectTransport",transportId:r.id,dtlsParameters:i}),o()}catch(c){a(c)}}),r.on("connectionstatechange",i=>{if(n===this._generation){if(i==="connected"){this._clearRecvIceRestart(),this._recvIceRestartAttempts=0,this._reportSelectedCandidatePair(r);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=r}async _reportSelectedCandidatePair(e){let t=null;if(typeof e.getStats=="function")try{t=await e.getStats()}catch{}this._recvTransport===e&&(this._selectedCandidatePair=Zp(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>=Ja?!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>=Ja?!1:(this._sendIceRestartAttempts++,this._armSendIceRestartWatchdog(),this._requestIceRestart(e.id),!0)}_requestIceRestart(e){this._send({type:"restartIce",transportId:e})}_onIceRestarted(e){let t=e.transportId??e.id,r=e.iceParameters;if(!r)return;let n=!!this._recvTransport&&this._recvTransport.id===t,i=!n&&!!this._sendTransport&&this._sendTransport.id===t,o=n?this._recvTransport:i?this._sendTransport:null;o&&(Promise.resolve(o.restartIce({iceParameters:r})).catch(a=>{this._emitter.emit("error",a instanceof Error?a:new Error(String(a)))}),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")},Xa)}_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")},Xa)}_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??Za});this._sendIceRestartAttempts=0,this._clearSendIceRestart();let r=this._generation;t.on("connect",({dtlsParameters:n},i,o)=>{try{this._send({type:"connectSendTransport",transportId:t.id,dtlsParameters:n}),i()}catch(a){o(a)}}),t.on("produce",({kind:n,rtpParameters:i,appData:o},a,c)=>{if(this._pendingProduce){c(new Error("produce already pending"));return}let u=o&&typeof o.name=="string"?o.name:void 0,d=setTimeout(()=>{let l=this._pendingProduce;if(!l||l.timeoutId!==d)return;this._pendingProduce=null;let p=new at(n,{stream:u,timeoutMs:dt});this._setPhase("error",{error:{reason:p.message,code:"produce-ack-timeout",kind:"produce-timeout"}}),this._emitter.emit("error",p),l.reject(p)},dt);this._pendingProduce={timeoutId:d,resolve:l=>{a({id:l})},reject:c};try{this._send(u?{type:"produce",kind:n,name:u,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:o},a,c)=>{try{i&&this._pendingDataProduce.set(i,{resolve:u=>a({id:u}),reject:c}),this._send({type:"produceData",sctpStreamParameters:n,label:i,protocol:o})}catch(u){i&&this._pendingDataProduce.delete(i),c(u)}}),t.on("connectionstatechange",n=>{if(r===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(r){console.warn("[urun] republish: mic re-produce after reconnect failed",r)}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(r){console.warn("[urun] republish: camera re-produce after reconnect failed",r)}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,r=this._streamNameFromLabel(t);if(!r)return;let n=await this._recvTransport.consumeData({id:e.id,dataProducerId:e.dataProducerId,sctpStreamParameters:e.sctpStreamParameters,label:t,protocol:e.protocol});this._dataConsumers.set(r,n),n.on("message",a=>{try{let c=typeof a=="string"?new TextEncoder().encode(a):new Uint8Array(a);this._dispatchStreamData(r,za(c))}catch(c){this._emitter.emit("error",c instanceof Error?c:new Error(String(c)))}});let i=!1,o=()=>{i||n.closed||(i=!0,this._send({type:"dataConsumerReady",id:e.id}))};n.readyState==="open"?o():n.on("open",o)}async _onConsume(e){if(!this._recvTransport)return;let t=this._generation,r=await this._recvTransport.consume({id:e.id,producerId:e.producerId,kind:e.kind,rtpParameters:e.rtpParameters});this._consumers.set(r.id,r),this._tracks.set(r.track.id,r.track);let n=e.streamName??e.label;n&&this._tracksByName.set(n,r.track),r.track.addEventListener?.("unmute",()=>{t!==this._generation||this._intentionalDisconnect||this._isTerminalPhase()||this._liveReached||this._setPhase("live")},{once:!0}),this._emitter.emit("track",r.track);let i=r.id;r.track.addEventListener("ended",()=>{t!==this._generation||this._intentionalDisconnect||this._closeConsumer(i)},{once:!0}),this._send({type:"resumeConsumer",consumerId:r.id}),this._startMediaMonitor()}_closeConsumer(e){let t=this._consumers.get(e);if(!t)return;this._consumers.delete(e);let r=t.track;try{t.close()}catch{}if(r){this._tracks.delete(r.id);for(let[n,i]of this._tracksByName)i===r&&this._tracksByName.delete(n)}}_closeConsumersByProducer(e){for(let[t,r]of this._consumers)r.producerId===e&&this._closeConsumer(t)}_mediaPollMs(){let e=this._options.mediaLiveness?.pollMs;return e===void 0?Wp:e}_mediaStallTimeoutMs(){let e=this._options.mediaLiveness?.stallTimeoutMs;return e===void 0?Bp: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=yr();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=yr(),r=await Promise.all(Array.from(this._consumers.values(),d=>eh(d)));for(let d of r)Jp(t,d);if(e!==this._generation||this._intentionalDisconnect||this._isTerminalPhase())return;this._latestInboundSample=t;let n=Date.now(),{total:i,framesDecoded:o}=t;if(i>this._lastInboundTotal){this._lastInboundTotal=i,this._lastInboundAdvanceAt=n,i>0&&(this._mediaEverFlowed=!0,this._liveReached||this._setPhase("live")),this._checkDecodeLiveness(o,n);return}if(!this._mediaEverFlowed||this._mediaDeathHandled||n-this._lastInboundAdvanceAt<this._mediaStallTimeoutMs())return;let a=this._mediaStallTimeoutMs(),c={sessionId:this._options.sessionId,stallWindowMs:a,inboundTotal:i,...rc(this._latestInboundSample),...this._selectedCandidatePair};if(this._recvTransport?.connectionState==="connected"){this._emitDiagnostic({level:"info",kind:"media-idle",message:`no inbound media for ${a/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 ${a/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 r=this._mediaStallTimeoutMs(),n=Xp(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 ${r/1e3}s (framesDecoded stuck at ${e}) \u2014 decoder stalled${i}; reconnecting the stream`,detail:{sessionId:this._options.sessionId,stallWindowMs:r,inboundTotal:this._lastInboundTotal,framesDecoded:e,...rc(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>=Ga){this._setState("failed"),this._emitError(new Error(`Failed after ${Ga} attempts`));return}let r=t?0:Va[Math.min(this._reconnectAttempts,Va.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)}},r)}_connectUrls(){let e=[],t=r=>{if(!r)return;let n=ec(r)!==void 0,i=this._sessionId&&!n?`${r}${r.includes("?")?"&":"?"}sessionId=${encodeURIComponent(this._sessionId)}`:r;e.includes(i)||e.push(i)};t(this._options.url);for(let r of this._options.fallbackUrls??[])t(r);return e}_connectOnce(e,t,r){return new Promise((n,i)=>{let o=!1,a=!1,c=null,u=new WebSocket(e);this._ws=u;let d=()=>this._ws!==u||t!==this._generation,l=m=>{a||(a=!0,c&&clearTimeout(c),this._cancelPendingDial===p&&(this._cancelPendingDial=null),i(m))},p=m=>{try{u.close()}catch{}l(m)};this._cancelPendingDial=p,c=setTimeout(()=>{try{u.close()}catch{}l(new Error("TransportSession: connect timed out"))},$p),u.onopen=()=>{if(!a){if(d()){try{u.close()}catch{}l(new Error("TransportSession: connect superseded during dial"));return}o=!0,c&&clearTimeout(c),this._connectedUrl=e,this._multiplexer=new rt(u),u.send(JSON.stringify(this._startMessage(r))),this._scheduleReconnectBudgetReset(),this._setState("connected"),this._liveReached||this._setPhase("connecting"),this._emitter.emit("connected"),a=!0,this._cancelPendingDial===p&&(this._cancelPendingDial=null),n()}},u.onerror=()=>{o||l(new Error("WebSocket connection error"))},u.onclose=()=>{if(!o){l(new Error("WebSocket closed before connecting"));return}if(!d()&&(this._clearReconnectBudgetReset(),c&&clearTimeout(c),this._setState("disconnected"),!this._intentionalDisconnect)){if(this._pastDeadline()&&!Ft(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(r)}},u.onmessage=m=>{if(!(this._ws!==u||t!==this._generation)&&typeof m.data=="string")try{this._handleMessage(JSON.parse(m.data))}catch(h){this._emitter.emit("error",h instanceof Error?h:new Error(String(h)))}}})}_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},Gp))}_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 r={name:e};t?.queue&&(r.queue=t.queue),t?.runtime&&(r.runtime=t.runtime),Pr(e)?(this._wakingSince??=Date.now(),r.wakingSince=this._wakingSince):this._wakingSince=void 0,this._requestId&&(r.requestId=this._requestId),this._sessionId&&(r.sessionId=this._sessionId),this._endsAt!==null&&(r.endsAt=this._endsAt),t?.error&&(r.error=t.error),this._phase=r,this._isTerminalPhase()&&(this._stopMediaMonitor(),this._clearRecvIceRestart(),this._clearSendIceRestart(),this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null)),this._emitter.emit("phase",r)}reportAdmission(e){if(e.requestId&&(this._requestId=e.requestId),this._lastServerStatus=e.status,this._liveReached||Ft(this._phase.name))return;let{runtime:t,queue:r}=e;if(t?.state==="unavailable"){this._setPhase("unavailable",{runtime:t});return}if(t?.state==="starting"){this._setPhase("provisioning",{runtime:t});return}if(t?.state==="busy"||e.status==="queued"){this._setPhase("queued",{queue:r,runtime:t});return}this._setPhase("provisioning")}_emitError(e,t){this._setPhase("error",{error:{reason:e.message,code:t,kind:"transport-failed"}}),this._emitter.emit("error",e)}reportAllocationFailure(e,t){this._setPhase("error",{error:{reason:e.message,code:"allocation-failed",kind:"create-failed",httpStatus:t}}),this._emitter.emit("error",e)}};function tc(s){return new Promise(e=>setTimeout(e,s))}function Qp(){return Nt()}var Jn=["packetsReceived","packetsLost","nackCount","pliCount","firCount","keyFramesDecoded","framesReceived","framesDropped","retransmittedPacketsReceived","retransmittedBytesReceived","jitterBufferDelay","jitterBufferEmittedCount"];function yr(){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 Jp(s,e){s.total+=e.total,e.framesDecoded!==null&&(s.framesDecoded=(s.framesDecoded??0)+e.framesDecoded),e.jitter!==null&&(s.jitter=s.jitter===null?e.jitter:Math.max(s.jitter,e.jitter));for(let t of Jn)e[t]!==null&&(s[t]=(s[t]??0)+e[t])}function rc(s){return Object.fromEntries(Jn.map(e=>[e,s[e]]))}function sc(s,e){return s===null||e===null||e<s?null:e-s}function Xp(s,e){let t=s.packetsLost!==null&&e.packetsLost!==null?e.packetsLost-s.packetsLost:null,r=sc(s.packetsReceived,e.packetsReceived),n=sc(s.nackCount,e.nackCount),i=t===null?null:Math.max(0,t),o=i!==null&&r!==null?i+r:0;return{packetsLostWindow:t,packetsReceivedWindow:r,nackCountWindow:n,jitterSec:e.jitter,lossPct:o>0&&i!==null?i/o*100:null}}function oc(){return{localType:null,remoteType:null,protocol:null,remoteAddress:null,remotePort:null}}function Zp(s){let e=new Map;ac(s,a=>{let c=typeof a.id=="string"?a.id:null;c&&e.set(c,a)});let t=Array.from(e.values()).find(a=>a.type==="transport"),r=typeof t?.selectedCandidatePairId=="string"?t.selectedCandidatePairId:null,n=(r?e.get(r):void 0)??Array.from(e.values()).find(a=>a.type==="candidate-pair"&&a.selected===!0);if(!n)return oc();let i=typeof n.localCandidateId=="string"?e.get(n.localCandidateId):void 0,o=typeof n.remoteCandidateId=="string"?e.get(n.remoteCandidateId):void 0;return{localType:typeof i?.candidateType=="string"?i.candidateType:null,remoteType:typeof o?.candidateType=="string"?o.candidateType:null,protocol:typeof i?.protocol=="string"?i.protocol:typeof o?.protocol=="string"?o.protocol:null,remoteAddress:typeof o?.address=="string"?o.address:typeof o?.ip=="string"?o.ip:null,remotePort:typeof o?.port=="number"?o.port:null}}function ac(s,e){let t=r=>{r&&typeof r=="object"&&e(r)};if(s instanceof Map)for(let[r,n]of s.entries()){if(!n||typeof n!="object")continue;let i=n;e(typeof i.id=="string"?i:{...i,id:r})}else(Array.isArray(s)||s&&typeof s.forEach=="function")&&s.forEach(t)}async function eh(s){let e=yr();if(typeof s.getStats!="function")return e;let t;try{t=await s.getStats()}catch{return e}return ac(t,n=>{if(n.type==="inbound-rtp"){let i=typeof n.bytesReceived=="number"?n.bytesReceived:0,o=typeof n.packetsReceived=="number"?n.packetsReceived:0;if(e.total+=i+o,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 a of Jn)typeof n[a]=="number"&&(e[a]=(e[a]??0)+n[a])}}}),e}function th(s){if(!s||typeof s!="object")return;let e=s.epoch,t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:void 0}var Tr=De(require("yjs"));var cc=require("y-websocket"),Zn=require("y-protocols/awareness"),rh=1;function dc(s){let e=new URL(s);return`${e.protocol}//${e.host}/doc`}function uc(s){let e=s.WebSocketPolyfill??globalThis.WebSocket;if(!e)throw new Error("[urun] no WebSocket implementation available for the yjs doc provider (browser global missing and no WebSocketPolyfill passed)");return(t,r,n)=>{let i=`${s.sessionId}/${t}`,o=new cc.WebsocketProvider(s.serverUrl,i,r,{awareness:n,params:{dsv:String(rh),...s.token?{token:s.token}:{}},WebSocketPolyfill:e,disableBc:!0});return{get awareness(){return o.awareness},get synced(){return o.synced},onSync(a){let c=u=>a(u);return o.on("sync",c),()=>o.off("sync",c)},ensureConnected(){o.wsconnected||o.connect()},destroy(){o.destroy()}}}}var Xn=class{constructor(e,t,r){this._name=e;this._doc=t;this.awareness=r}_name;_doc;awareness;_inner=null;_innerUnsub=null;_syncHandlers=new Set;_destroyed=!1;get synced(){return this._inner?.synced??!1}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 r of[...this._syncHandlers])r(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()}},Es=class{_target=null;_bridges=[];connect=(e,t,r)=>{let n=new Xn(e,t,r);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)}}};function Rr(s){if(s===null||typeof s!="object"||Array.isArray(s))return!1;let e=Object.getPrototypeOf(s);return e===Object.prototype||e===null}var Ps="$bytes";function sh(s){return s instanceof Uint8Array||s instanceof ArrayBuffer}function nh(s){if(!Rr(s))return!1;let e=Object.keys(s);return e.length===1&&e[0]===Ps&&typeof s[Ps]=="string"}function ih(s){return s instanceof ArrayBuffer?new Uint8Array(s):s}function oh(s){if(typeof Buffer<"u")return Buffer.from(s).toString("base64");let e="";for(let t=0;t<s.length;t++)e+=String.fromCharCode(s[t]);return btoa(e)}function ah(s){if(typeof Buffer<"u")return new Uint8Array(Buffer.from(s,"base64"));let e=atob(s),t=new Uint8Array(e.length);for(let r=0;r<e.length;r++)t[r]=e.charCodeAt(r);return t}function ei(s){if(sh(s))return{[Ps]:oh(ih(s))};if(Array.isArray(s))return s.map(ei);if(Rr(s)){let e={};for(let[t,r]of Object.entries(s))e[t]=ei(r);return e}return s}function Sr(s){if(nh(s))return ah(s[Ps]);if(Array.isArray(s))return s.map(Sr);if(Rr(s)){let e={};for(let[t,r]of Object.entries(s))e[t]=Sr(r);return e}return s}var lc=Symbol("urun:doc:path-absent");function ch(s,e){let t=e.split("."),r=s;for(let n of t){if(r===null||typeof r!="object"||!(n in r))return lc;r=r[n]}return r}function dh(s,e){return s===e?!0:JSON.stringify(s)===JSON.stringify(e)}function ti(s,e){for(let[t,r]of Object.entries(e))if(Rr(r)){let n=s.get(t);if(!(n instanceof Tr.Map)){let i=n;n=new Tr.Map,s.set(t,n),Rr(i)&&ti(n,i)}ti(n,r)}else{if(dh(s.get(t),r))continue;s.set(t,r)}}var uh=Symbol("urun:doc:local"),xs=class{_doc=new Tr.Doc;_root=this._doc.getMap("session");_awareness=new Zn.Awareness(this._doc);_listeners=new Set;_key;_sessionId;_connection=null;_connUnsub=null;_synced;_syncWaiters=new Set;_texts=new Map;_observer=()=>this.notify();constructor(e,t,r){this._key=e,this._sessionId=t,this._root.observeDeep(this._observer),r?(this._connection=r(e,this._doc,this._awareness),this._synced=this._connection.synced,this._connUnsub=this._connection.onSync(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=ei(e),this.applyPatch(e)}get(e,t){let r=this.snapshot();if(!e)return Sr(r);let n=ch(r,e);return n===lc?t:Sr(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 ri(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(()=>{ti(this._root,e)},uh)}snapshot(){return this._root.toJSON()}notify(){let e=Sr(this.snapshot());for(let t of this._listeners)t(e)}},ri=class{constructor(e){this._ytext=e;this._observer=t=>{for(let r of t.delta)if(typeof r.insert=="string"&&r.insert.length>0){let n=r.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 pc(s){return{get clientId(){return s.clientID},set(e){s.setLocalState(e)},setField(e,t){s.setLocalStateField(e,t)},getLocal(){return s.getLocalState()??null},getStates(){return s.getStates()},on(e,t){let r=()=>t(s.getStates());return s.on("change",r),r(),()=>s.off("change",r)}}}var si="activity",ni="visibility",hc=15e3,Is=["pointerdown","pointermove","keydown","wheel","touchstart"];function Ds(s){let e=s.now??Date.now,t=s.windowTarget!==void 0?s.windowTarget:typeof window<"u"?window:null,r=s.documentTarget!==void 0?s.documentTarget:typeof document<"u"?document:null,n=!1,i,o=()=>{if(n)return;let l=e();if(!(i!==void 0&&l-i<15e3)){i=l;try{s.awareness.setLocalStateField(si,{at:l})}catch{}}},a=()=>{if(!(n||!r||r.visibilityState===void 0))try{s.awareness.setLocalStateField(ni,r.visibilityState)}catch{}},c=()=>o(),u=()=>{a(),(!r||r.visibilityState===void 0||r.visibilityState==="visible")&&o()};if(t)for(let l of Is)t.addEventListener(l,c,{passive:!0,capture:!0});r&&r.addEventListener("visibilitychange",u);let d=null;return s.isProducing&&(d=setInterval(()=>{if(!n)try{s.isProducing?.()&&o()}catch{}},15e3),d.unref?.()),o(),a(),{touch:o,dispose(){if(!n){if(n=!0,t)for(let l of Is)t.removeEventListener(l,c,{capture:!0});r&&r.removeEventListener("visibilitychange",u),d&&(clearInterval(d),d=null)}}}}var fc=250;function As(s){if(typeof document>"u"||typeof window>"u"||typeof document.addEventListener!="function"||typeof window.addEventListener!="function")return()=>{};let e=0,t=()=>{if(document.visibilityState==="hidden")return;let r=Date.now();r-e<250||(e=r,s())};return document.addEventListener("visibilitychange",t),window.addEventListener("pageshow",t),window.addEventListener("focus",t),()=>{document.removeEventListener("visibilitychange",t),window.removeEventListener("pageshow",t),window.removeEventListener("focus",t)}}function Ms(s){if(typeof window>"u"||typeof window.addEventListener!="function")return()=>{};let e=!1,t=r=>{r.persisted||e||(e=!0,s())};return window.addEventListener("pagehide",t),()=>{window.removeEventListener("pagehide",t)}}function Ls(s){if(typeof window>"u"||typeof window.addEventListener!="function")return()=>{};let e=t=>{s()&&(t.preventDefault(),t.returnValue="")};return window.addEventListener("beforeunload",e),()=>{window.removeEventListener("beforeunload",e)}}var mc="video/mp4";function Os(s,e={}){let t=e.timesliceMs??1e3,r=null,n=null,i=!1,o=(a,c,u)=>{let d=typeof MediaRecorder>"u"?void 0:MediaRecorder;if(!d)throw new Error("[urun] stream.chunks(): MediaRecorder is unavailable in this runtime. Pass { source } to chunks() to inject a byte-tap (e.g. a Node/werift consumer).");let l=e.mimeType??(typeof d.isTypeSupported=="function"&&d.isTypeSupported(mc)?mc:void 0),p=new MediaStream([a]),m=new d(p,l?{mimeType:l}:void 0);r=m;let h=Promise.resolve();m.ondataavailable=f=>{let g=f.data;i||!g||g.size===0||(h=h.then(async()=>{let v=new Uint8Array(await g.arrayBuffer());i||c(v)}))},m.onstop=()=>{h.then(()=>{i||u()})},m.onerror=()=>{h.then(()=>{i||u()})},m.start(t)};return{start(a,c){if(r||i)return;let u=s.track();if(u){o(u,a,c);return}n=s.onTrack(d=>{!d||r||i||(n?.(),n=null,o(d,a,c))})},stop(){if(i)return;i=!0,n?.(),n=null;let a=r;if(r=null,a&&a.state!=="inactive")try{a.stop()}catch{}}}}function lh(s){let e=s;return typeof e[Symbol.asyncIterator]=="function"||(e[Symbol.asyncIterator]=function(){let t=s.getReader();return{next(){return t.read()},async return(){try{await t.cancel()}catch{}try{t.releaseLock()}catch{}return{value:void 0,done:!0}},[Symbol.asyncIterator](){return this}}}),e}function gc(s,e){let t=null,r=!1,n=!1,i=new ReadableStream({pull(o){r||(r=!0,t=s(e),t.start(a=>{if(!n)try{o.enqueue(a)}catch{}},()=>{if(!n){n=!0;try{o.close()}catch{}}}))},cancel(){n=!0,t?.stop(),t=null}},new CountQueuingStrategy({highWaterMark:0}));return lh(i)}var Ns=require("@msgpack/msgpack"),oi=65536;function Fs(s){let e=(0,Ns.encode)(s),t=new Uint8Array(4+e.byteLength);return new DataView(t.buffer).setUint32(0,e.byteLength,!0),t.set(e,4),t}var Ut=class{buf=new Uint8Array(0);push(e){if(e.byteLength>0){let r=new Uint8Array(this.buf.byteLength+e.byteLength);r.set(this.buf),r.set(e,this.buf.byteLength),this.buf=r}let t=[];for(;this.buf.byteLength>=4;){let r=new DataView(this.buf.buffer,this.buf.byteOffset).getUint32(0,!0);if(r>oi)throw new Error("[urun] wt control frame too large");if(this.buf.byteLength<4+r)break;let n=this.buf.subarray(4,4+r);this.buf=this.buf.subarray(4+r),t.push((0,Ns.decode)(n))}return t}},qt=12,ii=1;function js(s){let e=s.getUint8(8);return{groupId:s.getUint32(0,!0),frameSeq:s.getUint32(4,!0),keyframe:(e&ii)===ii,fragIndex:s.getUint8(9),fragCount:s.getUint8(10)}}function _c(s){let e=new Uint8Array(qt),t=new DataView(e.buffer);return t.setUint32(0,s.groupId,!0),t.setUint32(4,s.frameSeq,!0),t.setUint8(8,s.keyframe?ii:0),t.setUint8(9,s.fragIndex),t.setUint8(10,s.fragCount),t.setUint8(11,0),e}var ph=100,$t=class{constructor(e,t={}){this.cb=e;this.now=t.now??(()=>performance.now()),this.debounceMs=t.keyframeRequestDebounceMs??ph}cb;pending=new Map;newestGroupSeen=-1;newestFrameDelivered=-1;needKeyframe=!0;kfRequestedAt=-1/0;now;debounceMs;bytesInWindow=0;framesDelivered=0;framesAbandoned=0;push(e){if(e.byteLength<qt)return;let t=js(new DataView(e.buffer,e.byteOffset));if(this.bytesInWindow+=e.byteLength,t.groupId<this.newestGroupSeen||(t.groupId>this.newestGroupSeen&&(this.framesAbandoned+=this.pending.size,this.pending.clear(),this.newestGroupSeen=t.groupId,this.needKeyframe=!0),t.frameSeq<=this.newestFrameDelivered))return;let r=this.pending.get(t.frameSeq);if(r||(r={groupId:t.groupId,keyframe:t.keyframe,fragCount:t.fragCount,received:0,chunks:new Array(t.fragCount)},this.pending.set(t.frameSeq,r)),!r.chunks[t.fragIndex]){r.chunks[t.fragIndex]=e.subarray(qt),r.received++,r.received===r.fragCount&&(this.pending.delete(t.frameSeq),this.deliver(t.frameSeq,r));for(let n of this.pending.keys())n<t.frameSeq-1&&(this.pending.delete(n),this.framesAbandoned++)}}requireKeyframe(){this.needKeyframe=!0}drainWindow(){let e={bytes:this.bytesInWindow,delivered:this.framesDelivered,abandoned:this.framesAbandoned};return this.bytesInWindow=0,this.framesDelivered=0,this.framesAbandoned=0,e}deliver(e,t){if(this.needKeyframe&&!t.keyframe){this.framesAbandoned++,this.requestKeyframe();return}if(e!==this.newestFrameDelivered+1&&!t.keyframe&&this.newestFrameDelivered>=0){this.needKeyframe=!0,this.framesAbandoned++,this.requestKeyframe();return}let r=t.chunks.reduce((o,a)=>o+a.byteLength,0),n=new Uint8Array(r),i=0;for(let o of t.chunks)n.set(o,i),i+=o.byteLength;this.needKeyframe=!1,this.newestFrameDelivered=e,this.framesDelivered++,this.cb.onFrame({seq:e,groupId:t.groupId,keyframe:t.keyframe,data:n})}requestKeyframe(){let e=this.now();e-this.kfRequestedAt<this.debounceMs||(this.kfRequestedAt=e,this.cb.onKeyframeNeeded())}};var hh=/^avc[13]\.[0-9a-fA-F]{6}$/;function fh(s){return hh.test(s)?null:`codec ${JSON.stringify(s)} is not a fully-qualified WebCodecs H.264 string \u2014 the WT pipeline carries H.264, which VideoDecoder.configure needs as "avc1.PPCCLL" (e.g. "avc1.42E01F"); RTP MIMEs ("video/H264") and bare names ("h264") are rejected by WebCodecs as "Unknown or ambiguous codec name"`}function ai(s,e){let t=fh(s);if(t)throw new Error(`[urun] webtransport ${e} ${t}`)}var mh=250,gh=3,_h=1e4,ci=2500,Wt=class{constructor(e,t,r){this.offer=e;this.sessionId=t;this.canvas=r;this.firstMedia=new Promise((n,i)=>{this.firstFrameResolve=n,this.firstFrameReject=i}),this.firstMedia.catch(()=>{})}offer;sessionId;canvas;kind="webtransport";wt;decoder=null;decoderConfig=null;decoderErrorsAt=[];writer;deadCb=null;deadFired=!1;stopped=!1;feedbackTimer=null;reassembler=new $t({onFrame:e=>this.decodeFrame(e.seq,e.keyframe,e.data),onKeyframeNeeded:()=>{this.sendControl({t:"keyframe-request"}).catch(()=>{})}});lastArrivalTs=0;jitterEwmaMs=0;lastStats={recvBps:0,lossPct:0,jitterMs:0};firstFrameResolve=null;firstFrameReject=null;firstFrameOutput=!1;firstDecodeTimer=null;firstMedia;async start(){let e=globalThis.WebTransport;if(typeof e!="function")throw new Error("[urun] WebTransport API not available");ai(this.offer.codec,"transport.offer"),this.wt=new e(this.offer.url,{serverCertificateHashes:this.offer.certHashes.map(a=>({algorithm:"sha-256",value:Uint8Array.from(atob(a),c=>c.charCodeAt(0))})),congestionControl:"low-latency"}),await this.wt.ready;let t=await this.wt.createBidirectionalStream();this.writer=t.writable.getWriter(),await this.sendControl({t:"hello",token:this.offer.token,sessionId:this.sessionId});let r=t.readable.getReader(),n=new Ut,i=[],o=await this.readControl(r,n,i);if(o?.t!=="hello-ack")throw new Error("[urun] gateway rejected hello");ai(o.codec,"hello-ack"),this.initDecoder(o.codec,o.width,o.height),this.controlLoop(r,n,i).catch(a=>this.die(`control loop: ${a}`)),this.datagramLoop().catch(a=>this.die(`datagram loop: ${a}`)),this.feedbackLoop(),this.wt.closed.then(()=>this.die("connection closed")).catch(a=>this.die(`connection error: ${a}`))}async stop(){this.stopped=!0,this.feedbackTimer&&clearInterval(this.feedbackTimer),this.firstDecodeTimer&&clearTimeout(this.firstDecodeTimer),this.firstFrameReject?.(new Error("[urun] webtransport session stopped")),this.firstFrameReject=null,this.firstFrameResolve=null;try{this.decoder?.close()}catch{}try{this.wt?.close()}catch{}}onDead(e){this.deadCb=e}stats(){return this.lastStats}initDecoder(e,t,r){let n=globalThis.VideoDecoder;if(typeof n!="function")throw new Error("[urun] WebCodecs VideoDecoder not available");let i=this.canvas.getContext("2d");if(!i)throw new Error("[urun] canvas 2d context unavailable");this.decoderConfig={codec:e,width:t,height:r},this.decoder=new n({output:o=>{this.firstFrameOutput=!0,this.firstDecodeTimer&&(clearTimeout(this.firstDecodeTimer),this.firstDecodeTimer=null),this.canvas.width=o.displayWidth,this.canvas.height=o.displayHeight,i.drawImage(o,0,0),o.close()},error:o=>this.onDecoderError(o)}),this.decoder.configure({codec:e,...t>0&&r>0?{codedWidth:t,codedHeight:r}:{},optimizeForLatency:!0,hardwareAcceleration:"no-preference"})}onDecoderError(e){if(this.stopped||this.deadFired)return;let t=performance.now();if(this.decoderErrorsAt=this.decoderErrorsAt.filter(n=>t-n<_h),this.decoderErrorsAt.push(t),this.decoderErrorsAt.length>=gh){this.die(`decoder: ${e.message}`);return}console.warn("[urun] webtransport decoder error \u2014 re-initializing the decoder:",e.message);try{this.decoder?.close()}catch{}this.decoder=null;let r=this.decoderConfig;if(!r){this.die(`decoder: ${e.message} (no config to re-init from)`);return}try{this.initDecoder(r.codec,r.width,r.height)}catch(n){this.die(`decoder re-init: ${n instanceof Error?n.message:String(n)}`);return}this.reassembler.requireKeyframe(),this.sendControl({t:"keyframe-request"}).catch(()=>{})}armFirstDecodeDeadline(){if(this.firstDecodeTimer||this.firstFrameOutput||this.stopped||this.deadFired)return;let e=setTimeout(()=>{this.firstDecodeTimer=null,!(this.firstFrameOutput||this.stopped||this.deadFired)&&(console.error(`[urun] webtransport: media datagrams arriving but NO frame decoded within ${ci}ms \u2014 broken WT media leg; failing over to WebRTC LOUDLY`),this.die(`no-first-frame: datagrams flowing but nothing decoded within ${ci}ms`))},ci);e.unref?.(),this.firstDecodeTimer=e}async datagramLoop(){let e=this.wt.datagrams.readable.getReader();for(;!this.stopped;){let{value:t,done:r}=await e.read();if(r)break;if(!t)continue;this.armFirstDecodeDeadline();let n=performance.now();if(this.lastArrivalTs>0){let i=n-this.lastArrivalTs;this.jitterEwmaMs+=(Math.abs(i-1e3/24)-this.jitterEwmaMs)/16}this.lastArrivalTs=n,this.reassembler.push(t)}}decodeFrame(e,t,r){let n=globalThis.EncodedVideoChunk;!this.decoder||typeof n!="function"||(this.decoder.decode(new n({type:t?"key":"delta",timestamp:e*(1e6/24),data:r})),this.firstFrameResolve?.(),this.firstFrameResolve=null,this.firstFrameReject=null)}async sendControl(e){await this.writer.write(Fs(e))}async readControl(e,t,r=[]){for(;;){let n=r.shift();if(n)return n;let{value:i,done:o}=await e.read();if(o)return null;i&&r.push(...t.push(i))}}async controlLoop(e,t,r){for(;!this.stopped;){let n=await this.readControl(e,t,r);if(!n)break;n.t==="ping"&&this.sendControl({t:"pong",ts:n.ts}).catch(()=>{})}}feedbackLoop(){let e=performance.now();this.feedbackTimer=setInterval(()=>{if(this.stopped)return;let t=performance.now(),r=(t-e)/1e3;e=t;let n=this.reassembler.drainWindow(),i=n.delivered+n.abandoned;this.lastStats={recvBps:r>0?n.bytes*8/r:0,lossPct:i>0?100*n.abandoned/i:0,jitterMs:this.jitterEwmaMs},this.sendControl({t:"feedback",...this.lastStats}).catch(()=>{})},mh)}die(e){if(!(this.stopped||this.deadFired)){this.deadFired=!0,this.stopped=!0,this.feedbackTimer&&clearInterval(this.feedbackTimer),this.firstDecodeTimer&&clearTimeout(this.firstDecodeTimer),this.firstFrameReject?.(new Error(e)),this.firstFrameReject=null,this.firstFrameResolve=null;try{this.decoder?.close()}catch{}this.deadCb?.(e)}}};var vc=2500,wc=["av01.0.08M.08","avc1.42E01F","avc1.640028"],Bt=class{constructor(e,t,r){this.signaling=e;this.sessionId=t;this.opts=r}signaling;sessionId;opts;session=null;offer=null;get activeTransport(){return this.session?.kind??null}async connect(){let e=globalThis,t=typeof e.WebTransport=="function",r=typeof e.VideoDecoder=="function",n=this.opts.allowWebTransport??!0,i={webtransport:t&&r&&n,webcodecs:r,codecs:wc};this.offer=await this.signaling.request("transport.offer",{sessionId:this.sessionId,capabilities:i});let o=i.webtransport&&!!this.offer.webtransport;if(i.webtransport&&!this.offer.webtransport&&console.warn("[urun] webtransport unavailable: server offered webrtc only \u2014 staying on webrtc"),o){let a=null;try{return a=this.createWebTransportSession(),await yc(a.start(),this.opts.quicDeadlineMs??vc,"quic connect deadline"),this.session=a,this.armFailover(),this.notifyEstablished("webtransport"),this.opts.onTransportChange?.("webtransport"),this.session}catch(c){console.warn("[urun] webtransport failed, falling back to webrtc:",c),a?.stop().catch(()=>{}),this.notifyEstablished("webrtc",String(c instanceof Error?c.message:c))}}return this.session=await this.startWebRtc(),o||this.notifyEstablished("webrtc"),this.opts.onTransportChange?.("webrtc"),this.session}async disconnect(){await this.session?.stop(),this.session=null}async retryWebTransport(){if(this.session?.kind==="webtransport")return null;let e=globalThis;if(!(typeof e.WebTransport=="function"&&typeof e.VideoDecoder=="function")||!(this.opts.allowWebTransport??!0))return null;let r=this.session;if(this.offer=await this.signaling.request("transport.offer",{sessionId:this.sessionId,capabilities:{webtransport:!0,webcodecs:!0,codecs:wc}}),!this.offer.webtransport)return null;let n=this.createWebTransportSession();try{await yc(n.start(),this.opts.quicDeadlineMs??vc,"quic connect deadline")}catch(i){throw n.stop().catch(()=>{}),i}return this.session!==r?(n.stop().catch(()=>{}),null):(this.session=n,this.armFailover(),this.notifyEstablished("webtransport"),this.opts.onTransportChange?.("webtransport","background upgrade"),r?.stop().catch(()=>{}),n)}createWebTransportSession(){let e=this.offer.webtransport;if(this.opts.createWebTransportSession)return this.opts.createWebTransportSession(e);if(!this.opts.canvas)throw new Error("[urun] TransportNegotiator: canvas is required for the WebTransport path");return new Wt(e,this.sessionId,this.opts.canvas)}async startWebRtc(){let e=this.opts.createWebRtcSession();return await e.start(),e.onDead(t=>{console.error("[urun] webrtc path died:",t)}),e}armFailover(){let e=this.session;e.onDead(t=>{console.warn("[urun] quic died mid-session, failing over to webrtc:",t),e.stop().catch(()=>{}),(async()=>{try{this.session=await this.startWebRtc(),this.notifyEstablished("webrtc",`failover: ${t}`),this.opts.onTransportChange?.("webrtc",t)}catch(r){this.session=null,console.error("[urun] failover to webrtc also failed:",r)}})()})}notifyEstablished(e,t){this.signaling.notify("transport.established",{sessionId:this.sessionId,transport:e,fallbackReason:t})}};function yc(s,e,t){return new Promise((r,n)=>{let i=setTimeout(()=>n(new Error(t)),e);s.then(o=>{clearTimeout(i),r(o)},o=>{clearTimeout(i),n(o)})})}var vh=1e4,zt=class{constructor(e,t=vh){this.carrier=e;this.requestTimeoutMs=t}carrier;requestTimeoutMs;request(e,t){let r=Nt();return new Promise((n,i)=>{let o=setTimeout(()=>{a(),i(new Error(`[urun] signaling request timed out: ${e}`))},this.requestTimeoutMs),a=this.carrier.onSignal(c=>{if(c.type!==`${e}.response`||c.requestId!==r)return;if(clearTimeout(o),a(),c.error){i(new Error(`[urun] ${e} failed: ${String(c.error)}`));return}let{type:u,requestId:d,...l}=c;n(l)});this.carrier.sendSignal({type:e,requestId:r,...t})})}notify(e,t){this.carrier.sendSignal({type:e,...t})}on(e,t){return this.carrier.onSignal(r=>{r.type===e&&t(r)})}};var wh="video",Ht=class{constructor(e,t=wh){this.transport=e;this.streamName=t;this.firstMedia=new Promise((r,n)=>{this.firstMediaResolve=r,this.firstMediaReject=n}),this.firstMedia.catch(()=>{})}transport;streamName;kind="webrtc";deadCb=null;deadFired=!1;unsubscribers=[];firstMediaResolve=null;firstMediaReject=null;firstMedia;async start(){if(this.unsubscribers.push(this.transport.on("stateChange",t=>{t==="failed"&&this.die(`webrtc transport ${t}`)})),this.transport.getTrackByName(this.streamName)){this.firstMediaResolve?.(),this.firstMediaResolve=null;return}await new Promise(t=>{let r=this.transport.on("track",()=>{this.transport.getTrackByName(this.streamName)&&(r(),this.firstMediaResolve?.(),this.firstMediaResolve=null,t())});this.unsubscribers.push(r)})}async stop(){for(let e of this.unsubscribers.splice(0))e()}onDead(e){this.deadCb=e}stats(){return{recvBps:0,lossPct:0,jitterMs:0}}die(e){this.deadFired||(this.deadFired=!0,this.firstMediaReject?.(new Error(e)),this.firstMediaReject=null,this.firstMediaResolve=null,this.deadCb?.(e))}};var yh="video";function bc(s,e,t){let r=globalThis,n=r.document;if(!(typeof n?.createElement=="function"&&typeof r.WebTransport=="function"&&typeof r.VideoDecoder=="function")||t.allowWebTransport===!1)return null;let o=n.createElement("canvas"),a=!1,c=null,u=!1,d=()=>{if(c){for(let _ of c.getVideoTracks())try{_.stop()}catch{}c=null}u&&(u=!1,t.onOverrideTrack(null))},l=new Bt(new zt(s),e,{canvas:o,createWebRtcSession:t.createWebRtcSession??(()=>new Ht(s,t.streamName??yh)),createWebTransportSession:t.createWebTransportSession,onTransportChange:(_,w)=>{_==="webrtc"&&(d(),y()),t.onTransportChange?.(_,w)}}),p=null,m=()=>{p!==null&&(clearTimeout(p),p=null)},h=t.wtRetryBaseMs??2e3,f=t.wtRetryCapMs??3e4,g=null,v=0,y=()=>{if(a||g!==null||l.activeTransport==="webtransport")return;let _=Math.min(h*2**v,f);g=setTimeout(()=>{g=null,v+=1,l.retryWebTransport().then(w=>{if(!a){if(w)return console.debug(`[urun] webtransport upgraded in background (retry ${v})`),v=0,I(w);y()}}).catch(w=>{a||(console.debug(`[urun] webtransport background retry ${v} failed:`,w),y())})},_)},k=()=>{g!==null&&(clearTimeout(g),g=null)},I=async _=>{if(a||_.kind!=="webtransport")return;let w=t.firstMediaWarnMs??1e4;if(m(),p=setTimeout(()=>{a||l.activeTransport!=="webtransport"||console.warn(`[urun] webtransport established but no QUIC media after ${w}ms \u2014 no media datagrams reached this client; webrtc track remains authoritative`)},w),await _.firstMedia,m(),a||l.activeTransport!=="webtransport"||typeof o.captureStream!="function")return;c=o.captureStream();let N=c.getVideoTracks()[0];N&&(u=!0,t.onOverrideTrack(N))};return(async()=>{let _=await l.connect();await I(_)})().catch(_=>{m(),console.warn("[urun] transport negotiation unavailable, staying on webrtc:",_),y()}),{activeTransport:()=>l.activeTransport,dispose(){a=!0,m(),k(),d(),l.disconnect().catch(()=>{})}}}var bh=new Set;function li(s){if(s.functionsUrl)return{functionsUrl:s.functionsUrl,orgId:s.orgId,apiKey:s.apiKey,jwt:s.jwt,getAccessToken:s.getAccessToken,authProvider:s.authProvider}}var Sh="rpc",pi=3e4,Th="rpc-resp";function Rh(s){return`${Th}:${s}`}function di(){return Nt()}function Ch(s){if(s&&typeof s=="object"){let e=s.error;if(e&&typeof e=="object"){let{message:t,code:r}=e;return{message:typeof t=="string"?t:JSON.stringify(e),code:typeof r=="string"?r:void 0}}if(typeof e=="string")return{message:e}}return{message:typeof s=="string"?s:JSON.stringify(s)}}function kh(s,e,t,r,n,i,o,a,c,u){let d=[],l=null,p=!1,m=null,h=!1,f,g,v=new Promise((D,Ie)=>{f=D,g=Ie});v.catch(()=>{});let y=o(),k=null,I=null,_=null,w=null,N=!0,$=()=>{_&&(clearTimeout(_),_=null),w&&(w(),w=null)},X=!1,U=()=>{X||!h||(X=!0,s.set({rpc:{[e]:null}}))},xe=()=>{N=!1,$(),k?.(),k=null,I?.(),I=null,a?.removeEventListener("abort",bi),y.dispose(),U()},$s=()=>{if(l){if(d.length>0){let D=l;l=null,D.resolve({value:d.shift(),done:!1})}else if(m!==null){let D=l;l=null,D.reject(m)}else if(p){let D=l;l=null,D.resolve({value:void 0,done:!0})}}},Yc=D=>{p||(d.push(D),$s())},et=D=>{p||(m=D,p=!0,g(D),xe(),$s())},yi=D=>{p||(p=!0,f(D),xe(),$s())},bi=()=>{let D=a?.reason;et(D instanceof de?D:new $e(e))},Qc=D=>{if(!(p||!D||typeof D!="object"))switch(U(),D.t){case"delta":typeof D.delta=="string"&&Yc(D.delta);break;case"response":yi(D.body);break;case"error":{let{message:Ie,code:tt}=Ch(D.body);et(new de(Ie,{requestId:e,code:D.code??tt}));break}}},Jc=()=>{let D=y.messages()[Symbol.asyncIterator]();k=()=>{D.return?.(void 0)};let Ie=()=>{N&&D.next().then(tt=>{if(N){if(tt.done){p||yi(void 0);return}Qc(tt.value),Ie()}},tt=>{N&&et(tt)})};Ie()},Si=()=>{if(!h){if(h=!0,a){if(a.aborted){et(new $e(e));return}a.addEventListener("abort",bi,{once:!0})}I=c?.(D=>et(D))??null,Jc(),s.set({rpc:{[e]:{args:t,respond_on:r,consumer_id:n,stream:i}}}),u&&u>0&&!s.synced&&(_=setTimeout(()=>{_=null,!p&&!s.synced&&et(new it(u,e))},u),w=s.onSynced(()=>$()))}};return{deltas:{[Symbol.asyncIterator](){return{next(){if(Si(),d.length>0)return Promise.resolve({value:d.shift(),done:!1});if(m!==null){let D=m;return m=null,Promise.reject(D)}return p?Promise.resolve({value:void 0,done:!0}):new Promise((D,Ie)=>{l={resolve:D,reject:Ie}})},return(){return p||(p=!0,f(void 0),xe()),Promise.resolve({value:void 0,done:!0})},throw(D){return p||(p=!0,g(D),xe()),Promise.reject(D)}}}},body:v,start:Si}}function Sc(s){if(s&&typeof s=="object"){let{epoch:e,by:t}=s,r={epoch:typeof e=="number"?e:0};return(t==="runtime"||t==="browser")&&(r.by=t),r}}function Eh(s,e){let r=s.get("streams")?.[e];if(!r||typeof r!="object")return null;let{kind:n,rt:i,br:o}=r,a={};(n==="audio"||n==="video"||n==="data")&&(a.kind=n);let c=Sc(i);c&&(a.rt=c);let u=Sc(o);return u&&(a.br=u),a}var ui=class{constructor(e,t,r,n,i){this._name=e;this._transport=t;this._streamData=r;this._controlDoc=n;this._onActivity=i;this._track=this._transport.getTrackByName(this._name)??null,this._unsubscribeTransport=this._transport.on("track",()=>{let o=this._transport.getTrackByName(this._name)??null;o!==this._track&&this._setTrack(o)})}_name;_transport;_streamData;_controlDoc;_onActivity;_track=null;_overrideTrack=null;_handlers=new Map;_unsubscribeTransport=null;_subscribed=!1;_messageConsumers=new Set;_dataUnsub=null;_replay=[];_disposed=!1;messages(){this._ensureSubscribed();let e=this;return{[Symbol.asyncIterator](){let t=[...e._replay],r=null,n=!1,i={push(a){if(!n)if(r){let c=r;r=null,c({value:a,done:!1})}else t.push(a)},end(){if(n=!0,r){let a=r;r=null,a({value:void 0,done:!0})}}};e._messageConsumers.add(i);let o=()=>{n=!0,e._messageConsumers.delete(i)};return{next(){return t.length>0?Promise.resolve({value:t.shift(),done:!1}):n?Promise.resolve({value:void 0,done:!0}):new Promise(a=>{r=a})},return(){return o(),Promise.resolve({value:void 0,done:!0})}}}}}_ensureSubscribed(){this._subscribed||this._disposed||(this._subscribed=!0,this._streamData&&(this._dataUnsub=this._streamData.onData(this._name,e=>this._deliver(e))))}_deliver(e){this._replay.push(e);for(let t of this._messageConsumers)t.push(e)}get track(){let e=this._transport.getTrackByName(this._name)??this._track;return e!==this._track&&this._setTrack(e),this._overrideTrack??this._track}_setOverrideTrack(e){if(this._overrideTrack===e)return;this._overrideTrack=e,e&&e.addEventListener?.("ended",()=>{this._overrideTrack===e&&this._setOverrideTrack(null)},{once:!0});let t=e??this._transport.getTrackByName(this._name)??this._track,r=this._handlers.get("track");if(r)for(let n of r)n(t)}_claimBrowserProducer(e){if(!this._controlDoc)return;let t=this._controlDoc(),r=Eh(t,this._name),n=r?.br;if(n?.by==="runtime")throw new ot(this._name,"runtime","browser");if(n)return;let i={br:{epoch:1}};r?.rt&&(i.rt=r.rt);let o=r?.kind??e;o&&(i.kind=o),t.set({streams:{[this._name]:i}})}async attach(e){this._onActivity?.(),this._claimBrowserProducer("audio"),await this._transport.addTrack(e,this._name)}async attachVideo(e){this._onActivity?.(),this._claimBrowserProducer("video"),await this._transport.addVideoTrack(e,this._name)}async emit(e,t={}){if(this._onActivity?.(),this._claimBrowserProducer("data"),!this._streamData)throw new Error("[urun] stream.emit requires the data-stream transport (no streamData wired)");await this._streamData.sendData(this._name,e,t)}async detach(){this._transport.removeTrack()}async detachVideo(){this._transport.stopVideo()}async seek(e){if(e!=="live"&&(!Number.isFinite(e)||e<0))throw new Error('[urun] stream.seek target must be "live" or a non-negative number of seconds');this._transport.seekStream(this._name,e)}chunks(e={}){let t=e.source??Os;return gc(t,{track:()=>this.track,onTrack:n=>this.on("track",n)})}onSeeked(e){return this._transport.on("seeked",(t,r)=>{t===this._name&&e(r)})}on(e,t){let r=this._handlers.get(e);return r||(r=new Set,this._handlers.set(e,r)),r.add(t),()=>{r?.delete(t),r?.size===0&&this._handlers.delete(e)}}dispose(){this._disposed=!0,this._unsubscribeTransport?.(),this._unsubscribeTransport=null,this._handlers.clear(),this._dataUnsub?.(),this._dataUnsub=null;for(let e of this._messageConsumers)e.end();this._messageConsumers.clear()}_setTrack(e){if(this._track=e,e&&e.addEventListener("ended",()=>{this._track===e&&this._setTrack(null)},{once:!0}),this._overrideTrack)return;let t=this._handlers.get("track");if(t)for(let r of t)r(e)}},Vt=class s{_sessionId;_multiplexer;_transport;_docs=new Map;_streams=new Map;_docConnector=new Es;_docEndpointKey=null;_streamData;_presence=null;_activity=null;_activation;_activeRequests=new Set;_endHandler;_endPromise;_recordingsAuth;_artifactsAuth;_recordingsAccessor=null;_artifactsAccessor=null;_recoveryHooks=new Set;_disconnectHooks=new Set;_lifecycleUnsub=null;_dialNegotiation=null;_dialNegotiationStarted=!1;constructor(e,t,r,n,i){this._sessionId=e,this._multiplexer=t,this._transport=r,this._recordingsAuth=n,this._artifactsAuth=i,this._streamData=Ha(r),this._wireControlDocIncarnation(),this._lifecycleUnsub=As(()=>this.recover()),this._activity=Ds({awareness:this.doc("control").awareness,isProducing:()=>this._transport.isProducingMedia===!0}),this._activation=new ut({onPhase:o=>this.onPhase(o),hint:()=>this.doc(Ir).get(Dr)??this.doc("control").get(Ar),onData:(o,a)=>this._streamData.onData(o,a)})}_wireControlDocIncarnation(){let e=this.doc("control");this._transport.applyControlDocState(e.get()),e.on("change",t=>{this._transport.applyControlDocState(t)})}static async attach(e,t){let r=await qi({baseUrl:t.baseUrl,fallbackUrls:t.fallbackUrls,sessionId:e,orgId:t.orgId,jwt:t.jwt,getAccessToken:t.getAccessToken,authProvider:t.authProvider}),n=t.getAccessToken?await t.getAccessToken()??void 0:t.jwt,i=new st,o=new jt({url:r.wsUrl,orgId:t.orgId,jwt:n,authProvider:t.authProvider,sessionId:e,iceServers:r.response.ice_servers}),a=new s(e,i,o,li(t),Xt({...t,baseUrl:r.baseUrl}));return o.on("connected",()=>{o.multiplexer&&i.setTarget(o.multiplexer)}),o.setConnection({url:r.wsUrl,sessionId:e,iceServers:r.response.ice_servers}),o.setEndsAt(r.endsAt),Ue()&&await Ot(),a.setDocTransport({wsUrl:r.wsUrl,token:n}),await o.connect({role:"viewer"}),a}get id(){return this._sessionId}get phase(){return this._transport.phase}get endsAt(){return this._transport.endsAt}get status(){return this._transport.status}onPhase(e){return e(this._transport.phase),this._transport.on("phase",e)}onDiagnostic(e){return this._transport.on("diagnostic",e)}onActivation(e){return this._activation.onActivation(e)}whenLive(e){return xr(this,e)}get recordings(){if(this._recordingsAccessor)return this._recordingsAccessor;let e=this._recordingsAuth;if(!e)throw new Error("[urun] session.recordings requires `functionsUrl` to be configured on the App()/Session.attach() options (the eensx /functions/v1 base URL).");let t=new He(e);return this._recordingsAccessor={list:r=>t.list(r??this._sessionId),get:r=>t.get(r),retain:(r,n)=>t.retain(r,n),pin:r=>t.pin(r),unpin:r=>t.unpin(r),permanent:r=>t.permanent(r),delete:r=>t.delete(r)},this._recordingsAccessor}get artifacts(){return this._artifactsAccessor?this._artifactsAccessor:(this._requireArtifactsAuth(),this._artifactsAccessor={list:e=>new Oe(this._requireArtifactsAuth()).list(e??this._sessionId),getDownloadUrl:(e,t)=>new Oe(this._requireArtifactsAuth()).getDownloadUrl(e,t??this._sessionId)},this._artifactsAccessor)}setArtifactsAuth(e){this._artifactsAuth=e}_requireArtifactsAuth(){let e=this._artifactsAuth;if(!e)throw new Error("[urun] session.artifacts requires a session-api `baseUrl` auth bag.");return e}setSessionId(e){if(e===this._sessionId)return;this._multiplexer.rewriteSessionChannels?.call(this._multiplexer,this._sessionId,e),this._sessionId=e;for(let r of this._docs.values())r.setSessionId(e)}setEndHandler(e){this._endHandler=e}stream(e){let t=this._streams.get(e);return t||(t=new ui(e,this._transport,this._streamData,()=>this.doc("control"),()=>{this._activity?.touch(),this._activation.unwatch(e)}),this._streams.set(e,t),this._activation.watch(e,t)),t}doc(e){let t=this._docs.get(e);return t||(t=new xs(e,this._sessionId,bh.has(e)?null:this._docConnector.connect),this._docs.set(e,t)),t}get presence(){return this._presence||(this._presence=pc(this.doc("control").awareness)),this._presence}touch(){this._activity?.touch()}connectDocs(e){this._docConnector.setTarget(e)}setDocTransport(e){let t=dc(e.wsUrl),r=`${t}\0${e.token??""}\0${this._sessionId}`;r!==this._docEndpointKey&&(this._docEndpointKey=r,this.connectDocs(uc({serverUrl:t,sessionId:this._sessionId,token:e.token,WebSocketPolyfill:e.webSocket})))}useStreamDataTransport(e){if(this._streams.size>0)throw new Error("[urun] useStreamDataTransport must be called before opening any stream");this._streamData=e}sendImage(e){return this.request({reference_image:{value:e}})}sendImageLegacyDesired(e){this.doc("control").set({desired:{reference_image:{value:e}}})}request(e,t={}){let r=di(),n=new AbortController;t.signal&&(t.signal.aborted?n.abort(t.signal.reason):t.signal.addEventListener("abort",()=>n.abort(t.signal.reason),{once:!0}));let i=null;if(typeof t.timeout=="number"&&t.timeout>=0){let a=t.timeout;i=setTimeout(()=>n.abort(new nt(a,r)),a)}let o=this._consumeResponse(r,e,!1,n.signal);return o.start(),o.body.finally(()=>{i&&clearTimeout(i)})}_consumeResponse(e,t,r,n,i){this._activity?.touch();let o=this.doc(Sh),a=Rh(e);return kh(o,e,t,a,this._streamData.consumerId,r,()=>this.stream(a),n,c=>(this._activeRequests.add(c),()=>this._activeRequests.delete(c)),i??pi)}requestStream(e,t={}){let r=di();return this._consumeResponse(r,e,!0,t.signal,t.docSyncTimeout).deltas}complete(e,t={}){let r=di(),n=this._consumeResponse(r,e,!1,t.signal,t.docSyncTimeout);return n.start(),n.body}recover(){this._transport.recover();for(let e of this._docs.values())e.ensureConnected();for(let e of Array.from(this._recoveryHooks))try{e()}catch(t){console.warn("[urun] session recovery hook failed:",t)}}onRecovery(e){return this._recoveryHooks.add(e),()=>this._recoveryHooks.delete(e)}onDisconnect(e){return this._disconnectHooks.add(e),()=>this._disconnectHooks.delete(e)}negotiateMediaTransport(e={}){this._dialNegotiationStarted||(this._dialNegotiationStarted=!0,this._dialNegotiation=bc(this._transport,this._sessionId,{allowWebTransport:e.allowWebTransport,onOverrideTrack:t=>this.stream("video")._setOverrideTrack(t)}))}get mediaTransport(){return this._dialNegotiation?.activeTransport()??null}end(){return this._endPromise?this._endPromise:this._endHandler?(this._endPromise=this._endHandler().then(e=>(this.disconnect(),e)),this._endPromise):Promise.reject(new Ae)}disconnect(){let e=Array.from(this._disconnectHooks);this._disconnectHooks.clear();for(let r of e)try{r()}catch{}this._lifecycleUnsub?.(),this._lifecycleUnsub=null,this._dialNegotiation?.dispose(),this._dialNegotiation=null,this._activity?.dispose(),this._activity=null,this._activation.dispose(),this._recoveryHooks.clear();let t=Array.from(this._activeRequests);this._activeRequests.clear();for(let r of t)try{r(new ct)}catch{}for(let r of this._docs.values())r.dispose();this._docs.clear();for(let r of this._streams.values())r.dispose();this._streams.clear(),this._transport.disconnect()}};function Tc(s){return`urun:logical:v1:${s.orgId}:${s.app}:${s.functionName}`}function hi(){try{return globalThis.sessionStorage??null}catch{return null}}function Rc(s){let e=hi();if(!e)return null;try{let t=e.getItem(s);if(!t)return null;let r=JSON.parse(t);return typeof r?.logicalId!="string"||r.logicalId.length===0?null:{logicalId:r.logicalId}}catch{return null}}function Cc(s,e){let t=hi();if(t)try{t.setItem(s,JSON.stringify({logicalId:e.logicalId}))}catch{}}function Us(s){let e=hi();if(e)try{e.removeItem(s)}catch{}}var Ph=new Set(["then","catch","finally","toJSON",Symbol.toPrimitive]);function kc(s,e){if(typeof e.orgId!="string"||e.orgId.trim().length===0)throw new Error("[urun] App() requires a non-empty orgId \u2014 pass your org id (e.g. from a NEXT_PUBLIC_* deployment env var, threaded through <UrunProvider orgId>). It is sent as the X-Tenant-Id header on every request and selects the JWKS your JWT is verified against.");return new Proxy({},{get(t,r){if(!(Ph.has(r)||typeof r!="string"))return n=>{let i=n??{},o=Tc({orgId:e.orgId,app:s,functionName:r}),a=()=>`s_${Date.now()}_${Math.random().toString(36).slice(2)}`,c=a(),u=e.jwt,d=e.getAccessToken?async _=>{let w=await e.getAccessToken(_);return w&&(u=w),w}:void 0,l={...e,getAccessToken:d},p=new st,m=new jt({url:"",orgId:e.orgId,jwt:e.jwt,authProvider:e.authProvider,sessionId:c}),h=new Vt(c,p,m,li(l),Xt(l)),f,g,v=new Promise(_=>{g=_}),y=_=>{f=_,g({status:"ready",handle:_})};h.setEndHandler(async()=>{let _=f?{status:"ready",handle:f}:await v;if(_.status==="unavailable")throw new Ae("[urun] session allocation failed before a releasable request was created",{cause:_.cause});let w=_.handle;return Us(o),Ni({baseUrl:w.baseUrl,requestId:w.requestId,orgId:e.orgId,jwt:e.jwt,getAccessToken:d,authProvider:e.authProvider})});let k=async _=>{let w=await Ui({baseUrl:e.baseUrl,fallbackUrls:e.fallbackUrls,app:s,functionName:r,orgId:e.orgId,jwt:e.jwt,getAccessToken:d,authProvider:e.authProvider,idempotencyKey:_,sessionKey:e.sessionKey??Rc(o)?.logicalId,priority:e.priority,onAdmission:$=>m.reportAdmission($),onRequest:y}),N=d?await d()??void 0:e.jwt;return e.sessionKey||Cc(o,{logicalId:w.sessionId}),h.setSessionId(w.sessionId),h.setArtifactsAuth(Xt({...l,baseUrl:w.baseUrl})),m.setEndsAt(w.endsAt),{url:w.wsUrl,sessionId:w.sessionId,jwt:N,iceServers:w.response.ice_servers,endsAt:w.endsAt}},I;if(m.setConnectionResolver(async()=>{let _=await k(a());return I=_.jwt,_}),m.on("connected",()=>{m.multiplexer&&p.setTarget(m.multiplexer);let _=m.connectedUrl;_&&h.setDocTransport({wsUrl:_,token:I})}),(async()=>{let _;try{_=await k(c)}catch(w){console.error(`[urun] Failed to create session for ${r}:`,w),Us(o);let N=w instanceof Error?w:new Error(String(w)),$=w instanceof H?w.httpStatus:void 0;m.reportAllocationFailure(N,$),g({status:"unavailable",cause:w});return}m.setAuth({jwt:_.jwt,authProvider:e.authProvider,orgId:e.orgId}),m.setConnection({url:_.url,sessionId:_.sessionId,iceServers:_.iceServers}),Ue()&&await Ot(),I=_.jwt,h.setDocTransport({wsUrl:_.url,token:_.jwt}),await m.connect({app:s,functionName:r,args:i}),h.negotiateMediaTransport({allowWebTransport:e.allowWebTransport})})().catch(_=>{console.error(`[urun] Failed to connect session for ${r}:`,_)}),e.releaseOnLeave!==!1){let _=Ms(()=>{if(m.leaveLeg()||m.connectedUrl!==null)return;let U=f;U&&(Us(o),Or({baseUrl:U.baseUrl,requestId:U.requestId,orgId:e.orgId,jwt:u,authProvider:e.authProvider}))});h.onDisconnect(_);let w,N,$=!1,X=()=>{$||($=!0,w?.(),N?.())};v.then(U=>{U.status!=="ready"||$||(w=Ls(()=>f!==void 0))}),N=h.onPhase(U=>{let xe=U?.name;(xe==="ended"||xe==="expired"||xe==="error")&&X()}),$&&N(),h.onDisconnect(X)}return h}}})}var fi="https://api.urun.sh",qe=class extends Error{status;constructor(e,t){super(e),this.name="ClientTokenError",this.status=t}};async function Ec(s,e={}){if(!s)throw new qe("[urun] createClientToken requires an org API key");let t=e.fetch??globalThis.fetch,r=V(e.baseUrl??fi),n={};e.expiresIn!==void 0&&(n.expires_in=e.expiresIn),e.allowedFunctions!==void 0&&(n.allowed_functions=e.allowedFunctions),e.allowedOrigins!==void 0&&(n.allowed_origins=e.allowedOrigins),e.maxSessionS!==void 0&&(n.max_session_s=e.maxSessionS),e.subject!==void 0&&(n.subject=e.subject),e.metadata!==void 0&&(n.metadata=e.metadata);let i;try{i=await t(`${r}/api/client-tokens`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${s}`},body:JSON.stringify(n)})}catch(p){throw new qe(`[urun] client token mint request failed: ${p instanceof Error?p.message:String(p)}`)}let o={};try{o=await i.json()}catch{}if(!i.ok){let p=typeof o.message=="string"?o.message:`HTTP ${i.status}`;throw new qe(`[urun] client token mint failed: ${p}`,i.status)}let a=typeof o.token=="string"?o.token:"",c=typeof o.org_id=="string"?o.org_id:"",u=typeof o.expires_at=="string"?Date.parse(o.expires_at):Number.NaN,d=typeof o.expires_in=="number"?o.expires_in:void 0;if(!a)throw new qe("[urun] client token mint returned no token (control-plane contract violation)",i.status);let l=Number.isFinite(u)?new Date(u):new Date(Date.now()+(d??60)*1e3);return{token:a,expiresAt:l,orgId:c}}var Pc=3e4,xc="stream:",mi=class{_ws;_multiplexer;_pendingRpc=new Map;_rpcId=0;constructor(e,t){this._ws=e,this._multiplexer=t,this._ws.addEventListener("message",r=>{let n;try{n=JSON.parse(typeof r.data=="string"?r.data:"")}catch{return}if(n.rpcId&&this._pendingRpc.has(n.rpcId)){let i=this._pendingRpc.get(n.rpcId);this._pendingRpc.delete(n.rpcId),clearTimeout(i.timer),n.error?i.reject(new Error(n.error)):i.resolve(n.result)}})}async get(e){return this._sendRpc("store.get",{key:e})}async has(e){return await this._sendRpc("store.has",{key:e})}on(e,t){let r=`${xc}${e}`;return this._multiplexer.on(r,n=>{t(n)})}emit(e,t){let r=`${xc}${e}`,n=typeof t=="object"&&t!==null&&!Array.isArray(t)?t:{data:t};this._multiplexer.emit(r,n)}_getInternals(){return{multiplexer:this._multiplexer,ws:this._ws}}_sendRpc(e,t){return new Promise((r,n)=>{if(!this._ws||this._ws.readyState!==WebSocket.OPEN){n(new Error("WebSocket not open"));return}let i=String(++this._rpcId),o=setTimeout(()=>{this._pendingRpc.has(i)&&(this._pendingRpc.delete(i),n(new Error(`RPC request "${e}" timed out after ${Pc}ms`)))},Pc);this._pendingRpc.set(i,{resolve:r,reject:n,timer:o}),this._ws.send(JSON.stringify({rpcId:i,type:e,...t}))})}};function Ic(s){let r=`${s.baseUrl.replace(/\/$/,"").replace(/^http/,"ws")}/store/${encodeURIComponent(s.orgId)}`,n=new WebSocket(r);(s.jwt||s.apiKey)&&n.addEventListener("open",()=>{n.send(JSON.stringify({type:"auth",orgId:s.orgId,jwt:s.jwt,authProvider:s.authProvider,apiKey:s.apiKey}))});let i=new rt(n);return new mi(n,i)}var xh='video/mp4; codecs="avc1.42E01E"';function Dc(s,e){let t=e?.codec??xh,r=document.createElement("video");r.muted=!0,r.playsInline=!0;let n=new MediaSource,i=URL.createObjectURL(n);r.src=i,n.addEventListener("sourceopen",()=>{let p;try{p=n.addSourceBuffer(t)}catch(g){throw g instanceof DOMException&&g.name==="NotSupportedError"?new Error(`Codec not supported: "${t}". Ensure the codec string matches the fMP4 container format. Common values: video/mp4; codecs="avc1.42E01E" (H.264 Baseline), video/mp4; codecs="avc1.4D401F" (H.264 Main).`):g}let m=s.getReader();function h(){return p.updating?new Promise(g=>{p.addEventListener("updateend",()=>g(),{once:!0})}):Promise.resolve()}async function f(){try{for(;;){let{done:g,value:v}=await m.read();if(g){await h(),n.readyState==="open"&&n.endOfStream();return}await h();try{p.appendBuffer(v)}catch(y){if(y instanceof DOMException&&y.name==="QuotaExceededError"){let k=p.buffered;if(k.length>0){let I=k.start(k.length-1);p.remove(0,I),await h(),p.appendBuffer(v)}else throw y}else throw y}}}catch{if(n.readyState==="open")try{n.endOfStream("decode")}catch{}}}f()}),r.play().catch(()=>{});let o=r,a=o.captureStream??o.mozCaptureStream;if(!a)throw new Error("captureStream() is not supported in this browser. videoStream() requires HTMLMediaElement.captureStream() support.");let c=a.call(r),u=c.getTracks(),d=0,l=u.length;if(l===0)r.addEventListener("emptied",()=>{URL.revokeObjectURL(i)},{once:!0});else for(let p of u)p.addEventListener("ended",()=>{d++,d>=l&&URL.revokeObjectURL(i)});return c}function Ac(s){return s.status.startsWith("pending_")}var Cr=class extends Error{constructor(){super("no getUserMedia in this environment \u2014 in headless/Node consumers, inject a media source via new CaptureController({ getUserMedia }) (e.g. a wrtc/werift capture)"),this.name="CaptureUnavailableError",Object.setPrototypeOf(this,new.target.prototype)}};function Mc(s){let e=[];return s.audio&&e.push("audio"),s.video&&e.push("video"),e.join("+")}function Ih(s,e){return e==="audio"?s.getAudioTracks():s.getVideoTracks()}function Dh(s,e){let t=s.getTracks();if(t.length===1&&t[0]===e)return s;try{return new MediaStream([e])}catch{return s}}function gi(s,e){for(let t of[...s.lostListeners])try{t(e)}catch{}}var kr=class{claims=new Map;injectedGetUserMedia;queue=Promise.resolve();constructor(e){this.injectedGetUserMedia=e?.getUserMedia}claim(e,t){return this.enqueue(async()=>{let r=this.claims.get(e);r&&(this.claims.delete(e),r.released=!0,r.track=null,r.stream=null,gi(r,new Error(`${e} capture claim superseded by a newer claim`)));let n=this.createState(e,t);return this.claims.set(e,n),await this.converge(n),n.claim})}idle(){return this.queue.then(()=>{})}enqueue(e){let t=this.queue.then(e);return this.queue=t.then(()=>{},()=>{}),t}resolveGetUserMedia(){if(this.injectedGetUserMedia)return this.injectedGetUserMedia;let e=typeof navigator<"u"?navigator.mediaDevices:void 0;if(!e?.getUserMedia)throw new Cr;return t=>e.getUserMedia(t)}async converge(e){for(let o of this.claims.values())o.track&&(o.track.stop(),o.track=null,o.stream=null);if(this.claims.size===0)return;let t=this.resolveGetUserMedia(),r={audio:this.claims.get("audio")?.constraints??!1,video:this.claims.get("video")?.constraints??!1},n;try{n=await t(r)}catch(o){let a=`one-capture getUserMedia(${Mc(r)}) failed`,c=o instanceof Error?o.message:String(o);for(let u of[...this.claims.values()])if(this.claims.delete(u.kind),u.released=!0,u!==e){let d=new Error(`${a} \u2014 ${u.kind} capture lost: ${c||o}`);d.cause=o,gi(u,d)}throw o}let i=[...this.claims.values()].sort((o,a)=>o===e?1:a===e?-1:0);for(let o of i){let a=Ih(n,o.kind)[0]??null;if(o.released){a?.stop();continue}if(!a){this.claims.delete(o.kind),o.released=!0;let c=Object.assign(new Error(`one-capture getUserMedia(${Mc(r)}) returned no ${o.kind} track`),{name:"NotFoundError"});if(o===e)throw c;gi(o,c);continue}if(o.track=a,o.stream=Dh(n,a),o!==e)for(let c of[...o.trackListeners])try{c(a,o.stream)}catch{}}}createState(e,t){let r=this,n={kind:e,constraints:t,track:null,stream:null,released:!1,trackListeners:new Set,lostListeners:new Set,claim:{kind:e,get track(){return n.track},get stream(){return n.stream},update(i){return r.enqueue(async()=>{if(n.released)throw new Error(`${e} capture claim already released`);if(n.constraints=i,await r.converge(n),!n.track)throw new Error(`${e} capture update yielded no track`);return n.track})},release(){n.released||(n.released=!0,r.claims.get(e)===n&&r.claims.delete(e),n.track?.stop(),n.track=null,n.stream=null)},onTrack(i){return n.trackListeners.add(i),()=>n.trackListeners.delete(i)},onLost(i){return n.lostListeners.add(i),()=>n.lostListeners.delete(i)}}};return n}},Ah=null;function Lc(){return Ah??=new kr}var _i="input",Oc=30;function Nc(s){let e=s.now??Date.now,t=s.field??_i,r=1e3/Math.max(s.hz??30,.001),n=new Set,i=0,o=0,a=0,c=0,u,d=null,l=!1,p=()=>{if(l)return;u=e(),c+=1;let h={keys:[...n],buttons:i,pointer:{x:o,y:a},seq:c,at:u};try{s.awareness.setLocalStateField(t,h)}catch{}},m=()=>{if(l)return;let h=e();if(u===void 0||h-u>=r){d&&(clearTimeout(d),d=null),p();return}if(d)return;let f=Math.max(r-(h-u),0);d=setTimeout(()=>{d=null,p()},f),d.unref?.()};return{keyDown(h){let f=String(h).toLowerCase();n.has(f)||(n.add(f),m())},keyUp(h){let f=String(h).toLowerCase();n.delete(f)&&m()},setButtons(h){let f=Number.isFinite(h)?Number(h):0;f!==i&&(i=f,m())},movePointer(h,f){let g=Number.isFinite(h)?Number(h):0,v=Number.isFinite(f)?Number(f):0;g===0&&v===0||(o+=g,a+=v,m())},heldKeys(){return[...n]},clear(){l||(n.clear(),i=0,d&&(clearTimeout(d),d=null),p())},dispose(){if(l)return;let h=n.size>0||i!==0;n.clear(),i=0,d&&(clearTimeout(d),d=null),h&&p(),l=!0}}}var Uc=1024,qc=.92,$c=262144,Wc=256e3,vi=[.9,.8,.7,.6,.5],Fc=.8,Mh=8;function qs(s,e,t){if(!(s>0)||!(e>0))throw new Error(`reference image has no pixels (${s}x${e})`);let r=Math.min(1,t/Math.max(s,e));return{width:Math.max(1,Math.round(s*r)),height:Math.max(1,Math.round(e*r))}}async function Lh(s){if(typeof createImageBitmap!="function")throw new Error("this browser cannot decode images for reference capture (createImageBitmap unavailable)");return await createImageBitmap(s,{imageOrientation:"from-image"})}async function Bc(s,e,t){let r=await new Promise(n=>{s.toBlob(n,e,e==="image/jpeg"?t:void 0)});if(!r)throw new Error(`could not encode the reference image as ${e}`);return r}function jc(s,e){console.warn(`[urun] reference image over the 256000-byte data-channel message budget (media/Chrome maxMessageSize 262144 would drop it SILENTLY): ${s} -> ${e} bytes`)}async function wi(s,e,t,r,n){let i=document.createElement("canvas");i.width=e,i.height=t;let o=i.getContext("2d");if(!o)throw new Error("could not prepare the reference image (no 2d canvas context)");return r==="image/jpeg"&&(o.fillStyle="#fff",o.fillRect(0,0,e,t)),o.drawImage(s,0,0,e,t),await Bc(i,r,n)}async function Oh(s,e,t,r){let{width:n,height:i}=e,o=await wi(s,n,i,t,r);if(o.size<=256e3)return{blob:o,width:n,height:i};if(t==="image/jpeg"){for(let c of vi)if(!(c>=r)&&(o=await wi(s,n,i,t,c),o.size<=256e3))return jc(`quality ${r} -> ${c}`,o.size),{blob:o,width:n,height:i}}let a=t==="image/jpeg"?vi[vi.length-1]:r;for(let c=0;c<Mh;c++)if(n=Math.max(16,Math.round(n*Fc)),i=Math.max(16,Math.round(i*Fc)),o=await wi(s,n,i,t,a),o.size<=256e3)return jc(`downscaled to ${n}x${i} @ q${a}`,o.size),{blob:o,width:n,height:i};throw new Error(`this image cannot be sent: even at ${n}x${i} it is over the 256000-byte limit for one message. Try a smaller or less detailed picture.`)}async function zc(s,e){let{maxSize:t=1024,type:r="image/jpeg",quality:n=.92,source:i}=e,o=await Lh(s);try{let a=qs(o.width,o.height,t),c=await Oh(o,a,r,n);return{bytes:new Uint8Array(await c.blob.arrayBuffer()),type:r,width:c.width,height:c.height,source:i}}finally{o.close()}}function Hc(s){let e=s instanceof Error?s.name:"",t=s instanceof Error?s.message:String(s);switch(e){case"NotAllowedError":case"SecurityError":return"Camera access is turned off for this site. Allow the camera in your browser settings, then try again.";case"NotFoundError":case"OverconstrainedError":return"No camera was found on this device. You can upload a photo instead.";case"NotReadableError":case"AbortError":return"The camera is being used by another app. Close it, then try again.";default:break}return/has not shown a frame/i.test(t)?"The camera is still starting. Wait for the picture to appear, then take the photo.":/secure|https/i.test(t)?"The camera only works over a secure (https) connection.":/decode|not settled|createImageBitmap|encode|image/i.test(t)?"That file couldn't be read as an image. Try a JPEG or PNG photo.":"The camera couldn't be started. Check that no other app is using it, then try again."}function Vc(){return typeof navigator>"u"||typeof window>"u"||!window.isSecureContext?!1:typeof navigator.mediaDevices?.getUserMedia=="function"}async function Gc(s,e){let t=s.videoWidth,r=s.videoHeight;if(!(t>0)||!(r>0))throw new Error("the camera has not shown a frame yet");let{maxSize:n=1024,type:i="image/jpeg",quality:o=.92}=e??{},a=qs(t,r,n),c=document.createElement("canvas");c.width=a.width,c.height=a.height;let u=c.getContext("2d");if(!u)throw new Error("could not prepare the reference image (no 2d canvas context)");i==="image/jpeg"&&(u.fillStyle="#fff",u.fillRect(0,0,a.width,a.height)),u.drawImage(s,0,0,a.width,a.height);let d=await Bc(c,i,o);return{bytes:new Uint8Array(await d.arrayBuffer()),type:i,width:a.width,height:a.height,source:"camera"}}var Nh=new Set(["w","a","s","d"]),Gt=(s,e)=>Math.min(e,Math.max(-e,s));function Kc(s={}){let{panPerPixel:e=9e-4,zoomPerSecond:t=.35,strafePerSecond:r=.18,decayTauMs:n=900,frameRelax:i=.06,maxPan:o=.12,maxLogZoom:a=.22}=s,c=0,u=0,d=0,l=null,p=new Set;return{pointerDelta(m,h){c=Gt(c-m*e,o),u=Gt(u-h*e,o)},keyDown(m){let h=m.toLowerCase();Nh.has(h)&&p.add(h)},keyUp(m){p.delete(m.toLowerCase())},clearKeys(){p.clear()},frameArrived(){let m=1-i;c*=m,u*=m,d*=m},tick(m){if(l===null){l=m;return}let h=Math.max(0,Math.min(100,m-l))/1e3;l=m,p.has("w")&&(d=Gt(d+t*h,a)),p.has("s")&&(d=Gt(d-t*h,a)),p.has("a")&&(c=Gt(c+r*h,o)),p.has("d")&&(c=Gt(c-r*h,o));let f=Math.exp(-h*1e3/n);c*=f,u*=f,d*=f},transform(){return{translateX:c,translateY:u,scale:Math.exp(d)}},isIdentity(m=5e-4){return Math.abs(c)<m&&Math.abs(u)<m&&Math.abs(d)<m},reset(){c=0,u=0,d=0,p.clear()}}}0&&(module.exports={ACTIVATION_COLD_BOOT_AFTER_MS,ACTIVATION_DEGRADED_AFTER_MS,ACTIVATION_HINT_PATH,ACTIVATION_STILL_AFTER_MS,ACTIVITY_DOM_EVENTS,ACTIVITY_FIELD,ACTIVITY_STAMP_MIN_INTERVAL_MS,ActivationMonitor,App,BACKOFF_BASE_MS,BACKOFF_MAX_ATTEMPTS,BACKOFF_MAX_MS,CaptureController,CaptureUnavailableError,ClientTokenError,DATA_CHANNEL_MESSAGE_CEILING,DEFAULT_DOC_SYNC_TIMEOUT_MS,DEFAULT_GATEWAY_URL,DEFAULT_PRODUCE_ACK_TIMEOUT_MS,DEFAULT_REFERENCE_JPEG_QUALITY,DEFAULT_REFERENCE_MAX_SIZE,DEFAULT_WHEN_LIVE_TIMEOUT_MS,DERIVED_LEG_SEP,DGRAM_HEADER_BYTES,FOREGROUND_COALESCE_MS,FrameReassembler,INPUT_PRESENCE_DEFAULT_HZ,INPUT_PRESENCE_FIELD,InvalidDurationError,LEGACY_ACTIVATION_HINT_PATH,PLATFORM_DOC_NAME,PermanentLockedError,PinRequiresActiveTempError,ProduceAckTimeoutError,RecordingNotFoundError,RecordingsClient,RecordingsError,RecordingsUnauthorizedError,RequestAbortError,RequestCancelledError,RequestDocSyncError,RequestError,RequestTimeoutError,RetainNotTempError,RuntimeArtifactNotFoundError,RuntimeArtifactsClient,RuntimeArtifactsError,RuntimeArtifactsUnauthorizedError,Session,SessionAllocationError,SessionEndError,SessionEndUnavailableError,SessionFailedError,StreamDirectionConflict,TransportNegotiator,TransportSessionMismatchError,TransportSessionSignaling,VISIBILITY_FIELD,WIRE_MESSAGE_BUDGET,WT_CONTROL_FRAME_MAX,WebRtcSession,WebTransportSession,WtControlDecoder,activationHintFrom,cameraCaptureAvailable,captureStillFromVideo,computeBackoffDelay,createActivityTracker,createCameraWarp,createClientToken,createInputPresencePublisher,createRecordingsClient,createRuntimeArtifactsClient,createStore,derivedLegName,derivedLegRole,describeSessionFailure,describeSessionPhase,encodeWtControlFrame,fitWithin,isDurationString,isPendingRecording,isRetryableSessionError,isWakingPhase,mediaRecorderChunkSource,normalizeReferenceImage,normalizeRetention,observeLeaveConfirm,observePageLifecycle,observePageTeardown,parseDgramHeader,prewake,referenceImageErrorMessage,releaseSessionBeacon,sessionFailureFromMediaError,sharedCaptureController,videoStream,whenLive,writeDgramHeader});
|
|
7
|
+
`}});var De=P(Re=>{"use strict";var tt=Yo(),fu=Jo(),mu=dn();Re.grammar=mu;Re.write=fu;Re.parse=tt.parse;Re.parseParams=tt.parseParams;Re.parseFmtpConfig=tt.parseFmtpConfig;Re.parsePayloads=tt.parsePayloads;Re.parseRemoteCandidates=tt.parseRemoteCandidates;Re.parseImageAttributes=tt.parseImageAttributes;Re.parseSimulcastStreamList=tt.parseSimulcastStreamList});var rt=P(ks=>{"use strict";Object.defineProperty(ks,"__esModule",{value:!0});ks.parse=_u;var gu=new RegExp("^[LS]([1-9]\\d{0,1})T([1-9]\\d{0,1})");function _u(n){let e=gu.exec(n??"");return e?{spatialLayers:Number(e[1]),temporalLayers:Number(e[2])}:{spatialLayers:1,temporalLayers:1}}});var ea=P(We=>{"use strict";Object.defineProperty(We,"__esModule",{value:!0});We.OfferMediaSection=We.AnswerMediaSection=We.MediaSection=void 0;var vu=De(),Xo=Xe(),pr=class{_mediaObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r}){if(this._mediaObject={type:"",port:0,protocol:"",payloads:"",rtp:[],fmtp:[]},e&&this.setIceParameters(e),t){this._mediaObject.candidates=[];for(let s of t){let i={foundation:s.foundation,component:1,ip:s.address??s.ip,port:s.port,priority:s.priority,transport:s.protocol,type:s.type};s.tcpType&&(i.tcptype=s.tcpType),this._mediaObject.candidates.push(i)}this._mediaObject.endOfCandidates="end-of-candidates",this._mediaObject.iceOptions="renomination"}r&&this.setDtlsRole(r.role)}get mid(){return String(this._mediaObject.mid)}get closed(){return this._mediaObject.port===0}getObject(){return this._mediaObject}setIceParameters(e){this._mediaObject.iceUfrag=e.usernameFragment,this._mediaObject.icePwd=e.password}pause(){this._mediaObject.direction="inactive"}disable(){this.pause()}close(){this.disable(),this._mediaObject.port=0,delete this._mediaObject.candidates,delete this._mediaObject.endOfCandidates,delete this._mediaObject.iceUfrag,delete this._mediaObject.icePwd,delete this._mediaObject.iceOptions,this._mediaObject.rtp=[],this._mediaObject.fmtp=[],delete this._mediaObject.rtcp,delete this._mediaObject.rtcpFb,delete this._mediaObject.ssrcs,delete this._mediaObject.ssrcGroups,delete this._mediaObject.simulcast,delete this._mediaObject.simulcast_03,delete this._mediaObject.rids,delete this._mediaObject.extmapAllowMixed}};We.MediaSection=pr;var Es=class extends pr{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:s,plainRtpParameters:i,offerMediaObject:o,offerRtpParameters:a,answerRtpParameters:c,codecOptions:l}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r}),this._mediaObject.mid=String(o.mid),this._mediaObject.type=o.type,this._mediaObject.protocol=o.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),o.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 u={payload:d.payloadType,codec:Zo(d),rate:d.clockRate};d.channels>1&&(u.encoding=d.channels),this._mediaObject.rtp.push(u);let p=Xo.clone(d.parameters)??{},m=Xo.clone(d.rtcpFeedback)??[];if(l){let{opusStereo:f,opusFec:g,opusDtx:_,opusMaxPlaybackRate:w,opusMaxAverageBitrate:T,opusPtime:R,opusNack:y,videoGoogleStartBitrate:v,videoGoogleMaxBitrate:D,videoGoogleMinBitrate:U}=l,j=a.codecs.find(V=>V.payloadType===d.payloadType);switch(d.mimeType.toLowerCase()){case"audio/opus":case"audio/multiopus":{f!==void 0&&(j.parameters["sprop-stereo"]=f?1:0,p.stereo=f?1:0),g!==void 0&&(j.parameters.useinbandfec=g?1:0,p.useinbandfec=g?1:0),_!==void 0&&(j.parameters.usedtx=_?1:0,p.usedtx=_?1:0),w!==void 0&&(p.maxplaybackrate=w),T!==void 0&&(p.maxaveragebitrate=T),R!==void 0&&(j.parameters.ptime=R,p.ptime=R),y||(j.rtcpFeedback=j.rtcpFeedback.filter(V=>V.type!=="nack"||V.parameter),m=m.filter(V=>V.type!=="nack"||V.parameter));break}case"video/vp8":case"video/vp9":case"video/h264":case"video/h265":case"video/av1":{v!==void 0&&(p["x-google-start-bitrate"]=v),D!==void 0&&(p["x-google-max-bitrate"]=D),U!==void 0&&(p["x-google-min-bitrate"]=U);break}}}let h={payload:d.payloadType,config:""};for(let f of Object.keys(p))h.config&&(h.config+=";"),h.config+=`${f}=${p[f]}`;h.config&&this._mediaObject.fmtp.push(h);for(let f of m)this._mediaObject.rtcpFb.push({payload:d.payloadType,type:f.type,subtype:f.parameter})}this._mediaObject.payloads=c.codecs.map(d=>d.payloadType).join(" "),this._mediaObject.ext=[];for(let d of c.headerExtensions)(o.ext??[]).some(p=>p.uri===d.uri)&&this._mediaObject.ext.push({uri:d.uri,value:d.id});if(o.extmapAllowMixed==="extmap-allow-mixed"&&(this._mediaObject.extmapAllowMixed="extmap-allow-mixed"),o.simulcast){this._mediaObject.simulcast={dir1:"recv",list1:o.simulcast.list1},this._mediaObject.rids=[];for(let d of o.rids??[])d.direction==="send"&&this._mediaObject.rids.push({id:d.id,direction:"recv"})}else if(o.simulcast_03){this._mediaObject.simulcast_03={value:o.simulcast_03.value.replace(/send/g,"recv")},this._mediaObject.rids=[];for(let d of o.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 o.sctpPort=="number"?(this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=s.port,this._mediaObject.maxMessageSize=s.maxMessageSize):o.sctpmap&&(this._mediaObject.payloads=String(s.port),this._mediaObject.sctpmap={app:"webrtc-datachannel",sctpmapNumber:s.port,maxMessageSize:s.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 r=this._mediaObject.simulcast.list1,s=vu.parseSimulcastStreamList(r);for(let i of s)for(let o of i)o.paused=!t[o.scid]?.active;this._mediaObject.simulcast.list1=s.map(i=>i.map(o=>`${o.paused?"~":""}${o.scid}`).join(",")).join(";")}};We.AnswerMediaSection=Es;var Ps=class extends pr{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:s,plainRtpParameters:i,mid:o,kind:a,offerRtpParameters:c,streamId:l,trackId:d}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r}),this._mediaObject.mid=String(o),this._mediaObject.type=a,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},s?this._mediaObject.protocol="UDP/DTLS/SCTP":this._mediaObject.protocol="UDP/TLS/RTP/SAVPF",this._mediaObject.port=7),this._mediaObject.extmapAllowMixed="extmap-allow-mixed",a){case"audio":case"video":{this._mediaObject.direction="sendonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[],this._mediaObject.msid=[{id:l,appdata:d}];for(let h of c.codecs){let f={payload:h.payloadType,codec:Zo(h),rate:h.clockRate};h.channels>1&&(f.encoding=h.channels),this._mediaObject.rtp.push(f);let g={payload:h.payloadType,config:""};for(let _ of Object.keys(h.parameters??{}))g.config&&(g.config+=";"),g.config+=`${_}=${h.parameters[_]}`;g.config&&this._mediaObject.fmtp.push(g);for(let _ of h.rtcpFeedback)this._mediaObject.rtcpFb.push({payload:h.payloadType,type:_.type,subtype:_.parameter})}this._mediaObject.payloads=c.codecs.map(h=>h.payloadType).join(" "),this._mediaObject.ext=[];for(let h of c.headerExtensions)this._mediaObject.ext.push({uri:h.uri,value:h.id});this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";let u=c.encodings[0],p=u.ssrc,m=u.rtx?.ssrc;this._mediaObject.ssrcs=[],this._mediaObject.ssrcGroups=[],p&&c.rtcp.cname&&this._mediaObject.ssrcs.push({id:p,attribute:"cname",value:c.rtcp.cname}),m&&(c.rtcp.cname&&this._mediaObject.ssrcs.push({id:m,attribute:"cname",value:c.rtcp.cname}),p&&this._mediaObject.ssrcGroups.push({semantics:"FID",ssrcs:`${p} ${m}`}));break}case"application":{this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=s.port,this._mediaObject.maxMessageSize=s.maxMessageSize;break}}}setDtlsRole(e){this._mediaObject.setup="actpass"}resume(){this._mediaObject.direction="sendonly"}};We.OfferMediaSection=Ps;function Zo(n){let t=new RegExp("^(audio|video)/(.+)","i").exec(n.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");return t[2]}});var At=P(pn=>{"use strict";Object.defineProperty(pn,"__esModule",{value:!0});pn.RemoteSdp=void 0;var wu=De(),yu=X(),ln=ea(),bu=Is(),Su=["av1","h264"],un=new yu.Logger("RemoteSdp"),xs=class{_iceParameters;_iceCandidates;_dtlsParameters;_sctpParameters;_plainRtpParameters;_mediaSections=[];_midToIndex=new Map;_firstMid;_sdpObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:s,plainRtpParameters:i}){if(this._iceParameters=e,this._iceCandidates=t,this._dtlsParameters=r,this._sctpParameters=s,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${bu.version}`},name:"-",timing:{start:0,stop:0},media:[]},this._sdpObject.iceOptions="ice2",e?.iceLite&&(this._sdpObject.icelite="ice-lite"),r){this._sdpObject.msidSemantic={semantic:"WMS",token:"*"};let o=this._dtlsParameters.fingerprints.length;this._sdpObject.fingerprint={type:r.fingerprints[o-1].algorithm,hash:r.fingerprints[o-1].value},this._sdpObject.groups=[{type:"BUNDLE",mids:""}]}i&&(this._sdpObject.origin.address=i.ip,this._sdpObject.origin.ipVer=i.ipVersion)}updateIceParameters(e){un.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){un.debug("updateDtlsRole() [role:%s]",e),this._dtlsParameters.role=e;for(let t of this._mediaSections)t.setDtlsRole(e)}setSessionExtmapAllowMixed(){un.debug("setSessionExtmapAllowMixed()"),this._sdpObject.extmapAllowMixed="extmap-allow-mixed"}getNextMediaSectionIdx(){for(let e=0;e<this._mediaSections.length;++e){let t=this._mediaSections[e];if(t.closed)return{idx:e,reuseMid:t.mid}}return{idx:this._mediaSections.length}}send({offerMediaObject:e,reuseMid:t,offerRtpParameters:r,answerRtpParameters:s,codecOptions:i}){let o=new ln.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,offerMediaObject:e,offerRtpParameters:r,answerRtpParameters:s,codecOptions:i}),a=o.getObject();a.rtp.find(l=>Su.includes(l.codec.toLowerCase()))||(a.ext=a.ext?.filter(l=>l.uri!=="https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension")),t?this.replaceMediaSection(o,t):this._midToIndex.has(o.mid)?this.replaceMediaSection(o):this.addMediaSection(o)}receive({mid:e,kind:t,offerRtpParameters:r,streamId:s,trackId:i}){this.setSessionExtmapAllowMixed();let o=new ln.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,mid:e,kind:t,offerRtpParameters:r,streamId:s,trackId:i}),a=this._mediaSections.find(c=>c.closed&&c.getObject().type===t);a?this.replaceMediaSection(o,a.mid):this.addMediaSection(o)}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?(un.debug("closeMediaSection() | cannot close first media section, disabling it instead [mid:%s]",e),this.disableMediaSection(e),!1):(t.close(),this.regenerateBundleMids(),!0)}muxMediaSectionSimulcast(e,t){let r=this.findMediaSection(e);r.muxSimulcastStreams(t),this.replaceMediaSection(r)}sendSctpAssociation({offerMediaObject:e}){let t=new ln.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 ln.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++,wu.write(this._sdpObject)}addMediaSection(e){this._firstMid||(this._firstMid=e.mid),this._mediaSections.push(e),this._midToIndex.set(e.mid,this._mediaSections.length-1),this._sdpObject.media.push(e.getObject()),this.regenerateBundleMids()}replaceMediaSection(e,t){if(typeof t=="string"){let r=this._midToIndex.get(t);if(r===void 0)throw new Error(`no media section found for reuseMid '${t}'`);let s=this._mediaSections[r];this._mediaSections[r]=e,this._midToIndex.delete(s.mid),this._midToIndex.set(e.mid,r),this._sdpObject.media[r]=e.getObject(),this.regenerateBundleMids()}else{let r=this._midToIndex.get(e.mid);if(r===void 0)throw new Error(`no media section found with mid '${e.mid}'`);this._mediaSections[r]=e,this._sdpObject.media[r]=e.getObject()}}findMediaSection(e){let t=this._midToIndex.get(e);if(t===void 0)throw new Error(`no media section found with mid '${e}'`);return this._mediaSections[t]}regenerateBundleMids(){this._dtlsParameters&&(this._sdpObject.groups[0].mids=this._mediaSections.filter(e=>!e.closed).map(e=>e.mid).join(" "))}};pn.RemoteSdp=xs});var Lt=P(nt=>{"use strict";Object.defineProperty(nt,"__esModule",{value:!0});nt.extractRtpCapabilities=Tu;nt.extractDtlsParameters=Ru;nt.getCname=Cu;nt.applyCodecParameters=ku;nt.addHeaderExtension=Eu;var ta=De();function Tu({sdpObject:n}){let e=new Map,t=new Map;for(let s of n.media){let i=s.type;switch(i){case"audio":case"video":break;default:continue}for(let o of s.rtp){let a={kind:i,mimeType:`${i}/${o.codec}`,preferredPayloadType:o.payload,clockRate:o.rate,channels:o.encoding,parameters:{},rtcpFeedback:[]};e.set(a.preferredPayloadType,a)}for(let o of s.fmtp??[]){let a=ta.parseParams(o.config),c=e.get(o.payload);c&&(a?.hasOwnProperty("profile-level-id")&&(a["profile-level-id"]=String(a["profile-level-id"])),c.parameters=a)}for(let o of s.rtcpFb??[]){let a={type:o.type,parameter:o.subtype};if(a.parameter||delete a.parameter,o.payload!=="*"){let c=e.get(Number(o.payload));if(!c)continue;c.rtcpFeedback.push(a)}else for(let c of e.values())c.kind===i&&!/.+\/rtx$/i.test(c.mimeType)&&c.rtcpFeedback.push(a)}for(let o of s.ext??[]){if(o["encrypt-uri"])continue;let a={kind:i,uri:o.uri,preferredId:o.value};t.set(a.preferredId,a)}}return{codecs:Array.from(e.values()),headerExtensions:Array.from(t.values())}}function Ru({sdpObject:n}){let e=n.setup,t=n.fingerprint;if(!e||!t){let i=(n.media??[]).find(o=>o.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 r;switch(e){case"active":{r="client";break}case"passive":{r="server";break}case"actpass":{r="auto";break}}return{role:r,fingerprints:[{algorithm:t.type,value:t.hash}]}}function Cu({offerMediaObject:n}){let e=(n.ssrcs??[]).find(t=>t.attribute==="cname");return e?e.value:""}function ku({offerRtpParameters:n,answerMediaObject:e}){for(let t of n.codecs){let r=t.mimeType.toLowerCase();if(r!=="audio/opus"||!(e.rtp??[]).find(a=>a.payload===t.payloadType))continue;e.fmtp=e.fmtp??[];let i=e.fmtp.find(a=>a.payload===t.payloadType);i||(i={payload:t.payloadType,config:""},e.fmtp.push(i));let o=ta.parseParams(i.config);if(r==="audio/opus"){let a=t.parameters?.["sprop-stereo"];a!==void 0&&(o.stereo=Number(a)?1:0)}i.config="";for(let a of Object.keys(o))i.config&&(i.config+=";"),i.config+=`${a}=${o[a]}`}}function Eu({offerMediaObject:n,headerExtensionUri:e,headerExtensionId:t}){n.ext||(n.ext=[]),n.ext.push({uri:e,value:t})}});var Ot=P(hn=>{"use strict";Object.defineProperty(hn,"__esModule",{value:!0});hn.getRtpEncodings=Pu;hn.addLegacySimulcast=xu;function Pu({offerMediaObject:n,codecs:e}){let t=new Set;for(let i of n.ssrcs??[]){let o=i.id;o&&t.add(o)}if(t.size===0)throw new Error("no a=ssrc lines found");let r=new Map;for(let i of n.ssrcGroups??[]){if(i.semantics!=="FID")continue;let o=i.ssrcs.split(/\s+/),a=Number(o[0]),c=Number(o[1]);t.has(a)&&(t.delete(a),t.delete(c),r.set(a,c))}for(let i of t)r.set(i,void 0);let s=[];for(let[i,o]of r){let a={ssrc:i};o&&e.length>1&&(a.rtx={ssrc:o}),s.push(a)}return s}function xu({offerMediaObject:n,numStreams:e}){if(e<=1)throw new TypeError("numStreams must be greater than 1");let t=(n.ssrcs??[]).find(u=>u.attribute==="msid");if(!t)throw new Error("a=ssrc line with msid information not found");let[r,s]=t.value.split(" "),i=Number(t.id),o;(n.ssrcGroups??[]).some(u=>{if(u.semantics!=="FID")return!1;let p=u.ssrcs.split(/\s+/);return Number(p[0])===i?(o=Number(p[1]),!0):!1});let a=(n.ssrcs??[]).find(u=>u.attribute==="cname");if(!a)throw new Error("a=ssrc line with cname information not found");let c=a.value,l=[],d=[];for(let u=0;u<e;++u)l.push(i+u),o&&d.push(o+u);n.ssrcGroups=[],n.ssrcs=[],n.ssrcGroups.push({semantics:"SIM",ssrcs:l.join(" ")});for(let u of l)n.ssrcs.push({id:u,attribute:"cname",value:c}),n.ssrcs.push({id:u,attribute:"msid",value:`${r} ${s}`});for(let u=0;u<d.length;++u){let p=l[u],m=d[u];n.ssrcs.push({id:m,attribute:"cname",value:c}),n.ssrcs.push({id:m,attribute:"msid",value:`${r} ${s}`}),n.ssrcGroups.push({semantics:"FID",ssrcs:`${p} ${m}`})}}});var Nt=P(hr=>{"use strict";Object.defineProperty(hr,"__esModule",{value:!0});hr.addNackSupportForOpus=Iu;hr.addHeaderExtensionSupport=Du;hr.getMsidStreamIdAndTrackId=Mu;function Iu(n){for(let e of n.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 Du(n,e){let t,r=n.headerExtensions?.find(i=>i.uri===e.uri);if(r){if(r.kind===e.kind)return;t=r.preferredId}if(n.headerExtensions||(n.headerExtensions=[]),t===void 0){t=1;let i=new Set(n.headerExtensions.map(o=>o.preferredId));for(;i.has(t);)++t}let s={kind:e.kind,uri:e.uri,preferredId:t,preferredEncrypt:!1,direction:e.direction};n.headerExtensions.push(s)}function Mu(n){if(!n||typeof n!="string")return{msidStreamId:void 0,msidTrackId:void 0};let[e,t]=n.trim().split(/\s+/);return e?{msidStreamId:e,msidTrackId:t}:{msidStreamId:void 0,msidTrackId:void 0}}});var ia=P(fn=>{"use strict";Object.defineProperty(fn,"__esModule",{value:!0});fn.Chrome111=void 0;var Ce=De(),Au=se(),Lu=X(),fr=be(),Ou=de(),Nu=rt(),Fu=At(),mr=Lt(),ra=Ot(),Ds=Nt(),x=new Lu.Logger("Chrome111"),na="Chrome111",sa={OS:65535,MIS:65535},Ms=class n extends Au.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:na,factory:e=>new n(e),getNativeRtpCapabilities:async({direction:e})=>{x.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e,sendEncodings:[{scalabilityMode:"L3T3"}]});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let s=Ce.parse(r.sdp);return n.getLocalRtpCapabilities(s)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(x.debug("getNativeSctpCapabilities()"),{numStreams:sa})}}static getLocalRtpCapabilities(e,t=[]){let r=mr.extractRtpCapabilities({sdpObject:e});fr.validateAndNormalizeRtpCapabilities(r),Ds.addNackSupportForOpus(r);for(let s of t)Ds.addHeaderExtensionSupport(r,s);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,getSendExtendedRtpCapabilities:l}){super(),x.debug("constructor()"),this._direction=e,this._remoteSdp=new Fu.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i}),this._getSendExtendedRtpCapabilities=l,s.role&&s.role!=="auto"&&(this._forcedLocalDtlsRole=s.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:o??[],iceTransportPolicy:a??"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):(x.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return na}close(){if(x.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(),x.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),x.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});x.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};x.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};x.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();x.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:s,headerExtensionOptions:i,codec:o,onRtpSender:a}){if(this.assertNotClosed(),this.assertSendDirection(),x.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1){let R=1;for(let y of r){let v=y.scalabilityMode?(0,Nu.parse)(y.scalabilityMode).temporalLayers:3;v>R&&(R=v)}r.forEach((y,v)=>{y.rid=`r${v}`,y.scalabilityMode=`L1T${R}`})}let c=this._remoteSdp.getNextMediaSectionIdx(),l=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});a&&a(l.sender);let d=await this._pc.createOffer(),u=Ce.parse(d.sdp);u.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let p=[];p.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let m=n.getLocalRtpCapabilities(u,p),h=this._getSendExtendedRtpCapabilities(m),f=fr.getSendingRtpParameters(e.kind,h);f.codecs=fr.reduceCodecs(f.codecs,o);let g=fr.getSendingRemoteRtpParameters(e.kind,h);if(g.codecs=fr.reduceCodecs(g.codecs,o),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:u}),i?.absCaptureTime){let R=u.media[c.idx];mr.addHeaderExtension({offerMediaObject:R,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(y=>y.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:Ce.write(u)}}x.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let _=l.mid;f.mid=_,u=Ce.parse(this._pc.localDescription.sdp);let w=u.media[c.idx];if(f.rtcp.cname=mr.getCname({offerMediaObject:w}),f.msid=`${t??this._sendStream.id} ${e.id}`,!r)f.encodings=ra.getRtpEncodings({offerMediaObject:w,codecs:f.codecs});else if(r.length===1){let R=ra.getRtpEncodings({offerMediaObject:w,codecs:f.codecs});Object.assign(R[0],r[0]),f.encodings=R}else f.encodings=r;this._remoteSdp.send({offerMediaObject:w,reuseMid:c.reuseMid,offerRtpParameters:f,answerRtpParameters:g,codecOptions:s});let T={type:"answer",sdp:this._remoteSdp.getSdp()};return x.debug("send() | calling pc.setRemoteDescription() [answer:%o]",T),await this._pc.setRemoteDescription(T),this._mapMidTransceiver.set(_,l),{localId:_,rtpParameters:f,rtpSender:l.sender}}async stopSending(e){if(this.assertSendDirection(),x.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 s=await this._pc.createOffer();x.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let i={type:"answer",sdp:this._remoteSdp.getSdp()};x.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),x.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();x.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let s={type:"answer",sdp:this._remoteSdp.getSdp()};x.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),x.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();x.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let s={type:"answer",sdp:this._remoteSdp.getSdp()};x.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?x.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):x.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),x.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let s=r.sender.getParameters();s.encodings.forEach((a,c)=>{c<=t?a.active=!0:a.active=!1}),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);let i=await this._pc.createOffer();x.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};x.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),x.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let s=r.sender.getParameters();s.encodings.forEach((a,c)=>{s.encodings[c]={...a,...t}}),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);let i=await this._pc.createOffer();x.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};x.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}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};x.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%sa.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),o=Ce.parse(i.sdp),a=o.media.find(l=>l.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),x.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:a});let c={type:"answer",sdp:this._remoteSdp.getSdp()};x.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let s={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:s}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let a of e){let{trackId:c,kind:l,rtpParameters:d,streamId:u}=a;x.debug("receive() [trackId:%s, kind:%s]",c,l);let p=d.mid??String(this._mapMidTransceiver.size);r.set(c,p);let{msidStreamId:m}=Ds.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:p,kind:l,offerRtpParameters:d,streamId:u??m??d.rtcp?.cname??"-",trackId:c})}let s={type:"offer",sdp:this._remoteSdp.getSdp()};x.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",s),await this._pc.setRemoteDescription(s);for(let a of e){let{trackId:c,onRtpReceiver:l}=a;if(l){let d=r.get(c),u=this._pc.getTransceivers().find(p=>p.mid===d);if(!u)throw new Error("transceiver not found");l(u.receiver)}}let i=await this._pc.createAnswer(),o=Ce.parse(i.sdp);for(let a of e){let{trackId:c,rtpParameters:l}=a,d=r.get(c),u=o.media.find(p=>String(p.mid)===d);mr.applyCodecParameters({offerRtpParameters:l,answerMediaObject:u})}i={type:"answer",sdp:Ce.write(o)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),x.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let a of e){let{trackId:c}=a,l=r.get(c),d=this._pc.getTransceivers().find(u=>u.mid===l);if(d)this._mapMidTransceiver.set(l,d),t.push({localId:l,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 s of e){x.debug("stopReceiving() [localId:%s]",s);let i=this._mapMidTransceiver.get(s);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};x.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();x.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let s of e)this._mapMidTransceiver.delete(s)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let s of e){x.debug("pauseReceiving() [localId:%s]",s);let i=this._mapMidTransceiver.get(s);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(s)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};x.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();x.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let s of e){x.debug("resumeReceiving() [localId:%s]",s);let i=this._mapMidTransceiver.get(s);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(s)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};x.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();x.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:s}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c}=t,l={negotiated:!0,id:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c,protocol:s};x.debug("receiveDataChannel() [options:%o]",l);let d=this._pc.createDataChannel(r,l);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let u={type:"offer",sdp:this._remoteSdp.getSdp()};x.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",u),await this._pc.setRemoteDescription(u);let p=await this._pc.createAnswer(),m=Ce.parse(p.sdp),h=m.media.find(f=>f.type==="application");h.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),p={type:"answer",sdp:Ce.write(m)},x.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",p),await this._pc.setLocalDescription(p),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=Ce.parse(this._pc.localDescription.sdp));let r=mr.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((s,i)=>{this.safeEmit("@connect",{dtlsParameters:r},s,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 Ou.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')}};fn.Chrome111=Ms});var ca=P(mn=>{"use strict";Object.defineProperty(mn,"__esModule",{value:!0});mn.Chrome74=void 0;var le=De(),ju=X(),Uu=se(),gr=be(),qu=de(),$u=rt(),Wu=At(),_r=Lt(),As=Ot(),Ls=Nt(),k=new ju.Logger("Chrome74"),oa="Chrome74",aa={OS:1024,MIS:1024},Os=class n extends Uu.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:oa,factory:e=>new n(e),getNativeRtpCapabilities:async({direction:e})=>{k.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let s=le.parse(r.sdp);return n.getLocalRtpCapabilities(s)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(k.debug("getNativeSctpCapabilities()"),{numStreams:aa})}}static getLocalRtpCapabilities(e,t=[]){let r=_r.extractRtpCapabilities({sdpObject:e});gr.validateAndNormalizeRtpCapabilities(r),Ls.addNackSupportForOpus(r);for(let s of t)Ls.addHeaderExtensionSupport(r,s);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,getSendExtendedRtpCapabilities:l}){super(),k.debug("constructor()"),this._direction=e,this._remoteSdp=new Wu.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i}),this._getSendExtendedRtpCapabilities=l,s.role&&s.role!=="auto"&&(this._forcedLocalDtlsRole=s.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:o??[],iceTransportPolicy:a??"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):(k.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return oa}close(){if(k.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(),k.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),k.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});k.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};k.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};k.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();k.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:s,headerExtensionOptions:i,codec:o}){this.assertNotClosed(),this.assertSendDirection(),k.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((y,v)=>{y.rid=`r${v}`});let a=this._remoteSdp.getNextMediaSectionIdx(),c=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r}),l=await this._pc.createOffer(),d=le.parse(l.sdp);d.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 p=n.getLocalRtpCapabilities(d,u),m=this._getSendExtendedRtpCapabilities(p),h=gr.getSendingRtpParameters(e.kind,m);h.codecs=gr.reduceCodecs(h.codecs,o);let f=gr.getSendingRemoteRtpParameters(e.kind,m);f.codecs=gr.reduceCodecs(f.codecs,o),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:d});let g=!1,_=(0,$u.parse)((r??[{}])[0].scalabilityMode),w;r?.length===1&&_.spatialLayers>1&&h.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(k.debug("send() | enabling legacy simulcast for VP9 SVC"),g=!0,d=le.parse(l.sdp),w=d.media[a.idx],As.addLegacySimulcast({offerMediaObject:w,numStreams:_.spatialLayers}),l={type:"offer",sdp:le.write(d)}),k.debug("send() | calling pc.setLocalDescription() [offer:%o]",l),i?.absCaptureTime&&(w=d.media[a.idx],_r.addHeaderExtension({offerMediaObject:w,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:f.headerExtensions.find(y=>y.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),l={type:"offer",sdp:le.write(d)}),await this._pc.setLocalDescription(l);let T=c.mid;if(h.mid=T,d=le.parse(this._pc.localDescription.sdp),w=d.media[a.idx],h.rtcp.cname=_r.getCname({offerMediaObject:w}),h.msid=`${t??this._sendStream.id} ${e.id}`,!r)h.encodings=As.getRtpEncodings({offerMediaObject:w,codecs:h.codecs});else if(r.length===1){let y=As.getRtpEncodings({offerMediaObject:w,codecs:h.codecs});Object.assign(y[0],r[0]),g&&(y=[y[0]]),h.encodings=y}else h.encodings=r;if(h.encodings.length>1&&(h.codecs[0].mimeType.toLowerCase()==="video/vp8"||h.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let y of h.encodings)y.scalabilityMode?y.scalabilityMode=`L1T${_.temporalLayers}`:y.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:w,reuseMid:a.reuseMid,offerRtpParameters:h,answerRtpParameters:f,codecOptions:s});let R={type:"answer",sdp:this._remoteSdp.getSdp()};return k.debug("send() | calling pc.setRemoteDescription() [answer:%o]",R),await this._pc.setRemoteDescription(R),this._mapMidTransceiver.set(T,c),{localId:T,rtpParameters:h,rtpSender:c.sender}}async stopSending(e){if(this.assertSendDirection(),k.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 s=await this._pc.createOffer();k.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let i={type:"answer",sdp:this._remoteSdp.getSdp()};k.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),k.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();k.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let s={type:"answer",sdp:this._remoteSdp.getSdp()};k.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),k.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();k.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let s={type:"answer",sdp:this._remoteSdp.getSdp()};k.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?k.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):k.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),k.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let s=r.sender.getParameters();s.encodings.forEach((a,c)=>{c<=t?a.active=!0:a.active=!1}),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);let i=await this._pc.createOffer();k.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};k.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),k.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let s=r.sender.getParameters();s.encodings.forEach((a,c)=>{s.encodings[c]={...a,...t}}),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);let i=await this._pc.createOffer();k.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};k.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}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};k.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%aa.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),o=le.parse(i.sdp),a=o.media.find(l=>l.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),k.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:a});let c={type:"answer",sdp:this._remoteSdp.getSdp()};k.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let s={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:s}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let a of e){let{trackId:c,kind:l,rtpParameters:d,streamId:u}=a;k.debug("receive() [trackId:%s, kind:%s]",c,l);let p=d.mid??String(this._mapMidTransceiver.size);r.set(c,p);let{msidStreamId:m}=Ls.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:p,kind:l,offerRtpParameters:d,streamId:u??m??d.rtcp?.cname??"-",trackId:c})}let s={type:"offer",sdp:this._remoteSdp.getSdp()};k.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",s),await this._pc.setRemoteDescription(s);let i=await this._pc.createAnswer(),o=le.parse(i.sdp);for(let a of e){let{trackId:c,rtpParameters:l}=a,d=r.get(c),u=o.media.find(p=>String(p.mid)===d);_r.applyCodecParameters({offerRtpParameters:l,answerMediaObject:u})}i={type:"answer",sdp:le.write(o)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),k.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let a of e){let{trackId:c}=a,l=r.get(c),d=this._pc.getTransceivers().find(u=>u.mid===l);if(d)this._mapMidTransceiver.set(l,d),t.push({localId:l,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 s of e){k.debug("stopReceiving() [localId:%s]",s);let i=this._mapMidTransceiver.get(s);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};k.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();k.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let s of e)this._mapMidTransceiver.delete(s)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let s of e){k.debug("pauseReceiving() [localId:%s]",s);let i=this._mapMidTransceiver.get(s);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(s)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};k.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();k.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let s of e){k.debug("resumeReceiving() [localId:%s]",s);let i=this._mapMidTransceiver.get(s);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(s)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};k.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();k.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:s}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c}=t,l={negotiated:!0,id:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c,protocol:s};k.debug("receiveDataChannel() [options:%o]",l);let d=this._pc.createDataChannel(r,l);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let u={type:"offer",sdp:this._remoteSdp.getSdp()};k.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",u),await this._pc.setRemoteDescription(u);let p=await this._pc.createAnswer(),m=le.parse(p.sdp),h=m.media.find(f=>f.type==="application");h.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),p={type:"answer",sdp:le.write(m)},k.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",p),await this._pc.setLocalDescription(p),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=le.parse(this._pc.localDescription.sdp));let r=_r.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((s,i)=>{this.safeEmit("@connect",{dtlsParameters:r},s,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 qu.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')}};mn.Chrome74=Os});var ha=P(_n=>{"use strict";Object.defineProperty(_n,"__esModule",{value:!0});_n.Firefox120=void 0;var Me=De(),Bu=se(),zu=X(),da=de(),vr=be(),Hu=rt(),Vu=At(),gn=Lt(),la=Ot(),Gu=Nt(),I=new zu.Logger("Firefox120"),ua="Firefox120",pa={OS:16,MIS:2048},Ns=class n extends Bu.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:ua,factory:e=>new n(e),getNativeRtpCapabilities:async({direction:e})=>{I.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"}),r=document.createElement("canvas");r.getContext("2d");let i=r.captureStream().getVideoTracks()[0];try{t.addTransceiver("audio",{direction:e}),t.addTransceiver(i,{direction:e,sendEncodings:[{rid:"r0",maxBitrate:1e5},{rid:"r1",maxBitrate:5e5}]});let o=await t.createOffer();try{r.remove()}catch{}try{i.stop()}catch{}try{t.close()}catch{}t=void 0;let a=Me.parse(o.sdp);return n.getLocalRtpCapabilities(a)}catch(o){try{r.remove()}catch{}try{i.stop()}catch{}try{t?.close()}catch{}throw t=void 0,o}},getNativeSctpCapabilities:async()=>(I.debug("getNativeSctpCapabilities()"),{numStreams:pa})}}static getLocalRtpCapabilities(e){let t=gn.extractRtpCapabilities({sdpObject:e});return vr.validateAndNormalizeRtpCapabilities(t),t}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,getSendExtendedRtpCapabilities:l}){super(),I.debug("constructor()"),this._direction=e,this._remoteSdp=new Vu.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i}),this._getSendExtendedRtpCapabilities=l,this._pc=new RTCPeerConnection({iceServers:o??[],iceTransportPolicy:a??"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):(I.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return ua}close(){if(I.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 da.UnsupportedError("not supported")}async restartIce(e){if(this.assertNotClosed(),I.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});I.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};I.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};I.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();I.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:s,codec:i,onRtpSender:o}){this.assertNotClosed(),this.assertSendDirection(),I.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((w,T)=>{w.rid=`r${T}`});let a=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});o&&o(a.sender);let c=await this._pc.createOffer(),l=Me.parse(c.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let d=n.getLocalRtpCapabilities(l),u=this._getSendExtendedRtpCapabilities(d),p=vr.getSendingRtpParameters(e.kind,u);p.codecs=vr.reduceCodecs(p.codecs,i);let m=vr.getSendingRemoteRtpParameters(e.kind,u);m.codecs=vr.reduceCodecs(m.codecs,i),this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:l});let h=(0,Hu.parse)((r??[{}])[0].scalabilityMode);I.debug("send() | calling pc.setLocalDescription() [offer:%o]",c),await this._pc.setLocalDescription(c);let f=a.mid;p.mid=f,l=Me.parse(this._pc.localDescription.sdp);let g=l.media[l.media.length-1];if(p.rtcp.cname=gn.getCname({offerMediaObject:g}),p.msid=`${t??this._sendStream.id} ${e.id}`,!r)p.encodings=la.getRtpEncodings({offerMediaObject:g,codecs:p.codecs});else if(r.length===1){let w=la.getRtpEncodings({offerMediaObject:g,codecs:p.codecs});Object.assign(w[0],r[0]),p.encodings=w}else p.encodings=r;if(p.encodings.length>1&&(p.codecs[0].mimeType.toLowerCase()==="video/vp8"||p.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let w of p.encodings)w.scalabilityMode?w.scalabilityMode=`L1T${h.temporalLayers}`:w.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:g,offerRtpParameters:p,answerRtpParameters:m,codecOptions:s});let _={type:"answer",sdp:this._remoteSdp.getSdp()};return I.debug("send() | calling pc.setRemoteDescription() [answer:%o]",_),await this._pc.setRemoteDescription(_),this._mapMidTransceiver.set(f,a),{localId:f,rtpParameters:p,rtpSender:a.sender}}async stopSending(e){if(this.assertSendDirection(),I.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated transceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.disableMediaSection(t.mid);let r=await this._pc.createOffer();I.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let s={type:"answer",sdp:this._remoteSdp.getSdp()};I.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),I.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();I.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let s={type:"answer",sdp:this._remoteSdp.getSdp()};I.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),I.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let r=await this._pc.createOffer();I.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let s={type:"answer",sdp:this._remoteSdp.getSdp()};I.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?I.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):I.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),I.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated transceiver not found");let s=r.sender.getParameters();s.encodings.forEach((a,c)=>{c<=t?a.active=!0:a.active=!1}),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);let i=await this._pc.createOffer();I.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};I.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),I.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let s=r.sender.getParameters();s.encodings.forEach((a,c)=>{s.encodings[c]={...a,...t}}),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);let i=await this._pc.createOffer();I.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};I.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}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};I.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%pa.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),o=Me.parse(i.sdp),a=o.media.find(l=>l.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:o}),I.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:a});let c={type:"answer",sdp:this._remoteSdp.getSdp()};I.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let s={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:s}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let a of e){let{trackId:c,kind:l,rtpParameters:d,streamId:u}=a;I.debug("receive() [trackId:%s, kind:%s]",c,l);let p=d.mid??String(this._mapMidTransceiver.size);r.set(c,p);let{msidStreamId:m}=Gu.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:p,kind:l,offerRtpParameters:d,streamId:u??m??d.rtcp?.cname??"-",trackId:c})}let s={type:"offer",sdp:this._remoteSdp.getSdp()};I.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",s),await this._pc.setRemoteDescription(s);for(let a of e){let{trackId:c,onRtpReceiver:l}=a;if(l){let d=r.get(c),u=this._pc.getTransceivers().find(p=>p.mid===d);if(!u)throw new Error("transceiver not found");l(u.receiver)}}let i=await this._pc.createAnswer(),o=Me.parse(i.sdp);for(let a of e){let{trackId:c,rtpParameters:l}=a,d=r.get(c),u=o.media.find(p=>String(p.mid)===d);gn.applyCodecParameters({offerRtpParameters:l,answerMediaObject:u}),i={type:"answer",sdp:Me.write(o)}}this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:o}),I.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let a of e){let{trackId:c}=a,l=r.get(c),d=this._pc.getTransceivers().find(u=>u.mid===l);if(!d)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(l,d),t.push({localId:l,track:d.receiver.track,rtpReceiver:d.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let s of e){I.debug("stopReceiving() [localId:%s]",s);let i=this._mapMidTransceiver.get(s);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};I.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();I.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let s of e)this._mapMidTransceiver.delete(s)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let s of e){I.debug("pauseReceiving() [localId:%s]",s);let i=this._mapMidTransceiver.get(s);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(s)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};I.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();I.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let s of e){I.debug("resumeReceiving() [localId:%s]",s);let i=this._mapMidTransceiver.get(s);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(s)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};I.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();I.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:s}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c}=t,l={negotiated:!0,id:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c,protocol:s};I.debug("receiveDataChannel() [options:%o]",l);let d=this._pc.createDataChannel(r,l);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let u={type:"offer",sdp:this._remoteSdp.getSdp()};I.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",u),await this._pc.setRemoteDescription(u);let p=await this._pc.createAnswer(),m=Me.parse(p.sdp),h=m.media.find(f=>f.type==="application");h.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:m}),p={type:"answer",sdp:Me.write(m)},I.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",p),await this._pc.setLocalDescription(p),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=Me.parse(this._pc.localDescription.sdp));let r=gn.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((s,i)=>{this.safeEmit("@connect",{dtlsParameters:r},s,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 da.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')}};_n.Firefox120=Ns});var _a=P(vn=>{"use strict";Object.defineProperty(vn,"__esModule",{value:!0});vn.Safari12=void 0;var ue=De(),Ku=se(),Yu=X(),wr=be(),Qu=de(),Ju=rt(),Xu=At(),yr=Lt(),fa=Ot(),Fs=Nt(),E=new Yu.Logger("Safari12"),ma="Safari12",ga={OS:65535,MIS:65535},js=class n extends Ku.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:ma,factory:e=>new n(e),getNativeRtpCapabilities:async({direction:e})=>{E.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let s=ue.parse(r.sdp);return n.getLocalRtpCapabilities(s)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(E.debug("getNativeSctpCapabilities()"),{numStreams:ga})}}static getLocalRtpCapabilities(e,t=[]){let r=yr.extractRtpCapabilities({sdpObject:e});wr.validateAndNormalizeRtpCapabilities(r),Fs.addNackSupportForOpus(r);for(let s of t)Fs.addHeaderExtensionSupport(r,s);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,getSendExtendedRtpCapabilities:l}){super(),E.debug("constructor()"),this._direction=e,this._remoteSdp=new Xu.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i}),this._getSendExtendedRtpCapabilities=l,s.role&&s.role!=="auto"&&(this._forcedLocalDtlsRole=s.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:o??[],iceTransportPolicy:a??"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):(E.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return ma}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){this.assertNotClosed(),E.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}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 r={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();E.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:s,headerExtensionOptions:i,codec:o,onRtpSender:a}){this.assertNotClosed(),this.assertSendDirection(),E.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t);let c=this._remoteSdp.getNextMediaSectionIdx(),l=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream]});a&&a(l.sender);let d=await this._pc.createOffer(),u=ue.parse(d.sdp);u.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let p=[];p.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let m=n.getLocalRtpCapabilities(u,p),h=this._getSendExtendedRtpCapabilities(m),f=wr.getSendingRtpParameters(e.kind,h);f.codecs=wr.reduceCodecs(f.codecs,o);let g=wr.getSendingRemoteRtpParameters(e.kind,h);g.codecs=wr.reduceCodecs(g.codecs,o);let _;this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:u});let w=(0,Ju.parse)((r??[{}])[0].scalabilityMode);r&&r.length>1&&(E.debug("send() | enabling legacy simulcast"),u=ue.parse(d.sdp),_=u.media[c.idx],fa.addLegacySimulcast({offerMediaObject:_,numStreams:r.length}),d={type:"offer",sdp:ue.write(u)}),i?.absCaptureTime&&(_=u.media[c.idx],yr.addHeaderExtension({offerMediaObject:_,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(y=>y.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:ue.write(u)}),E.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let T=l.mid;if(f.mid=T,u=ue.parse(this._pc.localDescription.sdp),_=u.media[c.idx],f.rtcp.cname=yr.getCname({offerMediaObject:_}),f.msid=`${t??this._sendStream.id} ${e.id}`,f.encodings=fa.getRtpEncodings({offerMediaObject:_,codecs:f.codecs}),r)for(let y=0;y<f.encodings.length;++y)r[y]&&Object.assign(f.encodings[y],r[y]);if(f.encodings.length>1&&(f.codecs[0].mimeType.toLowerCase()==="video/vp8"||f.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let y of f.encodings)y.scalabilityMode?y.scalabilityMode=`L1T${w.temporalLayers}`:y.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:_,reuseMid:c.reuseMid,offerRtpParameters:f,answerRtpParameters:g,codecOptions:s});let R={type:"answer",sdp:this._remoteSdp.getSdp()};return E.debug("send() | calling pc.setRemoteDescription() [answer:%o]",R),await this._pc.setRemoteDescription(R),this._mapMidTransceiver.set(T,l),{localId:T,rtpParameters:f,rtpSender:l.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;E.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 s=await this._pc.createOffer();E.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let i={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),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 r=await this._pc.createOffer();E.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let s={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}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 r=await this._pc.createOffer();E.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let s={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}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 r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),E.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let s=r.sender.getParameters();s.encodings.forEach((a,c)=>{c<=t?a.active=!0:a.active=!1}),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);let i=await this._pc.createOffer();E.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),E.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let s=r.sender.getParameters();s.encodings.forEach((a,c)=>{s.encodings[c]={...a,...t}}),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);let i=await this._pc.createOffer();E.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}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 r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%ga.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),o=ue.parse(i.sdp),a=o.media.find(l=>l.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),E.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:a});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 s={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:s}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let a of e){let{trackId:c,kind:l,rtpParameters:d,streamId:u}=a;E.debug("receive() [trackId:%s, kind:%s]",c,l);let p=d.mid??String(this._mapMidTransceiver.size);r.set(c,p);let{msidStreamId:m}=Fs.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:p,kind:l,offerRtpParameters:d,streamId:u??m??d.rtcp?.cname??"-",trackId:c})}let s={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",s),await this._pc.setRemoteDescription(s);for(let a of e){let{trackId:c,onRtpReceiver:l}=a;if(l){let d=r.get(c),u=this._pc.getTransceivers().find(p=>p.mid===d);if(!u)throw new Error("transceiver not found");l(u.receiver)}}let i=await this._pc.createAnswer(),o=ue.parse(i.sdp);for(let a of e){let{trackId:c,rtpParameters:l}=a,d=r.get(c),u=o.media.find(p=>String(p.mid)===d);yr.applyCodecParameters({offerRtpParameters:l,answerMediaObject:u})}i={type:"answer",sdp:ue.write(o)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),E.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let a of e){let{trackId:c}=a,l=r.get(c),d=this._pc.getTransceivers().find(u=>u.mid===l);if(!d)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(l,d),t.push({localId:l,track:d.receiver.track,rtpReceiver:d.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let s of e){E.debug("stopReceiving() [localId:%s]",s);let i=this._mapMidTransceiver.get(s);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 r=await this._pc.createAnswer();E.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let s of e)this._mapMidTransceiver.delete(s)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let s of e){E.debug("pauseReceiving() [localId:%s]",s);let i=this._mapMidTransceiver.get(s);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(s)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();E.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let s of e){E.debug("resumeReceiving() [localId:%s]",s);let i=this._mapMidTransceiver.get(s);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(s)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();E.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:s}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c}=t,l={negotiated:!0,id:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c,protocol:s};E.debug("receiveDataChannel() [options:%o]",l);let d=this._pc.createDataChannel(r,l);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let u={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",u),await this._pc.setRemoteDescription(u);let p=await this._pc.createAnswer(),m=ue.parse(p.sdp),h=m.media.find(f=>f.type==="application");h.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),p={type:"answer",sdp:ue.write(m)},E.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",p),await this._pc.setLocalDescription(p),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=ue.parse(this._pc.localDescription.sdp));let r=yr.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((s,i)=>{this.safeEmit("@connect",{dtlsParameters:r},s,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 Qu.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')}};vn.Safari12=js});var ya=P(wn=>{"use strict";Object.defineProperty(wn,"__esModule",{value:!0});wn.ReactNative106=void 0;var pe=De(),Zu=se(),ep=X(),br=be(),tp=de(),rp=rt(),np=At(),Sr=Lt(),Us=Ot(),qs=Nt(),C=new ep.Logger("ReactNative106"),va="ReactNative106",wa={OS:65535,MIS:65535},$s=class n extends Zu.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:va,factory:e=>new n(e),getNativeRtpCapabilities:async({direction:e})=>{C.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let s=pe.parse(r.sdp);return n.getLocalRtpCapabilities(s)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(C.debug("getNativeSctpCapabilities()"),{numStreams:wa})}}static getLocalRtpCapabilities(e,t=[]){let r=Sr.extractRtpCapabilities({sdpObject:e});br.validateAndNormalizeRtpCapabilities(r),qs.addNackSupportForOpus(r);for(let s of t)qs.addHeaderExtensionSupport(r,s);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,getSendExtendedRtpCapabilities:l}){super(),C.debug("constructor()"),this._direction=e,this._remoteSdp=new np.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i}),this._getSendExtendedRtpCapabilities=l,s.role&&s.role!=="auto"&&(this._forcedLocalDtlsRole=s.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:o??[],iceTransportPolicy:a??"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):(C.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return va}close(){if(C.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(),C.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),C.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});C.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:s,headerExtensionOptions:i,codec:o,onRtpSender:a}){this.assertNotClosed(),this.assertSendDirection(),C.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((v,D)=>{v.rid=`r${D}`});let c=this._remoteSdp.getNextMediaSectionIdx(),l=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});a&&a(l.sender);let d=await this._pc.createOffer(),u=pe.parse(d.sdp);u.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let p=[];p.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let m=n.getLocalRtpCapabilities(u,p),h=this._getSendExtendedRtpCapabilities(m),f=br.getSendingRtpParameters(e.kind,h);f.codecs=br.reduceCodecs(f.codecs,o);let g=br.getSendingRemoteRtpParameters(e.kind,h);g.codecs=br.reduceCodecs(g.codecs,o),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:u});let _=!1,w=(0,rp.parse)((r??[{}])[0].scalabilityMode),T;r?.length===1&&w.spatialLayers>1&&f.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(C.debug("send() | enabling legacy simulcast for VP9 SVC"),_=!0,u=pe.parse(d.sdp),T=u.media[c.idx],Us.addLegacySimulcast({offerMediaObject:T,numStreams:w.spatialLayers}),d={type:"offer",sdp:pe.write(u)}),i?.absCaptureTime&&(T=u.media[c.idx],Sr.addHeaderExtension({offerMediaObject:T,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(v=>v.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:pe.write(u)}),C.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let R=l.mid??void 0;if(R||C.warn("send() | missing transceiver.mid (bug in react-native-webrtc, using a workaround"),f.mid=R,u=pe.parse(this._pc.localDescription.sdp),T=u.media[c.idx],f.rtcp.cname=Sr.getCname({offerMediaObject:T}),f.msid=`${t??this._sendStream.id} ${e.id}`,!r)f.encodings=Us.getRtpEncodings({offerMediaObject:T,codecs:f.codecs});else if(r.length===1){let v=Us.getRtpEncodings({offerMediaObject:T,codecs:f.codecs});Object.assign(v[0],r[0]),_&&(v=[v[0]]),f.encodings=v}else f.encodings=r;if(f.encodings.length>1&&(f.codecs[0].mimeType.toLowerCase()==="video/vp8"||f.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let v of f.encodings)v.scalabilityMode?v.scalabilityMode=`L1T${w.temporalLayers}`:v.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:T,reuseMid:c.reuseMid,offerRtpParameters:f,answerRtpParameters:g,codecOptions:s});let y={type:"answer",sdp:this._remoteSdp.getSdp()};return C.debug("send() | calling pc.setRemoteDescription() [answer:%o]",y),await this._pc.setRemoteDescription(y),R||(R=l.mid,f.mid=R),this._mapMidTransceiver.set(R,l),{localId:R,rtpParameters:f,rtpSender:l.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;C.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 s=await this._pc.createOffer();C.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let i={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),C.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();C.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let s={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),C.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();C.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let s={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?C.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):C.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),C.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let s=r.sender.getParameters();s.encodings.forEach((a,c)=>{c<=t?a.active=!0:a.active=!1}),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);let i=await this._pc.createOffer();C.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),C.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let s=r.sender.getParameters();s.encodings.forEach((a,c)=>{s.encodings[c]={...a,...t}}),await r.sender.setParameters(s),this._remoteSdp.muxMediaSectionSimulcast(e,s.encodings);let i=await this._pc.createOffer();C.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}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};C.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%wa.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),o=pe.parse(i.sdp),a=o.media.find(l=>l.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),C.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:a});let c={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let s={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:s}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let a of e){let{trackId:c,kind:l,rtpParameters:d,streamId:u}=a;C.debug("receive() [trackId:%s, kind:%s]",c,l);let p=d.mid??String(this._mapMidTransceiver.size);r.set(c,p);let{msidStreamId:m}=qs.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:p,kind:l,offerRtpParameters:d,streamId:u??m??d.rtcp?.cname??"-",trackId:c})}let s={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",s),await this._pc.setRemoteDescription(s);for(let a of e){let{trackId:c,onRtpReceiver:l}=a;if(l){let d=r.get(c),u=this._pc.getTransceivers().find(p=>p.mid===d);if(!u)throw new Error("transceiver not found");l(u.receiver)}}let i=await this._pc.createAnswer(),o=pe.parse(i.sdp);for(let a of e){let{trackId:c,rtpParameters:l}=a,d=r.get(c),u=o.media.find(p=>String(p.mid)===d);Sr.applyCodecParameters({offerRtpParameters:l,answerMediaObject:u})}i={type:"answer",sdp:pe.write(o)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),C.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let a of e){let{trackId:c}=a,l=r.get(c),d=this._pc.getTransceivers().find(u=>u.mid===l);if(d)this._mapMidTransceiver.set(l,d),t.push({localId:l,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 s of e){C.debug("stopReceiving() [localId:%s]",s);let i=this._mapMidTransceiver.get(s);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let s of e)this._mapMidTransceiver.delete(s)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let s of e){C.debug("pauseReceiving() [localId:%s]",s);let i=this._mapMidTransceiver.get(s);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(s)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let s of e){C.debug("resumeReceiving() [localId:%s]",s);let i=this._mapMidTransceiver.get(s);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(s)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:s}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c}=t,l={negotiated:!0,id:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c,protocol:s};C.debug("receiveDataChannel() [options:%o]",l);let d=this._pc.createDataChannel(r,l);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let u={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",u),await this._pc.setRemoteDescription(u);let p=await this._pc.createAnswer(),m=pe.parse(p.sdp),h=m.media.find(f=>f.type==="application");h.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),p={type:"answer",sdp:pe.write(m)},C.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",p),await this._pc.setLocalDescription(p),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=pe.parse(this._pc.localDescription.sdp));let r=Sr.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((s,i)=>{this.safeEmit("@connect",{dtlsParameters:r},s,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 tp.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')}};wn.ReactNative106=$s});var Ra=P(Ft=>{"use strict";Object.defineProperty(Ft,"__esModule",{value:!0});Ft.Device=void 0;Ft.detectDevice=ba;Ft.detectDeviceAsync=Sa;var sp=X(),ip=se(),Be=de(),yn=Xe(),ie=be(),op=zo(),ap=ia(),cp=ca(),dp=ha(),lp=_a(),up=ya(),S=new sp.Logger("Device");function ba(n,e){return S.debug("detectDevice()"),!n&&typeof navigator=="object"&&(n=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),Ta(n,e)}async function Sa(n,e){return S.debug("detectDeviceAsync()"),!n&&typeof navigator=="object"&&(n=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),Ta(n,e)}var Ws=class n{_handlerFactory;_handlerName;_loaded=!1;_getSendExtendedRtpCapabilities;_recvRtpCapabilities;_sendRtpCapabilities;_canProduceByKind={audio:!1,video:!1};_sctpCapabilities;_observer=new ip.EnhancedEventEmitter;static async factory({handlerName:e,handlerFactory:t}={}){if(S.debug("factory()"),e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(!e&&!t&&(e=await Sa(),!e))throw new Be.UnsupportedError("device not supported");return new n({handlerName:e,handlerFactory:t})}constructor({handlerName:e,handlerFactory:t}={}){if(S.debug("constructor()"),e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(t)this._handlerFactory=t;else{if(e)S.debug("constructor() | handler given: %s",e);else if(e=ba(),e)S.debug("constructor() | detected handler: %s",e);else throw new Be.UnsupportedError("device not supported");switch(e){case"Chrome111":{this._handlerFactory=ap.Chrome111.createFactory();break}case"Chrome74":{this._handlerFactory=cp.Chrome74.createFactory();break}case"Firefox120":{this._handlerFactory=dp.Firefox120.createFactory();break}case"Safari12":{this._handlerFactory=lp.Safari12.createFactory();break}case"ReactNative106":{this._handlerFactory=up.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 Be.InvalidStateError("not loaded");return this._recvRtpCapabilities}get sendRtpCapabilities(){if(!this._loaded)throw new Be.InvalidStateError("not loaded");return this._sendRtpCapabilities}get sctpCapabilities(){if(!this._loaded)throw new Be.InvalidStateError("not loaded");return this._sctpCapabilities}get observer(){return this._observer}async load({routerRtpCapabilities:e,preferLocalCodecsOrder:t=!1}){if(S.debug("load() [routerRtpCapabilities:%o]",e),this._loaded)throw new Be.InvalidStateError("already loaded");let r=yn.clone(e);ie.validateAndNormalizeRtpCapabilities(r);let{getNativeRtpCapabilities:s,getNativeSctpCapabilities:i}=this._handlerFactory,o=yn.clone(await s({direction:"recvonly"}));S.debug("load() | got native receiving RTP capabilities:%o",o),ie.validateAndNormalizeRtpCapabilities(o);let a=yn.clone(await s({direction:"sendonly"}));S.debug("load() | got native sending RTP capabilities:%o",a),ie.validateAndNormalizeRtpCapabilities(a),this._getSendExtendedRtpCapabilities=d=>yn.clone(ie.getExtendedRtpCapabilities(d,r,t));let c=ie.getExtendedRtpCapabilities(o,r,!1);this._recvRtpCapabilities=ie.getRecvRtpCapabilities(c),S.debug("load() | got receiving RTP capabilities:%o",this._recvRtpCapabilities),ie.validateAndNormalizeRtpCapabilities(this._recvRtpCapabilities);let l=ie.getExtendedRtpCapabilities(a,r,t);this._sendRtpCapabilities=ie.getSendRtpCapabilities(l),S.debug("load() | got sending RTP capabilities:%o",this._sendRtpCapabilities),ie.validateAndNormalizeRtpCapabilities(this._sendRtpCapabilities),this._canProduceByKind.audio=ie.canSend("audio",this._sendRtpCapabilities),this._canProduceByKind.video=ie.canSend("video",this._sendRtpCapabilities),this._sctpCapabilities=await i(),ie.validateSctpCapabilities(this._sctpCapabilities),S.debug("load() | got native SCTP capabilities:%o",this._sctpCapabilities),S.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 Be.InvalidStateError("not loaded");return this._canProduceByKind[e]}createSendTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,appData:l}){return S.debug("createSendTransport()"),this.createTransport({direction:"send",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,appData:l})}createRecvTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,appData:l}){return S.debug("createRecvTransport()"),this.createTransport({direction:"recv",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:s,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,appData:l})}createTransport({direction:e,id:t,iceParameters:r,iceCandidates:s,dtlsParameters:i,sctpParameters:o,iceServers:a,iceTransportPolicy:c,additionalSettings:l,appData:d}){if(this._loaded){if(typeof t!="string")throw new TypeError("missing id");if(typeof r!="object")throw new TypeError("missing iceParameters");if(Array.isArray(s)){if(typeof i!="object")throw new TypeError("missing dtlsParameters");if(o&&typeof o!="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 Be.InvalidStateError("not loaded");let u=new op.Transport({direction:e,id:t,iceParameters:r,iceCandidates:s,dtlsParameters:i,sctpParameters:o,iceServers:a,iceTransportPolicy:c,additionalSettings:l,appData:d,handlerFactory:this._handlerFactory,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities,recvRtpCapabilities:this._recvRtpCapabilities,canProduceByKind:this._canProduceByKind});return this._observer.safeEmit("newtransport",u),u}};Ft.Device=Ws;function Ta(n,e){S.debug('detectDeviceImpl() [userAgent:"%s", userAgentData:%o]',n,e);let t=pp(n,e);if(t){if(t>=111)return S.debug("detectDeviceImpl() | using Chrome111 handler"),"Chrome111";if(t>=74)return S.debug("detectDeviceImpl() | using Chrome74 handler"),"Chrome74";S.warn("detectDeviceImpl() | unsupported Chromium based browser/version");return}let r=hp(n);if(r){if(r>=120)return S.debug("detectDeviceImpl() | using Firefox120 handler"),"Firefox120";S.warn("detectDeviceImpl() | unsupported Firefox browser/version");return}let s=fp(n);if(s){if(s>=605)return S.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";S.warn("detectDeviceImpl() | unsupported desktop Safari browser/version");return}let i=mp(n);if(i){if(i>=605)return S.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";S.warn("detectDeviceImpl() | unsupported iOS Safari based browser/version");return}if(Tr()){if(typeof RTCPeerConnection<"u"&&typeof RTCRtpTransceiver<"u")return S.debug("detectDeviceImpl() | using ReactNative106 handler"),"ReactNative106";S.warn("detectDeviceImpl() | unsupported react-native-webrtc version without RTCPeerConnection or RTCRtpTransceiver, forgot to call registerGlobals() on it?");return}S.warn('detectDeviceImpl() | device not supported [userAgent:"%s", userAgentData:%o]',n,e)}function pp(n,e){if(S.debug("getChromiumMajorVersion()"),bn(n,e)){S.debug("getChromiumMajorVersion() | this is iOS => undefined");return}if(Tr()){S.debug("getChromiumMajorVersion() | this is React-Native => undefined");return}if(e){let s=(Array.isArray(e.brands)?e.brands:[]).find(i=>i.brand==="Chromium");if(s){let i=Number(s.version);return S.debug(`getChromiumMajorVersion() | Chromium major version based on NavigatorUAData => ${i}`),i}}let t=n?.match(/\b(?:Chrome|Chromium)\/(\w+)/i);if(t?.[1]){let r=Number(t[1]);return S.debug(`getChromiumMajorVersion() | Chromium major version based on User-Agent => ${r}`),r}S.debug("getChromiumMajorVersion() | this is not Chromium => undefined")}function hp(n){if(S.debug("getFirefoxMajorVersion()"),bn(n)){S.debug("getFirefoxMajorVersion() | this is iOS => undefined");return}if(Tr()){S.debug("getFirefoxMajorVersion() | this is React-Native => undefined");return}let e=n?.match(/\bFirefox\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return S.debug(`getFirefoxMajorVersion() | Firefox major version based on User-Agent => ${t}`),t}S.debug("getFirefoxMajorVersion() | this is not Firefox => undefined")}function fp(n){if(S.debug("getMacOSWebKitMajorVersion()"),bn(n)){S.debug("getMacOSWebKitMajorVersion() | this is iOS => undefined");return}if(Tr()){S.debug("getMacOSWebKitMajorVersion() | this is React-Native => undefined");return}if(!(n&&/\bSafari\b/i.test(n)&&!/\bChrome\b/i.test(n)&&!/\bChromium\b/i.test(n)&&!/\bFirefox\b/i.test(n))){S.debug("getMacOSWebKitMajorVersion() | this is not Safari => undefined");return}let t=n.match(/AppleWebKit\/(\w+)/i);if(t?.[1]){let r=Number(t[1]);return S.debug(`getMacOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${r}`),r}S.debug("getMacOSWebKitMajorVersion() | this is not WebKit => undefined")}function mp(n){if(S.debug("getIOSWebKitMajorVersion()"),!bn(n)){S.debug("getIOSWebKitMajorVersion() | this is not iOS => undefined");return}if(Tr()){S.debug("getIOSWebKitMajorVersion() | this is React-Native => undefined");return}let e=n?.match(/AppleWebKit\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return S.debug(`getIOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${t}`),t}S.debug("getIOSWebKitMajorVersion() | this is not WebKit => undefined")}function bn(n,e){return S.debug("isIOS()"),e?.platform==="iOS"?(S.debug("isIOS() | this is iOS based on NavigatorUAData.platform => true"),!0):e?.platform?(S.debug("isIOS() | this is not iOS based on NavigatorUAData.platform => false"),!1):n&&/iPad|iPhone|iPod/.test(n)?(S.debug("isIOS() | this is iOS based on User-Agent => true"),!0):typeof navigator=="object"&&navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1?(S.debug("isIOS() | this is iPadOS 13+ based on User-Agent => true"),!0):(S.debug("isIOS() | this is not iOS => false"),!1)}function Tr(){return S.debug("isReactNative()"),typeof navigator=="object"&&navigator.product==="ReactNative"?(S.debug("isReactNative() | this is React-Native based on navigator.product"),!0):(S.debug("isReactNative() | this is not React-Native => false"),!1)}});var ka=P(Ca=>{"use strict";var st=256,Tn=[],Sn;for(;st--;)Tn[st]=(st+256).toString(16).substring(1);function gp(){var n=0,e,t="";if(!Sn||st+16>256){for(Sn=Array(n=256);n--;)Sn[n]=256*Math.random()|0;n=st=0}for(;n<16;n++)e=Sn[st+n],n==6?t+=Tn[e&15|64]:n==8?t+=Tn[e&63|128]:t+=Tn[e],n&1&&n>1&&n<11&&(t+="-");return st++,t}Ca.v4=gp});var Ea=P(Rn=>{"use strict";Object.defineProperty(Rn,"__esModule",{value:!0});Rn.FakeEventTarget=void 0;var Bs=class{listeners={};addEventListener(e,t,r){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof r=="object"&&r.once===!0}))}removeEventListener(e,t,r){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(s=>s.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new Error("invalid event object");let t=this.listeners[e.type];if(!t)return!0;for(let r of[...t]){try{r.callback.call(this,e)}catch(s){setTimeout(()=>{throw s},0)}r.once&&this.removeEventListener(e.type,r.callback)}return!e.defaultPrevented}};Rn.FakeEventTarget=Bs});var Pa=P(Cn=>{"use strict";Object.defineProperty(Cn,"__esModule",{value:!0});Cn.FakeEvent=void 0;var zs=class{NONE=0;CAPTURING_PHASE=1;AT_TARGET=2;BUBBLING_PHASE=3;type;bubbles;cancelable;defaultPrevented=!1;composed=!1;currentTarget=null;eventPhase=this.NONE;isTrusted=!0;target=null;timeStamp=0;cancelBubble=!1;returnValue=!0;srcElement=null;constructor(e,t={}){this.type=e,this.bubbles=t.bubbles??!1,this.cancelable=t.cancelable??!1}preventDefault(){this.cancelable&&(this.defaultPrevented=!0)}stopPropagation(){}stopImmediatePropagation(){}composedPath(){return[]}initEvent(e,t,r){}};Cn.FakeEvent=zs});var xa=P(Hs=>{"use strict";Object.defineProperty(Hs,"__esModule",{value:!0});Hs.clone=_p;function _p(n){if(n!==void 0)return Number.isNaN(n)?NaN:typeof structuredClone=="function"?structuredClone(n):JSON.parse(JSON.stringify(n))}});var Da=P(En=>{"use strict";Object.defineProperty(En,"__esModule",{value:!0});En.FakeMediaStreamTrack=void 0;var Ia=ka(),vp=Ea(),jt=Pa(),kn=xa(),Vs=class n extends vp.FakeEventTarget{#m;#u;#p;#e;#r;#t;#n;#h;#s;#f;#i;#o=null;#a=null;#c=null;#d=null;#l=null;constructor({kind:e,id:t,label:r,contentHint:s,enabled:i,muted:o,readyState:a,capabilities:c,constraints:l,settings:d,data:u}){super(),this.#m=t??(0,Ia.v4)(),this.#u=e,this.#p=r??"",this.#n=s??"",this.#r=i??!0,this.#t=o??!1,this.#e=a??"live",this.#h=c??{},this.#s=l??{},this.#f=d??{},this.#i=u??{}}get id(){return this.#m}get kind(){return this.#u}get label(){return this.#p}get contentHint(){return this.#n}set contentHint(e){this.#n=e}get enabled(){return this.#r}set enabled(e){let t=this.#r!==e;this.#r=e,t&&this.dispatchEvent(new jt.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.#o}set onmute(e){this.#o&&this.removeEventListener("mute",this.#o),this.#o=e,e&&this.addEventListener("mute",e)}get onunmute(){return this.#a}set onunmute(e){this.#a&&this.removeEventListener("unmute",this.#a),this.#a=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.#l}set onstopped(e){this.#l&&this.removeEventListener("stopped",this.#l),this.#l=e,e&&this.addEventListener("stopped",e)}addEventListener(e,t,r){super.addEventListener(e,t,r)}removeEventListener(e,t,r){super.removeEventListener(e,t,r)}stop(){this.#e!=="ended"&&(this.#e="ended",this.dispatchEvent(new jt.FakeEvent("stopped")))}clone({id:e,data:t}={}){return new n({id:e??(0,Ia.v4)(),kind:this.#u,label:this.#p,contentHint:this.#n,enabled:this.#r,muted:this.#t,readyState:this.#e,capabilities:(0,kn.clone)(this.#h),constraints:(0,kn.clone)(this.#s),settings:(0,kn.clone)(this.#f),data:t??(0,kn.clone)(this.#i)})}getCapabilities(){return this.#h}getConstraints(){return this.#s}async applyConstraints(e={}){return this.#s=e,Promise.resolve()}getSettings(){return this.#f}remoteStop(){this.#e!=="ended"&&(this.#e="ended",this.dispatchEvent(new jt.FakeEvent("stopped")),this.dispatchEvent(new jt.FakeEvent("ended")))}remoteMute(){this.#t||(this.#t=!0,this.dispatchEvent(new jt.FakeEvent("mute")))}remoteUnmute(){this.#t&&(this.#t=!1,this.dispatchEvent(new jt.FakeEvent("unmute")))}};En.FakeMediaStreamTrack=Vs});var Ma=P(Pn=>{"use strict";Object.defineProperty(Pn,"__esModule",{value:!0});Pn.FakeEventTarget=void 0;var Gs=class{listeners={};addEventListener(e,t,r){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof r=="object"&&r.once===!0}))}removeEventListener(e,t,r){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(s=>s.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new Error("invalid event object");let t=this.listeners[e.type];if(!t)return!0;for(let r of[...t]){try{r.callback.call(this,e)}catch(s){setTimeout(()=>{throw s},0)}r.once&&this.removeEventListener(e.type,r.callback)}return!e.defaultPrevented}};Pn.FakeEventTarget=Gs});var Oa=P(In=>{"use strict";Object.defineProperty(In,"__esModule",{value:!0});In.FakeHandler=void 0;var wp=Da(),yp=se(),bp=X(),Ut=Xe(),Ks=be(),La=de(),Sp=Ma(),H=new bp.Logger("FakeHandler"),Aa="FakeHandler",Ys=class n extends yp.EnhancedEventEmitter{_closed=!1;_fakeParameters;_getSendExtendedRtpCapabilities;_cname=`CNAME-${Ut.generateRandomNumber()}`;_defaultSendStreamId=`${Ut.generateRandomNumber()}`;_transportReady=!1;_nextLocalId=1;_tracks=new Map;_nextSctpStreamId=0;static createFactory(e){return{name:Aa,factory:t=>new n(t,e),getNativeRtpCapabilities:async({direction:t})=>(H.debug("getNativeRtpCapabilities() [direction:%o]",t),n.getLocalRtpCapabilities(e)),getNativeSctpCapabilities:async()=>(H.debug("getNativeSctpCapabilities()"),e.generateNativeSctpCapabilities())}}static getLocalRtpCapabilities(e){let t=e.generateNativeRtpCapabilities();return Ks.validateAndNormalizeRtpCapabilities(t),t}constructor({getSendExtendedRtpCapabilities:e},t){super(),H.debug("constructor()"),this._getSendExtendedRtpCapabilities=e,this._fakeParameters=t}get name(){return Aa}close(){H.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(),H.debug("updateIceServers()")}async restartIce(e){this.assertNotClosed(),H.debug("restartIce()")}async getTransportStats(){return this.assertNotClosed(),new Map}async send({track:e,streamId:t,encodings:r,codecOptions:s,codec:i}){this.assertNotClosed(),H.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),this._transportReady||await this.setupTransport({localDtlsRole:"server"});let o=n.getLocalRtpCapabilities(this._fakeParameters),a=this._getSendExtendedRtpCapabilities(o),c=Ks.getSendingRtpParameters(e.kind,a);c.codecs=Ks.reduceCodecs(c.codecs,i);let l=c.codecs.some(u=>/.+\/rtx$/i.test(u.mimeType));c.mid=`mid-${Ut.generateRandomNumber()}`,c.msid=`${t??"-"} ${e.id}`,r||(r=[{}]);for(let u of r)u.ssrc=Ut.generateRandomNumber(),l&&(u.rtx={ssrc:Ut.generateRandomNumber()});c.encodings=r,c.rtcp={cname:this._cname,reducedSize:!0,mux:!0},c.msid=`${t??this._defaultSendStreamId} ${e.id}`;let d=this._nextLocalId++;return this._tracks.set(d,e),{localId:String(d),rtpParameters:c}}async stopSending(e){if(H.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?H.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):H.debug("replaceTrack() [localId:%s, no track]",e),this._tracks.delete(Number(e)),this._tracks.set(Number(e),t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),H.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),H.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"}),H.debug("sendDataChannel()");let t=new xn({id:this._nextSctpStreamId++,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:e.label,protocol:e.protocol}),r={streamId:this._nextSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits};return{dataChannel:t,sctpStreamParameters:r}}async receive(e){this.assertNotClosed();let t=[];for(let r of e){let{trackId:s,kind:i}=r;this._transportReady||await this.setupTransport({localDtlsRole:"client"}),H.debug("receive() [trackId:%s, kind:%s]",s,i);let o=this._nextLocalId++,a=new wp.FakeMediaStreamTrack({kind:i});this._tracks.set(o,a),t.push({localId:String(o),track:a})}return t}async stopReceiving(e){if(!this._closed)for(let t of e)H.debug("stopReceiving() [localId:%s]",t),this._tracks.delete(Number(t))}async pauseReceiving(e){this.assertNotClosed()}async resumeReceiving(e){this.assertNotClosed()}async getReceiverStats(e){return this.assertNotClosed(),new Map}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){return this.assertNotClosed(),this._transportReady||await this.setupTransport({localDtlsRole:"client"}),H.debug("receiveDataChannel()"),{dataChannel:new xn({id:e.streamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:t,protocol:r})}}getDataChannelMaxMessageSize(){return 5e5}async setupTransport({localDtlsRole:e,localSdpObject:t}){let r=Ut.clone(this._fakeParameters.generateLocalDtlsParameters());e&&(r.role=e),this.emit("@connectionstatechange","connecting"),await new Promise((s,i)=>this.emit("@connect",{dtlsParameters:r},s,i)),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new La.InvalidStateError("method called in a closed handler")}};In.FakeHandler=Ys;var xn=class extends Sp.FakeEventTarget{_id;_negotiated=!0;_ordered;_maxPacketLifeTime;_maxRetransmits;_label;_protocol;_readyState="connecting";_bufferedAmount=0;_bufferedAmountLowThreshold=0;_binaryType="arraybuffer";_onopen=null;_onclosing=null;_onclose=null;_onmessage=null;_onbufferedamountlow=null;_onerror=null;constructor({id:e,ordered:t=!0,maxPacketLifeTime:r=null,maxRetransmits:s=null,label:i="",protocol:o=""}){super(),H.debug(`constructor() [id:${e}, ordered:${t}, maxPacketLifeTime:${r}, maxRetransmits:${s}, label:${i}, protocol:${o}`),this._id=e,this._ordered=t,this._maxPacketLifeTime=r,this._maxRetransmits=s,this._label=i,this._protocol=o}get id(){return this._id}get negotiated(){return this._negotiated}get ordered(){return this._ordered}get maxPacketLifeTime(){return this._maxPacketLifeTime}get maxRetransmits(){return this._maxRetransmits}get label(){return this._label}get protocol(){return this._protocol}get readyState(){return this._readyState}get bufferedAmount(){return this._bufferedAmount}get bufferedAmountLowThreshold(){return this._bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._bufferedAmountLowThreshold=e}get binaryType(){return this._binaryType}set binaryType(e){this._binaryType=e}get onopen(){return this._onopen}set onopen(e){this._onopen&&this.removeEventListener("open",this._onopen),this._onopen=e,e&&this.addEventListener("open",e)}get onclosing(){return this._onclosing}set onclosing(e){this._onclosing&&this.removeEventListener("closing",this._onclosing),this._onclosing=e,e&&this.addEventListener("closing",e)}get onclose(){return this._onclose}set onclose(e){this._onclose&&this.removeEventListener("close",this._onclose),this._onclose=e,e&&this.addEventListener("close",e)}get onmessage(){return this._onmessage}set onmessage(e){this._onmessage&&this.removeEventListener("message",this._onmessage),this._onmessage=e,e&&this.addEventListener("message",e)}get onbufferedamountlow(){return this._onbufferedamountlow}set onbufferedamountlow(e){this._onbufferedamountlow&&this.removeEventListener("bufferedamountlow",this._onbufferedamountlow),this._onbufferedamountlow=e,e&&this.addEventListener("bufferedamountlow",e)}get onerror(){return this._onerror}set onerror(e){this._onerror&&this.removeEventListener("error",this._onerror),this._onerror=e,e&&this.addEventListener("error",e)}addEventListener(e,t,r){super.addEventListener(e,t,r)}removeEventListener(e,t,r){super.removeEventListener(e,t,r)}close(){["closing","closed"].includes(this._readyState)||(this._readyState="closed")}send(e){if(this._readyState!=="open")throw new La.InvalidStateError("not open")}}});var Na=P(_e=>{"use strict";Object.defineProperty(_e,"__esModule",{value:!0});_e.generateRouterRtpCapabilities=Tp;_e.generateNativeRtpCapabilities=Rp;_e.generateNativeSctpCapabilities=Cp;_e.generateLocalDtlsParameters=kp;_e.generateTransportRemoteParameters=Ep;_e.generateProducerRemoteParameters=Pp;_e.generateConsumerRemoteParameters=xp;_e.generateDataProducerRemoteParameters=Ip;_e.generateDataConsumerRemoteParameters=Dp;var ee=Xe();function oe(){return String(ee.generateRandomNumber())}function Tp(){return ee.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 Rp(){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 Cp(){return ee.deepFreeze({numStreams:{OS:2048,MIS:2048}})}function kp(){return ee.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 Ep(){return{id:oe(),iceParameters:ee.deepFreeze({iceLite:!0,password:"yku5ej8nvfaor28lvtrabcx0wkrpkztz",usernameFragment:"h3hk1iz6qqlnqlne"}),iceCandidates:ee.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:ee.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:ee.deepFreeze({port:5e3,OS:2048,MIS:2048,maxMessageSize:2e6})}}function Pp(){return ee.deepFreeze({id:oe()})}function xp({id:n,codecMimeType:e}={}){switch(e){case"audio/opus":return{id:n??oe(),producerId:oe(),kind:"audio",rtpParameters:ee.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:n??oe(),producerId:oe(),kind:"audio",rtpParameters:ee.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:n??oe(),producerId:oe(),kind:"video",rtpParameters:ee.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:n??oe(),producerId:oe(),kind:"video",rtpParameters:ee.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 Ip(){return ee.deepFreeze({id:oe()})}function Dp({id:n}={}){return{id:n??oe(),dataProducerId:oe(),sctpStreamParameters:ee.deepFreeze({streamId:666,maxPacketLifeTime:5e3,maxRetransmits:void 0})}}});var Is=P(F=>{"use strict";Object.defineProperty(F,"__esModule",{value:!0});F.debug=F.testFakeParameters=F.FakeHandler=F.enhancedEvents=F.ortc=F.parseScalabilityMode=F.detectDeviceAsync=F.detectDevice=F.Device=F.version=F.types=void 0;var Mp=cr();F.debug=Mp.default;F.types=oo();F.version="3.20.0";var Qs=Ra();Object.defineProperty(F,"Device",{enumerable:!0,get:function(){return Qs.Device}});Object.defineProperty(F,"detectDevice",{enumerable:!0,get:function(){return Qs.detectDevice}});Object.defineProperty(F,"detectDeviceAsync",{enumerable:!0,get:function(){return Qs.detectDeviceAsync}});var Ap=rt();Object.defineProperty(F,"parseScalabilityMode",{enumerable:!0,get:function(){return Ap.parse}});F.ortc=be();F.enhancedEvents=se();var Lp=Oa();Object.defineProperty(F,"FakeHandler",{enumerable:!0,get:function(){return Lp.FakeHandler}});F.testFakeParameters=Na()});var ja=P((Qf,Js)=>{"use strict";var Op=Object.prototype.hasOwnProperty,te="~";function Rr(){}Object.create&&(Rr.prototype=Object.create(null),new Rr().__proto__||(te=!1));function Np(n,e,t){this.fn=n,this.context=e,this.once=t||!1}function Fa(n,e,t,r,s){if(typeof t!="function")throw new TypeError("The listener must be a function");var i=new Np(t,r||n,s),o=te?te+e:e;return n._events[o]?n._events[o].fn?n._events[o]=[n._events[o],i]:n._events[o].push(i):(n._events[o]=i,n._eventsCount++),n}function Dn(n,e){--n._eventsCount===0?n._events=new Rr:delete n._events[e]}function G(){this._events=new Rr,this._eventsCount=0}G.prototype.eventNames=function(){var e=[],t,r;if(this._eventsCount===0)return e;for(r in t=this._events)Op.call(t,r)&&e.push(te?r.slice(1):r);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};G.prototype.listeners=function(e){var t=te?te+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var s=0,i=r.length,o=new Array(i);s<i;s++)o[s]=r[s].fn;return o};G.prototype.listenerCount=function(e){var t=te?te+e:e,r=this._events[t];return r?r.fn?1:r.length:0};G.prototype.emit=function(e,t,r,s,i,o){var a=te?te+e:e;if(!this._events[a])return!1;var c=this._events[a],l=arguments.length,d,u;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),l){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,r),!0;case 4:return c.fn.call(c.context,t,r,s),!0;case 5:return c.fn.call(c.context,t,r,s,i),!0;case 6:return c.fn.call(c.context,t,r,s,i,o),!0}for(u=1,d=new Array(l-1);u<l;u++)d[u-1]=arguments[u];c.fn.apply(c.context,d)}else{var p=c.length,m;for(u=0;u<p;u++)switch(c[u].once&&this.removeListener(e,c[u].fn,void 0,!0),l){case 1:c[u].fn.call(c[u].context);break;case 2:c[u].fn.call(c[u].context,t);break;case 3:c[u].fn.call(c[u].context,t,r);break;case 4:c[u].fn.call(c[u].context,t,r,s);break;default:if(!d)for(m=1,d=new Array(l-1);m<l;m++)d[m-1]=arguments[m];c[u].fn.apply(c[u].context,d)}}return!0};G.prototype.on=function(e,t,r){return Fa(this,e,t,r,!1)};G.prototype.once=function(e,t,r){return Fa(this,e,t,r,!0)};G.prototype.removeListener=function(e,t,r,s){var i=te?te+e:e;if(!this._events[i])return this;if(!t)return Dn(this,i),this;var o=this._events[i];if(o.fn)o.fn===t&&(!s||o.once)&&(!r||o.context===r)&&Dn(this,i);else{for(var a=0,c=[],l=o.length;a<l;a++)(o[a].fn!==t||s&&!o[a].once||r&&o[a].context!==r)&&c.push(o[a]);c.length?this._events[i]=c.length===1?c[0]:c:Dn(this,i)}return this};G.prototype.removeAllListeners=function(e){var t;return e?(t=te?te+e:e,this._events[t]&&Dn(this,t)):(this._events=new Rr,this._eventsCount=0),this};G.prototype.off=G.prototype.removeListener;G.prototype.addListener=G.prototype.on;G.prefixed=te;G.EventEmitter=G;typeof Js<"u"&&(Js.exports=G)});var $h={};Ci($h,{ACTIVATION_COLD_BOOT_AFTER_MS:()=>Di,ACTIVATION_DEGRADED_AFTER_MS:()=>Mi,ACTIVATION_HINT_PATH:()=>Nr,ACTIVATION_STILL_AFTER_MS:()=>Ii,ACTIVITY_DOM_EVENTS:()=>Nn,ACTIVITY_FIELD:()=>ai,ACTIVITY_STAMP_MIN_INTERVAL_MS:()=>mc,ActivationMonitor:()=>mt,App:()=>Pc,BACKOFF_BASE_MS:()=>Qn,BACKOFF_MAX_ATTEMPTS:()=>Ke,BACKOFF_MAX_MS:()=>Jn,CaptureController:()=>Dr,CaptureUnavailableError:()=>Ir,ClientTokenError:()=>He,DATA_CHANNEL_MESSAGE_CEILING:()=>Bc,DEFAULT_DOC_SYNC_TIMEOUT_MS:()=>gi,DEFAULT_GATEWAY_URL:()=>vi,DEFAULT_PRODUCE_ACK_TIMEOUT_MS:()=>ft,DEFAULT_REFERENCE_JPEG_QUALITY:()=>Wc,DEFAULT_REFERENCE_MAX_SIZE:()=>$c,DEFAULT_WHEN_LIVE_TIMEOUT_MS:()=>Kn,DERIVED_LEG_SEP:()=>kr,DGRAM_HEADER_BYTES:()=>Ht,FOREGROUND_COALESCE_MS:()=>gc,FrameReassembler:()=>Vt,INPUT_PRESENCE_DEFAULT_HZ:()=>Fc,INPUT_PRESENCE_FIELD:()=>bi,InvalidDurationError:()=>Ye,LEGACY_ACTIVATION_HINT_PATH:()=>Fr,PLATFORM_DOC_NAME:()=>Or,PermanentLockedError:()=>ar,PinRequiresActiveTempError:()=>or,ProduceAckTimeoutError:()=>pt,RecordingNotFoundError:()=>sr,RecordingsClient:()=>Qe,RecordingsError:()=>ae,RecordingsUnauthorizedError:()=>gt,RequestAbortError:()=>Ve,RequestCancelledError:()=>ht,RequestDocSyncError:()=>lt,RequestError:()=>he,RequestTimeoutError:()=>dt,RetainNotTempError:()=>ir,RuntimeArtifactNotFoundError:()=>rr,RuntimeArtifactsClient:()=>qe,RuntimeArtifactsError:()=>J,RuntimeArtifactsUnauthorizedError:()=>tr,Session:()=>Jt,SessionAllocationError:()=>Y,SessionEndError:()=>we,SessionEndUnavailableError:()=>Fe,SessionFailedError:()=>ye,StreamDirectionConflict:()=>ut,TransportNegotiator:()=>Kt,TransportSessionMismatchError:()=>Ge,TransportSessionSignaling:()=>Yt,VISIBILITY_FIELD:()=>ci,WIRE_MESSAGE_BUDGET:()=>zc,WT_CONTROL_FRAME_MAX:()=>li,WebRtcSession:()=>Qt,WebTransportSession:()=>Gt,WtControlDecoder:()=>zt,activationHintFrom:()=>Yn,cameraCaptureAvailable:()=>Kc,captureStillFromVideo:()=>Yc,computeBackoffDelay:()=>Zt,createActivityTracker:()=>Fn,createCameraWarp:()=>Qc,createClientToken:()=>xc,createInputPresencePublisher:()=>jc,createRecordingsClient:()=>Yi,createRuntimeArtifactsClient:()=>Gi,createStore:()=>Mc,derivedLegName:()=>ac,derivedLegRole:()=>ei,describeSessionFailure:()=>Gn,describeSessionPhase:()=>xi,encodeWtControlFrame:()=>Bn,fitWithin:()=>Vn,isDurationString:()=>Br,isPendingRecording:()=>Lc,isRetryableSessionError:()=>er,isWakingPhase:()=>Ar,mediaRecorderChunkSource:()=>$n,normalizeReferenceImage:()=>Vc,normalizeRetention:()=>Ki,observeLeaveConfirm:()=>qn,observePageLifecycle:()=>jn,observePageTeardown:()=>Un,parseDgramHeader:()=>zn,prewake:()=>Bi,referenceImageErrorMessage:()=>Gc,releaseSessionBeacon:()=>qr,sessionFailureFromMediaError:()=>Pi,sharedCaptureController:()=>Nc,videoStream:()=>Ac,whenLive:()=>Lr,writeDgramHeader:()=>wc});module.exports=Ei($h);var at=class{_handlers=new Map;_ws;_onMessage;_onOpen;_listeningForOpen=!1;_pendingSends=[];_disposed=!1;constructor(e){this._ws=e,this._onMessage=t=>{if(typeof t.data!="string")return;let r;try{r=JSON.parse(t.data)}catch{console.warn("[ChannelMultiplexer] Failed to parse WebSocket message as JSON");return}if(!r.channel)return;let s=this._handlers.get(r.channel);if(s)for(let i of s)i(r)},this._ws.addEventListener("message",this._onMessage),this._onOpen=()=>{this.flushPendingSends()}}on(e,t){let r=this._handlers.get(e);return r||(r=new Set,this._handlers.set(e,r)),r.add(t),()=>{r.delete(t),r.size===0&&this._handlers.delete(e)}}emit(e,t){if(this._disposed)return;let r=JSON.stringify({channel:e,...t});if(this._ws.readyState===WebSocket.OPEN){this._ws.send(r);return}this._ws.readyState===WebSocket.CONNECTING&&(this._pendingSends.push(r),this.listenForOpen())}dispose(){this._disposed=!0,this._pendingSends=[],this._handlers.clear(),this._ws.removeEventListener("message",this._onMessage),this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1}flushPendingSends(){if(this._disposed||this._ws.readyState!==WebSocket.OPEN)return;this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1;let e=this._pendingSends;this._pendingSends=[];for(let t of e)this._ws.send(t)}listenForOpen(){this._listeningForOpen||(this._listeningForOpen=!0,this._ws.addEventListener("open",this._onOpen))}},ct=class{_handlers=new Map;_pendingSends=[];_target=null;_targetUnsubscribes=[];_disposed=!1;setTarget(e){if(this._disposed)return;this.detachTarget(),this._target=e;for(let[r,s]of this._handlers)for(let i of s)this._targetUnsubscribes.push(e.on(r,i));let t=this._pendingSends;this._pendingSends=[];for(let r of t)e.emit(r.channel,r.data)}rewriteSessionChannels(e,t){if(e===t)return;let r=`session:${e}:`,s=`session:${t}:`,i=new Map;for(let[o,a]of this._handlers)i.set(o.startsWith(r)?s+o.slice(r.length):o,a);this._handlers=i,this._pendingSends=this._pendingSends.map(o=>({...o,channel:o.channel.startsWith(r)?s+o.channel.slice(r.length):o.channel}))}on(e,t){if(this._disposed)return()=>{};let r=this._handlers.get(e);r||(r=new Set,this._handlers.set(e,r)),r.add(t);let s=this._target?.on(e,t);return s&&this._targetUnsubscribes.push(s),()=>{r?.delete(t),r?.size===0&&this._handlers.delete(e),s?.(),s&&(this._targetUnsubscribes=this._targetUnsubscribes.filter(i=>i!==s))}}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 Fe=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)}},he=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)}},dt=class extends he{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)}},lt=class extends he{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)}},ut=class extends Error{stream;owner;attempted;constructor(e,t,r){super(`[urun] stream "${e}" is already produced by the ${t}; this (${r}) 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=r,Object.setPrototypeOf(this,new.target.prototype)}},ft=15e3,pt=class extends Error{kind;stream;timeoutMs;constructor(e,t){let r=t?.timeoutMs??ft,s=t?.stream??e,i=s!==e?` "${s}"`:"";super(`[urun] SFU did not ack producer ${e}${i} within ${Math.round(r/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=s,this.timeoutMs=r,Object.setPrototypeOf(this,new.target.prototype)}},Ve=class extends he{constructor(e){super("[urun] request aborted",{requestId:e}),this.name="RequestAbortError",Object.setPrototypeOf(this,new.target.prototype)}},ht=class extends he{constructor(e){super("[urun] request cancelled: session disconnected",{requestId:e}),this.name="RequestCancelledError",Object.setPrototypeOf(this,new.target.prototype)}};function Gn(n,e){let t=e.error?.reason,r=e.elapsedMs!==void 0?Math.round(e.elapsedMs/1e3):void 0;switch(n){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 s=r!==void 0?` after ${r}s`:"",i=` (last server status: ${e.lastServerStatus??"none"})`;return e.error?.code==="expired"?{message:`[urun] session${e.sessionId?` ${e.sessionId}`:""} expired before media connected${s} \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${s}${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${s} (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,r){let{message:s,hint:i}=Gn(e,t);super(s),this.name="SessionFailedError",this.kind=e,this.status=t,this.hint=i,r?.cause!==void 0&&(this.cause=r.cause),Object.setPrototypeOf(this,new.target.prototype)}};function Pi(n,e){if(n instanceof ye)return n;let t=n instanceof Error?n:new Error(String(n)),r={phase:e?.phase??"idle",transportState:e?.transportState??"disconnected",...e,error:{reason:t.message,code:t.name,kind:"media-permission"}};return new ye("media-permission",r,{cause:n})}var Ge=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)}},Y=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 Ar(n){if(!n)return!1;let e=typeof n=="string"?n:n.name;return e==="queued"||e==="unavailable"||e==="provisioning"}var Kn=45e3;function Lr(n,e={}){let{timeout:t=Kn,signal:r}=e;return new Promise((s,i)=>{if(r?.aborted){i(r.reason instanceof Error?r.reason:new Error("whenLive aborted"));return}if(n.phase?.name==="live"){s();return}let o=n.phase?.name;if(o==="error"||o==="ended"||o==="expired"){let h=n.phase,f=n.status??{phase:h.name,transportState:"disconnected",sessionId:h.sessionId,requestId:h.requestId,queue:h.queue,error:h.error};i(new ye(o==="ended"?"ended":o==="expired"?"expired":h.error?.kind??"transport-failed",f));return}let a,c,l=!1,d=h=>{l||(l=!0,c!==void 0&&clearTimeout(c),r?.removeEventListener("abort",u),a?.(),h?i(h):s())},u=()=>{d(r?.reason instanceof Error?r.reason:new Error("whenLive aborted"))};r?.addEventListener("abort",u,{once:!0});let p=()=>{let h=n.phase;return n.status??{phase:h?.name??"idle",transportState:"disconnected",sessionId:h?.sessionId,requestId:h?.requestId,queue:h?.queue,error:h?.error}},m=h=>d(new ye(h,p()));t>0&&(c=setTimeout(()=>{let h=p();h.elapsedMs===void 0&&(h.elapsedMs=t),d(new ye("never-live",h))},t)),a=n.onPhase(h=>{h?.name==="live"?d():h?.name==="error"?m(h.error?.kind??"transport-failed"):h?.name==="ended"?m("ended"):h?.name==="expired"&&m("expired")}),l&&a()})}function xi(n){switch(n.name){case"idle":return"Initializing\u2026";case"unavailable":return"Starting the app\u2026";case"queued":return n.queue?`Waiting in queue (position ${n.queue.position} of ${n.queue.depth})\u2026`:n.runtime?.state==="busy"?"All runtimes are busy \u2014 waiting for capacity\u2026":"Waiting for capacity\u2026";case"provisioning":return n.runtime?.state==="starting"?"Starting model\u2026":"Provisioning\u2026";case"connecting":return"Connecting\u2026";case"live":return"Live";case"error":return n.error?.reason?`Session failed \u2014 ${n.error.reason}`:"Session failed";case"ended":return"Session ended";case"expired":return"Session ended \u2014 reached its maximum length. Start a new session."}}var Ii=15e3,Di=45e3,Mi=12e4,Or="platform",Nr="activation",Fr="desired.activation";function Yn(n){if(typeof n=="string"&&n.length>0)return n;if(n&&typeof n=="object"){let e=n.note;if(typeof e=="string"&&e.length>0)return e}}var sd=[{state:"still-activating",afterMs:15e3},{state:"cold-boot",afterMs:45e3},{state:"degraded",afterMs:12e4}],mt=class{constructor(e){this._options=e;this._offPhase=e.onPhase(t=>{if(!this._stopped)if(t?.name==="live"){if(this._liveAt===null){this._liveAt=Date.now();for(let r of this._watches.values())this._arm(r)}}else(t?.name==="error"||t?.name==="ended"||t?.name==="expired")&&this.dispose()}),this._stopped&&(this._offPhase(),this._offPhase=null)}_options;_watches=new Map;_handlers=new Set;_liveAt=null;_stopped=!1;_offPhase=null;watch(e,t){if(this._stopped||this._watches.has(e))return;let r={name:e,stream:t,startedAt:null,done:!1,timers:[],cleanups:[],lastEvent:null};this._watches.set(e,r),this._hookFirstMediaSignals(r),!r.done&&this._liveAt!==null&&this._arm(r)}unwatch(e){let t=this._watches.get(e);!t||t.done||this._settle(t)}onActivation(e){for(let t of this._watches.values())!t.done&&t.lastEvent&&e(t.lastEvent);return this._handlers.add(e),()=>this._handlers.delete(e)}dispose(){if(!this._stopped){this._stopped=!0;for(let e of this._watches.values())e.done||this._settle(e);this._offPhase?.(),this._offPhase=null,this._handlers.clear()}}_hookFirstMediaSignals(e){let t=r=>{if(!(!r||e.done)){if(r.muted===!0&&typeof r.addEventListener=="function"){let s=()=>this._firstMedia(e);r.addEventListener("unmute",s,{once:!0}),e.cleanups.push(()=>r.removeEventListener?.("unmute",s));return}this._firstMedia(e)}};e.cleanups.push(e.stream.on("track",r=>t(r))),this._options.onData&&e.cleanups.push(this._options.onData(e.name,()=>this._firstMedia(e))),t(e.stream.track)}_arm(e){if(!(e.done||e.startedAt!==null||this._stopped)){e.startedAt=Date.now(),this._emit(e,"activating",0);for(let t of sd){let r=setTimeout(()=>{e.done||this._stopped||this._emit(e,t.state,Date.now()-e.startedAt)},t.afterMs);r.unref?.(),e.timers.push(r)}}}_firstMedia(e){if(e.done||this._stopped)return;let t=e.startedAt;this._settle(e),this._emit(e,"first-media",t===null?0:Date.now()-t)}_settle(e){e.done=!0;for(let t of e.timers)clearTimeout(t);e.timers=[];for(let t of e.cleanups.splice(0))t()}_emit(e,t,r){let s={state:t,elapsedMs:r,stream:e.name},i=Yn(this._options.hint());i!==void 0&&(s.hint=i),e.lastEvent=s;for(let o of Array.from(this._handlers))o(s)}};var Qn=500,Jn=15e3,Ke=6;function Zt(n,e=Math.random){if(!Number.isFinite(n)||n<0)throw new Error(`[urun] computeBackoffDelay: attempt must be a non-negative number, got ${n}`);let t=Math.min(Jn,Qn*2**n);return Math.round(e()*t)}function er(n){if(n instanceof Y){let e=n.httpStatus;return e===408||e===429||e!==void 0&&e>=500}return n instanceof Error?n.name==="TypeError"||n.name==="TimeoutError"||n.name==="AbortError":!1}var Ai=10,id=.5,jr=Ai;function Xn(){return jr<1?!1:(jr-=1,!0)}function Zn(){jr=Math.min(Ai,jr+id)}var od="session-api.prod.cloud.urun.sh",ad=["https://session-api.use2.prod.cloud.urun.sh","https://session-api.usw2.prod.cloud.urun.sh"];function Q(n){return n.trim().replace(/\/+$/,"")}function Ur(n,e){let t=[],r=s=>{if(!s)return;let i=Q(s);i&&!t.includes(i)&&t.push(i)};r(n);for(let s of e??[])r(s);for(let s of Rd(n))r(s);return t}function qr(n){try{if(typeof fetch!="function")return;let e=`${Q(n.baseUrl)}/api/session-requests/${encodeURIComponent(n.requestId)}/release`;fetch(e,{method:"POST",headers:je(n,n.jwt),keepalive:!0}).catch(()=>{})}catch{}}async function ji(n){try{let e=`${Q(n.baseUrl)}/api/session-requests/${encodeURIComponent(n.requestId)}/release`,t=await Ue(n);if(n.getAccessToken&&!t)throw new we("[urun] session release refused: getAccessToken resolved no token (an unauthenticated release is never sent)",{requestId:n.requestId,code:"no_access_token"});let r=await fetch(e,{method:"POST",headers:je(n,t)});if((r.status===401||r.status===403)&&n.getAccessToken){let a=await Ue(n,{forceRefresh:!0,reason:"unauthorized"});a&&a!==t&&(r=await fetch(e,{method:"POST",headers:je(n,a)}))}let s=await $r(r);if(!r.ok)throw new we(s.error_message||s.error_code||`[urun] session release failed: HTTP ${r.status}`,{requestId:n.requestId,code:s.error_code,httpStatus:r.status});let i=String(s.status??"");if(i!=="closed"&&i!=="cancelled"&&i!=="canceled")throw new we("[urun] session release returned an unrecognized terminal status",{requestId:n.requestId,code:"invalid_release_response",httpStatus:r.status});return{status:i==="closed"?"ended":"canceled",requestId:n.requestId}}catch(e){throw e instanceof we?e:new we("[urun] session release request failed",{requestId:n.requestId,cause:e})}}function Ui(n){if(typeof n!="string"||n.length===0)return null;let e=new Date(n);return Number.isFinite(e.getTime())?e:null}var cd=120,dd=1e3,ld=20,ud=5,pd=500,qi=1e4,hd=3,fd=50,Li=1e4;async function Oi(n,e){let t=Date.now()+Li;for(;;){await Wr(fd);let r=await Ue(n);if(r)return r;if(Date.now()>=t)throw new Y(`[urun] session allocation at ${e} never got an access token: the wired getAccessToken resolved nothing within ${Math.round(Li/1e3)}s (no unauthenticated request was sent)`)}}function md(n,e){if(!n)return null;try{let t=new URL(n),r=e?new URL(Q(e)):null,s=t.pathname==="/api/sessions/create"||t.pathname==="/api/sessions/create/";return t.protocol!=="https:"||!s||!gd(t,r)?null:Q(t.origin)}catch{return null}}function gd(n,e){return Ni(n.hostname)&&(!e||Ni(e.hostname))}function Ni(n){let e=n.toLowerCase();return e==="urun.sh"||e.endsWith(".urun.sh")}async function $i(n){let e=Ur(n.baseUrl,n.fallbackUrls),t=null,r=e.length>1;for(let s=0;s<Ke;s++){for(let i of e)try{let o=await _d(i,n,{pollAttempts:cd,retryAfterLimitMs:r?dd:void 0});return Zn(),o}catch(o){if(t=o instanceof Error?o:new Error(String(o)),t instanceof ke)throw t}if(!er(t))break;if(s+1<Ke){if(!Xn())break;await Wr(Zt(s))}}throw t??new Error("[urun] session allocation failed")}async function _d(n,e,t){let r,s,i,o=n,a=0,c=new Set,l=Date.now()+t.pollAttempts*qi;for(let d=0;d<t.pollAttempts;d++){s=i??await Ue(e),i=void 0,e.getAccessToken&&!s&&(s=await Oi(e,o));let u=Math.max(1,Math.min(ld,Math.floor((l-Date.now())/1e3))),p=!!r,m=Date.now(),h=r?await fetch(`${o}/api/session-requests/${encodeURIComponent(r)}?wait_s=${u}`,{headers:je(e,s),signal:bd((u+ud)*1e3)}):await fetch(`${o}/api/sessions/create`,{method:"POST",redirect:"manual",headers:{...je(e,s),"Content-Type":"application/json","Idempotency-Key":e.idempotencyKey},body:JSON.stringify(vd(e))});if(!r&&(h.status===307||h.status===308)){let w=md(h.headers.get("location"),o);if(w&&w!==o&&a<hd){a+=1,o=w;continue}throw new Y(`[urun] session create redirected from ${o} without a usable target`,{httpStatus:h.status})}let f=await $r(h);if(f.request_id)try{e.onRequest?.({requestId:f.request_id,baseUrl:o})}catch{}if(h.ok&&(f.status==="allocated"||!f.status&&!!f.session_id)&&!!f.session_id){let w=f.session_id,T=zi(f.ws_url,o,w,"gateway allocated session");return{baseUrl:o,sessionId:w,wsUrl:T,endsAt:Ui(f.ends_at),response:f}}if(h.status===202||f.status==="pending"||f.status==="queued"||f.queued){if(r=f.request_id||r,!r)throw new Error("[urun] gateway queued session without request_id");if(e.onAdmission)try{e.onAdmission(wd(f,r))}catch{}let w=Date.now()-m<pd;p&&w&&await Wr(yd(h,f,t.retryAfterLimitMs));continue}if((h.status===401||h.status===403)&&e.getAccessToken){let w=s??"";c.add(w);let T=await Ue(e,{forceRefresh:!0,reason:"unauthorized"});if(T&&!c.has(T)){i=T;continue}if(T===void 0){let R=await Oi(e,o);if(!c.has(R)){i=R;continue}}}let _=f.error_message||f.error_code||`HTTP ${h.status}`;throw new Y(`[urun] session allocation failed at ${o}: ${_}`,{httpStatus:h.status})}throw new Y(`[urun] timed out waiting for session allocation at ${o}`)}function je(n,e){let t={"X-Tenant-Id":n.orgId,"X-Auth-Provider":n.authProvider||"default","X-User-Id":"anonymous"};return e&&(t.Authorization=`Bearer ${e}`),t}async function Ue(n,e){return n.getAccessToken?await n.getAccessToken(e)??void 0:n.jwt}function vd(n){let e=n.priority==="preempt";return{app:n.app,function:n.functionName,gpus:1,idempotency_key:n.idempotencyKey,...n.sessionKey&&!e?{logical_id:n.sessionKey}:{},...e?{priority:"preempt"}:{}}}async function Wi(n){let e=Ur(n.baseUrl,n.fallbackUrls),t=null;for(let r=0;r<Ke;r++){for(let s of e)try{let i={baseUrl:s,app:"",functionName:"",orgId:n.orgId,jwt:n.jwt,getAccessToken:n.getAccessToken,authProvider:n.authProvider,idempotencyKey:""},o=`${Q(s)}/api/sessions/${encodeURIComponent(n.sessionId)}/viewer-connect`,a=await Ue(i);if(n.getAccessToken&&!a)throw new Y(`[urun] viewer-connect for ${n.sessionId} refused: getAccessToken resolved no token (an unauthenticated viewer-connect is never sent)`);let c=await fetch(o,{headers:je(i,a)});if((c.status===401||c.status===403)&&n.getAccessToken){let u=await Ue(i,{forceRefresh:!0,reason:"unauthorized"});u&&u!==a&&(c=await fetch(o,{headers:je(i,u)}))}if(!c.ok)throw new Y(`[urun] viewer-connect for ${n.sessionId} failed: HTTP ${c.status}`,{httpStatus:c.status});let l=await $r(c),d=zi(l.ws_url,s,n.sessionId,"viewer-connect");return Zn(),{baseUrl:Q(s),sessionId:n.sessionId,wsUrl:d,endsAt:Ui(l.ends_at),response:l}}catch(i){if(t=i instanceof Error?i:new Error(String(i)),t instanceof ke)throw t}if(!er(t))break;if(r+1<Ke){if(!Xn())break;await Wr(Zt(r))}}throw t??new Error("[urun] viewer-connect failed")}async function Bi(n){try{let e=Q(n.baseUrl),t=await Ue(n);if(n.getAccessToken&&!t)return{status:"unavailable"};let r=await fetch(`${e}/api/sessions/prewake`,{method:"POST",headers:{...je(n,t),"Content-Type":"application/json"},body:JSON.stringify({app:n.app,function:n.functionName})});if(r.status===404)return{status:"unknown-app"};if(!r.ok)return{status:"unavailable"};let s=await $r(r),i={status:s.status==="prebound"?"prebound":"warming"};return typeof s.expires_at=="string"&&(i.expiresAt=s.expires_at),typeof s.warm_capable=="boolean"&&(i.warmCapable=s.warm_capable),i}catch(e){return console.debug?.("[urun] prewake failed (advisory, ignored):",e),{status:"unavailable"}}}async function $r(n){try{let e=await n.json();return e&&typeof e=="object"?e:{}}catch{return{}}}function wd(n,e){let t={status:n.status==="queued"||n.queued?"queued":"pending",requestId:e};typeof n.queue_position=="number"&&typeof n.queue_depth=="number"&&(t.queue={position:n.queue_position,depth:n.queue_depth});let r=n.runtime_state;return(r==="unavailable"||r==="starting"||r==="busy")&&(t.runtime={state:r},typeof n.runtime_reason=="string"&&n.runtime_reason.length>0&&(t.runtime.reason=n.runtime_reason)),t}function yd(n,e,t){let r=Number(n.headers.get("Retry-After")||""),s=Number(e.retry_after_seconds??r),i=t??qi;return Number.isFinite(s)&&s>0?Math.min(s*1e3,i):1e3}function Wr(n){return new Promise(e=>setTimeout(e,n))}function bd(n){let e=typeof AbortSignal<"u"?AbortSignal:void 0;return typeof e?.timeout=="function"?e.timeout(n):void 0}var ke=class extends Error{};function zi(n,e,t,r){if(!n)throw new ke(`[urun] ${r} ${t} without ws_url`);let s,i;try{s=new URL(n)}catch{throw new ke(r==="viewer-connect"?`[urun] viewer-connect returned no usable ws_url for ${t}`:`[urun] ${r} ${t} with non-absolute ws_url`)}try{i=new URL(Q(e))}catch{throw new ke(`[urun] ${r} ${t} has invalid gateway base URL`)}let o=Sd(i.hostname)&&i.protocol==="http:";if(!(o&&s.protocol==="ws:"||s.protocol==="wss:"))throw new ke(`[urun] ${r} ${t} with insecure ws_url`);if(!Td(s,i,o))throw new ke(`[urun] ${r} ${t} with cross-origin ws_url`);return s.toString()}function Sd(n){return n==="localhost"||n==="127.0.0.1"||n==="::1"||n.endsWith(".localhost")}function Td(n,e,t){return!!(t||n.hostname===e.hostname&&n.port===e.port||Fi(n.hostname)&&Fi(e.hostname))}function Fi(n){return n==="urun.sh"||n.endsWith(".urun.sh")}function Rd(n){try{return new URL(n).hostname!==od?[]:ad}catch{return[]}}var J=class extends Error{status;code;constructor(e,t,r=t>0?`http_${t}`:"runtime_artifacts_error",s){super(e),this.name="RuntimeArtifactsError",this.status=t,this.code=r,s!==void 0&&(this.cause=s),Object.setPrototypeOf(this,new.target.prototype)}},tr=class extends J{constructor(e="[urun] runtime artifacts: unauthorized",t="unauthorized"){super(e,401,t),this.name="RuntimeArtifactsUnauthorizedError",Object.setPrototypeOf(this,new.target.prototype)}},rr=class extends J{constructor(e="[urun] runtime artifacts: not found",t="not_found"){super(e,404,t),this.name="RuntimeArtifactNotFoundError",Object.setPrototypeOf(this,new.target.prototype)}};function nr(n){return{baseUrl:n.baseUrl,fallbackUrls:n.fallbackUrls,orgId:n.orgId,jwt:n.jwt,getAccessToken:n.getAccessToken,authProvider:n.authProvider}}function Gi(n){return new qe(n)}var qe=class{_options;constructor(e){this._options=e}async list(e){let r=Vi(await this._request(e,"")).artifacts;if(!Array.isArray(r))throw new J("[urun] runtime artifacts: response missing `artifacts`",0,"bad_response");return r.map(Hi)}async getDownloadUrl(e,t){let r=Vi(await this._request(t,`/${encodeURIComponent(e)}/download`)),s=r.download_url;if(typeof s!="string"||!kd(s))throw new J("[urun] runtime artifacts: response missing HTTPS download_url",0,"bad_response");return{artifact:Hi(r.artifact),downloadUrl:s}}async _request(e,t){let r=Ur(this._options.baseUrl,this._options.fallbackUrls),s=null;for(let i of r)try{return await this._requestFromBase(i,e,t)}catch(o){if(s=o instanceof Error?o:new Error(String(o)),s instanceof J&&Ed(s.status))throw s}throw s??new J("[urun] runtime artifacts request failed",0)}async _requestFromBase(e,t,r){let s=`${Q(e)}/api/sessions/${encodeURIComponent(t)}/artifacts${r}`,i=await this._resolveToken(),o=await fetch(s,{method:"GET",headers:this._headers(i)});if(o.status===401&&this._options.getAccessToken){let a=await this._options.getAccessToken({forceRefresh:!0,reason:"unauthorized"});a&&a!==i&&(i=a,o=await fetch(s,{method:"GET",headers:this._headers(i)}))}if(!o.ok){let{code:a,message:c}=await this._readError(o,e);throw Pd(o.status,a,c)}try{return await o.json()}catch(a){throw new J(`[urun] runtime artifacts: invalid JSON response from ${Q(e)}`,0,"bad_response",a)}}async _resolveToken(){return this._options.getAccessToken?await this._options.getAccessToken()??void 0:this._options.jwt}_headers(e){let t={Accept:"application/json","X-Tenant-Id":this._options.orgId,"X-Auth-Provider":this._options.authProvider||"default"};return e&&(t.Authorization=`Bearer ${e}`),t}async _readError(e,t){let r=Q(t);try{let i=(await e.json()).error;if(i&&typeof i=="object"){let{code:o,message:a}=i;return{code:typeof o=="string"&&o.length>0?o:`http_${e.status}`,message:typeof a=="string"&&a.length>0?`[urun] runtime artifacts request failed at ${r}: ${a}`:`[urun] runtime artifacts request failed at ${r}: HTTP ${e.status}`}}}catch{}return{code:`http_${e.status}`,message:`[urun] runtime artifacts request failed at ${r}: HTTP ${e.status}`}}};function Hi(n){if(!n||typeof n!="object")throw new J("[urun] runtime artifacts: malformed artifact",0,"malformed_artifact");let e=n,t=Ee(e,"artifact_id")||Ee(e,"id"),r=Ee(e,"filename"),s=Ee(e,"kind"),i=Ee(e,"status")||"ready",o=Cd(e,"size_bytes"),a=Ee(e,"sha256");if(!t||!r||!s||o==null||!a)throw new J("[urun] runtime artifacts: malformed artifact metadata",0,"malformed_artifact");return{artifactId:t,kind:s,filename:r,contentType:Ee(e,"content_type")||"application/octet-stream",sizeBytes:o,sha256:a,status:i,createdAt:Ee(e,"created_at"),expiresAt:Ee(e,"expires_at")}}function Ee(n,e){let t=n[e];return typeof t=="string"&&t.length>0?t:void 0}function Cd(n,e){let t=n[e];return typeof t=="number"&&Number.isFinite(t)&&Number.isInteger(t)&&t>=0?t:void 0}function kd(n){try{return new URL(n).protocol==="https:"}catch{return!1}}function Ed(n){return n===401||n===403}function Pd(n,e,t){return n===401?new tr(t,e):n===404?new rr(t,e):new J(t,n,e)}function Vi(n){if(!n||typeof n!="object"||Array.isArray(n))throw new J("[urun] runtime artifacts: malformed response",0,"bad_response");return n}var ae=class extends Error{status;code;constructor(e,t){super(e),this.name="RecordingsError",this.status=t.status,this.code=t.code,t.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}},gt=class extends ae{constructor(e="[urun] recordings: unauthorized",t="unauthorized"){super(e,{status:401,code:t}),this.name="RecordingsUnauthorizedError",Object.setPrototypeOf(this,new.target.prototype)}},sr=class extends ae{constructor(e="[urun] recordings: not found",t="not_found"){super(e,{status:404,code:t}),this.name="RecordingNotFoundError",Object.setPrototypeOf(this,new.target.prototype)}},ir=class extends ae{constructor(e="[urun] recordings: retain requires a temp recording",t="retain_not_temp"){super(e,{status:409,code:t}),this.name="RetainNotTempError",Object.setPrototypeOf(this,new.target.prototype)}},or=class extends ae{constructor(e="[urun] recordings: pin requires an active temp recording",t="pin_requires_active_temp"){super(e,{status:409,code:t}),this.name="PinRequiresActiveTempError",Object.setPrototypeOf(this,new.target.prototype)}},ar=class extends ae{constructor(e="[urun] recordings: recording is permanent and locked",t="permanent_locked"){super(e,{status:409,code:t}),this.name="PermanentLockedError",Object.setPrototypeOf(this,new.target.prototype)}},Ye=class extends ae{constructor(e="[urun] recordings: invalid retention duration",t="bad_duration",r=400){super(e,{status:r,code:t}),this.name="InvalidDurationError",Object.setPrototypeOf(this,new.target.prototype)}};function Br(n){return/^(\d+[smhdw])+$/.test(n)}function Ki(n){if(n==="pin")return{action:"pin"};if(Br(n))return{action:"retain",duration:n};throw new Ye(`[urun] recordings: "${n}" is not a duration or "pin"`)}function xd(n,e,t){let r=t||e||`HTTP ${n}`;if(n===401)return new gt(r,e??"unauthorized");if(n===404)return new sr(r,e??"not_found");if(n===400)return new Ye(r,e??"bad_request",400);if(n===409)switch(e){case"retain_not_temp":return new ir(r,e);case"pin_requires_active_temp":return new or(r,e);case"permanent_locked":return new ar(r,e)}return new ae(r,{status:n,code:e??`http_${n}`})}var Qe=class{constructor(e){this._options=e;this._base=`${e.functionsUrl.replace(/\/+$/,"")}/recordings`}_options;_base;async list(e){let r=(await this._request("GET","",{params:e?{session_id:e}:void 0})).recordings;return Array.isArray(r)?r:[]}async get(e){return this._one(await this._request("GET",`/${encodeURIComponent(e)}`))}async retain(e,t){if(!Br(t))throw new Ye(`[urun] recordings: "${t}" is not a valid retention duration`);return this._one(await this._request("POST",`/${encodeURIComponent(e)}/retain`,{body:{duration:t}}))}async pin(e){return this._one(await this._request("POST",`/${encodeURIComponent(e)}/pin`))}async unpin(e){return this._one(await this._request("POST",`/${encodeURIComponent(e)}/unpin`))}async permanent(e){return this._one(await this._request("POST",`/${encodeURIComponent(e)}/permanent`))}async delete(e){return this._one(await this._request("POST",`/${encodeURIComponent(e)}/delete`))}_one(e){let t=e.recording;if(!t||typeof t!="object")throw new ae("[urun] recordings: response missing `recording`",{status:0,code:"bad_response"});return t}async _request(e,t,r={}){let s=this._buildUrl(t,r.params),i=await this._resolveToken(),o=await this._fetch(s,e,i,r.body);if(o.status===401&&this._options.getAccessToken){let a=await this._options.getAccessToken({forceRefresh:!0,reason:"unauthorized"});a&&a!==i&&(i=a,o=await this._fetch(s,e,i,r.body))}if(!o.ok){let{code:a,message:c}=await this._readError(o);throw xd(o.status,a,c)}return this._readJson(o)}_buildUrl(e,t){let r=`${this._base}${e}`,s=Object.entries(t??{}).filter(([,i])=>i!=null&&i!=="").map(([i,o])=>`${encodeURIComponent(i)}=${encodeURIComponent(o)}`).join("&");return s&&(r+=`?${s}`),r}_fetch(e,t,r,s){let i={Authorization:`Bearer ${r}`,apikey:r,Accept:"application/json","X-Tenant-Id":this._options.orgId};this._options.authProvider&&(i["X-Auth-Provider"]=this._options.authProvider);let o={method:t,headers:i};return s!==void 0&&(i["Content-Type"]="application/json",o.body=JSON.stringify(s)),fetch(e,o)}async _resolveToken(){if(this._options.getAccessToken){let t=await this._options.getAccessToken();if(t)return t}let e=this._options.jwt??this._options.apiKey;if(!e)throw new gt("[urun] recordings: no credential \u2014 provide one of apiKey, jwt, or getAccessToken");return e}async _readJson(e){try{return await e.json()}catch{return{}}}async _readError(e){try{let r=(await e.json()).error;if(r&&typeof r=="object"){let{code:s,message:i}=r;return{code:typeof s=="string"?s:void 0,message:typeof i=="string"?i:`HTTP ${e.status}`}}}catch{}return{message:`HTTP ${e.status}`}}};function Yi(n){return new Qe(n)}var oc=Ne(Is());var Xs=Ne(ja(),1);function ze(){return typeof window>"u"&&typeof process<"u"&&process.versions!=null&&process.versions.node!=null}function qa(){return ze()?"Chrome111":void 0}var Fp=["RTCSessionDescription","RTCIceCandidate","RTCRtpReceiver","RTCRtpSender","RTCRtpTransceiver","RTCDataChannel","MediaStream","MediaStreamTrack"],Mn=null;function qt(){return ze()?Mn||(Mn=jp(),Mn):Promise.resolve()}async function jp(){let n=globalThis;if(typeof n.WebSocket>"u")try{let e=await import("ws"),t=e.default??e;n.WebSocket=t}catch(e){Ua("WebSocket",e)}if(typeof n.RTCPeerConnection>"u")try{let e=await import("werift");Up(n,e)}catch(e){Ua("werift",e)}}function Up(n,e){let{RTCPeerConnection:t,useH264:r,useVP8:s,useOPUS:i,useSdesMid:o,useSdesRTPStreamId:a,useAbsSendTime:c,useTransportWideCC:l,useVideoOrientation:d}=e,u=()=>({video:[r(),s()],audio:[i()]}),p=()=>({video:[o(),a(),c(),l(),d()],audio:[o(),c(),l()]});class m extends t{constructor(f){super({...f,codecs:f?.codecs??u(),headerExtensions:f?.headerExtensions??p()})}}n.RTCPeerConnection=m;for(let h of Fp)e[h]!=null&&typeof n[h]>"u"&&(n[h]=e[h])}function Ua(n,e){let t=e instanceof Error?e.message:String(e);console.warn(`[urun-sh/core] Node WebRTC support: optional dependency "${n}" unavailable (${t}). Realtime media will not work in this Node process; install "${n}" to enable it. Doc/KV transport over WebSocket is unaffected.`)}var $a="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";function qp(n){let e=globalThis.crypto,t=new Uint8Array(n);if(e?.getRandomValues)return e.getRandomValues(t),t;for(let r=0;r<n;r++)t[r]=Math.floor(Math.random()*256);return t}function $t(n=16){let e=qp(n),t="";for(let r=0;r<n;r++)t+=$a[e[r]%$a.length];return t}function Wa(n){return`stream:${n}`}var Ba="urun-stream-v1";var Zs=1,Ae={BINARY:0,TEXT:1,JSON:2,END:3},za=Symbol("urun:stream:end");function Ha(n){if(n===za)return Uint8Array.from([Zs,Ae.END]);let e,t;n instanceof Uint8Array?(e=Ae.BINARY,t=n):n instanceof ArrayBuffer?(e=Ae.BINARY,t=new Uint8Array(n)):typeof n=="string"?(e=Ae.TEXT,t=new TextEncoder().encode(n)):(e=Ae.JSON,t=new TextEncoder().encode(JSON.stringify(n)));let r=new Uint8Array(2+t.length);return r[0]=Zs,r[1]=e,r.set(t,2),r}function Va(n){let e=n instanceof Uint8Array?n:new Uint8Array(n);if(e.length<2||e[0]!==Zs)throw new Error(`[urun] bad stream envelope (version=${e[0]}, len=${e.length})`);let t=e[1],r=e.subarray(2);switch(t){case Ae.BINARY:return r.slice();case Ae.TEXT:return new TextDecoder().decode(r);case Ae.JSON:return JSON.parse(new TextDecoder().decode(r));case Ae.END:return za;default:throw new Error(`[urun] unknown stream envelope KIND 0x${t.toString(16)}`)}}function Ga(n){return{get consumerId(){return n.consumerId},onData(e,t){return n.onStreamData(e,t)},sendData(e,t,r){return n.sendStreamData(e,t,r)}}}var Ka=[1e3,2e3,4e3,8e3,3e4],Ya=5,$p=15e3,Qa=15e3,Ja=15e3,Wp=2e3,Bp=6e3,zp=2,Hp=750,Vp=3,Xa=[1e3,2e3,4e3],Gp=15e3;var kr="--",Kp=["video","audio"];function ei(n){let e=n.lastIndexOf(kr);if(e<=0)return;let t=n.slice(e+kr.length);return Kp.includes(t)?t:void 0}function ac(n,e){return`${n}${kr}${e}`}var Yp={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 Wt(n){return n==="error"||n==="ended"||n==="expired"}var Za=3,ec=4e3,tc=[{urls:"stun:stun.l.google.com:19302"},{urls:"stun:stun1.l.google.com:19302"}];function rc(n){if(!n)return;let e=/\/(?:ws\/)?rtc\/([^/?#]+)/.exec(n);if(e)try{return decodeURIComponent(e[1])}catch{return e[1]}}var Bt=class{_state="disconnected";_sessionId=null;_tracks=new Map;_tracksByName=new Map;_options;_emitter=new Xs.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=Cr();_decodeWindowStartSample=Cr();_selectedCandidatePair=cc();_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=Qp()),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(ei(e)!==void 0)return;let t=this._tracksByName.get(e);if(t&&t.readyState!=="ended")return t;for(let r of this._tracks.values())if(!(r.kind!==e||r.readyState==="ended")&&this._streamNameOf(r)===void 0)return r;return t}_streamNameOf(e){for(let[t,r]of this._tracksByName)if(r===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=rc(e.url);if(e.sessionId!==void 0&&e.sessionId!==this._sessionId)throw new Ge(this._sessionId,e.sessionId);if(t!==void 0&&t!==this._sessionId)throw new Ge(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,r=th(t);if(r!==void 0&&this.setIncarnation(r),!t||typeof t!="object")return;let s=t,i=typeof s.status=="string"?s.status:void 0;if(i&&!Wt(this._phase.name)&&!this.isStaleClosedMarker(s))if(i==="error"){let o=s.error_reason??s.errorReason,a=typeof o=="string"&&o?o:"session failed";this._setPhase("error",{error:{reason:a,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,r=this._state==="connected";this._currentEpoch=e,t&&r&&!this._intentionalDisconnect&&this._renegotiate()}isStaleIncarnation(e){return Number.isFinite(e)?e<this._currentEpoch:!1}isStaleClosedMarker(e){if(!e)return!1;let t=typeof e.status=="string"?e.status:void 0;if(t!=="closed"&&t!=="ended"&&t!=="error")return!1;let r=e.status_epoch??e.statusEpoch,s=typeof r=="number"?r:Number(r);return Number.isFinite(s)?s<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,Wt(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,r=this._state==="reconnecting"||this._state==="renegotiating";r||this._setState("connecting");let s=null,i=()=>t!==this._generation||this._intentionalDisconnect,o=()=>{if(i())throw new Error("TransportSession: connect cancelled")},a=async()=>{for(let u of this._connectUrls()){o();try{return await this._connectOnce(u,t,e),!0}catch(p){s=p instanceof Error?p:new Error(String(p)),i()||this._cleanupSocket()}}return!1},c=this._forceResolveOnNextConnect&&this._resolveConnection!==null;this._forceResolveOnNextConnect=!1;let l=c?0:this._resolveConnection?zp:1;for(let u=0;u<l;u++)if(u>0&&(await nc(Hp),o()),await a())return;if(this._resolveConnection)for(let u=0;u<Vp;u++){this._setState("reconnecting"),await nc(Xa[Math.min(u,Xa.length-1)]),o();try{let p=await this._resolveConnection();o(),this.setAuth({jwt:p.jwt??this._options.jwt,authProvider:this._options.authProvider,orgId:this._options.orgId}),this.setConnection({url:p.url,sessionId:p.sessionId,iceServers:p.iceServers??this._options.iceServers}),p.endsAt!==void 0&&(this._endsAt=p.endsAt)}catch(p){if(i())throw new Error("TransportSession: connect cancelled");s=p instanceof Error?p:new Error(String(p));continue}if(await a())return}if(i())throw s??new Error("TransportSession: connect cancelled");this._setState("failed");let d=s??new Error("TransportSession: connect failed");throw r||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 r=this._streamDataHandlers.get(e);return r||(r=new Set,this._streamDataHandlers.set(e,r)),r.add(t),()=>{let s=this._streamDataHandlers.get(e);s?.delete(t),s&&s.size===0&&this._streamDataHandlers.delete(e)}}sendStreamData(e,t,r){return this._ensureDataProducer(e).then(s=>{s.send(Ha(t))})}_awaitSendTransport(){return this._sendTransport?Promise.resolve(this._sendTransport):new Promise((e,t)=>{let r={resolve:i=>{clearTimeout(s),e(i)},reject:i=>{clearTimeout(s),t(i)}},s=setTimeout(()=>{let i=this._sendTransportWaiters.indexOf(r);i>=0&&this._sendTransportWaiters.splice(i,1),t(new Error(`[urun] sendStreamData: no send transport after ${Qa}ms (the server never offered createSendTransport \u2014 data-up produce is impossible on this leg)`))},Qa);this._sendTransportWaiters.push(r)})}_settleSendTransportWaiters(e,t){let r=this._sendTransportWaiters;this._sendTransportWaiters=[];for(let s of r)e?s.resolve(e):s.reject(t??new Error("TransportSession: disconnected"))}_ensureDataProducer(e){let t=this._dataProducers.get(e);if(t&&!t.closed)return Promise.resolve(t);let r=this._dataProducerPromises.get(e);if(r)return r;let s=this._awaitSendTransport().then(i=>i.produceData({label:Wa(e),protocol:Ba,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,s),s}_awaitDataChannelOpen(e){if(e.closed)return Promise.reject(new Error("[urun] sendStreamData: DataProducer closed before its DataChannel opened"));let t=e.readyState;return t==="open"?Promise.resolve(e):t==="closing"||t==="closed"?Promise.reject(new Error(`[urun] sendStreamData: DataChannel is ${t} \u2014 cannot deliver data-up payloads`)):new Promise((r,s)=>{let i=()=>{l(),r(e)},o=u=>{d(new Error(`[urun] sendStreamData: DataChannel error before open: ${u.message}`))},a=()=>{l(),s(new Error("[urun] sendStreamData: DataProducer closed before its DataChannel opened"))},c=setTimeout(()=>{d(new Error(`[urun] sendStreamData: DataChannel not open after ${Ja}ms (the SCTP handshake never completed \u2014 data-up produce is impossible on this channel)`))},Ja),l=()=>{clearTimeout(c),e.off("open",i),e.off("error",o),e.observer.off("close",a)},d=u=>{l();try{e.close()}catch{}s(u)};e.on("open",i),e.on("error",o),e.observer.on("close",a)})}_dispatchStreamData(e,t){for(let r of this._streamDataHandlers.get(e)??[])r(t)}_streamNameFromLabel(e){if(e)return e.startsWith("stream:")?e.slice(7):void 0}async addTrack(e,t){await this._publishTrack(e,t)}async _publishTrack(e,t){let r=e.kind==="video",s=r?this._videoProducer:this._audioProducer;if(s&&!s.closed){if(s.track===e)return;await s.replaceTrack({track:e}),this._rememberPublishIntent(r,e,t);return}if(!this._sendTransport)throw new Error("TransportSession: send transport not ready");let i=await this._sendTransport.produce({track:e,...r?{}:{codecOptions:{opusStereo:!1,opusDtx:!1,opusFec:!1}},stopTracks:!1,...t?{appData:{name:t}}:{}});r?this._videoProducer=i:this._audioProducer=i,this._rememberPublishIntent(r,e,t)}_rememberPublishIntent(e,t,r){let s={track:t,...r!==void 0?{name:r}:{}};e?this._publishedVideo=s:this._publishedAudio=s}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,r=t?this._pendingDataProduce.get(t):void 0;r&&t&&(this._pendingDataProduce.delete(t),r.resolve(e.id));break}case"consumeData":await this._onConsumeData(e);break;case"started":this._emitter.emit("started");break;case"status":this._onStatus(e);break;case"stream.seeked":this._onStreamSeeked(e);break;case"error":this._onServerError(e);break;default:this._emitter.emit("signal",e);break}}_onServerError(e){let t=typeof e.message=="string"?e.message:"signaling error",r=typeof e.code=="string"?e.code:void 0;if(/connect\(\) already called/i.test(t)){if(this._resolveConnection){this._generation++;let s=this._ws;this._ws=null;try{s?.close()}catch{}this._cleanupMedia(),this._forceResolveOnNextConnect=!0,this._renegotiate();return}this._setPhase("error",{error:{reason:t,code:"transport-consumed",kind:"transport-failed"}}),this._emitter.emit("error",new Error(t));return}if(r==="TRANSPORT_BIND_FAILED"){this._emitError(new Error(t),r);return}console.warn("[urun] signaling error from server:",t)}_onStreamSeeked(e){let t=typeof e.stream=="string"?e.stream:void 0;if(!t)return;let r=e.target,s=r==="live"?"live":typeof r=="number"?r:Number(r);this._emitter.emit("seeked",t,s)}_onStatus(e){let t=e.request_id??e.requestId;t&&(this._requestId=t);let r=typeof e.status=="string"?e.status:void 0,s=(r?Yp[r]:void 0)??"provisioning",i=Wt(s);if(this._liveReached&&!i||Wt(this._phase.name))return;r!==void 0&&(this._lastServerStatus=r);let o=e.queue_position??e.queuePosition,a=e.queue_depth??e.queueDepth,c=typeof o=="number"&&typeof a=="number";if(s==="expired"){let l=typeof e.reason=="string"&&e.reason?e.reason:this._endsAt!==null?"session reached its maximum length":"session expired";this._setPhase("expired",{error:{reason:l,code:r,kind:"expired"}});return}if(s==="error"){let l=typeof e.reason=="string"&&e.reason?e.reason:r??"admission failed";this._setPhase("error",{error:{reason:l,code:r,kind:r==="error"?"runtime-failed":"create-failed"}});return}if(s==="ended"){this._pastDeadline()?this._setPhase("expired",{error:{reason:"session reached its maximum length",code:r,kind:"expired"}}):this._setPhase("ended");return}if(s==="queued"){this._setPhase("queued",c?{queue:{position:o,depth:a}}:void 0);return}if(s==="connecting"){this._setPhase("connecting");return}this._setPhase("provisioning")}async _onRouterCapabilities(e){ze()&&await qt();let t=qa(),r=new oc.Device(t?{handlerName:t}:void 0);await r.load({routerRtpCapabilities:e}),this._device=r,this._send({type:"rtpCapabilities",rtpCapabilities:r.rtpCapabilities})}async _onCreateRecvTransport(e){this._device&&this._buildRecvTransport(e)}_buildRecvTransport(e){if(!this._device)return;let t=e.iceCandidates,r=this._device.createRecvTransport({id:e.id,iceParameters:e.iceParameters,iceCandidates:t,dtlsParameters:e.dtlsParameters,...e.sctpParameters?{sctpParameters:e.sctpParameters}:{},iceServers:this._options.iceServers??tc});this._recvIceRestartAttempts=0,this._clearRecvIceRestart();let s=this._generation;r.on("connect",({dtlsParameters:i},o,a)=>{try{this._send({type:"connectTransport",transportId:r.id,dtlsParameters:i}),o()}catch(c){a(c)}}),r.on("connectionstatechange",i=>{if(s===this._generation){if(i==="connected"){this._clearRecvIceRestart(),this._recvIceRestartAttempts=0,this._reportSelectedCandidatePair(r);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=r}async _reportSelectedCandidatePair(e){let t=null;if(typeof e.getStats=="function")try{t=await e.getStats()}catch{}this._recvTransport===e&&(this._selectedCandidatePair=Zp(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>=Za?!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>=Za?!1:(this._sendIceRestartAttempts++,this._armSendIceRestartWatchdog(),this._requestIceRestart(e.id),!0)}_requestIceRestart(e){this._send({type:"restartIce",transportId:e})}_onIceRestarted(e){let t=e.transportId??e.id,r=e.iceParameters;if(!r)return;let s=!!this._recvTransport&&this._recvTransport.id===t,i=!s&&!!this._sendTransport&&this._sendTransport.id===t,o=s?this._recvTransport:i?this._sendTransport:null;o&&(Promise.resolve(o.restartIce({iceParameters:r})).catch(a=>{this._emitter.emit("error",a instanceof Error?a:new Error(String(a)))}),s&&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")},ec)}_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")},ec)}_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??tc});this._sendIceRestartAttempts=0,this._clearSendIceRestart();let r=this._generation;t.on("connect",({dtlsParameters:s},i,o)=>{try{this._send({type:"connectSendTransport",transportId:t.id,dtlsParameters:s}),i()}catch(a){o(a)}}),t.on("produce",({kind:s,rtpParameters:i,appData:o},a,c)=>{if(this._pendingProduce){c(new Error("produce already pending"));return}let l=o&&typeof o.name=="string"?o.name:void 0,d=setTimeout(()=>{let u=this._pendingProduce;if(!u||u.timeoutId!==d)return;this._pendingProduce=null;let p=new pt(s,{stream:l,timeoutMs:ft});this._setPhase("error",{error:{reason:p.message,code:"produce-ack-timeout",kind:"produce-timeout"}}),this._emitter.emit("error",p),u.reject(p)},ft);this._pendingProduce={timeoutId:d,resolve:u=>{a({id:u})},reject:c};try{this._send(l?{type:"produce",kind:s,name:l,rtpParameters:i}:{type:"produce",kind:s,rtpParameters:i})}catch(u){this._pendingProduce?.timeoutId===d&&(this._pendingProduce=null,clearTimeout(d)),c(u)}}),t.on("producedata",({sctpStreamParameters:s,label:i,protocol:o},a,c)=>{try{i&&this._pendingDataProduce.set(i,{resolve:l=>a({id:l}),reject:c}),this._send({type:"produceData",sctpStreamParameters:s,label:i,protocol:o})}catch(l){i&&this._pendingDataProduce.delete(i),c(l)}}),t.on("connectionstatechange",s=>{if(r===this._generation){if(s==="connected"){this._clearSendIceRestart(),this._sendIceRestartAttempts=0;return}this._intentionalDisconnect&&s==="closed"||(s==="failed"||s==="disconnected")&&this._trySendIceRestart()||(s==="failed"||s==="closed")&&this._emitError(new Error(`media send transport ${s}`),s)}}),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(r){console.warn("[urun] republish: mic re-produce after reconnect failed",r)}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(r){console.warn("[urun] republish: camera re-produce after reconnect failed",r)}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,r=this._streamNameFromLabel(t);if(!r)return;let s=await this._recvTransport.consumeData({id:e.id,dataProducerId:e.dataProducerId,sctpStreamParameters:e.sctpStreamParameters,label:t,protocol:e.protocol});this._dataConsumers.set(r,s),s.on("message",a=>{try{let c=typeof a=="string"?new TextEncoder().encode(a):new Uint8Array(a);this._dispatchStreamData(r,Va(c))}catch(c){this._emitter.emit("error",c instanceof Error?c:new Error(String(c)))}});let i=!1,o=()=>{i||s.closed||(i=!0,this._send({type:"dataConsumerReady",id:e.id}))};s.readyState==="open"?o():s.on("open",o)}async _onConsume(e){if(!this._recvTransport)return;let t=this._generation,r=await this._recvTransport.consume({id:e.id,producerId:e.producerId,kind:e.kind,rtpParameters:e.rtpParameters});this._consumers.set(r.id,r),this._tracks.set(r.track.id,r.track);let s=e.streamName??e.label;s&&this._tracksByName.set(s,r.track),r.track.addEventListener?.("unmute",()=>{t!==this._generation||this._intentionalDisconnect||this._isTerminalPhase()||this._liveReached||this._setPhase("live")},{once:!0}),this._emitter.emit("track",r.track);let i=r.id;r.track.addEventListener("ended",()=>{t!==this._generation||this._intentionalDisconnect||this._closeConsumer(i)},{once:!0}),this._send({type:"resumeConsumer",consumerId:r.id}),this._startMediaMonitor()}_closeConsumer(e){let t=this._consumers.get(e);if(!t)return;this._consumers.delete(e);let r=t.track;try{t.close()}catch{}if(r){this._tracks.delete(r.id);for(let[s,i]of this._tracksByName)i===r&&this._tracksByName.delete(s)}}_closeConsumersByProducer(e){for(let[t,r]of this._consumers)r.producerId===e&&this._closeConsumer(t)}_mediaPollMs(){let e=this._options.mediaLiveness?.pollMs;return e===void 0?Wp:e}_mediaStallTimeoutMs(){let e=this._options.mediaLiveness?.stallTimeoutMs;return e===void 0?Bp: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=Cr();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=Cr(),r=await Promise.all(Array.from(this._consumers.values(),d=>eh(d)));for(let d of r)Jp(t,d);if(e!==this._generation||this._intentionalDisconnect||this._isTerminalPhase())return;this._latestInboundSample=t;let s=Date.now(),{total:i,framesDecoded:o}=t;if(i>this._lastInboundTotal){this._lastInboundTotal=i,this._lastInboundAdvanceAt=s,i>0&&(this._mediaEverFlowed=!0,this._liveReached||this._setPhase("live")),this._checkDecodeLiveness(o,s);return}if(!this._mediaEverFlowed||this._mediaDeathHandled||s-this._lastInboundAdvanceAt<this._mediaStallTimeoutMs())return;let a=this._mediaStallTimeoutMs(),c={sessionId:this._options.sessionId,stallWindowMs:a,inboundTotal:i,...sc(this._latestInboundSample),...this._selectedCandidatePair};if(this._recvTransport?.connectionState==="connected"){this._emitDiagnostic({level:"info",kind:"media-idle",message:`no inbound media for ${a/1e3}s, but the ICE path is connected \u2014 the sender is idle, not dead; holding the transport`,detail:c}),this._lastInboundAdvanceAt=s,this._lastDecodeAdvanceAt=s;return}this._mediaDeathHandled=!0,this._emitDiagnostic({level:"warning",kind:"media-stall",message:`inbound media stopped advancing for ${a/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 r=this._mediaStallTimeoutMs(),s=Xp(this._decodeWindowStartSample,this._latestInboundSample),i=s.lossPct!==null&&s.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 ${r/1e3}s (framesDecoded stuck at ${e}) \u2014 decoder stalled${i}; reconnecting the stream`,detail:{sessionId:this._options.sessionId,stallWindowMs:r,inboundTotal:this._lastInboundTotal,framesDecoded:e,...sc(this._latestInboundSample),...s,likelyCause:s.lossPct!==null&&s.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>=Ya){this._setState("failed"),this._emitError(new Error(`Failed after ${Ya} attempts`));return}let r=t?0:Ka[Math.min(this._reconnectAttempts,Ka.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(s){if(s instanceof Error&&s.message==="TransportSession: connect cancelled")return;this._attemptReconnect(e)}},r)}_connectUrls(){let e=[],t=r=>{if(!r)return;let s=rc(r)!==void 0,i=this._sessionId&&!s?`${r}${r.includes("?")?"&":"?"}sessionId=${encodeURIComponent(this._sessionId)}`:r;e.includes(i)||e.push(i)};t(this._options.url);for(let r of this._options.fallbackUrls??[])t(r);return e}_connectOnce(e,t,r){return new Promise((s,i)=>{let o=!1,a=!1,c=null,l=new WebSocket(e);this._ws=l;let d=()=>this._ws!==l||t!==this._generation,u=m=>{a||(a=!0,c&&clearTimeout(c),this._cancelPendingDial===p&&(this._cancelPendingDial=null),i(m))},p=m=>{try{l.close()}catch{}u(m)};this._cancelPendingDial=p,c=setTimeout(()=>{try{l.close()}catch{}u(new Error("TransportSession: connect timed out"))},$p),l.onopen=()=>{if(!a){if(d()){try{l.close()}catch{}u(new Error("TransportSession: connect superseded during dial"));return}o=!0,c&&clearTimeout(c),this._connectedUrl=e,this._multiplexer=new at(l),l.send(JSON.stringify(this._startMessage(r))),this._scheduleReconnectBudgetReset(),this._setState("connected"),this._liveReached||this._setPhase("connecting"),this._emitter.emit("connected"),a=!0,this._cancelPendingDial===p&&(this._cancelPendingDial=null),s()}},l.onerror=()=>{o||u(new Error("WebSocket connection error"))},l.onclose=()=>{if(!o){u(new Error("WebSocket closed before connecting"));return}if(!d()&&(this._clearReconnectBudgetReset(),c&&clearTimeout(c),this._setState("disconnected"),!this._intentionalDisconnect)){if(this._pastDeadline()&&!Wt(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(r)}},l.onmessage=m=>{if(!(this._ws!==l||t!==this._generation)&&typeof m.data=="string")try{this._handleMessage(JSON.parse(m.data))}catch(h){this._emitter.emit("error",h instanceof Error?h:new Error(String(h)))}}})}_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},Gp))}_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 r={name:e};t?.queue&&(r.queue=t.queue),t?.runtime&&(r.runtime=t.runtime),Ar(e)?(this._wakingSince??=Date.now(),r.wakingSince=this._wakingSince):this._wakingSince=void 0,this._requestId&&(r.requestId=this._requestId),this._sessionId&&(r.sessionId=this._sessionId),this._endsAt!==null&&(r.endsAt=this._endsAt),t?.error&&(r.error=t.error),this._phase=r,this._isTerminalPhase()&&(this._stopMediaMonitor(),this._clearRecvIceRestart(),this._clearSendIceRestart(),this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null)),this._emitter.emit("phase",r)}reportAdmission(e){if(e.requestId&&(this._requestId=e.requestId),this._lastServerStatus=e.status,this._liveReached||Wt(this._phase.name))return;let{runtime:t,queue:r}=e;if(t?.state==="unavailable"){this._setPhase("unavailable",{runtime:t});return}if(t?.state==="starting"){this._setPhase("provisioning",{runtime:t});return}if(t?.state==="busy"||e.status==="queued"){this._setPhase("queued",{queue:r,runtime:t});return}this._setPhase("provisioning")}_emitError(e,t){this._setPhase("error",{error:{reason:e.message,code:t,kind:"transport-failed"}}),this._emitter.emit("error",e)}reportAllocationFailure(e,t){this._setPhase("error",{error:{reason:e.message,code:"allocation-failed",kind:"create-failed",httpStatus:t}}),this._emitter.emit("error",e)}};function nc(n){return new Promise(e=>setTimeout(e,n))}function Qp(){return $t()}var ti=["packetsReceived","packetsLost","nackCount","pliCount","firCount","keyFramesDecoded","framesReceived","framesDropped","retransmittedPacketsReceived","retransmittedBytesReceived","jitterBufferDelay","jitterBufferEmittedCount"];function Cr(){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 Jp(n,e){n.total+=e.total,e.framesDecoded!==null&&(n.framesDecoded=(n.framesDecoded??0)+e.framesDecoded),e.jitter!==null&&(n.jitter=n.jitter===null?e.jitter:Math.max(n.jitter,e.jitter));for(let t of ti)e[t]!==null&&(n[t]=(n[t]??0)+e[t])}function sc(n){return Object.fromEntries(ti.map(e=>[e,n[e]]))}function ic(n,e){return n===null||e===null||e<n?null:e-n}function Xp(n,e){let t=n.packetsLost!==null&&e.packetsLost!==null?e.packetsLost-n.packetsLost:null,r=ic(n.packetsReceived,e.packetsReceived),s=ic(n.nackCount,e.nackCount),i=t===null?null:Math.max(0,t),o=i!==null&&r!==null?i+r:0;return{packetsLostWindow:t,packetsReceivedWindow:r,nackCountWindow:s,jitterSec:e.jitter,lossPct:o>0&&i!==null?i/o*100:null}}function cc(){return{localType:null,remoteType:null,protocol:null,remoteAddress:null,remotePort:null}}function Zp(n){let e=new Map;dc(n,a=>{let c=typeof a.id=="string"?a.id:null;c&&e.set(c,a)});let t=Array.from(e.values()).find(a=>a.type==="transport"),r=typeof t?.selectedCandidatePairId=="string"?t.selectedCandidatePairId:null,s=(r?e.get(r):void 0)??Array.from(e.values()).find(a=>a.type==="candidate-pair"&&a.selected===!0);if(!s)return cc();let i=typeof s.localCandidateId=="string"?e.get(s.localCandidateId):void 0,o=typeof s.remoteCandidateId=="string"?e.get(s.remoteCandidateId):void 0;return{localType:typeof i?.candidateType=="string"?i.candidateType:null,remoteType:typeof o?.candidateType=="string"?o.candidateType:null,protocol:typeof i?.protocol=="string"?i.protocol:typeof o?.protocol=="string"?o.protocol:null,remoteAddress:typeof o?.address=="string"?o.address:typeof o?.ip=="string"?o.ip:null,remotePort:typeof o?.port=="number"?o.port:null}}function dc(n,e){let t=r=>{r&&typeof r=="object"&&e(r)};if(n instanceof Map)for(let[r,s]of n.entries()){if(!s||typeof s!="object")continue;let i=s;e(typeof i.id=="string"?i:{...i,id:r})}else(Array.isArray(n)||n&&typeof n.forEach=="function")&&n.forEach(t)}async function eh(n){let e=Cr();if(typeof n.getStats!="function")return e;let t;try{t=await n.getStats()}catch{return e}return dc(t,s=>{if(s.type==="inbound-rtp"){let i=typeof s.bytesReceived=="number"?s.bytesReceived:0,o=typeof s.packetsReceived=="number"?s.packetsReceived:0;if(e.total+=i+o,typeof s.framesDecoded=="number"&&(e.framesDecoded=(e.framesDecoded??0)+s.framesDecoded),s.kind==="video"||s.mediaType==="video"){typeof s.jitter=="number"&&(e.jitter=e.jitter===null?s.jitter:Math.max(e.jitter,s.jitter));for(let a of ti)typeof s[a]=="number"&&(e[a]=(e[a]??0)+s[a])}}}),e}function th(n){if(!n||typeof n!="object")return;let e=n.epoch,t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:void 0}var Pr=Ne(require("yjs"));var lc=require("y-websocket"),ni=require("y-protocols/awareness"),rh=1;function uc(n){let e=new URL(n);return`${e.protocol}//${e.host}/doc`}var nh=2500,sh=3e4,ih=1e4,oh=3;function pc(n){let e=n.WebSocketPolyfill??globalThis.WebSocket;if(!e)throw new Error("[urun] no WebSocket implementation available for the yjs doc provider (browser global missing and no WebSocketPolyfill passed)");return(t,r,s)=>{let i=`${n.sessionId}/${t}`,o=typeof n.token=="function"?n.token:null,a=typeof n.token=="string"?n.token:void 0,c=n.maxBackoffTimeMs??nh,l=n.dialTimeoutMs??sh,d=new lc.WebsocketProvider(n.serverUrl,i,r,{awareness:s,params:{dsv:String(rh),...a?{token:a}:{}},WebSocketPolyfill:e,disableBc:!0,maxBackoffTime:c,resyncInterval:ih,connect:o===null}),u=!1,p=0,m=!1,h=A=>{m||(m=!0,console.error(`[urun] doc token refresh failed for room ${i} (redialing with previous token):`,A))},f=()=>{if(!o)return;let A=++p;try{let W=o();if(typeof W=="string"){d.params.token=W,m=!1;return}if(W&&typeof W.then=="function")return W.then(Le=>{A===p&&typeof Le=="string"&&(d.params.token=Le,m=!1)},Le=>{h(Le)})}catch(W){h(W)}},g={connected:!1,consecutiveFailures:0,lastCloseCode:null,lastCloseReason:null},_=new Set,w=!1,T=()=>{let A={...g};for(let W of[..._])W(A)},R=null,y=()=>{R!==null&&(clearTimeout(R),R=null)},v=()=>{y(),R=setTimeout(()=>{if(R=null,!u&&d.wsconnecting&&d.ws)try{d.ws.close()}catch{}},l)},D=null,U=()=>{D!==null&&(clearTimeout(D),D=null)},j=()=>{U(),D=setTimeout(()=>{if(D=null,!u&&d.shouldConnect&&!d.wsconnected&&!d.wsconnecting&&d.ws===null)try{d.connect()}catch(A){w||(w=!0,console.error(`[urun] doc connection redial threw for room ${i} (still retrying):`,A)),j()}},c+500)},V=({status:A})=>{if(A==="connecting"){U(),v();return}if(A==="connected"){y(),U(),g={...g,connected:!0},T();return}g.connected&&(g={...g,connected:!1},T())},K=A=>{A&&(w&&(console.info(`[urun] doc connection recovered for room ${i}`),w=!1),g.consecutiveFailures!==0&&(g={...g,consecutiveFailures:0},T()))},ve=A=>{y(),g={connected:!1,consecutiveFailures:g.consecutiveFailures+1,lastCloseCode:A?A.code:null,lastCloseReason:A&&A.reason?A.reason:null},!w&&g.consecutiveFailures>=oh&&(w=!0,console.error(`[urun] doc connection failing for room ${i}: ${g.consecutiveFailures} consecutive failures (last close ${g.lastCloseCode===null?"by provider liveness reap":`code ${g.lastCloseCode}`}${g.lastCloseReason?`, reason "${g.lastCloseReason}"`:""}). Still retrying \u2014 the doc provider never gives up.`)),T(),f(),j()};d.on("status",V),d.on("sync",K),d.on("connection-close",ve),d.wsconnecting?v():d.wsconnected&&(g={...g,connected:!0});let it=!1,re=null;if(o!==null){let A=f();if(A){it=!0;let W=()=>{it&&(it=!1,re!==null&&(clearTimeout(re),re=null),u||d.connect())};re=setTimeout(W,l),A.then(W)}else d.connect()}return{get awareness(){return d.awareness},get synced(){return d.synced},onSync(A){let W=Le=>A(Le);return d.on("sync",W),()=>d.off("sync",W)},onConnectionState(A){return _.add(A),A({...g}),()=>_.delete(A)},ensureConnected(){!d.wsconnected&&!it&&d.connect()},destroy(){u=!0,re!==null&&(clearTimeout(re),re=null),y(),U(),d.off("status",V),d.off("sync",K),d.off("connection-close",ve),_.clear(),d.destroy()}}}}var ri=class{constructor(e,t,r){this._name=e;this._doc=t;this.awareness=r}_name;_doc;awareness;_inner=null;_innerUnsub=null;_innerStateUnsub=null;_syncHandlers=new Set;_stateHandlers=new Set;_lastState={connected:!1,consecutiveFailures:0,lastCloseCode:null,lastCloseReason:null};_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)}onConnectionState(e){return this._stateHandlers.add(e),e({...this._lastState}),()=>this._stateHandlers.delete(e)}attach(e){if(!this._destroyed){if(this._inner&&(this._innerUnsub?.(),this._innerUnsub=null,this._innerStateUnsub?.(),this._innerStateUnsub=null,this._inner.destroy(),this._inner=null),this._inner=e(this._name,this._doc,this.awareness),this._innerUnsub=this._inner.onSync(t=>{for(let r of[...this._syncHandlers])r(t)}),this._inner.onConnectionState)this._innerStateUnsub=this._inner.onConnectionState(t=>{this._lastState=t;for(let r of[...this._stateHandlers])r(t)});else{this._innerStateUnsub=null,this._lastState={connected:!0,consecutiveFailures:0,lastCloseCode:null,lastCloseReason:null};for(let t of[...this._stateHandlers])t({...this._lastState})}if(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._innerStateUnsub?.(),this._innerStateUnsub=null,this._inner?.destroy(),this._inner=null,this._syncHandlers.clear(),this._stateHandlers.clear()}},An=class{_target=null;_bridges=[];connect=(e,t,r)=>{let s=new ri(e,t,r);return this._bridges.push(s),this._target&&s.attach(this._target),s};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)}}};function xr(n){if(n===null||typeof n!="object"||Array.isArray(n))return!1;let e=Object.getPrototypeOf(n);return e===Object.prototype||e===null}var Ln="$bytes";function ah(n){return n instanceof Uint8Array||n instanceof ArrayBuffer}function ch(n){if(!xr(n))return!1;let e=Object.keys(n);return e.length===1&&e[0]===Ln&&typeof n[Ln]=="string"}function dh(n){return n instanceof ArrayBuffer?new Uint8Array(n):n}function lh(n){if(typeof Buffer<"u")return Buffer.from(n).toString("base64");let e="";for(let t=0;t<n.length;t++)e+=String.fromCharCode(n[t]);return btoa(e)}function uh(n){if(typeof Buffer<"u")return new Uint8Array(Buffer.from(n,"base64"));let e=atob(n),t=new Uint8Array(e.length);for(let r=0;r<e.length;r++)t[r]=e.charCodeAt(r);return t}function si(n){if(ah(n))return{[Ln]:lh(dh(n))};if(Array.isArray(n))return n.map(si);if(xr(n)){let e={};for(let[t,r]of Object.entries(n))e[t]=si(r);return e}return n}function Er(n){if(ch(n))return uh(n[Ln]);if(Array.isArray(n))return n.map(Er);if(xr(n)){let e={};for(let[t,r]of Object.entries(n))e[t]=Er(r);return e}return n}var hc=Symbol("urun:doc:path-absent");function ph(n,e){let t=e.split("."),r=n;for(let s of t){if(r===null||typeof r!="object"||!(s in r))return hc;r=r[s]}return r}function hh(n,e){return n===e?!0:JSON.stringify(n)===JSON.stringify(e)}function ii(n,e){for(let[t,r]of Object.entries(e))if(xr(r)){let s=n.get(t);if(!(s instanceof Pr.Map)){let i=s;s=new Pr.Map,n.set(t,s),xr(i)&&ii(s,i)}ii(s,r)}else{if(hh(n.get(t),r))continue;n.set(t,r)}}var fh=Symbol("urun:doc:local"),On=class{_doc=new Pr.Doc;_root=this._doc.getMap("session");_awareness=new ni.Awareness(this._doc);_listeners=new Set;_key;_sessionId;_connection=null;_connUnsub=null;_synced;_syncWaiters=new Set;_texts=new Map;_observer=()=>this.notify();constructor(e,t,r){this._key=e,this._sessionId=t,this._root.observeDeep(this._observer),r?(this._connection=r(e,this._doc,this._awareness),this._synced=this._connection.synced,this._connUnsub=this._connection.onSync(s=>{s&&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?.()}onConnectionState(e){return this._connection?.onConnectionState?this._connection.onConnectionState(e):(e({connected:!0,consecutiveFailures:0,lastCloseCode:null,lastCloseReason:null}),()=>{})}onSynced(e){return this._synced?(e(),()=>{}):(this._syncWaiters.add(e),()=>this._syncWaiters.delete(e))}set(e){e=si(e),this.applyPatch(e)}get(e,t){let r=this.snapshot();if(!e)return Er(r);let s=ph(r,e);return s===hc?t:Er(s)}on(e,t){return this._listeners.add(t),()=>this._listeners.delete(t)}text(e){let t=this._texts.get(e);return t||(t=new oi(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(()=>{ii(this._root,e)},fh)}snapshot(){return this._root.toJSON()}notify(){let e=Er(this.snapshot());for(let t of this._listeners)t(e)}},oi=class{constructor(e){this._ytext=e;this._observer=t=>{for(let r of t.delta)if(typeof r.insert=="string"&&r.insert.length>0){let s=r.insert;for(let i of this._delta)i(s)}},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 fc(n){return{get clientId(){return n.clientID},set(e){n.setLocalState(e)},setField(e,t){n.setLocalStateField(e,t)},getLocal(){return n.getLocalState()??null},getStates(){return n.getStates()},on(e,t){let r=()=>t(n.getStates());return n.on("change",r),r(),()=>n.off("change",r)}}}var ai="activity",ci="visibility",mc=15e3,Nn=["pointerdown","pointermove","keydown","wheel","touchstart"];function Fn(n){let e=n.now??Date.now,t=n.windowTarget!==void 0?n.windowTarget:typeof window<"u"?window:null,r=n.documentTarget!==void 0?n.documentTarget:typeof document<"u"?document:null,s=!1,i,o=()=>{if(s)return;let u=e();if(!(i!==void 0&&u-i<15e3)){i=u;try{n.awareness.setLocalStateField(ai,{at:u})}catch{}}},a=()=>{if(!(s||!r||r.visibilityState===void 0))try{n.awareness.setLocalStateField(ci,r.visibilityState)}catch{}},c=()=>o(),l=()=>{a(),(!r||r.visibilityState===void 0||r.visibilityState==="visible")&&o()};if(t)for(let u of Nn)t.addEventListener(u,c,{passive:!0,capture:!0});r&&r.addEventListener("visibilitychange",l);let d=null;return n.isProducing&&(d=setInterval(()=>{if(!s)try{n.isProducing?.()&&o()}catch{}},15e3),d.unref?.()),o(),a(),{touch:o,dispose(){if(!s){if(s=!0,t)for(let u of Nn)t.removeEventListener(u,c,{capture:!0});r&&r.removeEventListener("visibilitychange",l),d&&(clearInterval(d),d=null)}}}}var gc=250;function jn(n){if(typeof document>"u"||typeof window>"u"||typeof document.addEventListener!="function"||typeof window.addEventListener!="function")return()=>{};let e=0,t=()=>{if(document.visibilityState==="hidden")return;let r=Date.now();r-e<250||(e=r,n())};return document.addEventListener("visibilitychange",t),window.addEventListener("pageshow",t),window.addEventListener("focus",t),()=>{document.removeEventListener("visibilitychange",t),window.removeEventListener("pageshow",t),window.removeEventListener("focus",t)}}function Un(n){if(typeof window>"u"||typeof window.addEventListener!="function")return()=>{};let e=!1,t=r=>{r.persisted||e||(e=!0,n())};return window.addEventListener("pagehide",t),()=>{window.removeEventListener("pagehide",t)}}function qn(n){if(typeof window>"u"||typeof window.addEventListener!="function")return()=>{};let e=t=>{n()&&(t.preventDefault(),t.returnValue="")};return window.addEventListener("beforeunload",e),()=>{window.removeEventListener("beforeunload",e)}}var _c="video/mp4";function $n(n,e={}){let t=e.timesliceMs??1e3,r=null,s=null,i=!1,o=(a,c,l)=>{let d=typeof MediaRecorder>"u"?void 0:MediaRecorder;if(!d)throw new Error("[urun] stream.chunks(): MediaRecorder is unavailable in this runtime. Pass { source } to chunks() to inject a byte-tap (e.g. a Node/werift consumer).");let u=e.mimeType??(typeof d.isTypeSupported=="function"&&d.isTypeSupported(_c)?_c:void 0),p=new MediaStream([a]),m=new d(p,u?{mimeType:u}:void 0);r=m;let h=Promise.resolve();m.ondataavailable=f=>{let g=f.data;i||!g||g.size===0||(h=h.then(async()=>{let _=new Uint8Array(await g.arrayBuffer());i||c(_)}))},m.onstop=()=>{h.then(()=>{i||l()})},m.onerror=()=>{h.then(()=>{i||l()})},m.start(t)};return{start(a,c){if(r||i)return;let l=n.track();if(l){o(l,a,c);return}s=n.onTrack(d=>{!d||r||i||(s?.(),s=null,o(d,a,c))})},stop(){if(i)return;i=!0,s?.(),s=null;let a=r;if(r=null,a&&a.state!=="inactive")try{a.stop()}catch{}}}}function mh(n){let e=n;return typeof e[Symbol.asyncIterator]=="function"||(e[Symbol.asyncIterator]=function(){let t=n.getReader();return{next(){return t.read()},async return(){try{await t.cancel()}catch{}try{t.releaseLock()}catch{}return{value:void 0,done:!0}},[Symbol.asyncIterator](){return this}}}),e}function vc(n,e){let t=null,r=!1,s=!1,i=new ReadableStream({pull(o){r||(r=!0,t=n(e),t.start(a=>{if(!s)try{o.enqueue(a)}catch{}},()=>{if(!s){s=!0;try{o.close()}catch{}}}))},cancel(){s=!0,t?.stop(),t=null}},new CountQueuingStrategy({highWaterMark:0}));return mh(i)}var Wn=require("@msgpack/msgpack"),li=65536;function Bn(n){let e=(0,Wn.encode)(n),t=new Uint8Array(4+e.byteLength);return new DataView(t.buffer).setUint32(0,e.byteLength,!0),t.set(e,4),t}var zt=class{buf=new Uint8Array(0);push(e){if(e.byteLength>0){let r=new Uint8Array(this.buf.byteLength+e.byteLength);r.set(this.buf),r.set(e,this.buf.byteLength),this.buf=r}let t=[];for(;this.buf.byteLength>=4;){let r=new DataView(this.buf.buffer,this.buf.byteOffset).getUint32(0,!0);if(r>li)throw new Error("[urun] wt control frame too large");if(this.buf.byteLength<4+r)break;let s=this.buf.subarray(4,4+r);this.buf=this.buf.subarray(4+r),t.push((0,Wn.decode)(s))}return t}},Ht=12,di=1;function zn(n){let e=n.getUint8(8);return{groupId:n.getUint32(0,!0),frameSeq:n.getUint32(4,!0),keyframe:(e&di)===di,fragIndex:n.getUint8(9),fragCount:n.getUint8(10)}}function wc(n){let e=new Uint8Array(Ht),t=new DataView(e.buffer);return t.setUint32(0,n.groupId,!0),t.setUint32(4,n.frameSeq,!0),t.setUint8(8,n.keyframe?di:0),t.setUint8(9,n.fragIndex),t.setUint8(10,n.fragCount),t.setUint8(11,0),e}var gh=100,Vt=class{constructor(e,t={}){this.cb=e;this.now=t.now??(()=>performance.now()),this.debounceMs=t.keyframeRequestDebounceMs??gh}cb;pending=new Map;newestGroupSeen=-1;newestFrameDelivered=-1;needKeyframe=!0;kfRequestedAt=-1/0;now;debounceMs;bytesInWindow=0;framesDelivered=0;framesAbandoned=0;push(e){if(e.byteLength<Ht)return;let t=zn(new DataView(e.buffer,e.byteOffset));if(this.bytesInWindow+=e.byteLength,t.groupId<this.newestGroupSeen||(t.groupId>this.newestGroupSeen&&(this.framesAbandoned+=this.pending.size,this.pending.clear(),this.newestGroupSeen=t.groupId,this.needKeyframe=!0),t.frameSeq<=this.newestFrameDelivered))return;let r=this.pending.get(t.frameSeq);if(r||(r={groupId:t.groupId,keyframe:t.keyframe,fragCount:t.fragCount,received:0,chunks:new Array(t.fragCount)},this.pending.set(t.frameSeq,r)),!r.chunks[t.fragIndex]){r.chunks[t.fragIndex]=e.subarray(Ht),r.received++,r.received===r.fragCount&&(this.pending.delete(t.frameSeq),this.deliver(t.frameSeq,r));for(let s of this.pending.keys())s<t.frameSeq-1&&(this.pending.delete(s),this.framesAbandoned++)}}requireKeyframe(){this.needKeyframe=!0}drainWindow(){let e={bytes:this.bytesInWindow,delivered:this.framesDelivered,abandoned:this.framesAbandoned};return this.bytesInWindow=0,this.framesDelivered=0,this.framesAbandoned=0,e}deliver(e,t){if(this.needKeyframe&&!t.keyframe){this.framesAbandoned++,this.requestKeyframe();return}if(e!==this.newestFrameDelivered+1&&!t.keyframe&&this.newestFrameDelivered>=0){this.needKeyframe=!0,this.framesAbandoned++,this.requestKeyframe();return}let r=t.chunks.reduce((o,a)=>o+a.byteLength,0),s=new Uint8Array(r),i=0;for(let o of t.chunks)s.set(o,i),i+=o.byteLength;this.needKeyframe=!1,this.newestFrameDelivered=e,this.framesDelivered++,this.cb.onFrame({seq:e,groupId:t.groupId,keyframe:t.keyframe,data:s})}requestKeyframe(){let e=this.now();e-this.kfRequestedAt<this.debounceMs||(this.kfRequestedAt=e,this.cb.onKeyframeNeeded())}};var _h=/^avc[13]\.[0-9a-fA-F]{6}$/;function vh(n){return _h.test(n)?null:`codec ${JSON.stringify(n)} is not a fully-qualified WebCodecs H.264 string \u2014 the WT pipeline carries H.264, which VideoDecoder.configure needs as "avc1.PPCCLL" (e.g. "avc1.42E01F"); RTP MIMEs ("video/H264") and bare names ("h264") are rejected by WebCodecs as "Unknown or ambiguous codec name"`}function ui(n,e){let t=vh(n);if(t)throw new Error(`[urun] webtransport ${e} ${t}`)}var wh=250,yh=3,bh=1e4,pi=2500,Gt=class{constructor(e,t,r){this.offer=e;this.sessionId=t;this.canvas=r;this.firstMedia=new Promise((s,i)=>{this.firstFrameResolve=s,this.firstFrameReject=i}),this.firstMedia.catch(()=>{})}offer;sessionId;canvas;kind="webtransport";wt;decoder=null;decoderConfig=null;decoderErrorsAt=[];writer;deadCb=null;deadFired=!1;stopped=!1;feedbackTimer=null;reassembler=new Vt({onFrame:e=>this.decodeFrame(e.seq,e.keyframe,e.data),onKeyframeNeeded:()=>{this.sendControl({t:"keyframe-request"}).catch(()=>{})}});lastArrivalTs=0;jitterEwmaMs=0;lastStats={recvBps:0,lossPct:0,jitterMs:0};firstFrameResolve=null;firstFrameReject=null;firstFrameOutput=!1;firstDecodeTimer=null;firstMedia;async start(){let e=globalThis.WebTransport;if(typeof e!="function")throw new Error("[urun] WebTransport API not available");ui(this.offer.codec,"transport.offer"),this.wt=new e(this.offer.url,{serverCertificateHashes:this.offer.certHashes.map(a=>({algorithm:"sha-256",value:Uint8Array.from(atob(a),c=>c.charCodeAt(0))})),congestionControl:"low-latency"}),await this.wt.ready;let t=await this.wt.createBidirectionalStream();this.writer=t.writable.getWriter(),await this.sendControl({t:"hello",token:this.offer.token,sessionId:this.sessionId});let r=t.readable.getReader(),s=new zt,i=[],o=await this.readControl(r,s,i);if(o?.t!=="hello-ack")throw new Error("[urun] gateway rejected hello");ui(o.codec,"hello-ack"),this.initDecoder(o.codec,o.width,o.height),this.controlLoop(r,s,i).catch(a=>this.die(`control loop: ${a}`)),this.datagramLoop().catch(a=>this.die(`datagram loop: ${a}`)),this.feedbackLoop(),this.wt.closed.then(()=>this.die("connection closed")).catch(a=>this.die(`connection error: ${a}`))}async stop(){this.stopped=!0,this.feedbackTimer&&clearInterval(this.feedbackTimer),this.firstDecodeTimer&&clearTimeout(this.firstDecodeTimer),this.firstFrameReject?.(new Error("[urun] webtransport session stopped")),this.firstFrameReject=null,this.firstFrameResolve=null;try{this.decoder?.close()}catch{}try{this.wt?.close()}catch{}}onDead(e){this.deadCb=e}stats(){return this.lastStats}initDecoder(e,t,r){let s=globalThis.VideoDecoder;if(typeof s!="function")throw new Error("[urun] WebCodecs VideoDecoder not available");let i=this.canvas.getContext("2d");if(!i)throw new Error("[urun] canvas 2d context unavailable");this.decoderConfig={codec:e,width:t,height:r},this.decoder=new s({output:o=>{this.firstFrameOutput=!0,this.firstDecodeTimer&&(clearTimeout(this.firstDecodeTimer),this.firstDecodeTimer=null),this.canvas.width=o.displayWidth,this.canvas.height=o.displayHeight,i.drawImage(o,0,0),o.close()},error:o=>this.onDecoderError(o)}),this.decoder.configure({codec:e,...t>0&&r>0?{codedWidth:t,codedHeight:r}:{},optimizeForLatency:!0,hardwareAcceleration:"no-preference"})}onDecoderError(e){if(this.stopped||this.deadFired)return;let t=performance.now();if(this.decoderErrorsAt=this.decoderErrorsAt.filter(s=>t-s<bh),this.decoderErrorsAt.push(t),this.decoderErrorsAt.length>=yh){this.die(`decoder: ${e.message}`);return}console.warn("[urun] webtransport decoder error \u2014 re-initializing the decoder:",e.message);try{this.decoder?.close()}catch{}this.decoder=null;let r=this.decoderConfig;if(!r){this.die(`decoder: ${e.message} (no config to re-init from)`);return}try{this.initDecoder(r.codec,r.width,r.height)}catch(s){this.die(`decoder re-init: ${s instanceof Error?s.message:String(s)}`);return}this.reassembler.requireKeyframe(),this.sendControl({t:"keyframe-request"}).catch(()=>{})}armFirstDecodeDeadline(){if(this.firstDecodeTimer||this.firstFrameOutput||this.stopped||this.deadFired)return;let e=setTimeout(()=>{this.firstDecodeTimer=null,!(this.firstFrameOutput||this.stopped||this.deadFired)&&(console.error(`[urun] webtransport: media datagrams arriving but NO frame decoded within ${pi}ms \u2014 broken WT media leg; failing over to WebRTC LOUDLY`),this.die(`no-first-frame: datagrams flowing but nothing decoded within ${pi}ms`))},pi);e.unref?.(),this.firstDecodeTimer=e}async datagramLoop(){let e=this.wt.datagrams.readable.getReader();for(;!this.stopped;){let{value:t,done:r}=await e.read();if(r)break;if(!t)continue;this.armFirstDecodeDeadline();let s=performance.now();if(this.lastArrivalTs>0){let i=s-this.lastArrivalTs;this.jitterEwmaMs+=(Math.abs(i-1e3/24)-this.jitterEwmaMs)/16}this.lastArrivalTs=s,this.reassembler.push(t)}}decodeFrame(e,t,r){let s=globalThis.EncodedVideoChunk;!this.decoder||typeof s!="function"||(this.decoder.decode(new s({type:t?"key":"delta",timestamp:e*(1e6/24),data:r})),this.firstFrameResolve?.(),this.firstFrameResolve=null,this.firstFrameReject=null)}async sendControl(e){await this.writer.write(Bn(e))}async readControl(e,t,r=[]){for(;;){let s=r.shift();if(s)return s;let{value:i,done:o}=await e.read();if(o)return null;i&&r.push(...t.push(i))}}async controlLoop(e,t,r){for(;!this.stopped;){let s=await this.readControl(e,t,r);if(!s)break;s.t==="ping"&&this.sendControl({t:"pong",ts:s.ts}).catch(()=>{})}}feedbackLoop(){let e=performance.now();this.feedbackTimer=setInterval(()=>{if(this.stopped)return;let t=performance.now(),r=(t-e)/1e3;e=t;let s=this.reassembler.drainWindow(),i=s.delivered+s.abandoned;this.lastStats={recvBps:r>0?s.bytes*8/r:0,lossPct:i>0?100*s.abandoned/i:0,jitterMs:this.jitterEwmaMs},this.sendControl({t:"feedback",...this.lastStats}).catch(()=>{})},wh)}die(e){if(!(this.stopped||this.deadFired)){this.deadFired=!0,this.stopped=!0,this.feedbackTimer&&clearInterval(this.feedbackTimer),this.firstDecodeTimer&&clearTimeout(this.firstDecodeTimer),this.firstFrameReject?.(new Error(e)),this.firstFrameReject=null,this.firstFrameResolve=null;try{this.decoder?.close()}catch{}this.deadCb?.(e)}}};var yc=2500,bc=["av01.0.08M.08","avc1.42E01F","avc1.640028"],Kt=class{constructor(e,t,r){this.signaling=e;this.sessionId=t;this.opts=r}signaling;sessionId;opts;session=null;offer=null;get activeTransport(){return this.session?.kind??null}async connect(){let e=globalThis,t=typeof e.WebTransport=="function",r=typeof e.VideoDecoder=="function",s=this.opts.allowWebTransport??!0,i={webtransport:t&&r&&s,webcodecs:r,codecs:bc};this.offer=await this.signaling.request("transport.offer",{sessionId:this.sessionId,capabilities:i});let o=i.webtransport&&!!this.offer.webtransport;if(i.webtransport&&!this.offer.webtransport&&console.warn("[urun] webtransport unavailable: server offered webrtc only \u2014 staying on webrtc"),o){let a=null;try{return a=this.createWebTransportSession(),await Sc(a.start(),this.opts.quicDeadlineMs??yc,"quic connect deadline"),this.session=a,this.armFailover(),this.notifyEstablished("webtransport"),this.opts.onTransportChange?.("webtransport"),this.session}catch(c){console.warn("[urun] webtransport failed, falling back to webrtc:",c),a?.stop().catch(()=>{}),this.notifyEstablished("webrtc",String(c instanceof Error?c.message:c))}}return this.session=await this.startWebRtc(),o||this.notifyEstablished("webrtc"),this.opts.onTransportChange?.("webrtc"),this.session}async disconnect(){await this.session?.stop(),this.session=null}async retryWebTransport(){if(this.session?.kind==="webtransport")return null;let e=globalThis;if(!(typeof e.WebTransport=="function"&&typeof e.VideoDecoder=="function")||!(this.opts.allowWebTransport??!0))return null;let r=this.session;if(this.offer=await this.signaling.request("transport.offer",{sessionId:this.sessionId,capabilities:{webtransport:!0,webcodecs:!0,codecs:bc}}),!this.offer.webtransport)return null;let s=this.createWebTransportSession();try{await Sc(s.start(),this.opts.quicDeadlineMs??yc,"quic connect deadline")}catch(i){throw s.stop().catch(()=>{}),i}return this.session!==r?(s.stop().catch(()=>{}),null):(this.session=s,this.armFailover(),this.notifyEstablished("webtransport"),this.opts.onTransportChange?.("webtransport","background upgrade"),r?.stop().catch(()=>{}),s)}createWebTransportSession(){let e=this.offer.webtransport;if(this.opts.createWebTransportSession)return this.opts.createWebTransportSession(e);if(!this.opts.canvas)throw new Error("[urun] TransportNegotiator: canvas is required for the WebTransport path");return new Gt(e,this.sessionId,this.opts.canvas)}async startWebRtc(){let e=this.opts.createWebRtcSession();return await e.start(),e.onDead(t=>{console.error("[urun] webrtc path died:",t)}),e}armFailover(){let e=this.session;e.onDead(t=>{console.warn("[urun] quic died mid-session, failing over to webrtc:",t),e.stop().catch(()=>{}),(async()=>{try{this.session=await this.startWebRtc(),this.notifyEstablished("webrtc",`failover: ${t}`),this.opts.onTransportChange?.("webrtc",t)}catch(r){this.session=null,console.error("[urun] failover to webrtc also failed:",r)}})()})}notifyEstablished(e,t){this.signaling.notify("transport.established",{sessionId:this.sessionId,transport:e,fallbackReason:t})}};function Sc(n,e,t){return new Promise((r,s)=>{let i=setTimeout(()=>s(new Error(t)),e);n.then(o=>{clearTimeout(i),r(o)},o=>{clearTimeout(i),s(o)})})}var Sh=1e4,Yt=class{constructor(e,t=Sh){this.carrier=e;this.requestTimeoutMs=t}carrier;requestTimeoutMs;request(e,t){let r=$t();return new Promise((s,i)=>{let o=setTimeout(()=>{a(),i(new Error(`[urun] signaling request timed out: ${e}`))},this.requestTimeoutMs),a=this.carrier.onSignal(c=>{if(c.type!==`${e}.response`||c.requestId!==r)return;if(clearTimeout(o),a(),c.error){i(new Error(`[urun] ${e} failed: ${String(c.error)}`));return}let{type:l,requestId:d,...u}=c;s(u)});this.carrier.sendSignal({type:e,requestId:r,...t})})}notify(e,t){this.carrier.sendSignal({type:e,...t})}on(e,t){return this.carrier.onSignal(r=>{r.type===e&&t(r)})}};var Th="video",Qt=class{constructor(e,t=Th){this.transport=e;this.streamName=t;this.firstMedia=new Promise((r,s)=>{this.firstMediaResolve=r,this.firstMediaReject=s}),this.firstMedia.catch(()=>{})}transport;streamName;kind="webrtc";deadCb=null;deadFired=!1;unsubscribers=[];firstMediaResolve=null;firstMediaReject=null;firstMedia;async start(){if(this.unsubscribers.push(this.transport.on("stateChange",t=>{t==="failed"&&this.die(`webrtc transport ${t}`)})),this.transport.getTrackByName(this.streamName)){this.firstMediaResolve?.(),this.firstMediaResolve=null;return}await new Promise(t=>{let r=this.transport.on("track",()=>{this.transport.getTrackByName(this.streamName)&&(r(),this.firstMediaResolve?.(),this.firstMediaResolve=null,t())});this.unsubscribers.push(r)})}async stop(){for(let e of this.unsubscribers.splice(0))e()}onDead(e){this.deadCb=e}stats(){return{recvBps:0,lossPct:0,jitterMs:0}}die(e){this.deadFired||(this.deadFired=!0,this.firstMediaReject?.(new Error(e)),this.firstMediaReject=null,this.firstMediaResolve=null,this.deadCb?.(e))}};var Rh="video";function Tc(n,e,t){let r=globalThis,s=r.document;if(!(typeof s?.createElement=="function"&&typeof r.WebTransport=="function"&&typeof r.VideoDecoder=="function")||t.allowWebTransport===!1)return null;let o=s.createElement("canvas"),a=!1,c=null,l=!1,d=()=>{if(c){for(let y of c.getVideoTracks())try{y.stop()}catch{}c=null}l&&(l=!1,t.onOverrideTrack(null))},u=new Kt(new Yt(n),e,{canvas:o,createWebRtcSession:t.createWebRtcSession??(()=>new Qt(n,t.streamName??Rh)),createWebTransportSession:t.createWebTransportSession,onTransportChange:(y,v)=>{y==="webrtc"&&(d(),w()),t.onTransportChange?.(y,v)}}),p=null,m=()=>{p!==null&&(clearTimeout(p),p=null)},h=t.wtRetryBaseMs??2e3,f=t.wtRetryCapMs??3e4,g=null,_=0,w=()=>{if(a||g!==null||u.activeTransport==="webtransport")return;let y=Math.min(h*2**_,f);g=setTimeout(()=>{g=null,_+=1,u.retryWebTransport().then(v=>{if(!a){if(v)return console.debug(`[urun] webtransport upgraded in background (retry ${_})`),_=0,R(v);w()}}).catch(v=>{a||(console.debug(`[urun] webtransport background retry ${_} failed:`,v),w())})},y)},T=()=>{g!==null&&(clearTimeout(g),g=null)},R=async y=>{if(a||y.kind!=="webtransport")return;let v=t.firstMediaWarnMs??1e4;if(m(),p=setTimeout(()=>{a||u.activeTransport!=="webtransport"||console.warn(`[urun] webtransport established but no QUIC media after ${v}ms \u2014 no media datagrams reached this client; webrtc track remains authoritative`)},v),await y.firstMedia,m(),a||u.activeTransport!=="webtransport"||typeof o.captureStream!="function")return;c=o.captureStream();let D=c.getVideoTracks()[0];D&&(l=!0,t.onOverrideTrack(D))};return(async()=>{let y=await u.connect();await R(y)})().catch(y=>{m(),console.warn("[urun] transport negotiation unavailable, staying on webrtc:",y),w()}),{activeTransport:()=>u.activeTransport,dispose(){a=!0,m(),T(),d(),u.disconnect().catch(()=>{})}}}var Ch=new Set;function mi(n){if(n.functionsUrl)return{functionsUrl:n.functionsUrl,orgId:n.orgId,apiKey:n.apiKey,jwt:n.jwt,getAccessToken:n.getAccessToken,authProvider:n.authProvider}}var kh="rpc",gi=3e4,Eh="rpc-resp";function Ph(n){return`${Eh}:${n}`}function hi(){return $t()}function xh(n){if(n&&typeof n=="object"){let e=n.error;if(e&&typeof e=="object"){let{message:t,code:r}=e;return{message:typeof t=="string"?t:JSON.stringify(e),code:typeof r=="string"?r:void 0}}if(typeof e=="string")return{message:e}}return{message:typeof n=="string"?n:JSON.stringify(n)}}function Ih(n,e,t,r,s,i,o,a,c,l){let d=[],u=null,p=!1,m=null,h=!1,f,g,_=new Promise((M,Oe)=>{f=M,g=Oe});_.catch(()=>{});let w=o(),T=null,R=null,y=null,v=null,D=!0,U=()=>{y&&(clearTimeout(y),y=null),v&&(v(),v=null)},j=!1,V=()=>{j||!h||(j=!0,n.set({rpc:{[e]:null}}))},K=()=>{D=!1,U(),T?.(),T=null,R?.(),R=null,a?.removeEventListener("abort",W),w.dispose(),V()},ve=()=>{if(u){if(d.length>0){let M=u;u=null,M.resolve({value:d.shift(),done:!1})}else if(m!==null){let M=u;u=null,M.reject(m)}else if(p){let M=u;u=null,M.resolve({value:void 0,done:!0})}}},it=M=>{p||(d.push(M),ve())},re=M=>{p||(m=M,p=!0,g(M),K(),ve())},A=M=>{p||(p=!0,f(M),K(),ve())},W=()=>{let M=a?.reason;re(M instanceof he?M:new Ve(e))},Le=M=>{if(!(p||!M||typeof M!="object"))switch(V(),M.t){case"delta":typeof M.delta=="string"&&it(M.delta);break;case"response":A(M.body);break;case"error":{let{message:Oe,code:ot}=xh(M.body);re(new he(Oe,{requestId:e,code:M.code??ot}));break}}},Jc=()=>{let M=w.messages()[Symbol.asyncIterator]();T=()=>{M.return?.(void 0)};let Oe=()=>{D&&M.next().then(ot=>{if(D){if(ot.done){p||A(void 0);return}Le(ot.value),Oe()}},ot=>{D&&re(ot)})};Oe()},Ri=()=>{if(!h){if(h=!0,a){if(a.aborted){re(new Ve(e));return}a.addEventListener("abort",W,{once:!0})}R=c?.(M=>re(M))??null,Jc(),n.set({rpc:{[e]:{args:t,respond_on:r,consumer_id:s,stream:i}}}),l&&l>0&&!n.synced&&(y=setTimeout(()=>{y=null,!p&&!n.synced&&re(new lt(l,e))},l),v=n.onSynced(()=>U()))}};return{deltas:{[Symbol.asyncIterator](){return{next(){if(Ri(),d.length>0)return Promise.resolve({value:d.shift(),done:!1});if(m!==null){let M=m;return m=null,Promise.reject(M)}return p?Promise.resolve({value:void 0,done:!0}):new Promise((M,Oe)=>{u={resolve:M,reject:Oe}})},return(){return p||(p=!0,f(void 0),K()),Promise.resolve({value:void 0,done:!0})},throw(M){return p||(p=!0,g(M),K()),Promise.reject(M)}}}},body:_,start:Ri}}function Rc(n){if(n&&typeof n=="object"){let{epoch:e,by:t}=n,r={epoch:typeof e=="number"?e:0};return(t==="runtime"||t==="browser")&&(r.by=t),r}}function Dh(n,e){let r=n.get("streams")?.[e];if(!r||typeof r!="object")return null;let{kind:s,rt:i,br:o}=r,a={};(s==="audio"||s==="video"||s==="data")&&(a.kind=s);let c=Rc(i);c&&(a.rt=c);let l=Rc(o);return l&&(a.br=l),a}var fi=class{constructor(e,t,r,s,i){this._name=e;this._transport=t;this._streamData=r;this._controlDoc=s;this._onActivity=i;this._track=this._transport.getTrackByName(this._name)??null,this._unsubscribeTransport=this._transport.on("track",()=>{let o=this._transport.getTrackByName(this._name)??null;o!==this._track&&this._setTrack(o)})}_name;_transport;_streamData;_controlDoc;_onActivity;_track=null;_overrideTrack=null;_handlers=new Map;_unsubscribeTransport=null;_subscribed=!1;_messageConsumers=new Set;_dataUnsub=null;_replay=[];_disposed=!1;messages(){this._ensureSubscribed();let e=this;return{[Symbol.asyncIterator](){let t=[...e._replay],r=null,s=!1,i={push(a){if(!s)if(r){let c=r;r=null,c({value:a,done:!1})}else t.push(a)},end(){if(s=!0,r){let a=r;r=null,a({value:void 0,done:!0})}}};e._messageConsumers.add(i);let o=()=>{s=!0,e._messageConsumers.delete(i)};return{next(){return t.length>0?Promise.resolve({value:t.shift(),done:!1}):s?Promise.resolve({value:void 0,done:!0}):new Promise(a=>{r=a})},return(){return o(),Promise.resolve({value:void 0,done:!0})}}}}}_ensureSubscribed(){this._subscribed||this._disposed||(this._subscribed=!0,this._streamData&&(this._dataUnsub=this._streamData.onData(this._name,e=>this._deliver(e))))}_deliver(e){this._replay.push(e);for(let t of this._messageConsumers)t.push(e)}get track(){let e=this._transport.getTrackByName(this._name)??this._track;return e!==this._track&&this._setTrack(e),this._overrideTrack??this._track}_setOverrideTrack(e){if(this._overrideTrack===e)return;this._overrideTrack=e,e&&e.addEventListener?.("ended",()=>{this._overrideTrack===e&&this._setOverrideTrack(null)},{once:!0});let t=e??this._transport.getTrackByName(this._name)??this._track,r=this._handlers.get("track");if(r)for(let s of r)s(t)}_claimBrowserProducer(e){if(!this._controlDoc)return;let t=this._controlDoc(),r=Dh(t,this._name),s=r?.br;if(s?.by==="runtime")throw new ut(this._name,"runtime","browser");if(s)return;let i={br:{epoch:1}};r?.rt&&(i.rt=r.rt);let o=r?.kind??e;o&&(i.kind=o),t.set({streams:{[this._name]:i}})}async attach(e){this._onActivity?.(),this._claimBrowserProducer("audio"),await this._transport.addTrack(e,this._name)}async attachVideo(e){this._onActivity?.(),this._claimBrowserProducer("video"),await this._transport.addVideoTrack(e,this._name)}async emit(e,t={}){if(this._onActivity?.(),this._claimBrowserProducer("data"),!this._streamData)throw new Error("[urun] stream.emit requires the data-stream transport (no streamData wired)");await this._streamData.sendData(this._name,e,t)}async detach(){this._transport.removeTrack()}async detachVideo(){this._transport.stopVideo()}async seek(e){if(e!=="live"&&(!Number.isFinite(e)||e<0))throw new Error('[urun] stream.seek target must be "live" or a non-negative number of seconds');this._transport.seekStream(this._name,e)}chunks(e={}){let t=e.source??$n;return vc(t,{track:()=>this.track,onTrack:s=>this.on("track",s)})}onSeeked(e){return this._transport.on("seeked",(t,r)=>{t===this._name&&e(r)})}on(e,t){let r=this._handlers.get(e);return r||(r=new Set,this._handlers.set(e,r)),r.add(t),()=>{r?.delete(t),r?.size===0&&this._handlers.delete(e)}}dispose(){this._disposed=!0,this._unsubscribeTransport?.(),this._unsubscribeTransport=null,this._handlers.clear(),this._dataUnsub?.(),this._dataUnsub=null;for(let e of this._messageConsumers)e.end();this._messageConsumers.clear()}_setTrack(e){if(this._track=e,e&&e.addEventListener("ended",()=>{this._track===e&&this._setTrack(null)},{once:!0}),this._overrideTrack)return;let t=this._handlers.get("track");if(t)for(let r of t)r(e)}},Jt=class n{_sessionId;_multiplexer;_transport;_docs=new Map;_streams=new Map;_docConnector=new An;_docEndpointKey=null;_streamData;_presence=null;_activity=null;_activation;_activeRequests=new Set;_endHandler;_endPromise;_recordingsAuth;_artifactsAuth;_recordingsAccessor=null;_artifactsAccessor=null;_recoveryHooks=new Set;_disconnectHooks=new Set;_lifecycleUnsub=null;_dialNegotiation=null;_dialNegotiationStarted=!1;constructor(e,t,r,s,i){this._sessionId=e,this._multiplexer=t,this._transport=r,this._recordingsAuth=s,this._artifactsAuth=i,this._streamData=Ga(r),this._wireControlDocIncarnation(),this._lifecycleUnsub=jn(()=>this.recover()),this._activity=Fn({awareness:this.doc("control").awareness,isProducing:()=>this._transport.isProducingMedia===!0}),this._activation=new mt({onPhase:o=>this.onPhase(o),hint:()=>this.doc(Or).get(Nr)??this.doc("control").get(Fr),onData:(o,a)=>this._streamData.onData(o,a)})}_wireControlDocIncarnation(){let e=this.doc("control");this._transport.applyControlDocState(e.get()),e.on("change",t=>{this._transport.applyControlDocState(t)})}static async attach(e,t){let r=await Wi({baseUrl:t.baseUrl,fallbackUrls:t.fallbackUrls,sessionId:e,orgId:t.orgId,jwt:t.jwt,getAccessToken:t.getAccessToken,authProvider:t.authProvider}),s=t.getAccessToken?await t.getAccessToken()??void 0:t.jwt,i=new ct,o=new Bt({url:r.wsUrl,orgId:t.orgId,jwt:s,authProvider:t.authProvider,sessionId:e,iceServers:r.response.ice_servers}),a=new n(e,i,o,mi(t),nr({...t,baseUrl:r.baseUrl}));o.on("connected",()=>{o.multiplexer&&i.setTarget(o.multiplexer)}),o.setConnection({url:r.wsUrl,sessionId:e,iceServers:r.response.ice_servers}),o.setEndsAt(r.endsAt),ze()&&await qt();let c=t.getAccessToken,l=c?async()=>await c()??s:s;return a.setDocTransport({wsUrl:r.wsUrl,token:l}),await o.connect({role:"viewer"}),a}get id(){return this._sessionId}get phase(){return this._transport.phase}get endsAt(){return this._transport.endsAt}get status(){return this._transport.status}onPhase(e){return e(this._transport.phase),this._transport.on("phase",e)}onDiagnostic(e){return this._transport.on("diagnostic",e)}onActivation(e){return this._activation.onActivation(e)}whenLive(e){return Lr(this,e)}get recordings(){if(this._recordingsAccessor)return this._recordingsAccessor;let e=this._recordingsAuth;if(!e)throw new Error("[urun] session.recordings requires `functionsUrl` to be configured on the App()/Session.attach() options (the eensx /functions/v1 base URL).");let t=new Qe(e);return this._recordingsAccessor={list:r=>t.list(r??this._sessionId),get:r=>t.get(r),retain:(r,s)=>t.retain(r,s),pin:r=>t.pin(r),unpin:r=>t.unpin(r),permanent:r=>t.permanent(r),delete:r=>t.delete(r)},this._recordingsAccessor}get artifacts(){return this._artifactsAccessor?this._artifactsAccessor:(this._requireArtifactsAuth(),this._artifactsAccessor={list:e=>new qe(this._requireArtifactsAuth()).list(e??this._sessionId),getDownloadUrl:(e,t)=>new qe(this._requireArtifactsAuth()).getDownloadUrl(e,t??this._sessionId)},this._artifactsAccessor)}setArtifactsAuth(e){this._artifactsAuth=e}_requireArtifactsAuth(){let e=this._artifactsAuth;if(!e)throw new Error("[urun] session.artifacts requires a session-api `baseUrl` auth bag.");return e}setSessionId(e){if(e===this._sessionId)return;this._multiplexer.rewriteSessionChannels?.call(this._multiplexer,this._sessionId,e),this._sessionId=e;for(let r of this._docs.values())r.setSessionId(e)}setEndHandler(e){this._endHandler=e}stream(e){let t=this._streams.get(e);return t||(t=new fi(e,this._transport,this._streamData,()=>this.doc("control"),()=>{this._activity?.touch(),this._activation.unwatch(e)}),this._streams.set(e,t),this._activation.watch(e,t)),t}doc(e){let t=this._docs.get(e);return t||(t=new On(e,this._sessionId,Ch.has(e)?null:this._docConnector.connect),this._docs.set(e,t)),t}get presence(){return this._presence||(this._presence=fc(this.doc("control").awareness)),this._presence}touch(){this._activity?.touch()}connectDocs(e){this._docConnector.setTarget(e)}setDocTransport(e){let t=uc(e.wsUrl),r=typeof e.token=="function"?"<token-supplier>":e.token??"",s=`${t}\0${r}\0${this._sessionId}`;s!==this._docEndpointKey&&(this._docEndpointKey=s,this.connectDocs(pc({serverUrl:t,sessionId:this._sessionId,token:e.token,WebSocketPolyfill:e.webSocket})))}useStreamDataTransport(e){if(this._streams.size>0)throw new Error("[urun] useStreamDataTransport must be called before opening any stream");this._streamData=e}sendImage(e){return this.request({reference_image:{value:e}})}sendImageLegacyDesired(e){this.doc("control").set({desired:{reference_image:{value:e}}})}request(e,t={}){let r=hi(),s=new AbortController;t.signal&&(t.signal.aborted?s.abort(t.signal.reason):t.signal.addEventListener("abort",()=>s.abort(t.signal.reason),{once:!0}));let i=null;if(typeof t.timeout=="number"&&t.timeout>=0){let a=t.timeout;i=setTimeout(()=>s.abort(new dt(a,r)),a)}let o=this._consumeResponse(r,e,!1,s.signal);return o.start(),o.body.finally(()=>{i&&clearTimeout(i)})}_consumeResponse(e,t,r,s,i){this._activity?.touch();let o=this.doc(kh),a=Ph(e);return Ih(o,e,t,a,this._streamData.consumerId,r,()=>this.stream(a),s,c=>(this._activeRequests.add(c),()=>this._activeRequests.delete(c)),i??gi)}requestStream(e,t={}){let r=hi();return this._consumeResponse(r,e,!0,t.signal,t.docSyncTimeout).deltas}complete(e,t={}){let r=hi(),s=this._consumeResponse(r,e,!1,t.signal,t.docSyncTimeout);return s.start(),s.body}recover(){this._transport.recover();for(let e of this._docs.values())e.ensureConnected();for(let e of Array.from(this._recoveryHooks))try{e()}catch(t){console.warn("[urun] session recovery hook failed:",t)}}onRecovery(e){return this._recoveryHooks.add(e),()=>this._recoveryHooks.delete(e)}onDisconnect(e){return this._disconnectHooks.add(e),()=>this._disconnectHooks.delete(e)}negotiateMediaTransport(e={}){this._dialNegotiationStarted||(this._dialNegotiationStarted=!0,this._dialNegotiation=Tc(this._transport,this._sessionId,{allowWebTransport:e.allowWebTransport,onOverrideTrack:t=>this.stream("video")._setOverrideTrack(t)}))}get mediaTransport(){return this._dialNegotiation?.activeTransport()??null}end(){return this._endPromise?this._endPromise:this._endHandler?(this._endPromise=this._endHandler().then(e=>(this.disconnect(),e)),this._endPromise):Promise.reject(new Fe)}disconnect(){let e=Array.from(this._disconnectHooks);this._disconnectHooks.clear();for(let r of e)try{r()}catch{}this._lifecycleUnsub?.(),this._lifecycleUnsub=null,this._dialNegotiation?.dispose(),this._dialNegotiation=null,this._activity?.dispose(),this._activity=null,this._activation.dispose(),this._recoveryHooks.clear();let t=Array.from(this._activeRequests);this._activeRequests.clear();for(let r of t)try{r(new ht)}catch{}for(let r of this._docs.values())r.dispose();this._docs.clear();for(let r of this._streams.values())r.dispose();this._streams.clear(),this._transport.disconnect()}};function Cc(n){return`urun:logical:v1:${n.orgId}:${n.app}:${n.functionName}`}function _i(){try{return globalThis.sessionStorage??null}catch{return null}}function kc(n){let e=_i();if(!e)return null;try{let t=e.getItem(n);if(!t)return null;let r=JSON.parse(t);return typeof r?.logicalId!="string"||r.logicalId.length===0?null:{logicalId:r.logicalId}}catch{return null}}function Ec(n,e){let t=_i();if(t)try{t.setItem(n,JSON.stringify({logicalId:e.logicalId}))}catch{}}function Hn(n){let e=_i();if(e)try{e.removeItem(n)}catch{}}var Mh=new Set(["then","catch","finally","toJSON",Symbol.toPrimitive]);function Pc(n,e){if(typeof e.orgId!="string"||e.orgId.trim().length===0)throw new Error("[urun] App() requires a non-empty orgId \u2014 pass your org id (e.g. from a NEXT_PUBLIC_* deployment env var, threaded through <UrunProvider orgId>). It is sent as the X-Tenant-Id header on every request and selects the JWKS your JWT is verified against.");return new Proxy({},{get(t,r){if(!(Mh.has(r)||typeof r!="string"))return s=>{let i=s??{},o=Cc({orgId:e.orgId,app:n,functionName:r}),a=()=>`s_${Date.now()}_${Math.random().toString(36).slice(2)}`,c=a(),l=e.jwt,d=e.getAccessToken?async v=>{let D=await e.getAccessToken(v);return D&&(l=D),D}:void 0,u={...e,getAccessToken:d},p=new ct,m=new Bt({url:"",orgId:e.orgId,jwt:e.jwt,authProvider:e.authProvider,sessionId:c}),h=new Jt(c,p,m,mi(u),nr(u)),f,g,_=new Promise(v=>{g=v}),w=v=>{f=v,g({status:"ready",handle:v})};h.setEndHandler(async()=>{let v=f?{status:"ready",handle:f}:await _;if(v.status==="unavailable")throw new Fe("[urun] session allocation failed before a releasable request was created",{cause:v.cause});let D=v.handle;return Hn(o),ji({baseUrl:D.baseUrl,requestId:D.requestId,orgId:e.orgId,jwt:e.jwt,getAccessToken:d,authProvider:e.authProvider})});let T=async v=>{let D=await $i({baseUrl:e.baseUrl,fallbackUrls:e.fallbackUrls,app:n,functionName:r,orgId:e.orgId,jwt:e.jwt,getAccessToken:d,authProvider:e.authProvider,idempotencyKey:v,sessionKey:e.sessionKey??kc(o)?.logicalId,priority:e.priority,onAdmission:j=>m.reportAdmission(j),onRequest:w}),U=d?await d()??void 0:e.jwt;return e.sessionKey||Ec(o,{logicalId:D.sessionId}),h.setSessionId(D.sessionId),h.setArtifactsAuth(nr({...u,baseUrl:D.baseUrl})),m.setEndsAt(D.endsAt),{url:D.wsUrl,sessionId:D.sessionId,jwt:U,iceServers:D.response.ice_servers,endsAt:D.endsAt}},R,y=d?async()=>await d()??R:()=>R;if(m.setConnectionResolver(async()=>{let v=await T(a());return R=v.jwt,v}),m.on("connected",()=>{m.multiplexer&&p.setTarget(m.multiplexer);let v=m.connectedUrl;v&&h.setDocTransport({wsUrl:v,token:y})}),(async()=>{let v;try{v=await T(c)}catch(D){console.error(`[urun] Failed to create session for ${r}:`,D),Hn(o);let U=D instanceof Error?D:new Error(String(D)),j=D instanceof Y?D.httpStatus:void 0;m.reportAllocationFailure(U,j),g({status:"unavailable",cause:D});return}m.setAuth({jwt:v.jwt,authProvider:e.authProvider,orgId:e.orgId}),m.setConnection({url:v.url,sessionId:v.sessionId,iceServers:v.iceServers}),ze()&&await qt(),R=v.jwt,h.setDocTransport({wsUrl:v.url,token:y}),await m.connect({app:n,functionName:r,args:i}),h.negotiateMediaTransport({allowWebTransport:e.allowWebTransport})})().catch(v=>{console.error(`[urun] Failed to connect session for ${r}:`,v)}),e.releaseOnLeave!==!1){let v=Un(()=>{if(m.leaveLeg()||m.connectedUrl!==null)return;let K=f;K&&(Hn(o),qr({baseUrl:K.baseUrl,requestId:K.requestId,orgId:e.orgId,jwt:l,authProvider:e.authProvider}))});h.onDisconnect(v);let D,U,j=!1,V=()=>{j||(j=!0,D?.(),U?.())};_.then(K=>{K.status!=="ready"||j||(D=qn(()=>f!==void 0))}),U=h.onPhase(K=>{let ve=K?.name;(ve==="ended"||ve==="expired"||ve==="error")&&V()}),j&&U(),h.onDisconnect(V)}return h}}})}var vi="https://api.urun.sh",He=class extends Error{status;constructor(e,t){super(e),this.name="ClientTokenError",this.status=t}};async function xc(n,e={}){if(!n)throw new He("[urun] createClientToken requires an org API key");let t=e.fetch??globalThis.fetch,r=Q(e.baseUrl??vi),s={};e.expiresIn!==void 0&&(s.expires_in=e.expiresIn),e.allowedFunctions!==void 0&&(s.allowed_functions=e.allowedFunctions),e.allowedOrigins!==void 0&&(s.allowed_origins=e.allowedOrigins),e.maxSessionS!==void 0&&(s.max_session_s=e.maxSessionS),e.subject!==void 0&&(s.subject=e.subject),e.metadata!==void 0&&(s.metadata=e.metadata);let i;try{i=await t(`${r}/api/client-tokens`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n}`},body:JSON.stringify(s)})}catch(p){throw new He(`[urun] client token mint request failed: ${p instanceof Error?p.message:String(p)}`)}let o={};try{o=await i.json()}catch{}if(!i.ok){let p=typeof o.message=="string"?o.message:`HTTP ${i.status}`;throw new He(`[urun] client token mint failed: ${p}`,i.status)}let a=typeof o.token=="string"?o.token:"",c=typeof o.org_id=="string"?o.org_id:"",l=typeof o.expires_at=="string"?Date.parse(o.expires_at):Number.NaN,d=typeof o.expires_in=="number"?o.expires_in:void 0;if(!a)throw new He("[urun] client token mint returned no token (control-plane contract violation)",i.status);let u=Number.isFinite(l)?new Date(l):new Date(Date.now()+(d??60)*1e3);return{token:a,expiresAt:u,orgId:c}}var Ic=3e4,Dc="stream:",wi=class{_ws;_multiplexer;_pendingRpc=new Map;_rpcId=0;constructor(e,t){this._ws=e,this._multiplexer=t,this._ws.addEventListener("message",r=>{let s;try{s=JSON.parse(typeof r.data=="string"?r.data:"")}catch{return}if(s.rpcId&&this._pendingRpc.has(s.rpcId)){let i=this._pendingRpc.get(s.rpcId);this._pendingRpc.delete(s.rpcId),clearTimeout(i.timer),s.error?i.reject(new Error(s.error)):i.resolve(s.result)}})}async get(e){return this._sendRpc("store.get",{key:e})}async has(e){return await this._sendRpc("store.has",{key:e})}on(e,t){let r=`${Dc}${e}`;return this._multiplexer.on(r,s=>{t(s)})}emit(e,t){let r=`${Dc}${e}`,s=typeof t=="object"&&t!==null&&!Array.isArray(t)?t:{data:t};this._multiplexer.emit(r,s)}_getInternals(){return{multiplexer:this._multiplexer,ws:this._ws}}_sendRpc(e,t){return new Promise((r,s)=>{if(!this._ws||this._ws.readyState!==WebSocket.OPEN){s(new Error("WebSocket not open"));return}let i=String(++this._rpcId),o=setTimeout(()=>{this._pendingRpc.has(i)&&(this._pendingRpc.delete(i),s(new Error(`RPC request "${e}" timed out after ${Ic}ms`)))},Ic);this._pendingRpc.set(i,{resolve:r,reject:s,timer:o}),this._ws.send(JSON.stringify({rpcId:i,type:e,...t}))})}};function Mc(n){let r=`${n.baseUrl.replace(/\/$/,"").replace(/^http/,"ws")}/store/${encodeURIComponent(n.orgId)}`,s=new WebSocket(r);(n.jwt||n.apiKey)&&s.addEventListener("open",()=>{s.send(JSON.stringify({type:"auth",orgId:n.orgId,jwt:n.jwt,authProvider:n.authProvider,apiKey:n.apiKey}))});let i=new at(s);return new wi(s,i)}var Ah='video/mp4; codecs="avc1.42E01E"';function Ac(n,e){let t=e?.codec??Ah,r=document.createElement("video");r.muted=!0,r.playsInline=!0;let s=new MediaSource,i=URL.createObjectURL(s);r.src=i,s.addEventListener("sourceopen",()=>{let p;try{p=s.addSourceBuffer(t)}catch(g){throw g instanceof DOMException&&g.name==="NotSupportedError"?new Error(`Codec not supported: "${t}". Ensure the codec string matches the fMP4 container format. Common values: video/mp4; codecs="avc1.42E01E" (H.264 Baseline), video/mp4; codecs="avc1.4D401F" (H.264 Main).`):g}let m=n.getReader();function h(){return p.updating?new Promise(g=>{p.addEventListener("updateend",()=>g(),{once:!0})}):Promise.resolve()}async function f(){try{for(;;){let{done:g,value:_}=await m.read();if(g){await h(),s.readyState==="open"&&s.endOfStream();return}await h();try{p.appendBuffer(_)}catch(w){if(w instanceof DOMException&&w.name==="QuotaExceededError"){let T=p.buffered;if(T.length>0){let R=T.start(T.length-1);p.remove(0,R),await h(),p.appendBuffer(_)}else throw w}else throw w}}}catch{if(s.readyState==="open")try{s.endOfStream("decode")}catch{}}}f()}),r.play().catch(()=>{});let o=r,a=o.captureStream??o.mozCaptureStream;if(!a)throw new Error("captureStream() is not supported in this browser. videoStream() requires HTMLMediaElement.captureStream() support.");let c=a.call(r),l=c.getTracks(),d=0,u=l.length;if(u===0)r.addEventListener("emptied",()=>{URL.revokeObjectURL(i)},{once:!0});else for(let p of l)p.addEventListener("ended",()=>{d++,d>=u&&URL.revokeObjectURL(i)});return c}function Lc(n){return n.status.startsWith("pending_")}var Ir=class extends Error{constructor(){super("no getUserMedia in this environment \u2014 in headless/Node consumers, inject a media source via new CaptureController({ getUserMedia }) (e.g. a wrtc/werift capture)"),this.name="CaptureUnavailableError",Object.setPrototypeOf(this,new.target.prototype)}};function Oc(n){let e=[];return n.audio&&e.push("audio"),n.video&&e.push("video"),e.join("+")}function Lh(n,e){return e==="audio"?n.getAudioTracks():n.getVideoTracks()}function Oh(n,e){let t=n.getTracks();if(t.length===1&&t[0]===e)return n;try{return new MediaStream([e])}catch{return n}}function yi(n,e){for(let t of[...n.lostListeners])try{t(e)}catch{}}var Dr=class{claims=new Map;injectedGetUserMedia;queue=Promise.resolve();constructor(e){this.injectedGetUserMedia=e?.getUserMedia}claim(e,t){return this.enqueue(async()=>{let r=this.claims.get(e);r&&(this.claims.delete(e),r.released=!0,r.track=null,r.stream=null,yi(r,new Error(`${e} capture claim superseded by a newer claim`)));let s=this.createState(e,t);return this.claims.set(e,s),await this.converge(s),s.claim})}idle(){return this.queue.then(()=>{})}enqueue(e){let t=this.queue.then(e);return this.queue=t.then(()=>{},()=>{}),t}resolveGetUserMedia(){if(this.injectedGetUserMedia)return this.injectedGetUserMedia;let e=typeof navigator<"u"?navigator.mediaDevices:void 0;if(!e?.getUserMedia)throw new Ir;return t=>e.getUserMedia(t)}async converge(e){for(let o of this.claims.values())o.track&&(o.track.stop(),o.track=null,o.stream=null);if(this.claims.size===0)return;let t=this.resolveGetUserMedia(),r={audio:this.claims.get("audio")?.constraints??!1,video:this.claims.get("video")?.constraints??!1},s;try{s=await t(r)}catch(o){let a=`one-capture getUserMedia(${Oc(r)}) failed`,c=o instanceof Error?o.message:String(o);for(let l of[...this.claims.values()])if(this.claims.delete(l.kind),l.released=!0,l!==e){let d=new Error(`${a} \u2014 ${l.kind} capture lost: ${c||o}`);d.cause=o,yi(l,d)}throw o}let i=[...this.claims.values()].sort((o,a)=>o===e?1:a===e?-1:0);for(let o of i){let a=Lh(s,o.kind)[0]??null;if(o.released){a?.stop();continue}if(!a){this.claims.delete(o.kind),o.released=!0;let c=Object.assign(new Error(`one-capture getUserMedia(${Oc(r)}) returned no ${o.kind} track`),{name:"NotFoundError"});if(o===e)throw c;yi(o,c);continue}if(o.track=a,o.stream=Oh(s,a),o!==e)for(let c of[...o.trackListeners])try{c(a,o.stream)}catch{}}}createState(e,t){let r=this,s={kind:e,constraints:t,track:null,stream:null,released:!1,trackListeners:new Set,lostListeners:new Set,claim:{kind:e,get track(){return s.track},get stream(){return s.stream},update(i){return r.enqueue(async()=>{if(s.released)throw new Error(`${e} capture claim already released`);if(s.constraints=i,await r.converge(s),!s.track)throw new Error(`${e} capture update yielded no track`);return s.track})},release(){s.released||(s.released=!0,r.claims.get(e)===s&&r.claims.delete(e),s.track?.stop(),s.track=null,s.stream=null)},onTrack(i){return s.trackListeners.add(i),()=>s.trackListeners.delete(i)},onLost(i){return s.lostListeners.add(i),()=>s.lostListeners.delete(i)}}};return s}},Nh=null;function Nc(){return Nh??=new Dr}var bi="input",Fc=30;function jc(n){let e=n.now??Date.now,t=n.field??bi,r=1e3/Math.max(n.hz??30,.001),s=new Set,i=0,o=0,a=0,c=0,l,d=null,u=!1,p=()=>{if(u)return;l=e(),c+=1;let h={keys:[...s],buttons:i,pointer:{x:o,y:a},seq:c,at:l};try{n.awareness.setLocalStateField(t,h)}catch{}},m=()=>{if(u)return;let h=e();if(l===void 0||h-l>=r){d&&(clearTimeout(d),d=null),p();return}if(d)return;let f=Math.max(r-(h-l),0);d=setTimeout(()=>{d=null,p()},f),d.unref?.()};return{keyDown(h){let f=String(h).toLowerCase();s.has(f)||(s.add(f),m())},keyUp(h){let f=String(h).toLowerCase();s.delete(f)&&m()},setButtons(h){let f=Number.isFinite(h)?Number(h):0;f!==i&&(i=f,m())},movePointer(h,f){let g=Number.isFinite(h)?Number(h):0,_=Number.isFinite(f)?Number(f):0;g===0&&_===0||(o+=g,a+=_,m())},heldKeys(){return[...s]},clear(){u||(s.clear(),i=0,d&&(clearTimeout(d),d=null),p())},dispose(){if(u)return;let h=s.size>0||i!==0;s.clear(),i=0,d&&(clearTimeout(d),d=null),h&&p(),u=!0}}}var $c=1024,Wc=.92,Bc=262144,zc=256e3,Si=[.9,.8,.7,.6,.5],Uc=.8,Fh=8;function Vn(n,e,t){if(!(n>0)||!(e>0))throw new Error(`reference image has no pixels (${n}x${e})`);let r=Math.min(1,t/Math.max(n,e));return{width:Math.max(1,Math.round(n*r)),height:Math.max(1,Math.round(e*r))}}async function jh(n){if(typeof createImageBitmap!="function")throw new Error("this browser cannot decode images for reference capture (createImageBitmap unavailable)");return await createImageBitmap(n,{imageOrientation:"from-image"})}async function Hc(n,e,t){let r=await new Promise(s=>{n.toBlob(s,e,e==="image/jpeg"?t:void 0)});if(!r)throw new Error(`could not encode the reference image as ${e}`);return r}function qc(n,e){console.warn(`[urun] reference image over the 256000-byte data-channel message budget (media/Chrome maxMessageSize 262144 would drop it SILENTLY): ${n} -> ${e} bytes`)}async function Ti(n,e,t,r,s){let i=document.createElement("canvas");i.width=e,i.height=t;let o=i.getContext("2d");if(!o)throw new Error("could not prepare the reference image (no 2d canvas context)");return r==="image/jpeg"&&(o.fillStyle="#fff",o.fillRect(0,0,e,t)),o.drawImage(n,0,0,e,t),await Hc(i,r,s)}async function Uh(n,e,t,r){let{width:s,height:i}=e,o=await Ti(n,s,i,t,r);if(o.size<=256e3)return{blob:o,width:s,height:i};if(t==="image/jpeg"){for(let c of Si)if(!(c>=r)&&(o=await Ti(n,s,i,t,c),o.size<=256e3))return qc(`quality ${r} -> ${c}`,o.size),{blob:o,width:s,height:i}}let a=t==="image/jpeg"?Si[Si.length-1]:r;for(let c=0;c<Fh;c++)if(s=Math.max(16,Math.round(s*Uc)),i=Math.max(16,Math.round(i*Uc)),o=await Ti(n,s,i,t,a),o.size<=256e3)return qc(`downscaled to ${s}x${i} @ q${a}`,o.size),{blob:o,width:s,height:i};throw new Error(`this image cannot be sent: even at ${s}x${i} it is over the 256000-byte limit for one message. Try a smaller or less detailed picture.`)}async function Vc(n,e){let{maxSize:t=1024,type:r="image/jpeg",quality:s=.92,source:i}=e,o=await jh(n);try{let a=Vn(o.width,o.height,t),c=await Uh(o,a,r,s);return{bytes:new Uint8Array(await c.blob.arrayBuffer()),type:r,width:c.width,height:c.height,source:i}}finally{o.close()}}function Gc(n){let e=n instanceof Error?n.name:"",t=n instanceof Error?n.message:String(n);switch(e){case"NotAllowedError":case"SecurityError":return"Camera access is turned off for this site. Allow the camera in your browser settings, then try again.";case"NotFoundError":case"OverconstrainedError":return"No camera was found on this device. You can upload a photo instead.";case"NotReadableError":case"AbortError":return"The camera is being used by another app. Close it, then try again.";default:break}return/has not shown a frame/i.test(t)?"The camera is still starting. Wait for the picture to appear, then take the photo.":/secure|https/i.test(t)?"The camera only works over a secure (https) connection.":/decode|not settled|createImageBitmap|encode|image/i.test(t)?"That file couldn't be read as an image. Try a JPEG or PNG photo.":"The camera couldn't be started. Check that no other app is using it, then try again."}function Kc(){return typeof navigator>"u"||typeof window>"u"||!window.isSecureContext?!1:typeof navigator.mediaDevices?.getUserMedia=="function"}async function Yc(n,e){let t=n.videoWidth,r=n.videoHeight;if(!(t>0)||!(r>0))throw new Error("the camera has not shown a frame yet");let{maxSize:s=1024,type:i="image/jpeg",quality:o=.92}=e??{},a=Vn(t,r,s),c=document.createElement("canvas");c.width=a.width,c.height=a.height;let l=c.getContext("2d");if(!l)throw new Error("could not prepare the reference image (no 2d canvas context)");i==="image/jpeg"&&(l.fillStyle="#fff",l.fillRect(0,0,a.width,a.height)),l.drawImage(n,0,0,a.width,a.height);let d=await Hc(c,i,o);return{bytes:new Uint8Array(await d.arrayBuffer()),type:i,width:a.width,height:a.height,source:"camera"}}var qh=new Set(["w","a","s","d"]),Xt=(n,e)=>Math.min(e,Math.max(-e,n));function Qc(n={}){let{panPerPixel:e=9e-4,zoomPerSecond:t=.35,strafePerSecond:r=.18,decayTauMs:s=900,frameRelax:i=.06,maxPan:o=.12,maxLogZoom:a=.22}=n,c=0,l=0,d=0,u=null,p=new Set;return{pointerDelta(m,h){c=Xt(c-m*e,o),l=Xt(l-h*e,o)},keyDown(m){let h=m.toLowerCase();qh.has(h)&&p.add(h)},keyUp(m){p.delete(m.toLowerCase())},clearKeys(){p.clear()},frameArrived(){let m=1-i;c*=m,l*=m,d*=m},tick(m){if(u===null){u=m;return}let h=Math.max(0,Math.min(100,m-u))/1e3;u=m,p.has("w")&&(d=Xt(d+t*h,a)),p.has("s")&&(d=Xt(d-t*h,a)),p.has("a")&&(c=Xt(c+r*h,o)),p.has("d")&&(c=Xt(c-r*h,o));let f=Math.exp(-h*1e3/s);c*=f,l*=f,d*=f},transform(){return{translateX:c,translateY:l,scale:Math.exp(d)}},isIdentity(m=5e-4){return Math.abs(c)<m&&Math.abs(l)<m&&Math.abs(d)<m},reset(){c=0,l=0,d=0,p.clear()}}}0&&(module.exports={ACTIVATION_COLD_BOOT_AFTER_MS,ACTIVATION_DEGRADED_AFTER_MS,ACTIVATION_HINT_PATH,ACTIVATION_STILL_AFTER_MS,ACTIVITY_DOM_EVENTS,ACTIVITY_FIELD,ACTIVITY_STAMP_MIN_INTERVAL_MS,ActivationMonitor,App,BACKOFF_BASE_MS,BACKOFF_MAX_ATTEMPTS,BACKOFF_MAX_MS,CaptureController,CaptureUnavailableError,ClientTokenError,DATA_CHANNEL_MESSAGE_CEILING,DEFAULT_DOC_SYNC_TIMEOUT_MS,DEFAULT_GATEWAY_URL,DEFAULT_PRODUCE_ACK_TIMEOUT_MS,DEFAULT_REFERENCE_JPEG_QUALITY,DEFAULT_REFERENCE_MAX_SIZE,DEFAULT_WHEN_LIVE_TIMEOUT_MS,DERIVED_LEG_SEP,DGRAM_HEADER_BYTES,FOREGROUND_COALESCE_MS,FrameReassembler,INPUT_PRESENCE_DEFAULT_HZ,INPUT_PRESENCE_FIELD,InvalidDurationError,LEGACY_ACTIVATION_HINT_PATH,PLATFORM_DOC_NAME,PermanentLockedError,PinRequiresActiveTempError,ProduceAckTimeoutError,RecordingNotFoundError,RecordingsClient,RecordingsError,RecordingsUnauthorizedError,RequestAbortError,RequestCancelledError,RequestDocSyncError,RequestError,RequestTimeoutError,RetainNotTempError,RuntimeArtifactNotFoundError,RuntimeArtifactsClient,RuntimeArtifactsError,RuntimeArtifactsUnauthorizedError,Session,SessionAllocationError,SessionEndError,SessionEndUnavailableError,SessionFailedError,StreamDirectionConflict,TransportNegotiator,TransportSessionMismatchError,TransportSessionSignaling,VISIBILITY_FIELD,WIRE_MESSAGE_BUDGET,WT_CONTROL_FRAME_MAX,WebRtcSession,WebTransportSession,WtControlDecoder,activationHintFrom,cameraCaptureAvailable,captureStillFromVideo,computeBackoffDelay,createActivityTracker,createCameraWarp,createClientToken,createInputPresencePublisher,createRecordingsClient,createRuntimeArtifactsClient,createStore,derivedLegName,derivedLegRole,describeSessionFailure,describeSessionPhase,encodeWtControlFrame,fitWithin,isDurationString,isPendingRecording,isRetryableSessionError,isWakingPhase,mediaRecorderChunkSource,normalizeReferenceImage,normalizeRetention,observeLeaveConfirm,observePageLifecycle,observePageTeardown,parseDgramHeader,prewake,referenceImageErrorMessage,releaseSessionBeacon,sessionFailureFromMediaError,sharedCaptureController,videoStream,whenLive,writeDgramHeader});
|