@urun-sh/core 0.2.45 → 0.2.46
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-3YI4A64L.mjs → chunk-DUCJ3UFC.mjs} +5 -5
- package/dist/{chunk-CDOESHK5.mjs → chunk-OXPELTWD.mjs} +2 -2
- package/dist/index.browser.d.mts +14 -3
- package/dist/index.browser.d.ts +14 -3
- package/dist/index.browser.js +2 -2
- package/dist/index.browser.mjs +1 -1
- package/dist/index.d.mts +14 -3
- package/dist/index.d.ts +14 -3
- 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-DLyFVlWt.d.mts → stream-data-a_RrPi2p.d.mts} +2 -0
- package/dist/{stream-data-DLyFVlWt.d.ts → stream-data-a_RrPi2p.d.ts} +2 -0
- package/package.json +1 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createRequire as __urunCreateRequire } from 'node:module'; const require = globalThis.require ?? __urunCreateRequire(import.meta.url);
|
|
2
|
-
var ba=Object.create;var Dt=Object.defineProperty;var Sa=Object.getOwnPropertyDescriptor;var Ra=Object.getOwnPropertyNames;var Ca=Object.getPrototypeOf,Ta=Object.prototype.hasOwnProperty;var Ns=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});var Ea=(r,e,t)=>()=>{if(t)throw t[0];try{return r&&(e=r(r=0)),e}catch(s){throw t=[s],s}};var C=(r,e)=>()=>{try{return e||r((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}},ka=(r,e)=>{for(var t in e)Dt(r,t,{get:e[t],enumerable:!0})},js=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Ra(e))!Ta.call(r,n)&&n!==t&&Dt(r,n,{get:()=>e[n],enumerable:!(s=Sa(e,n))||s.enumerable});return r};var Fs=(r,e,t)=>(t=r!=null?ba(Ca(r)):{},js(e||!r||!r.__esModule?Dt(t,"default",{value:r,enumerable:!0}):t,r)),Pa=r=>js(Dt({},"__esModule",{value:!0}),r);var hn=C((il,un)=>{"use strict";var je=1e3,Fe=je*60,qe=Fe*60,ke=qe*24,ro=ke*7,so=ke*365.25;un.exports=function(r,e){e=e||{};var t=typeof r;if(t==="string"&&r.length>0)return no(r);if(t==="number"&&isFinite(r))return e.long?ao(r):io(r);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(r))};function no(r){if(r=String(r),!(r.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(r);if(e){var t=parseFloat(e[1]),s=(e[2]||"ms").toLowerCase();switch(s){case"years":case"year":case"yrs":case"yr":case"y":return t*so;case"weeks":case"week":case"w":return t*ro;case"days":case"day":case"d":return t*ke;case"hours":case"hour":case"hrs":case"hr":case"h":return t*qe;case"minutes":case"minute":case"mins":case"min":case"m":return t*Fe;case"seconds":case"second":case"secs":case"sec":case"s":return t*je;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:return}}}}function io(r){var e=Math.abs(r);return e>=ke?Math.round(r/ke)+"d":e>=qe?Math.round(r/qe)+"h":e>=Fe?Math.round(r/Fe)+"m":e>=je?Math.round(r/je)+"s":r+"ms"}function ao(r){var e=Math.abs(r);return e>=ke?qt(r,e,ke,"day"):e>=qe?qt(r,e,qe,"hour"):e>=Fe?qt(r,e,Fe,"minute"):e>=je?qt(r,e,je,"second"):r+" ms"}function qt(r,e,t,s){var n=e>=t*1.5;return Math.round(r/t)+" "+s+(n?"s":"")}});var Ir=C((al,fn)=>{"use strict";function oo(r){t.debug=t,t.default=t,t.coerce=c,t.disable=a,t.enable=n,t.enabled=o,t.humanize=hn(),t.destroy=p,Object.keys(r).forEach(d=>{t[d]=r[d]}),t.names=[],t.skips=[],t.formatters={};function e(d){let l=0;for(let u=0;u<d.length;u++)l=(l<<5)-l+d.charCodeAt(u),l|=0;return t.colors[Math.abs(l)%t.colors.length]}t.selectColor=e;function t(d){let l,u=null,m,f;function h(...g){if(!h.enabled)return;let v=h,b=Number(new Date),P=b-(l||b);v.diff=P,v.prev=l,v.curr=b,l=b,g[0]=t.coerce(g[0]),typeof g[0]!="string"&&g.unshift("%O");let x=0;g[0]=g[0].replace(/%([a-zA-Z%])/g,(L,Ae)=>{if(L==="%%")return"%";x++;let ot=t.formatters[Ae];if(typeof ot=="function"){let ve=g[x];L=ot.call(v,ve),g.splice(x,1),x--}return L}),t.formatArgs.call(v,g),(v.log||t.log).apply(v,g)}return h.namespace=d,h.useColors=t.useColors(),h.color=t.selectColor(d),h.extend=s,h.destroy=t.destroy,Object.defineProperty(h,"enabled",{enumerable:!0,configurable:!1,get:()=>u!==null?u:(m!==t.namespaces&&(m=t.namespaces,f=t.enabled(d)),f),set:g=>{u=g}}),typeof t.init=="function"&&t.init(h),h}function s(d,l){let u=t(this.namespace+(typeof l>"u"?":":l)+d);return u.log=this.log,u}function n(d){t.save(d),t.namespaces=d,t.names=[],t.skips=[];let l=(typeof d=="string"?d:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let u of l)u[0]==="-"?t.skips.push(u.slice(1)):t.names.push(u)}function i(d,l){let u=0,m=0,f=-1,h=0;for(;u<d.length;)if(m<l.length&&(l[m]===d[u]||l[m]==="*"))l[m]==="*"?(f=m,h=u,m++):(u++,m++);else if(f!==-1)m=f+1,h++,u=h;else return!1;for(;m<l.length&&l[m]==="*";)m++;return m===l.length}function a(){let d=[...t.names,...t.skips.map(l=>"-"+l)].join(",");return t.enable(""),d}function o(d){for(let l of t.skips)if(i(d,l))return!1;for(let l of t.names)if(i(d,l))return!0;return!1}function c(d){return d instanceof Error?d.stack||d.message:d}function p(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.enable(t.load()),t}fn.exports=oo});var mn=C((H,$t)=>{"use strict";H.formatArgs=po;H.save=lo;H.load=uo;H.useColors=co;H.storage=ho();H.destroy=(()=>{let r=!1;return()=>{r||(r=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();H.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function co(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let r;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(r=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(r[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function po(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+$t.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;r.splice(1,0,e,"color: inherit");let t=0,s=0;r[0].replace(/%[a-zA-Z%]/g,n=>{n!=="%%"&&(t++,n==="%c"&&(s=t))}),r.splice(s,0,e)}H.log=console.debug||console.log||(()=>{});function lo(r){try{r?H.storage.setItem("debug",r):H.storage.removeItem("debug")}catch{}}function uo(){let r;try{r=H.storage.getItem("debug")||H.storage.getItem("DEBUG")}catch{}return!r&&typeof process<"u"&&"env"in process&&(r=process.env.DEBUG),r}function ho(){try{return localStorage}catch{}}$t.exports=Ir()(H);var{formatters:fo}=$t.exports;fo.j=function(r){try{return JSON.stringify(r)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var _n={};ka(_n,{createSupportsColor:()=>Lr,default:()=>yo});import Mr from"process";import mo from"os";import gn from"tty";function Y(r,e=globalThis.Deno?globalThis.Deno.args:Mr.argv){let t=r.startsWith("-")?"":r.length===1?"-":"--",s=e.indexOf(t+r),n=e.indexOf("--");return s!==-1&&(n===-1||s<n)}function go(){if(!("FORCE_COLOR"in M))return;if(M.FORCE_COLOR==="true")return 1;if(M.FORCE_COLOR==="false")return 0;if(M.FORCE_COLOR.length===0)return 1;let r=Math.min(Number.parseInt(M.FORCE_COLOR,10),3);if([0,1,2,3].includes(r))return r}function _o(r){return r===0?!1:{level:r,hasBasic:!0,has256:r>=2,has16m:r>=3}}function vo(r,{streamIsTTY:e,sniffFlags:t=!0}={}){let s=go();s!==void 0&&(Ut=s);let n=t?Ut:s;if(n===0)return 0;if(t){if(Y("color=16m")||Y("color=full")||Y("color=truecolor"))return 3;if(Y("color=256"))return 2}if("TF_BUILD"in M&&"AGENT_NAME"in M)return 1;if(r&&!e&&n===void 0)return 0;let i=n||0;if(M.TERM==="dumb")return i;if(Mr.platform==="win32"){let a=mo.release().split(".");return Number(a[0])>=10&&Number(a[2])>=10586?Number(a[2])>=14931?3:2:1}if("CI"in M)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(a=>a in M)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(a=>a in M)||M.CI_NAME==="codeship"?1:i;if("TEAMCITY_VERSION"in M)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(M.TEAMCITY_VERSION)?1:0;if(M.COLORTERM==="truecolor"||M.TERM==="xterm-kitty"||M.TERM==="xterm-ghostty"||M.TERM==="wezterm")return 3;if("TERM_PROGRAM"in M){let a=Number.parseInt((M.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(M.TERM_PROGRAM){case"iTerm.app":return a>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(M.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(M.TERM)||"COLORTERM"in M?1:i}function Lr(r,e={}){let t=vo(r,{streamIsTTY:r&&r.isTTY,...e});return _o(t)}var M,Ut,wo,yo,vn=Ea(()=>{"use strict";({env:M}=Mr);Y("no-color")||Y("no-colors")||Y("color=false")||Y("color=never")?Ut=0:(Y("color")||Y("colors")||Y("color=true")||Y("color=always"))&&(Ut=1);wo={stdout:Lr({isTTY:gn.isatty(1)}),stderr:Lr({isTTY:gn.isatty(2)})},yo=wo});var yn=C((j,Bt)=>{"use strict";var bo=Ns("tty"),zt=Ns("util");j.init=Po;j.log=To;j.formatArgs=Ro;j.save=Eo;j.load=ko;j.useColors=So;j.destroy=zt.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");j.colors=[6,2,3,4,5,1];try{let r=(vn(),Pa(_n));r&&(r.stderr||r).level>=2&&(j.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}j.inspectOpts=Object.keys(process.env).filter(r=>/^debug_/i.test(r)).reduce((r,e)=>{let t=e.substring(6).toLowerCase().replace(/_([a-z])/g,(n,i)=>i.toUpperCase()),s=process.env[e];return/^(yes|on|true|enabled)$/i.test(s)?s=!0:/^(no|off|false|disabled)$/i.test(s)?s=!1:s==="null"?s=null:s=Number(s),r[t]=s,r},{});function So(){return"colors"in j.inspectOpts?!!j.inspectOpts.colors:bo.isatty(process.stderr.fd)}function Ro(r){let{namespace:e,useColors:t}=this;if(t){let s=this.color,n="\x1B[3"+(s<8?s:"8;5;"+s),i=` ${n};1m${e} \x1B[0m`;r[0]=i+r[0].split(`
|
|
2
|
+
var Ra=Object.create;var It=Object.defineProperty;var Ca=Object.getOwnPropertyDescriptor;var Ta=Object.getOwnPropertyNames;var Ea=Object.getPrototypeOf,ka=Object.prototype.hasOwnProperty;var js=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});var Pa=(r,e,t)=>()=>{if(t)throw t[0];try{return r&&(e=r(r=0)),e}catch(s){throw t=[s],s}};var C=(r,e)=>()=>{try{return e||r((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}},xa=(r,e)=>{for(var t in e)It(r,t,{get:e[t],enumerable:!0})},Fs=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Ta(e))!ka.call(r,n)&&n!==t&&It(r,n,{get:()=>e[n],enumerable:!(s=Ca(e,n))||s.enumerable});return r};var qs=(r,e,t)=>(t=r!=null?Ra(Ea(r)):{},Fs(e||!r||!r.__esModule?It(t,"default",{value:r,enumerable:!0}):t,r)),Da=r=>Fs(It({},"__esModule",{value:!0}),r);var fn=C((ol,hn)=>{"use strict";var je=1e3,Fe=je*60,qe=Fe*60,ke=qe*24,no=ke*7,io=ke*365.25;hn.exports=function(r,e){e=e||{};var t=typeof r;if(t==="string"&&r.length>0)return ao(r);if(t==="number"&&isFinite(r))return e.long?co(r):oo(r);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(r))};function ao(r){if(r=String(r),!(r.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(r);if(e){var t=parseFloat(e[1]),s=(e[2]||"ms").toLowerCase();switch(s){case"years":case"year":case"yrs":case"yr":case"y":return t*io;case"weeks":case"week":case"w":return t*no;case"days":case"day":case"d":return t*ke;case"hours":case"hour":case"hrs":case"hr":case"h":return t*qe;case"minutes":case"minute":case"mins":case"min":case"m":return t*Fe;case"seconds":case"second":case"secs":case"sec":case"s":return t*je;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:return}}}}function oo(r){var e=Math.abs(r);return e>=ke?Math.round(r/ke)+"d":e>=qe?Math.round(r/qe)+"h":e>=Fe?Math.round(r/Fe)+"m":e>=je?Math.round(r/je)+"s":r+"ms"}function co(r){var e=Math.abs(r);return e>=ke?$t(r,e,ke,"day"):e>=qe?$t(r,e,qe,"hour"):e>=Fe?$t(r,e,Fe,"minute"):e>=je?$t(r,e,je,"second"):r+" ms"}function $t(r,e,t,s){var n=e>=t*1.5;return Math.round(r/t)+" "+s+(n?"s":"")}});var Lr=C((cl,mn)=>{"use strict";function po(r){t.debug=t,t.default=t,t.coerce=c,t.disable=a,t.enable=n,t.enabled=o,t.humanize=fn(),t.destroy=p,Object.keys(r).forEach(d=>{t[d]=r[d]}),t.names=[],t.skips=[],t.formatters={};function e(d){let l=0;for(let u=0;u<d.length;u++)l=(l<<5)-l+d.charCodeAt(u),l|=0;return t.colors[Math.abs(l)%t.colors.length]}t.selectColor=e;function t(d){let l,u=null,m,f;function h(...g){if(!h.enabled)return;let v=h,b=Number(new Date),P=b-(l||b);v.diff=P,v.prev=l,v.curr=b,l=b,g[0]=t.coerce(g[0]),typeof g[0]!="string"&&g.unshift("%O");let x=0;g[0]=g[0].replace(/%([a-zA-Z%])/g,(L,Ae)=>{if(L==="%%")return"%";x++;let ot=t.formatters[Ae];if(typeof ot=="function"){let ve=g[x];L=ot.call(v,ve),g.splice(x,1),x--}return L}),t.formatArgs.call(v,g),(v.log||t.log).apply(v,g)}return h.namespace=d,h.useColors=t.useColors(),h.color=t.selectColor(d),h.extend=s,h.destroy=t.destroy,Object.defineProperty(h,"enabled",{enumerable:!0,configurable:!1,get:()=>u!==null?u:(m!==t.namespaces&&(m=t.namespaces,f=t.enabled(d)),f),set:g=>{u=g}}),typeof t.init=="function"&&t.init(h),h}function s(d,l){let u=t(this.namespace+(typeof l>"u"?":":l)+d);return u.log=this.log,u}function n(d){t.save(d),t.namespaces=d,t.names=[],t.skips=[];let l=(typeof d=="string"?d:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let u of l)u[0]==="-"?t.skips.push(u.slice(1)):t.names.push(u)}function i(d,l){let u=0,m=0,f=-1,h=0;for(;u<d.length;)if(m<l.length&&(l[m]===d[u]||l[m]==="*"))l[m]==="*"?(f=m,h=u,m++):(u++,m++);else if(f!==-1)m=f+1,h++,u=h;else return!1;for(;m<l.length&&l[m]==="*";)m++;return m===l.length}function a(){let d=[...t.names,...t.skips.map(l=>"-"+l)].join(",");return t.enable(""),d}function o(d){for(let l of t.skips)if(i(d,l))return!1;for(let l of t.names)if(i(d,l))return!0;return!1}function c(d){return d instanceof Error?d.stack||d.message:d}function p(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.enable(t.load()),t}mn.exports=po});var gn=C((H,Ut)=>{"use strict";H.formatArgs=uo;H.save=ho;H.load=fo;H.useColors=lo;H.storage=mo();H.destroy=(()=>{let r=!1;return()=>{r||(r=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();H.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function lo(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let r;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(r=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(r[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function uo(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+Ut.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;r.splice(1,0,e,"color: inherit");let t=0,s=0;r[0].replace(/%[a-zA-Z%]/g,n=>{n!=="%%"&&(t++,n==="%c"&&(s=t))}),r.splice(s,0,e)}H.log=console.debug||console.log||(()=>{});function ho(r){try{r?H.storage.setItem("debug",r):H.storage.removeItem("debug")}catch{}}function fo(){let r;try{r=H.storage.getItem("debug")||H.storage.getItem("DEBUG")}catch{}return!r&&typeof process<"u"&&"env"in process&&(r=process.env.DEBUG),r}function mo(){try{return localStorage}catch{}}Ut.exports=Lr()(H);var{formatters:go}=Ut.exports;go.j=function(r){try{return JSON.stringify(r)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var vn={};xa(vn,{createSupportsColor:()=>Mr,default:()=>So});import Or from"process";import _o from"os";import _n from"tty";function Y(r,e=globalThis.Deno?globalThis.Deno.args:Or.argv){let t=r.startsWith("-")?"":r.length===1?"-":"--",s=e.indexOf(t+r),n=e.indexOf("--");return s!==-1&&(n===-1||s<n)}function vo(){if(!("FORCE_COLOR"in M))return;if(M.FORCE_COLOR==="true")return 1;if(M.FORCE_COLOR==="false")return 0;if(M.FORCE_COLOR.length===0)return 1;let r=Math.min(Number.parseInt(M.FORCE_COLOR,10),3);if([0,1,2,3].includes(r))return r}function wo(r){return r===0?!1:{level:r,hasBasic:!0,has256:r>=2,has16m:r>=3}}function yo(r,{streamIsTTY:e,sniffFlags:t=!0}={}){let s=vo();s!==void 0&&(zt=s);let n=t?zt:s;if(n===0)return 0;if(t){if(Y("color=16m")||Y("color=full")||Y("color=truecolor"))return 3;if(Y("color=256"))return 2}if("TF_BUILD"in M&&"AGENT_NAME"in M)return 1;if(r&&!e&&n===void 0)return 0;let i=n||0;if(M.TERM==="dumb")return i;if(Or.platform==="win32"){let a=_o.release().split(".");return Number(a[0])>=10&&Number(a[2])>=10586?Number(a[2])>=14931?3:2:1}if("CI"in M)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(a=>a in M)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(a=>a in M)||M.CI_NAME==="codeship"?1:i;if("TEAMCITY_VERSION"in M)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(M.TEAMCITY_VERSION)?1:0;if(M.COLORTERM==="truecolor"||M.TERM==="xterm-kitty"||M.TERM==="xterm-ghostty"||M.TERM==="wezterm")return 3;if("TERM_PROGRAM"in M){let a=Number.parseInt((M.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(M.TERM_PROGRAM){case"iTerm.app":return a>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(M.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(M.TERM)||"COLORTERM"in M?1:i}function Mr(r,e={}){let t=yo(r,{streamIsTTY:r&&r.isTTY,...e});return wo(t)}var M,zt,bo,So,wn=Pa(()=>{"use strict";({env:M}=Or);Y("no-color")||Y("no-colors")||Y("color=false")||Y("color=never")?zt=0:(Y("color")||Y("colors")||Y("color=true")||Y("color=always"))&&(zt=1);bo={stdout:Mr({isTTY:_n.isatty(1)}),stderr:Mr({isTTY:_n.isatty(2)})},So=bo});var bn=C((j,Wt)=>{"use strict";var Ro=js("tty"),Bt=js("util");j.init=Do;j.log=ko;j.formatArgs=To;j.save=Po;j.load=xo;j.useColors=Co;j.destroy=Bt.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");j.colors=[6,2,3,4,5,1];try{let r=(wn(),Da(vn));r&&(r.stderr||r).level>=2&&(j.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}j.inspectOpts=Object.keys(process.env).filter(r=>/^debug_/i.test(r)).reduce((r,e)=>{let t=e.substring(6).toLowerCase().replace(/_([a-z])/g,(n,i)=>i.toUpperCase()),s=process.env[e];return/^(yes|on|true|enabled)$/i.test(s)?s=!0:/^(no|off|false|disabled)$/i.test(s)?s=!1:s==="null"?s=null:s=Number(s),r[t]=s,r},{});function Co(){return"colors"in j.inspectOpts?!!j.inspectOpts.colors:Ro.isatty(process.stderr.fd)}function To(r){let{namespace:e,useColors:t}=this;if(t){let s=this.color,n="\x1B[3"+(s<8?s:"8;5;"+s),i=` ${n};1m${e} \x1B[0m`;r[0]=i+r[0].split(`
|
|
3
3
|
`).join(`
|
|
4
|
-
`+i),r.push(n+"m+"+
|
|
5
|
-
`)}function
|
|
6
|
-
`).map(e=>e.trim()).join(" ")};wn.O=function(r){return this.inspectOpts.colors=this.useColors,zt.inspect(r,this.inspectOpts)}});var dt=C((pl,Or)=>{"use strict";typeof process>"u"||process.type==="renderer"||process.browser===!0||process.__nwjs?Or.exports=mn():Or.exports=yn()});var Sn=C(bn=>{"use strict";Object.defineProperty(bn,"__esModule",{value:!0})});var U=C(Wt=>{"use strict";Object.defineProperty(Wt,"__esModule",{value:!0});Wt.Logger=void 0;var $e=dt(),Ue="media-client",Ar=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,$e.default)(`${Ue}:${e}`),this._warn=(0,$e.default)(`${Ue}:WARN:${e}`),this._error=(0,$e.default)(`${Ue}:ERROR:${e}`)):(this._debug=(0,$e.default)(Ue),this._warn=(0,$e.default)(`${Ue}:WARN`),this._error=(0,$e.default)(`${Ue}:ERROR`)),this._debug.log=console.info.bind(console),this._warn.log=console.warn.bind(console),this._error.log=console.error.bind(console)}get debug(){return this._debug}get warn(){return this._warn}get error(){return this._error}};Wt.Logger=Ar});var Mn=C((hl,Nr)=>{"use strict";var ze=typeof Reflect=="object"?Reflect:null,Rn=ze&&typeof ze.apply=="function"?ze.apply:function(e,t,s){return Function.prototype.apply.call(e,t,s)},Ht;ze&&typeof ze.ownKeys=="function"?Ht=ze.ownKeys:Object.getOwnPropertySymbols?Ht=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Ht=function(e){return Object.getOwnPropertyNames(e)};function xo(r){console&&console.warn&&console.warn(r)}var Tn=Number.isNaN||function(e){return e!==e};function D(){D.init.call(this)}Nr.exports=D;Nr.exports.once=Mo;D.EventEmitter=D;D.prototype._events=void 0;D.prototype._eventsCount=0;D.prototype._maxListeners=void 0;var Cn=10;function Vt(r){if(typeof r!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof r)}Object.defineProperty(D,"defaultMaxListeners",{enumerable:!0,get:function(){return Cn},set:function(r){if(typeof r!="number"||r<0||Tn(r))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+r+".");Cn=r}});D.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};D.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||Tn(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 En(r){return r._maxListeners===void 0?D.defaultMaxListeners:r._maxListeners}D.prototype.getMaxListeners=function(){return En(this)};D.prototype.emit=function(e){for(var t=[],s=1;s<arguments.length;s++)t.push(arguments[s]);var n=e==="error",i=this._events;if(i!==void 0)n=n&&i.error===void 0;else if(!n)return!1;if(n){var a;if(t.length>0&&(a=t[0]),a instanceof Error)throw a;var o=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw o.context=a,o}var c=i[e];if(c===void 0)return!1;if(typeof c=="function")Rn(c,this,t);else for(var p=c.length,d=In(c,p),s=0;s<p;++s)Rn(d[s],this,t);return!0};function kn(r,e,t,s){var n,i,a;if(Vt(t),i=r._events,i===void 0?(i=r._events=Object.create(null),r._eventsCount=0):(i.newListener!==void 0&&(r.emit("newListener",e,t.listener?t.listener:t),i=r._events),a=i[e]),a===void 0)a=i[e]=t,++r._eventsCount;else if(typeof a=="function"?a=i[e]=s?[t,a]:[a,t]:s?a.unshift(t):a.push(t),n=En(r),n>0&&a.length>n&&!a.warned){a.warned=!0;var o=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");o.name="MaxListenersExceededWarning",o.emitter=r,o.type=e,o.count=a.length,xo(o)}return r}D.prototype.addListener=function(e,t){return kn(this,e,t,!1)};D.prototype.on=D.prototype.addListener;D.prototype.prependListener=function(e,t){return kn(this,e,t,!0)};function Do(){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 Pn(r,e,t){var s={fired:!1,wrapFn:void 0,target:r,type:e,listener:t},n=Do.bind(s);return n.listener=t,s.wrapFn=n,n}D.prototype.once=function(e,t){return Vt(t),this.on(e,Pn(this,e,t)),this};D.prototype.prependOnceListener=function(e,t){return Vt(t),this.prependListener(e,Pn(this,e,t)),this};D.prototype.removeListener=function(e,t){var s,n,i,a,o;if(Vt(t),n=this._events,n===void 0)return this;if(s=n[e],s===void 0)return this;if(s===t||s.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete n[e],n.removeListener&&this.emit("removeListener",e,s.listener||t));else if(typeof s!="function"){for(i=-1,a=s.length-1;a>=0;a--)if(s[a]===t||s[a].listener===t){o=s[a].listener,i=a;break}if(i<0)return this;i===0?s.shift():Io(s,i),s.length===1&&(n[e]=s[0]),n.removeListener!==void 0&&this.emit("removeListener",e,o||t)}return this};D.prototype.off=D.prototype.removeListener;D.prototype.removeAllListeners=function(e){var t,s,n;if(s=this._events,s===void 0)return this;if(s.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):s[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete s[e]),this;if(arguments.length===0){var i=Object.keys(s),a;for(n=0;n<i.length;++n)a=i[n],a!=="removeListener"&&this.removeAllListeners(a);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(t=s[e],typeof t=="function")this.removeListener(e,t);else if(t!==void 0)for(n=t.length-1;n>=0;n--)this.removeListener(e,t[n]);return this};function xn(r,e,t){var s=r._events;if(s===void 0)return[];var n=s[e];return n===void 0?[]:typeof n=="function"?t?[n.listener||n]:[n]:t?Lo(n):In(n,n.length)}D.prototype.listeners=function(e){return xn(this,e,!0)};D.prototype.rawListeners=function(e){return xn(this,e,!1)};D.listenerCount=function(r,e){return typeof r.listenerCount=="function"?r.listenerCount(e):Dn.call(r,e)};D.prototype.listenerCount=Dn;function Dn(r){var e=this._events;if(e!==void 0){var t=e[r];if(typeof t=="function")return 1;if(t!==void 0)return t.length}return 0}D.prototype.eventNames=function(){return this._eventsCount>0?Ht(this._events):[]};function In(r,e){for(var t=new Array(e),s=0;s<e;++s)t[s]=r[s];return t}function Io(r,e){for(;e+1<r.length;e++)r[e]=r[e+1];r.pop()}function Lo(r){for(var e=new Array(r.length),t=0;t<e.length;++t)e[t]=r[t].listener||r[t];return e}function Mo(r,e){return new Promise(function(t,s){function n(a){r.removeListener(e,i),s(a)}function i(){typeof r.removeListener=="function"&&r.removeListener("error",n),t([].slice.call(arguments))}Ln(r,e,i,{once:!0}),e!=="error"&&Oo(r,n,{once:!0})})}function Oo(r,e,t){typeof r.on=="function"&&Ln(r,"error",e,t)}function Ln(r,e,t,s){if(typeof r.on=="function")s.once?r.once(e,t):r.on(e,t);else if(typeof r.addEventListener=="function")r.addEventListener(e,function n(i){s.once&&r.removeEventListener(e,n),t(i)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof r)}});var V=C(Gt=>{"use strict";Object.defineProperty(Gt,"__esModule",{value:!0});Gt.EnhancedEventEmitter=void 0;var Ao=Mn(),No=U(),jo=new No.Logger("EnhancedEventEmitter"),jr=class extends Ao.EventEmitter{constructor(){super(),this.setMaxListeners(1/0)}close(){super.removeAllListeners()}emit(e,...t){return super.emit(e,...t)}safeEmit(e,...t){try{return super.emit(e,...t)}catch(s){jo.error("safeEmit() | event listener threw an error [eventName:%s]:%o",e,s);try{super.emit("listenererror",e,s)}catch{}return!!super.listenerCount(e)}}on(e,t){return super.on(e,t),this}off(e,t){return super.off(e,t),this}addListener(e,t){return super.on(e,t),this}prependListener(e,t){return super.prependListener(e,t),this}once(e,t){return super.once(e,t),this}prependOnceListener(e,t){return super.prependOnceListener(e,t),this}removeListener(e,t){return super.off(e,t),this}removeAllListeners(e){return super.removeAllListeners(e),this}listenerCount(e){return super.listenerCount(e)}listeners(e){return super.listeners(e)}rawListeners(e){return super.rawListeners(e)}};Gt.EnhancedEventEmitter=jr});var Q=C(Be=>{"use strict";Object.defineProperty(Be,"__esModule",{value:!0});Be.InvalidStateError=Be.UnsupportedError=void 0;var Fr=class r extends Error{constructor(e){super(e),this.name="UnsupportedError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,r):this.stack=new Error(e).stack}};Be.UnsupportedError=Fr;var qr=class r extends Error{constructor(e){super(e),this.name="InvalidStateError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,r):this.stack=new Error(e).stack}};Be.InvalidStateError=qr});var Pe=C(pt=>{"use strict";Object.defineProperty(pt,"__esModule",{value:!0});pt.clone=Fo;pt.generateRandomNumber=qo;pt.deepFreeze=On;function Fo(r){if(r!==void 0)return Number.isNaN(r)?NaN:typeof structuredClone=="function"?structuredClone(r):JSON.parse(JSON.stringify(r))}function qo(){return Math.round(Math.random()*1e7)}function On(r){let e=Reflect.ownKeys(r);for(let t of e){let s=r[t];(s&&typeof s=="object"||typeof s=="function")&&On(s)}return Object.freeze(r)}});var An=C(Kt=>{"use strict";Object.defineProperty(Kt,"__esModule",{value:!0});Kt.Logger=void 0;var We=dt(),He="h264-profile-level-id",$r=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,We.default)(`${He}:${e}`),this._warn=(0,We.default)(`${He}:WARN:${e}`),this._error=(0,We.default)(`${He}:ERROR:${e}`)):(this._debug=(0,We.default)(He),this._warn=(0,We.default)(`${He}:WARN`),this._error=(0,We.default)(`${He}:ERROR`)),this._debug.log=console.info.bind(console),this._warn.log=console.warn.bind(console),this._error.log=console.error.bind(console)}get debug(){return this._debug}get warn(){return this._warn}get error(){return this._error}};Kt.Logger=$r});var Un=C(F=>{"use strict";Object.defineProperty(F,"__esModule",{value:!0});F.ProfileLevelId=F.Level=F.Profile=void 0;F.parseProfileLevelId=qn;F.profileLevelIdToString=$n;F.profileToString=Bo;F.levelToString=Wo;F.parseSdpProfileLevelId=xe;F.isSameProfile=Ho;F.isSameProfileAndLevel=Vo;F.generateProfileLevelIdStringForAnswer=Go;F.supportedLevel=Ko;var $o=An(),se=new $o.Logger,I;(function(r){r[r.ConstrainedBaseline=1]="ConstrainedBaseline",r[r.Baseline=2]="Baseline",r[r.Main=3]="Main",r[r.ConstrainedHigh=4]="ConstrainedHigh",r[r.High=5]="High",r[r.PredictiveHigh444=6]="PredictiveHigh444"})(I||(F.Profile=I={}));var _;(function(r){r[r.L1_b=0]="L1_b",r[r.L1=10]="L1",r[r.L1_1=11]="L1_1",r[r.L1_2=12]="L1_2",r[r.L1_3=13]="L1_3",r[r.L2=20]="L2",r[r.L2_1=21]="L2_1",r[r.L2_2=22]="L2_2",r[r.L3=30]="L3",r[r.L3_1=31]="L3_1",r[r.L3_2=32]="L3_2",r[r.L4=40]="L4",r[r.L4_1=41]="L4_1",r[r.L4_2=42]="L4_2",r[r.L5=50]="L5",r[r.L5_1=51]="L5_1",r[r.L5_2=52]="L5_2"})(_||(F.Level=_={}));var Ve=class{profile;level;constructor(e,t){this.profile=e,this.level=t}};F.ProfileLevelId=Ve;var Uo=new Ve(I.ConstrainedBaseline,_.L3_1),te=class{mask;masked_value;constructor(e){this.mask=~jn("x",e),this.masked_value=jn("1",e)}isMatch(e){return this.masked_value===(e&this.mask)}},re=class{profile_idc;profile_iop;profile;constructor(e,t,s){this.profile_idc=e,this.profile_iop=t,this.profile=s}},zo=[new re(66,new te("x1xx0000"),I.ConstrainedBaseline),new re(77,new te("1xxx0000"),I.ConstrainedBaseline),new re(88,new te("11xx0000"),I.ConstrainedBaseline),new re(66,new te("x0xx0000"),I.Baseline),new re(88,new te("10xx0000"),I.Baseline),new re(77,new te("0x0x0000"),I.Main),new re(100,new te("00000000"),I.High),new re(100,new te("00001100"),I.ConstrainedHigh),new re(244,new te("00000000"),I.PredictiveHigh444)],Nn=[{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:_.L1},{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:_.L1_b},{max_macroblocks_per_second:3e3,max_macroblock_frame_size:396,level:_.L1_1},{max_macroblocks_per_second:6e3,max_macroblock_frame_size:396,level:_.L1_2},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:_.L1_3},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:_.L2},{max_macroblocks_per_second:19800,max_macroblock_frame_size:792,level:_.L2_1},{max_macroblocks_per_second:20250,max_macroblock_frame_size:1620,level:_.L2_2},{max_macroblocks_per_second:40500,max_macroblock_frame_size:1620,level:_.L3},{max_macroblocks_per_second:108e3,max_macroblock_frame_size:3600,level:_.L3_1},{max_macroblocks_per_second:216e3,max_macroblock_frame_size:5120,level:_.L3_2},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:_.L4},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:_.L4_1},{max_macroblocks_per_second:522240,max_macroblock_frame_size:8704,level:_.L4_2},{max_macroblocks_per_second:589824,max_macroblock_frame_size:22080,level:_.L5},{max_macroblocks_per_second:983040,max_macroblock_frame_size:36864,level:_.L5_1},{max_macroblocks_per_second:2073600,max_macroblock_frame_size:36864,level:_.L5_2}];function qn(r){if(typeof r!="string"||r.length!==6)return;let t=parseInt(r,16);if(t===0)return;let s=t&255,n=t>>8&255,i=t>>16&255,a;switch(s){case _.L1_1:{a=(n&16)!==0?_.L1_b:_.L1_1;break}case _.L1:case _.L1_2:case _.L1_3:case _.L2:case _.L2_1:case _.L2_2:case _.L3:case _.L3_1:case _.L3_2:case _.L4:case _.L4_1:case _.L4_2:case _.L5:case _.L5_1:case _.L5_2:{a=s;break}default:{se.warn(`parseProfileLevelId() | unrecognized level_idc [str:${r}, level_idc:${s}]`);return}}for(let o of zo)if(i===o.profile_idc&&o.profile_iop.isMatch(n))return se.debug(`parseProfileLevelId() | result [str:${r}, profile:${o.profile}, level:${a}]`),new Ve(o.profile,a);se.warn(`parseProfileLevelId() | unrecognized profile_idc/profile_iop combination [str:${r}, profile_idc:${i}, profile_iop:${n}]`)}function $n(r){if(r.level==_.L1_b)switch(r.profile){case I.ConstrainedBaseline:return"42f00b";case I.Baseline:return"42100b";case I.Main:return"4d100b";default:{se.warn(`profileLevelIdToString() | Level 1_b not is allowed for profile ${r.profile}`);return}}let e;switch(r.profile){case I.ConstrainedBaseline:{e="42e0";break}case I.Baseline:{e="4200";break}case I.Main:{e="4d00";break}case I.ConstrainedHigh:{e="640c";break}case I.High:{e="6400";break}case I.PredictiveHigh444:{e="f400";break}default:{se.warn(`profileLevelIdToString() | unrecognized profile ${r.profile}`);return}}let t=r.level.toString(16);return t.length===1&&(t=`0${t}`),`${e}${t}`}function Bo(r){switch(r){case I.ConstrainedBaseline:return"ConstrainedBaseline";case I.Baseline:return"Baseline";case I.Main:return"Main";case I.ConstrainedHigh:return"ConstrainedHigh";case I.High:return"High";case I.PredictiveHigh444:return"PredictiveHigh444";default:{se.warn(`profileToString() | unrecognized profile ${r}`);return}}}function Wo(r){switch(r){case _.L1_b:return"1b";case _.L1:return"1";case _.L1_1:return"1.1";case _.L1_2:return"1.2";case _.L1_3:return"1.3";case _.L2:return"2";case _.L2_1:return"2.1";case _.L2_2:return"2.2";case _.L3:return"3";case _.L3_1:return"3.1";case _.L3_2:return"3.2";case _.L4:return"4";case _.L4_1:return"4.1";case _.L4_2:return"4.2";case _.L5:return"5";case _.L5_1:return"5.1";case _.L5_2:return"5.2";default:{se.warn(`levelToString() | unrecognized level ${r}`);return}}}function xe(r={}){let e=r["profile-level-id"];return e?qn(e):Uo}function Ho(r={},e={}){let t=xe(r),s=xe(e);return!!(t&&s&&t.profile===s.profile)}function Vo(r={},e={}){let t=xe(r),s=xe(e);return!!(t&&s&&t.profile===s.profile&&t.level==s.level)}function Go(r={},e={}){if(!r["profile-level-id"]&&!e["profile-level-id"]){se.warn("generateProfileLevelIdStringForAnswer() | profile-level-id missing in local and remote params");return}let t=xe(r),s=xe(e);if(!t)throw new TypeError("invalid local_profile_level_id");if(!s)throw new TypeError("invalid remote_profile_level_id");if(t.profile!==s.profile)throw new TypeError("H264 Profile mismatch");let n=Fn(r)&&Fn(e),i=t.level,a=s.level,o=Qo(i,a),c=n?i:o;return se.debug(`generateProfileLevelIdStringForAnswer() | result [profile:${t.profile}, level:${c}]`),$n(new Ve(t.profile,c))}function Ko(r,e){for(let s=Nn.length-1;s>=0;--s){let n=Nn[s];if(n.max_macroblock_frame_size*256<=r&&n.max_macroblocks_per_second<=e*n.max_macroblock_frame_size)return se.debug(`supportedLevel() | result [max_frame_pixel_count:${r}, max_fps:${e}, level:${n.level}]`),n.level}se.warn(`supportedLevel() | no level supported [max_frame_pixel_count:${r}, max_fps:${e}]`)}function jn(r,e){return+(e[0]===r)<<7|+(e[1]===r)<<6|+(e[2]===r)<<5|+(e[3]===r)<<4|+(e[4]===r)<<3|+(e[5]===r)<<2|+(e[6]===r)<<1|+(e[7]===r)<<0}function Yo(r,e){return r===_.L1_b?e!==_.L1&&e!==_.L1_b:e===_.L1_b?r!==_.L1:r<e}function Qo(r,e){return Yo(r,e)?r:e}function Fn(r={}){let e=r["level-asymmetry-allowed"];return e===!0||e===1||e==="1"}});var ie=C(z=>{"use strict";Object.defineProperty(z,"__esModule",{value:!0});z.validateAndNormalizeRtpCapabilities=tc;z.validateAndNormalizeRtpParameters=zr;z.validateAndNormalizeSctpStreamParameters=rc;z.validateSctpCapabilities=sc;z.getExtendedRtpCapabilities=nc;z.getRecvRtpCapabilities=ic;z.getSendRtpCapabilities=ac;z.getSendingRtpParameters=oc;z.getSendingRemoteRtpParameters=cc;z.reduceCodecs=dc;z.generateProbatorRtpParameters=pc;z.canSend=lc;z.canReceive=uc;var zn=Un(),Jo=Pe(),Xo="probator",Zo=1234,ec=127;function tc(r){if(typeof r!="object")throw new TypeError("caps is not an object");if(r.codecs&&!Array.isArray(r.codecs))throw new TypeError("caps.codecs is not an array");r.codecs||(r.codecs=[]);for(let e of r.codecs)hc(e);if(r.headerExtensions&&!Array.isArray(r.headerExtensions))throw new TypeError("caps.headerExtensions is not an array");r.headerExtensions||(r.headerExtensions=[]);for(let e of r.headerExtensions)fc(e)}function zr(r){if(typeof r!="object")throw new TypeError("params is not an object");if(r.mid&&typeof r.mid!="string")throw new TypeError("params.mid is not a string");if(!Array.isArray(r.codecs))throw new TypeError("missing params.codecs");for(let e of r.codecs)mc(e);if(r.headerExtensions&&!Array.isArray(r.headerExtensions))throw new TypeError("params.headerExtensions is not an array");r.headerExtensions||(r.headerExtensions=[]);for(let e of r.headerExtensions)gc(e);if(r.encodings&&!Array.isArray(r.encodings))throw new TypeError("params.encodings is not an array");r.encodings||(r.encodings=[]);for(let e of r.encodings)_c(e);if(r.rtcp&&typeof r.rtcp!="object")throw new TypeError("params.rtcp is not an object");r.rtcp||(r.rtcp={}),vc(r.rtcp)}function rc(r){if(typeof r!="object")throw new TypeError("params is not an object");if(typeof r.streamId!="number")throw new TypeError("missing params.streamId");let e=!1;if(typeof r.ordered=="boolean"?e=!0:r.ordered=!0,r.maxPacketLifeTime&&typeof r.maxPacketLifeTime!="number")throw new TypeError("invalid params.maxPacketLifeTime");if(r.maxRetransmits&&typeof r.maxRetransmits!="number")throw new TypeError("invalid params.maxRetransmits");if(r.maxPacketLifeTime&&r.maxRetransmits)throw new TypeError("cannot provide both maxPacketLifeTime and maxRetransmits");if(e&&r.ordered&&(r.maxPacketLifeTime||r.maxRetransmits))throw new TypeError("cannot be ordered with maxPacketLifeTime or maxRetransmits");if(!e&&(r.maxPacketLifeTime||r.maxRetransmits)&&(r.ordered=!1),r.label&&typeof r.label!="string")throw new TypeError("invalid params.label");if(r.protocol&&typeof r.protocol!="string")throw new TypeError("invalid params.protocol")}function sc(r){if(typeof r!="object")throw new TypeError("caps is not an object");if(!r.numStreams||typeof r.numStreams!="object")throw new TypeError("missing caps.numStreams");wc(r.numStreams)}function nc(r,e,t){let s={codecs:[],headerExtensions:[]};if(t)for(let n of r.codecs??[]){if(Ge(n))continue;let i=(e.codecs??[]).find(o=>Ur(o,n,{strict:!0,modify:!0}));if(!i)continue;let a={kind:n.kind,mimeType:n.mimeType,clockRate:n.clockRate,channels:n.channels,localPayloadType:n.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:i.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:n.parameters??{},remoteParameters:i.parameters??{},rtcpFeedback:Bn(n,i)};s.codecs.push(a)}else for(let n of e.codecs??[]){if(Ge(n))continue;let i=(r.codecs??[]).find(o=>Ur(o,n,{strict:!0,modify:!0}));if(!i)continue;let a={kind:i.kind,mimeType:i.mimeType,clockRate:i.clockRate,channels:i.channels,localPayloadType:i.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:n.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:i.parameters??{},remoteParameters:n.parameters??{},rtcpFeedback:Bn(i,n)};s.codecs.push(a)}for(let n of s.codecs){let i=r.codecs.find(o=>Ge(o)&&o.parameters?.apt===n.localPayloadType),a=e.codecs.find(o=>Ge(o)&&o.parameters?.apt===n.remotePayloadType);i&&a&&(n.localRtxPayloadType=i.preferredPayloadType,n.remoteRtxPayloadType=a.preferredPayloadType)}for(let n of e.headerExtensions){let i=r.headerExtensions.find(o=>yc(o,n));if(!i)continue;let a={kind:n.kind,uri:n.uri,sendId:i.preferredId,recvId:n.preferredId,encrypt:i.preferredEncrypt??!1,direction:"sendrecv"};switch(n.direction){case"sendrecv":{a.direction="sendrecv";break}case"recvonly":{a.direction="sendonly";break}case"sendonly":{a.direction="recvonly";break}case"inactive":{a.direction="inactive";break}}s.headerExtensions.push(a)}return s}function ic(r){return Hn({direction:"recvonly",extendedRtpCapabilities:r})}function ac(r){return Hn({direction:"sendonly",extendedRtpCapabilities:r})}function oc(r,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let s of e.codecs){if(s.kind!==r)continue;let n={mimeType:s.mimeType,payloadType:s.localPayloadType,clockRate:s.clockRate,channels:s.channels,parameters:s.localParameters,rtcpFeedback:s.rtcpFeedback};if(t.codecs.push(n),s.localRtxPayloadType){let i={mimeType:`${s.kind}/rtx`,payloadType:s.localRtxPayloadType,clockRate:s.clockRate,parameters:{apt:s.localPayloadType},rtcpFeedback:[]};t.codecs.push(i)}}for(let s of e.headerExtensions){if(s.kind&&s.kind!==r||s.direction!=="sendrecv"&&s.direction!=="sendonly")continue;let n={uri:s.uri,id:s.sendId,encrypt:s.encrypt,parameters:{}};t.headerExtensions.push(n)}return t}function cc(r,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let s of e.codecs){if(s.kind!==r)continue;let n={mimeType:s.mimeType,payloadType:s.localPayloadType,clockRate:s.clockRate,channels:s.channels,parameters:s.remoteParameters,rtcpFeedback:s.rtcpFeedback};if(t.codecs.push(n),s.localRtxPayloadType){let i={mimeType:`${s.kind}/rtx`,payloadType:s.localRtxPayloadType,clockRate:s.clockRate,parameters:{apt:s.localPayloadType},rtcpFeedback:[]};t.codecs.push(i)}}for(let s of e.headerExtensions){if(s.kind&&s.kind!==r||s.direction!=="sendrecv"&&s.direction!=="sendonly")continue;let n={uri:s.uri,id:s.sendId,encrypt:s.encrypt,parameters:{}};t.headerExtensions.push(n)}if(t.headerExtensions.some(s=>s.uri==="http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"))for(let s of t.codecs)s.rtcpFeedback=(s.rtcpFeedback??[]).filter(n=>n.type!=="goog-remb");else if(t.headerExtensions.some(s=>s.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"))for(let s of t.codecs)s.rtcpFeedback=(s.rtcpFeedback??[]).filter(n=>n.type!=="transport-cc");else for(let s of t.codecs)s.rtcpFeedback=(s.rtcpFeedback??[]).filter(n=>n.type!=="transport-cc"&&n.type!=="goog-remb");return t}function dc(r,e){let t=[];if(!e)t.push(r[0]),Ge(r[1])&&t.push(r[1]);else{for(let s=0;s<r.length;++s)if(Ur(r[s],e,{strict:!0})){t.push(r[s]),Ge(r[s+1])&&t.push(r[s+1]);break}if(t.length===0)throw new TypeError("no matching codec found")}return t}function pc(r){r=Jo.clone(r),zr(r);let e={mid:Xo,codecs:[],headerExtensions:[],encodings:[{ssrc:Zo}],rtcp:{cname:"probator"}};return e.codecs.push(r.codecs[0]),e.codecs[0].payloadType=ec,e.headerExtensions=r.headerExtensions,e}function lc(r,e){return(e.codecs??[]).some(t=>t.kind===r)}function uc(r,e){if(zr(r),r.codecs.length===0)return!1;let t=r.codecs[0];return(e.codecs??[]).some(s=>s.preferredPayloadType===t.payloadType)}function hc(r){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof r!="object")throw new TypeError("codec is not an object");if(!r.mimeType||typeof r.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(r.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(r.kind=t[1].toLowerCase(),typeof r.preferredPayloadType!="number")throw new TypeError("missing codec.preferredPayloadType");if(typeof r.clockRate!="number")throw new TypeError("missing codec.clockRate");r.kind==="audio"?typeof r.channels!="number"&&(r.channels=1):delete r.channels,(!r.parameters||typeof r.parameters!="object")&&(r.parameters={});for(let s of Object.keys(r.parameters)){let n=r.parameters[s];if(n===void 0&&(r.parameters[s]="",n=""),typeof n!="string"&&typeof n!="number")throw new TypeError(`invalid codec parameter [key:${s}s, value:${n}]`);if(s==="apt"&&typeof n!="number")throw new TypeError("invalid codec apt parameter")}(!r.rtcpFeedback||!Array.isArray(r.rtcpFeedback))&&(r.rtcpFeedback=[]);for(let s of r.rtcpFeedback)Wn(s)}function Wn(r){if(typeof r!="object")throw new TypeError("fb is not an object");if(!r.type||typeof r.type!="string")throw new TypeError("missing fb.type");(!r.parameter||typeof r.parameter!="string")&&(r.parameter="")}function fc(r){if(typeof r!="object")throw new TypeError("ext is not an object");if(r.kind!=="audio"&&r.kind!=="video")throw new TypeError("invalid ext.kind");if(!r.uri||typeof r.uri!="string")throw new TypeError("missing ext.uri");if(typeof r.preferredId!="number")throw new TypeError("missing ext.preferredId");if(r.preferredEncrypt&&typeof r.preferredEncrypt!="boolean")throw new TypeError("invalid ext.preferredEncrypt");if(r.preferredEncrypt||(r.preferredEncrypt=!1),r.direction&&typeof r.direction!="string")throw new TypeError("invalid ext.direction");r.direction||(r.direction="sendrecv")}function mc(r){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof r!="object")throw new TypeError("codec is not an object");if(!r.mimeType||typeof r.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(r.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(typeof r.payloadType!="number")throw new TypeError("missing codec.payloadType");if(typeof r.clockRate!="number")throw new TypeError("missing codec.clockRate");t[1].toLowerCase()==="audio"?typeof r.channels!="number"&&(r.channels=1):delete r.channels,(!r.parameters||typeof r.parameters!="object")&&(r.parameters={});for(let n of Object.keys(r.parameters)){let i=r.parameters[n];if(i===void 0&&(r.parameters[n]="",i=""),typeof i!="string"&&typeof i!="number")throw new TypeError(`invalid codec parameter [key:${n}s, value:${i}]`);if(n==="apt"&&typeof i!="number")throw new TypeError("invalid codec apt parameter")}(!r.rtcpFeedback||!Array.isArray(r.rtcpFeedback))&&(r.rtcpFeedback=[]);for(let n of r.rtcpFeedback)Wn(n)}function gc(r){if(typeof r!="object")throw new TypeError("ext is not an object");if(!r.uri||typeof r.uri!="string")throw new TypeError("missing ext.uri");if(typeof r.id!="number")throw new TypeError("missing ext.id");if(r.encrypt&&typeof r.encrypt!="boolean")throw new TypeError("invalid ext.encrypt");r.encrypt||(r.encrypt=!1),(!r.parameters||typeof r.parameters!="object")&&(r.parameters={});for(let e of Object.keys(r.parameters)){let t=r.parameters[e];if(t===void 0&&(r.parameters[e]="",t=""),typeof t!="string"&&typeof t!="number")throw new TypeError("invalid header extension parameter")}}function _c(r){if(typeof r!="object")throw new TypeError("encoding is not an object");if(r.ssrc&&typeof r.ssrc!="number")throw new TypeError("invalid encoding.ssrc");if(r.rid&&typeof r.rid!="string")throw new TypeError("invalid encoding.rid");if(r.rtx&&typeof r.rtx!="object")throw new TypeError("invalid encoding.rtx");if(r.rtx&&typeof r.rtx.ssrc!="number")throw new TypeError("missing encoding.rtx.ssrc");if((!r.dtx||typeof r.dtx!="boolean")&&(r.dtx=!1),r.scalabilityMode&&typeof r.scalabilityMode!="string")throw new TypeError("invalid encoding.scalabilityMode")}function vc(r){if(typeof r!="object")throw new TypeError("rtcp is not an object");if(r.cname&&typeof r.cname!="string")throw new TypeError("invalid rtcp.cname");(!r.reducedSize||typeof r.reducedSize!="boolean")&&(r.reducedSize=!0)}function wc(r){if(typeof r!="object")throw new TypeError("numStreams is not an object");if(typeof r.OS!="number")throw new TypeError("missing numStreams.OS");if(typeof r.MIS!="number")throw new TypeError("missing numStreams.MIS")}function Hn({direction:r,extendedRtpCapabilities:e}){let t={codecs:[],headerExtensions:[]};for(let s of e.codecs){let n={kind:s.kind,mimeType:s.mimeType,preferredPayloadType:s.remotePayloadType,clockRate:s.clockRate,channels:s.channels,parameters:s.localParameters,rtcpFeedback:s.rtcpFeedback};if(t.codecs.push(n),!s.remoteRtxPayloadType)continue;let i={kind:s.kind,mimeType:`${s.kind}/rtx`,preferredPayloadType:s.remoteRtxPayloadType,clockRate:s.clockRate,parameters:{apt:s.remotePayloadType},rtcpFeedback:[]};t.codecs.push(i)}for(let s of e.headerExtensions){if(s.direction!=="sendrecv"&&s.direction!==r)continue;let n={kind:s.kind,uri:s.uri,preferredId:s.recvId,preferredEncrypt:s.encrypt??!1,direction:s.direction};t.headerExtensions.push(n)}return t}function Ge(r){return r?/.+\/rtx$/i.test(r.mimeType):!1}function Ur(r,e,{strict:t=!1,modify:s=!1}={}){let n=r.mimeType.toLowerCase(),i=e.mimeType.toLowerCase();if(n!==i||r.clockRate!==e.clockRate||r.channels!==e.channels)return!1;switch(n){case"video/h264":{if(t){let a=r.parameters["packetization-mode"]??0,o=e.parameters["packetization-mode"]??0;if(a!==o||!zn.isSameProfile(r.parameters,e.parameters))return!1;let c;try{c=zn.generateProfileLevelIdStringForAnswer(r.parameters,e.parameters)}catch{return!1}s&&(c?(r.parameters["profile-level-id"]=c,e.parameters["profile-level-id"]=c):(delete r.parameters["profile-level-id"],delete e.parameters["profile-level-id"]))}break}case"video/vp9":{if(t){let a=r.parameters["profile-id"]??0,o=e.parameters["profile-id"]??0;if(a!==o)return!1}break}}return!0}function yc(r,e){return!(r.kind&&e.kind&&r.kind!==e.kind||r.uri!==e.uri)}function Bn(r,e){let t=[];for(let s of r.rtcpFeedback??[]){let n=(e.rtcpFeedback??[]).find(i=>i.type===s.type&&(i.parameter===s.parameter||!i.parameter&&!s.parameter));n&&t.push(n)}return t}});var Vn=C(Yt=>{"use strict";Object.defineProperty(Yt,"__esModule",{value:!0});Yt.Logger=void 0;var Ke=dt(),Ye="awaitqueue",Br=class{_debug;_warn;_error;constructor(e){e?(this._debug=Ke(`${Ye}:${e}`),this._warn=Ke(`${Ye}:WARN:${e}`),this._error=Ke(`${Ye}:ERROR:${e}`)):(this._debug=Ke(Ye),this._warn=Ke(`${Ye}:WARN`),this._error=Ke(`${Ye}:ERROR`)),this._debug.log=console.info.bind(console),this._warn.log=console.warn.bind(console),this._error.log=console.error.bind(console)}get debug(){return this._debug}get warn(){return this._warn}get error(){return this._error}};Yt.Logger=Br});var Vr=C(Qe=>{"use strict";Object.defineProperty(Qe,"__esModule",{value:!0});Qe.AwaitQueueRemovedTaskError=Qe.AwaitQueueStoppedError=void 0;var Wr=class r extends Error{constructor(e){super(e??"queue stopped"),this.name="AwaitQueueStoppedError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,r)}};Qe.AwaitQueueStoppedError=Wr;var Hr=class r extends Error{constructor(e){super(e??"queue task removed"),this.name="AwaitQueueRemovedTaskError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,r)}};Qe.AwaitQueueRemovedTaskError=Hr});var Gn=C(Qt=>{"use strict";Object.defineProperty(Qt,"__esModule",{value:!0});Qt.AwaitQueue=void 0;var bc=Vn(),Gr=Vr(),he=new bc.Logger("AwaitQueue"),Kr=class{pendingTasks=new Map;nextTaskId=0;constructor(){he.debug("constructor()")}get size(){return this.pendingTasks.size}async push(e,t,s){if(t=t??e.name,he.debug(`push() [name:${t}, options:%o]`,s),typeof e!="function")throw new TypeError("given task is not a function");if(t)try{Object.defineProperty(e,"name",{value:t})}catch{}return new Promise((n,i)=>{if(t&&s?.removeOngoingTasksWithSameName)for(let o of this.pendingTasks.values())o.name===t&&o.reject(new Gr.AwaitQueueRemovedTaskError,{canExecuteNextTask:!1});let a={id:this.nextTaskId++,task:e,name:t,enqueuedAt:Date.now(),executedAt:void 0,completed:!1,resolve:o=>{if(a.completed)return;a.completed=!0,this.pendingTasks.delete(a.id),he.debug(`resolving task [name:${a.name}]`),n(o);let[c]=this.pendingTasks.values();c&&!c.executedAt&&this.execute(c)},reject:(o,{canExecuteNextTask:c})=>{if(!a.completed&&(a.completed=!0,this.pendingTasks.delete(a.id),he.debug(`rejecting task [name:${a.name}]: %s`,String(o)),i(o),c)){let[p]=this.pendingTasks.values();p&&!p.executedAt&&this.execute(p)}}};this.pendingTasks.set(a.id,a),this.pendingTasks.size===1&&this.execute(a)})}stop(){he.debug("stop()");for(let e of this.pendingTasks.values())he.debug(`stop() | stopping task [name:${e.name}]`),e.reject(new Gr.AwaitQueueStoppedError,{canExecuteNextTask:!1})}remove(e){he.debug(`remove() [taskIdx:${e}]`);let t=Array.from(this.pendingTasks.values())[e];if(!t){he.debug(`stop() | no task with given idx [taskIdx:${e}]`);return}t.reject(new Gr.AwaitQueueRemovedTaskError,{canExecuteNextTask:!0})}dump(){let e=Date.now(),t=0;return Array.from(this.pendingTasks.values()).map(s=>({idx:t++,task:s.task,name:s.name,enqueuedTime:s.executedAt?s.executedAt-s.enqueuedAt:e-s.enqueuedAt,executionTime:s.executedAt?e-s.executedAt:0}))}async execute(e){if(he.debug(`execute() [name:${e.name}]`),e.executedAt)throw new Error("task already being executed");e.executedAt=Date.now();try{let t=await e.task();e.resolve(t)}catch(t){e.reject(t,{canExecuteNextTask:!0})}}};Qt.AwaitQueue=Kr});var Yn=C(Re=>{"use strict";Object.defineProperty(Re,"__esModule",{value:!0});Re.AwaitQueueRemovedTaskError=Re.AwaitQueueStoppedError=Re.AwaitQueue=void 0;var Sc=Gn();Object.defineProperty(Re,"AwaitQueue",{enumerable:!0,get:function(){return Sc.AwaitQueue}});var Kn=Vr();Object.defineProperty(Re,"AwaitQueueStoppedError",{enumerable:!0,get:function(){return Kn.AwaitQueueStoppedError}});Object.defineProperty(Re,"AwaitQueueRemovedTaskError",{enumerable:!0,get:function(){return Kn.AwaitQueueRemovedTaskError}})});var Jn=C(Jt=>{"use strict";Object.defineProperty(Jt,"__esModule",{value:!0});Jt.Producer=void 0;var Rc=U(),Qn=V(),Je=Q(),ae=new Rc.Logger("Producer"),Yr=class extends Qn.EnhancedEventEmitter{_id;_localId;_closed=!1;_rtpSender;_track;_kind;_rtpParameters;_paused;_maxSpatialLayer;_stopTracks;_disableTrackOnPause;_zeroRtpOnPause;_appData;_observer=new Qn.EnhancedEventEmitter;constructor({id:e,localId:t,rtpSender:s,track:n,rtpParameters:i,stopTracks:a,disableTrackOnPause:o,zeroRtpOnPause:c,appData:p}){super(),ae.debug("constructor()"),this._id=e,this._localId=t,this._rtpSender=s,this._track=n,this._kind=n.kind,this._rtpParameters=i,this._paused=o?!n.enabled:!1,this._maxSpatialLayer=void 0,this._stopTracks=a,this._disableTrackOnPause=o,this._zeroRtpOnPause=c,this._appData=p??{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get closed(){return this._closed}get kind(){return this._kind}get rtpSender(){return this._rtpSender}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get maxSpatialLayer(){return this._maxSpatialLayer}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(ae.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(ae.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new Je.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(ae.debug("pause()"),this._closed){ae.error("pause() | Producer closed");return}this._paused=!0,this._track&&this._disableTrackOnPause&&(this._track.enabled=!1),this._zeroRtpOnPause&&new Promise((e,t)=>{this.safeEmit("@pause",e,t)}).catch(()=>{}),this._observer.safeEmit("pause")}resume(){if(ae.debug("resume()"),this._closed){ae.error("resume() | Producer closed");return}this._paused=!1,this._track&&this._disableTrackOnPause&&(this._track.enabled=!0),this._zeroRtpOnPause&&new Promise((e,t)=>{this.safeEmit("@resume",e,t)}).catch(()=>{}),this._observer.safeEmit("resume")}async replaceTrack({track:e}){if(ae.debug("replaceTrack() [track:%o]",e),this._closed){if(e&&this._stopTracks)try{e.stop()}catch{}throw new Je.InvalidStateError("closed")}else if(e?.readyState==="ended")throw new Je.InvalidStateError("track ended");if(e===this._track){ae.debug("replaceTrack() | same track, ignored");return}await new Promise((t,s)=>{this.safeEmit("@replacetrack",e,t,s)}),this.destroyTrack(),this._track=e,this._track&&this._disableTrackOnPause&&(this._paused?this._paused&&(this._track.enabled=!1):this._track.enabled=!0),this.handleTrack()}async setMaxSpatialLayer(e){if(this._closed)throw new Je.InvalidStateError("closed");if(this._kind!=="video")throw new Je.UnsupportedError("not a video Producer");if(typeof e!="number")throw new TypeError("invalid spatialLayer");e!==this._maxSpatialLayer&&(await new Promise((t,s)=>{this.safeEmit("@setmaxspatiallayer",e,t,s)}).catch(()=>{}),this._maxSpatialLayer=e)}async setRtpEncodingParameters(e){if(this._closed)throw new Je.InvalidStateError("closed");if(typeof e!="object")throw new TypeError("invalid params");await new Promise((t,s)=>{this.safeEmit("@setrtpencodingparameters",e,t,s)})}onTrackEnded(){ae.debug('track "ended" event'),this.safeEmit("trackended"),this._observer.safeEmit("trackended")}handleTrack(){this._track&&this._track.addEventListener("ended",this.onTrackEnded)}destroyTrack(){if(this._track)try{this._track.removeEventListener("ended",this.onTrackEnded),this._stopTracks&&this._track.stop()}catch{}}};Jt.Producer=Yr});var Zn=C(Xt=>{"use strict";Object.defineProperty(Xt,"__esModule",{value:!0});Xt.Consumer=void 0;var Cc=U(),Xn=V(),Tc=Q(),oe=new Cc.Logger("Consumer"),Qr=class extends Xn.EnhancedEventEmitter{_id;_localId;_producerId;_closed=!1;_rtpReceiver;_track;_rtpParameters;_paused;_appData;_observer=new Xn.EnhancedEventEmitter;constructor({id:e,localId:t,producerId:s,rtpReceiver:n,track:i,rtpParameters:a,appData:o}){super(),oe.debug("constructor()"),this._id=e,this._localId=t,this._producerId=s,this._rtpReceiver=n,this._track=i,this._rtpParameters=a,this._paused=!i.enabled,this._appData=o??{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get producerId(){return this._producerId}get closed(){return this._closed}get kind(){return this._track.kind}get rtpReceiver(){return this._rtpReceiver}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(oe.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(oe.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new Tc.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(oe.debug("pause()"),this._closed){oe.error("pause() | Consumer closed");return}if(this._paused){oe.debug("pause() | Consumer is already paused");return}this._paused=!0,this._track.enabled=!1,this.emit("@pause"),this._observer.safeEmit("pause")}resume(){if(oe.debug("resume()"),this._closed){oe.error("resume() | Consumer closed");return}if(!this._paused){oe.debug("resume() | Consumer is already resumed");return}this._paused=!1,this._track.enabled=!0,this.emit("@resume"),this._observer.safeEmit("resume")}onTrackEnded(){oe.debug('track "ended" event'),this.safeEmit("trackended"),this._observer.safeEmit("trackended")}handleTrack(){this._track.addEventListener("ended",this.onTrackEnded)}destroyTrack(){try{this._track.removeEventListener("ended",this.onTrackEnded),this._track.stop()}catch{}}};Xt.Consumer=Qr});var ti=C(Zt=>{"use strict";Object.defineProperty(Zt,"__esModule",{value:!0});Zt.DataProducer=void 0;var Ec=U(),ei=V(),kc=Q(),fe=new Ec.Logger("DataProducer"),Jr=class extends ei.EnhancedEventEmitter{_id;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new ei.EnhancedEventEmitter;constructor({id:e,dataChannel:t,sctpStreamParameters:s,appData:n}){super(),fe.debug("constructor()"),this._id=e,this._dataChannel=t,this._sctpStreamParameters=s,this._appData=n??{},this.handleDataChannel()}get id(){return this._id}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get bufferedAmount(){return this._dataChannel.bufferedAmount}get bufferedAmountLowThreshold(){return this._dataChannel.bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._dataChannel.bufferedAmountLowThreshold=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(fe.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(fe.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}send(e){if(fe.debug("send()"),this._closed)throw new kc.InvalidStateError("closed");this._dataChannel.send(e)}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(fe.debug('DataChannel "open" event'),this.safeEmit("open"))}),this._dataChannel.addEventListener("error",e=>{if(this._closed)return;let t=e.error??new Error("unknown DataChannel error");e.error?.errorDetail==="sctp-failure"?fe.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):fe.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(fe.warn('DataChannel "close" event'),this._closed=!0,this.emit("@close"),this.safeEmit("close"),this._observer.safeEmit("close"))}),this._dataChannel.addEventListener("message",()=>{this._closed||fe.warn('DataChannel "message" event in a DataProducer, message discarded')}),this._dataChannel.addEventListener("bufferedamountlow",()=>{this._closed||this.safeEmit("bufferedamountlow")})}};Zt.DataProducer=Jr});var si=C(er=>{"use strict";Object.defineProperty(er,"__esModule",{value:!0});er.DataConsumer=void 0;var Pc=U(),ri=V(),De=new Pc.Logger("DataConsumer"),Xr=class extends ri.EnhancedEventEmitter{_id;_dataProducerId;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new ri.EnhancedEventEmitter;constructor({id:e,dataProducerId:t,dataChannel:s,sctpStreamParameters:n,appData:i}){super(),De.debug("constructor()"),this._id=e,this._dataProducerId=t,this._dataChannel=s,this._sctpStreamParameters=n,this._appData=i??{},this.handleDataChannel()}get id(){return this._id}get dataProducerId(){return this._dataProducerId}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get binaryType(){return this._dataChannel.binaryType}set binaryType(e){this._dataChannel.binaryType=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(De.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(De.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(De.debug('DataChannel "open" event'),this.safeEmit("open"))}),this._dataChannel.addEventListener("error",e=>{if(this._closed)return;let t=e.error??new Error("unknown DataChannel error");e.error?.errorDetail==="sctp-failure"?De.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):De.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(De.warn('DataChannel "close" event'),this._closed=!0,this.emit("@close"),this.safeEmit("close"),this._observer.safeEmit("close"))}),this._dataChannel.addEventListener("message",e=>{this._closed||this.safeEmit("message",e.data)})}};er.DataConsumer=Xr});var ii=C(tr=>{"use strict";Object.defineProperty(tr,"__esModule",{value:!0});tr.Transport=void 0;var xc=Yn(),Dc=U(),ni=V(),N=Q(),Zr=Pe(),lt=ie(),Ic=Jn(),Lc=Zn(),Mc=ti(),Oc=si(),A=new Dc.Logger("Transport"),es=class{consumerOptions;promise;resolve;reject;constructor(e){this.consumerOptions=e,this.promise=new Promise((t,s)=>{this.resolve=t,this.reject=s})}},ts=class extends ni.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 xc.AwaitQueue;_pendingConsumerTasks=[];_consumerCreationInProgress=!1;_pendingPauseConsumers=new Map;_consumerPauseInProgress=!1;_pendingResumeConsumers=new Map;_consumerResumeInProgress=!1;_pendingCloseConsumers=new Map;_consumerCloseInProgress=!1;_observer=new ni.EnhancedEventEmitter;constructor({direction:e,id:t,iceParameters:s,iceCandidates:n,dtlsParameters:i,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:p,appData:d,handlerFactory:l,getSendExtendedRtpCapabilities:u,recvRtpCapabilities:m,canProduceByKind:f}){super(),A.debug("constructor() [id:%s, direction:%s]",t,e),this._id=t,this._direction=e,this._getSendExtendedRtpCapabilities=u,this._recvRtpCapabilities=m,this._canProduceByKind=f,this._maxSctpMessageSize=a?.maxMessageSize;let h=Zr.clone(p)??{};delete h.iceServers,delete h.iceTransportPolicy,delete h.bundlePolicy,delete h.rtcpMuxPolicy,this._handler=l.factory({direction:e,iceParameters:s,iceCandidates:n,dtlsParameters:i,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:h,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities}),this._appData=d??{},this.handleHandler()}get id(){return this._id}get closed(){return this._closed}get direction(){return this._direction}get handler(){return this._handler}get iceGatheringState(){return this._iceGatheringState}get connectionState(){return this._connectionState}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){if(!this._closed){A.debug("close()"),this._closed=!0,this._awaitQueue.stop(),this._handler.close(),this._connectionState="closed";for(let e of this._producers.values())e.transportClosed();this._producers.clear();for(let e of this._consumers.values())e.transportClosed();this._consumers.clear();for(let e of this._dataProducers.values())e.transportClosed();this._dataProducers.clear();for(let e of this._dataConsumers.values())e.transportClosed();this._dataConsumers.clear(),this._observer.safeEmit("close"),super.close(),this._observer.close()}}async getStats(){if(this._closed)throw new N.InvalidStateError("closed");return this._handler.getTransportStats()}async restartIce({iceParameters:e}){if(A.debug("restartIce()"),this._closed)throw new N.InvalidStateError("closed");if(!e)throw new TypeError("missing iceParameters");return this._awaitQueue.push(async()=>await this._handler.restartIce(e),"transport.restartIce()")}async updateIceServers({iceServers:e}={}){if(A.debug("updateIceServers()"),this._closed)throw new N.InvalidStateError("closed");if(!Array.isArray(e))throw new TypeError("missing iceServers");return this._awaitQueue.push(async()=>this._handler.updateIceServers(e),"transport.updateIceServers()")}async produce({track:e,streamId:t,encodings:s,codecOptions:n,headerExtensionOptions:i,codec:a,stopTracks:o=!0,disableTrackOnPause:c=!0,zeroRtpOnPause:p=!1,onRtpSender:d,appData:l={}}={}){if(A.debug("produce() [track:%o]",e),this._closed)throw new N.InvalidStateError("closed");if(e){if(this._direction!=="send")throw new N.UnsupportedError("not a sending Transport");if(this._canProduceByKind[e.kind]){if(e.readyState==="ended")throw new N.InvalidStateError("track ended");if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(this.listenerCount("produce")===0)throw new TypeError('no "produce" listener set into this transport');if(l&&typeof l!="object")throw new TypeError("if given, appData must be an object")}else throw new N.UnsupportedError(`cannot produce ${e.kind}`)}else throw new TypeError("missing track");return this._awaitQueue.push(async()=>{let u;if(s&&!Array.isArray(s))throw TypeError("encodings must be an array");s?.length===0?u=void 0:s&&(u=s.map(g=>{let v={active:!0};return g.active===!1&&(v.active=!1),typeof g.dtx=="boolean"&&(v.dtx=g.dtx),typeof g.scalabilityMode=="string"&&(v.scalabilityMode=g.scalabilityMode),typeof g.scaleResolutionDownBy=="number"&&(v.scaleResolutionDownBy=g.scaleResolutionDownBy),typeof g.maxBitrate=="number"&&(v.maxBitrate=g.maxBitrate),typeof g.maxFramerate=="number"&&(v.maxFramerate=g.maxFramerate),typeof g.adaptivePtime=="boolean"&&(v.adaptivePtime=g.adaptivePtime),typeof g.priority=="string"&&(v.priority=g.priority),typeof g.networkPriority=="string"&&(v.networkPriority=g.networkPriority),v}));let{localId:m,rtpParameters:f,rtpSender:h}=await this._handler.send({track:e,streamId:t,encodings:u,codecOptions:n,headerExtensionOptions:i,codec:a,onRtpSender:d});try{lt.validateAndNormalizeRtpParameters(f);let{id:g}=await new Promise((b,P)=>{this.safeEmit("produce",{kind:e.kind,rtpParameters:f,appData:l},b,P)}),v=new Ic.Producer({id:g,localId:m,rtpSender:h,track:e,rtpParameters:f,stopTracks:o,disableTrackOnPause:c,zeroRtpOnPause:p,appData:l});return this._producers.set(v.id,v),this.handleProducer(v),this._observer.safeEmit("newproducer",v),v}catch(g){throw this._handler.stopSending(m).catch(()=>{}),g}},"transport.produce()").catch(u=>{if(o)try{e.stop()}catch{}throw u})}async consume({id:e,producerId:t,kind:s,rtpParameters:n,streamId:i,onRtpReceiver:a,appData:o={}}){if(A.debug("consume()"),this._closed)throw new N.InvalidStateError("closed");if(this._direction!=="recv")throw new N.UnsupportedError("not a receiving Transport");if(typeof e!="string")throw new TypeError("missing id");if(typeof t!="string")throw new TypeError("missing producerId");if(s!=="audio"&&s!=="video")throw new TypeError(`invalid kind '${s}'`);if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(o&&typeof o!="object")throw new TypeError("if given, appData must be an object");let c=Zr.clone(n);if(!lt.canReceive(c,this._recvRtpCapabilities))throw new N.UnsupportedError("cannot consume this Producer");let d=new es({id:e,producerId:t,kind:s,rtpParameters:c,streamId:i,onRtpReceiver:a,appData:o});return this._pendingConsumerTasks.push(d),queueMicrotask(()=>{this._closed||this._consumerCreationInProgress===!1&&this.createPendingConsumers()}),d.promise}async produceData({ordered:e=!0,maxPacketLifeTime:t,maxRetransmits:s,label:n="",protocol:i="",appData:a={}}={}){if(A.debug("produceData()"),this._closed)throw new N.InvalidStateError("closed");if(this._direction!=="send")throw new N.UnsupportedError("not a sending Transport");if(this._maxSctpMessageSize){if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(this.listenerCount("producedata")===0)throw new TypeError('no "producedata" listener set into this transport');if(a&&typeof a!="object")throw new TypeError("if given, appData must be an object")}else throw new N.UnsupportedError("SCTP not enabled by remote Transport");return(t||s)&&(e=!1),this._awaitQueue.push(async()=>{let{dataChannel:o,sctpStreamParameters:c}=await this._handler.sendDataChannel({sctpStreamParameters:{ordered:e,maxPacketLifeTime:t,maxRetransmits:s,label:n,protocol:i}});lt.validateAndNormalizeSctpStreamParameters(c);let{id:p}=await new Promise((l,u)=>{this.safeEmit("producedata",{sctpStreamParameters:c,label:n,protocol:i,appData:a},l,u)}),d=new Mc.DataProducer({id:p,dataChannel:o,sctpStreamParameters:c,appData:a});return this._dataProducers.set(d.id,d),this.handleDataProducer(d),this._observer.safeEmit("newdataproducer",d),d},"transport.produceData()")}async consumeData({id:e,dataProducerId:t,sctpStreamParameters:s,label:n="",protocol:i="",appData:a={}}){if(A.debug("consumeData()"),this._closed)throw new N.InvalidStateError("closed");if(this._direction!=="recv")throw new N.UnsupportedError("not a receiving Transport");if(this._maxSctpMessageSize){if(typeof e!="string")throw new TypeError("missing id");if(typeof t!="string")throw new TypeError("missing dataProducerId");if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(a&&typeof a!="object")throw new TypeError("if given, appData must be an object")}else throw new N.UnsupportedError("SCTP not enabled by remote Transport");let o=Zr.clone(s);return lt.validateAndNormalizeSctpStreamParameters(o),this._awaitQueue.push(async()=>{let{dataChannel:c}=await this._handler.receiveDataChannel({maxMessageSize:this._maxSctpMessageSize,sctpStreamParameters:o,label:n,protocol:i}),p=new Oc.DataConsumer({id:e,dataProducerId:t,dataChannel:c,sctpStreamParameters:o,appData:a});return this._dataConsumers.set(p.id,p),this.handleDataConsumer(p),this._observer.safeEmit("newdataconsumer",p),p},"transport.consumeData()")}getDataChannelMaxMessageSize(){return this._handler.getDataChannelMaxMessageSize()}createPendingConsumers(){this._consumerCreationInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingConsumerTasks.length===0){A.debug("createPendingConsumers() | there is no Consumer to be created");return}let e=[...this._pendingConsumerTasks];this._pendingConsumerTasks=[];let t,s=[];for(let n of e){let{id:i,kind:a,rtpParameters:o,streamId:c,onRtpReceiver:p}=n.consumerOptions;s.push({trackId:i,kind:a,rtpParameters:o,streamId:c,onRtpReceiver:p})}try{let n=await this._handler.receive(s);for(let i=0;i<n.length;++i){let a=e[i],o=n[i],{id:c,producerId:p,kind:d,rtpParameters:l,appData:u}=a.consumerOptions,{localId:m,rtpReceiver:f,track:h}=o,g=new Lc.Consumer({id:c,localId:m,producerId:p,rtpReceiver:f,track:h,rtpParameters:l,appData:u});this._consumers.set(g.id,g),this.handleConsumer(g),!this._probatorConsumerCreated&&!t&&d==="video"&&(t=g),this._observer.safeEmit("newconsumer",g),a.resolve(g)}}catch(n){for(let i of e)i.reject(n)}if(t)try{let n=lt.generateProbatorRtpParameters(t.rtpParameters);await this._handler.receive([{trackId:"probator",kind:"video",rtpParameters:n}]),A.debug("createPendingConsumers() | Consumer for RTP probation created"),this._probatorConsumerCreated=!0}catch(n){A.error("createPendingConsumers() | failed to create Consumer for RTP probation:%o",n)}},"transport.createPendingConsumers()").then(()=>{this._consumerCreationInProgress=!1,this._pendingConsumerTasks.length>0&&this.createPendingConsumers()}).catch(()=>{})}pausePendingConsumers(){this._consumerPauseInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingPauseConsumers.size===0){A.debug("pausePendingConsumers() | there is no Consumer to be paused");return}let e=Array.from(this._pendingPauseConsumers.values());this._pendingPauseConsumers.clear();try{let t=e.map(s=>s.localId);await this._handler.pauseReceiving(t)}catch(t){A.error("pausePendingConsumers() | failed to pause Consumers:",t)}},"transport.pausePendingConsumers()").then(()=>{this._consumerPauseInProgress=!1,this._pendingPauseConsumers.size>0&&this.pausePendingConsumers()}).catch(()=>{})}resumePendingConsumers(){this._consumerResumeInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingResumeConsumers.size===0){A.debug("resumePendingConsumers() | there is no Consumer to be resumed");return}let e=Array.from(this._pendingResumeConsumers.values());this._pendingResumeConsumers.clear();try{let t=e.map(s=>s.localId);await this._handler.resumeReceiving(t)}catch(t){A.error("resumePendingConsumers() | failed to resume Consumers:",t)}},"transport.resumePendingConsumers()").then(()=>{this._consumerResumeInProgress=!1,this._pendingResumeConsumers.size>0&&this.resumePendingConsumers()}).catch(()=>{})}closePendingConsumers(){this._consumerCloseInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingCloseConsumers.size===0){A.debug("closePendingConsumers() | there is no Consumer to be closed");return}let e=Array.from(this._pendingCloseConsumers.values());this._pendingCloseConsumers.clear();try{await this._handler.stopReceiving(e.map(t=>t.localId))}catch(t){A.error("closePendingConsumers() | failed to close Consumers:",t)}},"transport.closePendingConsumers()").then(()=>{this._consumerCloseInProgress=!1,this._pendingCloseConsumers.size>0&&this.closePendingConsumers()}).catch(()=>{})}handleHandler(){let e=this._handler;e.on("@connect",({dtlsParameters:t},s,n)=>{if(this._closed){n(new N.InvalidStateError("closed"));return}this.safeEmit("connect",{dtlsParameters:t},s,n)}),e.on("@icegatheringstatechange",t=>{t!==this._iceGatheringState&&(A.debug("ICE gathering state changed to %s",t),this._iceGatheringState=t,this._closed||this.safeEmit("icegatheringstatechange",t))}),e.on("@icecandidateerror",t=>{A.warn(`ICE candidate error [url:${t.url}, localAddress:${t.address}, localPort:${t.port}]: ${t.errorCode} "${t.errorText}"`),this.safeEmit("icecandidateerror",t)}),e.on("@connectionstatechange",t=>{t!==this._connectionState&&(A.debug("connection state changed to %s",t),this._connectionState=t,this._closed||this.safeEmit("connectionstatechange",t))})}handleProducer(e){e.on("@close",()=>{this._producers.delete(e.id),!this._closed&&this._awaitQueue.push(async()=>await this._handler.stopSending(e.localId),"producer @close event").catch(t=>A.warn("producer.close() failed:%o",t))}),e.on("@pause",(t,s)=>{this._awaitQueue.push(async()=>await this._handler.pauseSending(e.localId),"producer @pause event").then(t).catch(s)}),e.on("@resume",(t,s)=>{this._awaitQueue.push(async()=>await this._handler.resumeSending(e.localId),"producer @resume event").then(t).catch(s)}),e.on("@replacetrack",(t,s,n)=>{this._awaitQueue.push(async()=>await this._handler.replaceTrack(e.localId,t),"producer @replacetrack event").then(s).catch(n)}),e.on("@setmaxspatiallayer",(t,s,n)=>{this._awaitQueue.push(async()=>await this._handler.setMaxSpatialLayer(e.localId,t),"producer @setmaxspatiallayer event").then(s).catch(n)}),e.on("@setrtpencodingparameters",(t,s,n)=>{this._awaitQueue.push(async()=>await this._handler.setRtpEncodingParameters(e.localId,t),"producer @setrtpencodingparameters event").then(s).catch(n)}),e.on("@getstats",(t,s)=>{if(this._closed)return s(new N.InvalidStateError("closed"));this._handler.getSenderStats(e.localId).then(t).catch(s)})}handleConsumer(e){e.on("@close",()=>{this._consumers.delete(e.id),this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.delete(e.id),!this._closed&&(this._pendingCloseConsumers.set(e.id,e),this._consumerCloseInProgress===!1&&this.closePendingConsumers())}),e.on("@pause",()=>{this._pendingResumeConsumers.has(e.id)&&this._pendingResumeConsumers.delete(e.id),this._pendingPauseConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerPauseInProgress===!1&&this.pausePendingConsumers()})}),e.on("@resume",()=>{this._pendingPauseConsumers.has(e.id)&&this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerResumeInProgress===!1&&this.resumePendingConsumers()})}),e.on("@getstats",(t,s)=>{if(this._closed)return s(new N.InvalidStateError("closed"));this._handler.getReceiverStats(e.localId).then(t).catch(s)})}handleDataProducer(e){e.on("@close",()=>{this._dataProducers.delete(e.id)})}handleDataConsumer(e){e.on("@close",()=>{this._dataConsumers.delete(e.id)})}};tr.Transport=ts});var rr=C((xl,oi)=>{"use strict";var ai=oi.exports={v:[{name:"version",reg:/^(\d*)$/}],o:[{name:"origin",reg:/^(\S*) (\d*) (\d*) (\S*) IP(\d) (\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\d*) (\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\d) (\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\w*) (\d*) ([\w/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\d*) ([\w\-.]*)(?:\s*\/(\d*)(?:\s*\/(\S*))?)?/,names:["payload","codec","rate","encoding"],format:function(r){return r.encoding?"rtpmap:%d %s/%s/%s":r.rate?"rtpmap:%d %s/%s":"rtpmap:%d %s"}},{push:"fmtp",reg:/^fmtp:(\d*) ([\S| ]*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\d*)(?: (\S*) IP(\d) (\S*))?/,names:["port","netType","ipVer","address"],format:function(r){return r.address!=null?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\*|\d*) trr-int (\d*)/,names:["payload","value"],format:"rtcp-fb:%s trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,names:["payload","type","subtype"],format:function(r){return r.subtype!=null?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:(\d+)(?:\/(\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\S*)(?: (\S*))?/,names:["value","direction","encrypt-uri","uri","config"],format:function(r){return"extmap:%d"+(r.direction?"/%s":"%v")+(r["encrypt-uri"]?" %s":"%v")+" %s"+(r.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(r){return r.sessionConfig!=null?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\w*)/,format:"setup:%s"},{name:"connectionType",reg:/^connection:(new|existing)/,format:"connection:%s"},{name:"mid",reg:/^mid:([^\s]*)/,format:"mid:%s"},{push:"msid",reg:/^msid:([\w-]+)(?: ([\w-]+))?/,names:["id","appdata"],format:"msid:%s %s"},{name:"ptime",reg:/^ptime:(\d*(?:\.\d*)*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\d*(?:\.\d*)*)/,format:"maxptime:%d"},{name:"direction",reg:/^(sendrecv|recvonly|sendonly|inactive)/},{name:"icelite",reg:/^(ice-lite)/},{name:"iceUfrag",reg:/^ice-ufrag:(\S*)/,format:"ice-ufrag:%s"},{name:"icePwd",reg:/^ice-pwd:(\S*)/,format:"ice-pwd:%s"},{name:"fingerprint",reg:/^fingerprint:(\S*) (\S*)/,names:["type","hash"],format:"fingerprint:%s %s"},{push:"candidates",reg:/^candidate:(\S*) (\d*) (\S*) (\d*) (\S*) (\d*) typ (\S*)(?: raddr (\S*) rport (\d*))?(?: tcptype (\S*))?(?: generation (\d*))?(?: network-id (\d*))?(?: network-cost (\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","tcptype","generation","network-id","network-cost"],format:function(r){var e="candidate:%s %d %s %d %s %d typ %s";return e+=r.raddr!=null?" raddr %s rport %d":"%v%v",e+=r.tcptype!=null?" tcptype %s":"%v",r.generation!=null&&(e+=" generation %d"),e+=r["network-id"]!=null?" network-id %d":"%v",e+=r["network-cost"]!=null?" network-cost %d":"%v",e}},{name:"endOfCandidates",reg:/^(end-of-candidates)/},{name:"remoteCandidates",reg:/^remote-candidates:(.*)/,format:"remote-candidates:%s"},{name:"iceOptions",reg:/^ice-options:(\S*)/,format:"ice-options:%s"},{push:"ssrcs",reg:/^ssrc:(\d*) ([\w_-]*)(?::(.*))?/,names:["id","attribute","value"],format:function(r){var e="ssrc:%d";return r.attribute!=null&&(e+=" %s",r.value!=null&&(e+=":%s")),e}},{push:"ssrcGroups",reg:/^ssrc-group:([\x21\x23\x24\x25\x26\x27\x2A\x2B\x2D\x2E\w]*) (.*)/,names:["semantics","ssrcs"],format:"ssrc-group:%s %s"},{name:"msidSemantic",reg:/^msid-semantic:\s?(\w*) (\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{name:"rtcpRsize",reg:/^(rtcp-rsize)/},{name:"sctpmap",reg:/^sctpmap:([\w_/]*) (\S*)(?: (\S*))?/,names:["sctpmapNumber","app","maxMessageSize"],format:function(r){return r.maxMessageSize!=null?"sctpmap:%s %s %s":"sctpmap:%s %s"}},{name:"xGoogleFlag",reg:/^x-google-flag:([^\s]*)/,format:"x-google-flag:%s"},{push:"rids",reg:/^rid:([\d\w]+) (\w+)(?: ([\S| ]*))?/,names:["id","direction","params"],format:function(r){return r.params?"rid:%s %s %s":"rid:%s %s"}},{push:"imageattrs",reg:new RegExp("^imageattr:(\\d+|\\*)[\\s\\t]+(send|recv)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*)(?:[\\s\\t]+(recv|send)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*))?"),names:["pt","dir1","attrs1","dir2","attrs2"],format:function(r){return"imageattr:%s %s %s"+(r.dir2?" %s %s":"")}},{name:"simulcast",reg:new RegExp("^simulcast:(send|recv) ([a-zA-Z0-9\\-_~;,]+)(?:\\s?(send|recv) ([a-zA-Z0-9\\-_~;,]+))?$"),names:["dir1","list1","dir2","list2"],format:function(r){return"simulcast:%s %s"+(r.dir2?" %s %s":"")}},{name:"simulcast_03",reg:/^simulcast:[\s\t]+([\S+\s\t]+)$/,names:["value"],format:"simulcast: %s"},{name:"framerate",reg:/^framerate:(\d+(?:$|\.\d+))/,format:"framerate:%s"},{name:"sourceFilter",reg:/^source-filter: *(excl|incl) (\S*) (IP4|IP6|\*) (\S*) (.*)/,names:["filterMode","netType","addressTypes","destAddress","srcList"],format:"source-filter: %s %s %s %s %s"},{name:"bundleOnly",reg:/^(bundle-only)/},{name:"label",reg:/^label:(.+)/,format:"label:%s"},{name:"sctpPort",reg:/^sctp-port:(\d+)$/,format:"sctp-port:%s"},{name:"maxMessageSize",reg:/^max-message-size:(\d+)$/,format:"max-message-size:%s"},{push:"tsRefClocks",reg:/^ts-refclk:([^\s=]*)(?:=(\S*))?/,names:["clksrc","clksrcExt"],format:function(r){return"ts-refclk:%s"+(r.clksrcExt!=null?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(r){var e="mediaclk:";return e+=r.id!=null?"id=%s %s":"%v%s",e+=r.mediaClockValue!=null?"=%s":"",e+=r.rateNumerator!=null?" rate=%s":"",e+=r.rateDenominator!=null?"/%s":"",e}},{name:"keywords",reg:/^keywds:(.+)$/,format:"keywds:%s"},{name:"content",reg:/^content:(.+)/,format:"content:%s"},{name:"bfcpFloorCtrl",reg:/^floorctrl:(c-only|s-only|c-s)/,format:"floorctrl:%s"},{name:"bfcpConfId",reg:/^confid:(\d+)/,format:"confid:%s"},{name:"bfcpUserId",reg:/^userid:(\d+)/,format:"userid:%s"},{name:"bfcpFloorId",reg:/^floorid:(.+) (?:m-stream|mstrm):(.+)/,names:["id","mStream"],format:"floorid:%s mstrm:%s"},{push:"invalid",names:["value"]}]};Object.keys(ai).forEach(function(r){var e=ai[r];e.forEach(function(t){t.reg||(t.reg=/(.*)/),t.format||(t.format="%s")})})});var pi=C(me=>{"use strict";var Xe=function(r){return String(Number(r))===r?Number(r):r},Ac=function(r,e,t,s){if(s&&!t)e[s]=Xe(r[1]);else for(var n=0;n<t.length;n+=1)r[n+1]!=null&&(e[t[n]]=Xe(r[n+1]))},Nc=function(r,e,t){var s=r.name&&r.names;r.push&&!e[r.push]?e[r.push]=[]:s&&!e[r.name]&&(e[r.name]={});var n=r.push?{}:s?e[r.name]:e;Ac(t.match(r.reg),n,r.names,r.name),r.push&&e[r.push].push(n)},ci=rr(),jc=RegExp.prototype.test.bind(/^([a-z])=(.*)/);me.parse=function(r){var e={},t=[],s=e;return r.split(/(\r\n|\r|\n)/).filter(jc).forEach(function(n){var i=n[0],a=n.slice(2);i==="m"&&(t.push({rtp:[],fmtp:[]}),s=t[t.length-1]);for(var o=0;o<(ci[i]||[]).length;o+=1){var c=ci[i][o];if(c.reg.test(a))return Nc(c,s,a)}}),e.media=t,e};var di=function(r,e){var t=e.split(/=(.+)/,2);return t.length===2?r[t[0]]=Xe(t[1]):t.length===1&&e.length>1&&(r[t[0]]=void 0),r};me.parseParams=function(r){return r.split(/;\s?/).reduce(di,{})};me.parseFmtpConfig=me.parseParams;me.parsePayloads=function(r){return r.toString().split(" ").map(Number)};me.parseRemoteCandidates=function(r){for(var e=[],t=r.split(" ").map(Xe),s=0;s<t.length;s+=3)e.push({component:t[s],ip:t[s+1],port:t[s+2]});return e};me.parseImageAttributes=function(r){return r.split(" ").map(function(e){return e.substring(1,e.length-1).split(",").reduce(di,{})})};me.parseSimulcastStreamList=function(r){return r.split(";").map(function(e){return e.split(",").map(function(t){var s,n=!1;return t[0]!=="~"?s=Xe(t):(s=Xe(t.substring(1,t.length)),n=!0),{scid:s,paused:n}})})}});var ui=C((Il,li)=>{"use strict";var rs=rr(),Fc=/%[sdv%]/g,qc=function(r){var e=1,t=arguments,s=t.length;return r.replace(Fc,function(n){if(e>=s)return n;var i=t[e];switch(e+=1,n){case"%%":return"%";case"%s":return String(i);case"%d":return Number(i);case"%v":return""}})},ut=function(r,e,t){var s=e.format instanceof Function?e.format(e.push?t:t[e.name]):e.format,n=[r+"="+s];if(e.names)for(var i=0;i<e.names.length;i+=1){var a=e.names[i];e.name?n.push(t[e.name][a]):n.push(t[e.names[i]])}else n.push(t[e.name]);return qc.apply(null,n)},$c=["v","o","s","i","u","e","p","c","b","t","r","z","a"],Uc=["i","c","b","a"];li.exports=function(r,e){e=e||{},r.version==null&&(r.version=0),r.name==null&&(r.name=" "),r.media.forEach(function(i){i.payloads==null&&(i.payloads="")});var t=e.outerOrder||$c,s=e.innerOrder||Uc,n=[];return t.forEach(function(i){rs[i].forEach(function(a){a.name in r&&r[a.name]!=null?n.push(ut(i,a,r)):a.push in r&&r[a.push]!=null&&r[a.push].forEach(function(o){n.push(ut(i,a,o))})})}),r.media.forEach(function(i){n.push(ut("m",rs.m[0],i)),s.forEach(function(a){rs[a].forEach(function(o){o.name in i&&i[o.name]!=null?n.push(ut(a,o,i)):o.push in i&&i[o.push]!=null&&i[o.push].forEach(function(c){n.push(ut(a,o,c))})})})}),n.join(`\r
|
|
4
|
+
`+i),r.push(n+"m+"+Wt.exports.humanize(this.diff)+"\x1B[0m")}else r[0]=Eo()+e+" "+r[0]}function Eo(){return j.inspectOpts.hideDate?"":new Date().toISOString()+" "}function ko(...r){return process.stderr.write(Bt.formatWithOptions(j.inspectOpts,...r)+`
|
|
5
|
+
`)}function Po(r){r?process.env.DEBUG=r:delete process.env.DEBUG}function xo(){return process.env.DEBUG}function Do(r){r.inspectOpts={};let e=Object.keys(j.inspectOpts);for(let t=0;t<e.length;t++)r.inspectOpts[e[t]]=j.inspectOpts[e[t]]}Wt.exports=Lr()(j);var{formatters:yn}=Wt.exports;yn.o=function(r){return this.inspectOpts.colors=this.useColors,Bt.inspect(r,this.inspectOpts).split(`
|
|
6
|
+
`).map(e=>e.trim()).join(" ")};yn.O=function(r){return this.inspectOpts.colors=this.useColors,Bt.inspect(r,this.inspectOpts)}});var pt=C((ul,Ar)=>{"use strict";typeof process>"u"||process.type==="renderer"||process.browser===!0||process.__nwjs?Ar.exports=gn():Ar.exports=bn()});var Rn=C(Sn=>{"use strict";Object.defineProperty(Sn,"__esModule",{value:!0})});var U=C(Ht=>{"use strict";Object.defineProperty(Ht,"__esModule",{value:!0});Ht.Logger=void 0;var $e=pt(),Ue="media-client",Nr=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,$e.default)(`${Ue}:${e}`),this._warn=(0,$e.default)(`${Ue}:WARN:${e}`),this._error=(0,$e.default)(`${Ue}:ERROR:${e}`)):(this._debug=(0,$e.default)(Ue),this._warn=(0,$e.default)(`${Ue}:WARN`),this._error=(0,$e.default)(`${Ue}:ERROR`)),this._debug.log=console.info.bind(console),this._warn.log=console.warn.bind(console),this._error.log=console.error.bind(console)}get debug(){return this._debug}get warn(){return this._warn}get error(){return this._error}};Ht.Logger=Nr});var On=C((ml,jr)=>{"use strict";var ze=typeof Reflect=="object"?Reflect:null,Cn=ze&&typeof ze.apply=="function"?ze.apply:function(e,t,s){return Function.prototype.apply.call(e,t,s)},Vt;ze&&typeof ze.ownKeys=="function"?Vt=ze.ownKeys:Object.getOwnPropertySymbols?Vt=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Vt=function(e){return Object.getOwnPropertyNames(e)};function Io(r){console&&console.warn&&console.warn(r)}var En=Number.isNaN||function(e){return e!==e};function D(){D.init.call(this)}jr.exports=D;jr.exports.once=Ao;D.EventEmitter=D;D.prototype._events=void 0;D.prototype._eventsCount=0;D.prototype._maxListeners=void 0;var Tn=10;function Gt(r){if(typeof r!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof r)}Object.defineProperty(D,"defaultMaxListeners",{enumerable:!0,get:function(){return Tn},set:function(r){if(typeof r!="number"||r<0||En(r))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+r+".");Tn=r}});D.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};D.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||En(e))throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received '+e+".");return this._maxListeners=e,this};function kn(r){return r._maxListeners===void 0?D.defaultMaxListeners:r._maxListeners}D.prototype.getMaxListeners=function(){return kn(this)};D.prototype.emit=function(e){for(var t=[],s=1;s<arguments.length;s++)t.push(arguments[s]);var n=e==="error",i=this._events;if(i!==void 0)n=n&&i.error===void 0;else if(!n)return!1;if(n){var a;if(t.length>0&&(a=t[0]),a instanceof Error)throw a;var o=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw o.context=a,o}var c=i[e];if(c===void 0)return!1;if(typeof c=="function")Cn(c,this,t);else for(var p=c.length,d=Ln(c,p),s=0;s<p;++s)Cn(d[s],this,t);return!0};function Pn(r,e,t,s){var n,i,a;if(Gt(t),i=r._events,i===void 0?(i=r._events=Object.create(null),r._eventsCount=0):(i.newListener!==void 0&&(r.emit("newListener",e,t.listener?t.listener:t),i=r._events),a=i[e]),a===void 0)a=i[e]=t,++r._eventsCount;else if(typeof a=="function"?a=i[e]=s?[t,a]:[a,t]:s?a.unshift(t):a.push(t),n=kn(r),n>0&&a.length>n&&!a.warned){a.warned=!0;var o=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");o.name="MaxListenersExceededWarning",o.emitter=r,o.type=e,o.count=a.length,Io(o)}return r}D.prototype.addListener=function(e,t){return Pn(this,e,t,!1)};D.prototype.on=D.prototype.addListener;D.prototype.prependListener=function(e,t){return Pn(this,e,t,!0)};function Lo(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function xn(r,e,t){var s={fired:!1,wrapFn:void 0,target:r,type:e,listener:t},n=Lo.bind(s);return n.listener=t,s.wrapFn=n,n}D.prototype.once=function(e,t){return Gt(t),this.on(e,xn(this,e,t)),this};D.prototype.prependOnceListener=function(e,t){return Gt(t),this.prependListener(e,xn(this,e,t)),this};D.prototype.removeListener=function(e,t){var s,n,i,a,o;if(Gt(t),n=this._events,n===void 0)return this;if(s=n[e],s===void 0)return this;if(s===t||s.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete n[e],n.removeListener&&this.emit("removeListener",e,s.listener||t));else if(typeof s!="function"){for(i=-1,a=s.length-1;a>=0;a--)if(s[a]===t||s[a].listener===t){o=s[a].listener,i=a;break}if(i<0)return this;i===0?s.shift():Mo(s,i),s.length===1&&(n[e]=s[0]),n.removeListener!==void 0&&this.emit("removeListener",e,o||t)}return this};D.prototype.off=D.prototype.removeListener;D.prototype.removeAllListeners=function(e){var t,s,n;if(s=this._events,s===void 0)return this;if(s.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):s[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete s[e]),this;if(arguments.length===0){var i=Object.keys(s),a;for(n=0;n<i.length;++n)a=i[n],a!=="removeListener"&&this.removeAllListeners(a);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(t=s[e],typeof t=="function")this.removeListener(e,t);else if(t!==void 0)for(n=t.length-1;n>=0;n--)this.removeListener(e,t[n]);return this};function Dn(r,e,t){var s=r._events;if(s===void 0)return[];var n=s[e];return n===void 0?[]:typeof n=="function"?t?[n.listener||n]:[n]:t?Oo(n):Ln(n,n.length)}D.prototype.listeners=function(e){return Dn(this,e,!0)};D.prototype.rawListeners=function(e){return Dn(this,e,!1)};D.listenerCount=function(r,e){return typeof r.listenerCount=="function"?r.listenerCount(e):In.call(r,e)};D.prototype.listenerCount=In;function In(r){var e=this._events;if(e!==void 0){var t=e[r];if(typeof t=="function")return 1;if(t!==void 0)return t.length}return 0}D.prototype.eventNames=function(){return this._eventsCount>0?Vt(this._events):[]};function Ln(r,e){for(var t=new Array(e),s=0;s<e;++s)t[s]=r[s];return t}function Mo(r,e){for(;e+1<r.length;e++)r[e]=r[e+1];r.pop()}function Oo(r){for(var e=new Array(r.length),t=0;t<e.length;++t)e[t]=r[t].listener||r[t];return e}function Ao(r,e){return new Promise(function(t,s){function n(a){r.removeListener(e,i),s(a)}function i(){typeof r.removeListener=="function"&&r.removeListener("error",n),t([].slice.call(arguments))}Mn(r,e,i,{once:!0}),e!=="error"&&No(r,n,{once:!0})})}function No(r,e,t){typeof r.on=="function"&&Mn(r,"error",e,t)}function Mn(r,e,t,s){if(typeof r.on=="function")s.once?r.once(e,t):r.on(e,t);else if(typeof r.addEventListener=="function")r.addEventListener(e,function n(i){s.once&&r.removeEventListener(e,n),t(i)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof r)}});var V=C(Kt=>{"use strict";Object.defineProperty(Kt,"__esModule",{value:!0});Kt.EnhancedEventEmitter=void 0;var jo=On(),Fo=U(),qo=new Fo.Logger("EnhancedEventEmitter"),Fr=class extends jo.EventEmitter{constructor(){super(),this.setMaxListeners(1/0)}close(){super.removeAllListeners()}emit(e,...t){return super.emit(e,...t)}safeEmit(e,...t){try{return super.emit(e,...t)}catch(s){qo.error("safeEmit() | event listener threw an error [eventName:%s]:%o",e,s);try{super.emit("listenererror",e,s)}catch{}return!!super.listenerCount(e)}}on(e,t){return super.on(e,t),this}off(e,t){return super.off(e,t),this}addListener(e,t){return super.on(e,t),this}prependListener(e,t){return super.prependListener(e,t),this}once(e,t){return super.once(e,t),this}prependOnceListener(e,t){return super.prependOnceListener(e,t),this}removeListener(e,t){return super.off(e,t),this}removeAllListeners(e){return super.removeAllListeners(e),this}listenerCount(e){return super.listenerCount(e)}listeners(e){return super.listeners(e)}rawListeners(e){return super.rawListeners(e)}};Kt.EnhancedEventEmitter=Fr});var Q=C(Be=>{"use strict";Object.defineProperty(Be,"__esModule",{value:!0});Be.InvalidStateError=Be.UnsupportedError=void 0;var qr=class r extends Error{constructor(e){super(e),this.name="UnsupportedError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,r):this.stack=new Error(e).stack}};Be.UnsupportedError=qr;var $r=class r extends Error{constructor(e){super(e),this.name="InvalidStateError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,r):this.stack=new Error(e).stack}};Be.InvalidStateError=$r});var Pe=C(lt=>{"use strict";Object.defineProperty(lt,"__esModule",{value:!0});lt.clone=$o;lt.generateRandomNumber=Uo;lt.deepFreeze=An;function $o(r){if(r!==void 0)return Number.isNaN(r)?NaN:typeof structuredClone=="function"?structuredClone(r):JSON.parse(JSON.stringify(r))}function Uo(){return Math.round(Math.random()*1e7)}function An(r){let e=Reflect.ownKeys(r);for(let t of e){let s=r[t];(s&&typeof s=="object"||typeof s=="function")&&An(s)}return Object.freeze(r)}});var Nn=C(Yt=>{"use strict";Object.defineProperty(Yt,"__esModule",{value:!0});Yt.Logger=void 0;var We=pt(),He="h264-profile-level-id",Ur=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,We.default)(`${He}:${e}`),this._warn=(0,We.default)(`${He}:WARN:${e}`),this._error=(0,We.default)(`${He}:ERROR:${e}`)):(this._debug=(0,We.default)(He),this._warn=(0,We.default)(`${He}:WARN`),this._error=(0,We.default)(`${He}:ERROR`)),this._debug.log=console.info.bind(console),this._warn.log=console.warn.bind(console),this._error.log=console.error.bind(console)}get debug(){return this._debug}get warn(){return this._warn}get error(){return this._error}};Yt.Logger=Ur});var zn=C(F=>{"use strict";Object.defineProperty(F,"__esModule",{value:!0});F.ProfileLevelId=F.Level=F.Profile=void 0;F.parseProfileLevelId=$n;F.profileLevelIdToString=Un;F.profileToString=Ho;F.levelToString=Vo;F.parseSdpProfileLevelId=xe;F.isSameProfile=Go;F.isSameProfileAndLevel=Ko;F.generateProfileLevelIdStringForAnswer=Yo;F.supportedLevel=Qo;var zo=Nn(),se=new zo.Logger,I;(function(r){r[r.ConstrainedBaseline=1]="ConstrainedBaseline",r[r.Baseline=2]="Baseline",r[r.Main=3]="Main",r[r.ConstrainedHigh=4]="ConstrainedHigh",r[r.High=5]="High",r[r.PredictiveHigh444=6]="PredictiveHigh444"})(I||(F.Profile=I={}));var _;(function(r){r[r.L1_b=0]="L1_b",r[r.L1=10]="L1",r[r.L1_1=11]="L1_1",r[r.L1_2=12]="L1_2",r[r.L1_3=13]="L1_3",r[r.L2=20]="L2",r[r.L2_1=21]="L2_1",r[r.L2_2=22]="L2_2",r[r.L3=30]="L3",r[r.L3_1=31]="L3_1",r[r.L3_2=32]="L3_2",r[r.L4=40]="L4",r[r.L4_1=41]="L4_1",r[r.L4_2=42]="L4_2",r[r.L5=50]="L5",r[r.L5_1=51]="L5_1",r[r.L5_2=52]="L5_2"})(_||(F.Level=_={}));var Ve=class{profile;level;constructor(e,t){this.profile=e,this.level=t}};F.ProfileLevelId=Ve;var Bo=new Ve(I.ConstrainedBaseline,_.L3_1),te=class{mask;masked_value;constructor(e){this.mask=~Fn("x",e),this.masked_value=Fn("1",e)}isMatch(e){return this.masked_value===(e&this.mask)}},re=class{profile_idc;profile_iop;profile;constructor(e,t,s){this.profile_idc=e,this.profile_iop=t,this.profile=s}},Wo=[new re(66,new te("x1xx0000"),I.ConstrainedBaseline),new re(77,new te("1xxx0000"),I.ConstrainedBaseline),new re(88,new te("11xx0000"),I.ConstrainedBaseline),new re(66,new te("x0xx0000"),I.Baseline),new re(88,new te("10xx0000"),I.Baseline),new re(77,new te("0x0x0000"),I.Main),new re(100,new te("00000000"),I.High),new re(100,new te("00001100"),I.ConstrainedHigh),new re(244,new te("00000000"),I.PredictiveHigh444)],jn=[{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:_.L1},{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:_.L1_b},{max_macroblocks_per_second:3e3,max_macroblock_frame_size:396,level:_.L1_1},{max_macroblocks_per_second:6e3,max_macroblock_frame_size:396,level:_.L1_2},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:_.L1_3},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:_.L2},{max_macroblocks_per_second:19800,max_macroblock_frame_size:792,level:_.L2_1},{max_macroblocks_per_second:20250,max_macroblock_frame_size:1620,level:_.L2_2},{max_macroblocks_per_second:40500,max_macroblock_frame_size:1620,level:_.L3},{max_macroblocks_per_second:108e3,max_macroblock_frame_size:3600,level:_.L3_1},{max_macroblocks_per_second:216e3,max_macroblock_frame_size:5120,level:_.L3_2},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:_.L4},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:_.L4_1},{max_macroblocks_per_second:522240,max_macroblock_frame_size:8704,level:_.L4_2},{max_macroblocks_per_second:589824,max_macroblock_frame_size:22080,level:_.L5},{max_macroblocks_per_second:983040,max_macroblock_frame_size:36864,level:_.L5_1},{max_macroblocks_per_second:2073600,max_macroblock_frame_size:36864,level:_.L5_2}];function $n(r){if(typeof r!="string"||r.length!==6)return;let t=parseInt(r,16);if(t===0)return;let s=t&255,n=t>>8&255,i=t>>16&255,a;switch(s){case _.L1_1:{a=(n&16)!==0?_.L1_b:_.L1_1;break}case _.L1:case _.L1_2:case _.L1_3:case _.L2:case _.L2_1:case _.L2_2:case _.L3:case _.L3_1:case _.L3_2:case _.L4:case _.L4_1:case _.L4_2:case _.L5:case _.L5_1:case _.L5_2:{a=s;break}default:{se.warn(`parseProfileLevelId() | unrecognized level_idc [str:${r}, level_idc:${s}]`);return}}for(let o of Wo)if(i===o.profile_idc&&o.profile_iop.isMatch(n))return se.debug(`parseProfileLevelId() | result [str:${r}, profile:${o.profile}, level:${a}]`),new Ve(o.profile,a);se.warn(`parseProfileLevelId() | unrecognized profile_idc/profile_iop combination [str:${r}, profile_idc:${i}, profile_iop:${n}]`)}function Un(r){if(r.level==_.L1_b)switch(r.profile){case I.ConstrainedBaseline:return"42f00b";case I.Baseline:return"42100b";case I.Main:return"4d100b";default:{se.warn(`profileLevelIdToString() | Level 1_b not is allowed for profile ${r.profile}`);return}}let e;switch(r.profile){case I.ConstrainedBaseline:{e="42e0";break}case I.Baseline:{e="4200";break}case I.Main:{e="4d00";break}case I.ConstrainedHigh:{e="640c";break}case I.High:{e="6400";break}case I.PredictiveHigh444:{e="f400";break}default:{se.warn(`profileLevelIdToString() | unrecognized profile ${r.profile}`);return}}let t=r.level.toString(16);return t.length===1&&(t=`0${t}`),`${e}${t}`}function Ho(r){switch(r){case I.ConstrainedBaseline:return"ConstrainedBaseline";case I.Baseline:return"Baseline";case I.Main:return"Main";case I.ConstrainedHigh:return"ConstrainedHigh";case I.High:return"High";case I.PredictiveHigh444:return"PredictiveHigh444";default:{se.warn(`profileToString() | unrecognized profile ${r}`);return}}}function Vo(r){switch(r){case _.L1_b:return"1b";case _.L1:return"1";case _.L1_1:return"1.1";case _.L1_2:return"1.2";case _.L1_3:return"1.3";case _.L2:return"2";case _.L2_1:return"2.1";case _.L2_2:return"2.2";case _.L3:return"3";case _.L3_1:return"3.1";case _.L3_2:return"3.2";case _.L4:return"4";case _.L4_1:return"4.1";case _.L4_2:return"4.2";case _.L5:return"5";case _.L5_1:return"5.1";case _.L5_2:return"5.2";default:{se.warn(`levelToString() | unrecognized level ${r}`);return}}}function xe(r={}){let e=r["profile-level-id"];return e?$n(e):Bo}function Go(r={},e={}){let t=xe(r),s=xe(e);return!!(t&&s&&t.profile===s.profile)}function Ko(r={},e={}){let t=xe(r),s=xe(e);return!!(t&&s&&t.profile===s.profile&&t.level==s.level)}function Yo(r={},e={}){if(!r["profile-level-id"]&&!e["profile-level-id"]){se.warn("generateProfileLevelIdStringForAnswer() | profile-level-id missing in local and remote params");return}let t=xe(r),s=xe(e);if(!t)throw new TypeError("invalid local_profile_level_id");if(!s)throw new TypeError("invalid remote_profile_level_id");if(t.profile!==s.profile)throw new TypeError("H264 Profile mismatch");let n=qn(r)&&qn(e),i=t.level,a=s.level,o=Xo(i,a),c=n?i:o;return se.debug(`generateProfileLevelIdStringForAnswer() | result [profile:${t.profile}, level:${c}]`),Un(new Ve(t.profile,c))}function Qo(r,e){for(let s=jn.length-1;s>=0;--s){let n=jn[s];if(n.max_macroblock_frame_size*256<=r&&n.max_macroblocks_per_second<=e*n.max_macroblock_frame_size)return se.debug(`supportedLevel() | result [max_frame_pixel_count:${r}, max_fps:${e}, level:${n.level}]`),n.level}se.warn(`supportedLevel() | no level supported [max_frame_pixel_count:${r}, max_fps:${e}]`)}function Fn(r,e){return+(e[0]===r)<<7|+(e[1]===r)<<6|+(e[2]===r)<<5|+(e[3]===r)<<4|+(e[4]===r)<<3|+(e[5]===r)<<2|+(e[6]===r)<<1|+(e[7]===r)<<0}function Jo(r,e){return r===_.L1_b?e!==_.L1&&e!==_.L1_b:e===_.L1_b?r!==_.L1:r<e}function Xo(r,e){return Jo(r,e)?r:e}function qn(r={}){let e=r["level-asymmetry-allowed"];return e===!0||e===1||e==="1"}});var ie=C(z=>{"use strict";Object.defineProperty(z,"__esModule",{value:!0});z.validateAndNormalizeRtpCapabilities=sc;z.validateAndNormalizeRtpParameters=Br;z.validateAndNormalizeSctpStreamParameters=nc;z.validateSctpCapabilities=ic;z.getExtendedRtpCapabilities=ac;z.getRecvRtpCapabilities=oc;z.getSendRtpCapabilities=cc;z.getSendingRtpParameters=dc;z.getSendingRemoteRtpParameters=pc;z.reduceCodecs=lc;z.generateProbatorRtpParameters=uc;z.canSend=hc;z.canReceive=fc;var Bn=zn(),Zo=Pe(),ec="probator",tc=1234,rc=127;function sc(r){if(typeof r!="object")throw new TypeError("caps is not an object");if(r.codecs&&!Array.isArray(r.codecs))throw new TypeError("caps.codecs is not an array");r.codecs||(r.codecs=[]);for(let e of r.codecs)mc(e);if(r.headerExtensions&&!Array.isArray(r.headerExtensions))throw new TypeError("caps.headerExtensions is not an array");r.headerExtensions||(r.headerExtensions=[]);for(let e of r.headerExtensions)gc(e)}function Br(r){if(typeof r!="object")throw new TypeError("params is not an object");if(r.mid&&typeof r.mid!="string")throw new TypeError("params.mid is not a string");if(!Array.isArray(r.codecs))throw new TypeError("missing params.codecs");for(let e of r.codecs)_c(e);if(r.headerExtensions&&!Array.isArray(r.headerExtensions))throw new TypeError("params.headerExtensions is not an array");r.headerExtensions||(r.headerExtensions=[]);for(let e of r.headerExtensions)vc(e);if(r.encodings&&!Array.isArray(r.encodings))throw new TypeError("params.encodings is not an array");r.encodings||(r.encodings=[]);for(let e of r.encodings)wc(e);if(r.rtcp&&typeof r.rtcp!="object")throw new TypeError("params.rtcp is not an object");r.rtcp||(r.rtcp={}),yc(r.rtcp)}function nc(r){if(typeof r!="object")throw new TypeError("params is not an object");if(typeof r.streamId!="number")throw new TypeError("missing params.streamId");let e=!1;if(typeof r.ordered=="boolean"?e=!0:r.ordered=!0,r.maxPacketLifeTime&&typeof r.maxPacketLifeTime!="number")throw new TypeError("invalid params.maxPacketLifeTime");if(r.maxRetransmits&&typeof r.maxRetransmits!="number")throw new TypeError("invalid params.maxRetransmits");if(r.maxPacketLifeTime&&r.maxRetransmits)throw new TypeError("cannot provide both maxPacketLifeTime and maxRetransmits");if(e&&r.ordered&&(r.maxPacketLifeTime||r.maxRetransmits))throw new TypeError("cannot be ordered with maxPacketLifeTime or maxRetransmits");if(!e&&(r.maxPacketLifeTime||r.maxRetransmits)&&(r.ordered=!1),r.label&&typeof r.label!="string")throw new TypeError("invalid params.label");if(r.protocol&&typeof r.protocol!="string")throw new TypeError("invalid params.protocol")}function ic(r){if(typeof r!="object")throw new TypeError("caps is not an object");if(!r.numStreams||typeof r.numStreams!="object")throw new TypeError("missing caps.numStreams");bc(r.numStreams)}function ac(r,e,t){let s={codecs:[],headerExtensions:[]};if(t)for(let n of r.codecs??[]){if(Ge(n))continue;let i=(e.codecs??[]).find(o=>zr(o,n,{strict:!0,modify:!0}));if(!i)continue;let a={kind:n.kind,mimeType:n.mimeType,clockRate:n.clockRate,channels:n.channels,localPayloadType:n.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:i.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:n.parameters??{},remoteParameters:i.parameters??{},rtcpFeedback:Wn(n,i)};s.codecs.push(a)}else for(let n of e.codecs??[]){if(Ge(n))continue;let i=(r.codecs??[]).find(o=>zr(o,n,{strict:!0,modify:!0}));if(!i)continue;let a={kind:i.kind,mimeType:i.mimeType,clockRate:i.clockRate,channels:i.channels,localPayloadType:i.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:n.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:i.parameters??{},remoteParameters:n.parameters??{},rtcpFeedback:Wn(i,n)};s.codecs.push(a)}for(let n of s.codecs){let i=r.codecs.find(o=>Ge(o)&&o.parameters?.apt===n.localPayloadType),a=e.codecs.find(o=>Ge(o)&&o.parameters?.apt===n.remotePayloadType);i&&a&&(n.localRtxPayloadType=i.preferredPayloadType,n.remoteRtxPayloadType=a.preferredPayloadType)}for(let n of e.headerExtensions){let i=r.headerExtensions.find(o=>Sc(o,n));if(!i)continue;let a={kind:n.kind,uri:n.uri,sendId:i.preferredId,recvId:n.preferredId,encrypt:i.preferredEncrypt??!1,direction:"sendrecv"};switch(n.direction){case"sendrecv":{a.direction="sendrecv";break}case"recvonly":{a.direction="sendonly";break}case"sendonly":{a.direction="recvonly";break}case"inactive":{a.direction="inactive";break}}s.headerExtensions.push(a)}return s}function oc(r){return Vn({direction:"recvonly",extendedRtpCapabilities:r})}function cc(r){return Vn({direction:"sendonly",extendedRtpCapabilities:r})}function dc(r,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let s of e.codecs){if(s.kind!==r)continue;let n={mimeType:s.mimeType,payloadType:s.localPayloadType,clockRate:s.clockRate,channels:s.channels,parameters:s.localParameters,rtcpFeedback:s.rtcpFeedback};if(t.codecs.push(n),s.localRtxPayloadType){let i={mimeType:`${s.kind}/rtx`,payloadType:s.localRtxPayloadType,clockRate:s.clockRate,parameters:{apt:s.localPayloadType},rtcpFeedback:[]};t.codecs.push(i)}}for(let s of e.headerExtensions){if(s.kind&&s.kind!==r||s.direction!=="sendrecv"&&s.direction!=="sendonly")continue;let n={uri:s.uri,id:s.sendId,encrypt:s.encrypt,parameters:{}};t.headerExtensions.push(n)}return t}function pc(r,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let s of e.codecs){if(s.kind!==r)continue;let n={mimeType:s.mimeType,payloadType:s.localPayloadType,clockRate:s.clockRate,channels:s.channels,parameters:s.remoteParameters,rtcpFeedback:s.rtcpFeedback};if(t.codecs.push(n),s.localRtxPayloadType){let i={mimeType:`${s.kind}/rtx`,payloadType:s.localRtxPayloadType,clockRate:s.clockRate,parameters:{apt:s.localPayloadType},rtcpFeedback:[]};t.codecs.push(i)}}for(let s of e.headerExtensions){if(s.kind&&s.kind!==r||s.direction!=="sendrecv"&&s.direction!=="sendonly")continue;let n={uri:s.uri,id:s.sendId,encrypt:s.encrypt,parameters:{}};t.headerExtensions.push(n)}if(t.headerExtensions.some(s=>s.uri==="http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"))for(let s of t.codecs)s.rtcpFeedback=(s.rtcpFeedback??[]).filter(n=>n.type!=="goog-remb");else if(t.headerExtensions.some(s=>s.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"))for(let s of t.codecs)s.rtcpFeedback=(s.rtcpFeedback??[]).filter(n=>n.type!=="transport-cc");else for(let s of t.codecs)s.rtcpFeedback=(s.rtcpFeedback??[]).filter(n=>n.type!=="transport-cc"&&n.type!=="goog-remb");return t}function lc(r,e){let t=[];if(!e)t.push(r[0]),Ge(r[1])&&t.push(r[1]);else{for(let s=0;s<r.length;++s)if(zr(r[s],e,{strict:!0})){t.push(r[s]),Ge(r[s+1])&&t.push(r[s+1]);break}if(t.length===0)throw new TypeError("no matching codec found")}return t}function uc(r){r=Zo.clone(r),Br(r);let e={mid:ec,codecs:[],headerExtensions:[],encodings:[{ssrc:tc}],rtcp:{cname:"probator"}};return e.codecs.push(r.codecs[0]),e.codecs[0].payloadType=rc,e.headerExtensions=r.headerExtensions,e}function hc(r,e){return(e.codecs??[]).some(t=>t.kind===r)}function fc(r,e){if(Br(r),r.codecs.length===0)return!1;let t=r.codecs[0];return(e.codecs??[]).some(s=>s.preferredPayloadType===t.payloadType)}function mc(r){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof r!="object")throw new TypeError("codec is not an object");if(!r.mimeType||typeof r.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(r.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(r.kind=t[1].toLowerCase(),typeof r.preferredPayloadType!="number")throw new TypeError("missing codec.preferredPayloadType");if(typeof r.clockRate!="number")throw new TypeError("missing codec.clockRate");r.kind==="audio"?typeof r.channels!="number"&&(r.channels=1):delete r.channels,(!r.parameters||typeof r.parameters!="object")&&(r.parameters={});for(let s of Object.keys(r.parameters)){let n=r.parameters[s];if(n===void 0&&(r.parameters[s]="",n=""),typeof n!="string"&&typeof n!="number")throw new TypeError(`invalid codec parameter [key:${s}s, value:${n}]`);if(s==="apt"&&typeof n!="number")throw new TypeError("invalid codec apt parameter")}(!r.rtcpFeedback||!Array.isArray(r.rtcpFeedback))&&(r.rtcpFeedback=[]);for(let s of r.rtcpFeedback)Hn(s)}function Hn(r){if(typeof r!="object")throw new TypeError("fb is not an object");if(!r.type||typeof r.type!="string")throw new TypeError("missing fb.type");(!r.parameter||typeof r.parameter!="string")&&(r.parameter="")}function gc(r){if(typeof r!="object")throw new TypeError("ext is not an object");if(r.kind!=="audio"&&r.kind!=="video")throw new TypeError("invalid ext.kind");if(!r.uri||typeof r.uri!="string")throw new TypeError("missing ext.uri");if(typeof r.preferredId!="number")throw new TypeError("missing ext.preferredId");if(r.preferredEncrypt&&typeof r.preferredEncrypt!="boolean")throw new TypeError("invalid ext.preferredEncrypt");if(r.preferredEncrypt||(r.preferredEncrypt=!1),r.direction&&typeof r.direction!="string")throw new TypeError("invalid ext.direction");r.direction||(r.direction="sendrecv")}function _c(r){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof r!="object")throw new TypeError("codec is not an object");if(!r.mimeType||typeof r.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(r.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(typeof r.payloadType!="number")throw new TypeError("missing codec.payloadType");if(typeof r.clockRate!="number")throw new TypeError("missing codec.clockRate");t[1].toLowerCase()==="audio"?typeof r.channels!="number"&&(r.channels=1):delete r.channels,(!r.parameters||typeof r.parameters!="object")&&(r.parameters={});for(let n of Object.keys(r.parameters)){let i=r.parameters[n];if(i===void 0&&(r.parameters[n]="",i=""),typeof i!="string"&&typeof i!="number")throw new TypeError(`invalid codec parameter [key:${n}s, value:${i}]`);if(n==="apt"&&typeof i!="number")throw new TypeError("invalid codec apt parameter")}(!r.rtcpFeedback||!Array.isArray(r.rtcpFeedback))&&(r.rtcpFeedback=[]);for(let n of r.rtcpFeedback)Hn(n)}function vc(r){if(typeof r!="object")throw new TypeError("ext is not an object");if(!r.uri||typeof r.uri!="string")throw new TypeError("missing ext.uri");if(typeof r.id!="number")throw new TypeError("missing ext.id");if(r.encrypt&&typeof r.encrypt!="boolean")throw new TypeError("invalid ext.encrypt");r.encrypt||(r.encrypt=!1),(!r.parameters||typeof r.parameters!="object")&&(r.parameters={});for(let e of Object.keys(r.parameters)){let t=r.parameters[e];if(t===void 0&&(r.parameters[e]="",t=""),typeof t!="string"&&typeof t!="number")throw new TypeError("invalid header extension parameter")}}function wc(r){if(typeof r!="object")throw new TypeError("encoding is not an object");if(r.ssrc&&typeof r.ssrc!="number")throw new TypeError("invalid encoding.ssrc");if(r.rid&&typeof r.rid!="string")throw new TypeError("invalid encoding.rid");if(r.rtx&&typeof r.rtx!="object")throw new TypeError("invalid encoding.rtx");if(r.rtx&&typeof r.rtx.ssrc!="number")throw new TypeError("missing encoding.rtx.ssrc");if((!r.dtx||typeof r.dtx!="boolean")&&(r.dtx=!1),r.scalabilityMode&&typeof r.scalabilityMode!="string")throw new TypeError("invalid encoding.scalabilityMode")}function yc(r){if(typeof r!="object")throw new TypeError("rtcp is not an object");if(r.cname&&typeof r.cname!="string")throw new TypeError("invalid rtcp.cname");(!r.reducedSize||typeof r.reducedSize!="boolean")&&(r.reducedSize=!0)}function bc(r){if(typeof r!="object")throw new TypeError("numStreams is not an object");if(typeof r.OS!="number")throw new TypeError("missing numStreams.OS");if(typeof r.MIS!="number")throw new TypeError("missing numStreams.MIS")}function Vn({direction:r,extendedRtpCapabilities:e}){let t={codecs:[],headerExtensions:[]};for(let s of e.codecs){let n={kind:s.kind,mimeType:s.mimeType,preferredPayloadType:s.remotePayloadType,clockRate:s.clockRate,channels:s.channels,parameters:s.localParameters,rtcpFeedback:s.rtcpFeedback};if(t.codecs.push(n),!s.remoteRtxPayloadType)continue;let i={kind:s.kind,mimeType:`${s.kind}/rtx`,preferredPayloadType:s.remoteRtxPayloadType,clockRate:s.clockRate,parameters:{apt:s.remotePayloadType},rtcpFeedback:[]};t.codecs.push(i)}for(let s of e.headerExtensions){if(s.direction!=="sendrecv"&&s.direction!==r)continue;let n={kind:s.kind,uri:s.uri,preferredId:s.recvId,preferredEncrypt:s.encrypt??!1,direction:s.direction};t.headerExtensions.push(n)}return t}function Ge(r){return r?/.+\/rtx$/i.test(r.mimeType):!1}function zr(r,e,{strict:t=!1,modify:s=!1}={}){let n=r.mimeType.toLowerCase(),i=e.mimeType.toLowerCase();if(n!==i||r.clockRate!==e.clockRate||r.channels!==e.channels)return!1;switch(n){case"video/h264":{if(t){let a=r.parameters["packetization-mode"]??0,o=e.parameters["packetization-mode"]??0;if(a!==o||!Bn.isSameProfile(r.parameters,e.parameters))return!1;let c;try{c=Bn.generateProfileLevelIdStringForAnswer(r.parameters,e.parameters)}catch{return!1}s&&(c?(r.parameters["profile-level-id"]=c,e.parameters["profile-level-id"]=c):(delete r.parameters["profile-level-id"],delete e.parameters["profile-level-id"]))}break}case"video/vp9":{if(t){let a=r.parameters["profile-id"]??0,o=e.parameters["profile-id"]??0;if(a!==o)return!1}break}}return!0}function Sc(r,e){return!(r.kind&&e.kind&&r.kind!==e.kind||r.uri!==e.uri)}function Wn(r,e){let t=[];for(let s of r.rtcpFeedback??[]){let n=(e.rtcpFeedback??[]).find(i=>i.type===s.type&&(i.parameter===s.parameter||!i.parameter&&!s.parameter));n&&t.push(n)}return t}});var Gn=C(Qt=>{"use strict";Object.defineProperty(Qt,"__esModule",{value:!0});Qt.Logger=void 0;var Ke=pt(),Ye="awaitqueue",Wr=class{_debug;_warn;_error;constructor(e){e?(this._debug=Ke(`${Ye}:${e}`),this._warn=Ke(`${Ye}:WARN:${e}`),this._error=Ke(`${Ye}:ERROR:${e}`)):(this._debug=Ke(Ye),this._warn=Ke(`${Ye}:WARN`),this._error=Ke(`${Ye}:ERROR`)),this._debug.log=console.info.bind(console),this._warn.log=console.warn.bind(console),this._error.log=console.error.bind(console)}get debug(){return this._debug}get warn(){return this._warn}get error(){return this._error}};Qt.Logger=Wr});var Gr=C(Qe=>{"use strict";Object.defineProperty(Qe,"__esModule",{value:!0});Qe.AwaitQueueRemovedTaskError=Qe.AwaitQueueStoppedError=void 0;var Hr=class r extends Error{constructor(e){super(e??"queue stopped"),this.name="AwaitQueueStoppedError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,r)}};Qe.AwaitQueueStoppedError=Hr;var Vr=class r extends Error{constructor(e){super(e??"queue task removed"),this.name="AwaitQueueRemovedTaskError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,r)}};Qe.AwaitQueueRemovedTaskError=Vr});var Kn=C(Jt=>{"use strict";Object.defineProperty(Jt,"__esModule",{value:!0});Jt.AwaitQueue=void 0;var Rc=Gn(),Kr=Gr(),he=new Rc.Logger("AwaitQueue"),Yr=class{pendingTasks=new Map;nextTaskId=0;constructor(){he.debug("constructor()")}get size(){return this.pendingTasks.size}async push(e,t,s){if(t=t??e.name,he.debug(`push() [name:${t}, options:%o]`,s),typeof e!="function")throw new TypeError("given task is not a function");if(t)try{Object.defineProperty(e,"name",{value:t})}catch{}return new Promise((n,i)=>{if(t&&s?.removeOngoingTasksWithSameName)for(let o of this.pendingTasks.values())o.name===t&&o.reject(new Kr.AwaitQueueRemovedTaskError,{canExecuteNextTask:!1});let a={id:this.nextTaskId++,task:e,name:t,enqueuedAt:Date.now(),executedAt:void 0,completed:!1,resolve:o=>{if(a.completed)return;a.completed=!0,this.pendingTasks.delete(a.id),he.debug(`resolving task [name:${a.name}]`),n(o);let[c]=this.pendingTasks.values();c&&!c.executedAt&&this.execute(c)},reject:(o,{canExecuteNextTask:c})=>{if(!a.completed&&(a.completed=!0,this.pendingTasks.delete(a.id),he.debug(`rejecting task [name:${a.name}]: %s`,String(o)),i(o),c)){let[p]=this.pendingTasks.values();p&&!p.executedAt&&this.execute(p)}}};this.pendingTasks.set(a.id,a),this.pendingTasks.size===1&&this.execute(a)})}stop(){he.debug("stop()");for(let e of this.pendingTasks.values())he.debug(`stop() | stopping task [name:${e.name}]`),e.reject(new Kr.AwaitQueueStoppedError,{canExecuteNextTask:!1})}remove(e){he.debug(`remove() [taskIdx:${e}]`);let t=Array.from(this.pendingTasks.values())[e];if(!t){he.debug(`stop() | no task with given idx [taskIdx:${e}]`);return}t.reject(new Kr.AwaitQueueRemovedTaskError,{canExecuteNextTask:!0})}dump(){let e=Date.now(),t=0;return Array.from(this.pendingTasks.values()).map(s=>({idx:t++,task:s.task,name:s.name,enqueuedTime:s.executedAt?s.executedAt-s.enqueuedAt:e-s.enqueuedAt,executionTime:s.executedAt?e-s.executedAt:0}))}async execute(e){if(he.debug(`execute() [name:${e.name}]`),e.executedAt)throw new Error("task already being executed");e.executedAt=Date.now();try{let t=await e.task();e.resolve(t)}catch(t){e.reject(t,{canExecuteNextTask:!0})}}};Jt.AwaitQueue=Yr});var Qn=C(Re=>{"use strict";Object.defineProperty(Re,"__esModule",{value:!0});Re.AwaitQueueRemovedTaskError=Re.AwaitQueueStoppedError=Re.AwaitQueue=void 0;var Cc=Kn();Object.defineProperty(Re,"AwaitQueue",{enumerable:!0,get:function(){return Cc.AwaitQueue}});var Yn=Gr();Object.defineProperty(Re,"AwaitQueueStoppedError",{enumerable:!0,get:function(){return Yn.AwaitQueueStoppedError}});Object.defineProperty(Re,"AwaitQueueRemovedTaskError",{enumerable:!0,get:function(){return Yn.AwaitQueueRemovedTaskError}})});var Xn=C(Xt=>{"use strict";Object.defineProperty(Xt,"__esModule",{value:!0});Xt.Producer=void 0;var Tc=U(),Jn=V(),Je=Q(),ae=new Tc.Logger("Producer"),Qr=class extends Jn.EnhancedEventEmitter{_id;_localId;_closed=!1;_rtpSender;_track;_kind;_rtpParameters;_paused;_maxSpatialLayer;_stopTracks;_disableTrackOnPause;_zeroRtpOnPause;_appData;_observer=new Jn.EnhancedEventEmitter;constructor({id:e,localId:t,rtpSender:s,track:n,rtpParameters:i,stopTracks:a,disableTrackOnPause:o,zeroRtpOnPause:c,appData:p}){super(),ae.debug("constructor()"),this._id=e,this._localId=t,this._rtpSender=s,this._track=n,this._kind=n.kind,this._rtpParameters=i,this._paused=o?!n.enabled:!1,this._maxSpatialLayer=void 0,this._stopTracks=a,this._disableTrackOnPause=o,this._zeroRtpOnPause=c,this._appData=p??{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get closed(){return this._closed}get kind(){return this._kind}get rtpSender(){return this._rtpSender}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get maxSpatialLayer(){return this._maxSpatialLayer}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(ae.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(ae.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new Je.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(ae.debug("pause()"),this._closed){ae.error("pause() | Producer closed");return}this._paused=!0,this._track&&this._disableTrackOnPause&&(this._track.enabled=!1),this._zeroRtpOnPause&&new Promise((e,t)=>{this.safeEmit("@pause",e,t)}).catch(()=>{}),this._observer.safeEmit("pause")}resume(){if(ae.debug("resume()"),this._closed){ae.error("resume() | Producer closed");return}this._paused=!1,this._track&&this._disableTrackOnPause&&(this._track.enabled=!0),this._zeroRtpOnPause&&new Promise((e,t)=>{this.safeEmit("@resume",e,t)}).catch(()=>{}),this._observer.safeEmit("resume")}async replaceTrack({track:e}){if(ae.debug("replaceTrack() [track:%o]",e),this._closed){if(e&&this._stopTracks)try{e.stop()}catch{}throw new Je.InvalidStateError("closed")}else if(e?.readyState==="ended")throw new Je.InvalidStateError("track ended");if(e===this._track){ae.debug("replaceTrack() | same track, ignored");return}await new Promise((t,s)=>{this.safeEmit("@replacetrack",e,t,s)}),this.destroyTrack(),this._track=e,this._track&&this._disableTrackOnPause&&(this._paused?this._paused&&(this._track.enabled=!1):this._track.enabled=!0),this.handleTrack()}async setMaxSpatialLayer(e){if(this._closed)throw new Je.InvalidStateError("closed");if(this._kind!=="video")throw new Je.UnsupportedError("not a video Producer");if(typeof e!="number")throw new TypeError("invalid spatialLayer");e!==this._maxSpatialLayer&&(await new Promise((t,s)=>{this.safeEmit("@setmaxspatiallayer",e,t,s)}).catch(()=>{}),this._maxSpatialLayer=e)}async setRtpEncodingParameters(e){if(this._closed)throw new Je.InvalidStateError("closed");if(typeof e!="object")throw new TypeError("invalid params");await new Promise((t,s)=>{this.safeEmit("@setrtpencodingparameters",e,t,s)})}onTrackEnded(){ae.debug('track "ended" event'),this.safeEmit("trackended"),this._observer.safeEmit("trackended")}handleTrack(){this._track&&this._track.addEventListener("ended",this.onTrackEnded)}destroyTrack(){if(this._track)try{this._track.removeEventListener("ended",this.onTrackEnded),this._stopTracks&&this._track.stop()}catch{}}};Xt.Producer=Qr});var ei=C(Zt=>{"use strict";Object.defineProperty(Zt,"__esModule",{value:!0});Zt.Consumer=void 0;var Ec=U(),Zn=V(),kc=Q(),oe=new Ec.Logger("Consumer"),Jr=class extends Zn.EnhancedEventEmitter{_id;_localId;_producerId;_closed=!1;_rtpReceiver;_track;_rtpParameters;_paused;_appData;_observer=new Zn.EnhancedEventEmitter;constructor({id:e,localId:t,producerId:s,rtpReceiver:n,track:i,rtpParameters:a,appData:o}){super(),oe.debug("constructor()"),this._id=e,this._localId=t,this._producerId=s,this._rtpReceiver=n,this._track=i,this._rtpParameters=a,this._paused=!i.enabled,this._appData=o??{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get producerId(){return this._producerId}get closed(){return this._closed}get kind(){return this._track.kind}get rtpReceiver(){return this._rtpReceiver}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(oe.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(oe.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new kc.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(oe.debug("pause()"),this._closed){oe.error("pause() | Consumer closed");return}if(this._paused){oe.debug("pause() | Consumer is already paused");return}this._paused=!0,this._track.enabled=!1,this.emit("@pause"),this._observer.safeEmit("pause")}resume(){if(oe.debug("resume()"),this._closed){oe.error("resume() | Consumer closed");return}if(!this._paused){oe.debug("resume() | Consumer is already resumed");return}this._paused=!1,this._track.enabled=!0,this.emit("@resume"),this._observer.safeEmit("resume")}onTrackEnded(){oe.debug('track "ended" event'),this.safeEmit("trackended"),this._observer.safeEmit("trackended")}handleTrack(){this._track.addEventListener("ended",this.onTrackEnded)}destroyTrack(){try{this._track.removeEventListener("ended",this.onTrackEnded),this._track.stop()}catch{}}};Zt.Consumer=Jr});var ri=C(er=>{"use strict";Object.defineProperty(er,"__esModule",{value:!0});er.DataProducer=void 0;var Pc=U(),ti=V(),xc=Q(),fe=new Pc.Logger("DataProducer"),Xr=class extends ti.EnhancedEventEmitter{_id;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new ti.EnhancedEventEmitter;constructor({id:e,dataChannel:t,sctpStreamParameters:s,appData:n}){super(),fe.debug("constructor()"),this._id=e,this._dataChannel=t,this._sctpStreamParameters=s,this._appData=n??{},this.handleDataChannel()}get id(){return this._id}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get bufferedAmount(){return this._dataChannel.bufferedAmount}get bufferedAmountLowThreshold(){return this._dataChannel.bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._dataChannel.bufferedAmountLowThreshold=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(fe.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(fe.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}send(e){if(fe.debug("send()"),this._closed)throw new xc.InvalidStateError("closed");this._dataChannel.send(e)}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(fe.debug('DataChannel "open" event'),this.safeEmit("open"))}),this._dataChannel.addEventListener("error",e=>{if(this._closed)return;let t=e.error??new Error("unknown DataChannel error");e.error?.errorDetail==="sctp-failure"?fe.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):fe.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(fe.warn('DataChannel "close" event'),this._closed=!0,this.emit("@close"),this.safeEmit("close"),this._observer.safeEmit("close"))}),this._dataChannel.addEventListener("message",()=>{this._closed||fe.warn('DataChannel "message" event in a DataProducer, message discarded')}),this._dataChannel.addEventListener("bufferedamountlow",()=>{this._closed||this.safeEmit("bufferedamountlow")})}};er.DataProducer=Xr});var ni=C(tr=>{"use strict";Object.defineProperty(tr,"__esModule",{value:!0});tr.DataConsumer=void 0;var Dc=U(),si=V(),De=new Dc.Logger("DataConsumer"),Zr=class extends si.EnhancedEventEmitter{_id;_dataProducerId;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new si.EnhancedEventEmitter;constructor({id:e,dataProducerId:t,dataChannel:s,sctpStreamParameters:n,appData:i}){super(),De.debug("constructor()"),this._id=e,this._dataProducerId=t,this._dataChannel=s,this._sctpStreamParameters=n,this._appData=i??{},this.handleDataChannel()}get id(){return this._id}get dataProducerId(){return this._dataProducerId}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get binaryType(){return this._dataChannel.binaryType}set binaryType(e){this._dataChannel.binaryType=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(De.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(De.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(De.debug('DataChannel "open" event'),this.safeEmit("open"))}),this._dataChannel.addEventListener("error",e=>{if(this._closed)return;let t=e.error??new Error("unknown DataChannel error");e.error?.errorDetail==="sctp-failure"?De.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):De.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(De.warn('DataChannel "close" event'),this._closed=!0,this.emit("@close"),this.safeEmit("close"),this._observer.safeEmit("close"))}),this._dataChannel.addEventListener("message",e=>{this._closed||this.safeEmit("message",e.data)})}};tr.DataConsumer=Zr});var ai=C(rr=>{"use strict";Object.defineProperty(rr,"__esModule",{value:!0});rr.Transport=void 0;var Ic=Qn(),Lc=U(),ii=V(),N=Q(),es=Pe(),ut=ie(),Mc=Xn(),Oc=ei(),Ac=ri(),Nc=ni(),A=new Lc.Logger("Transport"),ts=class{consumerOptions;promise;resolve;reject;constructor(e){this.consumerOptions=e,this.promise=new Promise((t,s)=>{this.resolve=t,this.reject=s})}},rs=class extends ii.EnhancedEventEmitter{_id;_closed=!1;_direction;_getSendExtendedRtpCapabilities;_recvRtpCapabilities;_canProduceByKind;_maxSctpMessageSize;_handler;_iceGatheringState="new";_connectionState="new";_appData;_producers=new Map;_consumers=new Map;_dataProducers=new Map;_dataConsumers=new Map;_probatorConsumerCreated=!1;_awaitQueue=new Ic.AwaitQueue;_pendingConsumerTasks=[];_consumerCreationInProgress=!1;_pendingPauseConsumers=new Map;_consumerPauseInProgress=!1;_pendingResumeConsumers=new Map;_consumerResumeInProgress=!1;_pendingCloseConsumers=new Map;_consumerCloseInProgress=!1;_observer=new ii.EnhancedEventEmitter;constructor({direction:e,id:t,iceParameters:s,iceCandidates:n,dtlsParameters:i,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:p,appData:d,handlerFactory:l,getSendExtendedRtpCapabilities:u,recvRtpCapabilities:m,canProduceByKind:f}){super(),A.debug("constructor() [id:%s, direction:%s]",t,e),this._id=t,this._direction=e,this._getSendExtendedRtpCapabilities=u,this._recvRtpCapabilities=m,this._canProduceByKind=f,this._maxSctpMessageSize=a?.maxMessageSize;let h=es.clone(p)??{};delete h.iceServers,delete h.iceTransportPolicy,delete h.bundlePolicy,delete h.rtcpMuxPolicy,this._handler=l.factory({direction:e,iceParameters:s,iceCandidates:n,dtlsParameters:i,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:h,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities}),this._appData=d??{},this.handleHandler()}get id(){return this._id}get closed(){return this._closed}get direction(){return this._direction}get handler(){return this._handler}get iceGatheringState(){return this._iceGatheringState}get connectionState(){return this._connectionState}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){if(!this._closed){A.debug("close()"),this._closed=!0,this._awaitQueue.stop(),this._handler.close(),this._connectionState="closed";for(let e of this._producers.values())e.transportClosed();this._producers.clear();for(let e of this._consumers.values())e.transportClosed();this._consumers.clear();for(let e of this._dataProducers.values())e.transportClosed();this._dataProducers.clear();for(let e of this._dataConsumers.values())e.transportClosed();this._dataConsumers.clear(),this._observer.safeEmit("close"),super.close(),this._observer.close()}}async getStats(){if(this._closed)throw new N.InvalidStateError("closed");return this._handler.getTransportStats()}async restartIce({iceParameters:e}){if(A.debug("restartIce()"),this._closed)throw new N.InvalidStateError("closed");if(!e)throw new TypeError("missing iceParameters");return this._awaitQueue.push(async()=>await this._handler.restartIce(e),"transport.restartIce()")}async updateIceServers({iceServers:e}={}){if(A.debug("updateIceServers()"),this._closed)throw new N.InvalidStateError("closed");if(!Array.isArray(e))throw new TypeError("missing iceServers");return this._awaitQueue.push(async()=>this._handler.updateIceServers(e),"transport.updateIceServers()")}async produce({track:e,streamId:t,encodings:s,codecOptions:n,headerExtensionOptions:i,codec:a,stopTracks:o=!0,disableTrackOnPause:c=!0,zeroRtpOnPause:p=!1,onRtpSender:d,appData:l={}}={}){if(A.debug("produce() [track:%o]",e),this._closed)throw new N.InvalidStateError("closed");if(e){if(this._direction!=="send")throw new N.UnsupportedError("not a sending Transport");if(this._canProduceByKind[e.kind]){if(e.readyState==="ended")throw new N.InvalidStateError("track ended");if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(this.listenerCount("produce")===0)throw new TypeError('no "produce" listener set into this transport');if(l&&typeof l!="object")throw new TypeError("if given, appData must be an object")}else throw new N.UnsupportedError(`cannot produce ${e.kind}`)}else throw new TypeError("missing track");return this._awaitQueue.push(async()=>{let u;if(s&&!Array.isArray(s))throw TypeError("encodings must be an array");s?.length===0?u=void 0:s&&(u=s.map(g=>{let v={active:!0};return g.active===!1&&(v.active=!1),typeof g.dtx=="boolean"&&(v.dtx=g.dtx),typeof g.scalabilityMode=="string"&&(v.scalabilityMode=g.scalabilityMode),typeof g.scaleResolutionDownBy=="number"&&(v.scaleResolutionDownBy=g.scaleResolutionDownBy),typeof g.maxBitrate=="number"&&(v.maxBitrate=g.maxBitrate),typeof g.maxFramerate=="number"&&(v.maxFramerate=g.maxFramerate),typeof g.adaptivePtime=="boolean"&&(v.adaptivePtime=g.adaptivePtime),typeof g.priority=="string"&&(v.priority=g.priority),typeof g.networkPriority=="string"&&(v.networkPriority=g.networkPriority),v}));let{localId:m,rtpParameters:f,rtpSender:h}=await this._handler.send({track:e,streamId:t,encodings:u,codecOptions:n,headerExtensionOptions:i,codec:a,onRtpSender:d});try{ut.validateAndNormalizeRtpParameters(f);let{id:g}=await new Promise((b,P)=>{this.safeEmit("produce",{kind:e.kind,rtpParameters:f,appData:l},b,P)}),v=new Mc.Producer({id:g,localId:m,rtpSender:h,track:e,rtpParameters:f,stopTracks:o,disableTrackOnPause:c,zeroRtpOnPause:p,appData:l});return this._producers.set(v.id,v),this.handleProducer(v),this._observer.safeEmit("newproducer",v),v}catch(g){throw this._handler.stopSending(m).catch(()=>{}),g}},"transport.produce()").catch(u=>{if(o)try{e.stop()}catch{}throw u})}async consume({id:e,producerId:t,kind:s,rtpParameters:n,streamId:i,onRtpReceiver:a,appData:o={}}){if(A.debug("consume()"),this._closed)throw new N.InvalidStateError("closed");if(this._direction!=="recv")throw new N.UnsupportedError("not a receiving Transport");if(typeof e!="string")throw new TypeError("missing id");if(typeof t!="string")throw new TypeError("missing producerId");if(s!=="audio"&&s!=="video")throw new TypeError(`invalid kind '${s}'`);if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(o&&typeof o!="object")throw new TypeError("if given, appData must be an object");let c=es.clone(n);if(!ut.canReceive(c,this._recvRtpCapabilities))throw new N.UnsupportedError("cannot consume this Producer");let d=new ts({id:e,producerId:t,kind:s,rtpParameters:c,streamId:i,onRtpReceiver:a,appData:o});return this._pendingConsumerTasks.push(d),queueMicrotask(()=>{this._closed||this._consumerCreationInProgress===!1&&this.createPendingConsumers()}),d.promise}async produceData({ordered:e=!0,maxPacketLifeTime:t,maxRetransmits:s,label:n="",protocol:i="",appData:a={}}={}){if(A.debug("produceData()"),this._closed)throw new N.InvalidStateError("closed");if(this._direction!=="send")throw new N.UnsupportedError("not a sending Transport");if(this._maxSctpMessageSize){if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(this.listenerCount("producedata")===0)throw new TypeError('no "producedata" listener set into this transport');if(a&&typeof a!="object")throw new TypeError("if given, appData must be an object")}else throw new N.UnsupportedError("SCTP not enabled by remote Transport");return(t||s)&&(e=!1),this._awaitQueue.push(async()=>{let{dataChannel:o,sctpStreamParameters:c}=await this._handler.sendDataChannel({sctpStreamParameters:{ordered:e,maxPacketLifeTime:t,maxRetransmits:s,label:n,protocol:i}});ut.validateAndNormalizeSctpStreamParameters(c);let{id:p}=await new Promise((l,u)=>{this.safeEmit("producedata",{sctpStreamParameters:c,label:n,protocol:i,appData:a},l,u)}),d=new Ac.DataProducer({id:p,dataChannel:o,sctpStreamParameters:c,appData:a});return this._dataProducers.set(d.id,d),this.handleDataProducer(d),this._observer.safeEmit("newdataproducer",d),d},"transport.produceData()")}async consumeData({id:e,dataProducerId:t,sctpStreamParameters:s,label:n="",protocol:i="",appData:a={}}){if(A.debug("consumeData()"),this._closed)throw new N.InvalidStateError("closed");if(this._direction!=="recv")throw new N.UnsupportedError("not a receiving Transport");if(this._maxSctpMessageSize){if(typeof e!="string")throw new TypeError("missing id");if(typeof t!="string")throw new TypeError("missing dataProducerId");if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(a&&typeof a!="object")throw new TypeError("if given, appData must be an object")}else throw new N.UnsupportedError("SCTP not enabled by remote Transport");let o=es.clone(s);return ut.validateAndNormalizeSctpStreamParameters(o),this._awaitQueue.push(async()=>{let{dataChannel:c}=await this._handler.receiveDataChannel({maxMessageSize:this._maxSctpMessageSize,sctpStreamParameters:o,label:n,protocol:i}),p=new Nc.DataConsumer({id:e,dataProducerId:t,dataChannel:c,sctpStreamParameters:o,appData:a});return this._dataConsumers.set(p.id,p),this.handleDataConsumer(p),this._observer.safeEmit("newdataconsumer",p),p},"transport.consumeData()")}getDataChannelMaxMessageSize(){return this._handler.getDataChannelMaxMessageSize()}createPendingConsumers(){this._consumerCreationInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingConsumerTasks.length===0){A.debug("createPendingConsumers() | there is no Consumer to be created");return}let e=[...this._pendingConsumerTasks];this._pendingConsumerTasks=[];let t,s=[];for(let n of e){let{id:i,kind:a,rtpParameters:o,streamId:c,onRtpReceiver:p}=n.consumerOptions;s.push({trackId:i,kind:a,rtpParameters:o,streamId:c,onRtpReceiver:p})}try{let n=await this._handler.receive(s);for(let i=0;i<n.length;++i){let a=e[i],o=n[i],{id:c,producerId:p,kind:d,rtpParameters:l,appData:u}=a.consumerOptions,{localId:m,rtpReceiver:f,track:h}=o,g=new Oc.Consumer({id:c,localId:m,producerId:p,rtpReceiver:f,track:h,rtpParameters:l,appData:u});this._consumers.set(g.id,g),this.handleConsumer(g),!this._probatorConsumerCreated&&!t&&d==="video"&&(t=g),this._observer.safeEmit("newconsumer",g),a.resolve(g)}}catch(n){for(let i of e)i.reject(n)}if(t)try{let n=ut.generateProbatorRtpParameters(t.rtpParameters);await this._handler.receive([{trackId:"probator",kind:"video",rtpParameters:n}]),A.debug("createPendingConsumers() | Consumer for RTP probation created"),this._probatorConsumerCreated=!0}catch(n){A.error("createPendingConsumers() | failed to create Consumer for RTP probation:%o",n)}},"transport.createPendingConsumers()").then(()=>{this._consumerCreationInProgress=!1,this._pendingConsumerTasks.length>0&&this.createPendingConsumers()}).catch(()=>{})}pausePendingConsumers(){this._consumerPauseInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingPauseConsumers.size===0){A.debug("pausePendingConsumers() | there is no Consumer to be paused");return}let e=Array.from(this._pendingPauseConsumers.values());this._pendingPauseConsumers.clear();try{let t=e.map(s=>s.localId);await this._handler.pauseReceiving(t)}catch(t){A.error("pausePendingConsumers() | failed to pause Consumers:",t)}},"transport.pausePendingConsumers()").then(()=>{this._consumerPauseInProgress=!1,this._pendingPauseConsumers.size>0&&this.pausePendingConsumers()}).catch(()=>{})}resumePendingConsumers(){this._consumerResumeInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingResumeConsumers.size===0){A.debug("resumePendingConsumers() | there is no Consumer to be resumed");return}let e=Array.from(this._pendingResumeConsumers.values());this._pendingResumeConsumers.clear();try{let t=e.map(s=>s.localId);await this._handler.resumeReceiving(t)}catch(t){A.error("resumePendingConsumers() | failed to resume Consumers:",t)}},"transport.resumePendingConsumers()").then(()=>{this._consumerResumeInProgress=!1,this._pendingResumeConsumers.size>0&&this.resumePendingConsumers()}).catch(()=>{})}closePendingConsumers(){this._consumerCloseInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingCloseConsumers.size===0){A.debug("closePendingConsumers() | there is no Consumer to be closed");return}let e=Array.from(this._pendingCloseConsumers.values());this._pendingCloseConsumers.clear();try{await this._handler.stopReceiving(e.map(t=>t.localId))}catch(t){A.error("closePendingConsumers() | failed to close Consumers:",t)}},"transport.closePendingConsumers()").then(()=>{this._consumerCloseInProgress=!1,this._pendingCloseConsumers.size>0&&this.closePendingConsumers()}).catch(()=>{})}handleHandler(){let e=this._handler;e.on("@connect",({dtlsParameters:t},s,n)=>{if(this._closed){n(new N.InvalidStateError("closed"));return}this.safeEmit("connect",{dtlsParameters:t},s,n)}),e.on("@icegatheringstatechange",t=>{t!==this._iceGatheringState&&(A.debug("ICE gathering state changed to %s",t),this._iceGatheringState=t,this._closed||this.safeEmit("icegatheringstatechange",t))}),e.on("@icecandidateerror",t=>{A.warn(`ICE candidate error [url:${t.url}, localAddress:${t.address}, localPort:${t.port}]: ${t.errorCode} "${t.errorText}"`),this.safeEmit("icecandidateerror",t)}),e.on("@connectionstatechange",t=>{t!==this._connectionState&&(A.debug("connection state changed to %s",t),this._connectionState=t,this._closed||this.safeEmit("connectionstatechange",t))})}handleProducer(e){e.on("@close",()=>{this._producers.delete(e.id),!this._closed&&this._awaitQueue.push(async()=>await this._handler.stopSending(e.localId),"producer @close event").catch(t=>A.warn("producer.close() failed:%o",t))}),e.on("@pause",(t,s)=>{this._awaitQueue.push(async()=>await this._handler.pauseSending(e.localId),"producer @pause event").then(t).catch(s)}),e.on("@resume",(t,s)=>{this._awaitQueue.push(async()=>await this._handler.resumeSending(e.localId),"producer @resume event").then(t).catch(s)}),e.on("@replacetrack",(t,s,n)=>{this._awaitQueue.push(async()=>await this._handler.replaceTrack(e.localId,t),"producer @replacetrack event").then(s).catch(n)}),e.on("@setmaxspatiallayer",(t,s,n)=>{this._awaitQueue.push(async()=>await this._handler.setMaxSpatialLayer(e.localId,t),"producer @setmaxspatiallayer event").then(s).catch(n)}),e.on("@setrtpencodingparameters",(t,s,n)=>{this._awaitQueue.push(async()=>await this._handler.setRtpEncodingParameters(e.localId,t),"producer @setrtpencodingparameters event").then(s).catch(n)}),e.on("@getstats",(t,s)=>{if(this._closed)return s(new N.InvalidStateError("closed"));this._handler.getSenderStats(e.localId).then(t).catch(s)})}handleConsumer(e){e.on("@close",()=>{this._consumers.delete(e.id),this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.delete(e.id),!this._closed&&(this._pendingCloseConsumers.set(e.id,e),this._consumerCloseInProgress===!1&&this.closePendingConsumers())}),e.on("@pause",()=>{this._pendingResumeConsumers.has(e.id)&&this._pendingResumeConsumers.delete(e.id),this._pendingPauseConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerPauseInProgress===!1&&this.pausePendingConsumers()})}),e.on("@resume",()=>{this._pendingPauseConsumers.has(e.id)&&this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerResumeInProgress===!1&&this.resumePendingConsumers()})}),e.on("@getstats",(t,s)=>{if(this._closed)return s(new N.InvalidStateError("closed"));this._handler.getReceiverStats(e.localId).then(t).catch(s)})}handleDataProducer(e){e.on("@close",()=>{this._dataProducers.delete(e.id)})}handleDataConsumer(e){e.on("@close",()=>{this._dataConsumers.delete(e.id)})}};rr.Transport=rs});var sr=C((Il,ci)=>{"use strict";var oi=ci.exports={v:[{name:"version",reg:/^(\d*)$/}],o:[{name:"origin",reg:/^(\S*) (\d*) (\d*) (\S*) IP(\d) (\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\d*) (\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\d) (\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\w*) (\d*) ([\w/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\d*) ([\w\-.]*)(?:\s*\/(\d*)(?:\s*\/(\S*))?)?/,names:["payload","codec","rate","encoding"],format:function(r){return r.encoding?"rtpmap:%d %s/%s/%s":r.rate?"rtpmap:%d %s/%s":"rtpmap:%d %s"}},{push:"fmtp",reg:/^fmtp:(\d*) ([\S| ]*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\d*)(?: (\S*) IP(\d) (\S*))?/,names:["port","netType","ipVer","address"],format:function(r){return r.address!=null?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\*|\d*) trr-int (\d*)/,names:["payload","value"],format:"rtcp-fb:%s trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,names:["payload","type","subtype"],format:function(r){return r.subtype!=null?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:(\d+)(?:\/(\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\S*)(?: (\S*))?/,names:["value","direction","encrypt-uri","uri","config"],format:function(r){return"extmap:%d"+(r.direction?"/%s":"%v")+(r["encrypt-uri"]?" %s":"%v")+" %s"+(r.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(r){return r.sessionConfig!=null?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\w*)/,format:"setup:%s"},{name:"connectionType",reg:/^connection:(new|existing)/,format:"connection:%s"},{name:"mid",reg:/^mid:([^\s]*)/,format:"mid:%s"},{push:"msid",reg:/^msid:([\w-]+)(?: ([\w-]+))?/,names:["id","appdata"],format:"msid:%s %s"},{name:"ptime",reg:/^ptime:(\d*(?:\.\d*)*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\d*(?:\.\d*)*)/,format:"maxptime:%d"},{name:"direction",reg:/^(sendrecv|recvonly|sendonly|inactive)/},{name:"icelite",reg:/^(ice-lite)/},{name:"iceUfrag",reg:/^ice-ufrag:(\S*)/,format:"ice-ufrag:%s"},{name:"icePwd",reg:/^ice-pwd:(\S*)/,format:"ice-pwd:%s"},{name:"fingerprint",reg:/^fingerprint:(\S*) (\S*)/,names:["type","hash"],format:"fingerprint:%s %s"},{push:"candidates",reg:/^candidate:(\S*) (\d*) (\S*) (\d*) (\S*) (\d*) typ (\S*)(?: raddr (\S*) rport (\d*))?(?: tcptype (\S*))?(?: generation (\d*))?(?: network-id (\d*))?(?: network-cost (\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","tcptype","generation","network-id","network-cost"],format:function(r){var e="candidate:%s %d %s %d %s %d typ %s";return e+=r.raddr!=null?" raddr %s rport %d":"%v%v",e+=r.tcptype!=null?" tcptype %s":"%v",r.generation!=null&&(e+=" generation %d"),e+=r["network-id"]!=null?" network-id %d":"%v",e+=r["network-cost"]!=null?" network-cost %d":"%v",e}},{name:"endOfCandidates",reg:/^(end-of-candidates)/},{name:"remoteCandidates",reg:/^remote-candidates:(.*)/,format:"remote-candidates:%s"},{name:"iceOptions",reg:/^ice-options:(\S*)/,format:"ice-options:%s"},{push:"ssrcs",reg:/^ssrc:(\d*) ([\w_-]*)(?::(.*))?/,names:["id","attribute","value"],format:function(r){var e="ssrc:%d";return r.attribute!=null&&(e+=" %s",r.value!=null&&(e+=":%s")),e}},{push:"ssrcGroups",reg:/^ssrc-group:([\x21\x23\x24\x25\x26\x27\x2A\x2B\x2D\x2E\w]*) (.*)/,names:["semantics","ssrcs"],format:"ssrc-group:%s %s"},{name:"msidSemantic",reg:/^msid-semantic:\s?(\w*) (\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{name:"rtcpRsize",reg:/^(rtcp-rsize)/},{name:"sctpmap",reg:/^sctpmap:([\w_/]*) (\S*)(?: (\S*))?/,names:["sctpmapNumber","app","maxMessageSize"],format:function(r){return r.maxMessageSize!=null?"sctpmap:%s %s %s":"sctpmap:%s %s"}},{name:"xGoogleFlag",reg:/^x-google-flag:([^\s]*)/,format:"x-google-flag:%s"},{push:"rids",reg:/^rid:([\d\w]+) (\w+)(?: ([\S| ]*))?/,names:["id","direction","params"],format:function(r){return r.params?"rid:%s %s %s":"rid:%s %s"}},{push:"imageattrs",reg:new RegExp("^imageattr:(\\d+|\\*)[\\s\\t]+(send|recv)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*)(?:[\\s\\t]+(recv|send)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*))?"),names:["pt","dir1","attrs1","dir2","attrs2"],format:function(r){return"imageattr:%s %s %s"+(r.dir2?" %s %s":"")}},{name:"simulcast",reg:new RegExp("^simulcast:(send|recv) ([a-zA-Z0-9\\-_~;,]+)(?:\\s?(send|recv) ([a-zA-Z0-9\\-_~;,]+))?$"),names:["dir1","list1","dir2","list2"],format:function(r){return"simulcast:%s %s"+(r.dir2?" %s %s":"")}},{name:"simulcast_03",reg:/^simulcast:[\s\t]+([\S+\s\t]+)$/,names:["value"],format:"simulcast: %s"},{name:"framerate",reg:/^framerate:(\d+(?:$|\.\d+))/,format:"framerate:%s"},{name:"sourceFilter",reg:/^source-filter: *(excl|incl) (\S*) (IP4|IP6|\*) (\S*) (.*)/,names:["filterMode","netType","addressTypes","destAddress","srcList"],format:"source-filter: %s %s %s %s %s"},{name:"bundleOnly",reg:/^(bundle-only)/},{name:"label",reg:/^label:(.+)/,format:"label:%s"},{name:"sctpPort",reg:/^sctp-port:(\d+)$/,format:"sctp-port:%s"},{name:"maxMessageSize",reg:/^max-message-size:(\d+)$/,format:"max-message-size:%s"},{push:"tsRefClocks",reg:/^ts-refclk:([^\s=]*)(?:=(\S*))?/,names:["clksrc","clksrcExt"],format:function(r){return"ts-refclk:%s"+(r.clksrcExt!=null?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(r){var e="mediaclk:";return e+=r.id!=null?"id=%s %s":"%v%s",e+=r.mediaClockValue!=null?"=%s":"",e+=r.rateNumerator!=null?" rate=%s":"",e+=r.rateDenominator!=null?"/%s":"",e}},{name:"keywords",reg:/^keywds:(.+)$/,format:"keywds:%s"},{name:"content",reg:/^content:(.+)/,format:"content:%s"},{name:"bfcpFloorCtrl",reg:/^floorctrl:(c-only|s-only|c-s)/,format:"floorctrl:%s"},{name:"bfcpConfId",reg:/^confid:(\d+)/,format:"confid:%s"},{name:"bfcpUserId",reg:/^userid:(\d+)/,format:"userid:%s"},{name:"bfcpFloorId",reg:/^floorid:(.+) (?:m-stream|mstrm):(.+)/,names:["id","mStream"],format:"floorid:%s mstrm:%s"},{push:"invalid",names:["value"]}]};Object.keys(oi).forEach(function(r){var e=oi[r];e.forEach(function(t){t.reg||(t.reg=/(.*)/),t.format||(t.format="%s")})})});var li=C(me=>{"use strict";var Xe=function(r){return String(Number(r))===r?Number(r):r},jc=function(r,e,t,s){if(s&&!t)e[s]=Xe(r[1]);else for(var n=0;n<t.length;n+=1)r[n+1]!=null&&(e[t[n]]=Xe(r[n+1]))},Fc=function(r,e,t){var s=r.name&&r.names;r.push&&!e[r.push]?e[r.push]=[]:s&&!e[r.name]&&(e[r.name]={});var n=r.push?{}:s?e[r.name]:e;jc(t.match(r.reg),n,r.names,r.name),r.push&&e[r.push].push(n)},di=sr(),qc=RegExp.prototype.test.bind(/^([a-z])=(.*)/);me.parse=function(r){var e={},t=[],s=e;return r.split(/(\r\n|\r|\n)/).filter(qc).forEach(function(n){var i=n[0],a=n.slice(2);i==="m"&&(t.push({rtp:[],fmtp:[]}),s=t[t.length-1]);for(var o=0;o<(di[i]||[]).length;o+=1){var c=di[i][o];if(c.reg.test(a))return Fc(c,s,a)}}),e.media=t,e};var pi=function(r,e){var t=e.split(/=(.+)/,2);return t.length===2?r[t[0]]=Xe(t[1]):t.length===1&&e.length>1&&(r[t[0]]=void 0),r};me.parseParams=function(r){return r.split(/;\s?/).reduce(pi,{})};me.parseFmtpConfig=me.parseParams;me.parsePayloads=function(r){return r.toString().split(" ").map(Number)};me.parseRemoteCandidates=function(r){for(var e=[],t=r.split(" ").map(Xe),s=0;s<t.length;s+=3)e.push({component:t[s],ip:t[s+1],port:t[s+2]});return e};me.parseImageAttributes=function(r){return r.split(" ").map(function(e){return e.substring(1,e.length-1).split(",").reduce(pi,{})})};me.parseSimulcastStreamList=function(r){return r.split(";").map(function(e){return e.split(",").map(function(t){var s,n=!1;return t[0]!=="~"?s=Xe(t):(s=Xe(t.substring(1,t.length)),n=!0),{scid:s,paused:n}})})}});var hi=C((Ml,ui)=>{"use strict";var ss=sr(),$c=/%[sdv%]/g,Uc=function(r){var e=1,t=arguments,s=t.length;return r.replace($c,function(n){if(e>=s)return n;var i=t[e];switch(e+=1,n){case"%%":return"%";case"%s":return String(i);case"%d":return Number(i);case"%v":return""}})},ht=function(r,e,t){var s=e.format instanceof Function?e.format(e.push?t:t[e.name]):e.format,n=[r+"="+s];if(e.names)for(var i=0;i<e.names.length;i+=1){var a=e.names[i];e.name?n.push(t[e.name][a]):n.push(t[e.names[i]])}else n.push(t[e.name]);return Uc.apply(null,n)},zc=["v","o","s","i","u","e","p","c","b","t","r","z","a"],Bc=["i","c","b","a"];ui.exports=function(r,e){e=e||{},r.version==null&&(r.version=0),r.name==null&&(r.name=" "),r.media.forEach(function(i){i.payloads==null&&(i.payloads="")});var t=e.outerOrder||zc,s=e.innerOrder||Bc,n=[];return t.forEach(function(i){ss[i].forEach(function(a){a.name in r&&r[a.name]!=null?n.push(ht(i,a,r)):a.push in r&&r[a.push]!=null&&r[a.push].forEach(function(o){n.push(ht(i,a,o))})})}),r.media.forEach(function(i){n.push(ht("m",ss.m[0],i)),s.forEach(function(a){ss[a].forEach(function(o){o.name in i&&i[o.name]!=null?n.push(ht(a,o,i)):o.push in i&&i[o.push]!=null&&i[o.push].forEach(function(c){n.push(ht(a,o,c))})})})}),n.join(`\r
|
|
7
7
|
`)+`\r
|
|
8
|
-
`}});var ge=C(ce=>{"use strict";var Ie=pi(),zc=ui(),Bc=rr();ce.grammar=Bc;ce.write=zc;ce.parse=Ie.parse;ce.parseParams=Ie.parseParams;ce.parseFmtpConfig=Ie.parseFmtpConfig;ce.parsePayloads=Ie.parsePayloads;ce.parseRemoteCandidates=Ie.parseRemoteCandidates;ce.parseImageAttributes=Ie.parseImageAttributes;ce.parseSimulcastStreamList=Ie.parseSimulcastStreamList});var Le=C(ss=>{"use strict";Object.defineProperty(ss,"__esModule",{value:!0});ss.parse=Hc;var Wc=new RegExp("^[LS]([1-9]\\d{0,1})T([1-9]\\d{0,1})");function Hc(r){let e=Wc.exec(r??"");return e?{spatialLayers:Number(e[1]),temporalLayers:Number(e[2])}:{spatialLayers:1,temporalLayers:1}}});var mi=C(Ce=>{"use strict";Object.defineProperty(Ce,"__esModule",{value:!0});Ce.OfferMediaSection=Ce.AnswerMediaSection=Ce.MediaSection=void 0;var Vc=ge(),hi=Pe(),ht=class{_mediaObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:s}){if(this._mediaObject={type:"",port:0,protocol:"",payloads:"",rtp:[],fmtp:[]},e&&this.setIceParameters(e),t){this._mediaObject.candidates=[];for(let n of t){let i={foundation:n.foundation,component:1,ip:n.address??n.ip,port:n.port,priority:n.priority,transport:n.protocol,type:n.type};n.tcpType&&(i.tcptype=n.tcpType),this._mediaObject.candidates.push(i)}this._mediaObject.endOfCandidates="end-of-candidates",this._mediaObject.iceOptions="renomination"}s&&this.setDtlsRole(s.role)}get mid(){return String(this._mediaObject.mid)}get closed(){return this._mediaObject.port===0}getObject(){return this._mediaObject}setIceParameters(e){this._mediaObject.iceUfrag=e.usernameFragment,this._mediaObject.icePwd=e.password}pause(){this._mediaObject.direction="inactive"}disable(){this.pause()}close(){this.disable(),this._mediaObject.port=0,delete this._mediaObject.candidates,delete this._mediaObject.endOfCandidates,delete this._mediaObject.iceUfrag,delete this._mediaObject.icePwd,delete this._mediaObject.iceOptions,this._mediaObject.rtp=[],this._mediaObject.fmtp=[],delete this._mediaObject.rtcp,delete this._mediaObject.rtcpFb,delete this._mediaObject.ssrcs,delete this._mediaObject.ssrcGroups,delete this._mediaObject.simulcast,delete this._mediaObject.simulcast_03,delete this._mediaObject.rids,delete this._mediaObject.extmapAllowMixed}};Ce.MediaSection=ht;var ns=class extends ht{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:s,sctpParameters:n,plainRtpParameters:i,offerMediaObject:a,offerRtpParameters:o,answerRtpParameters:c,codecOptions:p}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:s}),this._mediaObject.mid=String(a.mid),this._mediaObject.type=a.type,this._mediaObject.protocol=a.protocol,i?(this._mediaObject.connection={ip:i.ip,version:i.ipVersion},this._mediaObject.port=i.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},this._mediaObject.port=7),a.type){case"audio":case"video":{this._mediaObject.direction="recvonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[];for(let d of c.codecs){let l={payload:d.payloadType,codec:fi(d),rate:d.clockRate};d.channels>1&&(l.encoding=d.channels),this._mediaObject.rtp.push(l);let u=hi.clone(d.parameters)??{},m=hi.clone(d.rtcpFeedback)??[];if(p){let{opusStereo:h,opusFec:g,opusDtx:v,opusMaxPlaybackRate:b,opusMaxAverageBitrate:P,opusPtime:x,opusNack:k,videoGoogleStartBitrate:L,videoGoogleMaxBitrate:Ae,videoGoogleMinBitrate:ot}=p,ve=o.codecs.find(Ee=>Ee.payloadType===d.payloadType);switch(d.mimeType.toLowerCase()){case"audio/opus":case"audio/multiopus":{h!==void 0&&(ve.parameters["sprop-stereo"]=h?1:0,u.stereo=h?1:0),g!==void 0&&(ve.parameters.useinbandfec=g?1:0,u.useinbandfec=g?1:0),v!==void 0&&(ve.parameters.usedtx=v?1:0,u.usedtx=v?1:0),b!==void 0&&(u.maxplaybackrate=b),P!==void 0&&(u.maxaveragebitrate=P),x!==void 0&&(ve.parameters.ptime=x,u.ptime=x),k||(ve.rtcpFeedback=ve.rtcpFeedback.filter(Ee=>Ee.type!=="nack"||Ee.parameter),m=m.filter(Ee=>Ee.type!=="nack"||Ee.parameter));break}case"video/vp8":case"video/vp9":case"video/h264":case"video/h265":case"video/av1":{L!==void 0&&(u["x-google-start-bitrate"]=L),Ae!==void 0&&(u["x-google-max-bitrate"]=Ae),ot!==void 0&&(u["x-google-min-bitrate"]=ot);break}}}let f={payload:d.payloadType,config:""};for(let h of Object.keys(u))f.config&&(f.config+=";"),f.config+=`${h}=${u[h]}`;f.config&&this._mediaObject.fmtp.push(f);for(let h of m)this._mediaObject.rtcpFb.push({payload:d.payloadType,type:h.type,subtype:h.parameter})}this._mediaObject.payloads=c.codecs.map(d=>d.payloadType).join(" "),this._mediaObject.ext=[];for(let d of c.headerExtensions)(a.ext??[]).some(u=>u.uri===d.uri)&&this._mediaObject.ext.push({uri:d.uri,value:d.id});if(a.extmapAllowMixed==="extmap-allow-mixed"&&(this._mediaObject.extmapAllowMixed="extmap-allow-mixed"),a.simulcast){this._mediaObject.simulcast={dir1:"recv",list1:a.simulcast.list1},this._mediaObject.rids=[];for(let d of a.rids??[])d.direction==="send"&&this._mediaObject.rids.push({id:d.id,direction:"recv"})}else if(a.simulcast_03){this._mediaObject.simulcast_03={value:a.simulcast_03.value.replace(/send/g,"recv")},this._mediaObject.rids=[];for(let d of a.rids??[])d.direction==="send"&&this._mediaObject.rids.push({id:d.id,direction:"recv"})}this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";break}case"application":{typeof a.sctpPort=="number"?(this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=n.port,this._mediaObject.maxMessageSize=n.maxMessageSize):a.sctpmap&&(this._mediaObject.payloads=String(n.port),this._mediaObject.sctpmap={app:"webrtc-datachannel",sctpmapNumber:n.port,maxMessageSize:n.maxMessageSize});break}}}setDtlsRole(e){switch(e){case"client":{this._mediaObject.setup="active";break}case"server":{this._mediaObject.setup="passive";break}case"auto":{this._mediaObject.setup="actpass";break}}}resume(){this._mediaObject.direction="recvonly"}muxSimulcastStreams(e){if(!this._mediaObject.simulcast?.list1)return;let t={};for(let i of e)i.rid&&(t[i.rid]=i);let s=this._mediaObject.simulcast.list1,n=Vc.parseSimulcastStreamList(s);for(let i of n)for(let a of i)a.paused=!t[a.scid]?.active;this._mediaObject.simulcast.list1=n.map(i=>i.map(a=>`${a.paused?"~":""}${a.scid}`).join(",")).join(";")}};Ce.AnswerMediaSection=ns;var is=class extends ht{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:s,sctpParameters:n,plainRtpParameters:i,mid:a,kind:o,offerRtpParameters:c,streamId:p,trackId:d}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:s}),this._mediaObject.mid=String(a),this._mediaObject.type=o,i?(this._mediaObject.connection={ip:i.ip,version:i.ipVersion},this._mediaObject.protocol="RTP/AVP",this._mediaObject.port=i.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},n?this._mediaObject.protocol="UDP/DTLS/SCTP":this._mediaObject.protocol="UDP/TLS/RTP/SAVPF",this._mediaObject.port=7),this._mediaObject.extmapAllowMixed="extmap-allow-mixed",o){case"audio":case"video":{this._mediaObject.direction="sendonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[],this._mediaObject.msid=[{id:p,appdata:d}];for(let f of c.codecs){let h={payload:f.payloadType,codec:fi(f),rate:f.clockRate};f.channels>1&&(h.encoding=f.channels),this._mediaObject.rtp.push(h);let g={payload:f.payloadType,config:""};for(let v of Object.keys(f.parameters??{}))g.config&&(g.config+=";"),g.config+=`${v}=${f.parameters[v]}`;g.config&&this._mediaObject.fmtp.push(g);for(let v of f.rtcpFeedback)this._mediaObject.rtcpFb.push({payload:f.payloadType,type:v.type,subtype:v.parameter})}this._mediaObject.payloads=c.codecs.map(f=>f.payloadType).join(" "),this._mediaObject.ext=[];for(let f of c.headerExtensions)this._mediaObject.ext.push({uri:f.uri,value:f.id});this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";let l=c.encodings[0],u=l.ssrc,m=l.rtx?.ssrc;this._mediaObject.ssrcs=[],this._mediaObject.ssrcGroups=[],u&&c.rtcp.cname&&this._mediaObject.ssrcs.push({id:u,attribute:"cname",value:c.rtcp.cname}),m&&(c.rtcp.cname&&this._mediaObject.ssrcs.push({id:m,attribute:"cname",value:c.rtcp.cname}),u&&this._mediaObject.ssrcGroups.push({semantics:"FID",ssrcs:`${u} ${m}`}));break}case"application":{this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=n.port,this._mediaObject.maxMessageSize=n.maxMessageSize;break}}}setDtlsRole(e){this._mediaObject.setup="actpass"}resume(){this._mediaObject.direction="sendonly"}};Ce.OfferMediaSection=is;function fi(r){let t=new RegExp("^(audio|video)/(.+)","i").exec(r.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");return t[2]}});var Ze=C(ir=>{"use strict";Object.defineProperty(ir,"__esModule",{value:!0});ir.RemoteSdp=void 0;var Gc=ge(),Kc=U(),sr=mi(),Yc=os(),Qc=["av1","h264"],nr=new Kc.Logger("RemoteSdp"),as=class{_iceParameters;_iceCandidates;_dtlsParameters;_sctpParameters;_plainRtpParameters;_mediaSections=[];_midToIndex=new Map;_firstMid;_sdpObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:s,sctpParameters:n,plainRtpParameters:i}){if(this._iceParameters=e,this._iceCandidates=t,this._dtlsParameters=s,this._sctpParameters=n,this._plainRtpParameters=i,this._sdpObject={version:0,origin:{address:"0.0.0.0",ipVer:4,netType:"IN",sessionId:"10000",sessionVersion:0,username:`media-client-v${Yc.version}`},name:"-",timing:{start:0,stop:0},media:[]},this._sdpObject.iceOptions="ice2",e?.iceLite&&(this._sdpObject.icelite="ice-lite"),s){this._sdpObject.msidSemantic={semantic:"WMS",token:"*"};let a=this._dtlsParameters.fingerprints.length;this._sdpObject.fingerprint={type:s.fingerprints[a-1].algorithm,hash:s.fingerprints[a-1].value},this._sdpObject.groups=[{type:"BUNDLE",mids:""}]}i&&(this._sdpObject.origin.address=i.ip,this._sdpObject.origin.ipVer=i.ipVersion)}updateIceParameters(e){nr.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){nr.debug("updateDtlsRole() [role:%s]",e),this._dtlsParameters.role=e;for(let t of this._mediaSections)t.setDtlsRole(e)}setSessionExtmapAllowMixed(){nr.debug("setSessionExtmapAllowMixed()"),this._sdpObject.extmapAllowMixed="extmap-allow-mixed"}getNextMediaSectionIdx(){for(let e=0;e<this._mediaSections.length;++e){let t=this._mediaSections[e];if(t.closed)return{idx:e,reuseMid:t.mid}}return{idx:this._mediaSections.length}}send({offerMediaObject:e,reuseMid:t,offerRtpParameters:s,answerRtpParameters:n,codecOptions:i}){let a=new sr.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,offerMediaObject:e,offerRtpParameters:s,answerRtpParameters:n,codecOptions:i}),o=a.getObject();o.rtp.find(p=>Qc.includes(p.codec.toLowerCase()))||(o.ext=o.ext?.filter(p=>p.uri!=="https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension")),t?this.replaceMediaSection(a,t):this._midToIndex.has(a.mid)?this.replaceMediaSection(a):this.addMediaSection(a)}receive({mid:e,kind:t,offerRtpParameters:s,streamId:n,trackId:i}){this.setSessionExtmapAllowMixed();let a=new sr.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,mid:e,kind:t,offerRtpParameters:s,streamId:n,trackId:i}),o=this._mediaSections.find(c=>c.closed&&c.getObject().type===t);o?this.replaceMediaSection(a,o.mid):this.addMediaSection(a)}pauseMediaSection(e){this.findMediaSection(e).pause()}resumeSendingMediaSection(e){this.findMediaSection(e).resume()}resumeReceivingMediaSection(e){this.findMediaSection(e).resume()}disableMediaSection(e){this.findMediaSection(e).disable()}closeMediaSection(e){let t=this.findMediaSection(e);return e===this._firstMid?(nr.debug("closeMediaSection() | cannot close first media section, disabling it instead [mid:%s]",e),this.disableMediaSection(e),!1):(t.close(),this.regenerateBundleMids(),!0)}muxMediaSectionSimulcast(e,t){let s=this.findMediaSection(e);s.muxSimulcastStreams(t),this.replaceMediaSection(s)}sendSctpAssociation({offerMediaObject:e}){let t=new sr.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 sr.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++,Gc.write(this._sdpObject)}addMediaSection(e){this._firstMid||(this._firstMid=e.mid),this._mediaSections.push(e),this._midToIndex.set(e.mid,this._mediaSections.length-1),this._sdpObject.media.push(e.getObject()),this.regenerateBundleMids()}replaceMediaSection(e,t){if(typeof t=="string"){let s=this._midToIndex.get(t);if(s===void 0)throw new Error(`no media section found for reuseMid '${t}'`);let n=this._mediaSections[s];this._mediaSections[s]=e,this._midToIndex.delete(n.mid),this._midToIndex.set(e.mid,s),this._sdpObject.media[s]=e.getObject(),this.regenerateBundleMids()}else{let s=this._midToIndex.get(e.mid);if(s===void 0)throw new Error(`no media section found with mid '${e.mid}'`);this._mediaSections[s]=e,this._sdpObject.media[s]=e.getObject()}}findMediaSection(e){let t=this._midToIndex.get(e);if(t===void 0)throw new Error(`no media section found with mid '${e}'`);return this._mediaSections[t]}regenerateBundleMids(){this._dtlsParameters&&(this._sdpObject.groups[0].mids=this._mediaSections.filter(e=>!e.closed).map(e=>e.mid).join(" "))}};ir.RemoteSdp=as});var et=C(Me=>{"use strict";Object.defineProperty(Me,"__esModule",{value:!0});Me.extractRtpCapabilities=Jc;Me.extractDtlsParameters=Xc;Me.getCname=Zc;Me.applyCodecParameters=ed;Me.addHeaderExtension=td;var gi=ge();function Jc({sdpObject:r}){let e=new Map,t=new Map;for(let n of r.media){let i=n.type;switch(i){case"audio":case"video":break;default:continue}for(let a of n.rtp){let o={kind:i,mimeType:`${i}/${a.codec}`,preferredPayloadType:a.payload,clockRate:a.rate,channels:a.encoding,parameters:{},rtcpFeedback:[]};e.set(o.preferredPayloadType,o)}for(let a of n.fmtp??[]){let o=gi.parseParams(a.config),c=e.get(a.payload);c&&(o?.hasOwnProperty("profile-level-id")&&(o["profile-level-id"]=String(o["profile-level-id"])),c.parameters=o)}for(let a of n.rtcpFb??[]){let o={type:a.type,parameter:a.subtype};if(o.parameter||delete o.parameter,a.payload!=="*"){let c=e.get(Number(a.payload));if(!c)continue;c.rtcpFeedback.push(o)}else for(let c of e.values())c.kind===i&&!/.+\/rtx$/i.test(c.mimeType)&&c.rtcpFeedback.push(o)}for(let a of n.ext??[]){if(a["encrypt-uri"])continue;let o={kind:i,uri:a.uri,preferredId:a.value};t.set(o.preferredId,o)}}return{codecs:Array.from(e.values()),headerExtensions:Array.from(t.values())}}function Xc({sdpObject:r}){let e=r.setup,t=r.fingerprint;if(!e||!t){let i=(r.media??[]).find(a=>a.port!==0);i&&(e=e??i.setup,t=t??i.fingerprint)}if(e){if(!t)throw new Error("no a=fingerprint found at SDP session or media level")}else throw new Error("no a=setup found at SDP session or media level");let s;switch(e){case"active":{s="client";break}case"passive":{s="server";break}case"actpass":{s="auto";break}}return{role:s,fingerprints:[{algorithm:t.type,value:t.hash}]}}function Zc({offerMediaObject:r}){let e=(r.ssrcs??[]).find(t=>t.attribute==="cname");return e?e.value:""}function ed({offerRtpParameters:r,answerMediaObject:e}){for(let t of r.codecs){let s=t.mimeType.toLowerCase();if(s!=="audio/opus"||!(e.rtp??[]).find(o=>o.payload===t.payloadType))continue;e.fmtp=e.fmtp??[];let i=e.fmtp.find(o=>o.payload===t.payloadType);i||(i={payload:t.payloadType,config:""},e.fmtp.push(i));let a=gi.parseParams(i.config);if(s==="audio/opus"){let o=t.parameters?.["sprop-stereo"];o!==void 0&&(a.stereo=Number(o)?1:0)}i.config="";for(let o of Object.keys(a))i.config&&(i.config+=";"),i.config+=`${o}=${a[o]}`}}function td({offerMediaObject:r,headerExtensionUri:e,headerExtensionId:t}){r.ext||(r.ext=[]),r.ext.push({uri:e,value:t})}});var tt=C(ar=>{"use strict";Object.defineProperty(ar,"__esModule",{value:!0});ar.getRtpEncodings=rd;ar.addLegacySimulcast=sd;function rd({offerMediaObject:r,codecs:e}){let t=new Set;for(let i of r.ssrcs??[]){let a=i.id;a&&t.add(a)}if(t.size===0)throw new Error("no a=ssrc lines found");let s=new Map;for(let i of r.ssrcGroups??[]){if(i.semantics!=="FID")continue;let a=i.ssrcs.split(/\s+/),o=Number(a[0]),c=Number(a[1]);t.has(o)&&(t.delete(o),t.delete(c),s.set(o,c))}for(let i of t)s.set(i,void 0);let n=[];for(let[i,a]of s){let o={ssrc:i};a&&e.length>1&&(o.rtx={ssrc:a}),n.push(o)}return n}function sd({offerMediaObject:r,numStreams:e}){if(e<=1)throw new TypeError("numStreams must be greater than 1");let t=(r.ssrcs??[]).find(l=>l.attribute==="msid");if(!t)throw new Error("a=ssrc line with msid information not found");let[s,n]=t.value.split(" "),i=Number(t.id),a;(r.ssrcGroups??[]).some(l=>{if(l.semantics!=="FID")return!1;let u=l.ssrcs.split(/\s+/);return Number(u[0])===i?(a=Number(u[1]),!0):!1});let o=(r.ssrcs??[]).find(l=>l.attribute==="cname");if(!o)throw new Error("a=ssrc line with cname information not found");let c=o.value,p=[],d=[];for(let l=0;l<e;++l)p.push(i+l),a&&d.push(a+l);r.ssrcGroups=[],r.ssrcs=[],r.ssrcGroups.push({semantics:"SIM",ssrcs:p.join(" ")});for(let l of p)r.ssrcs.push({id:l,attribute:"cname",value:c}),r.ssrcs.push({id:l,attribute:"msid",value:`${s} ${n}`});for(let l=0;l<d.length;++l){let u=p[l],m=d[l];r.ssrcs.push({id:m,attribute:"cname",value:c}),r.ssrcs.push({id:m,attribute:"msid",value:`${s} ${n}`}),r.ssrcGroups.push({semantics:"FID",ssrcs:`${u} ${m}`})}}});var rt=C(ft=>{"use strict";Object.defineProperty(ft,"__esModule",{value:!0});ft.addNackSupportForOpus=nd;ft.addHeaderExtensionSupport=id;ft.getMsidStreamIdAndTrackId=ad;function nd(r){for(let e of r.codecs??[])(e.mimeType.toLowerCase()==="audio/opus"||e.mimeType.toLowerCase()==="audio/multiopus")&&!e.rtcpFeedback?.some(t=>t.type==="nack"&&!t.parameter)&&(e.rtcpFeedback||(e.rtcpFeedback=[]),e.rtcpFeedback.push({type:"nack"}))}function id(r,e){let t,s=r.headerExtensions?.find(i=>i.uri===e.uri);if(s){if(s.kind===e.kind)return;t=s.preferredId}if(r.headerExtensions||(r.headerExtensions=[]),t===void 0){t=1;let i=new Set(r.headerExtensions.map(a=>a.preferredId));for(;i.has(t);)++t}let n={kind:e.kind,uri:e.uri,preferredId:t,preferredEncrypt:!1,direction:e.direction};r.headerExtensions.push(n)}function ad(r){if(!r||typeof r!="string")return{msidStreamId:void 0,msidTrackId:void 0};let[e,t]=r.trim().split(/\s+/);return e?{msidStreamId:e,msidTrackId:t}:{msidStreamId:void 0,msidTrackId:void 0}}});var yi=C(or=>{"use strict";Object.defineProperty(or,"__esModule",{value:!0});or.Chrome111=void 0;var de=ge(),od=V(),cd=U(),mt=ie(),dd=Q(),pd=Le(),ld=Ze(),gt=et(),_i=tt(),cs=rt(),T=new cd.Logger("Chrome111"),vi="Chrome111",wi={OS:65535,MIS:65535},ds=class r extends od.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:vi,factory:e=>new r(e),getNativeRtpCapabilities:async({direction:e})=>{T.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e,sendEncodings:[{scalabilityMode:"L3T3"}]});let s=await t.createOffer();try{t.close()}catch{}t=void 0;let n=de.parse(s.sdp);return r.getLocalRtpCapabilities(n)}catch(s){try{t?.close()}catch{}throw t=void 0,s}},getNativeSctpCapabilities:async()=>(T.debug("getNativeSctpCapabilities()"),{numStreams:wi})}}static getLocalRtpCapabilities(e,t=[]){let s=gt.extractRtpCapabilities({sdpObject:e});mt.validateAndNormalizeRtpCapabilities(s),cs.addNackSupportForOpus(s);for(let n of t)cs.addHeaderExtensionSupport(s,n);return s}constructor({direction:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),T.debug("constructor()"),this._direction=e,this._remoteSdp=new ld.RemoteSdp({iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=p,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(T.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return vi}close(){if(T.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),T.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),T.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});T.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let s={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();T.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:s,codecOptions:n,headerExtensionOptions:i,codec:a,onRtpSender:o}){if(this.assertNotClosed(),this.assertSendDirection(),T.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),s&&s.length>1){let x=1;for(let k of s){let L=k.scalabilityMode?(0,pd.parse)(k.scalabilityMode).temporalLayers:3;L>x&&(x=L)}s.forEach((k,L)=>{k.rid=`r${L}`,k.scalabilityMode=`L1T${x}`})}let c=this._remoteSdp.getNextMediaSectionIdx(),p=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:s});o&&o(p.sender);let d=await this._pc.createOffer(),l=de.parse(d.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let u=[];u.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let m=r.getLocalRtpCapabilities(l,u),f=this._getSendExtendedRtpCapabilities(m),h=mt.getSendingRtpParameters(e.kind,f);h.codecs=mt.reduceCodecs(h.codecs,a);let g=mt.getSendingRemoteRtpParameters(e.kind,f);if(g.codecs=mt.reduceCodecs(g.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l}),i?.absCaptureTime){let x=l.media[c.idx];gt.addHeaderExtension({offerMediaObject:x,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(k=>k.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:de.write(l)}}T.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let v=p.mid;h.mid=v,l=de.parse(this._pc.localDescription.sdp);let b=l.media[c.idx];if(h.rtcp.cname=gt.getCname({offerMediaObject:b}),h.msid=`${t??this._sendStream.id} ${e.id}`,!s)h.encodings=_i.getRtpEncodings({offerMediaObject:b,codecs:h.codecs});else if(s.length===1){let x=_i.getRtpEncodings({offerMediaObject:b,codecs:h.codecs});Object.assign(x[0],s[0]),h.encodings=x}else h.encodings=s;this._remoteSdp.send({offerMediaObject:b,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:g,codecOptions:n});let P={type:"answer",sdp:this._remoteSdp.getSdp()};return T.debug("send() | calling pc.setRemoteDescription() [answer:%o]",P),await this._pc.setRemoteDescription(P),this._mapMidTransceiver.set(v,p),{localId:v,rtpParameters:h,rtpSender:p.sender}}async stopSending(e){if(this.assertSendDirection(),T.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let n=await this._pc.createOffer();T.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),T.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let s=await this._pc.createOffer();T.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),T.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let s=await this._pc.createOffer();T.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?T.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):T.debug("replaceTrack() [localId:%s, no track]",e);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");await s.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),T.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();T.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),T.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();T.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};T.debug("sendDataChannel() [options:%o]",t);let s=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%wi.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),a=de.parse(i.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),T.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:s,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],s=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;T.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);s.set(c,u);let{msidStreamId:m}=cs.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??m??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let o of e){let{trackId:c,onRtpReceiver:p}=o;if(p){let d=s.get(c),l=this._pc.getTransceivers().find(u=>u.mid===d);if(!l)throw new Error("transceiver not found");p(l.receiver)}}let i=await this._pc.createAnswer(),a=de.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=s.get(c),l=a.media.find(u=>String(u.mid)===d);gt.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l})}i={type:"answer",sdp:de.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),T.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let o of e){let{trackId:c}=o,p=s.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(d)this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){T.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();T.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){T.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();T.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){T.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();T.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:s,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};T.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(s,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),m=de.parse(u.sdp),f=m.media.find(h=>h.type==="application");f.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),u={type:"answer",sdp:de.write(m)},T.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=de.parse(this._pc.localDescription.sdp));let s=gt.extractDtlsParameters({sdpObject:t});s.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:s},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new dd.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')}};or.Chrome111=ds});var Ri=C(cr=>{"use strict";Object.defineProperty(cr,"__esModule",{value:!0});cr.Chrome74=void 0;var J=ge(),ud=U(),hd=V(),_t=ie(),fd=Q(),md=Le(),gd=Ze(),vt=et(),ps=tt(),ls=rt(),S=new ud.Logger("Chrome74"),bi="Chrome74",Si={OS:1024,MIS:1024},us=class r extends hd.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:bi,factory:e=>new r(e),getNativeRtpCapabilities:async({direction:e})=>{S.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let s=await t.createOffer();try{t.close()}catch{}t=void 0;let n=J.parse(s.sdp);return r.getLocalRtpCapabilities(n)}catch(s){try{t?.close()}catch{}throw t=void 0,s}},getNativeSctpCapabilities:async()=>(S.debug("getNativeSctpCapabilities()"),{numStreams:Si})}}static getLocalRtpCapabilities(e,t=[]){let s=vt.extractRtpCapabilities({sdpObject:e});_t.validateAndNormalizeRtpCapabilities(s),ls.addNackSupportForOpus(s);for(let n of t)ls.addHeaderExtensionSupport(s,n);return s}constructor({direction:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),S.debug("constructor()"),this._direction=e,this._remoteSdp=new gd.RemoteSdp({iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=p,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(S.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return bi}close(){if(S.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),S.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),S.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});S.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let s={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();S.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:s,codecOptions:n,headerExtensionOptions:i,codec:a}){this.assertNotClosed(),this.assertSendDirection(),S.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),s&&s.length>1&&s.forEach((k,L)=>{k.rid=`r${L}`});let o=this._remoteSdp.getNextMediaSectionIdx(),c=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:s}),p=await this._pc.createOffer(),d=J.parse(p.sdp);d.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let l=[];l.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let u=r.getLocalRtpCapabilities(d,l),m=this._getSendExtendedRtpCapabilities(u),f=_t.getSendingRtpParameters(e.kind,m);f.codecs=_t.reduceCodecs(f.codecs,a);let h=_t.getSendingRemoteRtpParameters(e.kind,m);h.codecs=_t.reduceCodecs(h.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:d});let g=!1,v=(0,md.parse)((s??[{}])[0].scalabilityMode),b;s?.length===1&&v.spatialLayers>1&&f.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(S.debug("send() | enabling legacy simulcast for VP9 SVC"),g=!0,d=J.parse(p.sdp),b=d.media[o.idx],ps.addLegacySimulcast({offerMediaObject:b,numStreams:v.spatialLayers}),p={type:"offer",sdp:J.write(d)}),S.debug("send() | calling pc.setLocalDescription() [offer:%o]",p),i?.absCaptureTime&&(b=d.media[o.idx],vt.addHeaderExtension({offerMediaObject:b,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:h.headerExtensions.find(k=>k.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),p={type:"offer",sdp:J.write(d)}),await this._pc.setLocalDescription(p);let P=c.mid;if(f.mid=P,d=J.parse(this._pc.localDescription.sdp),b=d.media[o.idx],f.rtcp.cname=vt.getCname({offerMediaObject:b}),f.msid=`${t??this._sendStream.id} ${e.id}`,!s)f.encodings=ps.getRtpEncodings({offerMediaObject:b,codecs:f.codecs});else if(s.length===1){let k=ps.getRtpEncodings({offerMediaObject:b,codecs:f.codecs});Object.assign(k[0],s[0]),g&&(k=[k[0]]),f.encodings=k}else f.encodings=s;if(f.encodings.length>1&&(f.codecs[0].mimeType.toLowerCase()==="video/vp8"||f.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let k of f.encodings)k.scalabilityMode?k.scalabilityMode=`L1T${v.temporalLayers}`:k.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:b,reuseMid:o.reuseMid,offerRtpParameters:f,answerRtpParameters:h,codecOptions:n});let x={type:"answer",sdp:this._remoteSdp.getSdp()};return S.debug("send() | calling pc.setRemoteDescription() [answer:%o]",x),await this._pc.setRemoteDescription(x),this._mapMidTransceiver.set(P,c),{localId:P,rtpParameters:f,rtpSender:c.sender}}async stopSending(e){if(this.assertSendDirection(),S.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let n=await this._pc.createOffer();S.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),S.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let s=await this._pc.createOffer();S.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),S.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let s=await this._pc.createOffer();S.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?S.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):S.debug("replaceTrack() [localId:%s, no track]",e);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");await s.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),S.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();S.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),S.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();S.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};S.debug("sendDataChannel() [options:%o]",t);let s=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Si.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),a=J.parse(i.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),S.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:s,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],s=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;S.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);s.set(c,u);let{msidStreamId:m}=ls.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??m??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);let i=await this._pc.createAnswer(),a=J.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=s.get(c),l=a.media.find(u=>String(u.mid)===d);vt.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l})}i={type:"answer",sdp:J.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),S.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let o of e){let{trackId:c}=o,p=s.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(d)this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){S.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();S.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){S.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();S.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){S.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();S.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:s,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};S.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(s,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),m=J.parse(u.sdp),f=m.media.find(h=>h.type==="application");f.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),u={type:"answer",sdp:J.write(m)},S.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=J.parse(this._pc.localDescription.sdp));let s=vt.extractDtlsParameters({sdpObject:t});s.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:s},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new fd.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};cr.Chrome74=us});var Pi=C(pr=>{"use strict";Object.defineProperty(pr,"__esModule",{value:!0});pr.Firefox120=void 0;var _e=ge(),_d=V(),vd=U(),Ci=Q(),wt=ie(),wd=Le(),yd=Ze(),dr=et(),Ti=tt(),bd=rt(),E=new vd.Logger("Firefox120"),Ei="Firefox120",ki={OS:16,MIS:2048},hs=class r extends _d.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Ei,factory:e=>new r(e),getNativeRtpCapabilities:async({direction:e})=>{E.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"}),s=document.createElement("canvas");s.getContext("2d");let i=s.captureStream().getVideoTracks()[0];try{t.addTransceiver("audio",{direction:e}),t.addTransceiver(i,{direction:e,sendEncodings:[{rid:"r0",maxBitrate:1e5},{rid:"r1",maxBitrate:5e5}]});let a=await t.createOffer();try{s.remove()}catch{}try{i.stop()}catch{}try{t.close()}catch{}t=void 0;let o=_e.parse(a.sdp);return r.getLocalRtpCapabilities(o)}catch(a){try{s.remove()}catch{}try{i.stop()}catch{}try{t?.close()}catch{}throw t=void 0,a}},getNativeSctpCapabilities:async()=>(E.debug("getNativeSctpCapabilities()"),{numStreams:ki})}}static getLocalRtpCapabilities(e){let t=dr.extractRtpCapabilities({sdpObject:e});return wt.validateAndNormalizeRtpCapabilities(t),t}constructor({direction:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),E.debug("constructor()"),this._direction=e,this._remoteSdp=new yd.RemoteSdp({iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=p,this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(E.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Ei}close(){if(E.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){throw this.assertNotClosed(),new Ci.UnsupportedError("not supported")}async restartIce(e){if(this.assertNotClosed(),E.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});E.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let s={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();E.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:s,codecOptions:n,codec:i,onRtpSender:a}){this.assertNotClosed(),this.assertSendDirection(),E.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),s&&s.length>1&&s.forEach((b,P)=>{b.rid=`r${P}`});let o=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:s});a&&a(o.sender);let c=await this._pc.createOffer(),p=_e.parse(c.sdp);p.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let d=r.getLocalRtpCapabilities(p),l=this._getSendExtendedRtpCapabilities(d),u=wt.getSendingRtpParameters(e.kind,l);u.codecs=wt.reduceCodecs(u.codecs,i);let m=wt.getSendingRemoteRtpParameters(e.kind,l);m.codecs=wt.reduceCodecs(m.codecs,i),this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:p});let f=(0,wd.parse)((s??[{}])[0].scalabilityMode);E.debug("send() | calling pc.setLocalDescription() [offer:%o]",c),await this._pc.setLocalDescription(c);let h=o.mid;u.mid=h,p=_e.parse(this._pc.localDescription.sdp);let g=p.media[p.media.length-1];if(u.rtcp.cname=dr.getCname({offerMediaObject:g}),u.msid=`${t??this._sendStream.id} ${e.id}`,!s)u.encodings=Ti.getRtpEncodings({offerMediaObject:g,codecs:u.codecs});else if(s.length===1){let b=Ti.getRtpEncodings({offerMediaObject:g,codecs:u.codecs});Object.assign(b[0],s[0]),u.encodings=b}else u.encodings=s;if(u.encodings.length>1&&(u.codecs[0].mimeType.toLowerCase()==="video/vp8"||u.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let b of u.encodings)b.scalabilityMode?b.scalabilityMode=`L1T${f.temporalLayers}`:b.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:g,offerRtpParameters:u,answerRtpParameters:m,codecOptions:n});let v={type:"answer",sdp:this._remoteSdp.getSdp()};return E.debug("send() | calling pc.setRemoteDescription() [answer:%o]",v),await this._pc.setRemoteDescription(v),this._mapMidTransceiver.set(h,o),{localId:h,rtpParameters:u,rtpSender:o.sender}}async stopSending(e){if(this.assertSendDirection(),E.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated transceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.disableMediaSection(t.mid);let s=await this._pc.createOffer();E.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),E.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let s=await this._pc.createOffer();E.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),E.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let s=await this._pc.createOffer();E.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?E.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):E.debug("replaceTrack() [localId:%s, no track]",e);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");await s.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),E.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated transceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();E.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),E.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();E.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};E.debug("sendDataChannel() [options:%o]",t);let s=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%ki.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),a=_e.parse(i.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:a}),E.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:s,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],s=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;E.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);s.set(c,u);let{msidStreamId:m}=bd.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??m??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let o of e){let{trackId:c,onRtpReceiver:p}=o;if(p){let d=s.get(c),l=this._pc.getTransceivers().find(u=>u.mid===d);if(!l)throw new Error("transceiver not found");p(l.receiver)}}let i=await this._pc.createAnswer(),a=_e.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=s.get(c),l=a.media.find(u=>String(u.mid)===d);dr.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l}),i={type:"answer",sdp:_e.write(a)}}this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:a}),E.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let o of e){let{trackId:c}=o,p=s.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(!d)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){E.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();E.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){E.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();E.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){E.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();E.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async getReceiverStats(e){this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:s,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};E.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(s,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),m=_e.parse(u.sdp),f=m.media.find(h=>h.type==="application");f.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:m}),u={type:"answer",sdp:_e.write(m)},E.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=_e.parse(this._pc.localDescription.sdp));let s=dr.extractDtlsParameters({sdpObject:t});s.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:s},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Ci.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')}};pr.Firefox120=hs});var Li=C(lr=>{"use strict";Object.defineProperty(lr,"__esModule",{value:!0});lr.Safari12=void 0;var X=ge(),Sd=V(),Rd=U(),yt=ie(),Cd=Q(),Td=Le(),Ed=Ze(),bt=et(),xi=tt(),fs=rt(),R=new Rd.Logger("Safari12"),Di="Safari12",Ii={OS:65535,MIS:65535},ms=class r extends Sd.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Di,factory:e=>new r(e),getNativeRtpCapabilities:async({direction:e})=>{R.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let s=await t.createOffer();try{t.close()}catch{}t=void 0;let n=X.parse(s.sdp);return r.getLocalRtpCapabilities(n)}catch(s){try{t?.close()}catch{}throw t=void 0,s}},getNativeSctpCapabilities:async()=>(R.debug("getNativeSctpCapabilities()"),{numStreams:Ii})}}static getLocalRtpCapabilities(e,t=[]){let s=bt.extractRtpCapabilities({sdpObject:e});yt.validateAndNormalizeRtpCapabilities(s),fs.addNackSupportForOpus(s);for(let n of t)fs.addHeaderExtensionSupport(s,n);return s}constructor({direction:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),R.debug("constructor()"),this._direction=e,this._remoteSdp=new Ed.RemoteSdp({iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=p,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)}),this._pc.addEventListener("icecandidateerror",d=>{this.emit("@icecandidateerror",d)}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(R.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Di}close(){if(R.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),R.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),R.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});R.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let s={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();R.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:s,codecOptions:n,headerExtensionOptions:i,codec:a,onRtpSender:o}){this.assertNotClosed(),this.assertSendDirection(),R.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t);let c=this._remoteSdp.getNextMediaSectionIdx(),p=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream]});o&&o(p.sender);let d=await this._pc.createOffer(),l=X.parse(d.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let u=[];u.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let m=r.getLocalRtpCapabilities(l,u),f=this._getSendExtendedRtpCapabilities(m),h=yt.getSendingRtpParameters(e.kind,f);h.codecs=yt.reduceCodecs(h.codecs,a);let g=yt.getSendingRemoteRtpParameters(e.kind,f);g.codecs=yt.reduceCodecs(g.codecs,a);let v;this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l});let b=(0,Td.parse)((s??[{}])[0].scalabilityMode);s&&s.length>1&&(R.debug("send() | enabling legacy simulcast"),l=X.parse(d.sdp),v=l.media[c.idx],xi.addLegacySimulcast({offerMediaObject:v,numStreams:s.length}),d={type:"offer",sdp:X.write(l)}),i?.absCaptureTime&&(v=l.media[c.idx],bt.addHeaderExtension({offerMediaObject:v,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(k=>k.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:X.write(l)}),R.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let P=p.mid;if(h.mid=P,l=X.parse(this._pc.localDescription.sdp),v=l.media[c.idx],h.rtcp.cname=bt.getCname({offerMediaObject:v}),h.msid=`${t??this._sendStream.id} ${e.id}`,h.encodings=xi.getRtpEncodings({offerMediaObject:v,codecs:h.codecs}),s)for(let k=0;k<h.encodings.length;++k)s[k]&&Object.assign(h.encodings[k],s[k]);if(h.encodings.length>1&&(h.codecs[0].mimeType.toLowerCase()==="video/vp8"||h.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let k of h.encodings)k.scalabilityMode?k.scalabilityMode=`L1T${b.temporalLayers}`:k.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:v,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:g,codecOptions:n});let x={type:"answer",sdp:this._remoteSdp.getSdp()};return R.debug("send() | calling pc.setRemoteDescription() [answer:%o]",x),await this._pc.setRemoteDescription(x),this._mapMidTransceiver.set(P,p),{localId:P,rtpParameters:h,rtpSender:p.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;R.debug("stopSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let n=await this._pc.createOffer();R.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),R.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let s=await this._pc.createOffer();R.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),R.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let s=await this._pc.createOffer();R.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?R.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):R.debug("replaceTrack() [localId:%s, no track]",e);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");await s.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),R.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();R.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),R.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();R.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};R.debug("sendDataChannel() [options:%o]",t);let s=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Ii.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),a=X.parse(i.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),R.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:s,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],s=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;R.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);s.set(c,u);let{msidStreamId:m}=fs.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??m??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let o of e){let{trackId:c,onRtpReceiver:p}=o;if(p){let d=s.get(c),l=this._pc.getTransceivers().find(u=>u.mid===d);if(!l)throw new Error("transceiver not found");p(l.receiver)}}let i=await this._pc.createAnswer(),a=X.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=s.get(c),l=a.media.find(u=>String(u.mid)===d);bt.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l})}i={type:"answer",sdp:X.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),R.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let o of e){let{trackId:c}=o,p=s.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(!d)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){R.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();R.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){R.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();R.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){R.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();R.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:s,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};R.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(s,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),m=X.parse(u.sdp),f=m.media.find(h=>h.type==="application");f.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),u={type:"answer",sdp:X.write(m)},R.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=X.parse(this._pc.localDescription.sdp));let s=bt.extractDtlsParameters({sdpObject:t});s.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:s},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Cd.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};lr.Safari12=ms});var Ai=C(ur=>{"use strict";Object.defineProperty(ur,"__esModule",{value:!0});ur.ReactNative106=void 0;var Z=ge(),kd=V(),Pd=U(),St=ie(),xd=Q(),Dd=Le(),Id=Ze(),Rt=et(),gs=tt(),_s=rt(),y=new Pd.Logger("ReactNative106"),Mi="ReactNative106",Oi={OS:65535,MIS:65535},vs=class r extends kd.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Mi,factory:e=>new r(e),getNativeRtpCapabilities:async({direction:e})=>{y.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let s=await t.createOffer();try{t.close()}catch{}t=void 0;let n=Z.parse(s.sdp);return r.getLocalRtpCapabilities(n)}catch(s){try{t?.close()}catch{}throw t=void 0,s}},getNativeSctpCapabilities:async()=>(y.debug("getNativeSctpCapabilities()"),{numStreams:Oi})}}static getLocalRtpCapabilities(e,t=[]){let s=Rt.extractRtpCapabilities({sdpObject:e});St.validateAndNormalizeRtpCapabilities(s),_s.addNackSupportForOpus(s);for(let n of t)_s.addHeaderExtensionSupport(s,n);return s}constructor({direction:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),y.debug("constructor()"),this._direction=e,this._remoteSdp=new Id.RemoteSdp({iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=p,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(y.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Mi}close(){if(y.debug("close()"),!this._closed){this._closed=!0,this._sendStream.release(!1);try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),y.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),y.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});y.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let s={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();y.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:s,codecOptions:n,headerExtensionOptions:i,codec:a,onRtpSender:o}){this.assertNotClosed(),this.assertSendDirection(),y.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),s&&s.length>1&&s.forEach((L,Ae)=>{L.rid=`r${Ae}`});let c=this._remoteSdp.getNextMediaSectionIdx(),p=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:s});o&&o(p.sender);let d=await this._pc.createOffer(),l=Z.parse(d.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let u=[];u.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let m=r.getLocalRtpCapabilities(l,u),f=this._getSendExtendedRtpCapabilities(m),h=St.getSendingRtpParameters(e.kind,f);h.codecs=St.reduceCodecs(h.codecs,a);let g=St.getSendingRemoteRtpParameters(e.kind,f);g.codecs=St.reduceCodecs(g.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l});let v=!1,b=(0,Dd.parse)((s??[{}])[0].scalabilityMode),P;s?.length===1&&b.spatialLayers>1&&h.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(y.debug("send() | enabling legacy simulcast for VP9 SVC"),v=!0,l=Z.parse(d.sdp),P=l.media[c.idx],gs.addLegacySimulcast({offerMediaObject:P,numStreams:b.spatialLayers}),d={type:"offer",sdp:Z.write(l)}),i?.absCaptureTime&&(P=l.media[c.idx],Rt.addHeaderExtension({offerMediaObject:P,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(L=>L.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:Z.write(l)}),y.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let x=p.mid??void 0;if(x||y.warn("send() | missing transceiver.mid (bug in react-native-webrtc, using a workaround"),h.mid=x,l=Z.parse(this._pc.localDescription.sdp),P=l.media[c.idx],h.rtcp.cname=Rt.getCname({offerMediaObject:P}),h.msid=`${t??this._sendStream.id} ${e.id}`,!s)h.encodings=gs.getRtpEncodings({offerMediaObject:P,codecs:h.codecs});else if(s.length===1){let L=gs.getRtpEncodings({offerMediaObject:P,codecs:h.codecs});Object.assign(L[0],s[0]),v&&(L=[L[0]]),h.encodings=L}else h.encodings=s;if(h.encodings.length>1&&(h.codecs[0].mimeType.toLowerCase()==="video/vp8"||h.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let L of h.encodings)L.scalabilityMode?L.scalabilityMode=`L1T${b.temporalLayers}`:L.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:P,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:g,codecOptions:n});let k={type:"answer",sdp:this._remoteSdp.getSdp()};return y.debug("send() | calling pc.setRemoteDescription() [answer:%o]",k),await this._pc.setRemoteDescription(k),x||(x=p.mid,h.mid=x),this._mapMidTransceiver.set(x,p),{localId:x,rtpParameters:h,rtpSender:p.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;y.debug("stopSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let n=await this._pc.createOffer();y.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),y.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let s=await this._pc.createOffer();y.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),y.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let s=await this._pc.createOffer();y.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?y.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):y.debug("replaceTrack() [localId:%s, no track]",e);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");await s.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),y.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();y.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),y.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();y.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};y.debug("sendDataChannel() [options:%o]",t);let s=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Oi.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),a=Z.parse(i.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),y.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:s,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],s=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;y.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);s.set(c,u);let{msidStreamId:m}=_s.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??m??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let o of e){let{trackId:c,onRtpReceiver:p}=o;if(p){let d=s.get(c),l=this._pc.getTransceivers().find(u=>u.mid===d);if(!l)throw new Error("transceiver not found");p(l.receiver)}}let i=await this._pc.createAnswer(),a=Z.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=s.get(c),l=a.media.find(u=>String(u.mid)===d);Rt.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l})}i={type:"answer",sdp:Z.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),y.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let o of e){let{trackId:c}=o,p=s.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(d)this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){y.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();y.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){y.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();y.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){y.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();y.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:s,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};y.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(s,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),m=Z.parse(u.sdp),f=m.media.find(h=>h.type==="application");f.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),u={type:"answer",sdp:Z.write(m)},y.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=Z.parse(this._pc.localDescription.sdp));let s=Rt.extractDtlsParameters({sdpObject:t});s.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:s},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new xd.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};ur.ReactNative106=vs});var qi=C(st=>{"use strict";Object.defineProperty(st,"__esModule",{value:!0});st.Device=void 0;st.detectDevice=Ni;st.detectDeviceAsync=ji;var Ld=U(),Md=V(),Te=Q(),hr=Pe(),G=ie(),Od=ii(),Ad=yi(),Nd=Ri(),jd=Pi(),Fd=Li(),qd=Ai(),w=new Ld.Logger("Device");function Ni(r,e){return w.debug("detectDevice()"),!r&&typeof navigator=="object"&&(r=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),Fi(r,e)}async function ji(r,e){return w.debug("detectDeviceAsync()"),!r&&typeof navigator=="object"&&(r=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),Fi(r,e)}var ws=class r{_handlerFactory;_handlerName;_loaded=!1;_getSendExtendedRtpCapabilities;_recvRtpCapabilities;_sendRtpCapabilities;_canProduceByKind={audio:!1,video:!1};_sctpCapabilities;_observer=new Md.EnhancedEventEmitter;static async factory({handlerName:e,handlerFactory:t}={}){if(w.debug("factory()"),e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(!e&&!t&&(e=await ji(),!e))throw new Te.UnsupportedError("device not supported");return new r({handlerName:e,handlerFactory:t})}constructor({handlerName:e,handlerFactory:t}={}){if(w.debug("constructor()"),e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(t)this._handlerFactory=t;else{if(e)w.debug("constructor() | handler given: %s",e);else if(e=Ni(),e)w.debug("constructor() | detected handler: %s",e);else throw new Te.UnsupportedError("device not supported");switch(e){case"Chrome111":{this._handlerFactory=Ad.Chrome111.createFactory();break}case"Chrome74":{this._handlerFactory=Nd.Chrome74.createFactory();break}case"Firefox120":{this._handlerFactory=jd.Firefox120.createFactory();break}case"Safari12":{this._handlerFactory=Fd.Safari12.createFactory();break}case"ReactNative106":{this._handlerFactory=qd.ReactNative106.createFactory();break}default:throw new TypeError(`unknown handlerName "${e}"`)}}this._handlerName=this._handlerFactory.name}get handlerName(){return this._handlerName}get loaded(){return this._loaded}get rtpCapabilities(){return this.recvRtpCapabilities}get recvRtpCapabilities(){if(!this._loaded)throw new Te.InvalidStateError("not loaded");return this._recvRtpCapabilities}get sendRtpCapabilities(){if(!this._loaded)throw new Te.InvalidStateError("not loaded");return this._sendRtpCapabilities}get sctpCapabilities(){if(!this._loaded)throw new Te.InvalidStateError("not loaded");return this._sctpCapabilities}get observer(){return this._observer}async load({routerRtpCapabilities:e,preferLocalCodecsOrder:t=!1}){if(w.debug("load() [routerRtpCapabilities:%o]",e),this._loaded)throw new Te.InvalidStateError("already loaded");let s=hr.clone(e);G.validateAndNormalizeRtpCapabilities(s);let{getNativeRtpCapabilities:n,getNativeSctpCapabilities:i}=this._handlerFactory,a=hr.clone(await n({direction:"recvonly"}));w.debug("load() | got native receiving RTP capabilities:%o",a),G.validateAndNormalizeRtpCapabilities(a);let o=hr.clone(await n({direction:"sendonly"}));w.debug("load() | got native sending RTP capabilities:%o",o),G.validateAndNormalizeRtpCapabilities(o),this._getSendExtendedRtpCapabilities=d=>hr.clone(G.getExtendedRtpCapabilities(d,s,t));let c=G.getExtendedRtpCapabilities(a,s,!1);this._recvRtpCapabilities=G.getRecvRtpCapabilities(c),w.debug("load() | got receiving RTP capabilities:%o",this._recvRtpCapabilities),G.validateAndNormalizeRtpCapabilities(this._recvRtpCapabilities);let p=G.getExtendedRtpCapabilities(o,s,t);this._sendRtpCapabilities=G.getSendRtpCapabilities(p),w.debug("load() | got sending RTP capabilities:%o",this._sendRtpCapabilities),G.validateAndNormalizeRtpCapabilities(this._sendRtpCapabilities),this._canProduceByKind.audio=G.canSend("audio",this._sendRtpCapabilities),this._canProduceByKind.video=G.canSend("video",this._sendRtpCapabilities),this._sctpCapabilities=await i(),G.validateSctpCapabilities(this._sctpCapabilities),w.debug("load() | got native SCTP capabilities:%o",this._sctpCapabilities),w.debug("load() succeeded"),this._loaded=!0}canProduce(e){if(this._loaded){if(e!=="audio"&&e!=="video")throw new TypeError(`invalid kind "${e}"`)}else throw new Te.InvalidStateError("not loaded");return this._canProduceByKind[e]}createSendTransport({id:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:p}){return w.debug("createSendTransport()"),this.createTransport({direction:"send",id:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:p})}createRecvTransport({id:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:p}){return w.debug("createRecvTransport()"),this.createTransport({direction:"recv",id:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:p})}createTransport({direction:e,id:t,iceParameters:s,iceCandidates:n,dtlsParameters:i,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:p,appData:d}){if(this._loaded){if(typeof t!="string")throw new TypeError("missing id");if(typeof s!="object")throw new TypeError("missing iceParameters");if(Array.isArray(n)){if(typeof i!="object")throw new TypeError("missing dtlsParameters");if(a&&typeof a!="object")throw new TypeError("wrong sctpParameters");if(d&&typeof d!="object")throw new TypeError("if given, appData must be an object")}else throw new TypeError("missing iceCandidates")}else throw new Te.InvalidStateError("not loaded");let l=new Od.Transport({direction:e,id:t,iceParameters:s,iceCandidates:n,dtlsParameters:i,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:p,appData:d,handlerFactory:this._handlerFactory,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities,recvRtpCapabilities:this._recvRtpCapabilities,canProduceByKind:this._canProduceByKind});return this._observer.safeEmit("newtransport",l),l}};st.Device=ws;function Fi(r,e){w.debug('detectDeviceImpl() [userAgent:"%s", userAgentData:%o]',r,e);let t=$d(r,e);if(t){if(t>=111)return w.debug("detectDeviceImpl() | using Chrome111 handler"),"Chrome111";if(t>=74)return w.debug("detectDeviceImpl() | using Chrome74 handler"),"Chrome74";w.warn("detectDeviceImpl() | unsupported Chromium based browser/version");return}let s=Ud(r);if(s){if(s>=120)return w.debug("detectDeviceImpl() | using Firefox120 handler"),"Firefox120";w.warn("detectDeviceImpl() | unsupported Firefox browser/version");return}let n=zd(r);if(n){if(n>=605)return w.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";w.warn("detectDeviceImpl() | unsupported desktop Safari browser/version");return}let i=Bd(r);if(i){if(i>=605)return w.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";w.warn("detectDeviceImpl() | unsupported iOS Safari based browser/version");return}if(Ct()){if(typeof RTCPeerConnection<"u"&&typeof RTCRtpTransceiver<"u")return w.debug("detectDeviceImpl() | using ReactNative106 handler"),"ReactNative106";w.warn("detectDeviceImpl() | unsupported react-native-webrtc version without RTCPeerConnection or RTCRtpTransceiver, forgot to call registerGlobals() on it?");return}w.warn('detectDeviceImpl() | device not supported [userAgent:"%s", userAgentData:%o]',r,e)}function $d(r,e){if(w.debug("getChromiumMajorVersion()"),fr(r,e)){w.debug("getChromiumMajorVersion() | this is iOS => undefined");return}if(Ct()){w.debug("getChromiumMajorVersion() | this is React-Native => undefined");return}if(e){let n=(Array.isArray(e.brands)?e.brands:[]).find(i=>i.brand==="Chromium");if(n){let i=Number(n.version);return w.debug(`getChromiumMajorVersion() | Chromium major version based on NavigatorUAData => ${i}`),i}}let t=r?.match(/\b(?:Chrome|Chromium)\/(\w+)/i);if(t?.[1]){let s=Number(t[1]);return w.debug(`getChromiumMajorVersion() | Chromium major version based on User-Agent => ${s}`),s}w.debug("getChromiumMajorVersion() | this is not Chromium => undefined")}function Ud(r){if(w.debug("getFirefoxMajorVersion()"),fr(r)){w.debug("getFirefoxMajorVersion() | this is iOS => undefined");return}if(Ct()){w.debug("getFirefoxMajorVersion() | this is React-Native => undefined");return}let e=r?.match(/\bFirefox\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return w.debug(`getFirefoxMajorVersion() | Firefox major version based on User-Agent => ${t}`),t}w.debug("getFirefoxMajorVersion() | this is not Firefox => undefined")}function zd(r){if(w.debug("getMacOSWebKitMajorVersion()"),fr(r)){w.debug("getMacOSWebKitMajorVersion() | this is iOS => undefined");return}if(Ct()){w.debug("getMacOSWebKitMajorVersion() | this is React-Native => undefined");return}if(!(r&&/\bSafari\b/i.test(r)&&!/\bChrome\b/i.test(r)&&!/\bChromium\b/i.test(r)&&!/\bFirefox\b/i.test(r))){w.debug("getMacOSWebKitMajorVersion() | this is not Safari => undefined");return}let t=r.match(/AppleWebKit\/(\w+)/i);if(t?.[1]){let s=Number(t[1]);return w.debug(`getMacOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${s}`),s}w.debug("getMacOSWebKitMajorVersion() | this is not WebKit => undefined")}function Bd(r){if(w.debug("getIOSWebKitMajorVersion()"),!fr(r)){w.debug("getIOSWebKitMajorVersion() | this is not iOS => undefined");return}if(Ct()){w.debug("getIOSWebKitMajorVersion() | this is React-Native => undefined");return}let e=r?.match(/AppleWebKit\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return w.debug(`getIOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${t}`),t}w.debug("getIOSWebKitMajorVersion() | this is not WebKit => undefined")}function fr(r,e){return w.debug("isIOS()"),e?.platform==="iOS"?(w.debug("isIOS() | this is iOS based on NavigatorUAData.platform => true"),!0):e?.platform?(w.debug("isIOS() | this is not iOS based on NavigatorUAData.platform => false"),!1):r&&/iPad|iPhone|iPod/.test(r)?(w.debug("isIOS() | this is iOS based on User-Agent => true"),!0):typeof navigator=="object"&&navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1?(w.debug("isIOS() | this is iPadOS 13+ based on User-Agent => true"),!0):(w.debug("isIOS() | this is not iOS => false"),!1)}function Ct(){return w.debug("isReactNative()"),typeof navigator=="object"&&navigator.product==="ReactNative"?(w.debug("isReactNative() | this is React-Native based on navigator.product"),!0):(w.debug("isReactNative() | this is not React-Native => false"),!1)}});var Ui=C($i=>{"use strict";var Oe=256,gr=[],mr;for(;Oe--;)gr[Oe]=(Oe+256).toString(16).substring(1);function Wd(){var r=0,e,t="";if(!mr||Oe+16>256){for(mr=Array(r=256);r--;)mr[r]=256*Math.random()|0;r=Oe=0}for(;r<16;r++)e=mr[Oe+r],r==6?t+=gr[e&15|64]:r==8?t+=gr[e&63|128]:t+=gr[e],r&1&&r>1&&r<11&&(t+="-");return Oe++,t}$i.v4=Wd});var zi=C(_r=>{"use strict";Object.defineProperty(_r,"__esModule",{value:!0});_r.FakeEventTarget=void 0;var ys=class{listeners={};addEventListener(e,t,s){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof s=="object"&&s.once===!0}))}removeEventListener(e,t,s){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(n=>n.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new Error("invalid event object");let t=this.listeners[e.type];if(!t)return!0;for(let s of[...t]){try{s.callback.call(this,e)}catch(n){setTimeout(()=>{throw n},0)}s.once&&this.removeEventListener(e.type,s.callback)}return!e.defaultPrevented}};_r.FakeEventTarget=ys});var Bi=C(vr=>{"use strict";Object.defineProperty(vr,"__esModule",{value:!0});vr.FakeEvent=void 0;var bs=class{NONE=0;CAPTURING_PHASE=1;AT_TARGET=2;BUBBLING_PHASE=3;type;bubbles;cancelable;defaultPrevented=!1;composed=!1;currentTarget=null;eventPhase=this.NONE;isTrusted=!0;target=null;timeStamp=0;cancelBubble=!1;returnValue=!0;srcElement=null;constructor(e,t={}){this.type=e,this.bubbles=t.bubbles??!1,this.cancelable=t.cancelable??!1}preventDefault(){this.cancelable&&(this.defaultPrevented=!0)}stopPropagation(){}stopImmediatePropagation(){}composedPath(){return[]}initEvent(e,t,s){}};vr.FakeEvent=bs});var Wi=C(Ss=>{"use strict";Object.defineProperty(Ss,"__esModule",{value:!0});Ss.clone=Hd;function Hd(r){if(r!==void 0)return Number.isNaN(r)?NaN:typeof structuredClone=="function"?structuredClone(r):JSON.parse(JSON.stringify(r))}});var Vi=C(yr=>{"use strict";Object.defineProperty(yr,"__esModule",{value:!0});yr.FakeMediaStreamTrack=void 0;var Hi=Ui(),Vd=zi(),nt=Bi(),wr=Wi(),Rs=class r extends Vd.FakeEventTarget{#m;#l;#u;#e;#r;#t;#s;#h;#n;#f;#i;#a=null;#o=null;#c=null;#d=null;#p=null;constructor({kind:e,id:t,label:s,contentHint:n,enabled:i,muted:a,readyState:o,capabilities:c,constraints:p,settings:d,data:l}){super(),this.#m=t??(0,Hi.v4)(),this.#l=e,this.#u=s??"",this.#s=n??"",this.#r=i??!0,this.#t=a??!1,this.#e=o??"live",this.#h=c??{},this.#n=p??{},this.#f=d??{},this.#i=l??{}}get id(){return this.#m}get kind(){return this.#l}get label(){return this.#u}get contentHint(){return this.#s}set contentHint(e){this.#s=e}get enabled(){return this.#r}set enabled(e){let t=this.#r!==e;this.#r=e,t&&this.dispatchEvent(new nt.FakeEvent("enabledchange"))}get muted(){return this.#t}get readyState(){return this.#e}get data(){return this.#i}set data(e){this.#i=e}get onmute(){return this.#a}set onmute(e){this.#a&&this.removeEventListener("mute",this.#a),this.#a=e,e&&this.addEventListener("mute",e)}get onunmute(){return this.#o}set onunmute(e){this.#o&&this.removeEventListener("unmute",this.#o),this.#o=e,e&&this.addEventListener("unmute",e)}get onended(){return this.#c}set onended(e){this.#c&&this.removeEventListener("ended",this.#c),this.#c=e,e&&this.addEventListener("ended",e)}get onenabledchange(){return this.#d}set onenabledchange(e){this.#d&&this.removeEventListener("enabledchange",this.#d),this.#d=e,e&&this.addEventListener("enabledchange",e)}get onstopped(){return this.#p}set onstopped(e){this.#p&&this.removeEventListener("stopped",this.#p),this.#p=e,e&&this.addEventListener("stopped",e)}addEventListener(e,t,s){super.addEventListener(e,t,s)}removeEventListener(e,t,s){super.removeEventListener(e,t,s)}stop(){this.#e!=="ended"&&(this.#e="ended",this.dispatchEvent(new nt.FakeEvent("stopped")))}clone({id:e,data:t}={}){return new r({id:e??(0,Hi.v4)(),kind:this.#l,label:this.#u,contentHint:this.#s,enabled:this.#r,muted:this.#t,readyState:this.#e,capabilities:(0,wr.clone)(this.#h),constraints:(0,wr.clone)(this.#n),settings:(0,wr.clone)(this.#f),data:t??(0,wr.clone)(this.#i)})}getCapabilities(){return this.#h}getConstraints(){return this.#n}async applyConstraints(e={}){return this.#n=e,Promise.resolve()}getSettings(){return this.#f}remoteStop(){this.#e!=="ended"&&(this.#e="ended",this.dispatchEvent(new nt.FakeEvent("stopped")),this.dispatchEvent(new nt.FakeEvent("ended")))}remoteMute(){this.#t||(this.#t=!0,this.dispatchEvent(new nt.FakeEvent("mute")))}remoteUnmute(){this.#t&&(this.#t=!1,this.dispatchEvent(new nt.FakeEvent("unmute")))}};yr.FakeMediaStreamTrack=Rs});var Gi=C(br=>{"use strict";Object.defineProperty(br,"__esModule",{value:!0});br.FakeEventTarget=void 0;var Cs=class{listeners={};addEventListener(e,t,s){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof s=="object"&&s.once===!0}))}removeEventListener(e,t,s){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(n=>n.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new Error("invalid event object");let t=this.listeners[e.type];if(!t)return!0;for(let s of[...t]){try{s.callback.call(this,e)}catch(n){setTimeout(()=>{throw n},0)}s.once&&this.removeEventListener(e.type,s.callback)}return!e.defaultPrevented}};br.FakeEventTarget=Cs});var Qi=C(Rr=>{"use strict";Object.defineProperty(Rr,"__esModule",{value:!0});Rr.FakeHandler=void 0;var Gd=Vi(),Kd=V(),Yd=U(),it=Pe(),Ts=ie(),Yi=Q(),Qd=Gi(),q=new Yd.Logger("FakeHandler"),Ki="FakeHandler",Es=class r extends Kd.EnhancedEventEmitter{_closed=!1;_fakeParameters;_getSendExtendedRtpCapabilities;_cname=`CNAME-${it.generateRandomNumber()}`;_defaultSendStreamId=`${it.generateRandomNumber()}`;_transportReady=!1;_nextLocalId=1;_tracks=new Map;_nextSctpStreamId=0;static createFactory(e){return{name:Ki,factory:t=>new r(t,e),getNativeRtpCapabilities:async({direction:t})=>(q.debug("getNativeRtpCapabilities() [direction:%o]",t),r.getLocalRtpCapabilities(e)),getNativeSctpCapabilities:async()=>(q.debug("getNativeSctpCapabilities()"),e.generateNativeSctpCapabilities())}}static getLocalRtpCapabilities(e){let t=e.generateNativeRtpCapabilities();return Ts.validateAndNormalizeRtpCapabilities(t),t}constructor({getSendExtendedRtpCapabilities:e},t){super(),q.debug("constructor()"),this._getSendExtendedRtpCapabilities=e,this._fakeParameters=t}get name(){return Ki}close(){q.debug("close()"),!this._closed&&(this._closed=!0,super.close())}setIceGatheringState(e){this.emit("@icegatheringstatechange",e)}setConnectionState(e){this.emit("@connectionstatechange",e)}async updateIceServers(e){this.assertNotClosed(),q.debug("updateIceServers()")}async restartIce(e){this.assertNotClosed(),q.debug("restartIce()")}async getTransportStats(){return this.assertNotClosed(),new Map}async send({track:e,streamId:t,encodings:s,codecOptions:n,codec:i}){this.assertNotClosed(),q.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),this._transportReady||await this.setupTransport({localDtlsRole:"server"});let a=r.getLocalRtpCapabilities(this._fakeParameters),o=this._getSendExtendedRtpCapabilities(a),c=Ts.getSendingRtpParameters(e.kind,o);c.codecs=Ts.reduceCodecs(c.codecs,i);let p=c.codecs.some(l=>/.+\/rtx$/i.test(l.mimeType));c.mid=`mid-${it.generateRandomNumber()}`,c.msid=`${t??"-"} ${e.id}`,s||(s=[{}]);for(let l of s)l.ssrc=it.generateRandomNumber(),p&&(l.rtx={ssrc:it.generateRandomNumber()});c.encodings=s,c.rtcp={cname:this._cname,reducedSize:!0,mux:!0},c.msid=`${t??this._defaultSendStreamId} ${e.id}`;let d=this._nextLocalId++;return this._tracks.set(d,e),{localId:String(d),rtpParameters:c}}async stopSending(e){if(q.debug("stopSending() [localId:%s]",e),!this._closed){if(!this._tracks.has(Number(e)))throw new Error("local track not found");this._tracks.delete(Number(e))}}async pauseSending(e){this.assertNotClosed()}async resumeSending(e){this.assertNotClosed()}async replaceTrack(e,t){this.assertNotClosed(),t?q.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):q.debug("replaceTrack() [localId:%s, no track]",e),this._tracks.delete(Number(e)),this._tracks.set(Number(e),t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),q.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),q.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t)}async getSenderStats(e){return this.assertNotClosed(),new Map}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this._transportReady||await this.setupTransport({localDtlsRole:"server"}),q.debug("sendDataChannel()");let t=new Sr({id:this._nextSctpStreamId++,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:e.label,protocol:e.protocol}),s={streamId:this._nextSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits};return{dataChannel:t,sctpStreamParameters:s}}async receive(e){this.assertNotClosed();let t=[];for(let s of e){let{trackId:n,kind:i}=s;this._transportReady||await this.setupTransport({localDtlsRole:"client"}),q.debug("receive() [trackId:%s, kind:%s]",n,i);let a=this._nextLocalId++,o=new Gd.FakeMediaStreamTrack({kind:i});this._tracks.set(a,o),t.push({localId:String(a),track:o})}return t}async stopReceiving(e){if(!this._closed)for(let t of e)q.debug("stopReceiving() [localId:%s]",t),this._tracks.delete(Number(t))}async pauseReceiving(e){this.assertNotClosed()}async resumeReceiving(e){this.assertNotClosed()}async getReceiverStats(e){return this.assertNotClosed(),new Map}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:s}){return this.assertNotClosed(),this._transportReady||await this.setupTransport({localDtlsRole:"client"}),q.debug("receiveDataChannel()"),{dataChannel:new Sr({id:e.streamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:t,protocol:s})}}getDataChannelMaxMessageSize(){return 5e5}async setupTransport({localDtlsRole:e,localSdpObject:t}){let s=it.clone(this._fakeParameters.generateLocalDtlsParameters());e&&(s.role=e),this.emit("@connectionstatechange","connecting"),await new Promise((n,i)=>this.emit("@connect",{dtlsParameters:s},n,i)),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new Yi.InvalidStateError("method called in a closed handler")}};Rr.FakeHandler=Es;var Sr=class extends Qd.FakeEventTarget{_id;_negotiated=!0;_ordered;_maxPacketLifeTime;_maxRetransmits;_label;_protocol;_readyState="connecting";_bufferedAmount=0;_bufferedAmountLowThreshold=0;_binaryType="arraybuffer";_onopen=null;_onclosing=null;_onclose=null;_onmessage=null;_onbufferedamountlow=null;_onerror=null;constructor({id:e,ordered:t=!0,maxPacketLifeTime:s=null,maxRetransmits:n=null,label:i="",protocol:a=""}){super(),q.debug(`constructor() [id:${e}, ordered:${t}, maxPacketLifeTime:${s}, maxRetransmits:${n}, label:${i}, protocol:${a}`),this._id=e,this._ordered=t,this._maxPacketLifeTime=s,this._maxRetransmits=n,this._label=i,this._protocol=a}get id(){return this._id}get negotiated(){return this._negotiated}get ordered(){return this._ordered}get maxPacketLifeTime(){return this._maxPacketLifeTime}get maxRetransmits(){return this._maxRetransmits}get label(){return this._label}get protocol(){return this._protocol}get readyState(){return this._readyState}get bufferedAmount(){return this._bufferedAmount}get bufferedAmountLowThreshold(){return this._bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._bufferedAmountLowThreshold=e}get binaryType(){return this._binaryType}set binaryType(e){this._binaryType=e}get onopen(){return this._onopen}set onopen(e){this._onopen&&this.removeEventListener("open",this._onopen),this._onopen=e,e&&this.addEventListener("open",e)}get onclosing(){return this._onclosing}set onclosing(e){this._onclosing&&this.removeEventListener("closing",this._onclosing),this._onclosing=e,e&&this.addEventListener("closing",e)}get onclose(){return this._onclose}set onclose(e){this._onclose&&this.removeEventListener("close",this._onclose),this._onclose=e,e&&this.addEventListener("close",e)}get onmessage(){return this._onmessage}set onmessage(e){this._onmessage&&this.removeEventListener("message",this._onmessage),this._onmessage=e,e&&this.addEventListener("message",e)}get onbufferedamountlow(){return this._onbufferedamountlow}set onbufferedamountlow(e){this._onbufferedamountlow&&this.removeEventListener("bufferedamountlow",this._onbufferedamountlow),this._onbufferedamountlow=e,e&&this.addEventListener("bufferedamountlow",e)}get onerror(){return this._onerror}set onerror(e){this._onerror&&this.removeEventListener("error",this._onerror),this._onerror=e,e&&this.addEventListener("error",e)}addEventListener(e,t,s){super.addEventListener(e,t,s)}removeEventListener(e,t,s){super.removeEventListener(e,t,s)}close(){["closing","closed"].includes(this._readyState)||(this._readyState="closed")}send(e){if(this._readyState!=="open")throw new Yi.InvalidStateError("not open")}}});var Ji=C(ne=>{"use strict";Object.defineProperty(ne,"__esModule",{value:!0});ne.generateRouterRtpCapabilities=Jd;ne.generateNativeRtpCapabilities=Xd;ne.generateNativeSctpCapabilities=Zd;ne.generateLocalDtlsParameters=ep;ne.generateTransportRemoteParameters=tp;ne.generateProducerRemoteParameters=rp;ne.generateConsumerRemoteParameters=sp;ne.generateDataProducerRemoteParameters=np;ne.generateDataConsumerRemoteParameters=ip;var B=Pe();function K(){return String(B.generateRandomNumber())}function Jd(){return B.deepFreeze({codecs:[{mimeType:"audio/opus",kind:"audio",preferredPayloadType:100,clockRate:48e3,channels:2,rtcpFeedback:[{type:"transport-cc"}],parameters:{useinbandfec:1,foo:"bar"}},{mimeType:"video/VP8",kind:"video",preferredPayloadType:101,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"x-google-start-bitrate":1500}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:102,clockRate:9e4,rtcpFeedback:[],parameters:{apt:101}},{mimeType:"video/H264",kind:"video",preferredPayloadType:103,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"level-asymmetry-allowed":1,"packetization-mode":1,"profile-level-id":"42e01f"}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:104,clockRate:9e4,rtcpFeedback:[],parameters:{apt:103}},{mimeType:"video/VP9",kind:"video",preferredPayloadType:105,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"profile-id":0,"x-google-start-bitrate":1500}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:106,clockRate:9e4,rtcpFeedback:[],parameters:{apt:105}}],headerExtensions:[{kind:"audio",uri:"urn:ietf:params:rtp-hdrext:sdes:mid",preferredId:1,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:mid",preferredId:1,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id",preferredId:2,preferredEncrypt:!1,direction:"recvonly"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id",preferredId:3,preferredEncrypt:!1,direction:"recvonly"},{kind:"audio",uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",preferredId:4,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",preferredId:4,preferredEncrypt:!1,direction:"sendrecv"},{kind:"audio",uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",preferredId:5,preferredEncrypt:!1,direction:"recvonly"},{kind:"video",uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",preferredId:5,preferredEncrypt:!1,direction:"sendrecv"},{kind:"audio",uri:"urn:ietf:params:rtp-hdrext:ssrc-audio-level",preferredId:10,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:3gpp:video-orientation",preferredId:11,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:toffset",preferredId:12,preferredEncrypt:!1,direction:"sendrecv"}]})}function Xd(){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 Zd(){return B.deepFreeze({numStreams:{OS:2048,MIS:2048}})}function ep(){return B.deepFreeze({fingerprints:[{algorithm:"sha-256",value:"82:5A:68:3D:36:C3:0A:DE:AF:E7:32:43:D2:88:83:57:AC:2D:65:E5:80:C4:B6:FB:AF:1A:A0:21:9F:6D:0C:AD"}],role:"auto"})}function tp(){return{id:K(),iceParameters:B.deepFreeze({iceLite:!0,password:"yku5ej8nvfaor28lvtrabcx0wkrpkztz",usernameFragment:"h3hk1iz6qqlnqlne"}),iceCandidates:B.deepFreeze([{foundation:"udpcandidate",address:"9.9.9.9",ip:"9.9.9.9",port:40533,priority:1078862079,protocol:"udp",type:"host",tcpType:"passive"},{foundation:"udpcandidate",address:"9.9.9.9",ip:"9:9:9:9:9:9",port:41333,priority:1078862089,protocol:"udp",type:"host",tcpType:"passive"}]),dtlsParameters:B.deepFreeze({fingerprints:[{algorithm:"sha-256",value:"A9:F4:E0:D2:74:D3:0F:D9:CA:A5:2F:9F:7F:47:FA:F0:C4:72:DD:73:49:D0:3B:14:90:20:51:30:1B:90:8E:71"},{algorithm:"sha-384",value:"03:D9:0B:87:13:98:F6:6D:BC:FC:92:2E:39:D4:E1:97:32:61:30:56:84:70:81:6E:D1:82:97:EA:D9:C1:21:0F:6B:C5:E7:7F:E1:97:0C:17:97:6E:CF:B3:EF:2E:74:B0"},{algorithm:"sha-512",value:"84:27:A4:28:A4:73:AF:43:02:2A:44:68:FF:2F:29:5C:3B:11:9A:60:F4:A8:F0:F5:AC:A0:E3:49:3E:B1:34:53:A9:85:CE:51:9B:ED:87:5E:B8:F4:8E:3D:FA:20:51:B8:96:EE:DA:56:DC:2F:5C:62:79:15:23:E0:21:82:2B:2C"}],role:"auto"}),sctpParameters:B.deepFreeze({port:5e3,OS:2048,MIS:2048,maxMessageSize:2e6})}}function rp(){return B.deepFreeze({id:K()})}function sp({id:r,codecMimeType:e}={}){switch(e){case"audio/opus":return{id:r??K(),producerId:K(),kind:"audio",rtpParameters:B.deepFreeze({codecs:[{mimeType:"audio/opus",payloadType:100,clockRate:48e3,channels:2,rtcpFeedback:[{type:"transport-cc"}],parameters:{useinbandfec:1,foo:"bar"}}],encodings:[{ssrc:46687003}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:ietf:params:rtp-hdrext:ssrc-audio-level",id:10}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"audio/ISAC":return{id:r??K(),producerId:K(),kind:"audio",rtpParameters:B.deepFreeze({codecs:[{mimeType:"audio/ISAC",payloadType:111,clockRate:16e3,channels:1,rtcpFeedback:[{type:"transport-cc"}],parameters:{}}],encodings:[{ssrc:46687004}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"video/VP8":return{id:r??K(),producerId:K(),kind:"video",rtpParameters:B.deepFreeze({codecs:[{mimeType:"video/VP8",payloadType:101,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"x-google-start-bitrate":1500}},{mimeType:"video/rtx",payloadType:102,clockRate:9e4,rtcpFeedback:[],parameters:{apt:101}}],encodings:[{ssrc:99991111,rtx:{ssrc:99991112}}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",id:4},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:3gpp:video-orientation",id:11},{uri:"urn:ietf:params:rtp-hdrext:toffset",id:12}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"video/H264":return{id:r??K(),producerId:K(),kind:"video",rtpParameters:B.deepFreeze({codecs:[{mimeType:"video/H264",payloadType:103,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"level-asymmetry-allowed":1,"packetization-mode":1,"profile-level-id":"42e01f"}},{mimeType:"video/rtx",payloadType:104,clockRate:9e4,rtcpFeedback:[],parameters:{apt:103}}],encodings:[{ssrc:99991113,rtx:{ssrc:99991114}}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",id:4},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:3gpp:video-orientation",id:11},{uri:"urn:ietf:params:rtp-hdrext:toffset",id:12}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};default:throw new TypeError(`unknown codecMimeType '${e}'`)}}function np(){return B.deepFreeze({id:K()})}function ip({id:r}={}){return{id:r??K(),dataProducerId:K(),sctpStreamParameters:B.deepFreeze({streamId:666,maxPacketLifeTime:5e3,maxRetransmits:void 0})}}});var os=C(O=>{"use strict";Object.defineProperty(O,"__esModule",{value:!0});O.debug=O.testFakeParameters=O.FakeHandler=O.enhancedEvents=O.ortc=O.parseScalabilityMode=O.detectDeviceAsync=O.detectDevice=O.Device=O.version=O.types=void 0;var ap=dt();O.debug=ap.default;O.types=Sn();O.version="3.20.0";var ks=qi();Object.defineProperty(O,"Device",{enumerable:!0,get:function(){return ks.Device}});Object.defineProperty(O,"detectDevice",{enumerable:!0,get:function(){return ks.detectDevice}});Object.defineProperty(O,"detectDeviceAsync",{enumerable:!0,get:function(){return ks.detectDeviceAsync}});var op=Le();Object.defineProperty(O,"parseScalabilityMode",{enumerable:!0,get:function(){return op.parse}});O.ortc=ie();O.enhancedEvents=V();var cp=Qi();Object.defineProperty(O,"FakeHandler",{enumerable:!0,get:function(){return cp.FakeHandler}});O.testFakeParameters=Ji()});var Zi=C((eu,Ps)=>{"use strict";var dp=Object.prototype.hasOwnProperty,W="~";function Tt(){}Object.create&&(Tt.prototype=Object.create(null),new Tt().__proto__||(W=!1));function pp(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function Xi(r,e,t,s,n){if(typeof t!="function")throw new TypeError("The listener must be a function");var i=new pp(t,s||r,n),a=W?W+e:e;return r._events[a]?r._events[a].fn?r._events[a]=[r._events[a],i]:r._events[a].push(i):(r._events[a]=i,r._eventsCount++),r}function Cr(r,e){--r._eventsCount===0?r._events=new Tt:delete r._events[e]}function $(){this._events=new Tt,this._eventsCount=0}$.prototype.eventNames=function(){var e=[],t,s;if(this._eventsCount===0)return e;for(s in t=this._events)dp.call(t,s)&&e.push(W?s.slice(1):s);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};$.prototype.listeners=function(e){var t=W?W+e:e,s=this._events[t];if(!s)return[];if(s.fn)return[s.fn];for(var n=0,i=s.length,a=new Array(i);n<i;n++)a[n]=s[n].fn;return a};$.prototype.listenerCount=function(e){var t=W?W+e:e,s=this._events[t];return s?s.fn?1:s.length:0};$.prototype.emit=function(e,t,s,n,i,a){var o=W?W+e:e;if(!this._events[o])return!1;var c=this._events[o],p=arguments.length,d,l;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),p){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,s),!0;case 4:return c.fn.call(c.context,t,s,n),!0;case 5:return c.fn.call(c.context,t,s,n,i),!0;case 6:return c.fn.call(c.context,t,s,n,i,a),!0}for(l=1,d=new Array(p-1);l<p;l++)d[l-1]=arguments[l];c.fn.apply(c.context,d)}else{var u=c.length,m;for(l=0;l<u;l++)switch(c[l].once&&this.removeListener(e,c[l].fn,void 0,!0),p){case 1:c[l].fn.call(c[l].context);break;case 2:c[l].fn.call(c[l].context,t);break;case 3:c[l].fn.call(c[l].context,t,s);break;case 4:c[l].fn.call(c[l].context,t,s,n);break;default:if(!d)for(m=1,d=new Array(p-1);m<p;m++)d[m-1]=arguments[m];c[l].fn.apply(c[l].context,d)}}return!0};$.prototype.on=function(e,t,s){return Xi(this,e,t,s,!1)};$.prototype.once=function(e,t,s){return Xi(this,e,t,s,!0)};$.prototype.removeListener=function(e,t,s,n){var i=W?W+e:e;if(!this._events[i])return this;if(!t)return Cr(this,i),this;var a=this._events[i];if(a.fn)a.fn===t&&(!n||a.once)&&(!s||a.context===s)&&Cr(this,i);else{for(var o=0,c=[],p=a.length;o<p;o++)(a[o].fn!==t||n&&!a[o].once||s&&a[o].context!==s)&&c.push(a[o]);c.length?this._events[i]=c.length===1?c[0]:c:Cr(this,i)}return this};$.prototype.removeAllListeners=function(e){var t;return e?(t=W?W+e:e,this._events[t]&&Cr(this,t)):(this._events=new Tt,this._eventsCount=0),this};$.prototype.off=$.prototype.removeListener;$.prototype.addListener=$.prototype.on;$.prefixed=W;$.EventEmitter=$;typeof Ps<"u"&&(Ps.exports=$)});var It=class{_handlers=new Map;_ws;_onMessage;_onOpen;_listeningForOpen=!1;_pendingSends=[];_disposed=!1;constructor(e){this._ws=e,this._onMessage=t=>{if(typeof t.data!="string")return;let s;try{s=JSON.parse(t.data)}catch{console.warn("[ChannelMultiplexer] Failed to parse WebSocket message as JSON");return}if(!s.channel)return;let n=this._handlers.get(s.channel);if(n)for(let i of n)i(s)},this._ws.addEventListener("message",this._onMessage),this._onOpen=()=>{this.flushPendingSends()}}on(e,t){let s=this._handlers.get(e);return s||(s=new Set,this._handlers.set(e,s)),s.add(t),()=>{s.delete(t),s.size===0&&this._handlers.delete(e)}}emit(e,t){if(this._disposed)return;let s=JSON.stringify({channel:e,...t});if(this._ws.readyState===WebSocket.OPEN){this._ws.send(s);return}this._ws.readyState===WebSocket.CONNECTING&&(this._pendingSends.push(s),this.listenForOpen())}dispose(){this._disposed=!0,this._pendingSends=[],this._handlers.clear(),this._ws.removeEventListener("message",this._onMessage),this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1}flushPendingSends(){if(this._disposed||this._ws.readyState!==WebSocket.OPEN)return;this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1;let e=this._pendingSends;this._pendingSends=[];for(let t of e)this._ws.send(t)}listenForOpen(){this._listeningForOpen||(this._listeningForOpen=!0,this._ws.addEventListener("open",this._onOpen))}},qs=class{_handlers=new Map;_pendingSends=[];_target=null;_targetUnsubscribes=[];_disposed=!1;setTarget(e){if(this._disposed)return;this.detachTarget(),this._target=e;for(let[s,n]of this._handlers)for(let i of n)this._targetUnsubscribes.push(e.on(s,i));let t=this._pendingSends;this._pendingSends=[];for(let s of t)e.emit(s.channel,s.data)}rewriteSessionChannels(e,t){if(e===t)return;let s=`session:${e}:`,n=`session:${t}:`,i=new Map;for(let[a,o]of this._handlers)i.set(a.startsWith(s)?n+a.slice(s.length):a,o);this._handlers=i,this._pendingSends=this._pendingSends.map(a=>({...a,channel:a.channel.startsWith(s)?n+a.channel.slice(s.length):a.channel}))}on(e,t){if(this._disposed)return()=>{};let s=this._handlers.get(e);s||(s=new Set,this._handlers.set(e,s)),s.add(t);let n=this._target?.on(e,t);return n&&this._targetUnsubscribes.push(n),()=>{s?.delete(t),s?.size===0&&this._handlers.delete(e),n?.(),n&&(this._targetUnsubscribes=this._targetUnsubscribes.filter(i=>i!==n))}}emit(e,t){if(!this._disposed){if(this._target){this._target.emit(e,t);return}this._pendingSends.push({channel:e,data:t})}}dispose(){this._disposed=!0,this._pendingSends=[],this._handlers.clear(),this.detachTarget()}detachTarget(){for(let e of this._targetUnsubscribes)e();this._targetUnsubscribes=[],this._target=null}};var $s=class extends Error{code="session_end_unavailable";constructor(e="[urun] this session handle cannot terminally end the session; disconnect the viewer instead",t){super(e),this.name="SessionEndUnavailableError",t?.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}},we=class extends Error{code;httpStatus;requestId;constructor(e,t){super(e),this.name="SessionEndError",this.code=t.code??"session_end_failed",this.httpStatus=t.httpStatus,this.requestId=t.requestId,t.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}},Ne=class extends Error{requestId;code;constructor(e,t){super(e),this.name="RequestError",this.requestId=t?.requestId,this.code=t?.code,t?.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}},Us=class extends Ne{timeoutMs;constructor(e,t){super(`[urun] request timed out after ${e}ms`,{requestId:t}),this.name="RequestTimeoutError",this.timeoutMs=e,Object.setPrototypeOf(this,new.target.prototype)}},zs=class extends Ne{timeoutMs;constructor(e,t){super(`[urun] request doc-sync did not establish within ${e}ms \u2014 the request was never delivered to the runtime (the session doc never synced with the session-server; check the doc-sync transport / connection)`,{requestId:t}),this.name="RequestDocSyncError",this.timeoutMs=e,Object.setPrototypeOf(this,new.target.prototype)}},Bs=class extends Error{stream;owner;attempted;constructor(e,t,s){super(`[urun] stream "${e}" is already produced by the ${t}; this (${s}) peer cannot also produce it \u2014 a named stream has exactly one producer (consume it instead, or use a distinct name for the reverse direction)`),this.name="StreamDirectionConflict",this.stream=e,this.owner=t,this.attempted=s,Object.setPrototypeOf(this,new.target.prototype)}},Mt=15e3,Lt=class extends Error{kind;stream;timeoutMs;constructor(e,t){let s=t?.timeoutMs??Mt,n=t?.stream??e,i=n!==e?` "${n}"`:"";super(`[urun] SFU did not ack producer ${e}${i} within ${Math.round(s/1e3)}s \u2014 the server never replied to 'produce'. The runtime's inbound port for this stream is likely unadvertised (a cold or capacity-queued runtime), so the SFU has nothing to forward the track to; the published track never reached the runtime.`),this.name="ProduceAckTimeout",this.kind=e,this.stream=n,this.timeoutMs=s,Object.setPrototypeOf(this,new.target.prototype)}},Ws=class extends Ne{constructor(e){super("[urun] request aborted",{requestId:e}),this.name="RequestAbortError",Object.setPrototypeOf(this,new.target.prototype)}},Hs=class extends Ne{constructor(e){super("[urun] request cancelled: session disconnected",{requestId:e}),this.name="RequestCancelledError",Object.setPrototypeOf(this,new.target.prototype)}};function xa(r,e){let t=e.error?.reason,s=e.elapsedMs!==void 0?Math.round(e.elapsedMs/1e3):void 0;switch(r){case"create-failed":return{message:`[urun] session create failed${e.error?.httpStatus!==void 0?` (HTTP ${e.error.httpStatus})`:""}${t?`: ${t}`:""}`,hint:e.error?.httpStatus===401||e.error?.httpStatus===403?"The backend rejected this client \u2014 sign in again or check the auth token / org access.":"The backend could not create a session \u2014 check the app/function name and auth, then retry."};case"never-live":{let n=s!==void 0?` after ${s}s`:"",i=` (last server status: ${e.lastServerStatus??"none"})`;return e.error?.code==="expired"?{message:`[urun] session${e.sessionId?` ${e.sessionId}`:""} expired before media connected${n} \u2014 the control plane reclaims sessions whose media transport never establishes (~80s after create)`,hint:"Retry to mint a fresh session, and connect promptly after start (a backgrounded tab or paused debugger can miss the window)."}:e.sessionId?{message:`[urun] session ${e.sessionId} was created but never went live${n}${i} \u2014 the backend is busy or wedged (no runtime picked the session up)`,hint:"The backend is at capacity or stuck. Retry in a moment; if it persists, the session id above is what to report."}:{message:`[urun] no session went live${n} (phase=${e.phase}${e.lastServerStatus?`, last server status: ${e.lastServerStatus}`:""})`,hint:"The session never got past admission. Retry; if it persists, check the backend deployment."}}case"transport-failed":return e.error?.code==="transport-consumed"?{message:`[urun] the retry reused a session whose media transport was already connected${e.sessionId?` (id ${e.sessionId})`:""} \u2014 the session was consumed by an earlier attempt`,hint:"Start a fresh session (reload the page) \u2014 this session leg cannot be connected again."}:{message:`[urun] media/transport connection failed${t?`: ${t}`:""} (transport state: ${e.transportState})`,hint:"The network is likely blocking the media connection (WebRTC/WebSocket) \u2014 try a different network or disable VPN/proxy, then retry."};case"media-permission":return{message:`[urun] microphone/camera unavailable${t?`: ${t}`:""}`,hint:e.error?.code==="NotFoundError"||e.error?.code==="OverconstrainedError"?"No matching input device was found \u2014 connect or select a microphone/camera and retry.":"Allow microphone/camera access for this site (browser permission \u2014 or, when embedded, the parent page's permissions policy), then retry."};case"ended":return{message:`[urun] session ended before going live${e.sessionId?` (id ${e.sessionId})`:""}`,hint:"The session was closed (server-side, or superseded by another connection). Start a new session."};case"runtime-failed":return{message:`[urun] session${e.sessionId?` ${e.sessionId}`:""} failed at runtime${t?`: ${t}`:""}`,hint:"The session function crashed on the backend \u2014 check the app logs, then start a new session."};case"produce-timeout":return{message:`[urun] publishing a track timed out${t?`: ${t}`:""} \u2014 the SFU never acked the produce (the runtime\u2019s inbound port for the stream was not advertised in time)`,hint:"The runtime was still cold or the backend was at capacity when the track was published. Retry in a moment; if it persists, the backend never opened the stream to receive it."};case"expired":return{message:`[urun] session${e.sessionId?` ${e.sessionId}`:""} ended \u2014 ${t??"it reached its maximum length"}`,hint:"The session reached its end. Start a new session to continue."}}}var ye=class extends Error{kind;status;hint;constructor(e,t,s){let{message:n,hint:i}=xa(e,t);super(n),this.name="SessionFailedError",this.kind=e,this.status=t,this.hint=i,s?.cause!==void 0&&(this.cause=s.cause),Object.setPrototypeOf(this,new.target.prototype)}};function $p(r,e){if(r instanceof ye)return r;let t=r instanceof Error?r:new Error(String(r)),s={phase:e?.phase??"idle",transportState:e?.transportState??"disconnected",...e,error:{reason:t.message,code:t.name,kind:"media-permission"}};return new ye("media-permission",s,{cause:r})}var ee=class extends Error{httpStatus;constructor(e,t){super(e),this.name="SessionAllocationError",this.httpStatus=t?.httpStatus,t?.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}};function Vs(r){if(!r)return!1;let e=typeof r=="string"?r:r.name;return e==="queued"||e==="unavailable"||e==="provisioning"}var Da=45e3;function Bp(r,e={}){let{timeout:t=Da,signal:s}=e;return new Promise((n,i)=>{if(s?.aborted){i(s.reason instanceof Error?s.reason:new Error("whenLive aborted"));return}if(r.phase?.name==="live"){n();return}let a=r.phase?.name;if(a==="error"||a==="ended"||a==="expired"){let f=r.phase,h=r.status??{phase:f.name,transportState:"disconnected",sessionId:f.sessionId,requestId:f.requestId,queue:f.queue,error:f.error};i(new ye(a==="ended"?"ended":a==="expired"?"expired":f.error?.kind??"transport-failed",h));return}let o,c,p=!1,d=f=>{p||(p=!0,c!==void 0&&clearTimeout(c),s?.removeEventListener("abort",l),o?.(),f?i(f):n())},l=()=>{d(s?.reason instanceof Error?s.reason:new Error("whenLive aborted"))};s?.addEventListener("abort",l,{once:!0});let u=()=>{let f=r.phase;return r.status??{phase:f?.name??"idle",transportState:"disconnected",sessionId:f?.sessionId,requestId:f?.requestId,queue:f?.queue,error:f?.error}},m=f=>d(new ye(f,u()));t>0&&(c=setTimeout(()=>{let f=u();f.elapsedMs===void 0&&(f.elapsedMs=t),d(new ye("never-live",f))},t)),o=r.onPhase(f=>{f?.name==="live"?d():f?.name==="error"?m(f.error?.kind??"transport-failed"):f?.name==="ended"?m("ended"):f?.name==="expired"&&m("expired")}),p&&o()})}function Wp(r){switch(r.name){case"idle":return"Initializing\u2026";case"unavailable":return"Starting the app\u2026";case"queued":return r.queue?`Waiting in queue (position ${r.queue.position} of ${r.queue.depth})\u2026`:r.runtime?.state==="busy"?"All runtimes are busy \u2014 waiting for capacity\u2026":"Waiting for capacity\u2026";case"provisioning":return r.runtime?.state==="starting"?"Starting model\u2026":"Provisioning\u2026";case"connecting":return"Connecting\u2026";case"live":return"Live";case"error":return r.error?.reason?`Session failed \u2014 ${r.error.reason}`:"Session failed";case"ended":return"Session ended";case"expired":return"Session ended \u2014 reached its maximum length. Start a new session."}}var Ia=500,La=15e3,ct=6;function Er(r,e=Math.random){if(!Number.isFinite(r)||r<0)throw new Error(`[urun] computeBackoffDelay: attempt must be a non-negative number, got ${r}`);let t=Math.min(La,Ia*2**r);return Math.round(e()*t)}function kr(r){if(r instanceof ee){let e=r.httpStatus;return e===408||e===429||e!==void 0&&e>=500}return r instanceof Error?r.name==="TypeError"||r.name==="TimeoutError"||r.name==="AbortError":!1}var Gs=10,Ma=.5,Ot=Gs;function Pr(){return Ot<1?!1:(Ot-=1,!0)}function xr(){Ot=Math.min(Gs,Ot+Ma)}var Oa="session-api.prod.cloud.urun.sh",Aa=["https://session-api.use2.prod.cloud.urun.sh","https://session-api.usw2.prod.cloud.urun.sh"];function le(r){return r.trim().replace(/\/+$/,"")}function Xs(r,e){let t=[],s=n=>{if(!n)return;let i=le(n);i&&!t.includes(i)&&t.push(i)};s(r);for(let n of e??[])s(n);for(let n of Xa(r))s(n);return t}function Qp(r){try{if(typeof fetch!="function")return;let e=`${le(r.baseUrl)}/api/session-requests/${encodeURIComponent(r.requestId)}/release`;fetch(e,{method:"POST",headers:be(r,r.jwt),keepalive:!0}).catch(()=>{})}catch{}}async function Jp(r){try{let e=`${le(r.baseUrl)}/api/session-requests/${encodeURIComponent(r.requestId)}/release`,t=await Se(r);if(r.getAccessToken&&!t)throw new we("[urun] session release refused: getAccessToken resolved no token (an unauthenticated release is never sent)",{requestId:r.requestId,code:"no_access_token"});let s=await fetch(e,{method:"POST",headers:be(r,t)});if((s.status===401||s.status===403)&&r.getAccessToken){let o=await Se(r,{forceRefresh:!0,reason:"unauthorized"});o&&o!==t&&(s=await fetch(e,{method:"POST",headers:be(r,o)}))}let n=await At(s);if(!s.ok)throw new we(n.error_message||n.error_code||`[urun] session release failed: HTTP ${s.status}`,{requestId:r.requestId,code:n.error_code,httpStatus:s.status});let i=String(n.status??"");if(i!=="closed"&&i!=="cancelled"&&i!=="canceled")throw new we("[urun] session release returned an unrecognized terminal status",{requestId:r.requestId,code:"invalid_release_response",httpStatus:s.status});return{status:i==="closed"?"ended":"canceled",requestId:r.requestId}}catch(e){throw e instanceof we?e:new we("[urun] session release request failed",{requestId:r.requestId,cause:e})}}function Zs(r){if(typeof r!="string"||r.length===0)return null;let e=new Date(r);return Number.isFinite(e.getTime())?e:null}var Na=120,ja=1e3,Fa=20,qa=5,$a=500,en=1e4,Ua=3,za=50,Ks=1e4;async function Ys(r,e){let t=Date.now()+Ks;for(;;){await Nt(za);let s=await Se(r);if(s)return s;if(Date.now()>=t)throw new ee(`[urun] session allocation at ${e} never got an access token: the wired getAccessToken resolved nothing within ${Math.round(Ks/1e3)}s (no unauthenticated request was sent)`)}}function Ba(r,e){if(!r)return null;try{let t=new URL(r),s=e?new URL(le(e)):null,n=t.pathname==="/api/sessions/create"||t.pathname==="/api/sessions/create/";return t.protocol!=="https:"||!n||!Wa(t,s)?null:le(t.origin)}catch{return null}}function Wa(r,e){return Qs(r.hostname)&&(!e||Qs(e.hostname))}function Qs(r){let e=r.toLowerCase();return e==="urun.sh"||e.endsWith(".urun.sh")}async function Xp(r){let e=Xs(r.baseUrl,r.fallbackUrls),t=null,s=e.length>1;for(let n=0;n<ct;n++){for(let i of e)try{let a=await Ha(i,r,{pollAttempts:Na,retryAfterLimitMs:s?ja:void 0});return xr(),a}catch(a){if(t=a instanceof Error?a:new Error(String(a)),t instanceof pe)throw t}if(!kr(t))break;if(n+1<ct){if(!Pr())break;await Nt(Er(n))}}throw t??new Error("[urun] session allocation failed")}async function Ha(r,e,t){let s,n,i,a=r,o=0,c=new Set,p=Date.now()+t.pollAttempts*en;for(let d=0;d<t.pollAttempts;d++){n=i??await Se(e),i=void 0,e.getAccessToken&&!n&&(n=await Ys(e,a));let l=Math.max(1,Math.min(Fa,Math.floor((p-Date.now())/1e3))),u=!!s,m=Date.now(),f=s?await fetch(`${a}/api/session-requests/${encodeURIComponent(s)}?wait_s=${l}`,{headers:be(e,n),signal:Ya((l+qa)*1e3)}):await fetch(`${a}/api/sessions/create`,{method:"POST",redirect:"manual",headers:{...be(e,n),"Content-Type":"application/json","Idempotency-Key":e.idempotencyKey},body:JSON.stringify(Va(e))});if(!s&&(f.status===307||f.status===308)){let b=Ba(f.headers.get("location"),a);if(b&&b!==a&&o<Ua){o+=1,a=b;continue}throw new ee(`[urun] session create redirected from ${a} without a usable target`,{httpStatus:f.status})}let h=await At(f);if(h.request_id)try{e.onRequest?.({requestId:h.request_id,baseUrl:a})}catch{}if(f.ok&&(h.status==="allocated"||!h.status&&!!h.session_id)&&!!h.session_id){let b=h.session_id,P=tn(h.ws_url,a,b,"gateway allocated session");return{baseUrl:a,sessionId:b,wsUrl:P,endsAt:Zs(h.ends_at),response:h}}if(f.status===202||h.status==="pending"||h.status==="queued"||h.queued){if(s=h.request_id||s,!s)throw new Error("[urun] gateway queued session without request_id");if(e.onAdmission)try{e.onAdmission(Ga(h,s))}catch{}let b=Date.now()-m<$a;u&&b&&await Nt(Ka(f,h,t.retryAfterLimitMs));continue}if((f.status===401||f.status===403)&&e.getAccessToken){let b=n??"";c.add(b);let P=await Se(e,{forceRefresh:!0,reason:"unauthorized"});if(P&&!c.has(P)){i=P;continue}if(P===void 0){let x=await Ys(e,a);if(!c.has(x)){i=x;continue}}}let v=h.error_message||h.error_code||`HTTP ${f.status}`;throw new ee(`[urun] session allocation failed at ${a}: ${v}`,{httpStatus:f.status})}throw new ee(`[urun] timed out waiting for session allocation at ${a}`)}function be(r,e){let t={"X-Tenant-Id":r.orgId,"X-Auth-Provider":r.authProvider||"default","X-User-Id":"anonymous"};return e&&(t.Authorization=`Bearer ${e}`),t}async function Se(r,e){return r.getAccessToken?await r.getAccessToken(e)??void 0:r.jwt}function Va(r){let e=r.priority==="preempt";return{app:r.app,function:r.functionName,gpus:1,idempotency_key:r.idempotencyKey,...r.sessionKey&&!e?{logical_id:r.sessionKey}:{},...e?{priority:"preempt"}:{}}}async function Zp(r){let e=Xs(r.baseUrl,r.fallbackUrls),t=null;for(let s=0;s<ct;s++){for(let n of e)try{let i={baseUrl:n,app:"",functionName:"",orgId:r.orgId,jwt:r.jwt,getAccessToken:r.getAccessToken,authProvider:r.authProvider,idempotencyKey:""},a=`${le(n)}/api/sessions/${encodeURIComponent(r.sessionId)}/viewer-connect`,o=await Se(i);if(r.getAccessToken&&!o)throw new ee(`[urun] viewer-connect for ${r.sessionId} refused: getAccessToken resolved no token (an unauthenticated viewer-connect is never sent)`);let c=await fetch(a,{headers:be(i,o)});if((c.status===401||c.status===403)&&r.getAccessToken){let l=await Se(i,{forceRefresh:!0,reason:"unauthorized"});l&&l!==o&&(c=await fetch(a,{headers:be(i,l)}))}if(!c.ok)throw new ee(`[urun] viewer-connect for ${r.sessionId} failed: HTTP ${c.status}`,{httpStatus:c.status});let p=await At(c),d=tn(p.ws_url,n,r.sessionId,"viewer-connect");return xr(),{baseUrl:le(n),sessionId:r.sessionId,wsUrl:d,endsAt:Zs(p.ends_at),response:p}}catch(i){if(t=i instanceof Error?i:new Error(String(i)),t instanceof pe)throw t}if(!kr(t))break;if(s+1<ct){if(!Pr())break;await Nt(Er(s))}}throw t??new Error("[urun] viewer-connect failed")}async function el(r){try{let e=le(r.baseUrl),t=await Se(r);if(r.getAccessToken&&!t)return{status:"unavailable"};let s=await fetch(`${e}/api/sessions/prewake`,{method:"POST",headers:{...be(r,t),"Content-Type":"application/json"},body:JSON.stringify({app:r.app,function:r.functionName})});if(s.status===404)return{status:"unknown-app"};if(!s.ok)return{status:"unavailable"};let n=await At(s),i={status:n.status==="prebound"?"prebound":"warming"};return typeof n.expires_at=="string"&&(i.expiresAt=n.expires_at),typeof n.warm_capable=="boolean"&&(i.warmCapable=n.warm_capable),i}catch(e){return console.debug?.("[urun] prewake failed (advisory, ignored):",e),{status:"unavailable"}}}async function At(r){try{let e=await r.json();return e&&typeof e=="object"?e:{}}catch{return{}}}function Ga(r,e){let t={status:r.status==="queued"||r.queued?"queued":"pending",requestId:e};typeof r.queue_position=="number"&&typeof r.queue_depth=="number"&&(t.queue={position:r.queue_position,depth:r.queue_depth});let s=r.runtime_state;return(s==="unavailable"||s==="starting"||s==="busy")&&(t.runtime={state:s},typeof r.runtime_reason=="string"&&r.runtime_reason.length>0&&(t.runtime.reason=r.runtime_reason)),t}function Ka(r,e,t){let s=Number(r.headers.get("Retry-After")||""),n=Number(e.retry_after_seconds??s),i=t??en;return Number.isFinite(n)&&n>0?Math.min(n*1e3,i):1e3}function Nt(r){return new Promise(e=>setTimeout(e,r))}function Ya(r){let e=typeof AbortSignal<"u"?AbortSignal:void 0;return typeof e?.timeout=="function"?e.timeout(r):void 0}var pe=class extends Error{};function tn(r,e,t,s){if(!r)throw new pe(`[urun] ${s} ${t} without ws_url`);let n,i;try{n=new URL(r)}catch{throw new pe(s==="viewer-connect"?`[urun] viewer-connect returned no usable ws_url for ${t}`:`[urun] ${s} ${t} with non-absolute ws_url`)}try{i=new URL(le(e))}catch{throw new pe(`[urun] ${s} ${t} has invalid gateway base URL`)}let a=Qa(i.hostname)&&i.protocol==="http:";if(!(a&&n.protocol==="ws:"||n.protocol==="wss:"))throw new pe(`[urun] ${s} ${t} with insecure ws_url`);if(!Ja(n,i,a))throw new pe(`[urun] ${s} ${t} with cross-origin ws_url`);return n.toString()}function Qa(r){return r==="localhost"||r==="127.0.0.1"||r==="::1"||r.endsWith(".localhost")}function Ja(r,e,t){return!!(t||r.hostname===e.hostname&&r.port===e.port||Js(r.hostname)&&Js(e.hostname))}function Js(r){return r==="urun.sh"||r.endsWith(".urun.sh")}function Xa(r){try{return new URL(r).hostname!==Oa?[]:Aa}catch{return[]}}function Ft(){return typeof window>"u"&&typeof process<"u"&&process.versions!=null&&process.versions.node!=null}function sn(){return Ft()?"Chrome111":void 0}var Za=["RTCSessionDescription","RTCIceCandidate","RTCRtpReceiver","RTCRtpSender","RTCRtpTransceiver","RTCDataChannel","MediaStream","MediaStreamTrack"],jt=null;function nn(){return Ft()?jt||(jt=eo(),jt):Promise.resolve()}async function eo(){let r=globalThis;if(typeof r.WebSocket>"u")try{let e=await import("ws"),t=e.default??e;r.WebSocket=t}catch(e){rn("WebSocket",e)}if(typeof r.RTCPeerConnection>"u")try{let e=await import("werift");to(r,e)}catch(e){rn("werift",e)}}function to(r,e){let{RTCPeerConnection:t,useH264:s,useVP8:n,useOPUS:i,useSdesMid:a,useSdesRTPStreamId:o,useAbsSendTime:c,useTransportWideCC:p,useVideoOrientation:d}=e,l=()=>({video:[s(),n()],audio:[i()]}),u=()=>({video:[a(),o(),c(),p(),d()],audio:[a(),c(),p()]});class m extends t{constructor(h){super({...h,codecs:h?.codecs??l(),headerExtensions:h?.headerExtensions??u()})}}r.RTCPeerConnection=m;for(let f of Za)e[f]!=null&&typeof r[f]>"u"&&(r[f]=e[f])}function rn(r,e){let t=e instanceof Error?e.message:String(e);console.warn(`[urun-sh/core] Node WebRTC support: optional dependency "${r}" unavailable (${t}). Realtime media will not work in this Node process; install "${r}" to enable it. Doc/KV transport over WebSocket is unaffected.`)}function on(r){return`stream:${r}`}var cn="urun-stream-v1";var Dr=1,ue={BINARY:0,TEXT:1,JSON:2,END:3},dn=Symbol("urun:stream:end");function pn(r){if(r===dn)return Uint8Array.from([Dr,ue.END]);let e,t;r instanceof Uint8Array?(e=ue.BINARY,t=r):r instanceof ArrayBuffer?(e=ue.BINARY,t=new Uint8Array(r)):typeof r=="string"?(e=ue.TEXT,t=new TextEncoder().encode(r)):(e=ue.JSON,t=new TextEncoder().encode(JSON.stringify(r)));let s=new Uint8Array(2+t.length);return s[0]=Dr,s[1]=e,s.set(t,2),s}function ln(r){let e=r instanceof Uint8Array?r:new Uint8Array(r);if(e.length<2||e[0]!==Dr)throw new Error(`[urun] bad stream envelope (version=${e[0]}, len=${e.length})`);let t=e[1],s=e.subarray(2);switch(t){case ue.BINARY:return s.slice();case ue.TEXT:return new TextDecoder().decode(s);case ue.JSON:return JSON.parse(new TextDecoder().decode(s));case ue.END:return dn;default:throw new Error(`[urun] unknown stream envelope KIND 0x${t.toString(16)}`)}}var an=class{consumerId;_handlers=new Map;constructor(e="loopback"){this.consumerId=e}onData(e,t){let s=this._handlers.get(e);return s||(s=new Set,this._handlers.set(e,s)),s.add(t),()=>s.delete(t)}sendData(e,t,s={}){s.to&&(s.to,this.consumerId);for(let n of this._handlers.get(e)??[])n(t);return Promise.resolve()}};function sl(r){return{get consumerId(){return r.consumerId},onData(e,t){return r.onStreamData(e,t)},sendData(e,t,s){return r.sendStreamData(e,t,s)}}}var fa=Fs(os());var xs=Fs(Zi(),1);var ea="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";function lp(r){let e=globalThis.crypto,t=new Uint8Array(r);if(e?.getRandomValues)return e.getRandomValues(t),t;for(let s=0;s<r;s++)t[s]=Math.floor(Math.random()*256);return t}function ta(r=16){let e=lp(r),t="";for(let s=0;s<r;s++)t+=ea[e[s]%ea.length];return t}var ra=[1e3,2e3,4e3,8e3,3e4],sa=5,up=15e3,na=15e3,ia=15e3,hp=2e3,fp=6e3,mp=2,gp=750,_p=3,aa=[1e3,2e3,4e3],vp=15e3;function pu(r){return`stream:${r}`}var Ds="--",wp=["video","audio"];function yp(r){let e=r.lastIndexOf(Ds);if(e<=0)return;let t=r.slice(e+Ds.length);return wp.includes(t)?t:void 0}function lu(r,e){return`${r}${Ds}${e}`}var bp={queued:"queued",pending:"provisioning",allocating:"provisioning",provisioning:"provisioning",allocated:"connecting",connecting:"connecting",live:"live",running:"live",error:"error",failed:"error",rejected:"error",expired:"expired",cancelled:"ended",canceled:"ended",closed:"ended"};function at(r){return r==="error"||r==="ended"||r==="expired"}var oa=3,ca=4e3,da=[{urls:"stun:stun.l.google.com:19302"},{urls:"stun:stun1.l.google.com:19302"}],pa=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=Et();_decodeWindowStartSample=Et();_selectedCandidatePair=ma();_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=Sp()),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?.readyState===WebSocket.OPEN}get connectedUrl(){return this._connectedUrl}getTrackByName(e){if(yp(e)!==void 0)return;let t=this._tracksByName.get(e);if(t&&t.readyState!=="ended")return t;for(let s of this._tracks.values())if(!(s.kind!==e||s.readyState==="ended")&&this._streamNameOf(s)===void 0)return s;return t}_streamNameOf(e){for(let[t,s]of this._tracksByName)if(s===e)return t}setAuth(e){this._options={...this._options,...e},this.isOpen&&this._send({type:"auth",orgId:this._options.orgId,jwt:this._options.jwt,authProvider:this._options.authProvider})}constructor(e){this._options=e??{url:""},e?.sessionId&&(this._sessionId=e.sessionId)}setConnection(e){if(this.isOpen)throw new Error("TransportSession: cannot change connection while connected");this._options={...this._options,...e},e.sessionId&&(this._sessionId=e.sessionId)}setConnectionResolver(e){this._resolveConnection=e}applyControlDocState(e){let t=e&&typeof e=="object"?e.session:void 0,s=kp(t);if(s!==void 0&&this.setIncarnation(s),!t||typeof t!="object")return;let n=t,i=typeof n.status=="string"?n.status:void 0;if(i&&!at(this._phase.name)&&!this.isStaleClosedMarker(n))if(i==="error"){let a=n.error_reason??n.errorReason,o=typeof a=="string"&&a?a:"session failed";this._setPhase("error",{error:{reason:o,code:"runtime-failed",kind:"runtime-failed"}})}else(i==="closed"||i==="ended")&&(this._pastDeadline()?this._setPhase("expired",{error:{reason:"session reached its maximum length",code:i,kind:"expired"}}):this._setPhase("ended"))}setIncarnation(e){if(!Number.isFinite(e)||e<=this._currentEpoch)return;let t=this._currentEpoch>0,s=this._state==="connected";this._currentEpoch=e,t&&s&&!this._intentionalDisconnect&&this._renegotiate()}isStaleIncarnation(e){return Number.isFinite(e)?e<this._currentEpoch:!1}isStaleClosedMarker(e){if(!e)return!1;let t=typeof e.status=="string"?e.status:void 0;if(t!=="closed"&&t!=="ended"&&t!=="error")return!1;let s=e.status_epoch??e.statusEpoch,n=typeof s=="number"?s:Number(s);return Number.isFinite(n)?n<this._currentEpoch:!1}async connect(e){this._lastStartOptions=e,this._intentionalDisconnect=!1,at(this._phase.name)&&(this._phase={name:"idle"}),this._connectStartedAt??=Date.now(),this._cancelPendingDial?.(new Error("TransportSession: connect superseded by a newer connect()"));let t=++this._generation,s=this._state==="reconnecting"||this._state==="renegotiating";s||this._setState("connecting");let n=null,i=()=>t!==this._generation||this._intentionalDisconnect,a=()=>{if(i())throw new Error("TransportSession: connect cancelled")},o=async()=>{for(let l of this._connectUrls()){a();try{return await this._connectOnce(l,t,e),!0}catch(u){n=u instanceof Error?u:new Error(String(u)),i()||this._cleanupSocket()}}return!1},c=this._forceResolveOnNextConnect&&this._resolveConnection!==null;this._forceResolveOnNextConnect=!1;let p=c?0:this._resolveConnection?mp:1;for(let l=0;l<p;l++)if(l>0&&(await la(gp),a()),await o())return;if(this._resolveConnection)for(let l=0;l<_p;l++){this._setState("reconnecting"),await la(aa[Math.min(l,aa.length-1)]),a();try{let u=await this._resolveConnection();a(),this.setAuth({jwt:u.jwt??this._options.jwt,authProvider:this._options.authProvider,orgId:this._options.orgId}),this.setConnection({url:u.url,sessionId:u.sessionId,iceServers:u.iceServers??this._options.iceServers}),u.endsAt!==void 0&&(this._endsAt=u.endsAt)}catch(u){if(i())throw new Error("TransportSession: connect cancelled");n=u instanceof Error?u:new Error(String(u));continue}if(await o())return}if(i())throw n??new Error("TransportSession: connect cancelled");this._setState("failed");let d=n??new Error("TransportSession: connect failed");throw s||this._emitError(d),d}disconnect(){this._generation+=1,this._intentionalDisconnect=!0,this._cancelPendingDial?.(new Error("TransportSession: connect cancelled by disconnect()")),this._stopMediaMonitor(),this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null),this._clearReconnectBudgetReset(),this._reconnectAttempts=0;try{this._publishedAudio?.track.stop()}catch{}try{this._publishedVideo?.track.stop()}catch{}if(this._publishedAudio=null,this._publishedVideo=null,this._audioProducer){this._send({type:"stopAudio"});try{this._audioProducer.track?.stop()}catch{}try{this._audioProducer.close()}catch{}this._audioProducer=null}if(this._videoProducer){this._send({type:"stopVideo"});try{this._videoProducer.track?.stop()}catch{}try{this._videoProducer.close()}catch{}this._videoProducer=null}for(let e of this._consumers.values())try{e.close()}catch{}if(this._consumers.clear(),this._cleanupDataChannels(),this._settleSendTransportWaiters(null,new Error("[urun] sendStreamData: transport disconnected before the send transport arrived")),this._sendTransport){try{this._sendTransport.close()}catch{}this._sendTransport=null}if(this._recvTransport){try{this._recvTransport.close()}catch{}this._recvTransport=null}this._pendingProduce&&(clearTimeout(this._pendingProduce.timeoutId),this._pendingProduce.reject(new Error("TransportSession: disconnected")),this._pendingProduce=null),this._device=null,this._multiplexer&&(this._multiplexer.dispose(),this._multiplexer=null),this._cleanupSocket(),this._tracks.clear(),this._tracksByName.clear(),this._setState("disconnected"),this._liveReached=!1,this._setPhase("ended"),this._emitter.emit("disconnected")}on(e,t){return this._emitter.on(e,t),()=>{this._emitter.off(e,t)}}_emitDiagnostic(e){console.warn(`[urun] ${e.message}`,e.detail??{}),this._emitter.emit("diagnostic",e)}sendInput(e,t){this._send({type:"input",data:e,sequence:t})}sendSignal(e){this._send(e)}onSignal(e){return this.on("signal",e)}onStreamData(e,t){let s=this._streamDataHandlers.get(e);return s||(s=new Set,this._streamDataHandlers.set(e,s)),s.add(t),()=>{let n=this._streamDataHandlers.get(e);n?.delete(t),n&&n.size===0&&this._streamDataHandlers.delete(e)}}sendStreamData(e,t,s){return this._ensureDataProducer(e).then(n=>{n.send(pn(t))})}_awaitSendTransport(){return this._sendTransport?Promise.resolve(this._sendTransport):new Promise((e,t)=>{let s={resolve:i=>{clearTimeout(n),e(i)},reject:i=>{clearTimeout(n),t(i)}},n=setTimeout(()=>{let i=this._sendTransportWaiters.indexOf(s);i>=0&&this._sendTransportWaiters.splice(i,1),t(new Error(`[urun] sendStreamData: no send transport after ${na}ms (the server never offered createSendTransport \u2014 data-up produce is impossible on this leg)`))},na);this._sendTransportWaiters.push(s)})}_settleSendTransportWaiters(e,t){let s=this._sendTransportWaiters;this._sendTransportWaiters=[];for(let n of s)e?n.resolve(e):n.reject(t??new Error("TransportSession: disconnected"))}_ensureDataProducer(e){let t=this._dataProducers.get(e);if(t&&!t.closed)return Promise.resolve(t);let s=this._dataProducerPromises.get(e);if(s)return s;let n=this._awaitSendTransport().then(i=>i.produceData({label:on(e),protocol:cn,ordered:!0})).then(i=>this._awaitDataChannelOpen(i)).then(i=>(this._dataProducers.set(e,i),this._dataProducerPromises.delete(e),i)).catch(i=>{throw this._dataProducerPromises.delete(e),i});return this._dataProducerPromises.set(e,n),n}_awaitDataChannelOpen(e){if(e.closed)return Promise.reject(new Error("[urun] sendStreamData: DataProducer closed before its DataChannel opened"));let t=e.readyState;return t==="open"?Promise.resolve(e):t==="closing"||t==="closed"?Promise.reject(new Error(`[urun] sendStreamData: DataChannel is ${t} \u2014 cannot deliver data-up payloads`)):new Promise((s,n)=>{let i=()=>{p(),s(e)},a=l=>{d(new Error(`[urun] sendStreamData: DataChannel error before open: ${l.message}`))},o=()=>{p(),n(new Error("[urun] sendStreamData: DataProducer closed before its DataChannel opened"))},c=setTimeout(()=>{d(new Error(`[urun] sendStreamData: DataChannel not open after ${ia}ms (the SCTP handshake never completed \u2014 data-up produce is impossible on this channel)`))},ia),p=()=>{clearTimeout(c),e.off("open",i),e.off("error",a),e.observer.off("close",o)},d=l=>{p();try{e.close()}catch{}n(l)};e.on("open",i),e.on("error",a),e.observer.on("close",o)})}_dispatchStreamData(e,t){for(let s of this._streamDataHandlers.get(e)??[])s(t)}_streamNameFromLabel(e){if(e)return e.startsWith("stream:")?e.slice(7):void 0}async addTrack(e,t){await this._publishTrack(e,t)}async _publishTrack(e,t){let s=e.kind==="video",n=s?this._videoProducer:this._audioProducer;if(n&&!n.closed){if(n.track===e)return;await n.replaceTrack({track:e}),this._rememberPublishIntent(s,e,t);return}if(!this._sendTransport)throw new Error("TransportSession: send transport not ready");let i=await this._sendTransport.produce({track:e,...s?{}:{codecOptions:{opusStereo:!1,opusDtx:!1,opusFec:!1}},stopTracks:!1,...t?{appData:{name:t}}:{}});s?this._videoProducer=i:this._audioProducer=i,this._rememberPublishIntent(s,e,t)}_rememberPublishIntent(e,t,s){let n={track:t,...s!==void 0?{name:s}:{}};e?this._publishedVideo=n:this._publishedAudio=n}removeTrack(){if(this._publishedAudio=null,this._audioProducer){this._send({type:"stopAudio"});try{this._audioProducer.track?.stop()}catch{}this._audioProducer.close(),this._audioProducer=null}}async addVideoTrack(e,t){await this._publishTrack(e,t)}stopVideo(){if(this._publishedVideo=null,this._videoProducer){this._send({type:"stopVideo"});try{this._videoProducer.track?.stop()}catch{}this._videoProducer.close(),this._videoProducer=null}}requestDiagnostics(){this._send({type:"diagnostics"})}seekStream(e,t){this._send({type:"stream.seek",stream:e,target:t})}async _handleMessage(e){switch(e.type){case"routerRtpCapabilities":await this._onRouterCapabilities(e.rtpCapabilities);break;case"createWebRtcTransport":await this._onCreateRecvTransport(e);break;case"createSendTransport":await this._onCreateSendTransport(e);break;case"consume":await this._onConsume(e);break;case"consumerClosed":this._closeConsumer(e.consumerId);break;case"producerClosed":this._closeConsumersByProducer(e.producerId);break;case"consumerPaused":this._consumers.get(e.consumerId)?.pause();break;case"consumerResumed":this._consumers.get(e.consumerId)?.resume();break;case"iceRestarted":this._onIceRestarted(e);break;case"produced":if(this._pendingProduce){let t=this._pendingProduce;this._pendingProduce=null,clearTimeout(t.timeoutId),t.resolve(e.id)}break;case"dataProduced":{let t=e.label,s=t?this._pendingDataProduce.get(t):void 0;s&&t&&(this._pendingDataProduce.delete(t),s.resolve(e.id));break}case"consumeData":await this._onConsumeData(e);break;case"started":this._emitter.emit("started");break;case"status":this._onStatus(e);break;case"stream.seeked":this._onStreamSeeked(e);break;case"error":this._onServerError(e);break;default:this._emitter.emit("signal",e);break}}_onServerError(e){let t=typeof e.message=="string"?e.message:"signaling error",s=typeof e.code=="string"?e.code:void 0;if(/connect\(\) already called/i.test(t)){if(this._resolveConnection){this._generation++;let n=this._ws;this._ws=null;try{n?.close()}catch{}this._cleanupMedia(),this._forceResolveOnNextConnect=!0,this._renegotiate();return}this._setPhase("error",{error:{reason:t,code:"transport-consumed",kind:"transport-failed"}}),this._emitter.emit("error",new Error(t));return}if(s==="TRANSPORT_BIND_FAILED"){this._emitError(new Error(t),s);return}console.warn("[urun] signaling error from server:",t)}_onStreamSeeked(e){let t=typeof e.stream=="string"?e.stream:void 0;if(!t)return;let s=e.target,n=s==="live"?"live":typeof s=="number"?s:Number(s);this._emitter.emit("seeked",t,n)}_onStatus(e){let t=e.request_id??e.requestId;t&&(this._requestId=t);let s=typeof e.status=="string"?e.status:void 0,n=(s?bp[s]:void 0)??"provisioning",i=at(n);if(this._liveReached&&!i||at(this._phase.name))return;s!==void 0&&(this._lastServerStatus=s);let a=e.queue_position??e.queuePosition,o=e.queue_depth??e.queueDepth,c=typeof a=="number"&&typeof o=="number";if(n==="expired"){let p=typeof e.reason=="string"&&e.reason?e.reason:this._endsAt!==null?"session reached its maximum length":"session expired";this._setPhase("expired",{error:{reason:p,code:s,kind:"expired"}});return}if(n==="error"){let p=typeof e.reason=="string"&&e.reason?e.reason:s??"admission failed";this._setPhase("error",{error:{reason:p,code:s,kind:s==="error"?"runtime-failed":"create-failed"}});return}if(n==="ended"){this._pastDeadline()?this._setPhase("expired",{error:{reason:"session reached its maximum length",code:s,kind:"expired"}}):this._setPhase("ended");return}if(n==="queued"){this._setPhase("queued",c?{queue:{position:a,depth:o}}:void 0);return}if(n==="connecting"){this._setPhase("connecting");return}this._setPhase("provisioning")}async _onRouterCapabilities(e){Ft()&&await nn();let t=sn(),s=new fa.Device(t?{handlerName:t}:void 0);await s.load({routerRtpCapabilities:e}),this._device=s,this._send({type:"rtpCapabilities",rtpCapabilities:s.rtpCapabilities})}async _onCreateRecvTransport(e){this._device&&this._buildRecvTransport(e)}_buildRecvTransport(e){if(!this._device)return;let t=e.iceCandidates,s=this._device.createRecvTransport({id:e.id,iceParameters:e.iceParameters,iceCandidates:t,dtlsParameters:e.dtlsParameters,...e.sctpParameters?{sctpParameters:e.sctpParameters}:{},iceServers:this._options.iceServers??da});this._recvIceRestartAttempts=0,this._clearRecvIceRestart();let n=this._generation;s.on("connect",({dtlsParameters:i},a,o)=>{try{this._send({type:"connectTransport",transportId:s.id,dtlsParameters:i}),a()}catch(c){o(c)}}),s.on("connectionstatechange",i=>{if(n===this._generation){if(i==="connected"){this._clearRecvIceRestart(),this._recvIceRestartAttempts=0,this._reportSelectedCandidatePair(s);return}if(!(this._intentionalDisconnect&&i==="closed")&&(i==="failed"||i==="disconnected")){if(this._tryRestartRecvIce())return;i==="failed"&&this._emitError(new Error(`media transport ${i}`),i)}}}),this._recvTransport=s}async _reportSelectedCandidatePair(e){let t=null;if(typeof e.getStats=="function")try{t=await e.getStats()}catch{}this._recvTransport===e&&(this._selectedCandidatePair=Tp(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>=oa?!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>=oa?!1:(this._sendIceRestartAttempts++,this._armSendIceRestartWatchdog(),this._requestIceRestart(e.id),!0)}_requestIceRestart(e){this._send({type:"restartIce",transportId:e})}_onIceRestarted(e){let t=e.transportId??e.id,s=e.iceParameters;if(!s)return;let n=!!this._recvTransport&&this._recvTransport.id===t,i=!n&&!!this._sendTransport&&this._sendTransport.id===t,a=n?this._recvTransport:i?this._sendTransport:null;a&&(Promise.resolve(a.restartIce({iceParameters:s})).catch(o=>{this._emitter.emit("error",o instanceof Error?o:new Error(String(o)))}),n&&this._recvIceRestartTimer?this._armRecvIceRestartWatchdog():i&&this._sendIceRestartTimer&&this._armSendIceRestartWatchdog())}_armRecvIceRestartWatchdog(){this._clearRecvIceRestart();let e=this._generation;this._recvIceRestartTimer=setTimeout(()=>{this._recvIceRestartTimer=null,!(e!==this._generation||this._intentionalDisconnect)&&this._recvTransport?.connectionState!=="connected"&&this._emitError(new Error("media transport failed (ice restart timeout)"),"failed")},ca)}_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")},ca)}_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??da});this._sendIceRestartAttempts=0,this._clearSendIceRestart();let s=this._generation;t.on("connect",({dtlsParameters:n},i,a)=>{try{this._send({type:"connectSendTransport",transportId:t.id,dtlsParameters:n}),i()}catch(o){a(o)}}),t.on("produce",({kind:n,rtpParameters:i,appData:a},o,c)=>{if(this._pendingProduce){c(new Error("produce already pending"));return}let p=a&&typeof a.name=="string"?a.name:void 0,d=setTimeout(()=>{let l=this._pendingProduce;if(!l||l.timeoutId!==d)return;this._pendingProduce=null;let u=new Lt(n,{stream:p,timeoutMs:Mt});this._setPhase("error",{error:{reason:u.message,code:"produce-ack-timeout",kind:"produce-timeout"}}),this._emitter.emit("error",u),l.reject(u)},Mt);this._pendingProduce={timeoutId:d,resolve:l=>{o({id:l})},reject:c};try{this._send(p?{type:"produce",kind:n,name:p,rtpParameters:i}:{type:"produce",kind:n,rtpParameters:i})}catch(l){this._pendingProduce?.timeoutId===d&&(this._pendingProduce=null,clearTimeout(d)),c(l)}}),t.on("producedata",({sctpStreamParameters:n,label:i,protocol:a},o,c)=>{try{i&&this._pendingDataProduce.set(i,{resolve:p=>o({id:p}),reject:c}),this._send({type:"produceData",sctpStreamParameters:n,label:i,protocol:a})}catch(p){i&&this._pendingDataProduce.delete(i),c(p)}}),t.on("connectionstatechange",n=>{if(s===this._generation){if(n==="connected"){this._clearSendIceRestart(),this._sendIceRestartAttempts=0;return}this._intentionalDisconnect&&n==="closed"||(n==="failed"||n==="disconnected")&&this._trySendIceRestart()||(n==="failed"||n==="closed")&&this._emitError(new Error(`media send transport ${n}`),n)}}),this._sendTransport=t,this._settleSendTransportWaiters(t),this._emitter.emit("audioTransportReady"),this._republishPublishedTracks()}async _republishPublishedTracks(){let e=this._publishedAudio;if(e&&e.track.readyState!=="ended"&&(!this._audioProducer||this._audioProducer.closed))try{await this.addTrack(e.track,e.name)}catch(s){console.warn("[urun] republish: mic re-produce after reconnect failed",s)}else e&&e.track.readyState==="ended"&&console.warn("[urun] republish: published mic track is ended \u2014 not republishing (device re-acquisition is the app/page-recovery pass)");let t=this._publishedVideo;if(t&&t.track.readyState!=="ended"&&(!this._videoProducer||this._videoProducer.closed))try{await this.addVideoTrack(t.track,t.name)}catch(s){console.warn("[urun] republish: camera re-produce after reconnect failed",s)}else t&&t.track.readyState==="ended"&&console.warn("[urun] republish: published camera track is ended \u2014 not republishing (device re-acquisition is the app/page-recovery pass)")}async _onConsumeData(e){if(!this._recvTransport)return;let t=e.label,s=this._streamNameFromLabel(t);if(!s)return;let n=await this._recvTransport.consumeData({id:e.id,dataProducerId:e.dataProducerId,sctpStreamParameters:e.sctpStreamParameters,label:t,protocol:e.protocol});this._dataConsumers.set(s,n),n.on("message",o=>{try{let c=typeof o=="string"?new TextEncoder().encode(o):new Uint8Array(o);this._dispatchStreamData(s,ln(c))}catch(c){this._emitter.emit("error",c instanceof Error?c:new Error(String(c)))}});let i=!1,a=()=>{i||n.closed||(i=!0,this._send({type:"dataConsumerReady",id:e.id}))};n.readyState==="open"?a():n.on("open",a)}async _onConsume(e){if(!this._recvTransport)return;let t=this._generation,s=await this._recvTransport.consume({id:e.id,producerId:e.producerId,kind:e.kind,rtpParameters:e.rtpParameters});this._consumers.set(s.id,s),this._tracks.set(s.track.id,s.track);let n=e.streamName??e.label;n&&this._tracksByName.set(n,s.track),s.track.addEventListener?.("unmute",()=>{t!==this._generation||this._intentionalDisconnect||this._isTerminalPhase()||this._liveReached||this._setPhase("live")},{once:!0}),this._emitter.emit("track",s.track);let i=s.id;s.track.addEventListener("ended",()=>{t!==this._generation||this._intentionalDisconnect||this._closeConsumer(i)},{once:!0}),this._send({type:"resumeConsumer",consumerId:s.id}),this._startMediaMonitor()}_closeConsumer(e){let t=this._consumers.get(e);if(!t)return;this._consumers.delete(e);let s=t.track;try{t.close()}catch{}if(s){this._tracks.delete(s.id);for(let[n,i]of this._tracksByName)i===s&&this._tracksByName.delete(n)}}_closeConsumersByProducer(e){for(let[t,s]of this._consumers)s.producerId===e&&this._closeConsumer(t)}_mediaPollMs(){let e=this._options.mediaLiveness?.pollMs;return e===void 0?hp:e}_mediaStallTimeoutMs(){let e=this._options.mediaLiveness?.stallTimeoutMs;return e===void 0?fp: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=Et();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=Et(),s=await Promise.all(Array.from(this._consumers.values(),d=>Ep(d)));for(let d of s)Rp(t,d);if(e!==this._generation||this._intentionalDisconnect||this._isTerminalPhase())return;this._latestInboundSample=t;let n=Date.now(),{total:i,framesDecoded:a}=t;if(i>this._lastInboundTotal){this._lastInboundTotal=i,this._lastInboundAdvanceAt=n,i>0&&(this._mediaEverFlowed=!0,this._liveReached||this._setPhase("live")),this._checkDecodeLiveness(a,n);return}if(!this._mediaEverFlowed||this._mediaDeathHandled||n-this._lastInboundAdvanceAt<this._mediaStallTimeoutMs())return;let o=this._mediaStallTimeoutMs(),c={sessionId:this._options.sessionId,stallWindowMs:o,inboundTotal:i,...ua(this._latestInboundSample),...this._selectedCandidatePair};if(this._recvTransport?.connectionState==="connected"){this._emitDiagnostic({level:"info",kind:"media-idle",message:`no inbound media for ${o/1e3}s, but the ICE path is connected \u2014 the sender is idle, not dead; holding the transport`,detail:c}),this._lastInboundAdvanceAt=n,this._lastDecodeAdvanceAt=n;return}this._mediaDeathHandled=!0,this._emitDiagnostic({level:"warning",kind:"media-stall",message:`inbound media stopped advancing for ${o/1e3}s and the ICE path is ${this._recvTransport?.connectionState??"gone"}; reconnecting`,detail:c}),this._renegotiate()}_checkDecodeLiveness(e,t){if(e!==null){if(!this._decodeSignalSeen){this._decodeSignalSeen=!0,this._lastFramesDecoded=e,this._lastDecodeAdvanceAt=t,this._decodeWindowStartSample=this._latestInboundSample;return}if(e>this._lastFramesDecoded){this._lastFramesDecoded=e,this._lastDecodeAdvanceAt=t,this._decodeWindowStartSample=this._latestInboundSample;return}if(!this._decodeDeathHandled&&t-this._lastDecodeAdvanceAt>=this._mediaStallTimeoutMs()){this._decodeDeathHandled=!0;let s=this._mediaStallTimeoutMs(),n=Cp(this._decodeWindowStartSample,this._latestInboundSample),i=n.lossPct!==null&&n.lossPct>=5?" \u2014 stall is consistent with network packet loss between the SFU and this browser":"";this._emitDiagnostic({level:"warning",kind:"decode-wall",message:`video is arriving but no new frames decoded for ${s/1e3}s (framesDecoded stuck at ${e}) \u2014 decoder stalled${i}; reconnecting the stream`,detail:{sessionId:this._options.sessionId,stallWindowMs:s,inboundTotal:this._lastInboundTotal,framesDecoded:e,...ua(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>=sa){this._setState("failed"),this._emitError(new Error(`Failed after ${sa} attempts`));return}let s=t?0:ra[Math.min(this._reconnectAttempts,ra.length-1)];this._reconnectAttempts++,this._state!=="renegotiating"&&this._setState("reconnecting"),this._reconnectTimer=setTimeout(async()=>{this._reconnectTimer=null,this._replaceCurrentLegForReconnect();try{await this.connect(e??this._lastStartOptions)}catch(n){if(n instanceof Error&&n.message==="TransportSession: connect cancelled")return;this._attemptReconnect(e)}},s)}_connectUrls(){let e=[],t=s=>{if(!s)return;let n=/\/ws\/rtc\/[^/?#]+/.test(s),i=this._sessionId&&!n?`${s}${s.includes("?")?"&":"?"}sessionId=${encodeURIComponent(this._sessionId)}`:s;e.includes(i)||e.push(i)};t(this._options.url);for(let s of this._options.fallbackUrls??[])t(s);return e}_connectOnce(e,t,s){return new Promise((n,i)=>{let a=!1,o=!1,c=null,p=new WebSocket(e);this._ws=p;let d=()=>this._ws!==p||t!==this._generation,l=m=>{o||(o=!0,c&&clearTimeout(c),this._cancelPendingDial===u&&(this._cancelPendingDial=null),i(m))},u=m=>{try{p.close()}catch{}l(m)};this._cancelPendingDial=u,c=setTimeout(()=>{try{p.close()}catch{}l(new Error("TransportSession: connect timed out"))},up),p.onopen=()=>{if(!o){if(d()){try{p.close()}catch{}l(new Error("TransportSession: connect superseded during dial"));return}a=!0,c&&clearTimeout(c),this._connectedUrl=e,this._multiplexer=new It(p),p.send(JSON.stringify(this._startMessage(s))),this._scheduleReconnectBudgetReset(),this._setState("connected"),this._liveReached||this._setPhase("connecting"),this._emitter.emit("connected"),o=!0,this._cancelPendingDial===u&&(this._cancelPendingDial=null),n()}},p.onerror=()=>{a||l(new Error("WebSocket connection error"))},p.onclose=()=>{if(!a){l(new Error("WebSocket closed before connecting"));return}if(!d()&&(this._clearReconnectBudgetReset(),c&&clearTimeout(c),this._setState("disconnected"),!this._intentionalDisconnect)){if(this._pastDeadline()&&!at(this._phase.name)){this._setPhase("expired",{error:{reason:"session reached its maximum length",kind:"expired"}}),this._emitter.emit("disconnected");return}this._emitter.emit("disconnected"),!this._isTerminalPhase()&&this._attemptReconnect(s)}},p.onmessage=m=>{if(!(this._ws!==p||t!==this._generation)&&typeof m.data=="string")try{this._handleMessage(JSON.parse(m.data))}catch(f){this._emitter.emit("error",f instanceof Error?f:new Error(String(f)))}}})}_startMessage(e){let t={type:"start",video:e?.video??{width:854,height:480,frameRate:16}};return e?.prompt&&(t.prompt=e.prompt),e?.cameraControl&&(t.camera_control=e.cameraControl),e?.args&&(t.args=e.args),e?.app&&(t.app=e.app),e?.functionName&&(t.function=e.functionName),e?.role&&(t.role=e.role),this._options.orgId&&(t.orgId=this._options.orgId),this._options.jwt&&(t.jwt=this._options.jwt),this._options.authProvider&&(t.authProvider=this._options.authProvider),t}_cleanupSocket(){if(this._clearReconnectBudgetReset(),!this._ws)return;let e=this._ws;this._ws=null,e.onopen=null,e.onmessage=null,e.onerror=null,e.onclose=null;try{e.close()}catch{}}_replaceCurrentLegForReconnect(){this._cleanupSocket(),this._cancelPendingDial?.(new Error("TransportSession: reconnect replacing current dial")),this._cleanupMedia()}_scheduleReconnectBudgetReset(){this._clearReconnectBudgetReset(),this._reconnectAttempts!==0&&(this._stableResetTimer=setTimeout(()=>{this._stableResetTimer=null,this._reconnectAttempts=0},vp))}_clearReconnectBudgetReset(){this._stableResetTimer&&(clearTimeout(this._stableResetTimer),this._stableResetTimer=null)}_cleanupDataChannels(){for(let e of this._dataProducers.values())try{e.close()}catch{}this._dataProducers.clear(),this._dataProducerPromises.clear();for(let e of this._dataConsumers.values())try{e.close()}catch{}this._dataConsumers.clear();for(let e of this._pendingDataProduce.values())try{e.reject(new Error("TransportSession: disconnected"))}catch{}this._pendingDataProduce.clear()}_cleanupMedia(){this._stopMediaMonitor();for(let e of this._consumers.values())try{e.close()}catch{}if(this._consumers.clear(),this._cleanupDataChannels(),this._audioProducer){try{this._audioProducer.close()}catch{}this._audioProducer=null}if(this._videoProducer){try{this._videoProducer.close()}catch{}this._videoProducer=null}if(this._clearRecvIceRestart(),this._clearSendIceRestart(),this._recvTransport){try{this._recvTransport.close()}catch{}this._recvTransport=null}if(this._sendTransport){try{this._sendTransport.close()}catch{}this._sendTransport=null}this._pendingProduce&&(clearTimeout(this._pendingProduce.timeoutId),this._pendingProduce=null),this._device=null,this._tracks.clear(),this._tracksByName.clear(),this._multiplexer&&(this._multiplexer.dispose(),this._multiplexer=null)}_send(e){!this._ws||this._ws.readyState!==WebSocket.OPEN||this._ws.send(JSON.stringify(e))}_setState(e){this._state!==e&&(this._state=e,this._emitter.emit("stateChange",e))}_isTerminalPhase(){return this._phase.name==="ended"||this._phase.name==="expired"?!0:this._phase.name!=="error"?!1:this._phase.error?.kind!=="transport-failed"}_setPhase(e,t){e==="live"&&(this._liveReached=!0);let s={name:e};t?.queue&&(s.queue=t.queue),t?.runtime&&(s.runtime=t.runtime),Vs(e)?(this._wakingSince??=Date.now(),s.wakingSince=this._wakingSince):this._wakingSince=void 0,this._requestId&&(s.requestId=this._requestId),this._sessionId&&(s.sessionId=this._sessionId),this._endsAt!==null&&(s.endsAt=this._endsAt),t?.error&&(s.error=t.error),this._phase=s,this._isTerminalPhase()&&(this._stopMediaMonitor(),this._clearRecvIceRestart(),this._clearSendIceRestart(),this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null)),this._emitter.emit("phase",s)}reportAdmission(e){if(e.requestId&&(this._requestId=e.requestId),this._lastServerStatus=e.status,this._liveReached||at(this._phase.name))return;let{runtime:t,queue:s}=e;if(t?.state==="unavailable"){this._setPhase("unavailable",{runtime:t});return}if(t?.state==="starting"){this._setPhase("provisioning",{runtime:t});return}if(t?.state==="busy"||e.status==="queued"){this._setPhase("queued",{queue:s,runtime:t});return}this._setPhase("provisioning")}_emitError(e,t){this._setPhase("error",{error:{reason:e.message,code:t,kind:"transport-failed"}}),this._emitter.emit("error",e)}reportAllocationFailure(e,t){this._setPhase("error",{error:{reason:e.message,code:"allocation-failed",kind:"create-failed",httpStatus:t}}),this._emitter.emit("error",e)}};function la(r){return new Promise(e=>setTimeout(e,r))}function Sp(){return ta()}var Is=["packetsReceived","packetsLost","nackCount","pliCount","firCount","keyFramesDecoded","framesReceived","framesDropped","retransmittedPacketsReceived","retransmittedBytesReceived","jitterBufferDelay","jitterBufferEmittedCount"];function Et(){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 Rp(r,e){r.total+=e.total,e.framesDecoded!==null&&(r.framesDecoded=(r.framesDecoded??0)+e.framesDecoded),e.jitter!==null&&(r.jitter=r.jitter===null?e.jitter:Math.max(r.jitter,e.jitter));for(let t of Is)e[t]!==null&&(r[t]=(r[t]??0)+e[t])}function ua(r){return Object.fromEntries(Is.map(e=>[e,r[e]]))}function ha(r,e){return r===null||e===null||e<r?null:e-r}function Cp(r,e){let t=r.packetsLost!==null&&e.packetsLost!==null?e.packetsLost-r.packetsLost:null,s=ha(r.packetsReceived,e.packetsReceived),n=ha(r.nackCount,e.nackCount),i=t===null?null:Math.max(0,t),a=i!==null&&s!==null?i+s:0;return{packetsLostWindow:t,packetsReceivedWindow:s,nackCountWindow:n,jitterSec:e.jitter,lossPct:a>0&&i!==null?i/a*100:null}}function ma(){return{localType:null,remoteType:null,protocol:null,remoteAddress:null,remotePort:null}}function Tp(r){let e=new Map;ga(r,o=>{let c=typeof o.id=="string"?o.id:null;c&&e.set(c,o)});let t=Array.from(e.values()).find(o=>o.type==="transport"),s=typeof t?.selectedCandidatePairId=="string"?t.selectedCandidatePairId:null,n=(s?e.get(s):void 0)??Array.from(e.values()).find(o=>o.type==="candidate-pair"&&o.selected===!0);if(!n)return ma();let i=typeof n.localCandidateId=="string"?e.get(n.localCandidateId):void 0,a=typeof n.remoteCandidateId=="string"?e.get(n.remoteCandidateId):void 0;return{localType:typeof i?.candidateType=="string"?i.candidateType:null,remoteType:typeof a?.candidateType=="string"?a.candidateType:null,protocol:typeof i?.protocol=="string"?i.protocol:typeof a?.protocol=="string"?a.protocol:null,remoteAddress:typeof a?.address=="string"?a.address:typeof a?.ip=="string"?a.ip:null,remotePort:typeof a?.port=="number"?a.port:null}}function ga(r,e){let t=s=>{s&&typeof s=="object"&&e(s)};if(r instanceof Map)for(let[s,n]of r.entries()){if(!n||typeof n!="object")continue;let i=n;e(typeof i.id=="string"?i:{...i,id:s})}else(Array.isArray(r)||r&&typeof r.forEach=="function")&&r.forEach(t)}async function Ep(r){let e=Et();if(typeof r.getStats!="function")return e;let t;try{t=await r.getStats()}catch{return e}return ga(t,n=>{if(n.type==="inbound-rtp"){let i=typeof n.bytesReceived=="number"?n.bytesReceived:0,a=typeof n.packetsReceived=="number"?n.packetsReceived:0;if(e.total+=i+a,typeof n.framesDecoded=="number"&&(e.framesDecoded=(e.framesDecoded??0)+n.framesDecoded),n.kind==="video"||n.mediaType==="video"){typeof n.jitter=="number"&&(e.jitter=e.jitter===null?n.jitter:Math.max(e.jitter,n.jitter));for(let o of Is)typeof n[o]=="number"&&(e[o]=(e[o]??0)+n[o])}}}),e}function kp(r){if(!r||typeof r!="object")return;let e=r.epoch,t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:void 0}import{WebsocketProvider as Pp}from"y-websocket";import{Awareness as va}from"y-protocols/awareness";var xp=1;function mu(r){let e=new URL(r);return`${e.protocol}//${e.host}/doc`}function gu(r){let e=r.WebSocketPolyfill??globalThis.WebSocket;if(!e)throw new Error("[urun] no WebSocket implementation available for the yjs doc provider (browser global missing and no WebSocketPolyfill passed)");return(t,s,n)=>{let i=`${r.sessionId}/${t}`,a=new Pp(r.serverUrl,i,s,{awareness:n,params:{dsv:String(xp),...r.token?{token:r.token}:{}},WebSocketPolyfill:e,disableBc:!0});return{get awareness(){return a.awareness},get synced(){return a.synced},onSync(o){let c=p=>o(p);return a.on("sync",c),()=>a.off("sync",c)},ensureConnected(){a.wsconnected||a.connect()},destroy(){a.destroy()}}}}var Ls=class{constructor(e,t,s){this._name=e;this._doc=t;this.awareness=s}_name;_doc;awareness;_inner=null;_innerUnsub=null;_syncHandlers=new Set;_destroyed=!1;get synced(){return this._inner?.synced??!1}get destroyed(){return this._destroyed}onSync(e){return this._syncHandlers.add(e),()=>this._syncHandlers.delete(e)}attach(e){if(!this._destroyed&&(this._inner&&(this._innerUnsub?.(),this._innerUnsub=null,this._inner.destroy(),this._inner=null),this._inner=e(this._name,this._doc,this.awareness),this._innerUnsub=this._inner.onSync(t=>{for(let s of[...this._syncHandlers])s(t)}),this._inner.synced))for(let t of[...this._syncHandlers])t(!0)}ensureConnected(){this._inner?.ensureConnected?.()}destroy(){this._destroyed=!0,this._innerUnsub?.(),this._innerUnsub=null,this._inner?.destroy(),this._inner=null,this._syncHandlers.clear()}},_a=class{_target=null;_bridges=[];connect=(e,t,s)=>{let n=new Ls(e,t,s);return this._bridges.push(n),this._target&&n.attach(this._target),n};get connected(){return this._target!==null}setTarget(e){if(this._target!==e){this._target=e,this._bridges=this._bridges.filter(t=>!t.destroyed);for(let t of this._bridges)t.attach(e)}}};import*as Pt from"yjs";function xt(r){if(r===null||typeof r!="object"||Array.isArray(r))return!1;let e=Object.getPrototypeOf(r);return e===Object.prototype||e===null}var Tr="$bytes";function Dp(r){return r instanceof Uint8Array||r instanceof ArrayBuffer}function Ip(r){if(!xt(r))return!1;let e=Object.keys(r);return e.length===1&&e[0]===Tr&&typeof r[Tr]=="string"}function Lp(r){return r instanceof ArrayBuffer?new Uint8Array(r):r}function Mp(r){if(typeof Buffer<"u")return Buffer.from(r).toString("base64");let e="";for(let t=0;t<r.length;t++)e+=String.fromCharCode(r[t]);return btoa(e)}function Op(r){if(typeof Buffer<"u")return new Uint8Array(Buffer.from(r,"base64"));let e=atob(r),t=new Uint8Array(e.length);for(let s=0;s<e.length;s++)t[s]=e.charCodeAt(s);return t}function Ms(r){if(Dp(r))return{[Tr]:Mp(Lp(r))};if(Array.isArray(r))return r.map(Ms);if(xt(r)){let e={};for(let[t,s]of Object.entries(r))e[t]=Ms(s);return e}return r}function kt(r){if(Ip(r))return Op(r[Tr]);if(Array.isArray(r))return r.map(kt);if(xt(r)){let e={};for(let[t,s]of Object.entries(r))e[t]=kt(s);return e}return r}var ya=Symbol("urun:doc:path-absent");function Ap(r,e){let t=e.split("."),s=r;for(let n of t){if(s===null||typeof s!="object"||!(n in s))return ya;s=s[n]}return s}function Np(r,e){return r===e?!0:JSON.stringify(r)===JSON.stringify(e)}function Os(r,e){for(let[t,s]of Object.entries(e))if(xt(s)){let n=r.get(t);if(!(n instanceof Pt.Map)){let i=n;n=new Pt.Map,r.set(t,n),xt(i)&&Os(n,i)}Os(n,s)}else{if(Np(r.get(t),s))continue;r.set(t,s)}}var jp=Symbol("urun:doc:local"),wa=class{_doc=new Pt.Doc;_root=this._doc.getMap("session");_awareness=new va(this._doc);_listeners=new Set;_key;_sessionId;_connection=null;_connUnsub=null;_synced;_syncWaiters=new Set;_texts=new Map;_observer=()=>this.notify();constructor(e,t,s){this._key=e,this._sessionId=t,this._root.observeDeep(this._observer),s?(this._connection=s(e,this._doc,this._awareness),this._synced=this._connection.synced,this._connUnsub=this._connection.onSync(n=>{n&&this._markSynced()}),this._synced&&this._markSynced()):this._synced=!0}get awareness(){return this._awareness}setSessionId(e){this._sessionId=e}get synced(){return this._synced}ensureConnected(){this._connection?.ensureConnected?.()}onSynced(e){return this._synced?(e(),()=>{}):(this._syncWaiters.add(e),()=>this._syncWaiters.delete(e))}set(e){e=Ms(e),this.applyPatch(e)}get(e,t){let s=this.snapshot();if(!e)return kt(s);let n=Ap(s,e);return n===ya?t:kt(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 As(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(()=>{Os(this._root,e)},jp)}snapshot(){return this._root.toJSON()}notify(){let e=kt(this.snapshot());for(let t of this._listeners)t(e)}},As=class{constructor(e){this._ytext=e;this._observer=t=>{for(let s of t.delta)if(typeof s.insert=="string"&&s.insert.length>0){let n=s.insert;for(let i of this._delta)i(n)}},this._ytext.observe(this._observer)}_ytext;_delta=new Set;_observer;append(e){e.length!==0&&this._ytext.insert(this._ytext.length,e)}toString(){return this._ytext.toString()}get length(){return this._ytext.length}on(e,t){return this._delta.add(t),()=>this._delta.delete(t)}dispose(){this._ytext.unobserve(this._observer),this._delta.clear()}};function yu(r){return{get clientId(){return r.clientID},set(e){r.setLocalState(e)},setField(e,t){r.setLocalStateField(e,t)},getLocal(){return r.getLocalState()??null},getStates(){return r.getStates()},on(e,t){let s=()=>t(r.getStates());return r.on("change",s),s(),()=>r.off("change",s)}}}export{It as a,qs as b,$s as c,we as d,Ne as e,Us as f,zs as g,Bs as h,Mt as i,Lt as j,Ws as k,Hs as l,xa as m,ye as n,$p as o,ee as p,Vs as q,Da as r,Bp as s,Wp as t,Ia as u,La as v,ct as w,Er as x,kr as y,le as z,Xs as A,Qp as B,Jp as C,Xp as D,Zp as E,el as F,Ft as G,sn as H,nn as I,ta as J,an as K,sl as L,pu as M,Ds as N,yp as O,lu as P,pa as Q,xp as R,mu as S,gu as T,_a as U,wa as V,yu as W};
|
|
8
|
+
`}});var ge=C(ce=>{"use strict";var Ie=li(),Wc=hi(),Hc=sr();ce.grammar=Hc;ce.write=Wc;ce.parse=Ie.parse;ce.parseParams=Ie.parseParams;ce.parseFmtpConfig=Ie.parseFmtpConfig;ce.parsePayloads=Ie.parsePayloads;ce.parseRemoteCandidates=Ie.parseRemoteCandidates;ce.parseImageAttributes=Ie.parseImageAttributes;ce.parseSimulcastStreamList=Ie.parseSimulcastStreamList});var Le=C(ns=>{"use strict";Object.defineProperty(ns,"__esModule",{value:!0});ns.parse=Gc;var Vc=new RegExp("^[LS]([1-9]\\d{0,1})T([1-9]\\d{0,1})");function Gc(r){let e=Vc.exec(r??"");return e?{spatialLayers:Number(e[1]),temporalLayers:Number(e[2])}:{spatialLayers:1,temporalLayers:1}}});var gi=C(Ce=>{"use strict";Object.defineProperty(Ce,"__esModule",{value:!0});Ce.OfferMediaSection=Ce.AnswerMediaSection=Ce.MediaSection=void 0;var Kc=ge(),fi=Pe(),ft=class{_mediaObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:s}){if(this._mediaObject={type:"",port:0,protocol:"",payloads:"",rtp:[],fmtp:[]},e&&this.setIceParameters(e),t){this._mediaObject.candidates=[];for(let n of t){let i={foundation:n.foundation,component:1,ip:n.address??n.ip,port:n.port,priority:n.priority,transport:n.protocol,type:n.type};n.tcpType&&(i.tcptype=n.tcpType),this._mediaObject.candidates.push(i)}this._mediaObject.endOfCandidates="end-of-candidates",this._mediaObject.iceOptions="renomination"}s&&this.setDtlsRole(s.role)}get mid(){return String(this._mediaObject.mid)}get closed(){return this._mediaObject.port===0}getObject(){return this._mediaObject}setIceParameters(e){this._mediaObject.iceUfrag=e.usernameFragment,this._mediaObject.icePwd=e.password}pause(){this._mediaObject.direction="inactive"}disable(){this.pause()}close(){this.disable(),this._mediaObject.port=0,delete this._mediaObject.candidates,delete this._mediaObject.endOfCandidates,delete this._mediaObject.iceUfrag,delete this._mediaObject.icePwd,delete this._mediaObject.iceOptions,this._mediaObject.rtp=[],this._mediaObject.fmtp=[],delete this._mediaObject.rtcp,delete this._mediaObject.rtcpFb,delete this._mediaObject.ssrcs,delete this._mediaObject.ssrcGroups,delete this._mediaObject.simulcast,delete this._mediaObject.simulcast_03,delete this._mediaObject.rids,delete this._mediaObject.extmapAllowMixed}};Ce.MediaSection=ft;var is=class extends ft{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:s,sctpParameters:n,plainRtpParameters:i,offerMediaObject:a,offerRtpParameters:o,answerRtpParameters:c,codecOptions:p}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:s}),this._mediaObject.mid=String(a.mid),this._mediaObject.type=a.type,this._mediaObject.protocol=a.protocol,i?(this._mediaObject.connection={ip:i.ip,version:i.ipVersion},this._mediaObject.port=i.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},this._mediaObject.port=7),a.type){case"audio":case"video":{this._mediaObject.direction="recvonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[];for(let d of c.codecs){let l={payload:d.payloadType,codec:mi(d),rate:d.clockRate};d.channels>1&&(l.encoding=d.channels),this._mediaObject.rtp.push(l);let u=fi.clone(d.parameters)??{},m=fi.clone(d.rtcpFeedback)??[];if(p){let{opusStereo:h,opusFec:g,opusDtx:v,opusMaxPlaybackRate:b,opusMaxAverageBitrate:P,opusPtime:x,opusNack:k,videoGoogleStartBitrate:L,videoGoogleMaxBitrate:Ae,videoGoogleMinBitrate:ot}=p,ve=o.codecs.find(Ee=>Ee.payloadType===d.payloadType);switch(d.mimeType.toLowerCase()){case"audio/opus":case"audio/multiopus":{h!==void 0&&(ve.parameters["sprop-stereo"]=h?1:0,u.stereo=h?1:0),g!==void 0&&(ve.parameters.useinbandfec=g?1:0,u.useinbandfec=g?1:0),v!==void 0&&(ve.parameters.usedtx=v?1:0,u.usedtx=v?1:0),b!==void 0&&(u.maxplaybackrate=b),P!==void 0&&(u.maxaveragebitrate=P),x!==void 0&&(ve.parameters.ptime=x,u.ptime=x),k||(ve.rtcpFeedback=ve.rtcpFeedback.filter(Ee=>Ee.type!=="nack"||Ee.parameter),m=m.filter(Ee=>Ee.type!=="nack"||Ee.parameter));break}case"video/vp8":case"video/vp9":case"video/h264":case"video/h265":case"video/av1":{L!==void 0&&(u["x-google-start-bitrate"]=L),Ae!==void 0&&(u["x-google-max-bitrate"]=Ae),ot!==void 0&&(u["x-google-min-bitrate"]=ot);break}}}let f={payload:d.payloadType,config:""};for(let h of Object.keys(u))f.config&&(f.config+=";"),f.config+=`${h}=${u[h]}`;f.config&&this._mediaObject.fmtp.push(f);for(let h of m)this._mediaObject.rtcpFb.push({payload:d.payloadType,type:h.type,subtype:h.parameter})}this._mediaObject.payloads=c.codecs.map(d=>d.payloadType).join(" "),this._mediaObject.ext=[];for(let d of c.headerExtensions)(a.ext??[]).some(u=>u.uri===d.uri)&&this._mediaObject.ext.push({uri:d.uri,value:d.id});if(a.extmapAllowMixed==="extmap-allow-mixed"&&(this._mediaObject.extmapAllowMixed="extmap-allow-mixed"),a.simulcast){this._mediaObject.simulcast={dir1:"recv",list1:a.simulcast.list1},this._mediaObject.rids=[];for(let d of a.rids??[])d.direction==="send"&&this._mediaObject.rids.push({id:d.id,direction:"recv"})}else if(a.simulcast_03){this._mediaObject.simulcast_03={value:a.simulcast_03.value.replace(/send/g,"recv")},this._mediaObject.rids=[];for(let d of a.rids??[])d.direction==="send"&&this._mediaObject.rids.push({id:d.id,direction:"recv"})}this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";break}case"application":{typeof a.sctpPort=="number"?(this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=n.port,this._mediaObject.maxMessageSize=n.maxMessageSize):a.sctpmap&&(this._mediaObject.payloads=String(n.port),this._mediaObject.sctpmap={app:"webrtc-datachannel",sctpmapNumber:n.port,maxMessageSize:n.maxMessageSize});break}}}setDtlsRole(e){switch(e){case"client":{this._mediaObject.setup="active";break}case"server":{this._mediaObject.setup="passive";break}case"auto":{this._mediaObject.setup="actpass";break}}}resume(){this._mediaObject.direction="recvonly"}muxSimulcastStreams(e){if(!this._mediaObject.simulcast?.list1)return;let t={};for(let i of e)i.rid&&(t[i.rid]=i);let s=this._mediaObject.simulcast.list1,n=Kc.parseSimulcastStreamList(s);for(let i of n)for(let a of i)a.paused=!t[a.scid]?.active;this._mediaObject.simulcast.list1=n.map(i=>i.map(a=>`${a.paused?"~":""}${a.scid}`).join(",")).join(";")}};Ce.AnswerMediaSection=is;var as=class extends ft{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:s,sctpParameters:n,plainRtpParameters:i,mid:a,kind:o,offerRtpParameters:c,streamId:p,trackId:d}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:s}),this._mediaObject.mid=String(a),this._mediaObject.type=o,i?(this._mediaObject.connection={ip:i.ip,version:i.ipVersion},this._mediaObject.protocol="RTP/AVP",this._mediaObject.port=i.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},n?this._mediaObject.protocol="UDP/DTLS/SCTP":this._mediaObject.protocol="UDP/TLS/RTP/SAVPF",this._mediaObject.port=7),this._mediaObject.extmapAllowMixed="extmap-allow-mixed",o){case"audio":case"video":{this._mediaObject.direction="sendonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[],this._mediaObject.msid=[{id:p,appdata:d}];for(let f of c.codecs){let h={payload:f.payloadType,codec:mi(f),rate:f.clockRate};f.channels>1&&(h.encoding=f.channels),this._mediaObject.rtp.push(h);let g={payload:f.payloadType,config:""};for(let v of Object.keys(f.parameters??{}))g.config&&(g.config+=";"),g.config+=`${v}=${f.parameters[v]}`;g.config&&this._mediaObject.fmtp.push(g);for(let v of f.rtcpFeedback)this._mediaObject.rtcpFb.push({payload:f.payloadType,type:v.type,subtype:v.parameter})}this._mediaObject.payloads=c.codecs.map(f=>f.payloadType).join(" "),this._mediaObject.ext=[];for(let f of c.headerExtensions)this._mediaObject.ext.push({uri:f.uri,value:f.id});this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";let l=c.encodings[0],u=l.ssrc,m=l.rtx?.ssrc;this._mediaObject.ssrcs=[],this._mediaObject.ssrcGroups=[],u&&c.rtcp.cname&&this._mediaObject.ssrcs.push({id:u,attribute:"cname",value:c.rtcp.cname}),m&&(c.rtcp.cname&&this._mediaObject.ssrcs.push({id:m,attribute:"cname",value:c.rtcp.cname}),u&&this._mediaObject.ssrcGroups.push({semantics:"FID",ssrcs:`${u} ${m}`}));break}case"application":{this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=n.port,this._mediaObject.maxMessageSize=n.maxMessageSize;break}}}setDtlsRole(e){this._mediaObject.setup="actpass"}resume(){this._mediaObject.direction="sendonly"}};Ce.OfferMediaSection=as;function mi(r){let t=new RegExp("^(audio|video)/(.+)","i").exec(r.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");return t[2]}});var Ze=C(ar=>{"use strict";Object.defineProperty(ar,"__esModule",{value:!0});ar.RemoteSdp=void 0;var Yc=ge(),Qc=U(),nr=gi(),Jc=cs(),Xc=["av1","h264"],ir=new Qc.Logger("RemoteSdp"),os=class{_iceParameters;_iceCandidates;_dtlsParameters;_sctpParameters;_plainRtpParameters;_mediaSections=[];_midToIndex=new Map;_firstMid;_sdpObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:s,sctpParameters:n,plainRtpParameters:i}){if(this._iceParameters=e,this._iceCandidates=t,this._dtlsParameters=s,this._sctpParameters=n,this._plainRtpParameters=i,this._sdpObject={version:0,origin:{address:"0.0.0.0",ipVer:4,netType:"IN",sessionId:"10000",sessionVersion:0,username:`media-client-v${Jc.version}`},name:"-",timing:{start:0,stop:0},media:[]},this._sdpObject.iceOptions="ice2",e?.iceLite&&(this._sdpObject.icelite="ice-lite"),s){this._sdpObject.msidSemantic={semantic:"WMS",token:"*"};let a=this._dtlsParameters.fingerprints.length;this._sdpObject.fingerprint={type:s.fingerprints[a-1].algorithm,hash:s.fingerprints[a-1].value},this._sdpObject.groups=[{type:"BUNDLE",mids:""}]}i&&(this._sdpObject.origin.address=i.ip,this._sdpObject.origin.ipVer=i.ipVersion)}updateIceParameters(e){ir.debug("updateIceParameters() [iceParameters:%o]",e),this._iceParameters=e,this._sdpObject.icelite=e.iceLite?"ice-lite":void 0;for(let t of this._mediaSections)t.setIceParameters(e)}updateDtlsRole(e){ir.debug("updateDtlsRole() [role:%s]",e),this._dtlsParameters.role=e;for(let t of this._mediaSections)t.setDtlsRole(e)}setSessionExtmapAllowMixed(){ir.debug("setSessionExtmapAllowMixed()"),this._sdpObject.extmapAllowMixed="extmap-allow-mixed"}getNextMediaSectionIdx(){for(let e=0;e<this._mediaSections.length;++e){let t=this._mediaSections[e];if(t.closed)return{idx:e,reuseMid:t.mid}}return{idx:this._mediaSections.length}}send({offerMediaObject:e,reuseMid:t,offerRtpParameters:s,answerRtpParameters:n,codecOptions:i}){let a=new nr.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,offerMediaObject:e,offerRtpParameters:s,answerRtpParameters:n,codecOptions:i}),o=a.getObject();o.rtp.find(p=>Xc.includes(p.codec.toLowerCase()))||(o.ext=o.ext?.filter(p=>p.uri!=="https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension")),t?this.replaceMediaSection(a,t):this._midToIndex.has(a.mid)?this.replaceMediaSection(a):this.addMediaSection(a)}receive({mid:e,kind:t,offerRtpParameters:s,streamId:n,trackId:i}){this.setSessionExtmapAllowMixed();let a=new nr.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,mid:e,kind:t,offerRtpParameters:s,streamId:n,trackId:i}),o=this._mediaSections.find(c=>c.closed&&c.getObject().type===t);o?this.replaceMediaSection(a,o.mid):this.addMediaSection(a)}pauseMediaSection(e){this.findMediaSection(e).pause()}resumeSendingMediaSection(e){this.findMediaSection(e).resume()}resumeReceivingMediaSection(e){this.findMediaSection(e).resume()}disableMediaSection(e){this.findMediaSection(e).disable()}closeMediaSection(e){let t=this.findMediaSection(e);return e===this._firstMid?(ir.debug("closeMediaSection() | cannot close first media section, disabling it instead [mid:%s]",e),this.disableMediaSection(e),!1):(t.close(),this.regenerateBundleMids(),!0)}muxMediaSectionSimulcast(e,t){let s=this.findMediaSection(e);s.muxSimulcastStreams(t),this.replaceMediaSection(s)}sendSctpAssociation({offerMediaObject:e}){let t=new nr.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,sctpParameters:this._sctpParameters,plainRtpParameters:this._plainRtpParameters,offerMediaObject:e});this.addMediaSection(t)}receiveSctpAssociation(){let e=new nr.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,sctpParameters:this._sctpParameters,plainRtpParameters:this._plainRtpParameters,mid:"datachannel",kind:"application"});this.addMediaSection(e)}getSdp(){return this._sdpObject.origin.sessionVersion++,Yc.write(this._sdpObject)}addMediaSection(e){this._firstMid||(this._firstMid=e.mid),this._mediaSections.push(e),this._midToIndex.set(e.mid,this._mediaSections.length-1),this._sdpObject.media.push(e.getObject()),this.regenerateBundleMids()}replaceMediaSection(e,t){if(typeof t=="string"){let s=this._midToIndex.get(t);if(s===void 0)throw new Error(`no media section found for reuseMid '${t}'`);let n=this._mediaSections[s];this._mediaSections[s]=e,this._midToIndex.delete(n.mid),this._midToIndex.set(e.mid,s),this._sdpObject.media[s]=e.getObject(),this.regenerateBundleMids()}else{let s=this._midToIndex.get(e.mid);if(s===void 0)throw new Error(`no media section found with mid '${e.mid}'`);this._mediaSections[s]=e,this._sdpObject.media[s]=e.getObject()}}findMediaSection(e){let t=this._midToIndex.get(e);if(t===void 0)throw new Error(`no media section found with mid '${e}'`);return this._mediaSections[t]}regenerateBundleMids(){this._dtlsParameters&&(this._sdpObject.groups[0].mids=this._mediaSections.filter(e=>!e.closed).map(e=>e.mid).join(" "))}};ar.RemoteSdp=os});var et=C(Me=>{"use strict";Object.defineProperty(Me,"__esModule",{value:!0});Me.extractRtpCapabilities=Zc;Me.extractDtlsParameters=ed;Me.getCname=td;Me.applyCodecParameters=rd;Me.addHeaderExtension=sd;var _i=ge();function Zc({sdpObject:r}){let e=new Map,t=new Map;for(let n of r.media){let i=n.type;switch(i){case"audio":case"video":break;default:continue}for(let a of n.rtp){let o={kind:i,mimeType:`${i}/${a.codec}`,preferredPayloadType:a.payload,clockRate:a.rate,channels:a.encoding,parameters:{},rtcpFeedback:[]};e.set(o.preferredPayloadType,o)}for(let a of n.fmtp??[]){let o=_i.parseParams(a.config),c=e.get(a.payload);c&&(o?.hasOwnProperty("profile-level-id")&&(o["profile-level-id"]=String(o["profile-level-id"])),c.parameters=o)}for(let a of n.rtcpFb??[]){let o={type:a.type,parameter:a.subtype};if(o.parameter||delete o.parameter,a.payload!=="*"){let c=e.get(Number(a.payload));if(!c)continue;c.rtcpFeedback.push(o)}else for(let c of e.values())c.kind===i&&!/.+\/rtx$/i.test(c.mimeType)&&c.rtcpFeedback.push(o)}for(let a of n.ext??[]){if(a["encrypt-uri"])continue;let o={kind:i,uri:a.uri,preferredId:a.value};t.set(o.preferredId,o)}}return{codecs:Array.from(e.values()),headerExtensions:Array.from(t.values())}}function ed({sdpObject:r}){let e=r.setup,t=r.fingerprint;if(!e||!t){let i=(r.media??[]).find(a=>a.port!==0);i&&(e=e??i.setup,t=t??i.fingerprint)}if(e){if(!t)throw new Error("no a=fingerprint found at SDP session or media level")}else throw new Error("no a=setup found at SDP session or media level");let s;switch(e){case"active":{s="client";break}case"passive":{s="server";break}case"actpass":{s="auto";break}}return{role:s,fingerprints:[{algorithm:t.type,value:t.hash}]}}function td({offerMediaObject:r}){let e=(r.ssrcs??[]).find(t=>t.attribute==="cname");return e?e.value:""}function rd({offerRtpParameters:r,answerMediaObject:e}){for(let t of r.codecs){let s=t.mimeType.toLowerCase();if(s!=="audio/opus"||!(e.rtp??[]).find(o=>o.payload===t.payloadType))continue;e.fmtp=e.fmtp??[];let i=e.fmtp.find(o=>o.payload===t.payloadType);i||(i={payload:t.payloadType,config:""},e.fmtp.push(i));let a=_i.parseParams(i.config);if(s==="audio/opus"){let o=t.parameters?.["sprop-stereo"];o!==void 0&&(a.stereo=Number(o)?1:0)}i.config="";for(let o of Object.keys(a))i.config&&(i.config+=";"),i.config+=`${o}=${a[o]}`}}function sd({offerMediaObject:r,headerExtensionUri:e,headerExtensionId:t}){r.ext||(r.ext=[]),r.ext.push({uri:e,value:t})}});var tt=C(or=>{"use strict";Object.defineProperty(or,"__esModule",{value:!0});or.getRtpEncodings=nd;or.addLegacySimulcast=id;function nd({offerMediaObject:r,codecs:e}){let t=new Set;for(let i of r.ssrcs??[]){let a=i.id;a&&t.add(a)}if(t.size===0)throw new Error("no a=ssrc lines found");let s=new Map;for(let i of r.ssrcGroups??[]){if(i.semantics!=="FID")continue;let a=i.ssrcs.split(/\s+/),o=Number(a[0]),c=Number(a[1]);t.has(o)&&(t.delete(o),t.delete(c),s.set(o,c))}for(let i of t)s.set(i,void 0);let n=[];for(let[i,a]of s){let o={ssrc:i};a&&e.length>1&&(o.rtx={ssrc:a}),n.push(o)}return n}function id({offerMediaObject:r,numStreams:e}){if(e<=1)throw new TypeError("numStreams must be greater than 1");let t=(r.ssrcs??[]).find(l=>l.attribute==="msid");if(!t)throw new Error("a=ssrc line with msid information not found");let[s,n]=t.value.split(" "),i=Number(t.id),a;(r.ssrcGroups??[]).some(l=>{if(l.semantics!=="FID")return!1;let u=l.ssrcs.split(/\s+/);return Number(u[0])===i?(a=Number(u[1]),!0):!1});let o=(r.ssrcs??[]).find(l=>l.attribute==="cname");if(!o)throw new Error("a=ssrc line with cname information not found");let c=o.value,p=[],d=[];for(let l=0;l<e;++l)p.push(i+l),a&&d.push(a+l);r.ssrcGroups=[],r.ssrcs=[],r.ssrcGroups.push({semantics:"SIM",ssrcs:p.join(" ")});for(let l of p)r.ssrcs.push({id:l,attribute:"cname",value:c}),r.ssrcs.push({id:l,attribute:"msid",value:`${s} ${n}`});for(let l=0;l<d.length;++l){let u=p[l],m=d[l];r.ssrcs.push({id:m,attribute:"cname",value:c}),r.ssrcs.push({id:m,attribute:"msid",value:`${s} ${n}`}),r.ssrcGroups.push({semantics:"FID",ssrcs:`${u} ${m}`})}}});var rt=C(mt=>{"use strict";Object.defineProperty(mt,"__esModule",{value:!0});mt.addNackSupportForOpus=ad;mt.addHeaderExtensionSupport=od;mt.getMsidStreamIdAndTrackId=cd;function ad(r){for(let e of r.codecs??[])(e.mimeType.toLowerCase()==="audio/opus"||e.mimeType.toLowerCase()==="audio/multiopus")&&!e.rtcpFeedback?.some(t=>t.type==="nack"&&!t.parameter)&&(e.rtcpFeedback||(e.rtcpFeedback=[]),e.rtcpFeedback.push({type:"nack"}))}function od(r,e){let t,s=r.headerExtensions?.find(i=>i.uri===e.uri);if(s){if(s.kind===e.kind)return;t=s.preferredId}if(r.headerExtensions||(r.headerExtensions=[]),t===void 0){t=1;let i=new Set(r.headerExtensions.map(a=>a.preferredId));for(;i.has(t);)++t}let n={kind:e.kind,uri:e.uri,preferredId:t,preferredEncrypt:!1,direction:e.direction};r.headerExtensions.push(n)}function cd(r){if(!r||typeof r!="string")return{msidStreamId:void 0,msidTrackId:void 0};let[e,t]=r.trim().split(/\s+/);return e?{msidStreamId:e,msidTrackId:t}:{msidStreamId:void 0,msidTrackId:void 0}}});var bi=C(cr=>{"use strict";Object.defineProperty(cr,"__esModule",{value:!0});cr.Chrome111=void 0;var de=ge(),dd=V(),pd=U(),gt=ie(),ld=Q(),ud=Le(),hd=Ze(),_t=et(),vi=tt(),ds=rt(),T=new pd.Logger("Chrome111"),wi="Chrome111",yi={OS:65535,MIS:65535},ps=class r extends dd.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:wi,factory:e=>new r(e),getNativeRtpCapabilities:async({direction:e})=>{T.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e,sendEncodings:[{scalabilityMode:"L3T3"}]});let s=await t.createOffer();try{t.close()}catch{}t=void 0;let n=de.parse(s.sdp);return r.getLocalRtpCapabilities(n)}catch(s){try{t?.close()}catch{}throw t=void 0,s}},getNativeSctpCapabilities:async()=>(T.debug("getNativeSctpCapabilities()"),{numStreams:yi})}}static getLocalRtpCapabilities(e,t=[]){let s=_t.extractRtpCapabilities({sdpObject:e});gt.validateAndNormalizeRtpCapabilities(s),ds.addNackSupportForOpus(s);for(let n of t)ds.addHeaderExtensionSupport(s,n);return s}constructor({direction:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),T.debug("constructor()"),this._direction=e,this._remoteSdp=new hd.RemoteSdp({iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=p,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(T.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return wi}close(){if(T.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),T.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),T.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});T.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let s={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();T.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:s,codecOptions:n,headerExtensionOptions:i,codec:a,onRtpSender:o}){if(this.assertNotClosed(),this.assertSendDirection(),T.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),s&&s.length>1){let x=1;for(let k of s){let L=k.scalabilityMode?(0,ud.parse)(k.scalabilityMode).temporalLayers:3;L>x&&(x=L)}s.forEach((k,L)=>{k.rid=`r${L}`,k.scalabilityMode=`L1T${x}`})}let c=this._remoteSdp.getNextMediaSectionIdx(),p=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:s});o&&o(p.sender);let d=await this._pc.createOffer(),l=de.parse(d.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let u=[];u.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let m=r.getLocalRtpCapabilities(l,u),f=this._getSendExtendedRtpCapabilities(m),h=gt.getSendingRtpParameters(e.kind,f);h.codecs=gt.reduceCodecs(h.codecs,a);let g=gt.getSendingRemoteRtpParameters(e.kind,f);if(g.codecs=gt.reduceCodecs(g.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l}),i?.absCaptureTime){let x=l.media[c.idx];_t.addHeaderExtension({offerMediaObject:x,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(k=>k.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:de.write(l)}}T.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let v=p.mid;h.mid=v,l=de.parse(this._pc.localDescription.sdp);let b=l.media[c.idx];if(h.rtcp.cname=_t.getCname({offerMediaObject:b}),h.msid=`${t??this._sendStream.id} ${e.id}`,!s)h.encodings=vi.getRtpEncodings({offerMediaObject:b,codecs:h.codecs});else if(s.length===1){let x=vi.getRtpEncodings({offerMediaObject:b,codecs:h.codecs});Object.assign(x[0],s[0]),h.encodings=x}else h.encodings=s;this._remoteSdp.send({offerMediaObject:b,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:g,codecOptions:n});let P={type:"answer",sdp:this._remoteSdp.getSdp()};return T.debug("send() | calling pc.setRemoteDescription() [answer:%o]",P),await this._pc.setRemoteDescription(P),this._mapMidTransceiver.set(v,p),{localId:v,rtpParameters:h,rtpSender:p.sender}}async stopSending(e){if(this.assertSendDirection(),T.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let n=await this._pc.createOffer();T.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),T.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let s=await this._pc.createOffer();T.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),T.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let s=await this._pc.createOffer();T.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?T.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):T.debug("replaceTrack() [localId:%s, no track]",e);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");await s.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),T.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();T.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),T.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();T.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};T.debug("sendDataChannel() [options:%o]",t);let s=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%yi.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),a=de.parse(i.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),T.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:s,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],s=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;T.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);s.set(c,u);let{msidStreamId:m}=ds.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??m??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let o of e){let{trackId:c,onRtpReceiver:p}=o;if(p){let d=s.get(c),l=this._pc.getTransceivers().find(u=>u.mid===d);if(!l)throw new Error("transceiver not found");p(l.receiver)}}let i=await this._pc.createAnswer(),a=de.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=s.get(c),l=a.media.find(u=>String(u.mid)===d);_t.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l})}i={type:"answer",sdp:de.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),T.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let o of e){let{trackId:c}=o,p=s.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(d)this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){T.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();T.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){T.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();T.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){T.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();T.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:s,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};T.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(s,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),m=de.parse(u.sdp),f=m.media.find(h=>h.type==="application");f.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),u={type:"answer",sdp:de.write(m)},T.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=de.parse(this._pc.localDescription.sdp));let s=_t.extractDtlsParameters({sdpObject:t});s.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:s},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new ld.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};cr.Chrome111=ps});var Ci=C(dr=>{"use strict";Object.defineProperty(dr,"__esModule",{value:!0});dr.Chrome74=void 0;var J=ge(),fd=U(),md=V(),vt=ie(),gd=Q(),_d=Le(),vd=Ze(),wt=et(),ls=tt(),us=rt(),S=new fd.Logger("Chrome74"),Si="Chrome74",Ri={OS:1024,MIS:1024},hs=class r extends md.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Si,factory:e=>new r(e),getNativeRtpCapabilities:async({direction:e})=>{S.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let s=await t.createOffer();try{t.close()}catch{}t=void 0;let n=J.parse(s.sdp);return r.getLocalRtpCapabilities(n)}catch(s){try{t?.close()}catch{}throw t=void 0,s}},getNativeSctpCapabilities:async()=>(S.debug("getNativeSctpCapabilities()"),{numStreams:Ri})}}static getLocalRtpCapabilities(e,t=[]){let s=wt.extractRtpCapabilities({sdpObject:e});vt.validateAndNormalizeRtpCapabilities(s),us.addNackSupportForOpus(s);for(let n of t)us.addHeaderExtensionSupport(s,n);return s}constructor({direction:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),S.debug("constructor()"),this._direction=e,this._remoteSdp=new vd.RemoteSdp({iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=p,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(S.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Si}close(){if(S.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),S.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),S.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});S.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let s={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();S.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:s,codecOptions:n,headerExtensionOptions:i,codec:a}){this.assertNotClosed(),this.assertSendDirection(),S.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),s&&s.length>1&&s.forEach((k,L)=>{k.rid=`r${L}`});let o=this._remoteSdp.getNextMediaSectionIdx(),c=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:s}),p=await this._pc.createOffer(),d=J.parse(p.sdp);d.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let l=[];l.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let u=r.getLocalRtpCapabilities(d,l),m=this._getSendExtendedRtpCapabilities(u),f=vt.getSendingRtpParameters(e.kind,m);f.codecs=vt.reduceCodecs(f.codecs,a);let h=vt.getSendingRemoteRtpParameters(e.kind,m);h.codecs=vt.reduceCodecs(h.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:d});let g=!1,v=(0,_d.parse)((s??[{}])[0].scalabilityMode),b;s?.length===1&&v.spatialLayers>1&&f.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(S.debug("send() | enabling legacy simulcast for VP9 SVC"),g=!0,d=J.parse(p.sdp),b=d.media[o.idx],ls.addLegacySimulcast({offerMediaObject:b,numStreams:v.spatialLayers}),p={type:"offer",sdp:J.write(d)}),S.debug("send() | calling pc.setLocalDescription() [offer:%o]",p),i?.absCaptureTime&&(b=d.media[o.idx],wt.addHeaderExtension({offerMediaObject:b,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:h.headerExtensions.find(k=>k.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),p={type:"offer",sdp:J.write(d)}),await this._pc.setLocalDescription(p);let P=c.mid;if(f.mid=P,d=J.parse(this._pc.localDescription.sdp),b=d.media[o.idx],f.rtcp.cname=wt.getCname({offerMediaObject:b}),f.msid=`${t??this._sendStream.id} ${e.id}`,!s)f.encodings=ls.getRtpEncodings({offerMediaObject:b,codecs:f.codecs});else if(s.length===1){let k=ls.getRtpEncodings({offerMediaObject:b,codecs:f.codecs});Object.assign(k[0],s[0]),g&&(k=[k[0]]),f.encodings=k}else f.encodings=s;if(f.encodings.length>1&&(f.codecs[0].mimeType.toLowerCase()==="video/vp8"||f.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let k of f.encodings)k.scalabilityMode?k.scalabilityMode=`L1T${v.temporalLayers}`:k.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:b,reuseMid:o.reuseMid,offerRtpParameters:f,answerRtpParameters:h,codecOptions:n});let x={type:"answer",sdp:this._remoteSdp.getSdp()};return S.debug("send() | calling pc.setRemoteDescription() [answer:%o]",x),await this._pc.setRemoteDescription(x),this._mapMidTransceiver.set(P,c),{localId:P,rtpParameters:f,rtpSender:c.sender}}async stopSending(e){if(this.assertSendDirection(),S.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let n=await this._pc.createOffer();S.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),S.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let s=await this._pc.createOffer();S.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),S.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let s=await this._pc.createOffer();S.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?S.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):S.debug("replaceTrack() [localId:%s, no track]",e);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");await s.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),S.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();S.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),S.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();S.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};S.debug("sendDataChannel() [options:%o]",t);let s=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Ri.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),a=J.parse(i.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),S.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:s,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],s=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;S.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);s.set(c,u);let{msidStreamId:m}=us.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??m??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);let i=await this._pc.createAnswer(),a=J.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=s.get(c),l=a.media.find(u=>String(u.mid)===d);wt.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l})}i={type:"answer",sdp:J.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),S.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let o of e){let{trackId:c}=o,p=s.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(d)this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){S.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();S.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){S.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();S.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){S.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();S.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:s,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};S.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(s,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),m=J.parse(u.sdp),f=m.media.find(h=>h.type==="application");f.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),u={type:"answer",sdp:J.write(m)},S.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=J.parse(this._pc.localDescription.sdp));let s=wt.extractDtlsParameters({sdpObject:t});s.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:s},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new gd.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};dr.Chrome74=hs});var xi=C(lr=>{"use strict";Object.defineProperty(lr,"__esModule",{value:!0});lr.Firefox120=void 0;var _e=ge(),wd=V(),yd=U(),Ti=Q(),yt=ie(),bd=Le(),Sd=Ze(),pr=et(),Ei=tt(),Rd=rt(),E=new yd.Logger("Firefox120"),ki="Firefox120",Pi={OS:16,MIS:2048},fs=class r extends wd.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:ki,factory:e=>new r(e),getNativeRtpCapabilities:async({direction:e})=>{E.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"}),s=document.createElement("canvas");s.getContext("2d");let i=s.captureStream().getVideoTracks()[0];try{t.addTransceiver("audio",{direction:e}),t.addTransceiver(i,{direction:e,sendEncodings:[{rid:"r0",maxBitrate:1e5},{rid:"r1",maxBitrate:5e5}]});let a=await t.createOffer();try{s.remove()}catch{}try{i.stop()}catch{}try{t.close()}catch{}t=void 0;let o=_e.parse(a.sdp);return r.getLocalRtpCapabilities(o)}catch(a){try{s.remove()}catch{}try{i.stop()}catch{}try{t?.close()}catch{}throw t=void 0,a}},getNativeSctpCapabilities:async()=>(E.debug("getNativeSctpCapabilities()"),{numStreams:Pi})}}static getLocalRtpCapabilities(e){let t=pr.extractRtpCapabilities({sdpObject:e});return yt.validateAndNormalizeRtpCapabilities(t),t}constructor({direction:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),E.debug("constructor()"),this._direction=e,this._remoteSdp=new Sd.RemoteSdp({iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=p,this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(E.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return ki}close(){if(E.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){throw this.assertNotClosed(),new Ti.UnsupportedError("not supported")}async restartIce(e){if(this.assertNotClosed(),E.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});E.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let s={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();E.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:s,codecOptions:n,codec:i,onRtpSender:a}){this.assertNotClosed(),this.assertSendDirection(),E.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),s&&s.length>1&&s.forEach((b,P)=>{b.rid=`r${P}`});let o=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:s});a&&a(o.sender);let c=await this._pc.createOffer(),p=_e.parse(c.sdp);p.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let d=r.getLocalRtpCapabilities(p),l=this._getSendExtendedRtpCapabilities(d),u=yt.getSendingRtpParameters(e.kind,l);u.codecs=yt.reduceCodecs(u.codecs,i);let m=yt.getSendingRemoteRtpParameters(e.kind,l);m.codecs=yt.reduceCodecs(m.codecs,i),this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:p});let f=(0,bd.parse)((s??[{}])[0].scalabilityMode);E.debug("send() | calling pc.setLocalDescription() [offer:%o]",c),await this._pc.setLocalDescription(c);let h=o.mid;u.mid=h,p=_e.parse(this._pc.localDescription.sdp);let g=p.media[p.media.length-1];if(u.rtcp.cname=pr.getCname({offerMediaObject:g}),u.msid=`${t??this._sendStream.id} ${e.id}`,!s)u.encodings=Ei.getRtpEncodings({offerMediaObject:g,codecs:u.codecs});else if(s.length===1){let b=Ei.getRtpEncodings({offerMediaObject:g,codecs:u.codecs});Object.assign(b[0],s[0]),u.encodings=b}else u.encodings=s;if(u.encodings.length>1&&(u.codecs[0].mimeType.toLowerCase()==="video/vp8"||u.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let b of u.encodings)b.scalabilityMode?b.scalabilityMode=`L1T${f.temporalLayers}`:b.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:g,offerRtpParameters:u,answerRtpParameters:m,codecOptions:n});let v={type:"answer",sdp:this._remoteSdp.getSdp()};return E.debug("send() | calling pc.setRemoteDescription() [answer:%o]",v),await this._pc.setRemoteDescription(v),this._mapMidTransceiver.set(h,o),{localId:h,rtpParameters:u,rtpSender:o.sender}}async stopSending(e){if(this.assertSendDirection(),E.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated transceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.disableMediaSection(t.mid);let s=await this._pc.createOffer();E.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),E.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let s=await this._pc.createOffer();E.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),E.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let s=await this._pc.createOffer();E.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?E.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):E.debug("replaceTrack() [localId:%s, no track]",e);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");await s.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),E.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated transceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();E.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),E.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();E.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};E.debug("sendDataChannel() [options:%o]",t);let s=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Pi.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),a=_e.parse(i.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:a}),E.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:s,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],s=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;E.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);s.set(c,u);let{msidStreamId:m}=Rd.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??m??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let o of e){let{trackId:c,onRtpReceiver:p}=o;if(p){let d=s.get(c),l=this._pc.getTransceivers().find(u=>u.mid===d);if(!l)throw new Error("transceiver not found");p(l.receiver)}}let i=await this._pc.createAnswer(),a=_e.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=s.get(c),l=a.media.find(u=>String(u.mid)===d);pr.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l}),i={type:"answer",sdp:_e.write(a)}}this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:a}),E.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let o of e){let{trackId:c}=o,p=s.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(!d)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){E.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();E.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){E.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();E.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){E.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();E.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async getReceiverStats(e){this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:s,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};E.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(s,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),m=_e.parse(u.sdp),f=m.media.find(h=>h.type==="application");f.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:m}),u={type:"answer",sdp:_e.write(m)},E.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=_e.parse(this._pc.localDescription.sdp));let s=pr.extractDtlsParameters({sdpObject:t});s.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:s},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Ti.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};lr.Firefox120=fs});var Mi=C(ur=>{"use strict";Object.defineProperty(ur,"__esModule",{value:!0});ur.Safari12=void 0;var X=ge(),Cd=V(),Td=U(),bt=ie(),Ed=Q(),kd=Le(),Pd=Ze(),St=et(),Di=tt(),ms=rt(),R=new Td.Logger("Safari12"),Ii="Safari12",Li={OS:65535,MIS:65535},gs=class r extends Cd.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Ii,factory:e=>new r(e),getNativeRtpCapabilities:async({direction:e})=>{R.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let s=await t.createOffer();try{t.close()}catch{}t=void 0;let n=X.parse(s.sdp);return r.getLocalRtpCapabilities(n)}catch(s){try{t?.close()}catch{}throw t=void 0,s}},getNativeSctpCapabilities:async()=>(R.debug("getNativeSctpCapabilities()"),{numStreams:Li})}}static getLocalRtpCapabilities(e,t=[]){let s=St.extractRtpCapabilities({sdpObject:e});bt.validateAndNormalizeRtpCapabilities(s),ms.addNackSupportForOpus(s);for(let n of t)ms.addHeaderExtensionSupport(s,n);return s}constructor({direction:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),R.debug("constructor()"),this._direction=e,this._remoteSdp=new Pd.RemoteSdp({iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=p,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)}),this._pc.addEventListener("icecandidateerror",d=>{this.emit("@icecandidateerror",d)}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(R.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Ii}close(){if(R.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),R.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),R.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});R.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let s={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();R.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:s,codecOptions:n,headerExtensionOptions:i,codec:a,onRtpSender:o}){this.assertNotClosed(),this.assertSendDirection(),R.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t);let c=this._remoteSdp.getNextMediaSectionIdx(),p=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream]});o&&o(p.sender);let d=await this._pc.createOffer(),l=X.parse(d.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let u=[];u.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let m=r.getLocalRtpCapabilities(l,u),f=this._getSendExtendedRtpCapabilities(m),h=bt.getSendingRtpParameters(e.kind,f);h.codecs=bt.reduceCodecs(h.codecs,a);let g=bt.getSendingRemoteRtpParameters(e.kind,f);g.codecs=bt.reduceCodecs(g.codecs,a);let v;this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l});let b=(0,kd.parse)((s??[{}])[0].scalabilityMode);s&&s.length>1&&(R.debug("send() | enabling legacy simulcast"),l=X.parse(d.sdp),v=l.media[c.idx],Di.addLegacySimulcast({offerMediaObject:v,numStreams:s.length}),d={type:"offer",sdp:X.write(l)}),i?.absCaptureTime&&(v=l.media[c.idx],St.addHeaderExtension({offerMediaObject:v,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(k=>k.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:X.write(l)}),R.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let P=p.mid;if(h.mid=P,l=X.parse(this._pc.localDescription.sdp),v=l.media[c.idx],h.rtcp.cname=St.getCname({offerMediaObject:v}),h.msid=`${t??this._sendStream.id} ${e.id}`,h.encodings=Di.getRtpEncodings({offerMediaObject:v,codecs:h.codecs}),s)for(let k=0;k<h.encodings.length;++k)s[k]&&Object.assign(h.encodings[k],s[k]);if(h.encodings.length>1&&(h.codecs[0].mimeType.toLowerCase()==="video/vp8"||h.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let k of h.encodings)k.scalabilityMode?k.scalabilityMode=`L1T${b.temporalLayers}`:k.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:v,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:g,codecOptions:n});let x={type:"answer",sdp:this._remoteSdp.getSdp()};return R.debug("send() | calling pc.setRemoteDescription() [answer:%o]",x),await this._pc.setRemoteDescription(x),this._mapMidTransceiver.set(P,p),{localId:P,rtpParameters:h,rtpSender:p.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;R.debug("stopSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let n=await this._pc.createOffer();R.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),R.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let s=await this._pc.createOffer();R.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),R.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let s=await this._pc.createOffer();R.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?R.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):R.debug("replaceTrack() [localId:%s, no track]",e);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");await s.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),R.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();R.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),R.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();R.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};R.debug("sendDataChannel() [options:%o]",t);let s=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Li.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),a=X.parse(i.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),R.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:s,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],s=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;R.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);s.set(c,u);let{msidStreamId:m}=ms.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??m??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let o of e){let{trackId:c,onRtpReceiver:p}=o;if(p){let d=s.get(c),l=this._pc.getTransceivers().find(u=>u.mid===d);if(!l)throw new Error("transceiver not found");p(l.receiver)}}let i=await this._pc.createAnswer(),a=X.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=s.get(c),l=a.media.find(u=>String(u.mid)===d);St.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l})}i={type:"answer",sdp:X.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),R.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let o of e){let{trackId:c}=o,p=s.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(!d)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){R.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();R.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){R.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();R.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){R.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();R.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:s,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};R.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(s,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),m=X.parse(u.sdp),f=m.media.find(h=>h.type==="application");f.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),u={type:"answer",sdp:X.write(m)},R.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=X.parse(this._pc.localDescription.sdp));let s=St.extractDtlsParameters({sdpObject:t});s.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:s},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Ed.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};ur.Safari12=gs});var Ni=C(hr=>{"use strict";Object.defineProperty(hr,"__esModule",{value:!0});hr.ReactNative106=void 0;var Z=ge(),xd=V(),Dd=U(),Rt=ie(),Id=Q(),Ld=Le(),Md=Ze(),Ct=et(),_s=tt(),vs=rt(),y=new Dd.Logger("ReactNative106"),Oi="ReactNative106",Ai={OS:65535,MIS:65535},ws=class r extends xd.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Oi,factory:e=>new r(e),getNativeRtpCapabilities:async({direction:e})=>{y.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let s=await t.createOffer();try{t.close()}catch{}t=void 0;let n=Z.parse(s.sdp);return r.getLocalRtpCapabilities(n)}catch(s){try{t?.close()}catch{}throw t=void 0,s}},getNativeSctpCapabilities:async()=>(y.debug("getNativeSctpCapabilities()"),{numStreams:Ai})}}static getLocalRtpCapabilities(e,t=[]){let s=Ct.extractRtpCapabilities({sdpObject:e});Rt.validateAndNormalizeRtpCapabilities(s),vs.addNackSupportForOpus(s);for(let n of t)vs.addHeaderExtensionSupport(s,n);return s}constructor({direction:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),y.debug("constructor()"),this._direction=e,this._remoteSdp=new Md.RemoteSdp({iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=p,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(y.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Oi}close(){if(y.debug("close()"),!this._closed){this._closed=!0,this._sendStream.release(!1);try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),y.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),y.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});y.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let s={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();y.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:s,codecOptions:n,headerExtensionOptions:i,codec:a,onRtpSender:o}){this.assertNotClosed(),this.assertSendDirection(),y.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),s&&s.length>1&&s.forEach((L,Ae)=>{L.rid=`r${Ae}`});let c=this._remoteSdp.getNextMediaSectionIdx(),p=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:s});o&&o(p.sender);let d=await this._pc.createOffer(),l=Z.parse(d.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let u=[];u.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let m=r.getLocalRtpCapabilities(l,u),f=this._getSendExtendedRtpCapabilities(m),h=Rt.getSendingRtpParameters(e.kind,f);h.codecs=Rt.reduceCodecs(h.codecs,a);let g=Rt.getSendingRemoteRtpParameters(e.kind,f);g.codecs=Rt.reduceCodecs(g.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l});let v=!1,b=(0,Ld.parse)((s??[{}])[0].scalabilityMode),P;s?.length===1&&b.spatialLayers>1&&h.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(y.debug("send() | enabling legacy simulcast for VP9 SVC"),v=!0,l=Z.parse(d.sdp),P=l.media[c.idx],_s.addLegacySimulcast({offerMediaObject:P,numStreams:b.spatialLayers}),d={type:"offer",sdp:Z.write(l)}),i?.absCaptureTime&&(P=l.media[c.idx],Ct.addHeaderExtension({offerMediaObject:P,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(L=>L.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:Z.write(l)}),y.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let x=p.mid??void 0;if(x||y.warn("send() | missing transceiver.mid (bug in react-native-webrtc, using a workaround"),h.mid=x,l=Z.parse(this._pc.localDescription.sdp),P=l.media[c.idx],h.rtcp.cname=Ct.getCname({offerMediaObject:P}),h.msid=`${t??this._sendStream.id} ${e.id}`,!s)h.encodings=_s.getRtpEncodings({offerMediaObject:P,codecs:h.codecs});else if(s.length===1){let L=_s.getRtpEncodings({offerMediaObject:P,codecs:h.codecs});Object.assign(L[0],s[0]),v&&(L=[L[0]]),h.encodings=L}else h.encodings=s;if(h.encodings.length>1&&(h.codecs[0].mimeType.toLowerCase()==="video/vp8"||h.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let L of h.encodings)L.scalabilityMode?L.scalabilityMode=`L1T${b.temporalLayers}`:L.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:P,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:g,codecOptions:n});let k={type:"answer",sdp:this._remoteSdp.getSdp()};return y.debug("send() | calling pc.setRemoteDescription() [answer:%o]",k),await this._pc.setRemoteDescription(k),x||(x=p.mid,h.mid=x),this._mapMidTransceiver.set(x,p),{localId:x,rtpParameters:h,rtpSender:p.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;y.debug("stopSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let n=await this._pc.createOffer();y.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),y.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let s=await this._pc.createOffer();y.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),y.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let s=await this._pc.createOffer();y.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?y.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):y.debug("replaceTrack() [localId:%s, no track]",e);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");await s.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),y.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();y.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),y.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();y.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};y.debug("sendDataChannel() [options:%o]",t);let s=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Ai.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),a=Z.parse(i.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),y.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:s,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],s=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;y.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);s.set(c,u);let{msidStreamId:m}=vs.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??m??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let o of e){let{trackId:c,onRtpReceiver:p}=o;if(p){let d=s.get(c),l=this._pc.getTransceivers().find(u=>u.mid===d);if(!l)throw new Error("transceiver not found");p(l.receiver)}}let i=await this._pc.createAnswer(),a=Z.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=s.get(c),l=a.media.find(u=>String(u.mid)===d);Ct.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l})}i={type:"answer",sdp:Z.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),y.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let o of e){let{trackId:c}=o,p=s.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(d)this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){y.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();y.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){y.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();y.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){y.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();y.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:s,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};y.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(s,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),m=Z.parse(u.sdp),f=m.media.find(h=>h.type==="application");f.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),u={type:"answer",sdp:Z.write(m)},y.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=Z.parse(this._pc.localDescription.sdp));let s=Ct.extractDtlsParameters({sdpObject:t});s.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:s},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Id.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};hr.ReactNative106=ws});var $i=C(st=>{"use strict";Object.defineProperty(st,"__esModule",{value:!0});st.Device=void 0;st.detectDevice=ji;st.detectDeviceAsync=Fi;var Od=U(),Ad=V(),Te=Q(),fr=Pe(),G=ie(),Nd=ai(),jd=bi(),Fd=Ci(),qd=xi(),$d=Mi(),Ud=Ni(),w=new Od.Logger("Device");function ji(r,e){return w.debug("detectDevice()"),!r&&typeof navigator=="object"&&(r=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),qi(r,e)}async function Fi(r,e){return w.debug("detectDeviceAsync()"),!r&&typeof navigator=="object"&&(r=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),qi(r,e)}var ys=class r{_handlerFactory;_handlerName;_loaded=!1;_getSendExtendedRtpCapabilities;_recvRtpCapabilities;_sendRtpCapabilities;_canProduceByKind={audio:!1,video:!1};_sctpCapabilities;_observer=new Ad.EnhancedEventEmitter;static async factory({handlerName:e,handlerFactory:t}={}){if(w.debug("factory()"),e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(!e&&!t&&(e=await Fi(),!e))throw new Te.UnsupportedError("device not supported");return new r({handlerName:e,handlerFactory:t})}constructor({handlerName:e,handlerFactory:t}={}){if(w.debug("constructor()"),e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(t)this._handlerFactory=t;else{if(e)w.debug("constructor() | handler given: %s",e);else if(e=ji(),e)w.debug("constructor() | detected handler: %s",e);else throw new Te.UnsupportedError("device not supported");switch(e){case"Chrome111":{this._handlerFactory=jd.Chrome111.createFactory();break}case"Chrome74":{this._handlerFactory=Fd.Chrome74.createFactory();break}case"Firefox120":{this._handlerFactory=qd.Firefox120.createFactory();break}case"Safari12":{this._handlerFactory=$d.Safari12.createFactory();break}case"ReactNative106":{this._handlerFactory=Ud.ReactNative106.createFactory();break}default:throw new TypeError(`unknown handlerName "${e}"`)}}this._handlerName=this._handlerFactory.name}get handlerName(){return this._handlerName}get loaded(){return this._loaded}get rtpCapabilities(){return this.recvRtpCapabilities}get recvRtpCapabilities(){if(!this._loaded)throw new Te.InvalidStateError("not loaded");return this._recvRtpCapabilities}get sendRtpCapabilities(){if(!this._loaded)throw new Te.InvalidStateError("not loaded");return this._sendRtpCapabilities}get sctpCapabilities(){if(!this._loaded)throw new Te.InvalidStateError("not loaded");return this._sctpCapabilities}get observer(){return this._observer}async load({routerRtpCapabilities:e,preferLocalCodecsOrder:t=!1}){if(w.debug("load() [routerRtpCapabilities:%o]",e),this._loaded)throw new Te.InvalidStateError("already loaded");let s=fr.clone(e);G.validateAndNormalizeRtpCapabilities(s);let{getNativeRtpCapabilities:n,getNativeSctpCapabilities:i}=this._handlerFactory,a=fr.clone(await n({direction:"recvonly"}));w.debug("load() | got native receiving RTP capabilities:%o",a),G.validateAndNormalizeRtpCapabilities(a);let o=fr.clone(await n({direction:"sendonly"}));w.debug("load() | got native sending RTP capabilities:%o",o),G.validateAndNormalizeRtpCapabilities(o),this._getSendExtendedRtpCapabilities=d=>fr.clone(G.getExtendedRtpCapabilities(d,s,t));let c=G.getExtendedRtpCapabilities(a,s,!1);this._recvRtpCapabilities=G.getRecvRtpCapabilities(c),w.debug("load() | got receiving RTP capabilities:%o",this._recvRtpCapabilities),G.validateAndNormalizeRtpCapabilities(this._recvRtpCapabilities);let p=G.getExtendedRtpCapabilities(o,s,t);this._sendRtpCapabilities=G.getSendRtpCapabilities(p),w.debug("load() | got sending RTP capabilities:%o",this._sendRtpCapabilities),G.validateAndNormalizeRtpCapabilities(this._sendRtpCapabilities),this._canProduceByKind.audio=G.canSend("audio",this._sendRtpCapabilities),this._canProduceByKind.video=G.canSend("video",this._sendRtpCapabilities),this._sctpCapabilities=await i(),G.validateSctpCapabilities(this._sctpCapabilities),w.debug("load() | got native SCTP capabilities:%o",this._sctpCapabilities),w.debug("load() succeeded"),this._loaded=!0}canProduce(e){if(this._loaded){if(e!=="audio"&&e!=="video")throw new TypeError(`invalid kind "${e}"`)}else throw new Te.InvalidStateError("not loaded");return this._canProduceByKind[e]}createSendTransport({id:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:p}){return w.debug("createSendTransport()"),this.createTransport({direction:"send",id:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:p})}createRecvTransport({id:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:p}){return w.debug("createRecvTransport()"),this.createTransport({direction:"recv",id:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:p})}createTransport({direction:e,id:t,iceParameters:s,iceCandidates:n,dtlsParameters:i,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:p,appData:d}){if(this._loaded){if(typeof t!="string")throw new TypeError("missing id");if(typeof s!="object")throw new TypeError("missing iceParameters");if(Array.isArray(n)){if(typeof i!="object")throw new TypeError("missing dtlsParameters");if(a&&typeof a!="object")throw new TypeError("wrong sctpParameters");if(d&&typeof d!="object")throw new TypeError("if given, appData must be an object")}else throw new TypeError("missing iceCandidates")}else throw new Te.InvalidStateError("not loaded");let l=new Nd.Transport({direction:e,id:t,iceParameters:s,iceCandidates:n,dtlsParameters:i,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:p,appData:d,handlerFactory:this._handlerFactory,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities,recvRtpCapabilities:this._recvRtpCapabilities,canProduceByKind:this._canProduceByKind});return this._observer.safeEmit("newtransport",l),l}};st.Device=ys;function qi(r,e){w.debug('detectDeviceImpl() [userAgent:"%s", userAgentData:%o]',r,e);let t=zd(r,e);if(t){if(t>=111)return w.debug("detectDeviceImpl() | using Chrome111 handler"),"Chrome111";if(t>=74)return w.debug("detectDeviceImpl() | using Chrome74 handler"),"Chrome74";w.warn("detectDeviceImpl() | unsupported Chromium based browser/version");return}let s=Bd(r);if(s){if(s>=120)return w.debug("detectDeviceImpl() | using Firefox120 handler"),"Firefox120";w.warn("detectDeviceImpl() | unsupported Firefox browser/version");return}let n=Wd(r);if(n){if(n>=605)return w.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";w.warn("detectDeviceImpl() | unsupported desktop Safari browser/version");return}let i=Hd(r);if(i){if(i>=605)return w.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";w.warn("detectDeviceImpl() | unsupported iOS Safari based browser/version");return}if(Tt()){if(typeof RTCPeerConnection<"u"&&typeof RTCRtpTransceiver<"u")return w.debug("detectDeviceImpl() | using ReactNative106 handler"),"ReactNative106";w.warn("detectDeviceImpl() | unsupported react-native-webrtc version without RTCPeerConnection or RTCRtpTransceiver, forgot to call registerGlobals() on it?");return}w.warn('detectDeviceImpl() | device not supported [userAgent:"%s", userAgentData:%o]',r,e)}function zd(r,e){if(w.debug("getChromiumMajorVersion()"),mr(r,e)){w.debug("getChromiumMajorVersion() | this is iOS => undefined");return}if(Tt()){w.debug("getChromiumMajorVersion() | this is React-Native => undefined");return}if(e){let n=(Array.isArray(e.brands)?e.brands:[]).find(i=>i.brand==="Chromium");if(n){let i=Number(n.version);return w.debug(`getChromiumMajorVersion() | Chromium major version based on NavigatorUAData => ${i}`),i}}let t=r?.match(/\b(?:Chrome|Chromium)\/(\w+)/i);if(t?.[1]){let s=Number(t[1]);return w.debug(`getChromiumMajorVersion() | Chromium major version based on User-Agent => ${s}`),s}w.debug("getChromiumMajorVersion() | this is not Chromium => undefined")}function Bd(r){if(w.debug("getFirefoxMajorVersion()"),mr(r)){w.debug("getFirefoxMajorVersion() | this is iOS => undefined");return}if(Tt()){w.debug("getFirefoxMajorVersion() | this is React-Native => undefined");return}let e=r?.match(/\bFirefox\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return w.debug(`getFirefoxMajorVersion() | Firefox major version based on User-Agent => ${t}`),t}w.debug("getFirefoxMajorVersion() | this is not Firefox => undefined")}function Wd(r){if(w.debug("getMacOSWebKitMajorVersion()"),mr(r)){w.debug("getMacOSWebKitMajorVersion() | this is iOS => undefined");return}if(Tt()){w.debug("getMacOSWebKitMajorVersion() | this is React-Native => undefined");return}if(!(r&&/\bSafari\b/i.test(r)&&!/\bChrome\b/i.test(r)&&!/\bChromium\b/i.test(r)&&!/\bFirefox\b/i.test(r))){w.debug("getMacOSWebKitMajorVersion() | this is not Safari => undefined");return}let t=r.match(/AppleWebKit\/(\w+)/i);if(t?.[1]){let s=Number(t[1]);return w.debug(`getMacOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${s}`),s}w.debug("getMacOSWebKitMajorVersion() | this is not WebKit => undefined")}function Hd(r){if(w.debug("getIOSWebKitMajorVersion()"),!mr(r)){w.debug("getIOSWebKitMajorVersion() | this is not iOS => undefined");return}if(Tt()){w.debug("getIOSWebKitMajorVersion() | this is React-Native => undefined");return}let e=r?.match(/AppleWebKit\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return w.debug(`getIOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${t}`),t}w.debug("getIOSWebKitMajorVersion() | this is not WebKit => undefined")}function mr(r,e){return w.debug("isIOS()"),e?.platform==="iOS"?(w.debug("isIOS() | this is iOS based on NavigatorUAData.platform => true"),!0):e?.platform?(w.debug("isIOS() | this is not iOS based on NavigatorUAData.platform => false"),!1):r&&/iPad|iPhone|iPod/.test(r)?(w.debug("isIOS() | this is iOS based on User-Agent => true"),!0):typeof navigator=="object"&&navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1?(w.debug("isIOS() | this is iPadOS 13+ based on User-Agent => true"),!0):(w.debug("isIOS() | this is not iOS => false"),!1)}function Tt(){return w.debug("isReactNative()"),typeof navigator=="object"&&navigator.product==="ReactNative"?(w.debug("isReactNative() | this is React-Native based on navigator.product"),!0):(w.debug("isReactNative() | this is not React-Native => false"),!1)}});var zi=C(Ui=>{"use strict";var Oe=256,_r=[],gr;for(;Oe--;)_r[Oe]=(Oe+256).toString(16).substring(1);function Vd(){var r=0,e,t="";if(!gr||Oe+16>256){for(gr=Array(r=256);r--;)gr[r]=256*Math.random()|0;r=Oe=0}for(;r<16;r++)e=gr[Oe+r],r==6?t+=_r[e&15|64]:r==8?t+=_r[e&63|128]:t+=_r[e],r&1&&r>1&&r<11&&(t+="-");return Oe++,t}Ui.v4=Vd});var Bi=C(vr=>{"use strict";Object.defineProperty(vr,"__esModule",{value:!0});vr.FakeEventTarget=void 0;var bs=class{listeners={};addEventListener(e,t,s){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof s=="object"&&s.once===!0}))}removeEventListener(e,t,s){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(n=>n.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new Error("invalid event object");let t=this.listeners[e.type];if(!t)return!0;for(let s of[...t]){try{s.callback.call(this,e)}catch(n){setTimeout(()=>{throw n},0)}s.once&&this.removeEventListener(e.type,s.callback)}return!e.defaultPrevented}};vr.FakeEventTarget=bs});var Wi=C(wr=>{"use strict";Object.defineProperty(wr,"__esModule",{value:!0});wr.FakeEvent=void 0;var Ss=class{NONE=0;CAPTURING_PHASE=1;AT_TARGET=2;BUBBLING_PHASE=3;type;bubbles;cancelable;defaultPrevented=!1;composed=!1;currentTarget=null;eventPhase=this.NONE;isTrusted=!0;target=null;timeStamp=0;cancelBubble=!1;returnValue=!0;srcElement=null;constructor(e,t={}){this.type=e,this.bubbles=t.bubbles??!1,this.cancelable=t.cancelable??!1}preventDefault(){this.cancelable&&(this.defaultPrevented=!0)}stopPropagation(){}stopImmediatePropagation(){}composedPath(){return[]}initEvent(e,t,s){}};wr.FakeEvent=Ss});var Hi=C(Rs=>{"use strict";Object.defineProperty(Rs,"__esModule",{value:!0});Rs.clone=Gd;function Gd(r){if(r!==void 0)return Number.isNaN(r)?NaN:typeof structuredClone=="function"?structuredClone(r):JSON.parse(JSON.stringify(r))}});var Gi=C(br=>{"use strict";Object.defineProperty(br,"__esModule",{value:!0});br.FakeMediaStreamTrack=void 0;var Vi=zi(),Kd=Bi(),nt=Wi(),yr=Hi(),Cs=class r extends Kd.FakeEventTarget{#m;#l;#u;#e;#r;#t;#s;#h;#n;#f;#i;#a=null;#o=null;#c=null;#d=null;#p=null;constructor({kind:e,id:t,label:s,contentHint:n,enabled:i,muted:a,readyState:o,capabilities:c,constraints:p,settings:d,data:l}){super(),this.#m=t??(0,Vi.v4)(),this.#l=e,this.#u=s??"",this.#s=n??"",this.#r=i??!0,this.#t=a??!1,this.#e=o??"live",this.#h=c??{},this.#n=p??{},this.#f=d??{},this.#i=l??{}}get id(){return this.#m}get kind(){return this.#l}get label(){return this.#u}get contentHint(){return this.#s}set contentHint(e){this.#s=e}get enabled(){return this.#r}set enabled(e){let t=this.#r!==e;this.#r=e,t&&this.dispatchEvent(new nt.FakeEvent("enabledchange"))}get muted(){return this.#t}get readyState(){return this.#e}get data(){return this.#i}set data(e){this.#i=e}get onmute(){return this.#a}set onmute(e){this.#a&&this.removeEventListener("mute",this.#a),this.#a=e,e&&this.addEventListener("mute",e)}get onunmute(){return this.#o}set onunmute(e){this.#o&&this.removeEventListener("unmute",this.#o),this.#o=e,e&&this.addEventListener("unmute",e)}get onended(){return this.#c}set onended(e){this.#c&&this.removeEventListener("ended",this.#c),this.#c=e,e&&this.addEventListener("ended",e)}get onenabledchange(){return this.#d}set onenabledchange(e){this.#d&&this.removeEventListener("enabledchange",this.#d),this.#d=e,e&&this.addEventListener("enabledchange",e)}get onstopped(){return this.#p}set onstopped(e){this.#p&&this.removeEventListener("stopped",this.#p),this.#p=e,e&&this.addEventListener("stopped",e)}addEventListener(e,t,s){super.addEventListener(e,t,s)}removeEventListener(e,t,s){super.removeEventListener(e,t,s)}stop(){this.#e!=="ended"&&(this.#e="ended",this.dispatchEvent(new nt.FakeEvent("stopped")))}clone({id:e,data:t}={}){return new r({id:e??(0,Vi.v4)(),kind:this.#l,label:this.#u,contentHint:this.#s,enabled:this.#r,muted:this.#t,readyState:this.#e,capabilities:(0,yr.clone)(this.#h),constraints:(0,yr.clone)(this.#n),settings:(0,yr.clone)(this.#f),data:t??(0,yr.clone)(this.#i)})}getCapabilities(){return this.#h}getConstraints(){return this.#n}async applyConstraints(e={}){return this.#n=e,Promise.resolve()}getSettings(){return this.#f}remoteStop(){this.#e!=="ended"&&(this.#e="ended",this.dispatchEvent(new nt.FakeEvent("stopped")),this.dispatchEvent(new nt.FakeEvent("ended")))}remoteMute(){this.#t||(this.#t=!0,this.dispatchEvent(new nt.FakeEvent("mute")))}remoteUnmute(){this.#t&&(this.#t=!1,this.dispatchEvent(new nt.FakeEvent("unmute")))}};br.FakeMediaStreamTrack=Cs});var Ki=C(Sr=>{"use strict";Object.defineProperty(Sr,"__esModule",{value:!0});Sr.FakeEventTarget=void 0;var Ts=class{listeners={};addEventListener(e,t,s){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof s=="object"&&s.once===!0}))}removeEventListener(e,t,s){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(n=>n.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new Error("invalid event object");let t=this.listeners[e.type];if(!t)return!0;for(let s of[...t]){try{s.callback.call(this,e)}catch(n){setTimeout(()=>{throw n},0)}s.once&&this.removeEventListener(e.type,s.callback)}return!e.defaultPrevented}};Sr.FakeEventTarget=Ts});var Ji=C(Cr=>{"use strict";Object.defineProperty(Cr,"__esModule",{value:!0});Cr.FakeHandler=void 0;var Yd=Gi(),Qd=V(),Jd=U(),it=Pe(),Es=ie(),Qi=Q(),Xd=Ki(),q=new Jd.Logger("FakeHandler"),Yi="FakeHandler",ks=class r extends Qd.EnhancedEventEmitter{_closed=!1;_fakeParameters;_getSendExtendedRtpCapabilities;_cname=`CNAME-${it.generateRandomNumber()}`;_defaultSendStreamId=`${it.generateRandomNumber()}`;_transportReady=!1;_nextLocalId=1;_tracks=new Map;_nextSctpStreamId=0;static createFactory(e){return{name:Yi,factory:t=>new r(t,e),getNativeRtpCapabilities:async({direction:t})=>(q.debug("getNativeRtpCapabilities() [direction:%o]",t),r.getLocalRtpCapabilities(e)),getNativeSctpCapabilities:async()=>(q.debug("getNativeSctpCapabilities()"),e.generateNativeSctpCapabilities())}}static getLocalRtpCapabilities(e){let t=e.generateNativeRtpCapabilities();return Es.validateAndNormalizeRtpCapabilities(t),t}constructor({getSendExtendedRtpCapabilities:e},t){super(),q.debug("constructor()"),this._getSendExtendedRtpCapabilities=e,this._fakeParameters=t}get name(){return Yi}close(){q.debug("close()"),!this._closed&&(this._closed=!0,super.close())}setIceGatheringState(e){this.emit("@icegatheringstatechange",e)}setConnectionState(e){this.emit("@connectionstatechange",e)}async updateIceServers(e){this.assertNotClosed(),q.debug("updateIceServers()")}async restartIce(e){this.assertNotClosed(),q.debug("restartIce()")}async getTransportStats(){return this.assertNotClosed(),new Map}async send({track:e,streamId:t,encodings:s,codecOptions:n,codec:i}){this.assertNotClosed(),q.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),this._transportReady||await this.setupTransport({localDtlsRole:"server"});let a=r.getLocalRtpCapabilities(this._fakeParameters),o=this._getSendExtendedRtpCapabilities(a),c=Es.getSendingRtpParameters(e.kind,o);c.codecs=Es.reduceCodecs(c.codecs,i);let p=c.codecs.some(l=>/.+\/rtx$/i.test(l.mimeType));c.mid=`mid-${it.generateRandomNumber()}`,c.msid=`${t??"-"} ${e.id}`,s||(s=[{}]);for(let l of s)l.ssrc=it.generateRandomNumber(),p&&(l.rtx={ssrc:it.generateRandomNumber()});c.encodings=s,c.rtcp={cname:this._cname,reducedSize:!0,mux:!0},c.msid=`${t??this._defaultSendStreamId} ${e.id}`;let d=this._nextLocalId++;return this._tracks.set(d,e),{localId:String(d),rtpParameters:c}}async stopSending(e){if(q.debug("stopSending() [localId:%s]",e),!this._closed){if(!this._tracks.has(Number(e)))throw new Error("local track not found");this._tracks.delete(Number(e))}}async pauseSending(e){this.assertNotClosed()}async resumeSending(e){this.assertNotClosed()}async replaceTrack(e,t){this.assertNotClosed(),t?q.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):q.debug("replaceTrack() [localId:%s, no track]",e),this._tracks.delete(Number(e)),this._tracks.set(Number(e),t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),q.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),q.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t)}async getSenderStats(e){return this.assertNotClosed(),new Map}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this._transportReady||await this.setupTransport({localDtlsRole:"server"}),q.debug("sendDataChannel()");let t=new Rr({id:this._nextSctpStreamId++,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:e.label,protocol:e.protocol}),s={streamId:this._nextSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits};return{dataChannel:t,sctpStreamParameters:s}}async receive(e){this.assertNotClosed();let t=[];for(let s of e){let{trackId:n,kind:i}=s;this._transportReady||await this.setupTransport({localDtlsRole:"client"}),q.debug("receive() [trackId:%s, kind:%s]",n,i);let a=this._nextLocalId++,o=new Yd.FakeMediaStreamTrack({kind:i});this._tracks.set(a,o),t.push({localId:String(a),track:o})}return t}async stopReceiving(e){if(!this._closed)for(let t of e)q.debug("stopReceiving() [localId:%s]",t),this._tracks.delete(Number(t))}async pauseReceiving(e){this.assertNotClosed()}async resumeReceiving(e){this.assertNotClosed()}async getReceiverStats(e){return this.assertNotClosed(),new Map}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:s}){return this.assertNotClosed(),this._transportReady||await this.setupTransport({localDtlsRole:"client"}),q.debug("receiveDataChannel()"),{dataChannel:new Rr({id:e.streamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:t,protocol:s})}}getDataChannelMaxMessageSize(){return 5e5}async setupTransport({localDtlsRole:e,localSdpObject:t}){let s=it.clone(this._fakeParameters.generateLocalDtlsParameters());e&&(s.role=e),this.emit("@connectionstatechange","connecting"),await new Promise((n,i)=>this.emit("@connect",{dtlsParameters:s},n,i)),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new Qi.InvalidStateError("method called in a closed handler")}};Cr.FakeHandler=ks;var Rr=class extends Xd.FakeEventTarget{_id;_negotiated=!0;_ordered;_maxPacketLifeTime;_maxRetransmits;_label;_protocol;_readyState="connecting";_bufferedAmount=0;_bufferedAmountLowThreshold=0;_binaryType="arraybuffer";_onopen=null;_onclosing=null;_onclose=null;_onmessage=null;_onbufferedamountlow=null;_onerror=null;constructor({id:e,ordered:t=!0,maxPacketLifeTime:s=null,maxRetransmits:n=null,label:i="",protocol:a=""}){super(),q.debug(`constructor() [id:${e}, ordered:${t}, maxPacketLifeTime:${s}, maxRetransmits:${n}, label:${i}, protocol:${a}`),this._id=e,this._ordered=t,this._maxPacketLifeTime=s,this._maxRetransmits=n,this._label=i,this._protocol=a}get id(){return this._id}get negotiated(){return this._negotiated}get ordered(){return this._ordered}get maxPacketLifeTime(){return this._maxPacketLifeTime}get maxRetransmits(){return this._maxRetransmits}get label(){return this._label}get protocol(){return this._protocol}get readyState(){return this._readyState}get bufferedAmount(){return this._bufferedAmount}get bufferedAmountLowThreshold(){return this._bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._bufferedAmountLowThreshold=e}get binaryType(){return this._binaryType}set binaryType(e){this._binaryType=e}get onopen(){return this._onopen}set onopen(e){this._onopen&&this.removeEventListener("open",this._onopen),this._onopen=e,e&&this.addEventListener("open",e)}get onclosing(){return this._onclosing}set onclosing(e){this._onclosing&&this.removeEventListener("closing",this._onclosing),this._onclosing=e,e&&this.addEventListener("closing",e)}get onclose(){return this._onclose}set onclose(e){this._onclose&&this.removeEventListener("close",this._onclose),this._onclose=e,e&&this.addEventListener("close",e)}get onmessage(){return this._onmessage}set onmessage(e){this._onmessage&&this.removeEventListener("message",this._onmessage),this._onmessage=e,e&&this.addEventListener("message",e)}get onbufferedamountlow(){return this._onbufferedamountlow}set onbufferedamountlow(e){this._onbufferedamountlow&&this.removeEventListener("bufferedamountlow",this._onbufferedamountlow),this._onbufferedamountlow=e,e&&this.addEventListener("bufferedamountlow",e)}get onerror(){return this._onerror}set onerror(e){this._onerror&&this.removeEventListener("error",this._onerror),this._onerror=e,e&&this.addEventListener("error",e)}addEventListener(e,t,s){super.addEventListener(e,t,s)}removeEventListener(e,t,s){super.removeEventListener(e,t,s)}close(){["closing","closed"].includes(this._readyState)||(this._readyState="closed")}send(e){if(this._readyState!=="open")throw new Qi.InvalidStateError("not open")}}});var Xi=C(ne=>{"use strict";Object.defineProperty(ne,"__esModule",{value:!0});ne.generateRouterRtpCapabilities=Zd;ne.generateNativeRtpCapabilities=ep;ne.generateNativeSctpCapabilities=tp;ne.generateLocalDtlsParameters=rp;ne.generateTransportRemoteParameters=sp;ne.generateProducerRemoteParameters=np;ne.generateConsumerRemoteParameters=ip;ne.generateDataProducerRemoteParameters=ap;ne.generateDataConsumerRemoteParameters=op;var B=Pe();function K(){return String(B.generateRandomNumber())}function Zd(){return B.deepFreeze({codecs:[{mimeType:"audio/opus",kind:"audio",preferredPayloadType:100,clockRate:48e3,channels:2,rtcpFeedback:[{type:"transport-cc"}],parameters:{useinbandfec:1,foo:"bar"}},{mimeType:"video/VP8",kind:"video",preferredPayloadType:101,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"x-google-start-bitrate":1500}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:102,clockRate:9e4,rtcpFeedback:[],parameters:{apt:101}},{mimeType:"video/H264",kind:"video",preferredPayloadType:103,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"level-asymmetry-allowed":1,"packetization-mode":1,"profile-level-id":"42e01f"}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:104,clockRate:9e4,rtcpFeedback:[],parameters:{apt:103}},{mimeType:"video/VP9",kind:"video",preferredPayloadType:105,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"profile-id":0,"x-google-start-bitrate":1500}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:106,clockRate:9e4,rtcpFeedback:[],parameters:{apt:105}}],headerExtensions:[{kind:"audio",uri:"urn:ietf:params:rtp-hdrext:sdes:mid",preferredId:1,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:mid",preferredId:1,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id",preferredId:2,preferredEncrypt:!1,direction:"recvonly"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id",preferredId:3,preferredEncrypt:!1,direction:"recvonly"},{kind:"audio",uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",preferredId:4,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",preferredId:4,preferredEncrypt:!1,direction:"sendrecv"},{kind:"audio",uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",preferredId:5,preferredEncrypt:!1,direction:"recvonly"},{kind:"video",uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",preferredId:5,preferredEncrypt:!1,direction:"sendrecv"},{kind:"audio",uri:"urn:ietf:params:rtp-hdrext:ssrc-audio-level",preferredId:10,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:3gpp:video-orientation",preferredId:11,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:toffset",preferredId:12,preferredEncrypt:!1,direction:"sendrecv"}]})}function ep(){return{codecs:[{mimeType:"audio/opus",kind:"audio",preferredPayloadType:111,clockRate:48e3,channels:2,rtcpFeedback:[{type:"transport-cc"}],parameters:{minptime:10,useinbandfec:1}},{mimeType:"audio/ISAC",kind:"audio",preferredPayloadType:103,clockRate:16e3,channels:1,rtcpFeedback:[{type:"transport-cc"}],parameters:{}},{mimeType:"audio/CN",kind:"audio",preferredPayloadType:106,clockRate:32e3,channels:1,rtcpFeedback:[{type:"transport-cc"}],parameters:{}},{mimeType:"audio/foo",kind:"audio",preferredPayloadType:107,clockRate:9e4,channels:4,rtcpFeedback:[{type:"foo-qwe-qwe"}],parameters:{foo:"lalala"}},{mimeType:"video/BAZCODEC",kind:"video",preferredPayloadType:100,clockRate:9e4,rtcpFeedback:[{type:"foo"},{type:"transport-cc"},{type:"ccm",parameter:"fir"},{type:"nack"},{type:"nack",parameter:"pli"}],parameters:{baz:"1234abcd"}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:101,clockRate:9e4,rtcpFeedback:[],parameters:{apt:100}},{mimeType:"video/VP8",kind:"video",preferredPayloadType:96,clockRate:9e4,rtcpFeedback:[{type:"goog-remb"},{type:"transport-cc"},{type:"ccm",parameter:"fir"},{type:"nack"},{type:"nack",parameter:"pli"}],parameters:{baz:"1234abcd"}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:97,clockRate:9e4,rtcpFeedback:[],parameters:{apt:96}},{mimeType:"video/VP9",kind:"video",preferredPayloadType:98,clockRate:9e4,rtcpFeedback:[{type:"goog-remb"},{type:"transport-cc"},{type:"ccm",parameter:"fir"},{type:"nack"},{type:"nack",parameter:"pli"}],parameters:{"profile-id":0}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:99,clockRate:9e4,rtcpFeedback:[],parameters:{apt:98}}],headerExtensions:[{kind:"audio",uri:"urn:ietf:params:rtp-hdrext:sdes:mid",preferredId:1},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:mid",preferredId:1},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:toffset",preferredId:2},{kind:"video",uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",preferredId:3},{kind:"video",uri:"urn:3gpp:video-orientation",preferredId:4},{kind:"video",uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",preferredId:5},{kind:"video",uri:"http://www.webrtc.org/experiments/rtp-hdrext/playout-delay",preferredId:6},{kind:"video",uri:"http://www.webrtc.org/experiments/rtp-hdrext/video-content-type",preferredId:7},{kind:"video",uri:"http://www.webrtc.org/experiments/rtp-hdrext/video-timing",preferredId:8},{kind:"audio",uri:"urn:ietf:params:rtp-hdrext:ssrc-audio-level",preferredId:10}]}}function tp(){return B.deepFreeze({numStreams:{OS:2048,MIS:2048}})}function rp(){return B.deepFreeze({fingerprints:[{algorithm:"sha-256",value:"82:5A:68:3D:36:C3:0A:DE:AF:E7:32:43:D2:88:83:57:AC:2D:65:E5:80:C4:B6:FB:AF:1A:A0:21:9F:6D:0C:AD"}],role:"auto"})}function sp(){return{id:K(),iceParameters:B.deepFreeze({iceLite:!0,password:"yku5ej8nvfaor28lvtrabcx0wkrpkztz",usernameFragment:"h3hk1iz6qqlnqlne"}),iceCandidates:B.deepFreeze([{foundation:"udpcandidate",address:"9.9.9.9",ip:"9.9.9.9",port:40533,priority:1078862079,protocol:"udp",type:"host",tcpType:"passive"},{foundation:"udpcandidate",address:"9.9.9.9",ip:"9:9:9:9:9:9",port:41333,priority:1078862089,protocol:"udp",type:"host",tcpType:"passive"}]),dtlsParameters:B.deepFreeze({fingerprints:[{algorithm:"sha-256",value:"A9:F4:E0:D2:74:D3:0F:D9:CA:A5:2F:9F:7F:47:FA:F0:C4:72:DD:73:49:D0:3B:14:90:20:51:30:1B:90:8E:71"},{algorithm:"sha-384",value:"03:D9:0B:87:13:98:F6:6D:BC:FC:92:2E:39:D4:E1:97:32:61:30:56:84:70:81:6E:D1:82:97:EA:D9:C1:21:0F:6B:C5:E7:7F:E1:97:0C:17:97:6E:CF:B3:EF:2E:74:B0"},{algorithm:"sha-512",value:"84:27:A4:28:A4:73:AF:43:02:2A:44:68:FF:2F:29:5C:3B:11:9A:60:F4:A8:F0:F5:AC:A0:E3:49:3E:B1:34:53:A9:85:CE:51:9B:ED:87:5E:B8:F4:8E:3D:FA:20:51:B8:96:EE:DA:56:DC:2F:5C:62:79:15:23:E0:21:82:2B:2C"}],role:"auto"}),sctpParameters:B.deepFreeze({port:5e3,OS:2048,MIS:2048,maxMessageSize:2e6})}}function np(){return B.deepFreeze({id:K()})}function ip({id:r,codecMimeType:e}={}){switch(e){case"audio/opus":return{id:r??K(),producerId:K(),kind:"audio",rtpParameters:B.deepFreeze({codecs:[{mimeType:"audio/opus",payloadType:100,clockRate:48e3,channels:2,rtcpFeedback:[{type:"transport-cc"}],parameters:{useinbandfec:1,foo:"bar"}}],encodings:[{ssrc:46687003}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:ietf:params:rtp-hdrext:ssrc-audio-level",id:10}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"audio/ISAC":return{id:r??K(),producerId:K(),kind:"audio",rtpParameters:B.deepFreeze({codecs:[{mimeType:"audio/ISAC",payloadType:111,clockRate:16e3,channels:1,rtcpFeedback:[{type:"transport-cc"}],parameters:{}}],encodings:[{ssrc:46687004}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"video/VP8":return{id:r??K(),producerId:K(),kind:"video",rtpParameters:B.deepFreeze({codecs:[{mimeType:"video/VP8",payloadType:101,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"x-google-start-bitrate":1500}},{mimeType:"video/rtx",payloadType:102,clockRate:9e4,rtcpFeedback:[],parameters:{apt:101}}],encodings:[{ssrc:99991111,rtx:{ssrc:99991112}}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",id:4},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:3gpp:video-orientation",id:11},{uri:"urn:ietf:params:rtp-hdrext:toffset",id:12}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"video/H264":return{id:r??K(),producerId:K(),kind:"video",rtpParameters:B.deepFreeze({codecs:[{mimeType:"video/H264",payloadType:103,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"level-asymmetry-allowed":1,"packetization-mode":1,"profile-level-id":"42e01f"}},{mimeType:"video/rtx",payloadType:104,clockRate:9e4,rtcpFeedback:[],parameters:{apt:103}}],encodings:[{ssrc:99991113,rtx:{ssrc:99991114}}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",id:4},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:3gpp:video-orientation",id:11},{uri:"urn:ietf:params:rtp-hdrext:toffset",id:12}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};default:throw new TypeError(`unknown codecMimeType '${e}'`)}}function ap(){return B.deepFreeze({id:K()})}function op({id:r}={}){return{id:r??K(),dataProducerId:K(),sctpStreamParameters:B.deepFreeze({streamId:666,maxPacketLifeTime:5e3,maxRetransmits:void 0})}}});var cs=C(O=>{"use strict";Object.defineProperty(O,"__esModule",{value:!0});O.debug=O.testFakeParameters=O.FakeHandler=O.enhancedEvents=O.ortc=O.parseScalabilityMode=O.detectDeviceAsync=O.detectDevice=O.Device=O.version=O.types=void 0;var cp=pt();O.debug=cp.default;O.types=Rn();O.version="3.20.0";var Ps=$i();Object.defineProperty(O,"Device",{enumerable:!0,get:function(){return Ps.Device}});Object.defineProperty(O,"detectDevice",{enumerable:!0,get:function(){return Ps.detectDevice}});Object.defineProperty(O,"detectDeviceAsync",{enumerable:!0,get:function(){return Ps.detectDeviceAsync}});var dp=Le();Object.defineProperty(O,"parseScalabilityMode",{enumerable:!0,get:function(){return dp.parse}});O.ortc=ie();O.enhancedEvents=V();var pp=Ji();Object.defineProperty(O,"FakeHandler",{enumerable:!0,get:function(){return pp.FakeHandler}});O.testFakeParameters=Xi()});var ea=C((ru,xs)=>{"use strict";var lp=Object.prototype.hasOwnProperty,W="~";function Et(){}Object.create&&(Et.prototype=Object.create(null),new Et().__proto__||(W=!1));function up(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function Zi(r,e,t,s,n){if(typeof t!="function")throw new TypeError("The listener must be a function");var i=new up(t,s||r,n),a=W?W+e:e;return r._events[a]?r._events[a].fn?r._events[a]=[r._events[a],i]:r._events[a].push(i):(r._events[a]=i,r._eventsCount++),r}function Tr(r,e){--r._eventsCount===0?r._events=new Et:delete r._events[e]}function $(){this._events=new Et,this._eventsCount=0}$.prototype.eventNames=function(){var e=[],t,s;if(this._eventsCount===0)return e;for(s in t=this._events)lp.call(t,s)&&e.push(W?s.slice(1):s);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};$.prototype.listeners=function(e){var t=W?W+e:e,s=this._events[t];if(!s)return[];if(s.fn)return[s.fn];for(var n=0,i=s.length,a=new Array(i);n<i;n++)a[n]=s[n].fn;return a};$.prototype.listenerCount=function(e){var t=W?W+e:e,s=this._events[t];return s?s.fn?1:s.length:0};$.prototype.emit=function(e,t,s,n,i,a){var o=W?W+e:e;if(!this._events[o])return!1;var c=this._events[o],p=arguments.length,d,l;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),p){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,s),!0;case 4:return c.fn.call(c.context,t,s,n),!0;case 5:return c.fn.call(c.context,t,s,n,i),!0;case 6:return c.fn.call(c.context,t,s,n,i,a),!0}for(l=1,d=new Array(p-1);l<p;l++)d[l-1]=arguments[l];c.fn.apply(c.context,d)}else{var u=c.length,m;for(l=0;l<u;l++)switch(c[l].once&&this.removeListener(e,c[l].fn,void 0,!0),p){case 1:c[l].fn.call(c[l].context);break;case 2:c[l].fn.call(c[l].context,t);break;case 3:c[l].fn.call(c[l].context,t,s);break;case 4:c[l].fn.call(c[l].context,t,s,n);break;default:if(!d)for(m=1,d=new Array(p-1);m<p;m++)d[m-1]=arguments[m];c[l].fn.apply(c[l].context,d)}}return!0};$.prototype.on=function(e,t,s){return Zi(this,e,t,s,!1)};$.prototype.once=function(e,t,s){return Zi(this,e,t,s,!0)};$.prototype.removeListener=function(e,t,s,n){var i=W?W+e:e;if(!this._events[i])return this;if(!t)return Tr(this,i),this;var a=this._events[i];if(a.fn)a.fn===t&&(!n||a.once)&&(!s||a.context===s)&&Tr(this,i);else{for(var o=0,c=[],p=a.length;o<p;o++)(a[o].fn!==t||n&&!a[o].once||s&&a[o].context!==s)&&c.push(a[o]);c.length?this._events[i]=c.length===1?c[0]:c:Tr(this,i)}return this};$.prototype.removeAllListeners=function(e){var t;return e?(t=W?W+e:e,this._events[t]&&Tr(this,t)):(this._events=new Et,this._eventsCount=0),this};$.prototype.off=$.prototype.removeListener;$.prototype.addListener=$.prototype.on;$.prefixed=W;$.EventEmitter=$;typeof xs<"u"&&(xs.exports=$)});var Lt=class{_handlers=new Map;_ws;_onMessage;_onOpen;_listeningForOpen=!1;_pendingSends=[];_disposed=!1;constructor(e){this._ws=e,this._onMessage=t=>{if(typeof t.data!="string")return;let s;try{s=JSON.parse(t.data)}catch{console.warn("[ChannelMultiplexer] Failed to parse WebSocket message as JSON");return}if(!s.channel)return;let n=this._handlers.get(s.channel);if(n)for(let i of n)i(s)},this._ws.addEventListener("message",this._onMessage),this._onOpen=()=>{this.flushPendingSends()}}on(e,t){let s=this._handlers.get(e);return s||(s=new Set,this._handlers.set(e,s)),s.add(t),()=>{s.delete(t),s.size===0&&this._handlers.delete(e)}}emit(e,t){if(this._disposed)return;let s=JSON.stringify({channel:e,...t});if(this._ws.readyState===WebSocket.OPEN){this._ws.send(s);return}this._ws.readyState===WebSocket.CONNECTING&&(this._pendingSends.push(s),this.listenForOpen())}dispose(){this._disposed=!0,this._pendingSends=[],this._handlers.clear(),this._ws.removeEventListener("message",this._onMessage),this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1}flushPendingSends(){if(this._disposed||this._ws.readyState!==WebSocket.OPEN)return;this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1;let e=this._pendingSends;this._pendingSends=[];for(let t of e)this._ws.send(t)}listenForOpen(){this._listeningForOpen||(this._listeningForOpen=!0,this._ws.addEventListener("open",this._onOpen))}},$s=class{_handlers=new Map;_pendingSends=[];_target=null;_targetUnsubscribes=[];_disposed=!1;setTarget(e){if(this._disposed)return;this.detachTarget(),this._target=e;for(let[s,n]of this._handlers)for(let i of n)this._targetUnsubscribes.push(e.on(s,i));let t=this._pendingSends;this._pendingSends=[];for(let s of t)e.emit(s.channel,s.data)}rewriteSessionChannels(e,t){if(e===t)return;let s=`session:${e}:`,n=`session:${t}:`,i=new Map;for(let[a,o]of this._handlers)i.set(a.startsWith(s)?n+a.slice(s.length):a,o);this._handlers=i,this._pendingSends=this._pendingSends.map(a=>({...a,channel:a.channel.startsWith(s)?n+a.channel.slice(s.length):a.channel}))}on(e,t){if(this._disposed)return()=>{};let s=this._handlers.get(e);s||(s=new Set,this._handlers.set(e,s)),s.add(t);let n=this._target?.on(e,t);return n&&this._targetUnsubscribes.push(n),()=>{s?.delete(t),s?.size===0&&this._handlers.delete(e),n?.(),n&&(this._targetUnsubscribes=this._targetUnsubscribes.filter(i=>i!==n))}}emit(e,t){if(!this._disposed){if(this._target){this._target.emit(e,t);return}this._pendingSends.push({channel:e,data:t})}}dispose(){this._disposed=!0,this._pendingSends=[],this._handlers.clear(),this.detachTarget()}detachTarget(){for(let e of this._targetUnsubscribes)e();this._targetUnsubscribes=[],this._target=null}};var Us=class extends Error{code="session_end_unavailable";constructor(e="[urun] this session handle cannot terminally end the session; disconnect the viewer instead",t){super(e),this.name="SessionEndUnavailableError",t?.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}},we=class extends Error{code;httpStatus;requestId;constructor(e,t){super(e),this.name="SessionEndError",this.code=t.code??"session_end_failed",this.httpStatus=t.httpStatus,this.requestId=t.requestId,t.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}},Ne=class extends Error{requestId;code;constructor(e,t){super(e),this.name="RequestError",this.requestId=t?.requestId,this.code=t?.code,t?.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}},zs=class extends Ne{timeoutMs;constructor(e,t){super(`[urun] request timed out after ${e}ms`,{requestId:t}),this.name="RequestTimeoutError",this.timeoutMs=e,Object.setPrototypeOf(this,new.target.prototype)}},Bs=class extends Ne{timeoutMs;constructor(e,t){super(`[urun] request doc-sync did not establish within ${e}ms \u2014 the request was never delivered to the runtime (the session doc never synced with the session-server; check the doc-sync transport / connection)`,{requestId:t}),this.name="RequestDocSyncError",this.timeoutMs=e,Object.setPrototypeOf(this,new.target.prototype)}},Ws=class extends Error{stream;owner;attempted;constructor(e,t,s){super(`[urun] stream "${e}" is already produced by the ${t}; this (${s}) peer cannot also produce it \u2014 a named stream has exactly one producer (consume it instead, or use a distinct name for the reverse direction)`),this.name="StreamDirectionConflict",this.stream=e,this.owner=t,this.attempted=s,Object.setPrototypeOf(this,new.target.prototype)}},Ot=15e3,Mt=class extends Error{kind;stream;timeoutMs;constructor(e,t){let s=t?.timeoutMs??Ot,n=t?.stream??e,i=n!==e?` "${n}"`:"";super(`[urun] SFU did not ack producer ${e}${i} within ${Math.round(s/1e3)}s \u2014 the server never replied to 'produce'. The runtime's inbound port for this stream is likely unadvertised (a cold or capacity-queued runtime), so the SFU has nothing to forward the track to; the published track never reached the runtime.`),this.name="ProduceAckTimeout",this.kind=e,this.stream=n,this.timeoutMs=s,Object.setPrototypeOf(this,new.target.prototype)}},Hs=class extends Ne{constructor(e){super("[urun] request aborted",{requestId:e}),this.name="RequestAbortError",Object.setPrototypeOf(this,new.target.prototype)}},Vs=class extends Ne{constructor(e){super("[urun] request cancelled: session disconnected",{requestId:e}),this.name="RequestCancelledError",Object.setPrototypeOf(this,new.target.prototype)}};function Ia(r,e){let t=e.error?.reason,s=e.elapsedMs!==void 0?Math.round(e.elapsedMs/1e3):void 0;switch(r){case"create-failed":return{message:`[urun] session create failed${e.error?.httpStatus!==void 0?` (HTTP ${e.error.httpStatus})`:""}${t?`: ${t}`:""}`,hint:e.error?.httpStatus===401||e.error?.httpStatus===403?"The backend rejected this client \u2014 sign in again or check the auth token / org access.":"The backend could not create a session \u2014 check the app/function name and auth, then retry."};case"never-live":{let n=s!==void 0?` after ${s}s`:"",i=` (last server status: ${e.lastServerStatus??"none"})`;return e.error?.code==="expired"?{message:`[urun] session${e.sessionId?` ${e.sessionId}`:""} expired before media connected${n} \u2014 the control plane reclaims sessions whose media transport never establishes (~80s after create)`,hint:"Retry to mint a fresh session, and connect promptly after start (a backgrounded tab or paused debugger can miss the window)."}:e.sessionId?{message:`[urun] session ${e.sessionId} was created but never went live${n}${i} \u2014 the backend is busy or wedged (no runtime picked the session up)`,hint:"The backend is at capacity or stuck. Retry in a moment; if it persists, the session id above is what to report."}:{message:`[urun] no session went live${n} (phase=${e.phase}${e.lastServerStatus?`, last server status: ${e.lastServerStatus}`:""})`,hint:"The session never got past admission. Retry; if it persists, check the backend deployment."}}case"transport-failed":return e.error?.code==="transport-consumed"?{message:`[urun] the retry reused a session whose media transport was already connected${e.sessionId?` (id ${e.sessionId})`:""} \u2014 the session was consumed by an earlier attempt`,hint:"Start a fresh session (reload the page) \u2014 this session leg cannot be connected again."}:{message:`[urun] media/transport connection failed${t?`: ${t}`:""} (transport state: ${e.transportState})`,hint:"The network is likely blocking the media connection (WebRTC/WebSocket) \u2014 try a different network or disable VPN/proxy, then retry."};case"media-permission":return{message:`[urun] microphone/camera unavailable${t?`: ${t}`:""}`,hint:e.error?.code==="NotFoundError"||e.error?.code==="OverconstrainedError"?"No matching input device was found \u2014 connect or select a microphone/camera and retry.":"Allow microphone/camera access for this site (browser permission \u2014 or, when embedded, the parent page's permissions policy), then retry."};case"ended":return{message:`[urun] session ended before going live${e.sessionId?` (id ${e.sessionId})`:""}`,hint:"The session was closed (server-side, or superseded by another connection). Start a new session."};case"runtime-failed":return{message:`[urun] session${e.sessionId?` ${e.sessionId}`:""} failed at runtime${t?`: ${t}`:""}`,hint:"The session function crashed on the backend \u2014 check the app logs, then start a new session."};case"produce-timeout":return{message:`[urun] publishing a track timed out${t?`: ${t}`:""} \u2014 the SFU never acked the produce (the runtime\u2019s inbound port for the stream was not advertised in time)`,hint:"The runtime was still cold or the backend was at capacity when the track was published. Retry in a moment; if it persists, the backend never opened the stream to receive it."};case"expired":return{message:`[urun] session${e.sessionId?` ${e.sessionId}`:""} ended \u2014 ${t??"it reached its maximum length"}`,hint:"The session reached its end. Start a new session to continue."}}}var ye=class extends Error{kind;status;hint;constructor(e,t,s){let{message:n,hint:i}=Ia(e,t);super(n),this.name="SessionFailedError",this.kind=e,this.status=t,this.hint=i,s?.cause!==void 0&&(this.cause=s.cause),Object.setPrototypeOf(this,new.target.prototype)}};function zp(r,e){if(r instanceof ye)return r;let t=r instanceof Error?r:new Error(String(r)),s={phase:e?.phase??"idle",transportState:e?.transportState??"disconnected",...e,error:{reason:t.message,code:t.name,kind:"media-permission"}};return new ye("media-permission",s,{cause:r})}var ct=class extends Error{code="transport_session_mismatch";connectedSessionId;requestedSessionId;constructor(e,t){super(`[urun] cannot retarget a connected transport to a different session: this leg is live on ${e??"(unknown)"} but setConnection() asked for ${t} \u2014 disconnect() this leg first (or use a fresh session handle)`),this.name="TransportSessionMismatchError",this.connectedSessionId=e,this.requestedSessionId=t,Object.setPrototypeOf(this,new.target.prototype)}},ee=class extends Error{httpStatus;constructor(e,t){super(e),this.name="SessionAllocationError",this.httpStatus=t?.httpStatus,t?.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}};function Gs(r){if(!r)return!1;let e=typeof r=="string"?r:r.name;return e==="queued"||e==="unavailable"||e==="provisioning"}var La=45e3;function Hp(r,e={}){let{timeout:t=La,signal:s}=e;return new Promise((n,i)=>{if(s?.aborted){i(s.reason instanceof Error?s.reason:new Error("whenLive aborted"));return}if(r.phase?.name==="live"){n();return}let a=r.phase?.name;if(a==="error"||a==="ended"||a==="expired"){let f=r.phase,h=r.status??{phase:f.name,transportState:"disconnected",sessionId:f.sessionId,requestId:f.requestId,queue:f.queue,error:f.error};i(new ye(a==="ended"?"ended":a==="expired"?"expired":f.error?.kind??"transport-failed",h));return}let o,c,p=!1,d=f=>{p||(p=!0,c!==void 0&&clearTimeout(c),s?.removeEventListener("abort",l),o?.(),f?i(f):n())},l=()=>{d(s?.reason instanceof Error?s.reason:new Error("whenLive aborted"))};s?.addEventListener("abort",l,{once:!0});let u=()=>{let f=r.phase;return r.status??{phase:f?.name??"idle",transportState:"disconnected",sessionId:f?.sessionId,requestId:f?.requestId,queue:f?.queue,error:f?.error}},m=f=>d(new ye(f,u()));t>0&&(c=setTimeout(()=>{let f=u();f.elapsedMs===void 0&&(f.elapsedMs=t),d(new ye("never-live",f))},t)),o=r.onPhase(f=>{f?.name==="live"?d():f?.name==="error"?m(f.error?.kind??"transport-failed"):f?.name==="ended"?m("ended"):f?.name==="expired"&&m("expired")}),p&&o()})}function Vp(r){switch(r.name){case"idle":return"Initializing\u2026";case"unavailable":return"Starting the app\u2026";case"queued":return r.queue?`Waiting in queue (position ${r.queue.position} of ${r.queue.depth})\u2026`:r.runtime?.state==="busy"?"All runtimes are busy \u2014 waiting for capacity\u2026":"Waiting for capacity\u2026";case"provisioning":return r.runtime?.state==="starting"?"Starting model\u2026":"Provisioning\u2026";case"connecting":return"Connecting\u2026";case"live":return"Live";case"error":return r.error?.reason?`Session failed \u2014 ${r.error.reason}`:"Session failed";case"ended":return"Session ended";case"expired":return"Session ended \u2014 reached its maximum length. Start a new session."}}var Ma=500,Oa=15e3,dt=6;function kr(r,e=Math.random){if(!Number.isFinite(r)||r<0)throw new Error(`[urun] computeBackoffDelay: attempt must be a non-negative number, got ${r}`);let t=Math.min(Oa,Ma*2**r);return Math.round(e()*t)}function Pr(r){if(r instanceof ee){let e=r.httpStatus;return e===408||e===429||e!==void 0&&e>=500}return r instanceof Error?r.name==="TypeError"||r.name==="TimeoutError"||r.name==="AbortError":!1}var Ks=10,Aa=.5,At=Ks;function xr(){return At<1?!1:(At-=1,!0)}function Dr(){At=Math.min(Ks,At+Aa)}var Na="session-api.prod.cloud.urun.sh",ja=["https://session-api.use2.prod.cloud.urun.sh","https://session-api.usw2.prod.cloud.urun.sh"];function le(r){return r.trim().replace(/\/+$/,"")}function Zs(r,e){let t=[],s=n=>{if(!n)return;let i=le(n);i&&!t.includes(i)&&t.push(i)};s(r);for(let n of e??[])s(n);for(let n of eo(r))s(n);return t}function Xp(r){try{if(typeof fetch!="function")return;let e=`${le(r.baseUrl)}/api/session-requests/${encodeURIComponent(r.requestId)}/release`;fetch(e,{method:"POST",headers:be(r,r.jwt),keepalive:!0}).catch(()=>{})}catch{}}async function Zp(r){try{let e=`${le(r.baseUrl)}/api/session-requests/${encodeURIComponent(r.requestId)}/release`,t=await Se(r);if(r.getAccessToken&&!t)throw new we("[urun] session release refused: getAccessToken resolved no token (an unauthenticated release is never sent)",{requestId:r.requestId,code:"no_access_token"});let s=await fetch(e,{method:"POST",headers:be(r,t)});if((s.status===401||s.status===403)&&r.getAccessToken){let o=await Se(r,{forceRefresh:!0,reason:"unauthorized"});o&&o!==t&&(s=await fetch(e,{method:"POST",headers:be(r,o)}))}let n=await Nt(s);if(!s.ok)throw new we(n.error_message||n.error_code||`[urun] session release failed: HTTP ${s.status}`,{requestId:r.requestId,code:n.error_code,httpStatus:s.status});let i=String(n.status??"");if(i!=="closed"&&i!=="cancelled"&&i!=="canceled")throw new we("[urun] session release returned an unrecognized terminal status",{requestId:r.requestId,code:"invalid_release_response",httpStatus:s.status});return{status:i==="closed"?"ended":"canceled",requestId:r.requestId}}catch(e){throw e instanceof we?e:new we("[urun] session release request failed",{requestId:r.requestId,cause:e})}}function en(r){if(typeof r!="string"||r.length===0)return null;let e=new Date(r);return Number.isFinite(e.getTime())?e:null}var Fa=120,qa=1e3,$a=20,Ua=5,za=500,tn=1e4,Ba=3,Wa=50,Ys=1e4;async function Qs(r,e){let t=Date.now()+Ys;for(;;){await jt(Wa);let s=await Se(r);if(s)return s;if(Date.now()>=t)throw new ee(`[urun] session allocation at ${e} never got an access token: the wired getAccessToken resolved nothing within ${Math.round(Ys/1e3)}s (no unauthenticated request was sent)`)}}function Ha(r,e){if(!r)return null;try{let t=new URL(r),s=e?new URL(le(e)):null,n=t.pathname==="/api/sessions/create"||t.pathname==="/api/sessions/create/";return t.protocol!=="https:"||!n||!Va(t,s)?null:le(t.origin)}catch{return null}}function Va(r,e){return Js(r.hostname)&&(!e||Js(e.hostname))}function Js(r){let e=r.toLowerCase();return e==="urun.sh"||e.endsWith(".urun.sh")}async function el(r){let e=Zs(r.baseUrl,r.fallbackUrls),t=null,s=e.length>1;for(let n=0;n<dt;n++){for(let i of e)try{let a=await Ga(i,r,{pollAttempts:Fa,retryAfterLimitMs:s?qa:void 0});return Dr(),a}catch(a){if(t=a instanceof Error?a:new Error(String(a)),t instanceof pe)throw t}if(!Pr(t))break;if(n+1<dt){if(!xr())break;await jt(kr(n))}}throw t??new Error("[urun] session allocation failed")}async function Ga(r,e,t){let s,n,i,a=r,o=0,c=new Set,p=Date.now()+t.pollAttempts*tn;for(let d=0;d<t.pollAttempts;d++){n=i??await Se(e),i=void 0,e.getAccessToken&&!n&&(n=await Qs(e,a));let l=Math.max(1,Math.min($a,Math.floor((p-Date.now())/1e3))),u=!!s,m=Date.now(),f=s?await fetch(`${a}/api/session-requests/${encodeURIComponent(s)}?wait_s=${l}`,{headers:be(e,n),signal:Ja((l+Ua)*1e3)}):await fetch(`${a}/api/sessions/create`,{method:"POST",redirect:"manual",headers:{...be(e,n),"Content-Type":"application/json","Idempotency-Key":e.idempotencyKey},body:JSON.stringify(Ka(e))});if(!s&&(f.status===307||f.status===308)){let b=Ha(f.headers.get("location"),a);if(b&&b!==a&&o<Ba){o+=1,a=b;continue}throw new ee(`[urun] session create redirected from ${a} without a usable target`,{httpStatus:f.status})}let h=await Nt(f);if(h.request_id)try{e.onRequest?.({requestId:h.request_id,baseUrl:a})}catch{}if(f.ok&&(h.status==="allocated"||!h.status&&!!h.session_id)&&!!h.session_id){let b=h.session_id,P=rn(h.ws_url,a,b,"gateway allocated session");return{baseUrl:a,sessionId:b,wsUrl:P,endsAt:en(h.ends_at),response:h}}if(f.status===202||h.status==="pending"||h.status==="queued"||h.queued){if(s=h.request_id||s,!s)throw new Error("[urun] gateway queued session without request_id");if(e.onAdmission)try{e.onAdmission(Ya(h,s))}catch{}let b=Date.now()-m<za;u&&b&&await jt(Qa(f,h,t.retryAfterLimitMs));continue}if((f.status===401||f.status===403)&&e.getAccessToken){let b=n??"";c.add(b);let P=await Se(e,{forceRefresh:!0,reason:"unauthorized"});if(P&&!c.has(P)){i=P;continue}if(P===void 0){let x=await Qs(e,a);if(!c.has(x)){i=x;continue}}}let v=h.error_message||h.error_code||`HTTP ${f.status}`;throw new ee(`[urun] session allocation failed at ${a}: ${v}`,{httpStatus:f.status})}throw new ee(`[urun] timed out waiting for session allocation at ${a}`)}function be(r,e){let t={"X-Tenant-Id":r.orgId,"X-Auth-Provider":r.authProvider||"default","X-User-Id":"anonymous"};return e&&(t.Authorization=`Bearer ${e}`),t}async function Se(r,e){return r.getAccessToken?await r.getAccessToken(e)??void 0:r.jwt}function Ka(r){let e=r.priority==="preempt";return{app:r.app,function:r.functionName,gpus:1,idempotency_key:r.idempotencyKey,...r.sessionKey&&!e?{logical_id:r.sessionKey}:{},...e?{priority:"preempt"}:{}}}async function tl(r){let e=Zs(r.baseUrl,r.fallbackUrls),t=null;for(let s=0;s<dt;s++){for(let n of e)try{let i={baseUrl:n,app:"",functionName:"",orgId:r.orgId,jwt:r.jwt,getAccessToken:r.getAccessToken,authProvider:r.authProvider,idempotencyKey:""},a=`${le(n)}/api/sessions/${encodeURIComponent(r.sessionId)}/viewer-connect`,o=await Se(i);if(r.getAccessToken&&!o)throw new ee(`[urun] viewer-connect for ${r.sessionId} refused: getAccessToken resolved no token (an unauthenticated viewer-connect is never sent)`);let c=await fetch(a,{headers:be(i,o)});if((c.status===401||c.status===403)&&r.getAccessToken){let l=await Se(i,{forceRefresh:!0,reason:"unauthorized"});l&&l!==o&&(c=await fetch(a,{headers:be(i,l)}))}if(!c.ok)throw new ee(`[urun] viewer-connect for ${r.sessionId} failed: HTTP ${c.status}`,{httpStatus:c.status});let p=await Nt(c),d=rn(p.ws_url,n,r.sessionId,"viewer-connect");return Dr(),{baseUrl:le(n),sessionId:r.sessionId,wsUrl:d,endsAt:en(p.ends_at),response:p}}catch(i){if(t=i instanceof Error?i:new Error(String(i)),t instanceof pe)throw t}if(!Pr(t))break;if(s+1<dt){if(!xr())break;await jt(kr(s))}}throw t??new Error("[urun] viewer-connect failed")}async function rl(r){try{let e=le(r.baseUrl),t=await Se(r);if(r.getAccessToken&&!t)return{status:"unavailable"};let s=await fetch(`${e}/api/sessions/prewake`,{method:"POST",headers:{...be(r,t),"Content-Type":"application/json"},body:JSON.stringify({app:r.app,function:r.functionName})});if(s.status===404)return{status:"unknown-app"};if(!s.ok)return{status:"unavailable"};let n=await Nt(s),i={status:n.status==="prebound"?"prebound":"warming"};return typeof n.expires_at=="string"&&(i.expiresAt=n.expires_at),typeof n.warm_capable=="boolean"&&(i.warmCapable=n.warm_capable),i}catch(e){return console.debug?.("[urun] prewake failed (advisory, ignored):",e),{status:"unavailable"}}}async function Nt(r){try{let e=await r.json();return e&&typeof e=="object"?e:{}}catch{return{}}}function Ya(r,e){let t={status:r.status==="queued"||r.queued?"queued":"pending",requestId:e};typeof r.queue_position=="number"&&typeof r.queue_depth=="number"&&(t.queue={position:r.queue_position,depth:r.queue_depth});let s=r.runtime_state;return(s==="unavailable"||s==="starting"||s==="busy")&&(t.runtime={state:s},typeof r.runtime_reason=="string"&&r.runtime_reason.length>0&&(t.runtime.reason=r.runtime_reason)),t}function Qa(r,e,t){let s=Number(r.headers.get("Retry-After")||""),n=Number(e.retry_after_seconds??s),i=t??tn;return Number.isFinite(n)&&n>0?Math.min(n*1e3,i):1e3}function jt(r){return new Promise(e=>setTimeout(e,r))}function Ja(r){let e=typeof AbortSignal<"u"?AbortSignal:void 0;return typeof e?.timeout=="function"?e.timeout(r):void 0}var pe=class extends Error{};function rn(r,e,t,s){if(!r)throw new pe(`[urun] ${s} ${t} without ws_url`);let n,i;try{n=new URL(r)}catch{throw new pe(s==="viewer-connect"?`[urun] viewer-connect returned no usable ws_url for ${t}`:`[urun] ${s} ${t} with non-absolute ws_url`)}try{i=new URL(le(e))}catch{throw new pe(`[urun] ${s} ${t} has invalid gateway base URL`)}let a=Xa(i.hostname)&&i.protocol==="http:";if(!(a&&n.protocol==="ws:"||n.protocol==="wss:"))throw new pe(`[urun] ${s} ${t} with insecure ws_url`);if(!Za(n,i,a))throw new pe(`[urun] ${s} ${t} with cross-origin ws_url`);return n.toString()}function Xa(r){return r==="localhost"||r==="127.0.0.1"||r==="::1"||r.endsWith(".localhost")}function Za(r,e,t){return!!(t||r.hostname===e.hostname&&r.port===e.port||Xs(r.hostname)&&Xs(e.hostname))}function Xs(r){return r==="urun.sh"||r.endsWith(".urun.sh")}function eo(r){try{return new URL(r).hostname!==Na?[]:ja}catch{return[]}}function qt(){return typeof window>"u"&&typeof process<"u"&&process.versions!=null&&process.versions.node!=null}function nn(){return qt()?"Chrome111":void 0}var to=["RTCSessionDescription","RTCIceCandidate","RTCRtpReceiver","RTCRtpSender","RTCRtpTransceiver","RTCDataChannel","MediaStream","MediaStreamTrack"],Ft=null;function an(){return qt()?Ft||(Ft=ro(),Ft):Promise.resolve()}async function ro(){let r=globalThis;if(typeof r.WebSocket>"u")try{let e=await import("ws"),t=e.default??e;r.WebSocket=t}catch(e){sn("WebSocket",e)}if(typeof r.RTCPeerConnection>"u")try{let e=await import("werift");so(r,e)}catch(e){sn("werift",e)}}function so(r,e){let{RTCPeerConnection:t,useH264:s,useVP8:n,useOPUS:i,useSdesMid:a,useSdesRTPStreamId:o,useAbsSendTime:c,useTransportWideCC:p,useVideoOrientation:d}=e,l=()=>({video:[s(),n()],audio:[i()]}),u=()=>({video:[a(),o(),c(),p(),d()],audio:[a(),c(),p()]});class m extends t{constructor(h){super({...h,codecs:h?.codecs??l(),headerExtensions:h?.headerExtensions??u()})}}r.RTCPeerConnection=m;for(let f of to)e[f]!=null&&typeof r[f]>"u"&&(r[f]=e[f])}function sn(r,e){let t=e instanceof Error?e.message:String(e);console.warn(`[urun-sh/core] Node WebRTC support: optional dependency "${r}" unavailable (${t}). Realtime media will not work in this Node process; install "${r}" to enable it. Doc/KV transport over WebSocket is unaffected.`)}function cn(r){return`stream:${r}`}var dn="urun-stream-v1";var Ir=1,ue={BINARY:0,TEXT:1,JSON:2,END:3},pn=Symbol("urun:stream:end");function ln(r){if(r===pn)return Uint8Array.from([Ir,ue.END]);let e,t;r instanceof Uint8Array?(e=ue.BINARY,t=r):r instanceof ArrayBuffer?(e=ue.BINARY,t=new Uint8Array(r)):typeof r=="string"?(e=ue.TEXT,t=new TextEncoder().encode(r)):(e=ue.JSON,t=new TextEncoder().encode(JSON.stringify(r)));let s=new Uint8Array(2+t.length);return s[0]=Ir,s[1]=e,s.set(t,2),s}function un(r){let e=r instanceof Uint8Array?r:new Uint8Array(r);if(e.length<2||e[0]!==Ir)throw new Error(`[urun] bad stream envelope (version=${e[0]}, len=${e.length})`);let t=e[1],s=e.subarray(2);switch(t){case ue.BINARY:return s.slice();case ue.TEXT:return new TextDecoder().decode(s);case ue.JSON:return JSON.parse(new TextDecoder().decode(s));case ue.END:return pn;default:throw new Error(`[urun] unknown stream envelope KIND 0x${t.toString(16)}`)}}var on=class{consumerId;_handlers=new Map;constructor(e="loopback"){this.consumerId=e}onData(e,t){let s=this._handlers.get(e);return s||(s=new Set,this._handlers.set(e,s)),s.add(t),()=>s.delete(t)}sendData(e,t,s={}){s.to&&(s.to,this.consumerId);for(let n of this._handlers.get(e)??[])n(t);return Promise.resolve()}};function il(r){return{get consumerId(){return r.consumerId},onData(e,t){return r.onStreamData(e,t)},sendData(e,t,s){return r.sendStreamData(e,t,s)}}}var ga=qs(cs());var Ds=qs(ea(),1);var ta="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";function hp(r){let e=globalThis.crypto,t=new Uint8Array(r);if(e?.getRandomValues)return e.getRandomValues(t),t;for(let s=0;s<r;s++)t[s]=Math.floor(Math.random()*256);return t}function ra(r=16){let e=hp(r),t="";for(let s=0;s<r;s++)t+=ta[e[s]%ta.length];return t}var sa=[1e3,2e3,4e3,8e3,3e4],na=5,fp=15e3,ia=15e3,aa=15e3,mp=2e3,gp=6e3,_p=2,vp=750,wp=3,oa=[1e3,2e3,4e3],yp=15e3;function uu(r){return`stream:${r}`}var Is="--",bp=["video","audio"];function Sp(r){let e=r.lastIndexOf(Is);if(e<=0)return;let t=r.slice(e+Is.length);return bp.includes(t)?t:void 0}function hu(r,e){return`${r}${Is}${e}`}var Rp={queued:"queued",pending:"provisioning",allocating:"provisioning",provisioning:"provisioning",allocated:"connecting",connecting:"connecting",live:"live",running:"live",error:"error",failed:"error",rejected:"error",expired:"expired",cancelled:"ended",canceled:"ended",closed:"ended"};function at(r){return r==="error"||r==="ended"||r==="expired"}var ca=3,da=4e3,pa=[{urls:"stun:stun.l.google.com:19302"},{urls:"stun:stun1.l.google.com:19302"}];function la(r){if(!r)return;let e=/\/(?:ws\/)?rtc\/([^/?#]+)/.exec(r);if(e)try{return decodeURIComponent(e[1])}catch{return e[1]}}var ua=class{_state="disconnected";_sessionId=null;_tracks=new Map;_tracksByName=new Map;_options;_emitter=new Ds.default;_ws=null;_connectedUrl=null;_device=null;_recvTransport=null;_sendTransport=null;_consumers=new Map;_audioProducer=null;_videoProducer=null;_publishedAudio=null;_publishedVideo=null;_pendingProduce=null;_multiplexer=null;_reconnectAttempts=0;_intentionalDisconnect=!1;_reconnectTimer=null;_cancelPendingDial=null;_stableResetTimer=null;_generation=0;_lastStartOptions;_resolveConnection=null;_recvIceRestartAttempts=0;_recvIceRestartTimer=null;_sendIceRestartAttempts=0;_sendIceRestartTimer=null;_phase={name:"idle"};_requestId;_liveReached=!1;_lastServerStatus;_endsAt=null;_forceResolveOnNextConnect=!1;_connectStartedAt;_wakingSince;_mediaMonitorTimer=null;_lastInboundTotal=0;_mediaEverFlowed=!1;_lastInboundAdvanceAt=0;_mediaDeathHandled=!1;_decodeSignalSeen=!1;_lastFramesDecoded=0;_lastDecodeAdvanceAt=0;_decodeDeathHandled=!1;_latestInboundSample=kt();_decodeWindowStartSample=kt();_selectedCandidatePair=_a();_candidatePairDiagnosticEmitted=!1;_currentEpoch=0;_consumerId=null;_streamDataHandlers=new Map;_dataProducers=new Map;_dataProducerPromises=new Map;_dataConsumers=new Map;_pendingDataProduce=new Map;_sendTransportWaiters=[];get consumerId(){return this._consumerId===null&&(this._consumerId=Cp()),this._consumerId}get state(){return this._state}get currentIncarnation(){return this._currentEpoch}get phase(){return this._phase}get isProducingMedia(){let e=t=>t!==null&&!t.closed&&!t.paused;return e(this._audioProducer)||e(this._videoProducer)}get endsAt(){return this._endsAt}setEndsAt(e){this._endsAt=e}_pastDeadline(){return this._endsAt!==null&&Date.now()>=this._endsAt.getTime()}get status(){let e={phase:this._phase.name,transportState:this._state};return this._sessionId&&(e.sessionId=this._sessionId),this._requestId&&(e.requestId=this._requestId),this._lastServerStatus!==void 0&&(e.lastServerStatus=this._lastServerStatus),this._connectStartedAt!==void 0&&(e.elapsedMs=Date.now()-this._connectStartedAt),this._endsAt!==null&&(e.endsAt=this._endsAt),this._phase.queue&&(e.queue=this._phase.queue),this._phase.runtime&&(e.runtime=this._phase.runtime),this._phase.wakingSince!==void 0&&(e.wakingSince=this._phase.wakingSince),this._phase.error&&(e.error=this._phase.error),e}get sessionId(){return this._sessionId}get tracks(){return this._tracks}get multiplexer(){return this._multiplexer}get isOpen(){return this._ws!==null&&this._ws.readyState===WebSocket.OPEN}get connectedUrl(){return this._connectedUrl}getTrackByName(e){if(Sp(e)!==void 0)return;let t=this._tracksByName.get(e);if(t&&t.readyState!=="ended")return t;for(let s of this._tracks.values())if(!(s.kind!==e||s.readyState==="ended")&&this._streamNameOf(s)===void 0)return s;return t}_streamNameOf(e){for(let[t,s]of this._tracksByName)if(s===e)return t}setAuth(e){this._options={...this._options,...e},this.isOpen&&this._send({type:"auth",orgId:this._options.orgId,jwt:this._options.jwt,authProvider:this._options.authProvider})}constructor(e){this._options=e??{url:""},e?.sessionId&&(this._sessionId=e.sessionId)}setConnection(e){if(this.isOpen){let t=la(e.url);if(e.sessionId!==void 0&&e.sessionId!==this._sessionId)throw new ct(this._sessionId,e.sessionId);if(t!==void 0&&t!==this._sessionId)throw new ct(this._sessionId,t);this._options={...this._options,...e};return}this._options={...this._options,...e},e.sessionId&&(this._sessionId=e.sessionId)}setConnectionResolver(e){this._resolveConnection=e}applyControlDocState(e){let t=e&&typeof e=="object"?e.session:void 0,s=xp(t);if(s!==void 0&&this.setIncarnation(s),!t||typeof t!="object")return;let n=t,i=typeof n.status=="string"?n.status:void 0;if(i&&!at(this._phase.name)&&!this.isStaleClosedMarker(n))if(i==="error"){let a=n.error_reason??n.errorReason,o=typeof a=="string"&&a?a:"session failed";this._setPhase("error",{error:{reason:o,code:"runtime-failed",kind:"runtime-failed"}})}else(i==="closed"||i==="ended")&&(this._pastDeadline()?this._setPhase("expired",{error:{reason:"session reached its maximum length",code:i,kind:"expired"}}):this._setPhase("ended"))}setIncarnation(e){if(!Number.isFinite(e)||e<=this._currentEpoch)return;let t=this._currentEpoch>0,s=this._state==="connected";this._currentEpoch=e,t&&s&&!this._intentionalDisconnect&&this._renegotiate()}isStaleIncarnation(e){return Number.isFinite(e)?e<this._currentEpoch:!1}isStaleClosedMarker(e){if(!e)return!1;let t=typeof e.status=="string"?e.status:void 0;if(t!=="closed"&&t!=="ended"&&t!=="error")return!1;let s=e.status_epoch??e.statusEpoch,n=typeof s=="number"?s:Number(s);return Number.isFinite(n)?n<this._currentEpoch:!1}async connect(e){if(this.isOpen&&this._state==="connected"&&!this._intentionalDisconnect){e!==void 0&&(this._lastStartOptions=e);return}this._lastStartOptions=e,this._intentionalDisconnect=!1,at(this._phase.name)&&(this._phase={name:"idle"}),this._connectStartedAt??=Date.now(),this._cancelPendingDial?.(new Error("TransportSession: connect superseded by a newer connect()"));let t=++this._generation,s=this._state==="reconnecting"||this._state==="renegotiating";s||this._setState("connecting");let n=null,i=()=>t!==this._generation||this._intentionalDisconnect,a=()=>{if(i())throw new Error("TransportSession: connect cancelled")},o=async()=>{for(let l of this._connectUrls()){a();try{return await this._connectOnce(l,t,e),!0}catch(u){n=u instanceof Error?u:new Error(String(u)),i()||this._cleanupSocket()}}return!1},c=this._forceResolveOnNextConnect&&this._resolveConnection!==null;this._forceResolveOnNextConnect=!1;let p=c?0:this._resolveConnection?_p:1;for(let l=0;l<p;l++)if(l>0&&(await ha(vp),a()),await o())return;if(this._resolveConnection)for(let l=0;l<wp;l++){this._setState("reconnecting"),await ha(oa[Math.min(l,oa.length-1)]),a();try{let u=await this._resolveConnection();a(),this.setAuth({jwt:u.jwt??this._options.jwt,authProvider:this._options.authProvider,orgId:this._options.orgId}),this.setConnection({url:u.url,sessionId:u.sessionId,iceServers:u.iceServers??this._options.iceServers}),u.endsAt!==void 0&&(this._endsAt=u.endsAt)}catch(u){if(i())throw new Error("TransportSession: connect cancelled");n=u instanceof Error?u:new Error(String(u));continue}if(await o())return}if(i())throw n??new Error("TransportSession: connect cancelled");this._setState("failed");let d=n??new Error("TransportSession: connect failed");throw s||this._emitError(d),d}leaveLeg(){if(!this.isOpen)return!1;this._intentionalDisconnect=!0,this._stopMediaMonitor(),this._clearRecvIceRestart(),this._clearSendIceRestart(),this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null);try{this._send({type:"leave"})}catch{}try{this._ws?.close()}catch{}return!0}disconnect(){this._generation+=1,this._intentionalDisconnect=!0,this._cancelPendingDial?.(new Error("TransportSession: connect cancelled by disconnect()")),this._stopMediaMonitor(),this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null),this._clearReconnectBudgetReset(),this._reconnectAttempts=0;try{this._publishedAudio?.track.stop()}catch{}try{this._publishedVideo?.track.stop()}catch{}if(this._publishedAudio=null,this._publishedVideo=null,this._audioProducer){this._send({type:"stopAudio"});try{this._audioProducer.track?.stop()}catch{}try{this._audioProducer.close()}catch{}this._audioProducer=null}if(this._videoProducer){this._send({type:"stopVideo"});try{this._videoProducer.track?.stop()}catch{}try{this._videoProducer.close()}catch{}this._videoProducer=null}for(let e of this._consumers.values())try{e.close()}catch{}if(this._consumers.clear(),this._cleanupDataChannels(),this._settleSendTransportWaiters(null,new Error("[urun] sendStreamData: transport disconnected before the send transport arrived")),this._sendTransport){try{this._sendTransport.close()}catch{}this._sendTransport=null}if(this._recvTransport){try{this._recvTransport.close()}catch{}this._recvTransport=null}this._pendingProduce&&(clearTimeout(this._pendingProduce.timeoutId),this._pendingProduce.reject(new Error("TransportSession: disconnected")),this._pendingProduce=null),this._device=null,this._multiplexer&&(this._multiplexer.dispose(),this._multiplexer=null),this._cleanupSocket(),this._tracks.clear(),this._tracksByName.clear(),this._setState("disconnected"),this._liveReached=!1,this._setPhase("ended"),this._emitter.emit("disconnected")}on(e,t){return this._emitter.on(e,t),()=>{this._emitter.off(e,t)}}_emitDiagnostic(e){console.warn(`[urun] ${e.message}`,e.detail??{}),this._emitter.emit("diagnostic",e)}sendInput(e,t){this._send({type:"input",data:e,sequence:t})}sendSignal(e){this._send(e)}onSignal(e){return this.on("signal",e)}onStreamData(e,t){let s=this._streamDataHandlers.get(e);return s||(s=new Set,this._streamDataHandlers.set(e,s)),s.add(t),()=>{let n=this._streamDataHandlers.get(e);n?.delete(t),n&&n.size===0&&this._streamDataHandlers.delete(e)}}sendStreamData(e,t,s){return this._ensureDataProducer(e).then(n=>{n.send(ln(t))})}_awaitSendTransport(){return this._sendTransport?Promise.resolve(this._sendTransport):new Promise((e,t)=>{let s={resolve:i=>{clearTimeout(n),e(i)},reject:i=>{clearTimeout(n),t(i)}},n=setTimeout(()=>{let i=this._sendTransportWaiters.indexOf(s);i>=0&&this._sendTransportWaiters.splice(i,1),t(new Error(`[urun] sendStreamData: no send transport after ${ia}ms (the server never offered createSendTransport \u2014 data-up produce is impossible on this leg)`))},ia);this._sendTransportWaiters.push(s)})}_settleSendTransportWaiters(e,t){let s=this._sendTransportWaiters;this._sendTransportWaiters=[];for(let n of s)e?n.resolve(e):n.reject(t??new Error("TransportSession: disconnected"))}_ensureDataProducer(e){let t=this._dataProducers.get(e);if(t&&!t.closed)return Promise.resolve(t);let s=this._dataProducerPromises.get(e);if(s)return s;let n=this._awaitSendTransport().then(i=>i.produceData({label:cn(e),protocol:dn,ordered:!0})).then(i=>this._awaitDataChannelOpen(i)).then(i=>(this._dataProducers.set(e,i),this._dataProducerPromises.delete(e),i)).catch(i=>{throw this._dataProducerPromises.delete(e),i});return this._dataProducerPromises.set(e,n),n}_awaitDataChannelOpen(e){if(e.closed)return Promise.reject(new Error("[urun] sendStreamData: DataProducer closed before its DataChannel opened"));let t=e.readyState;return t==="open"?Promise.resolve(e):t==="closing"||t==="closed"?Promise.reject(new Error(`[urun] sendStreamData: DataChannel is ${t} \u2014 cannot deliver data-up payloads`)):new Promise((s,n)=>{let i=()=>{p(),s(e)},a=l=>{d(new Error(`[urun] sendStreamData: DataChannel error before open: ${l.message}`))},o=()=>{p(),n(new Error("[urun] sendStreamData: DataProducer closed before its DataChannel opened"))},c=setTimeout(()=>{d(new Error(`[urun] sendStreamData: DataChannel not open after ${aa}ms (the SCTP handshake never completed \u2014 data-up produce is impossible on this channel)`))},aa),p=()=>{clearTimeout(c),e.off("open",i),e.off("error",a),e.observer.off("close",o)},d=l=>{p();try{e.close()}catch{}n(l)};e.on("open",i),e.on("error",a),e.observer.on("close",o)})}_dispatchStreamData(e,t){for(let s of this._streamDataHandlers.get(e)??[])s(t)}_streamNameFromLabel(e){if(e)return e.startsWith("stream:")?e.slice(7):void 0}async addTrack(e,t){await this._publishTrack(e,t)}async _publishTrack(e,t){let s=e.kind==="video",n=s?this._videoProducer:this._audioProducer;if(n&&!n.closed){if(n.track===e)return;await n.replaceTrack({track:e}),this._rememberPublishIntent(s,e,t);return}if(!this._sendTransport)throw new Error("TransportSession: send transport not ready");let i=await this._sendTransport.produce({track:e,...s?{}:{codecOptions:{opusStereo:!1,opusDtx:!1,opusFec:!1}},stopTracks:!1,...t?{appData:{name:t}}:{}});s?this._videoProducer=i:this._audioProducer=i,this._rememberPublishIntent(s,e,t)}_rememberPublishIntent(e,t,s){let n={track:t,...s!==void 0?{name:s}:{}};e?this._publishedVideo=n:this._publishedAudio=n}removeTrack(){if(this._publishedAudio=null,this._audioProducer){this._send({type:"stopAudio"});try{this._audioProducer.track?.stop()}catch{}this._audioProducer.close(),this._audioProducer=null}}async addVideoTrack(e,t){await this._publishTrack(e,t)}stopVideo(){if(this._publishedVideo=null,this._videoProducer){this._send({type:"stopVideo"});try{this._videoProducer.track?.stop()}catch{}this._videoProducer.close(),this._videoProducer=null}}requestDiagnostics(){this._send({type:"diagnostics"})}seekStream(e,t){this._send({type:"stream.seek",stream:e,target:t})}async _handleMessage(e){switch(e.type){case"routerRtpCapabilities":await this._onRouterCapabilities(e.rtpCapabilities);break;case"createWebRtcTransport":await this._onCreateRecvTransport(e);break;case"createSendTransport":await this._onCreateSendTransport(e);break;case"consume":await this._onConsume(e);break;case"consumerClosed":this._closeConsumer(e.consumerId);break;case"producerClosed":this._closeConsumersByProducer(e.producerId);break;case"consumerPaused":this._consumers.get(e.consumerId)?.pause();break;case"consumerResumed":this._consumers.get(e.consumerId)?.resume();break;case"iceRestarted":this._onIceRestarted(e);break;case"produced":if(this._pendingProduce){let t=this._pendingProduce;this._pendingProduce=null,clearTimeout(t.timeoutId),t.resolve(e.id)}break;case"dataProduced":{let t=e.label,s=t?this._pendingDataProduce.get(t):void 0;s&&t&&(this._pendingDataProduce.delete(t),s.resolve(e.id));break}case"consumeData":await this._onConsumeData(e);break;case"started":this._emitter.emit("started");break;case"status":this._onStatus(e);break;case"stream.seeked":this._onStreamSeeked(e);break;case"error":this._onServerError(e);break;default:this._emitter.emit("signal",e);break}}_onServerError(e){let t=typeof e.message=="string"?e.message:"signaling error",s=typeof e.code=="string"?e.code:void 0;if(/connect\(\) already called/i.test(t)){if(this._resolveConnection){this._generation++;let n=this._ws;this._ws=null;try{n?.close()}catch{}this._cleanupMedia(),this._forceResolveOnNextConnect=!0,this._renegotiate();return}this._setPhase("error",{error:{reason:t,code:"transport-consumed",kind:"transport-failed"}}),this._emitter.emit("error",new Error(t));return}if(s==="TRANSPORT_BIND_FAILED"){this._emitError(new Error(t),s);return}console.warn("[urun] signaling error from server:",t)}_onStreamSeeked(e){let t=typeof e.stream=="string"?e.stream:void 0;if(!t)return;let s=e.target,n=s==="live"?"live":typeof s=="number"?s:Number(s);this._emitter.emit("seeked",t,n)}_onStatus(e){let t=e.request_id??e.requestId;t&&(this._requestId=t);let s=typeof e.status=="string"?e.status:void 0,n=(s?Rp[s]:void 0)??"provisioning",i=at(n);if(this._liveReached&&!i||at(this._phase.name))return;s!==void 0&&(this._lastServerStatus=s);let a=e.queue_position??e.queuePosition,o=e.queue_depth??e.queueDepth,c=typeof a=="number"&&typeof o=="number";if(n==="expired"){let p=typeof e.reason=="string"&&e.reason?e.reason:this._endsAt!==null?"session reached its maximum length":"session expired";this._setPhase("expired",{error:{reason:p,code:s,kind:"expired"}});return}if(n==="error"){let p=typeof e.reason=="string"&&e.reason?e.reason:s??"admission failed";this._setPhase("error",{error:{reason:p,code:s,kind:s==="error"?"runtime-failed":"create-failed"}});return}if(n==="ended"){this._pastDeadline()?this._setPhase("expired",{error:{reason:"session reached its maximum length",code:s,kind:"expired"}}):this._setPhase("ended");return}if(n==="queued"){this._setPhase("queued",c?{queue:{position:a,depth:o}}:void 0);return}if(n==="connecting"){this._setPhase("connecting");return}this._setPhase("provisioning")}async _onRouterCapabilities(e){qt()&&await an();let t=nn(),s=new ga.Device(t?{handlerName:t}:void 0);await s.load({routerRtpCapabilities:e}),this._device=s,this._send({type:"rtpCapabilities",rtpCapabilities:s.rtpCapabilities})}async _onCreateRecvTransport(e){this._device&&this._buildRecvTransport(e)}_buildRecvTransport(e){if(!this._device)return;let t=e.iceCandidates,s=this._device.createRecvTransport({id:e.id,iceParameters:e.iceParameters,iceCandidates:t,dtlsParameters:e.dtlsParameters,...e.sctpParameters?{sctpParameters:e.sctpParameters}:{},iceServers:this._options.iceServers??pa});this._recvIceRestartAttempts=0,this._clearRecvIceRestart();let n=this._generation;s.on("connect",({dtlsParameters:i},a,o)=>{try{this._send({type:"connectTransport",transportId:s.id,dtlsParameters:i}),a()}catch(c){o(c)}}),s.on("connectionstatechange",i=>{if(n===this._generation){if(i==="connected"){this._clearRecvIceRestart(),this._recvIceRestartAttempts=0,this._reportSelectedCandidatePair(s);return}if(!(this._intentionalDisconnect&&i==="closed")&&(i==="failed"||i==="disconnected")){if(this._tryRestartRecvIce())return;i==="failed"&&this._emitError(new Error(`media transport ${i}`),i)}}}),this._recvTransport=s}async _reportSelectedCandidatePair(e){let t=null;if(typeof e.getStats=="function")try{t=await e.getStats()}catch{}this._recvTransport===e&&(this._selectedCandidatePair=kp(t),!this._candidatePairDiagnosticEmitted&&(this._candidatePairDiagnosticEmitted=!0,this._emitDiagnostic({level:"info",kind:"ice-candidate-pair",message:`selected ICE candidate pair: local=${this._selectedCandidatePair.localType??"unknown"} remote=${this._selectedCandidatePair.remoteType??"unknown"} protocol=${this._selectedCandidatePair.protocol??"unknown"} remote=${this._selectedCandidatePair.remoteAddress??"unknown"}:${this._selectedCandidatePair.remotePort??"unknown"}`,detail:{sessionId:this._options.sessionId,...this._selectedCandidatePair}})))}_tryRestartRecvIce(){let e=this._recvTransport;return!e||e.closed?!1:this._recvIceRestartTimer?!0:this._recvIceRestartAttempts>=ca?!1:(this._recvIceRestartAttempts++,this._armRecvIceRestartWatchdog(),this._requestIceRestart(e.id),!0)}_trySendIceRestart(){let e=this._sendTransport;return!e||e.closed?!1:this._sendIceRestartTimer?!0:this._sendIceRestartAttempts>=ca?!1:(this._sendIceRestartAttempts++,this._armSendIceRestartWatchdog(),this._requestIceRestart(e.id),!0)}_requestIceRestart(e){this._send({type:"restartIce",transportId:e})}_onIceRestarted(e){let t=e.transportId??e.id,s=e.iceParameters;if(!s)return;let n=!!this._recvTransport&&this._recvTransport.id===t,i=!n&&!!this._sendTransport&&this._sendTransport.id===t,a=n?this._recvTransport:i?this._sendTransport:null;a&&(Promise.resolve(a.restartIce({iceParameters:s})).catch(o=>{this._emitter.emit("error",o instanceof Error?o:new Error(String(o)))}),n&&this._recvIceRestartTimer?this._armRecvIceRestartWatchdog():i&&this._sendIceRestartTimer&&this._armSendIceRestartWatchdog())}_armRecvIceRestartWatchdog(){this._clearRecvIceRestart();let e=this._generation;this._recvIceRestartTimer=setTimeout(()=>{this._recvIceRestartTimer=null,!(e!==this._generation||this._intentionalDisconnect)&&this._recvTransport?.connectionState!=="connected"&&this._emitError(new Error("media transport failed (ice restart timeout)"),"failed")},da)}_armSendIceRestartWatchdog(){this._clearSendIceRestart();let e=this._generation;this._sendIceRestartTimer=setTimeout(()=>{this._sendIceRestartTimer=null,!(e!==this._generation||this._intentionalDisconnect)&&this._sendTransport?.connectionState!=="connected"&&this._emitError(new Error("media send transport failed (ice restart timeout)"),"failed")},da)}_clearRecvIceRestart(){this._recvIceRestartTimer&&(clearTimeout(this._recvIceRestartTimer),this._recvIceRestartTimer=null)}_clearSendIceRestart(){this._sendIceRestartTimer&&(clearTimeout(this._sendIceRestartTimer),this._sendIceRestartTimer=null)}async _onCreateSendTransport(e){if(!this._device)return;let t=this._device.createSendTransport({id:e.id,iceParameters:e.iceParameters,iceCandidates:e.iceCandidates,dtlsParameters:e.dtlsParameters,...e.sctpParameters?{sctpParameters:e.sctpParameters}:{},iceServers:this._options.iceServers??pa});this._sendIceRestartAttempts=0,this._clearSendIceRestart();let s=this._generation;t.on("connect",({dtlsParameters:n},i,a)=>{try{this._send({type:"connectSendTransport",transportId:t.id,dtlsParameters:n}),i()}catch(o){a(o)}}),t.on("produce",({kind:n,rtpParameters:i,appData:a},o,c)=>{if(this._pendingProduce){c(new Error("produce already pending"));return}let p=a&&typeof a.name=="string"?a.name:void 0,d=setTimeout(()=>{let l=this._pendingProduce;if(!l||l.timeoutId!==d)return;this._pendingProduce=null;let u=new Mt(n,{stream:p,timeoutMs:Ot});this._setPhase("error",{error:{reason:u.message,code:"produce-ack-timeout",kind:"produce-timeout"}}),this._emitter.emit("error",u),l.reject(u)},Ot);this._pendingProduce={timeoutId:d,resolve:l=>{o({id:l})},reject:c};try{this._send(p?{type:"produce",kind:n,name:p,rtpParameters:i}:{type:"produce",kind:n,rtpParameters:i})}catch(l){this._pendingProduce?.timeoutId===d&&(this._pendingProduce=null,clearTimeout(d)),c(l)}}),t.on("producedata",({sctpStreamParameters:n,label:i,protocol:a},o,c)=>{try{i&&this._pendingDataProduce.set(i,{resolve:p=>o({id:p}),reject:c}),this._send({type:"produceData",sctpStreamParameters:n,label:i,protocol:a})}catch(p){i&&this._pendingDataProduce.delete(i),c(p)}}),t.on("connectionstatechange",n=>{if(s===this._generation){if(n==="connected"){this._clearSendIceRestart(),this._sendIceRestartAttempts=0;return}this._intentionalDisconnect&&n==="closed"||(n==="failed"||n==="disconnected")&&this._trySendIceRestart()||(n==="failed"||n==="closed")&&this._emitError(new Error(`media send transport ${n}`),n)}}),this._sendTransport=t,this._settleSendTransportWaiters(t),this._emitter.emit("audioTransportReady"),this._republishPublishedTracks()}async _republishPublishedTracks(){let e=this._publishedAudio;if(e&&e.track.readyState!=="ended"&&(!this._audioProducer||this._audioProducer.closed))try{await this.addTrack(e.track,e.name)}catch(s){console.warn("[urun] republish: mic re-produce after reconnect failed",s)}else e&&e.track.readyState==="ended"&&console.warn("[urun] republish: published mic track is ended \u2014 not republishing (device re-acquisition is the app/page-recovery pass)");let t=this._publishedVideo;if(t&&t.track.readyState!=="ended"&&(!this._videoProducer||this._videoProducer.closed))try{await this.addVideoTrack(t.track,t.name)}catch(s){console.warn("[urun] republish: camera re-produce after reconnect failed",s)}else t&&t.track.readyState==="ended"&&console.warn("[urun] republish: published camera track is ended \u2014 not republishing (device re-acquisition is the app/page-recovery pass)")}async _onConsumeData(e){if(!this._recvTransport)return;let t=e.label,s=this._streamNameFromLabel(t);if(!s)return;let n=await this._recvTransport.consumeData({id:e.id,dataProducerId:e.dataProducerId,sctpStreamParameters:e.sctpStreamParameters,label:t,protocol:e.protocol});this._dataConsumers.set(s,n),n.on("message",o=>{try{let c=typeof o=="string"?new TextEncoder().encode(o):new Uint8Array(o);this._dispatchStreamData(s,un(c))}catch(c){this._emitter.emit("error",c instanceof Error?c:new Error(String(c)))}});let i=!1,a=()=>{i||n.closed||(i=!0,this._send({type:"dataConsumerReady",id:e.id}))};n.readyState==="open"?a():n.on("open",a)}async _onConsume(e){if(!this._recvTransport)return;let t=this._generation,s=await this._recvTransport.consume({id:e.id,producerId:e.producerId,kind:e.kind,rtpParameters:e.rtpParameters});this._consumers.set(s.id,s),this._tracks.set(s.track.id,s.track);let n=e.streamName??e.label;n&&this._tracksByName.set(n,s.track),s.track.addEventListener?.("unmute",()=>{t!==this._generation||this._intentionalDisconnect||this._isTerminalPhase()||this._liveReached||this._setPhase("live")},{once:!0}),this._emitter.emit("track",s.track);let i=s.id;s.track.addEventListener("ended",()=>{t!==this._generation||this._intentionalDisconnect||this._closeConsumer(i)},{once:!0}),this._send({type:"resumeConsumer",consumerId:s.id}),this._startMediaMonitor()}_closeConsumer(e){let t=this._consumers.get(e);if(!t)return;this._consumers.delete(e);let s=t.track;try{t.close()}catch{}if(s){this._tracks.delete(s.id);for(let[n,i]of this._tracksByName)i===s&&this._tracksByName.delete(n)}}_closeConsumersByProducer(e){for(let[t,s]of this._consumers)s.producerId===e&&this._closeConsumer(t)}_mediaPollMs(){let e=this._options.mediaLiveness?.pollMs;return e===void 0?mp:e}_mediaStallTimeoutMs(){let e=this._options.mediaLiveness?.stallTimeoutMs;return e===void 0?gp:e}_startMediaMonitor(){let e=this._mediaPollMs();if(e<=0||this._mediaMonitorTimer)return;this._lastInboundTotal=0,this._mediaEverFlowed=!1,this._lastInboundAdvanceAt=Date.now(),this._mediaDeathHandled=!1,this._decodeSignalSeen=!1,this._lastFramesDecoded=0,this._lastDecodeAdvanceAt=0,this._decodeDeathHandled=!1,this._decodeWindowStartSample=kt();let t=this._generation;this._mediaMonitorTimer=setInterval(()=>{t!==this._generation||this._intentionalDisconnect||this._isTerminalPhase()||this._sampleMediaLiveness(t)},e)}_stopMediaMonitor(){this._mediaMonitorTimer&&(clearInterval(this._mediaMonitorTimer),this._mediaMonitorTimer=null)}async _sampleMediaLiveness(e){if(this._consumers.size===0)return;let t=kt(),s=await Promise.all(Array.from(this._consumers.values(),d=>Pp(d)));for(let d of s)Tp(t,d);if(e!==this._generation||this._intentionalDisconnect||this._isTerminalPhase())return;this._latestInboundSample=t;let n=Date.now(),{total:i,framesDecoded:a}=t;if(i>this._lastInboundTotal){this._lastInboundTotal=i,this._lastInboundAdvanceAt=n,i>0&&(this._mediaEverFlowed=!0,this._liveReached||this._setPhase("live")),this._checkDecodeLiveness(a,n);return}if(!this._mediaEverFlowed||this._mediaDeathHandled||n-this._lastInboundAdvanceAt<this._mediaStallTimeoutMs())return;let o=this._mediaStallTimeoutMs(),c={sessionId:this._options.sessionId,stallWindowMs:o,inboundTotal:i,...fa(this._latestInboundSample),...this._selectedCandidatePair};if(this._recvTransport?.connectionState==="connected"){this._emitDiagnostic({level:"info",kind:"media-idle",message:`no inbound media for ${o/1e3}s, but the ICE path is connected \u2014 the sender is idle, not dead; holding the transport`,detail:c}),this._lastInboundAdvanceAt=n,this._lastDecodeAdvanceAt=n;return}this._mediaDeathHandled=!0,this._emitDiagnostic({level:"warning",kind:"media-stall",message:`inbound media stopped advancing for ${o/1e3}s and the ICE path is ${this._recvTransport?.connectionState??"gone"}; reconnecting`,detail:c}),this._renegotiate()}_checkDecodeLiveness(e,t){if(e!==null){if(!this._decodeSignalSeen){this._decodeSignalSeen=!0,this._lastFramesDecoded=e,this._lastDecodeAdvanceAt=t,this._decodeWindowStartSample=this._latestInboundSample;return}if(e>this._lastFramesDecoded){this._lastFramesDecoded=e,this._lastDecodeAdvanceAt=t,this._decodeWindowStartSample=this._latestInboundSample;return}if(!this._decodeDeathHandled&&t-this._lastDecodeAdvanceAt>=this._mediaStallTimeoutMs()){this._decodeDeathHandled=!0;let s=this._mediaStallTimeoutMs(),n=Ep(this._decodeWindowStartSample,this._latestInboundSample),i=n.lossPct!==null&&n.lossPct>=5?" \u2014 stall is consistent with network packet loss between the SFU and this browser":"";this._emitDiagnostic({level:"warning",kind:"decode-wall",message:`video is arriving but no new frames decoded for ${s/1e3}s (framesDecoded stuck at ${e}) \u2014 decoder stalled${i}; reconnecting the stream`,detail:{sessionId:this._options.sessionId,stallWindowMs:s,inboundTotal:this._lastInboundTotal,framesDecoded:e,...fa(this._latestInboundSample),...n,likelyCause:n.lossPct!==null&&n.lossPct>=5?"network-packet-loss":null,...this._selectedCandidatePair}}),this._renegotiate()}}}_renegotiate(){this._intentionalDisconnect||this._isTerminalPhase()||this._reconnectTimer||(this._stopMediaMonitor(),this._setState("renegotiating"),this._attemptReconnect())}recover(){if(this._intentionalDisconnect||this._isTerminalPhase()||this._connectStartedAt===void 0||this._cancelPendingDial)return;if(!this.isOpen){this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null),this._reconnectAttempts=0,this._attemptReconnect(void 0,!0);return}let e=this._recvTransport?.connectionState;(e==="disconnected"||e==="failed")&&(this._recvIceRestartTimer||(this._recvIceRestartAttempts=0),this._tryRestartRecvIce()||this._renegotiate());let t=this._sendTransport?.connectionState;(t==="disconnected"||t==="failed")&&(this._sendIceRestartTimer||(this._sendIceRestartAttempts=0),this._trySendIceRestart())}_attemptReconnect(e,t=!1){if(this._intentionalDisconnect||this._isTerminalPhase()||this._reconnectTimer)return;if(this._reconnectAttempts>=na){this._setState("failed"),this._emitError(new Error(`Failed after ${na} attempts`));return}let s=t?0:sa[Math.min(this._reconnectAttempts,sa.length-1)];this._reconnectAttempts++,this._state!=="renegotiating"&&this._setState("reconnecting"),this._reconnectTimer=setTimeout(async()=>{this._reconnectTimer=null,this._replaceCurrentLegForReconnect();try{await this.connect(e??this._lastStartOptions)}catch(n){if(n instanceof Error&&n.message==="TransportSession: connect cancelled")return;this._attemptReconnect(e)}},s)}_connectUrls(){let e=[],t=s=>{if(!s)return;let n=la(s)!==void 0,i=this._sessionId&&!n?`${s}${s.includes("?")?"&":"?"}sessionId=${encodeURIComponent(this._sessionId)}`:s;e.includes(i)||e.push(i)};t(this._options.url);for(let s of this._options.fallbackUrls??[])t(s);return e}_connectOnce(e,t,s){return new Promise((n,i)=>{let a=!1,o=!1,c=null,p=new WebSocket(e);this._ws=p;let d=()=>this._ws!==p||t!==this._generation,l=m=>{o||(o=!0,c&&clearTimeout(c),this._cancelPendingDial===u&&(this._cancelPendingDial=null),i(m))},u=m=>{try{p.close()}catch{}l(m)};this._cancelPendingDial=u,c=setTimeout(()=>{try{p.close()}catch{}l(new Error("TransportSession: connect timed out"))},fp),p.onopen=()=>{if(!o){if(d()){try{p.close()}catch{}l(new Error("TransportSession: connect superseded during dial"));return}a=!0,c&&clearTimeout(c),this._connectedUrl=e,this._multiplexer=new Lt(p),p.send(JSON.stringify(this._startMessage(s))),this._scheduleReconnectBudgetReset(),this._setState("connected"),this._liveReached||this._setPhase("connecting"),this._emitter.emit("connected"),o=!0,this._cancelPendingDial===u&&(this._cancelPendingDial=null),n()}},p.onerror=()=>{a||l(new Error("WebSocket connection error"))},p.onclose=()=>{if(!a){l(new Error("WebSocket closed before connecting"));return}if(!d()&&(this._clearReconnectBudgetReset(),c&&clearTimeout(c),this._setState("disconnected"),!this._intentionalDisconnect)){if(this._pastDeadline()&&!at(this._phase.name)){this._setPhase("expired",{error:{reason:"session reached its maximum length",kind:"expired"}}),this._emitter.emit("disconnected");return}this._emitter.emit("disconnected"),!this._isTerminalPhase()&&this._attemptReconnect(s)}},p.onmessage=m=>{if(!(this._ws!==p||t!==this._generation)&&typeof m.data=="string")try{this._handleMessage(JSON.parse(m.data))}catch(f){this._emitter.emit("error",f instanceof Error?f:new Error(String(f)))}}})}_startMessage(e){let t={type:"start",video:e?.video??{width:854,height:480,frameRate:16}};return e?.prompt&&(t.prompt=e.prompt),e?.cameraControl&&(t.camera_control=e.cameraControl),e?.args&&(t.args=e.args),e?.app&&(t.app=e.app),e?.functionName&&(t.function=e.functionName),e?.role&&(t.role=e.role),this._options.orgId&&(t.orgId=this._options.orgId),this._options.jwt&&(t.jwt=this._options.jwt),this._options.authProvider&&(t.authProvider=this._options.authProvider),t}_cleanupSocket(){if(this._clearReconnectBudgetReset(),!this._ws)return;let e=this._ws;this._ws=null,e.onopen=null,e.onmessage=null,e.onerror=null,e.onclose=null;try{e.close()}catch{}}_replaceCurrentLegForReconnect(){this._cleanupSocket(),this._cancelPendingDial?.(new Error("TransportSession: reconnect replacing current dial")),this._cleanupMedia()}_scheduleReconnectBudgetReset(){this._clearReconnectBudgetReset(),this._reconnectAttempts!==0&&(this._stableResetTimer=setTimeout(()=>{this._stableResetTimer=null,this._reconnectAttempts=0},yp))}_clearReconnectBudgetReset(){this._stableResetTimer&&(clearTimeout(this._stableResetTimer),this._stableResetTimer=null)}_cleanupDataChannels(){for(let e of this._dataProducers.values())try{e.close()}catch{}this._dataProducers.clear(),this._dataProducerPromises.clear();for(let e of this._dataConsumers.values())try{e.close()}catch{}this._dataConsumers.clear();for(let e of this._pendingDataProduce.values())try{e.reject(new Error("TransportSession: disconnected"))}catch{}this._pendingDataProduce.clear()}_cleanupMedia(){this._stopMediaMonitor();for(let e of this._consumers.values())try{e.close()}catch{}if(this._consumers.clear(),this._cleanupDataChannels(),this._audioProducer){try{this._audioProducer.close()}catch{}this._audioProducer=null}if(this._videoProducer){try{this._videoProducer.close()}catch{}this._videoProducer=null}if(this._clearRecvIceRestart(),this._clearSendIceRestart(),this._recvTransport){try{this._recvTransport.close()}catch{}this._recvTransport=null}if(this._sendTransport){try{this._sendTransport.close()}catch{}this._sendTransport=null}this._pendingProduce&&(clearTimeout(this._pendingProduce.timeoutId),this._pendingProduce=null),this._device=null,this._tracks.clear(),this._tracksByName.clear(),this._multiplexer&&(this._multiplexer.dispose(),this._multiplexer=null)}_send(e){!this._ws||this._ws.readyState!==WebSocket.OPEN||this._ws.send(JSON.stringify(e))}_setState(e){this._state!==e&&(this._state=e,this._emitter.emit("stateChange",e))}_isTerminalPhase(){return this._phase.name==="ended"||this._phase.name==="expired"?!0:this._phase.name!=="error"?!1:this._phase.error?.kind!=="transport-failed"}_setPhase(e,t){e==="live"&&(this._liveReached=!0);let s={name:e};t?.queue&&(s.queue=t.queue),t?.runtime&&(s.runtime=t.runtime),Gs(e)?(this._wakingSince??=Date.now(),s.wakingSince=this._wakingSince):this._wakingSince=void 0,this._requestId&&(s.requestId=this._requestId),this._sessionId&&(s.sessionId=this._sessionId),this._endsAt!==null&&(s.endsAt=this._endsAt),t?.error&&(s.error=t.error),this._phase=s,this._isTerminalPhase()&&(this._stopMediaMonitor(),this._clearRecvIceRestart(),this._clearSendIceRestart(),this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null)),this._emitter.emit("phase",s)}reportAdmission(e){if(e.requestId&&(this._requestId=e.requestId),this._lastServerStatus=e.status,this._liveReached||at(this._phase.name))return;let{runtime:t,queue:s}=e;if(t?.state==="unavailable"){this._setPhase("unavailable",{runtime:t});return}if(t?.state==="starting"){this._setPhase("provisioning",{runtime:t});return}if(t?.state==="busy"||e.status==="queued"){this._setPhase("queued",{queue:s,runtime:t});return}this._setPhase("provisioning")}_emitError(e,t){this._setPhase("error",{error:{reason:e.message,code:t,kind:"transport-failed"}}),this._emitter.emit("error",e)}reportAllocationFailure(e,t){this._setPhase("error",{error:{reason:e.message,code:"allocation-failed",kind:"create-failed",httpStatus:t}}),this._emitter.emit("error",e)}};function ha(r){return new Promise(e=>setTimeout(e,r))}function Cp(){return ra()}var Ls=["packetsReceived","packetsLost","nackCount","pliCount","firCount","keyFramesDecoded","framesReceived","framesDropped","retransmittedPacketsReceived","retransmittedBytesReceived","jitterBufferDelay","jitterBufferEmittedCount"];function kt(){return{total:0,framesDecoded:null,packetsReceived:null,packetsLost:null,nackCount:null,jitter:null,pliCount:null,firCount:null,keyFramesDecoded:null,framesReceived:null,framesDropped:null,retransmittedPacketsReceived:null,retransmittedBytesReceived:null,jitterBufferDelay:null,jitterBufferEmittedCount:null}}function Tp(r,e){r.total+=e.total,e.framesDecoded!==null&&(r.framesDecoded=(r.framesDecoded??0)+e.framesDecoded),e.jitter!==null&&(r.jitter=r.jitter===null?e.jitter:Math.max(r.jitter,e.jitter));for(let t of Ls)e[t]!==null&&(r[t]=(r[t]??0)+e[t])}function fa(r){return Object.fromEntries(Ls.map(e=>[e,r[e]]))}function ma(r,e){return r===null||e===null||e<r?null:e-r}function Ep(r,e){let t=r.packetsLost!==null&&e.packetsLost!==null?e.packetsLost-r.packetsLost:null,s=ma(r.packetsReceived,e.packetsReceived),n=ma(r.nackCount,e.nackCount),i=t===null?null:Math.max(0,t),a=i!==null&&s!==null?i+s:0;return{packetsLostWindow:t,packetsReceivedWindow:s,nackCountWindow:n,jitterSec:e.jitter,lossPct:a>0&&i!==null?i/a*100:null}}function _a(){return{localType:null,remoteType:null,protocol:null,remoteAddress:null,remotePort:null}}function kp(r){let e=new Map;va(r,o=>{let c=typeof o.id=="string"?o.id:null;c&&e.set(c,o)});let t=Array.from(e.values()).find(o=>o.type==="transport"),s=typeof t?.selectedCandidatePairId=="string"?t.selectedCandidatePairId:null,n=(s?e.get(s):void 0)??Array.from(e.values()).find(o=>o.type==="candidate-pair"&&o.selected===!0);if(!n)return _a();let i=typeof n.localCandidateId=="string"?e.get(n.localCandidateId):void 0,a=typeof n.remoteCandidateId=="string"?e.get(n.remoteCandidateId):void 0;return{localType:typeof i?.candidateType=="string"?i.candidateType:null,remoteType:typeof a?.candidateType=="string"?a.candidateType:null,protocol:typeof i?.protocol=="string"?i.protocol:typeof a?.protocol=="string"?a.protocol:null,remoteAddress:typeof a?.address=="string"?a.address:typeof a?.ip=="string"?a.ip:null,remotePort:typeof a?.port=="number"?a.port:null}}function va(r,e){let t=s=>{s&&typeof s=="object"&&e(s)};if(r instanceof Map)for(let[s,n]of r.entries()){if(!n||typeof n!="object")continue;let i=n;e(typeof i.id=="string"?i:{...i,id:s})}else(Array.isArray(r)||r&&typeof r.forEach=="function")&&r.forEach(t)}async function Pp(r){let e=kt();if(typeof r.getStats!="function")return e;let t;try{t=await r.getStats()}catch{return e}return va(t,n=>{if(n.type==="inbound-rtp"){let i=typeof n.bytesReceived=="number"?n.bytesReceived:0,a=typeof n.packetsReceived=="number"?n.packetsReceived:0;if(e.total+=i+a,typeof n.framesDecoded=="number"&&(e.framesDecoded=(e.framesDecoded??0)+n.framesDecoded),n.kind==="video"||n.mediaType==="video"){typeof n.jitter=="number"&&(e.jitter=e.jitter===null?n.jitter:Math.max(e.jitter,n.jitter));for(let o of Ls)typeof n[o]=="number"&&(e[o]=(e[o]??0)+n[o])}}}),e}function xp(r){if(!r||typeof r!="object")return;let e=r.epoch,t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:void 0}import{WebsocketProvider as Dp}from"y-websocket";import{Awareness as ya}from"y-protocols/awareness";var Ip=1;function _u(r){let e=new URL(r);return`${e.protocol}//${e.host}/doc`}function vu(r){let e=r.WebSocketPolyfill??globalThis.WebSocket;if(!e)throw new Error("[urun] no WebSocket implementation available for the yjs doc provider (browser global missing and no WebSocketPolyfill passed)");return(t,s,n)=>{let i=`${r.sessionId}/${t}`,a=new Dp(r.serverUrl,i,s,{awareness:n,params:{dsv:String(Ip),...r.token?{token:r.token}:{}},WebSocketPolyfill:e,disableBc:!0});return{get awareness(){return a.awareness},get synced(){return a.synced},onSync(o){let c=p=>o(p);return a.on("sync",c),()=>a.off("sync",c)},ensureConnected(){a.wsconnected||a.connect()},destroy(){a.destroy()}}}}var Ms=class{constructor(e,t,s){this._name=e;this._doc=t;this.awareness=s}_name;_doc;awareness;_inner=null;_innerUnsub=null;_syncHandlers=new Set;_destroyed=!1;get synced(){return this._inner?.synced??!1}get destroyed(){return this._destroyed}onSync(e){return this._syncHandlers.add(e),()=>this._syncHandlers.delete(e)}attach(e){if(!this._destroyed&&(this._inner&&(this._innerUnsub?.(),this._innerUnsub=null,this._inner.destroy(),this._inner=null),this._inner=e(this._name,this._doc,this.awareness),this._innerUnsub=this._inner.onSync(t=>{for(let s of[...this._syncHandlers])s(t)}),this._inner.synced))for(let t of[...this._syncHandlers])t(!0)}ensureConnected(){this._inner?.ensureConnected?.()}destroy(){this._destroyed=!0,this._innerUnsub?.(),this._innerUnsub=null,this._inner?.destroy(),this._inner=null,this._syncHandlers.clear()}},wa=class{_target=null;_bridges=[];connect=(e,t,s)=>{let n=new Ms(e,t,s);return this._bridges.push(n),this._target&&n.attach(this._target),n};get connected(){return this._target!==null}setTarget(e){if(this._target!==e){this._target=e,this._bridges=this._bridges.filter(t=>!t.destroyed);for(let t of this._bridges)t.attach(e)}}};import*as xt from"yjs";function Dt(r){if(r===null||typeof r!="object"||Array.isArray(r))return!1;let e=Object.getPrototypeOf(r);return e===Object.prototype||e===null}var Er="$bytes";function Lp(r){return r instanceof Uint8Array||r instanceof ArrayBuffer}function Mp(r){if(!Dt(r))return!1;let e=Object.keys(r);return e.length===1&&e[0]===Er&&typeof r[Er]=="string"}function Op(r){return r instanceof ArrayBuffer?new Uint8Array(r):r}function Ap(r){if(typeof Buffer<"u")return Buffer.from(r).toString("base64");let e="";for(let t=0;t<r.length;t++)e+=String.fromCharCode(r[t]);return btoa(e)}function Np(r){if(typeof Buffer<"u")return new Uint8Array(Buffer.from(r,"base64"));let e=atob(r),t=new Uint8Array(e.length);for(let s=0;s<e.length;s++)t[s]=e.charCodeAt(s);return t}function Os(r){if(Lp(r))return{[Er]:Ap(Op(r))};if(Array.isArray(r))return r.map(Os);if(Dt(r)){let e={};for(let[t,s]of Object.entries(r))e[t]=Os(s);return e}return r}function Pt(r){if(Mp(r))return Np(r[Er]);if(Array.isArray(r))return r.map(Pt);if(Dt(r)){let e={};for(let[t,s]of Object.entries(r))e[t]=Pt(s);return e}return r}var Sa=Symbol("urun:doc:path-absent");function jp(r,e){let t=e.split("."),s=r;for(let n of t){if(s===null||typeof s!="object"||!(n in s))return Sa;s=s[n]}return s}function Fp(r,e){return r===e?!0:JSON.stringify(r)===JSON.stringify(e)}function As(r,e){for(let[t,s]of Object.entries(e))if(Dt(s)){let n=r.get(t);if(!(n instanceof xt.Map)){let i=n;n=new xt.Map,r.set(t,n),Dt(i)&&As(n,i)}As(n,s)}else{if(Fp(r.get(t),s))continue;r.set(t,s)}}var qp=Symbol("urun:doc:local"),ba=class{_doc=new xt.Doc;_root=this._doc.getMap("session");_awareness=new ya(this._doc);_listeners=new Set;_key;_sessionId;_connection=null;_connUnsub=null;_synced;_syncWaiters=new Set;_texts=new Map;_observer=()=>this.notify();constructor(e,t,s){this._key=e,this._sessionId=t,this._root.observeDeep(this._observer),s?(this._connection=s(e,this._doc,this._awareness),this._synced=this._connection.synced,this._connUnsub=this._connection.onSync(n=>{n&&this._markSynced()}),this._synced&&this._markSynced()):this._synced=!0}get awareness(){return this._awareness}setSessionId(e){this._sessionId=e}get synced(){return this._synced}ensureConnected(){this._connection?.ensureConnected?.()}onSynced(e){return this._synced?(e(),()=>{}):(this._syncWaiters.add(e),()=>this._syncWaiters.delete(e))}set(e){e=Os(e),this.applyPatch(e)}get(e,t){let s=this.snapshot();if(!e)return Pt(s);let n=jp(s,e);return n===Sa?t:Pt(n)}on(e,t){return this._listeners.add(t),()=>this._listeners.delete(t)}text(e){let t=this._texts.get(e);return t||(t=new Ns(this._doc.getText(`text:${e}`)),this._texts.set(e,t)),t}dispose(){this._root.unobserveDeep(this._observer),this._connUnsub?.(),this._connUnsub=null,this._connection?.destroy(),this._connection=null,this._listeners.clear(),this._syncWaiters.clear();for(let e of this._texts.values())e.dispose();this._texts.clear(),this._awareness.destroy(),this._doc.destroy()}_markSynced(){let e=[...this._syncWaiters];this._synced=!0,this._syncWaiters.clear();for(let t of e)t()}applyPatch(e){this._doc.transact(()=>{As(this._root,e)},qp)}snapshot(){return this._root.toJSON()}notify(){let e=Pt(this.snapshot());for(let t of this._listeners)t(e)}},Ns=class{constructor(e){this._ytext=e;this._observer=t=>{for(let s of t.delta)if(typeof s.insert=="string"&&s.insert.length>0){let n=s.insert;for(let i of this._delta)i(n)}},this._ytext.observe(this._observer)}_ytext;_delta=new Set;_observer;append(e){e.length!==0&&this._ytext.insert(this._ytext.length,e)}toString(){return this._ytext.toString()}get length(){return this._ytext.length}on(e,t){return this._delta.add(t),()=>this._delta.delete(t)}dispose(){this._ytext.unobserve(this._observer),this._delta.clear()}};function Su(r){return{get clientId(){return r.clientID},set(e){r.setLocalState(e)},setField(e,t){r.setLocalStateField(e,t)},getLocal(){return r.getLocalState()??null},getStates(){return r.getStates()},on(e,t){let s=()=>t(r.getStates());return r.on("change",s),s(),()=>r.off("change",s)}}}export{Lt as a,$s as b,Us as c,we as d,Ne as e,zs as f,Bs as g,Ws as h,Ot as i,Mt as j,Hs as k,Vs as l,Ia as m,ye as n,zp as o,ct as p,ee as q,Gs as r,La as s,Hp as t,Vp as u,Ma as v,Oa as w,dt as x,kr as y,Pr as z,le as A,Zs as B,Xp as C,Zp as D,el as E,tl as F,rl as G,qt as H,nn as I,an as J,ra as K,on as L,il as M,uu as N,Is as O,Sp as P,hu as Q,ua as R,Ip as S,_u as T,vu as U,wa as V,ba as W,Su as X};
|