@urun-sh/core 0.1.6 → 0.1.8
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/README.md +10 -5
- package/dist/{chunk-YOWFDYKX.mjs → chunk-ADK75OQ6.mjs} +5 -5
- package/dist/index.d.mts +23 -8
- package/dist/index.d.ts +23 -8
- package/dist/index.js +5 -5
- package/dist/index.mjs +1 -1
- package/dist/{internal-D8r8sCkX.d.mts → internal-BVUaf1Cq.d.mts} +32 -17
- package/dist/{internal-D8r8sCkX.d.ts → internal-BVUaf1Cq.d.ts} +32 -17
- 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/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";var dn=Object.create;var vt=Object.defineProperty;var pn=Object.getOwnPropertyDescriptor;var ln=Object.getOwnPropertyNames;var un=Object.getPrototypeOf,hn=Object.prototype.hasOwnProperty;var mn=(s,e)=>()=>(s&&(e=s(s=0)),e);var C=(s,e)=>()=>(e||s((e={exports:{}}).exports,e),e.exports),ds=(s,e)=>{for(var t in e)vt(s,t,{get:e[t],enumerable:!0})},ps=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of ln(e))!hn.call(s,i)&&i!==t&&vt(s,i,{get:()=>e[i],enumerable:!(r=pn(e,i))||r.enumerable});return s};var et=(s,e,t)=>(t=s!=null?dn(un(s)):{},ps(e||!s||!s.__esModule?vt(t,"default",{value:s,enumerable:!0}):t,s)),ls=s=>ps(vt({},"__esModule",{value:!0}),s);var hs=C((Nc,us)=>{"use strict";var De=1e3,Le=De*60,Ie=Le*60,ye=Ie*24,_n=ye*7,vn=ye*365.25;us.exports=function(s,e){e=e||{};var t=typeof s;if(t==="string"&&s.length>0)return wn(s);if(t==="number"&&isFinite(s))return e.long?bn(s):yn(s);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(s))};function wn(s){if(s=String(s),!(s.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(s);if(e){var t=parseFloat(e[1]),r=(e[2]||"ms").toLowerCase();switch(r){case"years":case"year":case"yrs":case"yr":case"y":return t*vn;case"weeks":case"week":case"w":return t*_n;case"days":case"day":case"d":return t*ye;case"hours":case"hour":case"hrs":case"hr":case"h":return t*Ie;case"minutes":case"minute":case"mins":case"min":case"m":return t*Le;case"seconds":case"second":case"secs":case"sec":case"s":return t*De;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:return}}}}function yn(s){var e=Math.abs(s);return e>=ye?Math.round(s/ye)+"d":e>=Ie?Math.round(s/Ie)+"h":e>=Le?Math.round(s/Le)+"m":e>=De?Math.round(s/De)+"s":s+"ms"}function bn(s){var e=Math.abs(s);return e>=ye?yt(s,e,ye,"day"):e>=Ie?yt(s,e,Ie,"hour"):e>=Le?yt(s,e,Le,"minute"):e>=De?yt(s,e,De,"second"):s+" ms"}function yt(s,e,t,r){var i=e>=t*1.5;return Math.round(s/t)+" "+r+(i?"s":"")}});var dr=C((jc,ms)=>{"use strict";function Sn(s){t.debug=t,t.default=t,t.coerce=c,t.disable=a,t.enable=i,t.enabled=o,t.humanize=hs(),t.destroy=p,Object.keys(s).forEach(d=>{t[d]=s[d]}),t.names=[],t.skips=[],t.formatters={};function e(d){let l=0;for(let u=0;u<d.length;u++)l=(l<<5)-l+d.charCodeAt(u),l|=0;return t.colors[Math.abs(l)%t.colors.length]}t.selectColor=e;function t(d){let l,u=null,m,g;function h(...f){if(!h.enabled)return;let v=h,E=Number(new Date),k=E-(l||E);v.diff=k,v.prev=l,v.curr=E,l=E,f[0]=t.coerce(f[0]),typeof f[0]!="string"&&f.unshift("%O");let P=0;f[0]=f[0].replace(/%([a-zA-Z%])/g,(I,ke)=>{if(I==="%%")return"%";P++;let Ze=t.formatters[ke];if(typeof Ze=="function"){let me=f[P];I=Ze.call(v,me),f.splice(P,1),P--}return I}),t.formatArgs.call(v,f),(v.log||t.log).apply(v,f)}return h.namespace=d,h.useColors=t.useColors(),h.color=t.selectColor(d),h.extend=r,h.destroy=t.destroy,Object.defineProperty(h,"enabled",{enumerable:!0,configurable:!1,get:()=>u!==null?u:(m!==t.namespaces&&(m=t.namespaces,g=t.enabled(d)),g),set:f=>{u=f}}),typeof t.init=="function"&&t.init(h),h}function r(d,l){let u=t(this.namespace+(typeof l>"u"?":":l)+d);return u.log=this.log,u}function i(d){t.save(d),t.namespaces=d,t.names=[],t.skips=[];let l=(typeof d=="string"?d:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let u of l)u[0]==="-"?t.skips.push(u.slice(1)):t.names.push(u)}function n(d,l){let u=0,m=0,g=-1,h=0;for(;u<d.length;)if(m<l.length&&(l[m]===d[u]||l[m]==="*"))l[m]==="*"?(g=m,h=u,m++):(u++,m++);else if(g!==-1)m=g+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(n(d,l))return!1;for(let l of t.names)if(n(d,l))return!0;return!1}function c(d){return d instanceof Error?d.stack||d.message:d}function p(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.enable(t.load()),t}ms.exports=Sn});var fs=C((H,bt)=>{"use strict";H.formatArgs=Rn;H.save=Tn;H.load=En;H.useColors=Cn;H.storage=xn();H.destroy=(()=>{let s=!1;return()=>{s||(s=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();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 Cn(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let s;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(s=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(s[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function Rn(s){if(s[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+s[0]+(this.useColors?"%c ":" ")+"+"+bt.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;s.splice(1,0,e,"color: inherit");let t=0,r=0;s[0].replace(/%[a-zA-Z%]/g,i=>{i!=="%%"&&(t++,i==="%c"&&(r=t))}),s.splice(r,0,e)}H.log=console.debug||console.log||(()=>{});function Tn(s){try{s?H.storage.setItem("debug",s):H.storage.removeItem("debug")}catch{}}function En(){let s;try{s=H.storage.getItem("debug")||H.storage.getItem("DEBUG")}catch{}return!s&&typeof process<"u"&&"env"in process&&(s=process.env.DEBUG),s}function xn(){try{return localStorage}catch{}}bt.exports=dr()(H);var{formatters:kn}=bt.exports;kn.j=function(s){try{return JSON.stringify(s)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var _s={};ds(_s,{createSupportsColor:()=>lr,default:()=>Mn});function Q(s,e=globalThis.Deno?globalThis.Deno.args:Ct.default.argv){let t=s.startsWith("-")?"":s.length===1?"-":"--",r=e.indexOf(t+s),i=e.indexOf("--");return r!==-1&&(i===-1||r<i)}function Pn(){if(!("FORCE_COLOR"in M))return;if(M.FORCE_COLOR==="true")return 1;if(M.FORCE_COLOR==="false")return 0;if(M.FORCE_COLOR.length===0)return 1;let s=Math.min(Number.parseInt(M.FORCE_COLOR,10),3);if([0,1,2,3].includes(s))return s}function Dn(s){return s===0?!1:{level:s,hasBasic:!0,has256:s>=2,has16m:s>=3}}function Ln(s,{streamIsTTY:e,sniffFlags:t=!0}={}){let r=Pn();r!==void 0&&(St=r);let i=t?St:r;if(i===0)return 0;if(t){if(Q("color=16m")||Q("color=full")||Q("color=truecolor"))return 3;if(Q("color=256"))return 2}if("TF_BUILD"in M&&"AGENT_NAME"in M)return 1;if(s&&!e&&i===void 0)return 0;let n=i||0;if(M.TERM==="dumb")return n;if(Ct.default.platform==="win32"){let a=gs.default.release().split(".");return Number(a[0])>=10&&Number(a[2])>=10586?Number(a[2])>=14931?3:2:1}if("CI"in M)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(a=>a in M)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(a=>a in M)||M.CI_NAME==="codeship"?1:n;if("TEAMCITY_VERSION"in M)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(M.TEAMCITY_VERSION)?1:0;if(M.COLORTERM==="truecolor"||M.TERM==="xterm-kitty"||M.TERM==="xterm-ghostty"||M.TERM==="wezterm")return 3;if("TERM_PROGRAM"in M){let a=Number.parseInt((M.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(M.TERM_PROGRAM){case"iTerm.app":return a>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(M.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(M.TERM)||"COLORTERM"in M?1:n}function lr(s,e={}){let t=Ln(s,{streamIsTTY:s&&s.isTTY,...e});return Dn(t)}var Ct,gs,pr,M,St,In,Mn,vs=mn(()=>{"use strict";Ct=et(require("process"),1),gs=et(require("os"),1),pr=et(require("tty"),1);({env:M}=Ct.default);Q("no-color")||Q("no-colors")||Q("color=false")||Q("color=never")?St=0:(Q("color")||Q("colors")||Q("color=true")||Q("color=always"))&&(St=1);In={stdout:lr({isTTY:pr.default.isatty(1)}),stderr:lr({isTTY:pr.default.isatty(2)})},Mn=In});var ys=C((A,Tt)=>{"use strict";var On=require("tty"),Rt=require("util");A.init=qn;A.log=Fn;A.formatArgs=jn;A.save=$n;A.load=zn;A.useColors=Nn;A.destroy=Rt.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");A.colors=[6,2,3,4,5,1];try{let s=(vs(),ls(_s));s&&(s.stderr||s).level>=2&&(A.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{}A.inspectOpts=Object.keys(process.env).filter(s=>/^debug_/i.test(s)).reduce((s,e)=>{let t=e.substring(6).toLowerCase().replace(/_([a-z])/g,(i,n)=>n.toUpperCase()),r=process.env[e];return/^(yes|on|true|enabled)$/i.test(r)?r=!0:/^(no|off|false|disabled)$/i.test(r)?r=!1:r==="null"?r=null:r=Number(r),s[t]=r,s},{});function Nn(){return"colors"in A.inspectOpts?!!A.inspectOpts.colors:On.isatty(process.stderr.fd)}function jn(s){let{namespace:e,useColors:t}=this;if(t){let r=this.color,i="\x1B[3"+(r<8?r:"8;5;"+r),n=` ${i};1m${e} \x1B[0m`;s[0]=n+s[0].split(`
|
|
1
|
+
"use strict";var hn=Object.create;var vt=Object.defineProperty;var mn=Object.getOwnPropertyDescriptor;var fn=Object.getOwnPropertyNames;var gn=Object.getPrototypeOf,_n=Object.prototype.hasOwnProperty;var vn=(s,e)=>()=>(s&&(e=s(s=0)),e);var C=(s,e)=>()=>(e||s((e={exports:{}}).exports,e),e.exports),ls=(s,e)=>{for(var t in e)vt(s,t,{get:e[t],enumerable:!0})},us=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of fn(e))!_n.call(s,i)&&i!==t&&vt(s,i,{get:()=>e[i],enumerable:!(r=mn(e,i))||r.enumerable});return s};var et=(s,e,t)=>(t=s!=null?hn(gn(s)):{},us(e||!s||!s.__esModule?vt(t,"default",{value:s,enumerable:!0}):t,s)),hs=s=>us(vt({},"__esModule",{value:!0}),s);var fs=C((Bc,ms)=>{"use strict";var De=1e3,Le=De*60,Ie=Le*60,ye=Ie*24,yn=ye*7,bn=ye*365.25;ms.exports=function(s,e){e=e||{};var t=typeof s;if(t==="string"&&s.length>0)return Sn(s);if(t==="number"&&isFinite(s))return e.long?Rn(s):Cn(s);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(s))};function Sn(s){if(s=String(s),!(s.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(s);if(e){var t=parseFloat(e[1]),r=(e[2]||"ms").toLowerCase();switch(r){case"years":case"year":case"yrs":case"yr":case"y":return t*bn;case"weeks":case"week":case"w":return t*yn;case"days":case"day":case"d":return t*ye;case"hours":case"hour":case"hrs":case"hr":case"h":return t*Ie;case"minutes":case"minute":case"mins":case"min":case"m":return t*Le;case"seconds":case"second":case"secs":case"sec":case"s":return t*De;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:return}}}}function Cn(s){var e=Math.abs(s);return e>=ye?Math.round(s/ye)+"d":e>=Ie?Math.round(s/Ie)+"h":e>=Le?Math.round(s/Le)+"m":e>=De?Math.round(s/De)+"s":s+"ms"}function Rn(s){var e=Math.abs(s);return e>=ye?yt(s,e,ye,"day"):e>=Ie?yt(s,e,Ie,"hour"):e>=Le?yt(s,e,Le,"minute"):e>=De?yt(s,e,De,"second"):s+" ms"}function yt(s,e,t,r){var i=e>=t*1.5;return Math.round(s/t)+" "+r+(i?"s":"")}});var pr=C((Uc,gs)=>{"use strict";function Tn(s){t.debug=t,t.default=t,t.coerce=c,t.disable=a,t.enable=i,t.enabled=o,t.humanize=fs(),t.destroy=p,Object.keys(s).forEach(d=>{t[d]=s[d]}),t.names=[],t.skips=[],t.formatters={};function e(d){let l=0;for(let u=0;u<d.length;u++)l=(l<<5)-l+d.charCodeAt(u),l|=0;return t.colors[Math.abs(l)%t.colors.length]}t.selectColor=e;function t(d){let l,u=null,m,g;function h(...f){if(!h.enabled)return;let v=h,E=Number(new Date),k=E-(l||E);v.diff=k,v.prev=l,v.curr=E,l=E,f[0]=t.coerce(f[0]),typeof f[0]!="string"&&f.unshift("%O");let P=0;f[0]=f[0].replace(/%([a-zA-Z%])/g,(I,ke)=>{if(I==="%%")return"%";P++;let Xe=t.formatters[ke];if(typeof Xe=="function"){let me=f[P];I=Xe.call(v,me),f.splice(P,1),P--}return I}),t.formatArgs.call(v,f),(v.log||t.log).apply(v,f)}return h.namespace=d,h.useColors=t.useColors(),h.color=t.selectColor(d),h.extend=r,h.destroy=t.destroy,Object.defineProperty(h,"enabled",{enumerable:!0,configurable:!1,get:()=>u!==null?u:(m!==t.namespaces&&(m=t.namespaces,g=t.enabled(d)),g),set:f=>{u=f}}),typeof t.init=="function"&&t.init(h),h}function r(d,l){let u=t(this.namespace+(typeof l>"u"?":":l)+d);return u.log=this.log,u}function i(d){t.save(d),t.namespaces=d,t.names=[],t.skips=[];let l=(typeof d=="string"?d:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let u of l)u[0]==="-"?t.skips.push(u.slice(1)):t.names.push(u)}function n(d,l){let u=0,m=0,g=-1,h=0;for(;u<d.length;)if(m<l.length&&(l[m]===d[u]||l[m]==="*"))l[m]==="*"?(g=m,h=u,m++):(u++,m++);else if(g!==-1)m=g+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(n(d,l))return!1;for(let l of t.names)if(n(d,l))return!0;return!1}function c(d){return d instanceof Error?d.stack||d.message:d}function p(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.enable(t.load()),t}gs.exports=Tn});var _s=C((H,bt)=>{"use strict";H.formatArgs=xn;H.save=kn;H.load=Pn;H.useColors=En;H.storage=Dn();H.destroy=(()=>{let s=!1;return()=>{s||(s=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();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 En(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let s;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(s=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(s[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function xn(s){if(s[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+s[0]+(this.useColors?"%c ":" ")+"+"+bt.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;s.splice(1,0,e,"color: inherit");let t=0,r=0;s[0].replace(/%[a-zA-Z%]/g,i=>{i!=="%%"&&(t++,i==="%c"&&(r=t))}),s.splice(r,0,e)}H.log=console.debug||console.log||(()=>{});function kn(s){try{s?H.storage.setItem("debug",s):H.storage.removeItem("debug")}catch{}}function Pn(){let s;try{s=H.storage.getItem("debug")||H.storage.getItem("DEBUG")}catch{}return!s&&typeof process<"u"&&"env"in process&&(s=process.env.DEBUG),s}function Dn(){try{return localStorage}catch{}}bt.exports=pr()(H);var{formatters:Ln}=bt.exports;Ln.j=function(s){try{return JSON.stringify(s)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var ws={};ls(ws,{createSupportsColor:()=>ur,default:()=>jn});function Q(s,e=globalThis.Deno?globalThis.Deno.args:Ct.default.argv){let t=s.startsWith("-")?"":s.length===1?"-":"--",r=e.indexOf(t+s),i=e.indexOf("--");return r!==-1&&(i===-1||r<i)}function In(){if(!("FORCE_COLOR"in M))return;if(M.FORCE_COLOR==="true")return 1;if(M.FORCE_COLOR==="false")return 0;if(M.FORCE_COLOR.length===0)return 1;let s=Math.min(Number.parseInt(M.FORCE_COLOR,10),3);if([0,1,2,3].includes(s))return s}function Mn(s){return s===0?!1:{level:s,hasBasic:!0,has256:s>=2,has16m:s>=3}}function On(s,{streamIsTTY:e,sniffFlags:t=!0}={}){let r=In();r!==void 0&&(St=r);let i=t?St:r;if(i===0)return 0;if(t){if(Q("color=16m")||Q("color=full")||Q("color=truecolor"))return 3;if(Q("color=256"))return 2}if("TF_BUILD"in M&&"AGENT_NAME"in M)return 1;if(s&&!e&&i===void 0)return 0;let n=i||0;if(M.TERM==="dumb")return n;if(Ct.default.platform==="win32"){let a=vs.default.release().split(".");return Number(a[0])>=10&&Number(a[2])>=10586?Number(a[2])>=14931?3:2:1}if("CI"in M)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(a=>a in M)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(a=>a in M)||M.CI_NAME==="codeship"?1:n;if("TEAMCITY_VERSION"in M)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(M.TEAMCITY_VERSION)?1:0;if(M.COLORTERM==="truecolor"||M.TERM==="xterm-kitty"||M.TERM==="xterm-ghostty"||M.TERM==="wezterm")return 3;if("TERM_PROGRAM"in M){let a=Number.parseInt((M.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(M.TERM_PROGRAM){case"iTerm.app":return a>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(M.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(M.TERM)||"COLORTERM"in M?1:n}function ur(s,e={}){let t=On(s,{streamIsTTY:s&&s.isTTY,...e});return Mn(t)}var Ct,vs,lr,M,St,Nn,jn,ys=vn(()=>{"use strict";Ct=et(require("process"),1),vs=et(require("os"),1),lr=et(require("tty"),1);({env:M}=Ct.default);Q("no-color")||Q("no-colors")||Q("color=false")||Q("color=never")?St=0:(Q("color")||Q("colors")||Q("color=true")||Q("color=always"))&&(St=1);Nn={stdout:ur({isTTY:lr.default.isatty(1)}),stderr:ur({isTTY:lr.default.isatty(2)})},jn=Nn});var Ss=C((A,Tt)=>{"use strict";var An=require("tty"),Rt=require("util");A.init=Vn;A.log=qn;A.formatArgs=zn;A.save=Bn;A.load=Un;A.useColors=Fn;A.destroy=Rt.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");A.colors=[6,2,3,4,5,1];try{let s=(ys(),hs(ws));s&&(s.stderr||s).level>=2&&(A.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{}A.inspectOpts=Object.keys(process.env).filter(s=>/^debug_/i.test(s)).reduce((s,e)=>{let t=e.substring(6).toLowerCase().replace(/_([a-z])/g,(i,n)=>n.toUpperCase()),r=process.env[e];return/^(yes|on|true|enabled)$/i.test(r)?r=!0:/^(no|off|false|disabled)$/i.test(r)?r=!1:r==="null"?r=null:r=Number(r),s[t]=r,s},{});function Fn(){return"colors"in A.inspectOpts?!!A.inspectOpts.colors:An.isatty(process.stderr.fd)}function zn(s){let{namespace:e,useColors:t}=this;if(t){let r=this.color,i="\x1B[3"+(r<8?r:"8;5;"+r),n=` ${i};1m${e} \x1B[0m`;s[0]=n+s[0].split(`
|
|
2
2
|
`).join(`
|
|
3
|
-
`+n),s.push(i+"m+"+Tt.exports.humanize(this.diff)+"\x1B[0m")}else s[0]
|
|
4
|
-
`)}function
|
|
5
|
-
`).map(e=>e.trim()).join(" ")};ws.O=function(s){return this.inspectOpts.colors=this.useColors,Rt.inspect(s,this.inspectOpts)}});var tt=C((Ac,ur)=>{"use strict";typeof process>"u"||process.type==="renderer"||process.browser===!0||process.__nwjs?ur.exports=fs():ur.exports=ys()});var Ss=C(bs=>{"use strict";Object.defineProperty(bs,"__esModule",{value:!0})});var q=C(Et=>{"use strict";Object.defineProperty(Et,"__esModule",{value:!0});Et.Logger=void 0;var Me=tt(),Oe="media-client",hr=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,Me.default)(`${Oe}:${e}`),this._warn=(0,Me.default)(`${Oe}:WARN:${e}`),this._error=(0,Me.default)(`${Oe}:ERROR:${e}`)):(this._debug=(0,Me.default)(Oe),this._warn=(0,Me.default)(`${Oe}:WARN`),this._error=(0,Me.default)(`${Oe}:ERROR`)),this._debug.log=console.info.bind(console),this._warn.log=console.warn.bind(console),this._error.log=console.error.bind(console)}get debug(){return this._debug}get warn(){return this._warn}get error(){return this._error}};Et.Logger=hr});var Ms=C((zc,mr)=>{"use strict";var Ne=typeof Reflect=="object"?Reflect:null,Cs=Ne&&typeof Ne.apply=="function"?Ne.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)},xt;Ne&&typeof Ne.ownKeys=="function"?xt=Ne.ownKeys:Object.getOwnPropertySymbols?xt=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:xt=function(e){return Object.getOwnPropertyNames(e)};function Bn(s){console&&console.warn&&console.warn(s)}var Ts=Number.isNaN||function(e){return e!==e};function D(){D.init.call(this)}mr.exports=D;mr.exports.once=Wn;D.EventEmitter=D;D.prototype._events=void 0;D.prototype._eventsCount=0;D.prototype._maxListeners=void 0;var Rs=10;function kt(s){if(typeof s!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof s)}Object.defineProperty(D,"defaultMaxListeners",{enumerable:!0,get:function(){return Rs},set:function(s){if(typeof s!="number"||s<0||Ts(s))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+s+".");Rs=s}});D.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};D.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||Ts(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 Es(s){return s._maxListeners===void 0?D.defaultMaxListeners:s._maxListeners}D.prototype.getMaxListeners=function(){return Es(this)};D.prototype.emit=function(e){for(var t=[],r=1;r<arguments.length;r++)t.push(arguments[r]);var i=e==="error",n=this._events;if(n!==void 0)i=i&&n.error===void 0;else if(!i)return!1;if(i){var a;if(t.length>0&&(a=t[0]),a instanceof Error)throw a;var o=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw o.context=a,o}var c=n[e];if(c===void 0)return!1;if(typeof c=="function")Cs(c,this,t);else for(var p=c.length,d=Ls(c,p),r=0;r<p;++r)Cs(d[r],this,t);return!0};function xs(s,e,t,r){var i,n,a;if(kt(t),n=s._events,n===void 0?(n=s._events=Object.create(null),s._eventsCount=0):(n.newListener!==void 0&&(s.emit("newListener",e,t.listener?t.listener:t),n=s._events),a=n[e]),a===void 0)a=n[e]=t,++s._eventsCount;else if(typeof a=="function"?a=n[e]=r?[t,a]:[a,t]:r?a.unshift(t):a.push(t),i=Es(s),i>0&&a.length>i&&!a.warned){a.warned=!0;var o=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");o.name="MaxListenersExceededWarning",o.emitter=s,o.type=e,o.count=a.length,Bn(o)}return s}D.prototype.addListener=function(e,t){return xs(this,e,t,!1)};D.prototype.on=D.prototype.addListener;D.prototype.prependListener=function(e,t){return xs(this,e,t,!0)};function Un(){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 ks(s,e,t){var r={fired:!1,wrapFn:void 0,target:s,type:e,listener:t},i=Un.bind(r);return i.listener=t,r.wrapFn=i,i}D.prototype.once=function(e,t){return kt(t),this.on(e,ks(this,e,t)),this};D.prototype.prependOnceListener=function(e,t){return kt(t),this.prependListener(e,ks(this,e,t)),this};D.prototype.removeListener=function(e,t){var r,i,n,a,o;if(kt(t),i=this._events,i===void 0)return this;if(r=i[e],r===void 0)return this;if(r===t||r.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete i[e],i.removeListener&&this.emit("removeListener",e,r.listener||t));else if(typeof r!="function"){for(n=-1,a=r.length-1;a>=0;a--)if(r[a]===t||r[a].listener===t){o=r[a].listener,n=a;break}if(n<0)return this;n===0?r.shift():Vn(r,n),r.length===1&&(i[e]=r[0]),i.removeListener!==void 0&&this.emit("removeListener",e,o||t)}return this};D.prototype.off=D.prototype.removeListener;D.prototype.removeAllListeners=function(e){var t,r,i;if(r=this._events,r===void 0)return this;if(r.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):r[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete r[e]),this;if(arguments.length===0){var n=Object.keys(r),a;for(i=0;i<n.length;++i)a=n[i],a!=="removeListener"&&this.removeAllListeners(a);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(t=r[e],typeof t=="function")this.removeListener(e,t);else if(t!==void 0)for(i=t.length-1;i>=0;i--)this.removeListener(e,t[i]);return this};function Ps(s,e,t){var r=s._events;if(r===void 0)return[];var i=r[e];return i===void 0?[]:typeof i=="function"?t?[i.listener||i]:[i]:t?Hn(i):Ls(i,i.length)}D.prototype.listeners=function(e){return Ps(this,e,!0)};D.prototype.rawListeners=function(e){return Ps(this,e,!1)};D.listenerCount=function(s,e){return typeof s.listenerCount=="function"?s.listenerCount(e):Ds.call(s,e)};D.prototype.listenerCount=Ds;function Ds(s){var e=this._events;if(e!==void 0){var t=e[s];if(typeof t=="function")return 1;if(t!==void 0)return t.length}return 0}D.prototype.eventNames=function(){return this._eventsCount>0?xt(this._events):[]};function Ls(s,e){for(var t=new Array(e),r=0;r<e;++r)t[r]=s[r];return t}function Vn(s,e){for(;e+1<s.length;e++)s[e]=s[e+1];s.pop()}function Hn(s){for(var e=new Array(s.length),t=0;t<e.length;++t)e[t]=s[t].listener||s[t];return e}function Wn(s,e){return new Promise(function(t,r){function i(a){s.removeListener(e,n),r(a)}function n(){typeof s.removeListener=="function"&&s.removeListener("error",i),t([].slice.call(arguments))}Is(s,e,n,{once:!0}),e!=="error"&&Gn(s,i,{once:!0})})}function Gn(s,e,t){typeof s.on=="function"&&Is(s,"error",e,t)}function Is(s,e,t,r){if(typeof s.on=="function")r.once?s.once(e,t):s.on(e,t);else if(typeof s.addEventListener=="function")s.addEventListener(e,function i(n){r.once&&s.removeEventListener(e,i),t(n)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof s)}});var W=C(Pt=>{"use strict";Object.defineProperty(Pt,"__esModule",{value:!0});Pt.EnhancedEventEmitter=void 0;var Kn=Ms(),Qn=q(),Jn=new Qn.Logger("EnhancedEventEmitter"),fr=class extends Kn.EventEmitter{constructor(){super(),this.setMaxListeners(1/0)}close(){super.removeAllListeners()}emit(e,...t){return super.emit(e,...t)}safeEmit(e,...t){try{return super.emit(e,...t)}catch(r){Jn.error("safeEmit() | event listener threw an error [eventName:%s]:%o",e,r);try{super.emit("listenererror",e,r)}catch{}return!!super.listenerCount(e)}}on(e,t){return super.on(e,t),this}off(e,t){return super.off(e,t),this}addListener(e,t){return super.on(e,t),this}prependListener(e,t){return super.prependListener(e,t),this}once(e,t){return super.once(e,t),this}prependOnceListener(e,t){return super.prependOnceListener(e,t),this}removeListener(e,t){return super.off(e,t),this}removeAllListeners(e){return super.removeAllListeners(e),this}listenerCount(e){return super.listenerCount(e)}listeners(e){return super.listeners(e)}rawListeners(e){return super.rawListeners(e)}};Pt.EnhancedEventEmitter=fr});var J=C(je=>{"use strict";Object.defineProperty(je,"__esModule",{value:!0});je.InvalidStateError=je.UnsupportedError=void 0;var gr=class s extends Error{constructor(e){super(e),this.name="UnsupportedError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,s):this.stack=new Error(e).stack}};je.UnsupportedError=gr;var _r=class s extends Error{constructor(e){super(e),this.name="InvalidStateError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,s):this.stack=new Error(e).stack}};je.InvalidStateError=_r});var be=C(rt=>{"use strict";Object.defineProperty(rt,"__esModule",{value:!0});rt.clone=Yn;rt.generateRandomNumber=Xn;rt.deepFreeze=Os;function Yn(s){if(s!==void 0)return Number.isNaN(s)?NaN:typeof structuredClone=="function"?structuredClone(s):JSON.parse(JSON.stringify(s))}function Xn(){return Math.round(Math.random()*1e7)}function Os(s){let e=Reflect.ownKeys(s);for(let t of e){let r=s[t];(r&&typeof r=="object"||typeof r=="function")&&Os(r)}return Object.freeze(s)}});var Ns=C(Dt=>{"use strict";Object.defineProperty(Dt,"__esModule",{value:!0});Dt.Logger=void 0;var Ae=tt(),Fe="h264-profile-level-id",vr=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,Ae.default)(`${Fe}:${e}`),this._warn=(0,Ae.default)(`${Fe}:WARN:${e}`),this._error=(0,Ae.default)(`${Fe}:ERROR:${e}`)):(this._debug=(0,Ae.default)(Fe),this._warn=(0,Ae.default)(`${Fe}:WARN`),this._error=(0,Ae.default)(`${Fe}:ERROR`)),this._debug.log=console.info.bind(console),this._warn.log=console.warn.bind(console),this._error.log=console.error.bind(console)}get debug(){return this._debug}get warn(){return this._warn}get error(){return this._error}};Dt.Logger=vr});var qs=C(F=>{"use strict";Object.defineProperty(F,"__esModule",{value:!0});F.ProfileLevelId=F.Level=F.Profile=void 0;F.parseProfileLevelId=$s;F.profileLevelIdToString=zs;F.profileToString=ra;F.levelToString=sa;F.parseSdpProfileLevelId=Se;F.isSameProfile=ia;F.isSameProfileAndLevel=na;F.generateProfileLevelIdStringForAnswer=aa;F.supportedLevel=oa;var Zn=Ns(),re=new Zn.Logger,L;(function(s){s[s.ConstrainedBaseline=1]="ConstrainedBaseline",s[s.Baseline=2]="Baseline",s[s.Main=3]="Main",s[s.ConstrainedHigh=4]="ConstrainedHigh",s[s.High=5]="High",s[s.PredictiveHigh444=6]="PredictiveHigh444"})(L||(F.Profile=L={}));var _;(function(s){s[s.L1_b=0]="L1_b",s[s.L1=10]="L1",s[s.L1_1=11]="L1_1",s[s.L1_2=12]="L1_2",s[s.L1_3=13]="L1_3",s[s.L2=20]="L2",s[s.L2_1=21]="L2_1",s[s.L2_2=22]="L2_2",s[s.L3=30]="L3",s[s.L3_1=31]="L3_1",s[s.L3_2=32]="L3_2",s[s.L4=40]="L4",s[s.L4_1=41]="L4_1",s[s.L4_2=42]="L4_2",s[s.L5=50]="L5",s[s.L5_1=51]="L5_1",s[s.L5_2=52]="L5_2"})(_||(F.Level=_={}));var $e=class{profile;level;constructor(e,t){this.profile=e,this.level=t}};F.ProfileLevelId=$e;var ea=new $e(L.ConstrainedBaseline,_.L3_1),ee=class{mask;masked_value;constructor(e){this.mask=~As("x",e),this.masked_value=As("1",e)}isMatch(e){return this.masked_value===(e&this.mask)}},te=class{profile_idc;profile_iop;profile;constructor(e,t,r){this.profile_idc=e,this.profile_iop=t,this.profile=r}},ta=[new te(66,new ee("x1xx0000"),L.ConstrainedBaseline),new te(77,new ee("1xxx0000"),L.ConstrainedBaseline),new te(88,new ee("11xx0000"),L.ConstrainedBaseline),new te(66,new ee("x0xx0000"),L.Baseline),new te(88,new ee("10xx0000"),L.Baseline),new te(77,new ee("0x0x0000"),L.Main),new te(100,new ee("00000000"),L.High),new te(100,new ee("00001100"),L.ConstrainedHigh),new te(244,new ee("00000000"),L.PredictiveHigh444)],js=[{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 $s(s){if(typeof s!="string"||s.length!==6)return;let t=parseInt(s,16);if(t===0)return;let r=t&255,i=t>>8&255,n=t>>16&255,a;switch(r){case _.L1_1:{a=(i&16)!==0?_.L1_b:_.L1_1;break}case _.L1:case _.L1_2:case _.L1_3:case _.L2:case _.L2_1:case _.L2_2:case _.L3:case _.L3_1:case _.L3_2:case _.L4:case _.L4_1:case _.L4_2:case _.L5:case _.L5_1:case _.L5_2:{a=r;break}default:{re.warn(`parseProfileLevelId() | unrecognized level_idc [str:${s}, level_idc:${r}]`);return}}for(let o of ta)if(n===o.profile_idc&&o.profile_iop.isMatch(i))return re.debug(`parseProfileLevelId() | result [str:${s}, profile:${o.profile}, level:${a}]`),new $e(o.profile,a);re.warn(`parseProfileLevelId() | unrecognized profile_idc/profile_iop combination [str:${s}, profile_idc:${n}, profile_iop:${i}]`)}function zs(s){if(s.level==_.L1_b)switch(s.profile){case L.ConstrainedBaseline:return"42f00b";case L.Baseline:return"42100b";case L.Main:return"4d100b";default:{re.warn(`profileLevelIdToString() | Level 1_b not is allowed for profile ${s.profile}`);return}}let e;switch(s.profile){case L.ConstrainedBaseline:{e="42e0";break}case L.Baseline:{e="4200";break}case L.Main:{e="4d00";break}case L.ConstrainedHigh:{e="640c";break}case L.High:{e="6400";break}case L.PredictiveHigh444:{e="f400";break}default:{re.warn(`profileLevelIdToString() | unrecognized profile ${s.profile}`);return}}let t=s.level.toString(16);return t.length===1&&(t=`0${t}`),`${e}${t}`}function ra(s){switch(s){case L.ConstrainedBaseline:return"ConstrainedBaseline";case L.Baseline:return"Baseline";case L.Main:return"Main";case L.ConstrainedHigh:return"ConstrainedHigh";case L.High:return"High";case L.PredictiveHigh444:return"PredictiveHigh444";default:{re.warn(`profileToString() | unrecognized profile ${s}`);return}}}function sa(s){switch(s){case _.L1_b:return"1b";case _.L1:return"1";case _.L1_1:return"1.1";case _.L1_2:return"1.2";case _.L1_3:return"1.3";case _.L2:return"2";case _.L2_1:return"2.1";case _.L2_2:return"2.2";case _.L3:return"3";case _.L3_1:return"3.1";case _.L3_2:return"3.2";case _.L4:return"4";case _.L4_1:return"4.1";case _.L4_2:return"4.2";case _.L5:return"5";case _.L5_1:return"5.1";case _.L5_2:return"5.2";default:{re.warn(`levelToString() | unrecognized level ${s}`);return}}}function Se(s={}){let e=s["profile-level-id"];return e?$s(e):ea}function ia(s={},e={}){let t=Se(s),r=Se(e);return!!(t&&r&&t.profile===r.profile)}function na(s={},e={}){let t=Se(s),r=Se(e);return!!(t&&r&&t.profile===r.profile&&t.level==r.level)}function aa(s={},e={}){if(!s["profile-level-id"]&&!e["profile-level-id"]){re.warn("generateProfileLevelIdStringForAnswer() | profile-level-id missing in local and remote params");return}let t=Se(s),r=Se(e);if(!t)throw new TypeError("invalid local_profile_level_id");if(!r)throw new TypeError("invalid remote_profile_level_id");if(t.profile!==r.profile)throw new TypeError("H264 Profile mismatch");let i=Fs(s)&&Fs(e),n=t.level,a=r.level,o=da(n,a),c=i?n:o;return re.debug(`generateProfileLevelIdStringForAnswer() | result [profile:${t.profile}, level:${c}]`),zs(new $e(t.profile,c))}function oa(s,e){for(let r=js.length-1;r>=0;--r){let i=js[r];if(i.max_macroblock_frame_size*256<=s&&i.max_macroblocks_per_second<=e*i.max_macroblock_frame_size)return re.debug(`supportedLevel() | result [max_frame_pixel_count:${s}, max_fps:${e}, level:${i.level}]`),i.level}re.warn(`supportedLevel() | no level supported [max_frame_pixel_count:${s}, max_fps:${e}]`)}function As(s,e){return+(e[0]===s)<<7|+(e[1]===s)<<6|+(e[2]===s)<<5|+(e[3]===s)<<4|+(e[4]===s)<<3|+(e[5]===s)<<2|+(e[6]===s)<<1|+(e[7]===s)<<0}function ca(s,e){return s===_.L1_b?e!==_.L1&&e!==_.L1_b:e===_.L1_b?s!==_.L1:s<e}function da(s,e){return ca(s,e)?s:e}function Fs(s={}){let e=s["level-asymmetry-allowed"];return e===!0||e===1||e==="1"}});var ie=C(B=>{"use strict";Object.defineProperty(B,"__esModule",{value:!0});B.validateAndNormalizeRtpCapabilities=ma;B.validateAndNormalizeRtpParameters=yr;B.validateAndNormalizeSctpStreamParameters=fa;B.validateSctpCapabilities=ga;B.getExtendedRtpCapabilities=_a;B.getRecvRtpCapabilities=va;B.getSendRtpCapabilities=wa;B.getSendingRtpParameters=ya;B.getSendingRemoteRtpParameters=ba;B.reduceCodecs=Sa;B.generateProbatorRtpParameters=Ca;B.canSend=Ra;B.canReceive=Ta;var Bs=qs(),pa=be(),la="probator",ua=1234,ha=127;function ma(s){if(typeof s!="object")throw new TypeError("caps is not an object");if(s.codecs&&!Array.isArray(s.codecs))throw new TypeError("caps.codecs is not an array");s.codecs||(s.codecs=[]);for(let e of s.codecs)Ea(e);if(s.headerExtensions&&!Array.isArray(s.headerExtensions))throw new TypeError("caps.headerExtensions is not an array");s.headerExtensions||(s.headerExtensions=[]);for(let e of s.headerExtensions)xa(e)}function yr(s){if(typeof s!="object")throw new TypeError("params is not an object");if(s.mid&&typeof s.mid!="string")throw new TypeError("params.mid is not a string");if(!Array.isArray(s.codecs))throw new TypeError("missing params.codecs");for(let e of s.codecs)ka(e);if(s.headerExtensions&&!Array.isArray(s.headerExtensions))throw new TypeError("params.headerExtensions is not an array");s.headerExtensions||(s.headerExtensions=[]);for(let e of s.headerExtensions)Pa(e);if(s.encodings&&!Array.isArray(s.encodings))throw new TypeError("params.encodings is not an array");s.encodings||(s.encodings=[]);for(let e of s.encodings)Da(e);if(s.rtcp&&typeof s.rtcp!="object")throw new TypeError("params.rtcp is not an object");s.rtcp||(s.rtcp={}),La(s.rtcp)}function fa(s){if(typeof s!="object")throw new TypeError("params is not an object");if(typeof s.streamId!="number")throw new TypeError("missing params.streamId");let e=!1;if(typeof s.ordered=="boolean"?e=!0:s.ordered=!0,s.maxPacketLifeTime&&typeof s.maxPacketLifeTime!="number")throw new TypeError("invalid params.maxPacketLifeTime");if(s.maxRetransmits&&typeof s.maxRetransmits!="number")throw new TypeError("invalid params.maxRetransmits");if(s.maxPacketLifeTime&&s.maxRetransmits)throw new TypeError("cannot provide both maxPacketLifeTime and maxRetransmits");if(e&&s.ordered&&(s.maxPacketLifeTime||s.maxRetransmits))throw new TypeError("cannot be ordered with maxPacketLifeTime or maxRetransmits");if(!e&&(s.maxPacketLifeTime||s.maxRetransmits)&&(s.ordered=!1),s.label&&typeof s.label!="string")throw new TypeError("invalid params.label");if(s.protocol&&typeof s.protocol!="string")throw new TypeError("invalid params.protocol")}function ga(s){if(typeof s!="object")throw new TypeError("caps is not an object");if(!s.numStreams||typeof s.numStreams!="object")throw new TypeError("missing caps.numStreams");Ia(s.numStreams)}function _a(s,e,t){let r={codecs:[],headerExtensions:[]};if(t)for(let i of s.codecs??[]){if(ze(i))continue;let n=(e.codecs??[]).find(o=>wr(o,i,{strict:!0,modify:!0}));if(!n)continue;let a={kind:i.kind,mimeType:i.mimeType,clockRate:i.clockRate,channels:i.channels,localPayloadType:i.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:n.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:i.parameters??{},remoteParameters:n.parameters??{},rtcpFeedback:Us(i,n)};r.codecs.push(a)}else for(let i of e.codecs??[]){if(ze(i))continue;let n=(s.codecs??[]).find(o=>wr(o,i,{strict:!0,modify:!0}));if(!n)continue;let a={kind:n.kind,mimeType:n.mimeType,clockRate:n.clockRate,channels:n.channels,localPayloadType:n.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:i.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:n.parameters??{},remoteParameters:i.parameters??{},rtcpFeedback:Us(n,i)};r.codecs.push(a)}for(let i of r.codecs){let n=s.codecs.find(o=>ze(o)&&o.parameters?.apt===i.localPayloadType),a=e.codecs.find(o=>ze(o)&&o.parameters?.apt===i.remotePayloadType);n&&a&&(i.localRtxPayloadType=n.preferredPayloadType,i.remoteRtxPayloadType=a.preferredPayloadType)}for(let i of e.headerExtensions){let n=s.headerExtensions.find(o=>Ma(o,i));if(!n)continue;let a={kind:i.kind,uri:i.uri,sendId:n.preferredId,recvId:i.preferredId,encrypt:n.preferredEncrypt??!1,direction:"sendrecv"};switch(i.direction){case"sendrecv":{a.direction="sendrecv";break}case"recvonly":{a.direction="sendonly";break}case"sendonly":{a.direction="recvonly";break}case"inactive":{a.direction="inactive";break}}r.headerExtensions.push(a)}return r}function va(s){return Hs({direction:"recvonly",extendedRtpCapabilities:s})}function wa(s){return Hs({direction:"sendonly",extendedRtpCapabilities:s})}function ya(s,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let r of e.codecs){if(r.kind!==s)continue;let i={mimeType:r.mimeType,payloadType:r.localPayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.localParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(i),r.localRtxPayloadType){let n={mimeType:`${r.kind}/rtx`,payloadType:r.localRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.localPayloadType},rtcpFeedback:[]};t.codecs.push(n)}}for(let r of e.headerExtensions){if(r.kind&&r.kind!==s||r.direction!=="sendrecv"&&r.direction!=="sendonly")continue;let i={uri:r.uri,id:r.sendId,encrypt:r.encrypt,parameters:{}};t.headerExtensions.push(i)}return t}function ba(s,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let r of e.codecs){if(r.kind!==s)continue;let i={mimeType:r.mimeType,payloadType:r.localPayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.remoteParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(i),r.localRtxPayloadType){let n={mimeType:`${r.kind}/rtx`,payloadType:r.localRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.localPayloadType},rtcpFeedback:[]};t.codecs.push(n)}}for(let r of e.headerExtensions){if(r.kind&&r.kind!==s||r.direction!=="sendrecv"&&r.direction!=="sendonly")continue;let i={uri:r.uri,id:r.sendId,encrypt:r.encrypt,parameters:{}};t.headerExtensions.push(i)}if(t.headerExtensions.some(r=>r.uri==="http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"))for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(i=>i.type!=="goog-remb");else if(t.headerExtensions.some(r=>r.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"))for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(i=>i.type!=="transport-cc");else for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(i=>i.type!=="transport-cc"&&i.type!=="goog-remb");return t}function Sa(s,e){let t=[];if(!e)t.push(s[0]),ze(s[1])&&t.push(s[1]);else{for(let r=0;r<s.length;++r)if(wr(s[r],e,{strict:!0})){t.push(s[r]),ze(s[r+1])&&t.push(s[r+1]);break}if(t.length===0)throw new TypeError("no matching codec found")}return t}function Ca(s){s=pa.clone(s),yr(s);let e={mid:la,codecs:[],headerExtensions:[],encodings:[{ssrc:ua}],rtcp:{cname:"probator"}};return e.codecs.push(s.codecs[0]),e.codecs[0].payloadType=ha,e.headerExtensions=s.headerExtensions,e}function Ra(s,e){return(e.codecs??[]).some(t=>t.kind===s)}function Ta(s,e){if(yr(s),s.codecs.length===0)return!1;let t=s.codecs[0];return(e.codecs??[]).some(r=>r.preferredPayloadType===t.payloadType)}function Ea(s){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof s!="object")throw new TypeError("codec is not an object");if(!s.mimeType||typeof s.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(s.kind=t[1].toLowerCase(),typeof s.preferredPayloadType!="number")throw new TypeError("missing codec.preferredPayloadType");if(typeof s.clockRate!="number")throw new TypeError("missing codec.clockRate");s.kind==="audio"?typeof s.channels!="number"&&(s.channels=1):delete s.channels,(!s.parameters||typeof s.parameters!="object")&&(s.parameters={});for(let r of Object.keys(s.parameters)){let i=s.parameters[r];if(i===void 0&&(s.parameters[r]="",i=""),typeof i!="string"&&typeof i!="number")throw new TypeError(`invalid codec parameter [key:${r}s, value:${i}]`);if(r==="apt"&&typeof i!="number")throw new TypeError("invalid codec apt parameter")}(!s.rtcpFeedback||!Array.isArray(s.rtcpFeedback))&&(s.rtcpFeedback=[]);for(let r of s.rtcpFeedback)Vs(r)}function Vs(s){if(typeof s!="object")throw new TypeError("fb is not an object");if(!s.type||typeof s.type!="string")throw new TypeError("missing fb.type");(!s.parameter||typeof s.parameter!="string")&&(s.parameter="")}function xa(s){if(typeof s!="object")throw new TypeError("ext is not an object");if(s.kind!=="audio"&&s.kind!=="video")throw new TypeError("invalid ext.kind");if(!s.uri||typeof s.uri!="string")throw new TypeError("missing ext.uri");if(typeof s.preferredId!="number")throw new TypeError("missing ext.preferredId");if(s.preferredEncrypt&&typeof s.preferredEncrypt!="boolean")throw new TypeError("invalid ext.preferredEncrypt");if(s.preferredEncrypt||(s.preferredEncrypt=!1),s.direction&&typeof s.direction!="string")throw new TypeError("invalid ext.direction");s.direction||(s.direction="sendrecv")}function ka(s){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof s!="object")throw new TypeError("codec is not an object");if(!s.mimeType||typeof s.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(typeof s.payloadType!="number")throw new TypeError("missing codec.payloadType");if(typeof s.clockRate!="number")throw new TypeError("missing codec.clockRate");t[1].toLowerCase()==="audio"?typeof s.channels!="number"&&(s.channels=1):delete s.channels,(!s.parameters||typeof s.parameters!="object")&&(s.parameters={});for(let i of Object.keys(s.parameters)){let n=s.parameters[i];if(n===void 0&&(s.parameters[i]="",n=""),typeof n!="string"&&typeof n!="number")throw new TypeError(`invalid codec parameter [key:${i}s, value:${n}]`);if(i==="apt"&&typeof n!="number")throw new TypeError("invalid codec apt parameter")}(!s.rtcpFeedback||!Array.isArray(s.rtcpFeedback))&&(s.rtcpFeedback=[]);for(let i of s.rtcpFeedback)Vs(i)}function Pa(s){if(typeof s!="object")throw new TypeError("ext is not an object");if(!s.uri||typeof s.uri!="string")throw new TypeError("missing ext.uri");if(typeof s.id!="number")throw new TypeError("missing ext.id");if(s.encrypt&&typeof s.encrypt!="boolean")throw new TypeError("invalid ext.encrypt");s.encrypt||(s.encrypt=!1),(!s.parameters||typeof s.parameters!="object")&&(s.parameters={});for(let e of Object.keys(s.parameters)){let t=s.parameters[e];if(t===void 0&&(s.parameters[e]="",t=""),typeof t!="string"&&typeof t!="number")throw new TypeError("invalid header extension parameter")}}function Da(s){if(typeof s!="object")throw new TypeError("encoding is not an object");if(s.ssrc&&typeof s.ssrc!="number")throw new TypeError("invalid encoding.ssrc");if(s.rid&&typeof s.rid!="string")throw new TypeError("invalid encoding.rid");if(s.rtx&&typeof s.rtx!="object")throw new TypeError("invalid encoding.rtx");if(s.rtx&&typeof s.rtx.ssrc!="number")throw new TypeError("missing encoding.rtx.ssrc");if((!s.dtx||typeof s.dtx!="boolean")&&(s.dtx=!1),s.scalabilityMode&&typeof s.scalabilityMode!="string")throw new TypeError("invalid encoding.scalabilityMode")}function La(s){if(typeof s!="object")throw new TypeError("rtcp is not an object");if(s.cname&&typeof s.cname!="string")throw new TypeError("invalid rtcp.cname");(!s.reducedSize||typeof s.reducedSize!="boolean")&&(s.reducedSize=!0)}function Ia(s){if(typeof s!="object")throw new TypeError("numStreams is not an object");if(typeof s.OS!="number")throw new TypeError("missing numStreams.OS");if(typeof s.MIS!="number")throw new TypeError("missing numStreams.MIS")}function Hs({direction:s,extendedRtpCapabilities:e}){let t={codecs:[],headerExtensions:[]};for(let r of e.codecs){let i={kind:r.kind,mimeType:r.mimeType,preferredPayloadType:r.remotePayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.localParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(i),!r.remoteRtxPayloadType)continue;let n={kind:r.kind,mimeType:`${r.kind}/rtx`,preferredPayloadType:r.remoteRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.remotePayloadType},rtcpFeedback:[]};t.codecs.push(n)}for(let r of e.headerExtensions){if(r.direction!=="sendrecv"&&r.direction!==s)continue;let i={kind:r.kind,uri:r.uri,preferredId:r.recvId,preferredEncrypt:r.encrypt??!1,direction:r.direction};t.headerExtensions.push(i)}return t}function ze(s){return s?/.+\/rtx$/i.test(s.mimeType):!1}function wr(s,e,{strict:t=!1,modify:r=!1}={}){let i=s.mimeType.toLowerCase(),n=e.mimeType.toLowerCase();if(i!==n||s.clockRate!==e.clockRate||s.channels!==e.channels)return!1;switch(i){case"video/h264":{if(t){let a=s.parameters["packetization-mode"]??0,o=e.parameters["packetization-mode"]??0;if(a!==o||!Bs.isSameProfile(s.parameters,e.parameters))return!1;let c;try{c=Bs.generateProfileLevelIdStringForAnswer(s.parameters,e.parameters)}catch{return!1}r&&(c?(s.parameters["profile-level-id"]=c,e.parameters["profile-level-id"]=c):(delete s.parameters["profile-level-id"],delete e.parameters["profile-level-id"]))}break}case"video/vp9":{if(t){let a=s.parameters["profile-id"]??0,o=e.parameters["profile-id"]??0;if(a!==o)return!1}break}}return!0}function Ma(s,e){return!(s.kind&&e.kind&&s.kind!==e.kind||s.uri!==e.uri)}function Us(s,e){let t=[];for(let r of s.rtcpFeedback??[]){let i=(e.rtcpFeedback??[]).find(n=>n.type===r.type&&(n.parameter===r.parameter||!n.parameter&&!r.parameter));i&&t.push(i)}return t}});var Ws=C(Lt=>{"use strict";Object.defineProperty(Lt,"__esModule",{value:!0});Lt.Logger=void 0;var qe=tt(),Be="awaitqueue",br=class{_debug;_warn;_error;constructor(e){e?(this._debug=qe(`${Be}:${e}`),this._warn=qe(`${Be}:WARN:${e}`),this._error=qe(`${Be}:ERROR:${e}`)):(this._debug=qe(Be),this._warn=qe(`${Be}:WARN`),this._error=qe(`${Be}:ERROR`)),this._debug.log=console.info.bind(console),this._warn.log=console.warn.bind(console),this._error.log=console.error.bind(console)}get debug(){return this._debug}get warn(){return this._warn}get error(){return this._error}};Lt.Logger=br});var Rr=C(Ue=>{"use strict";Object.defineProperty(Ue,"__esModule",{value:!0});Ue.AwaitQueueRemovedTaskError=Ue.AwaitQueueStoppedError=void 0;var Sr=class s extends Error{constructor(e){super(e??"queue stopped"),this.name="AwaitQueueStoppedError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,s)}};Ue.AwaitQueueStoppedError=Sr;var Cr=class s extends Error{constructor(e){super(e??"queue task removed"),this.name="AwaitQueueRemovedTaskError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,s)}};Ue.AwaitQueueRemovedTaskError=Cr});var Gs=C(It=>{"use strict";Object.defineProperty(It,"__esModule",{value:!0});It.AwaitQueue=void 0;var Oa=Ws(),Tr=Rr(),de=new Oa.Logger("AwaitQueue"),Er=class{pendingTasks=new Map;nextTaskId=0;constructor(){de.debug("constructor()")}get size(){return this.pendingTasks.size}async push(e,t,r){if(t=t??e.name,de.debug(`push() [name:${t}, options:%o]`,r),typeof e!="function")throw new TypeError("given task is not a function");if(t)try{Object.defineProperty(e,"name",{value:t})}catch{}return new Promise((i,n)=>{if(t&&r?.removeOngoingTasksWithSameName)for(let o of this.pendingTasks.values())o.name===t&&o.reject(new Tr.AwaitQueueRemovedTaskError,{canExecuteNextTask:!1});let a={id:this.nextTaskId++,task:e,name:t,enqueuedAt:Date.now(),executedAt:void 0,completed:!1,resolve:o=>{if(a.completed)return;a.completed=!0,this.pendingTasks.delete(a.id),de.debug(`resolving task [name:${a.name}]`),i(o);let[c]=this.pendingTasks.values();c&&!c.executedAt&&this.execute(c)},reject:(o,{canExecuteNextTask:c})=>{if(!a.completed&&(a.completed=!0,this.pendingTasks.delete(a.id),de.debug(`rejecting task [name:${a.name}]: %s`,String(o)),n(o),c)){let[p]=this.pendingTasks.values();p&&!p.executedAt&&this.execute(p)}}};this.pendingTasks.set(a.id,a),this.pendingTasks.size===1&&this.execute(a)})}stop(){de.debug("stop()");for(let e of this.pendingTasks.values())de.debug(`stop() | stopping task [name:${e.name}]`),e.reject(new Tr.AwaitQueueStoppedError,{canExecuteNextTask:!1})}remove(e){de.debug(`remove() [taskIdx:${e}]`);let t=Array.from(this.pendingTasks.values())[e];if(!t){de.debug(`stop() | no task with given idx [taskIdx:${e}]`);return}t.reject(new Tr.AwaitQueueRemovedTaskError,{canExecuteNextTask:!0})}dump(){let e=Date.now(),t=0;return Array.from(this.pendingTasks.values()).map(r=>({idx:t++,task:r.task,name:r.name,enqueuedTime:r.executedAt?r.executedAt-r.enqueuedAt:e-r.enqueuedAt,executionTime:r.executedAt?e-r.executedAt:0}))}async execute(e){if(de.debug(`execute() [name:${e.name}]`),e.executedAt)throw new Error("task already being executed");e.executedAt=Date.now();try{let t=await e.task();e.resolve(t)}catch(t){e.reject(t,{canExecuteNextTask:!0})}}};It.AwaitQueue=Er});var Qs=C(ge=>{"use strict";Object.defineProperty(ge,"__esModule",{value:!0});ge.AwaitQueueRemovedTaskError=ge.AwaitQueueStoppedError=ge.AwaitQueue=void 0;var Na=Gs();Object.defineProperty(ge,"AwaitQueue",{enumerable:!0,get:function(){return Na.AwaitQueue}});var Ks=Rr();Object.defineProperty(ge,"AwaitQueueStoppedError",{enumerable:!0,get:function(){return Ks.AwaitQueueStoppedError}});Object.defineProperty(ge,"AwaitQueueRemovedTaskError",{enumerable:!0,get:function(){return Ks.AwaitQueueRemovedTaskError}})});var Ys=C(Mt=>{"use strict";Object.defineProperty(Mt,"__esModule",{value:!0});Mt.Producer=void 0;var ja=q(),Js=W(),Ve=J(),ne=new ja.Logger("Producer"),xr=class extends Js.EnhancedEventEmitter{_id;_localId;_closed=!1;_rtpSender;_track;_kind;_rtpParameters;_paused;_maxSpatialLayer;_stopTracks;_disableTrackOnPause;_zeroRtpOnPause;_appData;_observer=new Js.EnhancedEventEmitter;constructor({id:e,localId:t,rtpSender:r,track:i,rtpParameters:n,stopTracks:a,disableTrackOnPause:o,zeroRtpOnPause:c,appData:p}){super(),ne.debug("constructor()"),this._id=e,this._localId=t,this._rtpSender=r,this._track=i,this._kind=i.kind,this._rtpParameters=n,this._paused=o?!i.enabled:!1,this._maxSpatialLayer=void 0,this._stopTracks=a,this._disableTrackOnPause=o,this._zeroRtpOnPause=c,this._appData=p??{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get closed(){return this._closed}get kind(){return this._kind}get rtpSender(){return this._rtpSender}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get maxSpatialLayer(){return this._maxSpatialLayer}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(ne.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(ne.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new Ve.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(ne.debug("pause()"),this._closed){ne.error("pause() | Producer closed");return}this._paused=!0,this._track&&this._disableTrackOnPause&&(this._track.enabled=!1),this._zeroRtpOnPause&&new Promise((e,t)=>{this.safeEmit("@pause",e,t)}).catch(()=>{}),this._observer.safeEmit("pause")}resume(){if(ne.debug("resume()"),this._closed){ne.error("resume() | Producer closed");return}this._paused=!1,this._track&&this._disableTrackOnPause&&(this._track.enabled=!0),this._zeroRtpOnPause&&new Promise((e,t)=>{this.safeEmit("@resume",e,t)}).catch(()=>{}),this._observer.safeEmit("resume")}async replaceTrack({track:e}){if(ne.debug("replaceTrack() [track:%o]",e),this._closed){if(e&&this._stopTracks)try{e.stop()}catch{}throw new Ve.InvalidStateError("closed")}else if(e?.readyState==="ended")throw new Ve.InvalidStateError("track ended");if(e===this._track){ne.debug("replaceTrack() | same track, ignored");return}await new Promise((t,r)=>{this.safeEmit("@replacetrack",e,t,r)}),this.destroyTrack(),this._track=e,this._track&&this._disableTrackOnPause&&(this._paused?this._paused&&(this._track.enabled=!1):this._track.enabled=!0),this.handleTrack()}async setMaxSpatialLayer(e){if(this._closed)throw new Ve.InvalidStateError("closed");if(this._kind!=="video")throw new Ve.UnsupportedError("not a video Producer");if(typeof e!="number")throw new TypeError("invalid spatialLayer");e!==this._maxSpatialLayer&&(await new Promise((t,r)=>{this.safeEmit("@setmaxspatiallayer",e,t,r)}).catch(()=>{}),this._maxSpatialLayer=e)}async setRtpEncodingParameters(e){if(this._closed)throw new Ve.InvalidStateError("closed");if(typeof e!="object")throw new TypeError("invalid params");await new Promise((t,r)=>{this.safeEmit("@setrtpencodingparameters",e,t,r)})}onTrackEnded(){ne.debug('track "ended" event'),this.safeEmit("trackended"),this._observer.safeEmit("trackended")}handleTrack(){this._track&&this._track.addEventListener("ended",this.onTrackEnded)}destroyTrack(){if(this._track)try{this._track.removeEventListener("ended",this.onTrackEnded),this._stopTracks&&this._track.stop()}catch{}}};Mt.Producer=xr});var Zs=C(Ot=>{"use strict";Object.defineProperty(Ot,"__esModule",{value:!0});Ot.Consumer=void 0;var Aa=q(),Xs=W(),Fa=J(),ae=new Aa.Logger("Consumer"),kr=class extends Xs.EnhancedEventEmitter{_id;_localId;_producerId;_closed=!1;_rtpReceiver;_track;_rtpParameters;_paused;_appData;_observer=new Xs.EnhancedEventEmitter;constructor({id:e,localId:t,producerId:r,rtpReceiver:i,track:n,rtpParameters:a,appData:o}){super(),ae.debug("constructor()"),this._id=e,this._localId=t,this._producerId=r,this._rtpReceiver=i,this._track=n,this._rtpParameters=a,this._paused=!n.enabled,this._appData=o??{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get producerId(){return this._producerId}get closed(){return this._closed}get kind(){return this._track.kind}get rtpReceiver(){return this._rtpReceiver}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(ae.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(ae.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new Fa.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(ae.debug("pause()"),this._closed){ae.error("pause() | Consumer closed");return}if(this._paused){ae.debug("pause() | Consumer is already paused");return}this._paused=!0,this._track.enabled=!1,this.emit("@pause"),this._observer.safeEmit("pause")}resume(){if(ae.debug("resume()"),this._closed){ae.error("resume() | Consumer closed");return}if(!this._paused){ae.debug("resume() | Consumer is already resumed");return}this._paused=!1,this._track.enabled=!0,this.emit("@resume"),this._observer.safeEmit("resume")}onTrackEnded(){ae.debug('track "ended" event'),this.safeEmit("trackended"),this._observer.safeEmit("trackended")}handleTrack(){this._track.addEventListener("ended",this.onTrackEnded)}destroyTrack(){try{this._track.removeEventListener("ended",this.onTrackEnded),this._track.stop()}catch{}}};Ot.Consumer=kr});var ti=C(Nt=>{"use strict";Object.defineProperty(Nt,"__esModule",{value:!0});Nt.DataProducer=void 0;var $a=q(),ei=W(),za=J(),pe=new $a.Logger("DataProducer"),Pr=class extends ei.EnhancedEventEmitter{_id;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new ei.EnhancedEventEmitter;constructor({id:e,dataChannel:t,sctpStreamParameters:r,appData:i}){super(),pe.debug("constructor()"),this._id=e,this._dataChannel=t,this._sctpStreamParameters=r,this._appData=i??{},this.handleDataChannel()}get id(){return this._id}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get bufferedAmount(){return this._dataChannel.bufferedAmount}get bufferedAmountLowThreshold(){return this._dataChannel.bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._dataChannel.bufferedAmountLowThreshold=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(pe.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(pe.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}send(e){if(pe.debug("send()"),this._closed)throw new za.InvalidStateError("closed");this._dataChannel.send(e)}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(pe.debug('DataChannel "open" event'),this.safeEmit("open"))}),this._dataChannel.addEventListener("error",e=>{if(this._closed)return;let t=e.error??new Error("unknown DataChannel error");e.error?.errorDetail==="sctp-failure"?pe.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):pe.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(pe.warn('DataChannel "close" event'),this._closed=!0,this.emit("@close"),this.safeEmit("close"),this._observer.safeEmit("close"))}),this._dataChannel.addEventListener("message",()=>{this._closed||pe.warn('DataChannel "message" event in a DataProducer, message discarded')}),this._dataChannel.addEventListener("bufferedamountlow",()=>{this._closed||this.safeEmit("bufferedamountlow")})}};Nt.DataProducer=Pr});var si=C(jt=>{"use strict";Object.defineProperty(jt,"__esModule",{value:!0});jt.DataConsumer=void 0;var qa=q(),ri=W(),Ce=new qa.Logger("DataConsumer"),Dr=class extends ri.EnhancedEventEmitter{_id;_dataProducerId;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new ri.EnhancedEventEmitter;constructor({id:e,dataProducerId:t,dataChannel:r,sctpStreamParameters:i,appData:n}){super(),Ce.debug("constructor()"),this._id=e,this._dataProducerId=t,this._dataChannel=r,this._sctpStreamParameters=i,this._appData=n??{},this.handleDataChannel()}get id(){return this._id}get dataProducerId(){return this._dataProducerId}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get binaryType(){return this._dataChannel.binaryType}set binaryType(e){this._dataChannel.binaryType=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(Ce.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(Ce.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(Ce.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"?Ce.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):Ce.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(Ce.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)})}};jt.DataConsumer=Dr});var ni=C(At=>{"use strict";Object.defineProperty(At,"__esModule",{value:!0});At.Transport=void 0;var Ba=Qs(),Ua=q(),ii=W(),j=J(),Lr=be(),st=ie(),Va=Ys(),Ha=Zs(),Wa=ti(),Ga=si(),N=new Ua.Logger("Transport"),Ir=class{consumerOptions;promise;resolve;reject;constructor(e){this.consumerOptions=e,this.promise=new Promise((t,r)=>{this.resolve=t,this.reject=r})}},Mr=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 Ba.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:r,iceCandidates:i,dtlsParameters:n,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:p,appData:d,handlerFactory:l,getSendExtendedRtpCapabilities:u,recvRtpCapabilities:m,canProduceByKind:g}){super(),N.debug("constructor() [id:%s, direction:%s]",t,e),this._id=t,this._direction=e,this._getSendExtendedRtpCapabilities=u,this._recvRtpCapabilities=m,this._canProduceByKind=g,this._maxSctpMessageSize=a?.maxMessageSize;let h=Lr.clone(p)??{};delete h.iceServers,delete h.iceTransportPolicy,delete h.bundlePolicy,delete h.rtcpMuxPolicy,this._handler=l.factory({direction:e,iceParameters:r,iceCandidates:i,dtlsParameters:n,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:h,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities}),this._appData=d??{},this.handleHandler()}get id(){return this._id}get closed(){return this._closed}get direction(){return this._direction}get handler(){return this._handler}get iceGatheringState(){return this._iceGatheringState}get connectionState(){return this._connectionState}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){if(!this._closed){N.debug("close()"),this._closed=!0,this._awaitQueue.stop(),this._handler.close(),this._connectionState="closed";for(let e of this._producers.values())e.transportClosed();this._producers.clear();for(let e of this._consumers.values())e.transportClosed();this._consumers.clear();for(let e of this._dataProducers.values())e.transportClosed();this._dataProducers.clear();for(let e of this._dataConsumers.values())e.transportClosed();this._dataConsumers.clear(),this._observer.safeEmit("close"),super.close(),this._observer.close()}}async getStats(){if(this._closed)throw new j.InvalidStateError("closed");return this._handler.getTransportStats()}async restartIce({iceParameters:e}){if(N.debug("restartIce()"),this._closed)throw new j.InvalidStateError("closed");if(!e)throw new TypeError("missing iceParameters");return this._awaitQueue.push(async()=>await this._handler.restartIce(e),"transport.restartIce()")}async updateIceServers({iceServers:e}={}){if(N.debug("updateIceServers()"),this._closed)throw new j.InvalidStateError("closed");if(!Array.isArray(e))throw new TypeError("missing iceServers");return this._awaitQueue.push(async()=>this._handler.updateIceServers(e),"transport.updateIceServers()")}async produce({track:e,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:n,codec:a,stopTracks:o=!0,disableTrackOnPause:c=!0,zeroRtpOnPause:p=!1,onRtpSender:d,appData:l={}}={}){if(N.debug("produce() [track:%o]",e),this._closed)throw new j.InvalidStateError("closed");if(e){if(this._direction!=="send")throw new j.UnsupportedError("not a sending Transport");if(this._canProduceByKind[e.kind]){if(e.readyState==="ended")throw new j.InvalidStateError("track ended");if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(this.listenerCount("produce")===0)throw new TypeError('no "produce" listener set into this transport');if(l&&typeof l!="object")throw new TypeError("if given, appData must be an object")}else throw new j.UnsupportedError(`cannot produce ${e.kind}`)}else throw new TypeError("missing track");return this._awaitQueue.push(async()=>{let u;if(r&&!Array.isArray(r))throw TypeError("encodings must be an array");r?.length===0?u=void 0:r&&(u=r.map(f=>{let v={active:!0};return f.active===!1&&(v.active=!1),typeof f.dtx=="boolean"&&(v.dtx=f.dtx),typeof f.scalabilityMode=="string"&&(v.scalabilityMode=f.scalabilityMode),typeof f.scaleResolutionDownBy=="number"&&(v.scaleResolutionDownBy=f.scaleResolutionDownBy),typeof f.maxBitrate=="number"&&(v.maxBitrate=f.maxBitrate),typeof f.maxFramerate=="number"&&(v.maxFramerate=f.maxFramerate),typeof f.adaptivePtime=="boolean"&&(v.adaptivePtime=f.adaptivePtime),typeof f.priority=="string"&&(v.priority=f.priority),typeof f.networkPriority=="string"&&(v.networkPriority=f.networkPriority),v}));let{localId:m,rtpParameters:g,rtpSender:h}=await this._handler.send({track:e,streamId:t,encodings:u,codecOptions:i,headerExtensionOptions:n,codec:a,onRtpSender:d});try{st.validateAndNormalizeRtpParameters(g);let{id:f}=await new Promise((E,k)=>{this.safeEmit("produce",{kind:e.kind,rtpParameters:g,appData:l},E,k)}),v=new Va.Producer({id:f,localId:m,rtpSender:h,track:e,rtpParameters:g,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(f){throw this._handler.stopSending(m).catch(()=>{}),f}},"transport.produce()").catch(u=>{if(o)try{e.stop()}catch{}throw u})}async consume({id:e,producerId:t,kind:r,rtpParameters:i,streamId:n,onRtpReceiver:a,appData:o={}}){if(N.debug("consume()"),this._closed)throw new j.InvalidStateError("closed");if(this._direction!=="recv")throw new j.UnsupportedError("not a receiving Transport");if(typeof e!="string")throw new TypeError("missing id");if(typeof t!="string")throw new TypeError("missing producerId");if(r!=="audio"&&r!=="video")throw new TypeError(`invalid kind '${r}'`);if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(o&&typeof o!="object")throw new TypeError("if given, appData must be an object");let c=Lr.clone(i);if(!st.canReceive(c,this._recvRtpCapabilities))throw new j.UnsupportedError("cannot consume this Producer");let d=new Ir({id:e,producerId:t,kind:r,rtpParameters:c,streamId:n,onRtpReceiver:a,appData:o});return this._pendingConsumerTasks.push(d),queueMicrotask(()=>{this._closed||this._consumerCreationInProgress===!1&&this.createPendingConsumers()}),d.promise}async produceData({ordered:e=!0,maxPacketLifeTime:t,maxRetransmits:r,label:i="",protocol:n="",appData:a={}}={}){if(N.debug("produceData()"),this._closed)throw new j.InvalidStateError("closed");if(this._direction!=="send")throw new j.UnsupportedError("not a sending Transport");if(this._maxSctpMessageSize){if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(this.listenerCount("producedata")===0)throw new TypeError('no "producedata" listener set into this transport');if(a&&typeof a!="object")throw new TypeError("if given, appData must be an object")}else throw new j.UnsupportedError("SCTP not enabled by remote Transport");return(t||r)&&(e=!1),this._awaitQueue.push(async()=>{let{dataChannel:o,sctpStreamParameters:c}=await this._handler.sendDataChannel({sctpStreamParameters:{ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:n}});st.validateAndNormalizeSctpStreamParameters(c);let{id:p}=await new Promise((l,u)=>{this.safeEmit("producedata",{sctpStreamParameters:c,label:i,protocol:n,appData:a},l,u)}),d=new Wa.DataProducer({id:p,dataChannel:o,sctpStreamParameters:c,appData:a});return this._dataProducers.set(d.id,d),this.handleDataProducer(d),this._observer.safeEmit("newdataproducer",d),d},"transport.produceData()")}async consumeData({id:e,dataProducerId:t,sctpStreamParameters:r,label:i="",protocol:n="",appData:a={}}){if(N.debug("consumeData()"),this._closed)throw new j.InvalidStateError("closed");if(this._direction!=="recv")throw new j.UnsupportedError("not a receiving Transport");if(this._maxSctpMessageSize){if(typeof e!="string")throw new TypeError("missing id");if(typeof t!="string")throw new TypeError("missing dataProducerId");if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(a&&typeof a!="object")throw new TypeError("if given, appData must be an object")}else throw new j.UnsupportedError("SCTP not enabled by remote Transport");let o=Lr.clone(r);return st.validateAndNormalizeSctpStreamParameters(o),this._awaitQueue.push(async()=>{let{dataChannel:c}=await this._handler.receiveDataChannel({maxMessageSize:this._maxSctpMessageSize,sctpStreamParameters:o,label:i,protocol:n}),p=new Ga.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){N.debug("createPendingConsumers() | there is no Consumer to be created");return}let e=[...this._pendingConsumerTasks];this._pendingConsumerTasks=[];let t,r=[];for(let i of e){let{id:n,kind:a,rtpParameters:o,streamId:c,onRtpReceiver:p}=i.consumerOptions;r.push({trackId:n,kind:a,rtpParameters:o,streamId:c,onRtpReceiver:p})}try{let i=await this._handler.receive(r);for(let n=0;n<i.length;++n){let a=e[n],o=i[n],{id:c,producerId:p,kind:d,rtpParameters:l,appData:u}=a.consumerOptions,{localId:m,rtpReceiver:g,track:h}=o,f=new Ha.Consumer({id:c,localId:m,producerId:p,rtpReceiver:g,track:h,rtpParameters:l,appData:u});this._consumers.set(f.id,f),this.handleConsumer(f),!this._probatorConsumerCreated&&!t&&d==="video"&&(t=f),this._observer.safeEmit("newconsumer",f),a.resolve(f)}}catch(i){for(let n of e)n.reject(i)}if(t)try{let i=st.generateProbatorRtpParameters(t.rtpParameters);await this._handler.receive([{trackId:"probator",kind:"video",rtpParameters:i}]),N.debug("createPendingConsumers() | Consumer for RTP probation created"),this._probatorConsumerCreated=!0}catch(i){N.error("createPendingConsumers() | failed to create Consumer for RTP probation:%o",i)}},"transport.createPendingConsumers()").then(()=>{this._consumerCreationInProgress=!1,this._pendingConsumerTasks.length>0&&this.createPendingConsumers()}).catch(()=>{})}pausePendingConsumers(){this._consumerPauseInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingPauseConsumers.size===0){N.debug("pausePendingConsumers() | there is no Consumer to be paused");return}let e=Array.from(this._pendingPauseConsumers.values());this._pendingPauseConsumers.clear();try{let t=e.map(r=>r.localId);await this._handler.pauseReceiving(t)}catch(t){N.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){N.debug("resumePendingConsumers() | there is no Consumer to be resumed");return}let e=Array.from(this._pendingResumeConsumers.values());this._pendingResumeConsumers.clear();try{let t=e.map(r=>r.localId);await this._handler.resumeReceiving(t)}catch(t){N.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){N.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){N.error("closePendingConsumers() | failed to close Consumers:",t)}},"transport.closePendingConsumers()").then(()=>{this._consumerCloseInProgress=!1,this._pendingCloseConsumers.size>0&&this.closePendingConsumers()}).catch(()=>{})}handleHandler(){let e=this._handler;e.on("@connect",({dtlsParameters:t},r,i)=>{if(this._closed){i(new j.InvalidStateError("closed"));return}this.safeEmit("connect",{dtlsParameters:t},r,i)}),e.on("@icegatheringstatechange",t=>{t!==this._iceGatheringState&&(N.debug("ICE gathering state changed to %s",t),this._iceGatheringState=t,this._closed||this.safeEmit("icegatheringstatechange",t))}),e.on("@icecandidateerror",t=>{N.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&&(N.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=>N.warn("producer.close() failed:%o",t))}),e.on("@pause",(t,r)=>{this._awaitQueue.push(async()=>await this._handler.pauseSending(e.localId),"producer @pause event").then(t).catch(r)}),e.on("@resume",(t,r)=>{this._awaitQueue.push(async()=>await this._handler.resumeSending(e.localId),"producer @resume event").then(t).catch(r)}),e.on("@replacetrack",(t,r,i)=>{this._awaitQueue.push(async()=>await this._handler.replaceTrack(e.localId,t),"producer @replacetrack event").then(r).catch(i)}),e.on("@setmaxspatiallayer",(t,r,i)=>{this._awaitQueue.push(async()=>await this._handler.setMaxSpatialLayer(e.localId,t),"producer @setmaxspatiallayer event").then(r).catch(i)}),e.on("@setrtpencodingparameters",(t,r,i)=>{this._awaitQueue.push(async()=>await this._handler.setRtpEncodingParameters(e.localId,t),"producer @setrtpencodingparameters event").then(r).catch(i)}),e.on("@getstats",(t,r)=>{if(this._closed)return r(new j.InvalidStateError("closed"));this._handler.getSenderStats(e.localId).then(t).catch(r)})}handleConsumer(e){e.on("@close",()=>{this._consumers.delete(e.id),this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.delete(e.id),!this._closed&&(this._pendingCloseConsumers.set(e.id,e),this._consumerCloseInProgress===!1&&this.closePendingConsumers())}),e.on("@pause",()=>{this._pendingResumeConsumers.has(e.id)&&this._pendingResumeConsumers.delete(e.id),this._pendingPauseConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerPauseInProgress===!1&&this.pausePendingConsumers()})}),e.on("@resume",()=>{this._pendingPauseConsumers.has(e.id)&&this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerResumeInProgress===!1&&this.resumePendingConsumers()})}),e.on("@getstats",(t,r)=>{if(this._closed)return r(new j.InvalidStateError("closed"));this._handler.getReceiverStats(e.localId).then(t).catch(r)})}handleDataProducer(e){e.on("@close",()=>{this._dataProducers.delete(e.id)})}handleDataConsumer(e){e.on("@close",()=>{this._dataConsumers.delete(e.id)})}};At.Transport=Mr});var Ft=C((rd,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(s){return s.encoding?"rtpmap:%d %s/%s/%s":s.rate?"rtpmap:%d %s/%s":"rtpmap:%d %s"}},{push:"fmtp",reg:/^fmtp:(\d*) ([\S| ]*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\d*)(?: (\S*) IP(\d) (\S*))?/,names:["port","netType","ipVer","address"],format:function(s){return s.address!=null?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\*|\d*) trr-int (\d*)/,names:["payload","value"],format:"rtcp-fb:%s trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,names:["payload","type","subtype"],format:function(s){return s.subtype!=null?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:(\d+)(?:\/(\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\S*)(?: (\S*))?/,names:["value","direction","encrypt-uri","uri","config"],format:function(s){return"extmap:%d"+(s.direction?"/%s":"%v")+(s["encrypt-uri"]?" %s":"%v")+" %s"+(s.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(s){return s.sessionConfig!=null?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\w*)/,format:"setup:%s"},{name:"connectionType",reg:/^connection:(new|existing)/,format:"connection:%s"},{name:"mid",reg:/^mid:([^\s]*)/,format:"mid:%s"},{push:"msid",reg:/^msid:([\w-]+)(?: ([\w-]+))?/,names:["id","appdata"],format:"msid:%s %s"},{name:"ptime",reg:/^ptime:(\d*(?:\.\d*)*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\d*(?:\.\d*)*)/,format:"maxptime:%d"},{name:"direction",reg:/^(sendrecv|recvonly|sendonly|inactive)/},{name:"icelite",reg:/^(ice-lite)/},{name:"iceUfrag",reg:/^ice-ufrag:(\S*)/,format:"ice-ufrag:%s"},{name:"icePwd",reg:/^ice-pwd:(\S*)/,format:"ice-pwd:%s"},{name:"fingerprint",reg:/^fingerprint:(\S*) (\S*)/,names:["type","hash"],format:"fingerprint:%s %s"},{push:"candidates",reg:/^candidate:(\S*) (\d*) (\S*) (\d*) (\S*) (\d*) typ (\S*)(?: raddr (\S*) rport (\d*))?(?: tcptype (\S*))?(?: generation (\d*))?(?: network-id (\d*))?(?: network-cost (\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","tcptype","generation","network-id","network-cost"],format:function(s){var e="candidate:%s %d %s %d %s %d typ %s";return e+=s.raddr!=null?" raddr %s rport %d":"%v%v",e+=s.tcptype!=null?" tcptype %s":"%v",s.generation!=null&&(e+=" generation %d"),e+=s["network-id"]!=null?" network-id %d":"%v",e+=s["network-cost"]!=null?" network-cost %d":"%v",e}},{name:"endOfCandidates",reg:/^(end-of-candidates)/},{name:"remoteCandidates",reg:/^remote-candidates:(.*)/,format:"remote-candidates:%s"},{name:"iceOptions",reg:/^ice-options:(\S*)/,format:"ice-options:%s"},{push:"ssrcs",reg:/^ssrc:(\d*) ([\w_-]*)(?::(.*))?/,names:["id","attribute","value"],format:function(s){var e="ssrc:%d";return s.attribute!=null&&(e+=" %s",s.value!=null&&(e+=":%s")),e}},{push:"ssrcGroups",reg:/^ssrc-group:([\x21\x23\x24\x25\x26\x27\x2A\x2B\x2D\x2E\w]*) (.*)/,names:["semantics","ssrcs"],format:"ssrc-group:%s %s"},{name:"msidSemantic",reg:/^msid-semantic:\s?(\w*) (\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{name:"rtcpRsize",reg:/^(rtcp-rsize)/},{name:"sctpmap",reg:/^sctpmap:([\w_/]*) (\S*)(?: (\S*))?/,names:["sctpmapNumber","app","maxMessageSize"],format:function(s){return s.maxMessageSize!=null?"sctpmap:%s %s %s":"sctpmap:%s %s"}},{name:"xGoogleFlag",reg:/^x-google-flag:([^\s]*)/,format:"x-google-flag:%s"},{push:"rids",reg:/^rid:([\d\w]+) (\w+)(?: ([\S| ]*))?/,names:["id","direction","params"],format:function(s){return s.params?"rid:%s %s %s":"rid:%s %s"}},{push:"imageattrs",reg:new RegExp("^imageattr:(\\d+|\\*)[\\s\\t]+(send|recv)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*)(?:[\\s\\t]+(recv|send)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*))?"),names:["pt","dir1","attrs1","dir2","attrs2"],format:function(s){return"imageattr:%s %s %s"+(s.dir2?" %s %s":"")}},{name:"simulcast",reg:new RegExp("^simulcast:(send|recv) ([a-zA-Z0-9\\-_~;,]+)(?:\\s?(send|recv) ([a-zA-Z0-9\\-_~;,]+))?$"),names:["dir1","list1","dir2","list2"],format:function(s){return"simulcast:%s %s"+(s.dir2?" %s %s":"")}},{name:"simulcast_03",reg:/^simulcast:[\s\t]+([\S+\s\t]+)$/,names:["value"],format:"simulcast: %s"},{name:"framerate",reg:/^framerate:(\d+(?:$|\.\d+))/,format:"framerate:%s"},{name:"sourceFilter",reg:/^source-filter: *(excl|incl) (\S*) (IP4|IP6|\*) (\S*) (.*)/,names:["filterMode","netType","addressTypes","destAddress","srcList"],format:"source-filter: %s %s %s %s %s"},{name:"bundleOnly",reg:/^(bundle-only)/},{name:"label",reg:/^label:(.+)/,format:"label:%s"},{name:"sctpPort",reg:/^sctp-port:(\d+)$/,format:"sctp-port:%s"},{name:"maxMessageSize",reg:/^max-message-size:(\d+)$/,format:"max-message-size:%s"},{push:"tsRefClocks",reg:/^ts-refclk:([^\s=]*)(?:=(\S*))?/,names:["clksrc","clksrcExt"],format:function(s){return"ts-refclk:%s"+(s.clksrcExt!=null?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(s){var e="mediaclk:";return e+=s.id!=null?"id=%s %s":"%v%s",e+=s.mediaClockValue!=null?"=%s":"",e+=s.rateNumerator!=null?" rate=%s":"",e+=s.rateDenominator!=null?"/%s":"",e}},{name:"keywords",reg:/^keywds:(.+)$/,format:"keywds:%s"},{name:"content",reg:/^content:(.+)/,format:"content:%s"},{name:"bfcpFloorCtrl",reg:/^floorctrl:(c-only|s-only|c-s)/,format:"floorctrl:%s"},{name:"bfcpConfId",reg:/^confid:(\d+)/,format:"confid:%s"},{name:"bfcpUserId",reg:/^userid:(\d+)/,format:"userid:%s"},{name:"bfcpFloorId",reg:/^floorid:(.+) (?:m-stream|mstrm):(.+)/,names:["id","mStream"],format:"floorid:%s mstrm:%s"},{push:"invalid",names:["value"]}]};Object.keys(ai).forEach(function(s){var e=ai[s];e.forEach(function(t){t.reg||(t.reg=/(.*)/),t.format||(t.format="%s")})})});var pi=C(le=>{"use strict";var He=function(s){return String(Number(s))===s?Number(s):s},Ka=function(s,e,t,r){if(r&&!t)e[r]=He(s[1]);else for(var i=0;i<t.length;i+=1)s[i+1]!=null&&(e[t[i]]=He(s[i+1]))},Qa=function(s,e,t){var r=s.name&&s.names;s.push&&!e[s.push]?e[s.push]=[]:r&&!e[s.name]&&(e[s.name]={});var i=s.push?{}:r?e[s.name]:e;Ka(t.match(s.reg),i,s.names,s.name),s.push&&e[s.push].push(i)},ci=Ft(),Ja=RegExp.prototype.test.bind(/^([a-z])=(.*)/);le.parse=function(s){var e={},t=[],r=e;return s.split(/(\r\n|\r|\n)/).filter(Ja).forEach(function(i){var n=i[0],a=i.slice(2);n==="m"&&(t.push({rtp:[],fmtp:[]}),r=t[t.length-1]);for(var o=0;o<(ci[n]||[]).length;o+=1){var c=ci[n][o];if(c.reg.test(a))return Qa(c,r,a)}}),e.media=t,e};var di=function(s,e){var t=e.split(/=(.+)/,2);return t.length===2?s[t[0]]=He(t[1]):t.length===1&&e.length>1&&(s[t[0]]=void 0),s};le.parseParams=function(s){return s.split(/;\s?/).reduce(di,{})};le.parseFmtpConfig=le.parseParams;le.parsePayloads=function(s){return s.toString().split(" ").map(Number)};le.parseRemoteCandidates=function(s){for(var e=[],t=s.split(" ").map(He),r=0;r<t.length;r+=3)e.push({component:t[r],ip:t[r+1],port:t[r+2]});return e};le.parseImageAttributes=function(s){return s.split(" ").map(function(e){return e.substring(1,e.length-1).split(",").reduce(di,{})})};le.parseSimulcastStreamList=function(s){return s.split(";").map(function(e){return e.split(",").map(function(t){var r,i=!1;return t[0]!=="~"?r=He(t):(r=He(t.substring(1,t.length)),i=!0),{scid:r,paused:i}})})}});var ui=C((id,li)=>{"use strict";var Or=Ft(),Ya=/%[sdv%]/g,Xa=function(s){var e=1,t=arguments,r=t.length;return s.replace(Ya,function(i){if(e>=r)return i;var n=t[e];switch(e+=1,i){case"%%":return"%";case"%s":return String(n);case"%d":return Number(n);case"%v":return""}})},it=function(s,e,t){var r=e.format instanceof Function?e.format(e.push?t:t[e.name]):e.format,i=[s+"="+r];if(e.names)for(var n=0;n<e.names.length;n+=1){var a=e.names[n];e.name?i.push(t[e.name][a]):i.push(t[e.names[n]])}else i.push(t[e.name]);return Xa.apply(null,i)},Za=["v","o","s","i","u","e","p","c","b","t","r","z","a"],eo=["i","c","b","a"];li.exports=function(s,e){e=e||{},s.version==null&&(s.version=0),s.name==null&&(s.name=" "),s.media.forEach(function(n){n.payloads==null&&(n.payloads="")});var t=e.outerOrder||Za,r=e.innerOrder||eo,i=[];return t.forEach(function(n){Or[n].forEach(function(a){a.name in s&&s[a.name]!=null?i.push(it(n,a,s)):a.push in s&&s[a.push]!=null&&s[a.push].forEach(function(o){i.push(it(n,a,o))})})}),s.media.forEach(function(n){i.push(it("m",Or.m[0],n)),r.forEach(function(a){Or[a].forEach(function(o){o.name in n&&n[o.name]!=null?i.push(it(a,o,n)):o.push in n&&n[o.push]!=null&&n[o.push].forEach(function(c){i.push(it(a,o,c))})})})}),i.join(`\r
|
|
3
|
+
`+n),s.push(i+"m+"+Tt.exports.humanize(this.diff)+"\x1B[0m")}else s[0]=$n()+e+" "+s[0]}function $n(){return A.inspectOpts.hideDate?"":new Date().toISOString()+" "}function qn(...s){return process.stderr.write(Rt.formatWithOptions(A.inspectOpts,...s)+`
|
|
4
|
+
`)}function Bn(s){s?process.env.DEBUG=s:delete process.env.DEBUG}function Un(){return process.env.DEBUG}function Vn(s){s.inspectOpts={};let e=Object.keys(A.inspectOpts);for(let t=0;t<e.length;t++)s.inspectOpts[e[t]]=A.inspectOpts[e[t]]}Tt.exports=pr()(A);var{formatters:bs}=Tt.exports;bs.o=function(s){return this.inspectOpts.colors=this.useColors,Rt.inspect(s,this.inspectOpts).split(`
|
|
5
|
+
`).map(e=>e.trim()).join(" ")};bs.O=function(s){return this.inspectOpts.colors=this.useColors,Rt.inspect(s,this.inspectOpts)}});var tt=C((Vc,hr)=>{"use strict";typeof process>"u"||process.type==="renderer"||process.browser===!0||process.__nwjs?hr.exports=_s():hr.exports=Ss()});var Rs=C(Cs=>{"use strict";Object.defineProperty(Cs,"__esModule",{value:!0})});var q=C(Et=>{"use strict";Object.defineProperty(Et,"__esModule",{value:!0});Et.Logger=void 0;var Me=tt(),Oe="media-client",mr=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,Me.default)(`${Oe}:${e}`),this._warn=(0,Me.default)(`${Oe}:WARN:${e}`),this._error=(0,Me.default)(`${Oe}:ERROR:${e}`)):(this._debug=(0,Me.default)(Oe),this._warn=(0,Me.default)(`${Oe}:WARN`),this._error=(0,Me.default)(`${Oe}:ERROR`)),this._debug.log=console.info.bind(console),this._warn.log=console.warn.bind(console),this._error.log=console.error.bind(console)}get debug(){return this._debug}get warn(){return this._warn}get error(){return this._error}};Et.Logger=mr});var Ns=C((Wc,fr)=>{"use strict";var Ne=typeof Reflect=="object"?Reflect:null,Ts=Ne&&typeof Ne.apply=="function"?Ne.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)},xt;Ne&&typeof Ne.ownKeys=="function"?xt=Ne.ownKeys:Object.getOwnPropertySymbols?xt=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:xt=function(e){return Object.getOwnPropertyNames(e)};function Hn(s){console&&console.warn&&console.warn(s)}var xs=Number.isNaN||function(e){return e!==e};function D(){D.init.call(this)}fr.exports=D;fr.exports.once=Qn;D.EventEmitter=D;D.prototype._events=void 0;D.prototype._eventsCount=0;D.prototype._maxListeners=void 0;var Es=10;function kt(s){if(typeof s!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof s)}Object.defineProperty(D,"defaultMaxListeners",{enumerable:!0,get:function(){return Es},set:function(s){if(typeof s!="number"||s<0||xs(s))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+s+".");Es=s}});D.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};D.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||xs(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 ks(s){return s._maxListeners===void 0?D.defaultMaxListeners:s._maxListeners}D.prototype.getMaxListeners=function(){return ks(this)};D.prototype.emit=function(e){for(var t=[],r=1;r<arguments.length;r++)t.push(arguments[r]);var i=e==="error",n=this._events;if(n!==void 0)i=i&&n.error===void 0;else if(!i)return!1;if(i){var a;if(t.length>0&&(a=t[0]),a instanceof Error)throw a;var o=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw o.context=a,o}var c=n[e];if(c===void 0)return!1;if(typeof c=="function")Ts(c,this,t);else for(var p=c.length,d=Ms(c,p),r=0;r<p;++r)Ts(d[r],this,t);return!0};function Ps(s,e,t,r){var i,n,a;if(kt(t),n=s._events,n===void 0?(n=s._events=Object.create(null),s._eventsCount=0):(n.newListener!==void 0&&(s.emit("newListener",e,t.listener?t.listener:t),n=s._events),a=n[e]),a===void 0)a=n[e]=t,++s._eventsCount;else if(typeof a=="function"?a=n[e]=r?[t,a]:[a,t]:r?a.unshift(t):a.push(t),i=ks(s),i>0&&a.length>i&&!a.warned){a.warned=!0;var o=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");o.name="MaxListenersExceededWarning",o.emitter=s,o.type=e,o.count=a.length,Hn(o)}return s}D.prototype.addListener=function(e,t){return Ps(this,e,t,!1)};D.prototype.on=D.prototype.addListener;D.prototype.prependListener=function(e,t){return Ps(this,e,t,!0)};function Gn(){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 Ds(s,e,t){var r={fired:!1,wrapFn:void 0,target:s,type:e,listener:t},i=Gn.bind(r);return i.listener=t,r.wrapFn=i,i}D.prototype.once=function(e,t){return kt(t),this.on(e,Ds(this,e,t)),this};D.prototype.prependOnceListener=function(e,t){return kt(t),this.prependListener(e,Ds(this,e,t)),this};D.prototype.removeListener=function(e,t){var r,i,n,a,o;if(kt(t),i=this._events,i===void 0)return this;if(r=i[e],r===void 0)return this;if(r===t||r.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete i[e],i.removeListener&&this.emit("removeListener",e,r.listener||t));else if(typeof r!="function"){for(n=-1,a=r.length-1;a>=0;a--)if(r[a]===t||r[a].listener===t){o=r[a].listener,n=a;break}if(n<0)return this;n===0?r.shift():Wn(r,n),r.length===1&&(i[e]=r[0]),i.removeListener!==void 0&&this.emit("removeListener",e,o||t)}return this};D.prototype.off=D.prototype.removeListener;D.prototype.removeAllListeners=function(e){var t,r,i;if(r=this._events,r===void 0)return this;if(r.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):r[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete r[e]),this;if(arguments.length===0){var n=Object.keys(r),a;for(i=0;i<n.length;++i)a=n[i],a!=="removeListener"&&this.removeAllListeners(a);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(t=r[e],typeof t=="function")this.removeListener(e,t);else if(t!==void 0)for(i=t.length-1;i>=0;i--)this.removeListener(e,t[i]);return this};function Ls(s,e,t){var r=s._events;if(r===void 0)return[];var i=r[e];return i===void 0?[]:typeof i=="function"?t?[i.listener||i]:[i]:t?Kn(i):Ms(i,i.length)}D.prototype.listeners=function(e){return Ls(this,e,!0)};D.prototype.rawListeners=function(e){return Ls(this,e,!1)};D.listenerCount=function(s,e){return typeof s.listenerCount=="function"?s.listenerCount(e):Is.call(s,e)};D.prototype.listenerCount=Is;function Is(s){var e=this._events;if(e!==void 0){var t=e[s];if(typeof t=="function")return 1;if(t!==void 0)return t.length}return 0}D.prototype.eventNames=function(){return this._eventsCount>0?xt(this._events):[]};function Ms(s,e){for(var t=new Array(e),r=0;r<e;++r)t[r]=s[r];return t}function Wn(s,e){for(;e+1<s.length;e++)s[e]=s[e+1];s.pop()}function Kn(s){for(var e=new Array(s.length),t=0;t<e.length;++t)e[t]=s[t].listener||s[t];return e}function Qn(s,e){return new Promise(function(t,r){function i(a){s.removeListener(e,n),r(a)}function n(){typeof s.removeListener=="function"&&s.removeListener("error",i),t([].slice.call(arguments))}Os(s,e,n,{once:!0}),e!=="error"&&Jn(s,i,{once:!0})})}function Jn(s,e,t){typeof s.on=="function"&&Os(s,"error",e,t)}function Os(s,e,t,r){if(typeof s.on=="function")r.once?s.once(e,t):s.on(e,t);else if(typeof s.addEventListener=="function")s.addEventListener(e,function i(n){r.once&&s.removeEventListener(e,i),t(n)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof s)}});var G=C(Pt=>{"use strict";Object.defineProperty(Pt,"__esModule",{value:!0});Pt.EnhancedEventEmitter=void 0;var Yn=Ns(),Zn=q(),Xn=new Zn.Logger("EnhancedEventEmitter"),gr=class extends Yn.EventEmitter{constructor(){super(),this.setMaxListeners(1/0)}close(){super.removeAllListeners()}emit(e,...t){return super.emit(e,...t)}safeEmit(e,...t){try{return super.emit(e,...t)}catch(r){Xn.error("safeEmit() | event listener threw an error [eventName:%s]:%o",e,r);try{super.emit("listenererror",e,r)}catch{}return!!super.listenerCount(e)}}on(e,t){return super.on(e,t),this}off(e,t){return super.off(e,t),this}addListener(e,t){return super.on(e,t),this}prependListener(e,t){return super.prependListener(e,t),this}once(e,t){return super.once(e,t),this}prependOnceListener(e,t){return super.prependOnceListener(e,t),this}removeListener(e,t){return super.off(e,t),this}removeAllListeners(e){return super.removeAllListeners(e),this}listenerCount(e){return super.listenerCount(e)}listeners(e){return super.listeners(e)}rawListeners(e){return super.rawListeners(e)}};Pt.EnhancedEventEmitter=gr});var J=C(je=>{"use strict";Object.defineProperty(je,"__esModule",{value:!0});je.InvalidStateError=je.UnsupportedError=void 0;var _r=class s extends Error{constructor(e){super(e),this.name="UnsupportedError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,s):this.stack=new Error(e).stack}};je.UnsupportedError=_r;var vr=class s extends Error{constructor(e){super(e),this.name="InvalidStateError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,s):this.stack=new Error(e).stack}};je.InvalidStateError=vr});var be=C(rt=>{"use strict";Object.defineProperty(rt,"__esModule",{value:!0});rt.clone=ea;rt.generateRandomNumber=ta;rt.deepFreeze=js;function ea(s){if(s!==void 0)return Number.isNaN(s)?NaN:typeof structuredClone=="function"?structuredClone(s):JSON.parse(JSON.stringify(s))}function ta(){return Math.round(Math.random()*1e7)}function js(s){let e=Reflect.ownKeys(s);for(let t of e){let r=s[t];(r&&typeof r=="object"||typeof r=="function")&&js(r)}return Object.freeze(s)}});var As=C(Dt=>{"use strict";Object.defineProperty(Dt,"__esModule",{value:!0});Dt.Logger=void 0;var Ae=tt(),Fe="h264-profile-level-id",wr=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,Ae.default)(`${Fe}:${e}`),this._warn=(0,Ae.default)(`${Fe}:WARN:${e}`),this._error=(0,Ae.default)(`${Fe}:ERROR:${e}`)):(this._debug=(0,Ae.default)(Fe),this._warn=(0,Ae.default)(`${Fe}:WARN`),this._error=(0,Ae.default)(`${Fe}:ERROR`)),this._debug.log=console.info.bind(console),this._warn.log=console.warn.bind(console),this._error.log=console.error.bind(console)}get debug(){return this._debug}get warn(){return this._warn}get error(){return this._error}};Dt.Logger=wr});var Us=C(F=>{"use strict";Object.defineProperty(F,"__esModule",{value:!0});F.ProfileLevelId=F.Level=F.Profile=void 0;F.parseProfileLevelId=qs;F.profileLevelIdToString=Bs;F.profileToString=na;F.levelToString=aa;F.parseSdpProfileLevelId=Se;F.isSameProfile=oa;F.isSameProfileAndLevel=ca;F.generateProfileLevelIdStringForAnswer=da;F.supportedLevel=pa;var ra=As(),re=new ra.Logger,L;(function(s){s[s.ConstrainedBaseline=1]="ConstrainedBaseline",s[s.Baseline=2]="Baseline",s[s.Main=3]="Main",s[s.ConstrainedHigh=4]="ConstrainedHigh",s[s.High=5]="High",s[s.PredictiveHigh444=6]="PredictiveHigh444"})(L||(F.Profile=L={}));var _;(function(s){s[s.L1_b=0]="L1_b",s[s.L1=10]="L1",s[s.L1_1=11]="L1_1",s[s.L1_2=12]="L1_2",s[s.L1_3=13]="L1_3",s[s.L2=20]="L2",s[s.L2_1=21]="L2_1",s[s.L2_2=22]="L2_2",s[s.L3=30]="L3",s[s.L3_1=31]="L3_1",s[s.L3_2=32]="L3_2",s[s.L4=40]="L4",s[s.L4_1=41]="L4_1",s[s.L4_2=42]="L4_2",s[s.L5=50]="L5",s[s.L5_1=51]="L5_1",s[s.L5_2=52]="L5_2"})(_||(F.Level=_={}));var ze=class{profile;level;constructor(e,t){this.profile=e,this.level=t}};F.ProfileLevelId=ze;var sa=new ze(L.ConstrainedBaseline,_.L3_1),ee=class{mask;masked_value;constructor(e){this.mask=~zs("x",e),this.masked_value=zs("1",e)}isMatch(e){return this.masked_value===(e&this.mask)}},te=class{profile_idc;profile_iop;profile;constructor(e,t,r){this.profile_idc=e,this.profile_iop=t,this.profile=r}},ia=[new te(66,new ee("x1xx0000"),L.ConstrainedBaseline),new te(77,new ee("1xxx0000"),L.ConstrainedBaseline),new te(88,new ee("11xx0000"),L.ConstrainedBaseline),new te(66,new ee("x0xx0000"),L.Baseline),new te(88,new ee("10xx0000"),L.Baseline),new te(77,new ee("0x0x0000"),L.Main),new te(100,new ee("00000000"),L.High),new te(100,new ee("00001100"),L.ConstrainedHigh),new te(244,new ee("00000000"),L.PredictiveHigh444)],Fs=[{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 qs(s){if(typeof s!="string"||s.length!==6)return;let t=parseInt(s,16);if(t===0)return;let r=t&255,i=t>>8&255,n=t>>16&255,a;switch(r){case _.L1_1:{a=(i&16)!==0?_.L1_b:_.L1_1;break}case _.L1:case _.L1_2:case _.L1_3:case _.L2:case _.L2_1:case _.L2_2:case _.L3:case _.L3_1:case _.L3_2:case _.L4:case _.L4_1:case _.L4_2:case _.L5:case _.L5_1:case _.L5_2:{a=r;break}default:{re.warn(`parseProfileLevelId() | unrecognized level_idc [str:${s}, level_idc:${r}]`);return}}for(let o of ia)if(n===o.profile_idc&&o.profile_iop.isMatch(i))return re.debug(`parseProfileLevelId() | result [str:${s}, profile:${o.profile}, level:${a}]`),new ze(o.profile,a);re.warn(`parseProfileLevelId() | unrecognized profile_idc/profile_iop combination [str:${s}, profile_idc:${n}, profile_iop:${i}]`)}function Bs(s){if(s.level==_.L1_b)switch(s.profile){case L.ConstrainedBaseline:return"42f00b";case L.Baseline:return"42100b";case L.Main:return"4d100b";default:{re.warn(`profileLevelIdToString() | Level 1_b not is allowed for profile ${s.profile}`);return}}let e;switch(s.profile){case L.ConstrainedBaseline:{e="42e0";break}case L.Baseline:{e="4200";break}case L.Main:{e="4d00";break}case L.ConstrainedHigh:{e="640c";break}case L.High:{e="6400";break}case L.PredictiveHigh444:{e="f400";break}default:{re.warn(`profileLevelIdToString() | unrecognized profile ${s.profile}`);return}}let t=s.level.toString(16);return t.length===1&&(t=`0${t}`),`${e}${t}`}function na(s){switch(s){case L.ConstrainedBaseline:return"ConstrainedBaseline";case L.Baseline:return"Baseline";case L.Main:return"Main";case L.ConstrainedHigh:return"ConstrainedHigh";case L.High:return"High";case L.PredictiveHigh444:return"PredictiveHigh444";default:{re.warn(`profileToString() | unrecognized profile ${s}`);return}}}function aa(s){switch(s){case _.L1_b:return"1b";case _.L1:return"1";case _.L1_1:return"1.1";case _.L1_2:return"1.2";case _.L1_3:return"1.3";case _.L2:return"2";case _.L2_1:return"2.1";case _.L2_2:return"2.2";case _.L3:return"3";case _.L3_1:return"3.1";case _.L3_2:return"3.2";case _.L4:return"4";case _.L4_1:return"4.1";case _.L4_2:return"4.2";case _.L5:return"5";case _.L5_1:return"5.1";case _.L5_2:return"5.2";default:{re.warn(`levelToString() | unrecognized level ${s}`);return}}}function Se(s={}){let e=s["profile-level-id"];return e?qs(e):sa}function oa(s={},e={}){let t=Se(s),r=Se(e);return!!(t&&r&&t.profile===r.profile)}function ca(s={},e={}){let t=Se(s),r=Se(e);return!!(t&&r&&t.profile===r.profile&&t.level==r.level)}function da(s={},e={}){if(!s["profile-level-id"]&&!e["profile-level-id"]){re.warn("generateProfileLevelIdStringForAnswer() | profile-level-id missing in local and remote params");return}let t=Se(s),r=Se(e);if(!t)throw new TypeError("invalid local_profile_level_id");if(!r)throw new TypeError("invalid remote_profile_level_id");if(t.profile!==r.profile)throw new TypeError("H264 Profile mismatch");let i=$s(s)&&$s(e),n=t.level,a=r.level,o=ua(n,a),c=i?n:o;return re.debug(`generateProfileLevelIdStringForAnswer() | result [profile:${t.profile}, level:${c}]`),Bs(new ze(t.profile,c))}function pa(s,e){for(let r=Fs.length-1;r>=0;--r){let i=Fs[r];if(i.max_macroblock_frame_size*256<=s&&i.max_macroblocks_per_second<=e*i.max_macroblock_frame_size)return re.debug(`supportedLevel() | result [max_frame_pixel_count:${s}, max_fps:${e}, level:${i.level}]`),i.level}re.warn(`supportedLevel() | no level supported [max_frame_pixel_count:${s}, max_fps:${e}]`)}function zs(s,e){return+(e[0]===s)<<7|+(e[1]===s)<<6|+(e[2]===s)<<5|+(e[3]===s)<<4|+(e[4]===s)<<3|+(e[5]===s)<<2|+(e[6]===s)<<1|+(e[7]===s)<<0}function la(s,e){return s===_.L1_b?e!==_.L1&&e!==_.L1_b:e===_.L1_b?s!==_.L1:s<e}function ua(s,e){return la(s,e)?s:e}function $s(s={}){let e=s["level-asymmetry-allowed"];return e===!0||e===1||e==="1"}});var ie=C(B=>{"use strict";Object.defineProperty(B,"__esModule",{value:!0});B.validateAndNormalizeRtpCapabilities=_a;B.validateAndNormalizeRtpParameters=br;B.validateAndNormalizeSctpStreamParameters=va;B.validateSctpCapabilities=wa;B.getExtendedRtpCapabilities=ya;B.getRecvRtpCapabilities=ba;B.getSendRtpCapabilities=Sa;B.getSendingRtpParameters=Ca;B.getSendingRemoteRtpParameters=Ra;B.reduceCodecs=Ta;B.generateProbatorRtpParameters=Ea;B.canSend=xa;B.canReceive=ka;var Vs=Us(),ha=be(),ma="probator",fa=1234,ga=127;function _a(s){if(typeof s!="object")throw new TypeError("caps is not an object");if(s.codecs&&!Array.isArray(s.codecs))throw new TypeError("caps.codecs is not an array");s.codecs||(s.codecs=[]);for(let e of s.codecs)Pa(e);if(s.headerExtensions&&!Array.isArray(s.headerExtensions))throw new TypeError("caps.headerExtensions is not an array");s.headerExtensions||(s.headerExtensions=[]);for(let e of s.headerExtensions)Da(e)}function br(s){if(typeof s!="object")throw new TypeError("params is not an object");if(s.mid&&typeof s.mid!="string")throw new TypeError("params.mid is not a string");if(!Array.isArray(s.codecs))throw new TypeError("missing params.codecs");for(let e of s.codecs)La(e);if(s.headerExtensions&&!Array.isArray(s.headerExtensions))throw new TypeError("params.headerExtensions is not an array");s.headerExtensions||(s.headerExtensions=[]);for(let e of s.headerExtensions)Ia(e);if(s.encodings&&!Array.isArray(s.encodings))throw new TypeError("params.encodings is not an array");s.encodings||(s.encodings=[]);for(let e of s.encodings)Ma(e);if(s.rtcp&&typeof s.rtcp!="object")throw new TypeError("params.rtcp is not an object");s.rtcp||(s.rtcp={}),Oa(s.rtcp)}function va(s){if(typeof s!="object")throw new TypeError("params is not an object");if(typeof s.streamId!="number")throw new TypeError("missing params.streamId");let e=!1;if(typeof s.ordered=="boolean"?e=!0:s.ordered=!0,s.maxPacketLifeTime&&typeof s.maxPacketLifeTime!="number")throw new TypeError("invalid params.maxPacketLifeTime");if(s.maxRetransmits&&typeof s.maxRetransmits!="number")throw new TypeError("invalid params.maxRetransmits");if(s.maxPacketLifeTime&&s.maxRetransmits)throw new TypeError("cannot provide both maxPacketLifeTime and maxRetransmits");if(e&&s.ordered&&(s.maxPacketLifeTime||s.maxRetransmits))throw new TypeError("cannot be ordered with maxPacketLifeTime or maxRetransmits");if(!e&&(s.maxPacketLifeTime||s.maxRetransmits)&&(s.ordered=!1),s.label&&typeof s.label!="string")throw new TypeError("invalid params.label");if(s.protocol&&typeof s.protocol!="string")throw new TypeError("invalid params.protocol")}function wa(s){if(typeof s!="object")throw new TypeError("caps is not an object");if(!s.numStreams||typeof s.numStreams!="object")throw new TypeError("missing caps.numStreams");Na(s.numStreams)}function ya(s,e,t){let r={codecs:[],headerExtensions:[]};if(t)for(let i of s.codecs??[]){if($e(i))continue;let n=(e.codecs??[]).find(o=>yr(o,i,{strict:!0,modify:!0}));if(!n)continue;let a={kind:i.kind,mimeType:i.mimeType,clockRate:i.clockRate,channels:i.channels,localPayloadType:i.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:n.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:i.parameters??{},remoteParameters:n.parameters??{},rtcpFeedback:Hs(i,n)};r.codecs.push(a)}else for(let i of e.codecs??[]){if($e(i))continue;let n=(s.codecs??[]).find(o=>yr(o,i,{strict:!0,modify:!0}));if(!n)continue;let a={kind:n.kind,mimeType:n.mimeType,clockRate:n.clockRate,channels:n.channels,localPayloadType:n.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:i.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:n.parameters??{},remoteParameters:i.parameters??{},rtcpFeedback:Hs(n,i)};r.codecs.push(a)}for(let i of r.codecs){let n=s.codecs.find(o=>$e(o)&&o.parameters?.apt===i.localPayloadType),a=e.codecs.find(o=>$e(o)&&o.parameters?.apt===i.remotePayloadType);n&&a&&(i.localRtxPayloadType=n.preferredPayloadType,i.remoteRtxPayloadType=a.preferredPayloadType)}for(let i of e.headerExtensions){let n=s.headerExtensions.find(o=>ja(o,i));if(!n)continue;let a={kind:i.kind,uri:i.uri,sendId:n.preferredId,recvId:i.preferredId,encrypt:n.preferredEncrypt??!1,direction:"sendrecv"};switch(i.direction){case"sendrecv":{a.direction="sendrecv";break}case"recvonly":{a.direction="sendonly";break}case"sendonly":{a.direction="recvonly";break}case"inactive":{a.direction="inactive";break}}r.headerExtensions.push(a)}return r}function ba(s){return Ws({direction:"recvonly",extendedRtpCapabilities:s})}function Sa(s){return Ws({direction:"sendonly",extendedRtpCapabilities:s})}function Ca(s,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let r of e.codecs){if(r.kind!==s)continue;let i={mimeType:r.mimeType,payloadType:r.localPayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.localParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(i),r.localRtxPayloadType){let n={mimeType:`${r.kind}/rtx`,payloadType:r.localRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.localPayloadType},rtcpFeedback:[]};t.codecs.push(n)}}for(let r of e.headerExtensions){if(r.kind&&r.kind!==s||r.direction!=="sendrecv"&&r.direction!=="sendonly")continue;let i={uri:r.uri,id:r.sendId,encrypt:r.encrypt,parameters:{}};t.headerExtensions.push(i)}return t}function Ra(s,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let r of e.codecs){if(r.kind!==s)continue;let i={mimeType:r.mimeType,payloadType:r.localPayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.remoteParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(i),r.localRtxPayloadType){let n={mimeType:`${r.kind}/rtx`,payloadType:r.localRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.localPayloadType},rtcpFeedback:[]};t.codecs.push(n)}}for(let r of e.headerExtensions){if(r.kind&&r.kind!==s||r.direction!=="sendrecv"&&r.direction!=="sendonly")continue;let i={uri:r.uri,id:r.sendId,encrypt:r.encrypt,parameters:{}};t.headerExtensions.push(i)}if(t.headerExtensions.some(r=>r.uri==="http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"))for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(i=>i.type!=="goog-remb");else if(t.headerExtensions.some(r=>r.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"))for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(i=>i.type!=="transport-cc");else for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(i=>i.type!=="transport-cc"&&i.type!=="goog-remb");return t}function Ta(s,e){let t=[];if(!e)t.push(s[0]),$e(s[1])&&t.push(s[1]);else{for(let r=0;r<s.length;++r)if(yr(s[r],e,{strict:!0})){t.push(s[r]),$e(s[r+1])&&t.push(s[r+1]);break}if(t.length===0)throw new TypeError("no matching codec found")}return t}function Ea(s){s=ha.clone(s),br(s);let e={mid:ma,codecs:[],headerExtensions:[],encodings:[{ssrc:fa}],rtcp:{cname:"probator"}};return e.codecs.push(s.codecs[0]),e.codecs[0].payloadType=ga,e.headerExtensions=s.headerExtensions,e}function xa(s,e){return(e.codecs??[]).some(t=>t.kind===s)}function ka(s,e){if(br(s),s.codecs.length===0)return!1;let t=s.codecs[0];return(e.codecs??[]).some(r=>r.preferredPayloadType===t.payloadType)}function Pa(s){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof s!="object")throw new TypeError("codec is not an object");if(!s.mimeType||typeof s.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(s.kind=t[1].toLowerCase(),typeof s.preferredPayloadType!="number")throw new TypeError("missing codec.preferredPayloadType");if(typeof s.clockRate!="number")throw new TypeError("missing codec.clockRate");s.kind==="audio"?typeof s.channels!="number"&&(s.channels=1):delete s.channels,(!s.parameters||typeof s.parameters!="object")&&(s.parameters={});for(let r of Object.keys(s.parameters)){let i=s.parameters[r];if(i===void 0&&(s.parameters[r]="",i=""),typeof i!="string"&&typeof i!="number")throw new TypeError(`invalid codec parameter [key:${r}s, value:${i}]`);if(r==="apt"&&typeof i!="number")throw new TypeError("invalid codec apt parameter")}(!s.rtcpFeedback||!Array.isArray(s.rtcpFeedback))&&(s.rtcpFeedback=[]);for(let r of s.rtcpFeedback)Gs(r)}function Gs(s){if(typeof s!="object")throw new TypeError("fb is not an object");if(!s.type||typeof s.type!="string")throw new TypeError("missing fb.type");(!s.parameter||typeof s.parameter!="string")&&(s.parameter="")}function Da(s){if(typeof s!="object")throw new TypeError("ext is not an object");if(s.kind!=="audio"&&s.kind!=="video")throw new TypeError("invalid ext.kind");if(!s.uri||typeof s.uri!="string")throw new TypeError("missing ext.uri");if(typeof s.preferredId!="number")throw new TypeError("missing ext.preferredId");if(s.preferredEncrypt&&typeof s.preferredEncrypt!="boolean")throw new TypeError("invalid ext.preferredEncrypt");if(s.preferredEncrypt||(s.preferredEncrypt=!1),s.direction&&typeof s.direction!="string")throw new TypeError("invalid ext.direction");s.direction||(s.direction="sendrecv")}function La(s){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof s!="object")throw new TypeError("codec is not an object");if(!s.mimeType||typeof s.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(typeof s.payloadType!="number")throw new TypeError("missing codec.payloadType");if(typeof s.clockRate!="number")throw new TypeError("missing codec.clockRate");t[1].toLowerCase()==="audio"?typeof s.channels!="number"&&(s.channels=1):delete s.channels,(!s.parameters||typeof s.parameters!="object")&&(s.parameters={});for(let i of Object.keys(s.parameters)){let n=s.parameters[i];if(n===void 0&&(s.parameters[i]="",n=""),typeof n!="string"&&typeof n!="number")throw new TypeError(`invalid codec parameter [key:${i}s, value:${n}]`);if(i==="apt"&&typeof n!="number")throw new TypeError("invalid codec apt parameter")}(!s.rtcpFeedback||!Array.isArray(s.rtcpFeedback))&&(s.rtcpFeedback=[]);for(let i of s.rtcpFeedback)Gs(i)}function Ia(s){if(typeof s!="object")throw new TypeError("ext is not an object");if(!s.uri||typeof s.uri!="string")throw new TypeError("missing ext.uri");if(typeof s.id!="number")throw new TypeError("missing ext.id");if(s.encrypt&&typeof s.encrypt!="boolean")throw new TypeError("invalid ext.encrypt");s.encrypt||(s.encrypt=!1),(!s.parameters||typeof s.parameters!="object")&&(s.parameters={});for(let e of Object.keys(s.parameters)){let t=s.parameters[e];if(t===void 0&&(s.parameters[e]="",t=""),typeof t!="string"&&typeof t!="number")throw new TypeError("invalid header extension parameter")}}function Ma(s){if(typeof s!="object")throw new TypeError("encoding is not an object");if(s.ssrc&&typeof s.ssrc!="number")throw new TypeError("invalid encoding.ssrc");if(s.rid&&typeof s.rid!="string")throw new TypeError("invalid encoding.rid");if(s.rtx&&typeof s.rtx!="object")throw new TypeError("invalid encoding.rtx");if(s.rtx&&typeof s.rtx.ssrc!="number")throw new TypeError("missing encoding.rtx.ssrc");if((!s.dtx||typeof s.dtx!="boolean")&&(s.dtx=!1),s.scalabilityMode&&typeof s.scalabilityMode!="string")throw new TypeError("invalid encoding.scalabilityMode")}function Oa(s){if(typeof s!="object")throw new TypeError("rtcp is not an object");if(s.cname&&typeof s.cname!="string")throw new TypeError("invalid rtcp.cname");(!s.reducedSize||typeof s.reducedSize!="boolean")&&(s.reducedSize=!0)}function Na(s){if(typeof s!="object")throw new TypeError("numStreams is not an object");if(typeof s.OS!="number")throw new TypeError("missing numStreams.OS");if(typeof s.MIS!="number")throw new TypeError("missing numStreams.MIS")}function Ws({direction:s,extendedRtpCapabilities:e}){let t={codecs:[],headerExtensions:[]};for(let r of e.codecs){let i={kind:r.kind,mimeType:r.mimeType,preferredPayloadType:r.remotePayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.localParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(i),!r.remoteRtxPayloadType)continue;let n={kind:r.kind,mimeType:`${r.kind}/rtx`,preferredPayloadType:r.remoteRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.remotePayloadType},rtcpFeedback:[]};t.codecs.push(n)}for(let r of e.headerExtensions){if(r.direction!=="sendrecv"&&r.direction!==s)continue;let i={kind:r.kind,uri:r.uri,preferredId:r.recvId,preferredEncrypt:r.encrypt??!1,direction:r.direction};t.headerExtensions.push(i)}return t}function $e(s){return s?/.+\/rtx$/i.test(s.mimeType):!1}function yr(s,e,{strict:t=!1,modify:r=!1}={}){let i=s.mimeType.toLowerCase(),n=e.mimeType.toLowerCase();if(i!==n||s.clockRate!==e.clockRate||s.channels!==e.channels)return!1;switch(i){case"video/h264":{if(t){let a=s.parameters["packetization-mode"]??0,o=e.parameters["packetization-mode"]??0;if(a!==o||!Vs.isSameProfile(s.parameters,e.parameters))return!1;let c;try{c=Vs.generateProfileLevelIdStringForAnswer(s.parameters,e.parameters)}catch{return!1}r&&(c?(s.parameters["profile-level-id"]=c,e.parameters["profile-level-id"]=c):(delete s.parameters["profile-level-id"],delete e.parameters["profile-level-id"]))}break}case"video/vp9":{if(t){let a=s.parameters["profile-id"]??0,o=e.parameters["profile-id"]??0;if(a!==o)return!1}break}}return!0}function ja(s,e){return!(s.kind&&e.kind&&s.kind!==e.kind||s.uri!==e.uri)}function Hs(s,e){let t=[];for(let r of s.rtcpFeedback??[]){let i=(e.rtcpFeedback??[]).find(n=>n.type===r.type&&(n.parameter===r.parameter||!n.parameter&&!r.parameter));i&&t.push(i)}return t}});var Ks=C(Lt=>{"use strict";Object.defineProperty(Lt,"__esModule",{value:!0});Lt.Logger=void 0;var qe=tt(),Be="awaitqueue",Sr=class{_debug;_warn;_error;constructor(e){e?(this._debug=qe(`${Be}:${e}`),this._warn=qe(`${Be}:WARN:${e}`),this._error=qe(`${Be}:ERROR:${e}`)):(this._debug=qe(Be),this._warn=qe(`${Be}:WARN`),this._error=qe(`${Be}:ERROR`)),this._debug.log=console.info.bind(console),this._warn.log=console.warn.bind(console),this._error.log=console.error.bind(console)}get debug(){return this._debug}get warn(){return this._warn}get error(){return this._error}};Lt.Logger=Sr});var Tr=C(Ue=>{"use strict";Object.defineProperty(Ue,"__esModule",{value:!0});Ue.AwaitQueueRemovedTaskError=Ue.AwaitQueueStoppedError=void 0;var Cr=class s extends Error{constructor(e){super(e??"queue stopped"),this.name="AwaitQueueStoppedError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,s)}};Ue.AwaitQueueStoppedError=Cr;var Rr=class s extends Error{constructor(e){super(e??"queue task removed"),this.name="AwaitQueueRemovedTaskError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,s)}};Ue.AwaitQueueRemovedTaskError=Rr});var Qs=C(It=>{"use strict";Object.defineProperty(It,"__esModule",{value:!0});It.AwaitQueue=void 0;var Aa=Ks(),Er=Tr(),de=new Aa.Logger("AwaitQueue"),xr=class{pendingTasks=new Map;nextTaskId=0;constructor(){de.debug("constructor()")}get size(){return this.pendingTasks.size}async push(e,t,r){if(t=t??e.name,de.debug(`push() [name:${t}, options:%o]`,r),typeof e!="function")throw new TypeError("given task is not a function");if(t)try{Object.defineProperty(e,"name",{value:t})}catch{}return new Promise((i,n)=>{if(t&&r?.removeOngoingTasksWithSameName)for(let o of this.pendingTasks.values())o.name===t&&o.reject(new Er.AwaitQueueRemovedTaskError,{canExecuteNextTask:!1});let a={id:this.nextTaskId++,task:e,name:t,enqueuedAt:Date.now(),executedAt:void 0,completed:!1,resolve:o=>{if(a.completed)return;a.completed=!0,this.pendingTasks.delete(a.id),de.debug(`resolving task [name:${a.name}]`),i(o);let[c]=this.pendingTasks.values();c&&!c.executedAt&&this.execute(c)},reject:(o,{canExecuteNextTask:c})=>{if(!a.completed&&(a.completed=!0,this.pendingTasks.delete(a.id),de.debug(`rejecting task [name:${a.name}]: %s`,String(o)),n(o),c)){let[p]=this.pendingTasks.values();p&&!p.executedAt&&this.execute(p)}}};this.pendingTasks.set(a.id,a),this.pendingTasks.size===1&&this.execute(a)})}stop(){de.debug("stop()");for(let e of this.pendingTasks.values())de.debug(`stop() | stopping task [name:${e.name}]`),e.reject(new Er.AwaitQueueStoppedError,{canExecuteNextTask:!1})}remove(e){de.debug(`remove() [taskIdx:${e}]`);let t=Array.from(this.pendingTasks.values())[e];if(!t){de.debug(`stop() | no task with given idx [taskIdx:${e}]`);return}t.reject(new Er.AwaitQueueRemovedTaskError,{canExecuteNextTask:!0})}dump(){let e=Date.now(),t=0;return Array.from(this.pendingTasks.values()).map(r=>({idx:t++,task:r.task,name:r.name,enqueuedTime:r.executedAt?r.executedAt-r.enqueuedAt:e-r.enqueuedAt,executionTime:r.executedAt?e-r.executedAt:0}))}async execute(e){if(de.debug(`execute() [name:${e.name}]`),e.executedAt)throw new Error("task already being executed");e.executedAt=Date.now();try{let t=await e.task();e.resolve(t)}catch(t){e.reject(t,{canExecuteNextTask:!0})}}};It.AwaitQueue=xr});var Ys=C(ge=>{"use strict";Object.defineProperty(ge,"__esModule",{value:!0});ge.AwaitQueueRemovedTaskError=ge.AwaitQueueStoppedError=ge.AwaitQueue=void 0;var Fa=Qs();Object.defineProperty(ge,"AwaitQueue",{enumerable:!0,get:function(){return Fa.AwaitQueue}});var Js=Tr();Object.defineProperty(ge,"AwaitQueueStoppedError",{enumerable:!0,get:function(){return Js.AwaitQueueStoppedError}});Object.defineProperty(ge,"AwaitQueueRemovedTaskError",{enumerable:!0,get:function(){return Js.AwaitQueueRemovedTaskError}})});var Xs=C(Mt=>{"use strict";Object.defineProperty(Mt,"__esModule",{value:!0});Mt.Producer=void 0;var za=q(),Zs=G(),Ve=J(),ne=new za.Logger("Producer"),kr=class extends Zs.EnhancedEventEmitter{_id;_localId;_closed=!1;_rtpSender;_track;_kind;_rtpParameters;_paused;_maxSpatialLayer;_stopTracks;_disableTrackOnPause;_zeroRtpOnPause;_appData;_observer=new Zs.EnhancedEventEmitter;constructor({id:e,localId:t,rtpSender:r,track:i,rtpParameters:n,stopTracks:a,disableTrackOnPause:o,zeroRtpOnPause:c,appData:p}){super(),ne.debug("constructor()"),this._id=e,this._localId=t,this._rtpSender=r,this._track=i,this._kind=i.kind,this._rtpParameters=n,this._paused=o?!i.enabled:!1,this._maxSpatialLayer=void 0,this._stopTracks=a,this._disableTrackOnPause=o,this._zeroRtpOnPause=c,this._appData=p??{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get closed(){return this._closed}get kind(){return this._kind}get rtpSender(){return this._rtpSender}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get maxSpatialLayer(){return this._maxSpatialLayer}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(ne.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(ne.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new Ve.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(ne.debug("pause()"),this._closed){ne.error("pause() | Producer closed");return}this._paused=!0,this._track&&this._disableTrackOnPause&&(this._track.enabled=!1),this._zeroRtpOnPause&&new Promise((e,t)=>{this.safeEmit("@pause",e,t)}).catch(()=>{}),this._observer.safeEmit("pause")}resume(){if(ne.debug("resume()"),this._closed){ne.error("resume() | Producer closed");return}this._paused=!1,this._track&&this._disableTrackOnPause&&(this._track.enabled=!0),this._zeroRtpOnPause&&new Promise((e,t)=>{this.safeEmit("@resume",e,t)}).catch(()=>{}),this._observer.safeEmit("resume")}async replaceTrack({track:e}){if(ne.debug("replaceTrack() [track:%o]",e),this._closed){if(e&&this._stopTracks)try{e.stop()}catch{}throw new Ve.InvalidStateError("closed")}else if(e?.readyState==="ended")throw new Ve.InvalidStateError("track ended");if(e===this._track){ne.debug("replaceTrack() | same track, ignored");return}await new Promise((t,r)=>{this.safeEmit("@replacetrack",e,t,r)}),this.destroyTrack(),this._track=e,this._track&&this._disableTrackOnPause&&(this._paused?this._paused&&(this._track.enabled=!1):this._track.enabled=!0),this.handleTrack()}async setMaxSpatialLayer(e){if(this._closed)throw new Ve.InvalidStateError("closed");if(this._kind!=="video")throw new Ve.UnsupportedError("not a video Producer");if(typeof e!="number")throw new TypeError("invalid spatialLayer");e!==this._maxSpatialLayer&&(await new Promise((t,r)=>{this.safeEmit("@setmaxspatiallayer",e,t,r)}).catch(()=>{}),this._maxSpatialLayer=e)}async setRtpEncodingParameters(e){if(this._closed)throw new Ve.InvalidStateError("closed");if(typeof e!="object")throw new TypeError("invalid params");await new Promise((t,r)=>{this.safeEmit("@setrtpencodingparameters",e,t,r)})}onTrackEnded(){ne.debug('track "ended" event'),this.safeEmit("trackended"),this._observer.safeEmit("trackended")}handleTrack(){this._track&&this._track.addEventListener("ended",this.onTrackEnded)}destroyTrack(){if(this._track)try{this._track.removeEventListener("ended",this.onTrackEnded),this._stopTracks&&this._track.stop()}catch{}}};Mt.Producer=kr});var ti=C(Ot=>{"use strict";Object.defineProperty(Ot,"__esModule",{value:!0});Ot.Consumer=void 0;var $a=q(),ei=G(),qa=J(),ae=new $a.Logger("Consumer"),Pr=class extends ei.EnhancedEventEmitter{_id;_localId;_producerId;_closed=!1;_rtpReceiver;_track;_rtpParameters;_paused;_appData;_observer=new ei.EnhancedEventEmitter;constructor({id:e,localId:t,producerId:r,rtpReceiver:i,track:n,rtpParameters:a,appData:o}){super(),ae.debug("constructor()"),this._id=e,this._localId=t,this._producerId=r,this._rtpReceiver=i,this._track=n,this._rtpParameters=a,this._paused=!n.enabled,this._appData=o??{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get producerId(){return this._producerId}get closed(){return this._closed}get kind(){return this._track.kind}get rtpReceiver(){return this._rtpReceiver}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(ae.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(ae.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new qa.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(ae.debug("pause()"),this._closed){ae.error("pause() | Consumer closed");return}if(this._paused){ae.debug("pause() | Consumer is already paused");return}this._paused=!0,this._track.enabled=!1,this.emit("@pause"),this._observer.safeEmit("pause")}resume(){if(ae.debug("resume()"),this._closed){ae.error("resume() | Consumer closed");return}if(!this._paused){ae.debug("resume() | Consumer is already resumed");return}this._paused=!1,this._track.enabled=!0,this.emit("@resume"),this._observer.safeEmit("resume")}onTrackEnded(){ae.debug('track "ended" event'),this.safeEmit("trackended"),this._observer.safeEmit("trackended")}handleTrack(){this._track.addEventListener("ended",this.onTrackEnded)}destroyTrack(){try{this._track.removeEventListener("ended",this.onTrackEnded),this._track.stop()}catch{}}};Ot.Consumer=Pr});var si=C(Nt=>{"use strict";Object.defineProperty(Nt,"__esModule",{value:!0});Nt.DataProducer=void 0;var Ba=q(),ri=G(),Ua=J(),pe=new Ba.Logger("DataProducer"),Dr=class extends ri.EnhancedEventEmitter{_id;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new ri.EnhancedEventEmitter;constructor({id:e,dataChannel:t,sctpStreamParameters:r,appData:i}){super(),pe.debug("constructor()"),this._id=e,this._dataChannel=t,this._sctpStreamParameters=r,this._appData=i??{},this.handleDataChannel()}get id(){return this._id}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get bufferedAmount(){return this._dataChannel.bufferedAmount}get bufferedAmountLowThreshold(){return this._dataChannel.bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._dataChannel.bufferedAmountLowThreshold=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(pe.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(pe.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}send(e){if(pe.debug("send()"),this._closed)throw new Ua.InvalidStateError("closed");this._dataChannel.send(e)}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(pe.debug('DataChannel "open" event'),this.safeEmit("open"))}),this._dataChannel.addEventListener("error",e=>{if(this._closed)return;let t=e.error??new Error("unknown DataChannel error");e.error?.errorDetail==="sctp-failure"?pe.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):pe.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(pe.warn('DataChannel "close" event'),this._closed=!0,this.emit("@close"),this.safeEmit("close"),this._observer.safeEmit("close"))}),this._dataChannel.addEventListener("message",()=>{this._closed||pe.warn('DataChannel "message" event in a DataProducer, message discarded')}),this._dataChannel.addEventListener("bufferedamountlow",()=>{this._closed||this.safeEmit("bufferedamountlow")})}};Nt.DataProducer=Dr});var ni=C(jt=>{"use strict";Object.defineProperty(jt,"__esModule",{value:!0});jt.DataConsumer=void 0;var Va=q(),ii=G(),Ce=new Va.Logger("DataConsumer"),Lr=class extends ii.EnhancedEventEmitter{_id;_dataProducerId;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new ii.EnhancedEventEmitter;constructor({id:e,dataProducerId:t,dataChannel:r,sctpStreamParameters:i,appData:n}){super(),Ce.debug("constructor()"),this._id=e,this._dataProducerId=t,this._dataChannel=r,this._sctpStreamParameters=i,this._appData=n??{},this.handleDataChannel()}get id(){return this._id}get dataProducerId(){return this._dataProducerId}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get binaryType(){return this._dataChannel.binaryType}set binaryType(e){this._dataChannel.binaryType=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(Ce.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(Ce.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(Ce.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"?Ce.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):Ce.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(Ce.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)})}};jt.DataConsumer=Lr});var oi=C(At=>{"use strict";Object.defineProperty(At,"__esModule",{value:!0});At.Transport=void 0;var Ha=Ys(),Ga=q(),ai=G(),j=J(),Ir=be(),st=ie(),Wa=Xs(),Ka=ti(),Qa=si(),Ja=ni(),N=new Ga.Logger("Transport"),Mr=class{consumerOptions;promise;resolve;reject;constructor(e){this.consumerOptions=e,this.promise=new Promise((t,r)=>{this.resolve=t,this.reject=r})}},Or=class extends ai.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 Ha.AwaitQueue;_pendingConsumerTasks=[];_consumerCreationInProgress=!1;_pendingPauseConsumers=new Map;_consumerPauseInProgress=!1;_pendingResumeConsumers=new Map;_consumerResumeInProgress=!1;_pendingCloseConsumers=new Map;_consumerCloseInProgress=!1;_observer=new ai.EnhancedEventEmitter;constructor({direction:e,id:t,iceParameters:r,iceCandidates:i,dtlsParameters:n,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:p,appData:d,handlerFactory:l,getSendExtendedRtpCapabilities:u,recvRtpCapabilities:m,canProduceByKind:g}){super(),N.debug("constructor() [id:%s, direction:%s]",t,e),this._id=t,this._direction=e,this._getSendExtendedRtpCapabilities=u,this._recvRtpCapabilities=m,this._canProduceByKind=g,this._maxSctpMessageSize=a?.maxMessageSize;let h=Ir.clone(p)??{};delete h.iceServers,delete h.iceTransportPolicy,delete h.bundlePolicy,delete h.rtcpMuxPolicy,this._handler=l.factory({direction:e,iceParameters:r,iceCandidates:i,dtlsParameters:n,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:h,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities}),this._appData=d??{},this.handleHandler()}get id(){return this._id}get closed(){return this._closed}get direction(){return this._direction}get handler(){return this._handler}get iceGatheringState(){return this._iceGatheringState}get connectionState(){return this._connectionState}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){if(!this._closed){N.debug("close()"),this._closed=!0,this._awaitQueue.stop(),this._handler.close(),this._connectionState="closed";for(let e of this._producers.values())e.transportClosed();this._producers.clear();for(let e of this._consumers.values())e.transportClosed();this._consumers.clear();for(let e of this._dataProducers.values())e.transportClosed();this._dataProducers.clear();for(let e of this._dataConsumers.values())e.transportClosed();this._dataConsumers.clear(),this._observer.safeEmit("close"),super.close(),this._observer.close()}}async getStats(){if(this._closed)throw new j.InvalidStateError("closed");return this._handler.getTransportStats()}async restartIce({iceParameters:e}){if(N.debug("restartIce()"),this._closed)throw new j.InvalidStateError("closed");if(!e)throw new TypeError("missing iceParameters");return this._awaitQueue.push(async()=>await this._handler.restartIce(e),"transport.restartIce()")}async updateIceServers({iceServers:e}={}){if(N.debug("updateIceServers()"),this._closed)throw new j.InvalidStateError("closed");if(!Array.isArray(e))throw new TypeError("missing iceServers");return this._awaitQueue.push(async()=>this._handler.updateIceServers(e),"transport.updateIceServers()")}async produce({track:e,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:n,codec:a,stopTracks:o=!0,disableTrackOnPause:c=!0,zeroRtpOnPause:p=!1,onRtpSender:d,appData:l={}}={}){if(N.debug("produce() [track:%o]",e),this._closed)throw new j.InvalidStateError("closed");if(e){if(this._direction!=="send")throw new j.UnsupportedError("not a sending Transport");if(this._canProduceByKind[e.kind]){if(e.readyState==="ended")throw new j.InvalidStateError("track ended");if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(this.listenerCount("produce")===0)throw new TypeError('no "produce" listener set into this transport');if(l&&typeof l!="object")throw new TypeError("if given, appData must be an object")}else throw new j.UnsupportedError(`cannot produce ${e.kind}`)}else throw new TypeError("missing track");return this._awaitQueue.push(async()=>{let u;if(r&&!Array.isArray(r))throw TypeError("encodings must be an array");r?.length===0?u=void 0:r&&(u=r.map(f=>{let v={active:!0};return f.active===!1&&(v.active=!1),typeof f.dtx=="boolean"&&(v.dtx=f.dtx),typeof f.scalabilityMode=="string"&&(v.scalabilityMode=f.scalabilityMode),typeof f.scaleResolutionDownBy=="number"&&(v.scaleResolutionDownBy=f.scaleResolutionDownBy),typeof f.maxBitrate=="number"&&(v.maxBitrate=f.maxBitrate),typeof f.maxFramerate=="number"&&(v.maxFramerate=f.maxFramerate),typeof f.adaptivePtime=="boolean"&&(v.adaptivePtime=f.adaptivePtime),typeof f.priority=="string"&&(v.priority=f.priority),typeof f.networkPriority=="string"&&(v.networkPriority=f.networkPriority),v}));let{localId:m,rtpParameters:g,rtpSender:h}=await this._handler.send({track:e,streamId:t,encodings:u,codecOptions:i,headerExtensionOptions:n,codec:a,onRtpSender:d});try{st.validateAndNormalizeRtpParameters(g);let{id:f}=await new Promise((E,k)=>{this.safeEmit("produce",{kind:e.kind,rtpParameters:g,appData:l},E,k)}),v=new Wa.Producer({id:f,localId:m,rtpSender:h,track:e,rtpParameters:g,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(f){throw this._handler.stopSending(m).catch(()=>{}),f}},"transport.produce()").catch(u=>{if(o)try{e.stop()}catch{}throw u})}async consume({id:e,producerId:t,kind:r,rtpParameters:i,streamId:n,onRtpReceiver:a,appData:o={}}){if(N.debug("consume()"),this._closed)throw new j.InvalidStateError("closed");if(this._direction!=="recv")throw new j.UnsupportedError("not a receiving Transport");if(typeof e!="string")throw new TypeError("missing id");if(typeof t!="string")throw new TypeError("missing producerId");if(r!=="audio"&&r!=="video")throw new TypeError(`invalid kind '${r}'`);if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(o&&typeof o!="object")throw new TypeError("if given, appData must be an object");let c=Ir.clone(i);if(!st.canReceive(c,this._recvRtpCapabilities))throw new j.UnsupportedError("cannot consume this Producer");let d=new Mr({id:e,producerId:t,kind:r,rtpParameters:c,streamId:n,onRtpReceiver:a,appData:o});return this._pendingConsumerTasks.push(d),queueMicrotask(()=>{this._closed||this._consumerCreationInProgress===!1&&this.createPendingConsumers()}),d.promise}async produceData({ordered:e=!0,maxPacketLifeTime:t,maxRetransmits:r,label:i="",protocol:n="",appData:a={}}={}){if(N.debug("produceData()"),this._closed)throw new j.InvalidStateError("closed");if(this._direction!=="send")throw new j.UnsupportedError("not a sending Transport");if(this._maxSctpMessageSize){if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(this.listenerCount("producedata")===0)throw new TypeError('no "producedata" listener set into this transport');if(a&&typeof a!="object")throw new TypeError("if given, appData must be an object")}else throw new j.UnsupportedError("SCTP not enabled by remote Transport");return(t||r)&&(e=!1),this._awaitQueue.push(async()=>{let{dataChannel:o,sctpStreamParameters:c}=await this._handler.sendDataChannel({sctpStreamParameters:{ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:n}});st.validateAndNormalizeSctpStreamParameters(c);let{id:p}=await new Promise((l,u)=>{this.safeEmit("producedata",{sctpStreamParameters:c,label:i,protocol:n,appData:a},l,u)}),d=new Qa.DataProducer({id:p,dataChannel:o,sctpStreamParameters:c,appData:a});return this._dataProducers.set(d.id,d),this.handleDataProducer(d),this._observer.safeEmit("newdataproducer",d),d},"transport.produceData()")}async consumeData({id:e,dataProducerId:t,sctpStreamParameters:r,label:i="",protocol:n="",appData:a={}}){if(N.debug("consumeData()"),this._closed)throw new j.InvalidStateError("closed");if(this._direction!=="recv")throw new j.UnsupportedError("not a receiving Transport");if(this._maxSctpMessageSize){if(typeof e!="string")throw new TypeError("missing id");if(typeof t!="string")throw new TypeError("missing dataProducerId");if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(a&&typeof a!="object")throw new TypeError("if given, appData must be an object")}else throw new j.UnsupportedError("SCTP not enabled by remote Transport");let o=Ir.clone(r);return st.validateAndNormalizeSctpStreamParameters(o),this._awaitQueue.push(async()=>{let{dataChannel:c}=await this._handler.receiveDataChannel({maxMessageSize:this._maxSctpMessageSize,sctpStreamParameters:o,label:i,protocol:n}),p=new Ja.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){N.debug("createPendingConsumers() | there is no Consumer to be created");return}let e=[...this._pendingConsumerTasks];this._pendingConsumerTasks=[];let t,r=[];for(let i of e){let{id:n,kind:a,rtpParameters:o,streamId:c,onRtpReceiver:p}=i.consumerOptions;r.push({trackId:n,kind:a,rtpParameters:o,streamId:c,onRtpReceiver:p})}try{let i=await this._handler.receive(r);for(let n=0;n<i.length;++n){let a=e[n],o=i[n],{id:c,producerId:p,kind:d,rtpParameters:l,appData:u}=a.consumerOptions,{localId:m,rtpReceiver:g,track:h}=o,f=new Ka.Consumer({id:c,localId:m,producerId:p,rtpReceiver:g,track:h,rtpParameters:l,appData:u});this._consumers.set(f.id,f),this.handleConsumer(f),!this._probatorConsumerCreated&&!t&&d==="video"&&(t=f),this._observer.safeEmit("newconsumer",f),a.resolve(f)}}catch(i){for(let n of e)n.reject(i)}if(t)try{let i=st.generateProbatorRtpParameters(t.rtpParameters);await this._handler.receive([{trackId:"probator",kind:"video",rtpParameters:i}]),N.debug("createPendingConsumers() | Consumer for RTP probation created"),this._probatorConsumerCreated=!0}catch(i){N.error("createPendingConsumers() | failed to create Consumer for RTP probation:%o",i)}},"transport.createPendingConsumers()").then(()=>{this._consumerCreationInProgress=!1,this._pendingConsumerTasks.length>0&&this.createPendingConsumers()}).catch(()=>{})}pausePendingConsumers(){this._consumerPauseInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingPauseConsumers.size===0){N.debug("pausePendingConsumers() | there is no Consumer to be paused");return}let e=Array.from(this._pendingPauseConsumers.values());this._pendingPauseConsumers.clear();try{let t=e.map(r=>r.localId);await this._handler.pauseReceiving(t)}catch(t){N.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){N.debug("resumePendingConsumers() | there is no Consumer to be resumed");return}let e=Array.from(this._pendingResumeConsumers.values());this._pendingResumeConsumers.clear();try{let t=e.map(r=>r.localId);await this._handler.resumeReceiving(t)}catch(t){N.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){N.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){N.error("closePendingConsumers() | failed to close Consumers:",t)}},"transport.closePendingConsumers()").then(()=>{this._consumerCloseInProgress=!1,this._pendingCloseConsumers.size>0&&this.closePendingConsumers()}).catch(()=>{})}handleHandler(){let e=this._handler;e.on("@connect",({dtlsParameters:t},r,i)=>{if(this._closed){i(new j.InvalidStateError("closed"));return}this.safeEmit("connect",{dtlsParameters:t},r,i)}),e.on("@icegatheringstatechange",t=>{t!==this._iceGatheringState&&(N.debug("ICE gathering state changed to %s",t),this._iceGatheringState=t,this._closed||this.safeEmit("icegatheringstatechange",t))}),e.on("@icecandidateerror",t=>{N.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&&(N.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=>N.warn("producer.close() failed:%o",t))}),e.on("@pause",(t,r)=>{this._awaitQueue.push(async()=>await this._handler.pauseSending(e.localId),"producer @pause event").then(t).catch(r)}),e.on("@resume",(t,r)=>{this._awaitQueue.push(async()=>await this._handler.resumeSending(e.localId),"producer @resume event").then(t).catch(r)}),e.on("@replacetrack",(t,r,i)=>{this._awaitQueue.push(async()=>await this._handler.replaceTrack(e.localId,t),"producer @replacetrack event").then(r).catch(i)}),e.on("@setmaxspatiallayer",(t,r,i)=>{this._awaitQueue.push(async()=>await this._handler.setMaxSpatialLayer(e.localId,t),"producer @setmaxspatiallayer event").then(r).catch(i)}),e.on("@setrtpencodingparameters",(t,r,i)=>{this._awaitQueue.push(async()=>await this._handler.setRtpEncodingParameters(e.localId,t),"producer @setrtpencodingparameters event").then(r).catch(i)}),e.on("@getstats",(t,r)=>{if(this._closed)return r(new j.InvalidStateError("closed"));this._handler.getSenderStats(e.localId).then(t).catch(r)})}handleConsumer(e){e.on("@close",()=>{this._consumers.delete(e.id),this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.delete(e.id),!this._closed&&(this._pendingCloseConsumers.set(e.id,e),this._consumerCloseInProgress===!1&&this.closePendingConsumers())}),e.on("@pause",()=>{this._pendingResumeConsumers.has(e.id)&&this._pendingResumeConsumers.delete(e.id),this._pendingPauseConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerPauseInProgress===!1&&this.pausePendingConsumers()})}),e.on("@resume",()=>{this._pendingPauseConsumers.has(e.id)&&this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerResumeInProgress===!1&&this.resumePendingConsumers()})}),e.on("@getstats",(t,r)=>{if(this._closed)return r(new j.InvalidStateError("closed"));this._handler.getReceiverStats(e.localId).then(t).catch(r)})}handleDataProducer(e){e.on("@close",()=>{this._dataProducers.delete(e.id)})}handleDataConsumer(e){e.on("@close",()=>{this._dataConsumers.delete(e.id)})}};At.Transport=Or});var Ft=C((dd,di)=>{"use strict";var ci=di.exports={v:[{name:"version",reg:/^(\d*)$/}],o:[{name:"origin",reg:/^(\S*) (\d*) (\d*) (\S*) IP(\d) (\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\d*) (\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\d) (\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\w*) (\d*) ([\w/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\d*) ([\w\-.]*)(?:\s*\/(\d*)(?:\s*\/(\S*))?)?/,names:["payload","codec","rate","encoding"],format:function(s){return s.encoding?"rtpmap:%d %s/%s/%s":s.rate?"rtpmap:%d %s/%s":"rtpmap:%d %s"}},{push:"fmtp",reg:/^fmtp:(\d*) ([\S| ]*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\d*)(?: (\S*) IP(\d) (\S*))?/,names:["port","netType","ipVer","address"],format:function(s){return s.address!=null?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\*|\d*) trr-int (\d*)/,names:["payload","value"],format:"rtcp-fb:%s trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,names:["payload","type","subtype"],format:function(s){return s.subtype!=null?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:(\d+)(?:\/(\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\S*)(?: (\S*))?/,names:["value","direction","encrypt-uri","uri","config"],format:function(s){return"extmap:%d"+(s.direction?"/%s":"%v")+(s["encrypt-uri"]?" %s":"%v")+" %s"+(s.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(s){return s.sessionConfig!=null?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\w*)/,format:"setup:%s"},{name:"connectionType",reg:/^connection:(new|existing)/,format:"connection:%s"},{name:"mid",reg:/^mid:([^\s]*)/,format:"mid:%s"},{push:"msid",reg:/^msid:([\w-]+)(?: ([\w-]+))?/,names:["id","appdata"],format:"msid:%s %s"},{name:"ptime",reg:/^ptime:(\d*(?:\.\d*)*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\d*(?:\.\d*)*)/,format:"maxptime:%d"},{name:"direction",reg:/^(sendrecv|recvonly|sendonly|inactive)/},{name:"icelite",reg:/^(ice-lite)/},{name:"iceUfrag",reg:/^ice-ufrag:(\S*)/,format:"ice-ufrag:%s"},{name:"icePwd",reg:/^ice-pwd:(\S*)/,format:"ice-pwd:%s"},{name:"fingerprint",reg:/^fingerprint:(\S*) (\S*)/,names:["type","hash"],format:"fingerprint:%s %s"},{push:"candidates",reg:/^candidate:(\S*) (\d*) (\S*) (\d*) (\S*) (\d*) typ (\S*)(?: raddr (\S*) rport (\d*))?(?: tcptype (\S*))?(?: generation (\d*))?(?: network-id (\d*))?(?: network-cost (\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","tcptype","generation","network-id","network-cost"],format:function(s){var e="candidate:%s %d %s %d %s %d typ %s";return e+=s.raddr!=null?" raddr %s rport %d":"%v%v",e+=s.tcptype!=null?" tcptype %s":"%v",s.generation!=null&&(e+=" generation %d"),e+=s["network-id"]!=null?" network-id %d":"%v",e+=s["network-cost"]!=null?" network-cost %d":"%v",e}},{name:"endOfCandidates",reg:/^(end-of-candidates)/},{name:"remoteCandidates",reg:/^remote-candidates:(.*)/,format:"remote-candidates:%s"},{name:"iceOptions",reg:/^ice-options:(\S*)/,format:"ice-options:%s"},{push:"ssrcs",reg:/^ssrc:(\d*) ([\w_-]*)(?::(.*))?/,names:["id","attribute","value"],format:function(s){var e="ssrc:%d";return s.attribute!=null&&(e+=" %s",s.value!=null&&(e+=":%s")),e}},{push:"ssrcGroups",reg:/^ssrc-group:([\x21\x23\x24\x25\x26\x27\x2A\x2B\x2D\x2E\w]*) (.*)/,names:["semantics","ssrcs"],format:"ssrc-group:%s %s"},{name:"msidSemantic",reg:/^msid-semantic:\s?(\w*) (\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{name:"rtcpRsize",reg:/^(rtcp-rsize)/},{name:"sctpmap",reg:/^sctpmap:([\w_/]*) (\S*)(?: (\S*))?/,names:["sctpmapNumber","app","maxMessageSize"],format:function(s){return s.maxMessageSize!=null?"sctpmap:%s %s %s":"sctpmap:%s %s"}},{name:"xGoogleFlag",reg:/^x-google-flag:([^\s]*)/,format:"x-google-flag:%s"},{push:"rids",reg:/^rid:([\d\w]+) (\w+)(?: ([\S| ]*))?/,names:["id","direction","params"],format:function(s){return s.params?"rid:%s %s %s":"rid:%s %s"}},{push:"imageattrs",reg:new RegExp("^imageattr:(\\d+|\\*)[\\s\\t]+(send|recv)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*)(?:[\\s\\t]+(recv|send)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*))?"),names:["pt","dir1","attrs1","dir2","attrs2"],format:function(s){return"imageattr:%s %s %s"+(s.dir2?" %s %s":"")}},{name:"simulcast",reg:new RegExp("^simulcast:(send|recv) ([a-zA-Z0-9\\-_~;,]+)(?:\\s?(send|recv) ([a-zA-Z0-9\\-_~;,]+))?$"),names:["dir1","list1","dir2","list2"],format:function(s){return"simulcast:%s %s"+(s.dir2?" %s %s":"")}},{name:"simulcast_03",reg:/^simulcast:[\s\t]+([\S+\s\t]+)$/,names:["value"],format:"simulcast: %s"},{name:"framerate",reg:/^framerate:(\d+(?:$|\.\d+))/,format:"framerate:%s"},{name:"sourceFilter",reg:/^source-filter: *(excl|incl) (\S*) (IP4|IP6|\*) (\S*) (.*)/,names:["filterMode","netType","addressTypes","destAddress","srcList"],format:"source-filter: %s %s %s %s %s"},{name:"bundleOnly",reg:/^(bundle-only)/},{name:"label",reg:/^label:(.+)/,format:"label:%s"},{name:"sctpPort",reg:/^sctp-port:(\d+)$/,format:"sctp-port:%s"},{name:"maxMessageSize",reg:/^max-message-size:(\d+)$/,format:"max-message-size:%s"},{push:"tsRefClocks",reg:/^ts-refclk:([^\s=]*)(?:=(\S*))?/,names:["clksrc","clksrcExt"],format:function(s){return"ts-refclk:%s"+(s.clksrcExt!=null?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(s){var e="mediaclk:";return e+=s.id!=null?"id=%s %s":"%v%s",e+=s.mediaClockValue!=null?"=%s":"",e+=s.rateNumerator!=null?" rate=%s":"",e+=s.rateDenominator!=null?"/%s":"",e}},{name:"keywords",reg:/^keywds:(.+)$/,format:"keywds:%s"},{name:"content",reg:/^content:(.+)/,format:"content:%s"},{name:"bfcpFloorCtrl",reg:/^floorctrl:(c-only|s-only|c-s)/,format:"floorctrl:%s"},{name:"bfcpConfId",reg:/^confid:(\d+)/,format:"confid:%s"},{name:"bfcpUserId",reg:/^userid:(\d+)/,format:"userid:%s"},{name:"bfcpFloorId",reg:/^floorid:(.+) (?:m-stream|mstrm):(.+)/,names:["id","mStream"],format:"floorid:%s mstrm:%s"},{push:"invalid",names:["value"]}]};Object.keys(ci).forEach(function(s){var e=ci[s];e.forEach(function(t){t.reg||(t.reg=/(.*)/),t.format||(t.format="%s")})})});var ui=C(le=>{"use strict";var He=function(s){return String(Number(s))===s?Number(s):s},Ya=function(s,e,t,r){if(r&&!t)e[r]=He(s[1]);else for(var i=0;i<t.length;i+=1)s[i+1]!=null&&(e[t[i]]=He(s[i+1]))},Za=function(s,e,t){var r=s.name&&s.names;s.push&&!e[s.push]?e[s.push]=[]:r&&!e[s.name]&&(e[s.name]={});var i=s.push?{}:r?e[s.name]:e;Ya(t.match(s.reg),i,s.names,s.name),s.push&&e[s.push].push(i)},pi=Ft(),Xa=RegExp.prototype.test.bind(/^([a-z])=(.*)/);le.parse=function(s){var e={},t=[],r=e;return s.split(/(\r\n|\r|\n)/).filter(Xa).forEach(function(i){var n=i[0],a=i.slice(2);n==="m"&&(t.push({rtp:[],fmtp:[]}),r=t[t.length-1]);for(var o=0;o<(pi[n]||[]).length;o+=1){var c=pi[n][o];if(c.reg.test(a))return Za(c,r,a)}}),e.media=t,e};var li=function(s,e){var t=e.split(/=(.+)/,2);return t.length===2?s[t[0]]=He(t[1]):t.length===1&&e.length>1&&(s[t[0]]=void 0),s};le.parseParams=function(s){return s.split(/;\s?/).reduce(li,{})};le.parseFmtpConfig=le.parseParams;le.parsePayloads=function(s){return s.toString().split(" ").map(Number)};le.parseRemoteCandidates=function(s){for(var e=[],t=s.split(" ").map(He),r=0;r<t.length;r+=3)e.push({component:t[r],ip:t[r+1],port:t[r+2]});return e};le.parseImageAttributes=function(s){return s.split(" ").map(function(e){return e.substring(1,e.length-1).split(",").reduce(li,{})})};le.parseSimulcastStreamList=function(s){return s.split(";").map(function(e){return e.split(",").map(function(t){var r,i=!1;return t[0]!=="~"?r=He(t):(r=He(t.substring(1,t.length)),i=!0),{scid:r,paused:i}})})}});var mi=C((ld,hi)=>{"use strict";var Nr=Ft(),eo=/%[sdv%]/g,to=function(s){var e=1,t=arguments,r=t.length;return s.replace(eo,function(i){if(e>=r)return i;var n=t[e];switch(e+=1,i){case"%%":return"%";case"%s":return String(n);case"%d":return Number(n);case"%v":return""}})},it=function(s,e,t){var r=e.format instanceof Function?e.format(e.push?t:t[e.name]):e.format,i=[s+"="+r];if(e.names)for(var n=0;n<e.names.length;n+=1){var a=e.names[n];e.name?i.push(t[e.name][a]):i.push(t[e.names[n]])}else i.push(t[e.name]);return to.apply(null,i)},ro=["v","o","s","i","u","e","p","c","b","t","r","z","a"],so=["i","c","b","a"];hi.exports=function(s,e){e=e||{},s.version==null&&(s.version=0),s.name==null&&(s.name=" "),s.media.forEach(function(n){n.payloads==null&&(n.payloads="")});var t=e.outerOrder||ro,r=e.innerOrder||so,i=[];return t.forEach(function(n){Nr[n].forEach(function(a){a.name in s&&s[a.name]!=null?i.push(it(n,a,s)):a.push in s&&s[a.push]!=null&&s[a.push].forEach(function(o){i.push(it(n,a,o))})})}),s.media.forEach(function(n){i.push(it("m",Nr.m[0],n)),r.forEach(function(a){Nr[a].forEach(function(o){o.name in n&&n[o.name]!=null?i.push(it(a,o,n)):o.push in n&&n[o.push]!=null&&n[o.push].forEach(function(c){i.push(it(a,o,c))})})})}),i.join(`\r
|
|
6
6
|
`)+`\r
|
|
7
|
-
`}});var ue=C(oe=>{"use strict";var Re=pi(),to=ui(),ro=Ft();oe.grammar=ro;oe.write=to;oe.parse=Re.parse;oe.parseParams=Re.parseParams;oe.parseFmtpConfig=Re.parseFmtpConfig;oe.parsePayloads=Re.parsePayloads;oe.parseRemoteCandidates=Re.parseRemoteCandidates;oe.parseImageAttributes=Re.parseImageAttributes;oe.parseSimulcastStreamList=Re.parseSimulcastStreamList});var Te=C(Nr=>{"use strict";Object.defineProperty(Nr,"__esModule",{value:!0});Nr.parse=io;var so=new RegExp("^[LS]([1-9]\\d{0,1})T([1-9]\\d{0,1})");function io(s){let e=so.exec(s??"");return e?{spatialLayers:Number(e[1]),temporalLayers:Number(e[2])}:{spatialLayers:1,temporalLayers:1}}});var fi=C(_e=>{"use strict";Object.defineProperty(_e,"__esModule",{value:!0});_e.OfferMediaSection=_e.AnswerMediaSection=_e.MediaSection=void 0;var no=ue(),hi=be(),nt=class{_mediaObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r}){if(this._mediaObject={type:"",port:0,protocol:"",payloads:"",rtp:[],fmtp:[]},e&&this.setIceParameters(e),t){this._mediaObject.candidates=[];for(let i of t){let n={foundation:i.foundation,component:1,ip:i.address??i.ip,port:i.port,priority:i.priority,transport:i.protocol,type:i.type};i.tcpType&&(n.tcptype=i.tcpType),this._mediaObject.candidates.push(n)}this._mediaObject.endOfCandidates="end-of-candidates",this._mediaObject.iceOptions="renomination"}r&&this.setDtlsRole(r.role)}get mid(){return String(this._mediaObject.mid)}get closed(){return this._mediaObject.port===0}getObject(){return this._mediaObject}setIceParameters(e){this._mediaObject.iceUfrag=e.usernameFragment,this._mediaObject.icePwd=e.password}pause(){this._mediaObject.direction="inactive"}disable(){this.pause()}close(){this.disable(),this._mediaObject.port=0,delete this._mediaObject.candidates,delete this._mediaObject.endOfCandidates,delete this._mediaObject.iceUfrag,delete this._mediaObject.icePwd,delete this._mediaObject.iceOptions,this._mediaObject.rtp=[],this._mediaObject.fmtp=[],delete this._mediaObject.rtcp,delete this._mediaObject.rtcpFb,delete this._mediaObject.ssrcs,delete this._mediaObject.ssrcGroups,delete this._mediaObject.simulcast,delete this._mediaObject.simulcast_03,delete this._mediaObject.rids,delete this._mediaObject.extmapAllowMixed}};_e.MediaSection=nt;var jr=class extends nt{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:i,plainRtpParameters:n,offerMediaObject:a,offerRtpParameters:o,answerRtpParameters:c,codecOptions:p}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r}),this._mediaObject.mid=String(a.mid),this._mediaObject.type=a.type,this._mediaObject.protocol=a.protocol,n?(this._mediaObject.connection={ip:n.ip,version:n.ipVersion},this._mediaObject.port=n.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},this._mediaObject.port=7),a.type){case"audio":case"video":{this._mediaObject.direction="recvonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[];for(let d of c.codecs){let l={payload:d.payloadType,codec:mi(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:f,opusDtx:v,opusMaxPlaybackRate:E,opusMaxAverageBitrate:k,opusPtime:P,opusNack:x,videoGoogleStartBitrate:I,videoGoogleMaxBitrate:ke,videoGoogleMinBitrate:Ze}=p,me=o.codecs.find(we=>we.payloadType===d.payloadType);switch(d.mimeType.toLowerCase()){case"audio/opus":case"audio/multiopus":{h!==void 0&&(me.parameters["sprop-stereo"]=h?1:0,u.stereo=h?1:0),f!==void 0&&(me.parameters.useinbandfec=f?1:0,u.useinbandfec=f?1:0),v!==void 0&&(me.parameters.usedtx=v?1:0,u.usedtx=v?1:0),E!==void 0&&(u.maxplaybackrate=E),k!==void 0&&(u.maxaveragebitrate=k),P!==void 0&&(me.parameters.ptime=P,u.ptime=P),x||(me.rtcpFeedback=me.rtcpFeedback.filter(we=>we.type!=="nack"||we.parameter),m=m.filter(we=>we.type!=="nack"||we.parameter));break}case"video/vp8":case"video/vp9":case"video/h264":case"video/h265":case"video/av1":{I!==void 0&&(u["x-google-start-bitrate"]=I),ke!==void 0&&(u["x-google-max-bitrate"]=ke),Ze!==void 0&&(u["x-google-min-bitrate"]=Ze);break}}}let g={payload:d.payloadType,config:""};for(let h of Object.keys(u))g.config&&(g.config+=";"),g.config+=`${h}=${u[h]}`;g.config&&this._mediaObject.fmtp.push(g);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=i.port,this._mediaObject.maxMessageSize=i.maxMessageSize):a.sctpmap&&(this._mediaObject.payloads=String(i.port),this._mediaObject.sctpmap={app:"webrtc-datachannel",sctpmapNumber:i.port,maxMessageSize:i.maxMessageSize});break}}}setDtlsRole(e){switch(e){case"client":{this._mediaObject.setup="active";break}case"server":{this._mediaObject.setup="passive";break}case"auto":{this._mediaObject.setup="actpass";break}}}resume(){this._mediaObject.direction="recvonly"}muxSimulcastStreams(e){if(!this._mediaObject.simulcast?.list1)return;let t={};for(let n of e)n.rid&&(t[n.rid]=n);let r=this._mediaObject.simulcast.list1,i=no.parseSimulcastStreamList(r);for(let n of i)for(let a of n)a.paused=!t[a.scid]?.active;this._mediaObject.simulcast.list1=i.map(n=>n.map(a=>`${a.paused?"~":""}${a.scid}`).join(",")).join(";")}};_e.AnswerMediaSection=jr;var Ar=class extends nt{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:i,plainRtpParameters:n,mid:a,kind:o,offerRtpParameters:c,streamId:p,trackId:d}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r}),this._mediaObject.mid=String(a),this._mediaObject.type=o,n?(this._mediaObject.connection={ip:n.ip,version:n.ipVersion},this._mediaObject.protocol="RTP/AVP",this._mediaObject.port=n.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},i?this._mediaObject.protocol="UDP/DTLS/SCTP":this._mediaObject.protocol="UDP/TLS/RTP/SAVPF",this._mediaObject.port=7),this._mediaObject.extmapAllowMixed="extmap-allow-mixed",o){case"audio":case"video":{this._mediaObject.direction="sendonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[],this._mediaObject.msid=[{id:p,appdata:d}];for(let g of c.codecs){let h={payload:g.payloadType,codec:mi(g),rate:g.clockRate};g.channels>1&&(h.encoding=g.channels),this._mediaObject.rtp.push(h);let f={payload:g.payloadType,config:""};for(let v of Object.keys(g.parameters??{}))f.config&&(f.config+=";"),f.config+=`${v}=${g.parameters[v]}`;f.config&&this._mediaObject.fmtp.push(f);for(let v of g.rtcpFeedback)this._mediaObject.rtcpFb.push({payload:g.payloadType,type:v.type,subtype:v.parameter})}this._mediaObject.payloads=c.codecs.map(g=>g.payloadType).join(" "),this._mediaObject.ext=[];for(let g of c.headerExtensions)this._mediaObject.ext.push({uri:g.uri,value:g.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=i.port,this._mediaObject.maxMessageSize=i.maxMessageSize;break}}}setDtlsRole(e){this._mediaObject.setup="actpass"}resume(){this._mediaObject.direction="sendonly"}};_e.OfferMediaSection=Ar;function mi(s){let t=new RegExp("^(audio|video)/(.+)","i").exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");return t[2]}});var We=C(qt=>{"use strict";Object.defineProperty(qt,"__esModule",{value:!0});qt.RemoteSdp=void 0;var ao=ue(),oo=q(),$t=fi(),co=$r(),po=["av1","h264"],zt=new oo.Logger("RemoteSdp"),Fr=class{_iceParameters;_iceCandidates;_dtlsParameters;_sctpParameters;_plainRtpParameters;_mediaSections=[];_midToIndex=new Map;_firstMid;_sdpObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:i,plainRtpParameters:n}){if(this._iceParameters=e,this._iceCandidates=t,this._dtlsParameters=r,this._sctpParameters=i,this._plainRtpParameters=n,this._sdpObject={version:0,origin:{address:"0.0.0.0",ipVer:4,netType:"IN",sessionId:"10000",sessionVersion:0,username:`media-client-v${co.version}`},name:"-",timing:{start:0,stop:0},media:[]},this._sdpObject.iceOptions="ice2",e?.iceLite&&(this._sdpObject.icelite="ice-lite"),r){this._sdpObject.msidSemantic={semantic:"WMS",token:"*"};let a=this._dtlsParameters.fingerprints.length;this._sdpObject.fingerprint={type:r.fingerprints[a-1].algorithm,hash:r.fingerprints[a-1].value},this._sdpObject.groups=[{type:"BUNDLE",mids:""}]}n&&(this._sdpObject.origin.address=n.ip,this._sdpObject.origin.ipVer=n.ipVersion)}updateIceParameters(e){zt.debug("updateIceParameters() [iceParameters:%o]",e),this._iceParameters=e,this._sdpObject.icelite=e.iceLite?"ice-lite":void 0;for(let t of this._mediaSections)t.setIceParameters(e)}updateDtlsRole(e){zt.debug("updateDtlsRole() [role:%s]",e),this._dtlsParameters.role=e;for(let t of this._mediaSections)t.setDtlsRole(e)}setSessionExtmapAllowMixed(){zt.debug("setSessionExtmapAllowMixed()"),this._sdpObject.extmapAllowMixed="extmap-allow-mixed"}getNextMediaSectionIdx(){for(let e=0;e<this._mediaSections.length;++e){let t=this._mediaSections[e];if(t.closed)return{idx:e,reuseMid:t.mid}}return{idx:this._mediaSections.length}}send({offerMediaObject:e,reuseMid:t,offerRtpParameters:r,answerRtpParameters:i,codecOptions:n}){let a=new $t.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,offerMediaObject:e,offerRtpParameters:r,answerRtpParameters:i,codecOptions:n}),o=a.getObject();o.rtp.find(p=>po.includes(p.codec.toLowerCase()))||(o.ext=o.ext?.filter(p=>p.uri!=="https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension")),t?this.replaceMediaSection(a,t):this._midToIndex.has(a.mid)?this.replaceMediaSection(a):this.addMediaSection(a)}receive({mid:e,kind:t,offerRtpParameters:r,streamId:i,trackId:n}){this.setSessionExtmapAllowMixed();let a=new $t.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,mid:e,kind:t,offerRtpParameters:r,streamId:i,trackId:n}),o=this._mediaSections.find(c=>c.closed&&c.getObject().type===t);o?this.replaceMediaSection(a,o.mid):this.addMediaSection(a)}pauseMediaSection(e){this.findMediaSection(e).pause()}resumeSendingMediaSection(e){this.findMediaSection(e).resume()}resumeReceivingMediaSection(e){this.findMediaSection(e).resume()}disableMediaSection(e){this.findMediaSection(e).disable()}closeMediaSection(e){let t=this.findMediaSection(e);return e===this._firstMid?(zt.debug("closeMediaSection() | cannot close first media section, disabling it instead [mid:%s]",e),this.disableMediaSection(e),!1):(t.close(),this.regenerateBundleMids(),!0)}muxMediaSectionSimulcast(e,t){let r=this.findMediaSection(e);r.muxSimulcastStreams(t),this.replaceMediaSection(r)}sendSctpAssociation({offerMediaObject:e}){let t=new $t.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 $t.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++,ao.write(this._sdpObject)}addMediaSection(e){this._firstMid||(this._firstMid=e.mid),this._mediaSections.push(e),this._midToIndex.set(e.mid,this._mediaSections.length-1),this._sdpObject.media.push(e.getObject()),this.regenerateBundleMids()}replaceMediaSection(e,t){if(typeof t=="string"){let r=this._midToIndex.get(t);if(r===void 0)throw new Error(`no media section found for reuseMid '${t}'`);let i=this._mediaSections[r];this._mediaSections[r]=e,this._midToIndex.delete(i.mid),this._midToIndex.set(e.mid,r),this._sdpObject.media[r]=e.getObject(),this.regenerateBundleMids()}else{let r=this._midToIndex.get(e.mid);if(r===void 0)throw new Error(`no media section found with mid '${e.mid}'`);this._mediaSections[r]=e,this._sdpObject.media[r]=e.getObject()}}findMediaSection(e){let t=this._midToIndex.get(e);if(t===void 0)throw new Error(`no media section found with mid '${e}'`);return this._mediaSections[t]}regenerateBundleMids(){this._dtlsParameters&&(this._sdpObject.groups[0].mids=this._mediaSections.filter(e=>!e.closed).map(e=>e.mid).join(" "))}};qt.RemoteSdp=Fr});var Ge=C(Ee=>{"use strict";Object.defineProperty(Ee,"__esModule",{value:!0});Ee.extractRtpCapabilities=lo;Ee.extractDtlsParameters=uo;Ee.getCname=ho;Ee.applyCodecParameters=mo;Ee.addHeaderExtension=fo;var gi=ue();function lo({sdpObject:s}){let e=new Map,t=new Map;for(let i of s.media){let n=i.type;switch(n){case"audio":case"video":break;default:continue}for(let a of i.rtp){let o={kind:n,mimeType:`${n}/${a.codec}`,preferredPayloadType:a.payload,clockRate:a.rate,channels:a.encoding,parameters:{},rtcpFeedback:[]};e.set(o.preferredPayloadType,o)}for(let a of i.fmtp??[]){let o=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 i.rtcpFb??[]){let o={type:a.type,parameter:a.subtype};if(o.parameter||delete o.parameter,a.payload!=="*"){let c=e.get(Number(a.payload));if(!c)continue;c.rtcpFeedback.push(o)}else for(let c of e.values())c.kind===n&&!/.+\/rtx$/i.test(c.mimeType)&&c.rtcpFeedback.push(o)}for(let a of i.ext??[]){if(a["encrypt-uri"])continue;let o={kind:n,uri:a.uri,preferredId:a.value};t.set(o.preferredId,o)}}return{codecs:Array.from(e.values()),headerExtensions:Array.from(t.values())}}function uo({sdpObject:s}){let e=s.setup,t=s.fingerprint;if(!e||!t){let n=(s.media??[]).find(a=>a.port!==0);n&&(e=e??n.setup,t=t??n.fingerprint)}if(e){if(!t)throw new Error("no a=fingerprint found at SDP session or media level")}else throw new Error("no a=setup found at SDP session or media level");let r;switch(e){case"active":{r="client";break}case"passive":{r="server";break}case"actpass":{r="auto";break}}return{role:r,fingerprints:[{algorithm:t.type,value:t.hash}]}}function ho({offerMediaObject:s}){let e=(s.ssrcs??[]).find(t=>t.attribute==="cname");return e?e.value:""}function mo({offerRtpParameters:s,answerMediaObject:e}){for(let t of s.codecs){let r=t.mimeType.toLowerCase();if(r!=="audio/opus"||!(e.rtp??[]).find(o=>o.payload===t.payloadType))continue;e.fmtp=e.fmtp??[];let n=e.fmtp.find(o=>o.payload===t.payloadType);n||(n={payload:t.payloadType,config:""},e.fmtp.push(n));let a=gi.parseParams(n.config);if(r==="audio/opus"){let o=t.parameters?.["sprop-stereo"];o!==void 0&&(a.stereo=Number(o)?1:0)}n.config="";for(let o of Object.keys(a))n.config&&(n.config+=";"),n.config+=`${o}=${a[o]}`}}function fo({offerMediaObject:s,headerExtensionUri:e,headerExtensionId:t}){s.ext||(s.ext=[]),s.ext.push({uri:e,value:t})}});var Ke=C(Bt=>{"use strict";Object.defineProperty(Bt,"__esModule",{value:!0});Bt.getRtpEncodings=go;Bt.addLegacySimulcast=_o;function go({offerMediaObject:s,codecs:e}){let t=new Set;for(let n of s.ssrcs??[]){let a=n.id;a&&t.add(a)}if(t.size===0)throw new Error("no a=ssrc lines found");let r=new Map;for(let n of s.ssrcGroups??[]){if(n.semantics!=="FID")continue;let a=n.ssrcs.split(/\s+/),o=Number(a[0]),c=Number(a[1]);t.has(o)&&(t.delete(o),t.delete(c),r.set(o,c))}for(let n of t)r.set(n,void 0);let i=[];for(let[n,a]of r){let o={ssrc:n};a&&e.length>1&&(o.rtx={ssrc:a}),i.push(o)}return i}function _o({offerMediaObject:s,numStreams:e}){if(e<=1)throw new TypeError("numStreams must be greater than 1");let t=(s.ssrcs??[]).find(l=>l.attribute==="msid");if(!t)throw new Error("a=ssrc line with msid information not found");let[r,i]=t.value.split(" "),n=Number(t.id),a;(s.ssrcGroups??[]).some(l=>{if(l.semantics!=="FID")return!1;let u=l.ssrcs.split(/\s+/);return Number(u[0])===n?(a=Number(u[1]),!0):!1});let o=(s.ssrcs??[]).find(l=>l.attribute==="cname");if(!o)throw new Error("a=ssrc line with cname information not found");let c=o.value,p=[],d=[];for(let l=0;l<e;++l)p.push(n+l),a&&d.push(a+l);s.ssrcGroups=[],s.ssrcs=[],s.ssrcGroups.push({semantics:"SIM",ssrcs:p.join(" ")});for(let l of p)s.ssrcs.push({id:l,attribute:"cname",value:c}),s.ssrcs.push({id:l,attribute:"msid",value:`${r} ${i}`});for(let l=0;l<d.length;++l){let u=p[l],m=d[l];s.ssrcs.push({id:m,attribute:"cname",value:c}),s.ssrcs.push({id:m,attribute:"msid",value:`${r} ${i}`}),s.ssrcGroups.push({semantics:"FID",ssrcs:`${u} ${m}`})}}});var Qe=C(at=>{"use strict";Object.defineProperty(at,"__esModule",{value:!0});at.addNackSupportForOpus=vo;at.addHeaderExtensionSupport=wo;at.getMsidStreamIdAndTrackId=yo;function vo(s){for(let e of s.codecs??[])(e.mimeType.toLowerCase()==="audio/opus"||e.mimeType.toLowerCase()==="audio/multiopus")&&!e.rtcpFeedback?.some(t=>t.type==="nack"&&!t.parameter)&&(e.rtcpFeedback||(e.rtcpFeedback=[]),e.rtcpFeedback.push({type:"nack"}))}function wo(s,e){let t,r=s.headerExtensions?.find(n=>n.uri===e.uri);if(r){if(r.kind===e.kind)return;t=r.preferredId}if(s.headerExtensions||(s.headerExtensions=[]),t===void 0){t=1;let n=new Set(s.headerExtensions.map(a=>a.preferredId));for(;n.has(t);)++t}let i={kind:e.kind,uri:e.uri,preferredId:t,preferredEncrypt:!1,direction:e.direction};s.headerExtensions.push(i)}function yo(s){if(!s||typeof s!="string")return{msidStreamId:void 0,msidTrackId:void 0};let[e,t]=s.trim().split(/\s+/);return e?{msidStreamId:e,msidTrackId:t}:{msidStreamId:void 0,msidTrackId:void 0}}});var yi=C(Ut=>{"use strict";Object.defineProperty(Ut,"__esModule",{value:!0});Ut.Chrome111=void 0;var ce=ue(),bo=W(),So=q(),ot=ie(),Co=J(),Ro=Te(),To=We(),ct=Ge(),_i=Ke(),zr=Qe(),R=new So.Logger("Chrome111"),vi="Chrome111",wi={OS:65535,MIS:65535},qr=class s extends bo.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:vi,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{R.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e,sendEncodings:[{scalabilityMode:"L3T3"}]});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let i=ce.parse(r.sdp);return s.getLocalRtpCapabilities(i)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(R.debug("getNativeSctpCapabilities()"),{numStreams:wi})}}static getLocalRtpCapabilities(e,t=[]){let r=ct.extractRtpCapabilities({sdpObject:e});ot.validateAndNormalizeRtpCapabilities(r),zr.addNackSupportForOpus(r);for(let i of t)zr.addHeaderExtensionSupport(r,i);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),R.debug("constructor()"),this._direction=e,this._remoteSdp=new To.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=p,i.role&&i.role!=="auto"&&(this._forcedLocalDtlsRole=i.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(R.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return vi}close(){if(R.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),R.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),R.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});R.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:n,codec:a,onRtpSender:o}){if(this.assertNotClosed(),this.assertSendDirection(),R.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1){let P=1;for(let x of r){let I=x.scalabilityMode?(0,Ro.parse)(x.scalabilityMode).temporalLayers:3;I>P&&(P=I)}r.forEach((x,I)=>{x.rid=`r${I}`,x.scalabilityMode=`L1T${P}`})}let c=this._remoteSdp.getNextMediaSectionIdx(),p=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});o&&o(p.sender);let d=await this._pc.createOffer(),l=ce.parse(d.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let u=[];u.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let m=s.getLocalRtpCapabilities(l,u),g=this._getSendExtendedRtpCapabilities(m),h=ot.getSendingRtpParameters(e.kind,g);h.codecs=ot.reduceCodecs(h.codecs,a);let f=ot.getSendingRemoteRtpParameters(e.kind,g);if(f.codecs=ot.reduceCodecs(f.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l}),n?.absCaptureTime){let P=l.media[c.idx];ct.addHeaderExtension({offerMediaObject:P,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:f.headerExtensions.find(x=>x.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:ce.write(l)}}R.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let v=p.mid;h.mid=v,l=ce.parse(this._pc.localDescription.sdp);let E=l.media[c.idx];if(h.rtcp.cname=ct.getCname({offerMediaObject:E}),h.msid=`${t??this._sendStream.id} ${e.id}`,!r)h.encodings=_i.getRtpEncodings({offerMediaObject:E,codecs:h.codecs});else if(r.length===1){let P=_i.getRtpEncodings({offerMediaObject:E,codecs:h.codecs});Object.assign(P[0],r[0]),h.encodings=P}else h.encodings=r;this._remoteSdp.send({offerMediaObject:E,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:f,codecOptions:i});let k={type:"answer",sdp:this._remoteSdp.getSdp()};return R.debug("send() | calling pc.setRemoteDescription() [answer:%o]",k),await this._pc.setRemoteDescription(k),this._mapMidTransceiver.set(v,p),{localId:v,rtpParameters:h,rtpSender:p.sender}}async stopSending(e){if(this.assertSendDirection(),R.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let i=await this._pc.createOffer();R.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let n={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),R.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();R.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),R.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();R.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?R.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):R.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),R.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();R.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),R.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();R.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};R.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%wi.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=ce.parse(n.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),R.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;R.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:m}=zr.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??m??d.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(let o of e){let{trackId:c,onRtpReceiver:p}=o;if(p){let d=r.get(c),l=this._pc.getTransceivers().find(u=>u.mid===d);if(!l)throw new Error("transceiver not found");p(l.receiver)}}let n=await this._pc.createAnswer(),a=ce.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=r.get(c),l=a.media.find(u=>String(u.mid)===d);ct.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l})}n={type:"answer",sdp:ce.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),R.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,p=r.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(d)this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){R.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){R.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){R.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};R.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(r,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),m=ce.parse(u.sdp),g=m.media.find(h=>h.type==="application");g.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),u={type:"answer",sdp:ce.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=ce.parse(this._pc.localDescription.sdp));let r=ct.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Co.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};Ut.Chrome111=qr});var Ci=C(Vt=>{"use strict";Object.defineProperty(Vt,"__esModule",{value:!0});Vt.Chrome74=void 0;var Y=ue(),Eo=q(),xo=W(),dt=ie(),ko=J(),Po=Te(),Do=We(),pt=Ge(),Br=Ke(),Ur=Qe(),b=new Eo.Logger("Chrome74"),bi="Chrome74",Si={OS:1024,MIS:1024},Vr=class s extends xo.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 s(e),getNativeRtpCapabilities:async({direction:e})=>{b.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let i=Y.parse(r.sdp);return s.getLocalRtpCapabilities(i)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(b.debug("getNativeSctpCapabilities()"),{numStreams:Si})}}static getLocalRtpCapabilities(e,t=[]){let r=pt.extractRtpCapabilities({sdpObject:e});dt.validateAndNormalizeRtpCapabilities(r),Ur.addNackSupportForOpus(r);for(let i of t)Ur.addHeaderExtensionSupport(r,i);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),b.debug("constructor()"),this._direction=e,this._remoteSdp=new Do.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=p,i.role&&i.role!=="auto"&&(this._forcedLocalDtlsRole=i.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(b.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return bi}close(){if(b.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),b.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),b.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});b.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:n,codec:a}){this.assertNotClosed(),this.assertSendDirection(),b.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((x,I)=>{x.rid=`r${I}`});let o=this._remoteSdp.getNextMediaSectionIdx(),c=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r}),p=await this._pc.createOffer(),d=Y.parse(p.sdp);d.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let l=[];l.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let u=s.getLocalRtpCapabilities(d,l),m=this._getSendExtendedRtpCapabilities(u),g=dt.getSendingRtpParameters(e.kind,m);g.codecs=dt.reduceCodecs(g.codecs,a);let h=dt.getSendingRemoteRtpParameters(e.kind,m);h.codecs=dt.reduceCodecs(h.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:d});let f=!1,v=(0,Po.parse)((r??[{}])[0].scalabilityMode),E;r?.length===1&&v.spatialLayers>1&&g.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(b.debug("send() | enabling legacy simulcast for VP9 SVC"),f=!0,d=Y.parse(p.sdp),E=d.media[o.idx],Br.addLegacySimulcast({offerMediaObject:E,numStreams:v.spatialLayers}),p={type:"offer",sdp:Y.write(d)}),b.debug("send() | calling pc.setLocalDescription() [offer:%o]",p),n?.absCaptureTime&&(E=d.media[o.idx],pt.addHeaderExtension({offerMediaObject:E,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:h.headerExtensions.find(x=>x.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),p={type:"offer",sdp:Y.write(d)}),await this._pc.setLocalDescription(p);let k=c.mid;if(g.mid=k,d=Y.parse(this._pc.localDescription.sdp),E=d.media[o.idx],g.rtcp.cname=pt.getCname({offerMediaObject:E}),g.msid=`${t??this._sendStream.id} ${e.id}`,!r)g.encodings=Br.getRtpEncodings({offerMediaObject:E,codecs:g.codecs});else if(r.length===1){let x=Br.getRtpEncodings({offerMediaObject:E,codecs:g.codecs});Object.assign(x[0],r[0]),f&&(x=[x[0]]),g.encodings=x}else g.encodings=r;if(g.encodings.length>1&&(g.codecs[0].mimeType.toLowerCase()==="video/vp8"||g.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let x of g.encodings)x.scalabilityMode?x.scalabilityMode=`L1T${v.temporalLayers}`:x.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:E,reuseMid:o.reuseMid,offerRtpParameters:g,answerRtpParameters:h,codecOptions:i});let P={type:"answer",sdp:this._remoteSdp.getSdp()};return b.debug("send() | calling pc.setRemoteDescription() [answer:%o]",P),await this._pc.setRemoteDescription(P),this._mapMidTransceiver.set(k,c),{localId:k,rtpParameters:g,rtpSender:c.sender}}async stopSending(e){if(this.assertSendDirection(),b.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let i=await this._pc.createOffer();b.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let n={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),b.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();b.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),b.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();b.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?b.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):b.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),b.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();b.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),b.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();b.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};b.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Si.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=Y.parse(n.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),b.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;b.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:m}=Ur.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??m??d.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);let n=await this._pc.createAnswer(),a=Y.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=r.get(c),l=a.media.find(u=>String(u.mid)===d);pt.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l})}n={type:"answer",sdp:Y.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),b.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,p=r.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(d)this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){b.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){b.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){b.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};b.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(r,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),m=Y.parse(u.sdp),g=m.media.find(h=>h.type==="application");g.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),u={type:"answer",sdp:Y.write(m)},b.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=Y.parse(this._pc.localDescription.sdp));let r=pt.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new ko.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};Vt.Chrome74=Vr});var ki=C(Wt=>{"use strict";Object.defineProperty(Wt,"__esModule",{value:!0});Wt.Firefox120=void 0;var he=ue(),Lo=W(),Io=q(),Ri=J(),lt=ie(),Mo=Te(),Oo=We(),Ht=Ge(),Ti=Ke(),No=Qe(),T=new Io.Logger("Firefox120"),Ei="Firefox120",xi={OS:16,MIS:2048},Hr=class s extends Lo.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 s(e),getNativeRtpCapabilities:async({direction:e})=>{T.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"}),r=document.createElement("canvas");r.getContext("2d");let n=r.captureStream().getVideoTracks()[0];try{t.addTransceiver("audio",{direction:e}),t.addTransceiver(n,{direction:e,sendEncodings:[{rid:"r0",maxBitrate:1e5},{rid:"r1",maxBitrate:5e5}]});let a=await t.createOffer();try{r.remove()}catch{}try{n.stop()}catch{}try{t.close()}catch{}t=void 0;let o=he.parse(a.sdp);return s.getLocalRtpCapabilities(o)}catch(a){try{r.remove()}catch{}try{n.stop()}catch{}try{t?.close()}catch{}throw t=void 0,a}},getNativeSctpCapabilities:async()=>(T.debug("getNativeSctpCapabilities()"),{numStreams:xi})}}static getLocalRtpCapabilities(e){let t=Ht.extractRtpCapabilities({sdpObject:e});return lt.validateAndNormalizeRtpCapabilities(t),t}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),T.debug("constructor()"),this._direction=e,this._remoteSdp=new Oo.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=p,this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(T.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Ei}close(){if(T.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){throw this.assertNotClosed(),new Ri.UnsupportedError("not supported")}async restartIce(e){if(this.assertNotClosed(),T.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});T.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();T.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,codec:n,onRtpSender:a}){this.assertNotClosed(),this.assertSendDirection(),T.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((E,k)=>{E.rid=`r${k}`});let o=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});a&&a(o.sender);let c=await this._pc.createOffer(),p=he.parse(c.sdp);p.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let d=s.getLocalRtpCapabilities(p),l=this._getSendExtendedRtpCapabilities(d),u=lt.getSendingRtpParameters(e.kind,l);u.codecs=lt.reduceCodecs(u.codecs,n);let m=lt.getSendingRemoteRtpParameters(e.kind,l);m.codecs=lt.reduceCodecs(m.codecs,n),this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:p});let g=(0,Mo.parse)((r??[{}])[0].scalabilityMode);T.debug("send() | calling pc.setLocalDescription() [offer:%o]",c),await this._pc.setLocalDescription(c);let h=o.mid;u.mid=h,p=he.parse(this._pc.localDescription.sdp);let f=p.media[p.media.length-1];if(u.rtcp.cname=Ht.getCname({offerMediaObject:f}),u.msid=`${t??this._sendStream.id} ${e.id}`,!r)u.encodings=Ti.getRtpEncodings({offerMediaObject:f,codecs:u.codecs});else if(r.length===1){let E=Ti.getRtpEncodings({offerMediaObject:f,codecs:u.codecs});Object.assign(E[0],r[0]),u.encodings=E}else u.encodings=r;if(u.encodings.length>1&&(u.codecs[0].mimeType.toLowerCase()==="video/vp8"||u.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let E of u.encodings)E.scalabilityMode?E.scalabilityMode=`L1T${g.temporalLayers}`:E.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:f,offerRtpParameters:u,answerRtpParameters:m,codecOptions:i});let v={type:"answer",sdp:this._remoteSdp.getSdp()};return T.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(),T.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated transceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.disableMediaSection(t.mid);let r=await this._pc.createOffer();T.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),T.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();T.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),T.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let r=await this._pc.createOffer();T.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?T.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):T.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),T.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated transceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();T.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),T.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();T.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};T.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%xi.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=he.parse(n.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:a}),T.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;T.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:m}=No.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??m??d.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(let o of e){let{trackId:c,onRtpReceiver:p}=o;if(p){let d=r.get(c),l=this._pc.getTransceivers().find(u=>u.mid===d);if(!l)throw new Error("transceiver not found");p(l.receiver)}}let n=await this._pc.createAnswer(),a=he.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=r.get(c),l=a.media.find(u=>String(u.mid)===d);Ht.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l}),n={type:"answer",sdp:he.write(a)}}this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:a}),T.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,p=r.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(!d)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){T.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();T.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){T.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();T.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){T.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();T.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};T.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(r,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),m=he.parse(u.sdp),g=m.media.find(h=>h.type==="application");g.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:m}),u={type:"answer",sdp:he.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=he.parse(this._pc.localDescription.sdp));let r=Ht.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Ri.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')}};Wt.Firefox120=Hr});var Ii=C(Gt=>{"use strict";Object.defineProperty(Gt,"__esModule",{value:!0});Gt.Safari12=void 0;var X=ue(),jo=W(),Ao=q(),ut=ie(),Fo=J(),$o=Te(),zo=We(),ht=Ge(),Pi=Ke(),Wr=Qe(),S=new Ao.Logger("Safari12"),Di="Safari12",Li={OS:65535,MIS:65535},Gr=class s extends jo.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 s(e),getNativeRtpCapabilities:async({direction:e})=>{S.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let i=X.parse(r.sdp);return s.getLocalRtpCapabilities(i)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(S.debug("getNativeSctpCapabilities()"),{numStreams:Li})}}static getLocalRtpCapabilities(e,t=[]){let r=ht.extractRtpCapabilities({sdpObject:e});ut.validateAndNormalizeRtpCapabilities(r),Wr.addNackSupportForOpus(r);for(let i of t)Wr.addHeaderExtensionSupport(r,i);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),S.debug("constructor()"),this._direction=e,this._remoteSdp=new zo.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=p,i.role&&i.role!=="auto"&&(this._forcedLocalDtlsRole=i.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)}),this._pc.addEventListener("icecandidateerror",d=>{this.emit("@icecandidateerror",d)}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(S.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Di}close(){if(S.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),S.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),S.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});S.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();S.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:n,codec:a,onRtpSender:o}){this.assertNotClosed(),this.assertSendDirection(),S.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t);let c=this._remoteSdp.getNextMediaSectionIdx(),p=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream]});o&&o(p.sender);let d=await this._pc.createOffer(),l=X.parse(d.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let u=[];u.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let m=s.getLocalRtpCapabilities(l,u),g=this._getSendExtendedRtpCapabilities(m),h=ut.getSendingRtpParameters(e.kind,g);h.codecs=ut.reduceCodecs(h.codecs,a);let f=ut.getSendingRemoteRtpParameters(e.kind,g);f.codecs=ut.reduceCodecs(f.codecs,a);let v;this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l});let E=(0,$o.parse)((r??[{}])[0].scalabilityMode);r&&r.length>1&&(S.debug("send() | enabling legacy simulcast"),l=X.parse(d.sdp),v=l.media[c.idx],Pi.addLegacySimulcast({offerMediaObject:v,numStreams:r.length}),d={type:"offer",sdp:X.write(l)}),n?.absCaptureTime&&(v=l.media[c.idx],ht.addHeaderExtension({offerMediaObject:v,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:f.headerExtensions.find(x=>x.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:X.write(l)}),S.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let k=p.mid;if(h.mid=k,l=X.parse(this._pc.localDescription.sdp),v=l.media[c.idx],h.rtcp.cname=ht.getCname({offerMediaObject:v}),h.msid=`${t??this._sendStream.id} ${e.id}`,h.encodings=Pi.getRtpEncodings({offerMediaObject:v,codecs:h.codecs}),r)for(let x=0;x<h.encodings.length;++x)r[x]&&Object.assign(h.encodings[x],r[x]);if(h.encodings.length>1&&(h.codecs[0].mimeType.toLowerCase()==="video/vp8"||h.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let x of h.encodings)x.scalabilityMode?x.scalabilityMode=`L1T${E.temporalLayers}`:x.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:v,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:f,codecOptions:i});let P={type:"answer",sdp:this._remoteSdp.getSdp()};return S.debug("send() | calling pc.setRemoteDescription() [answer:%o]",P),await this._pc.setRemoteDescription(P),this._mapMidTransceiver.set(k,p),{localId:k,rtpParameters:h,rtpSender:p.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;S.debug("stopSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let i=await this._pc.createOffer();S.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let n={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),S.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();S.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),S.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let r=await this._pc.createOffer();S.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?S.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):S.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),S.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();S.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),S.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();S.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};S.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Li.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=X.parse(n.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),S.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;S.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:m}=Wr.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??m??d.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(let o of e){let{trackId:c,onRtpReceiver:p}=o;if(p){let d=r.get(c),l=this._pc.getTransceivers().find(u=>u.mid===d);if(!l)throw new Error("transceiver not found");p(l.receiver)}}let n=await this._pc.createAnswer(),a=X.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=r.get(c),l=a.media.find(u=>String(u.mid)===d);ht.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l})}n={type:"answer",sdp:X.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),S.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,p=r.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(!d)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){S.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();S.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){S.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();S.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){S.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();S.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};S.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(r,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),m=X.parse(u.sdp),g=m.media.find(h=>h.type==="application");g.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),u={type:"answer",sdp:X.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=X.parse(this._pc.localDescription.sdp));let r=ht.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Fo.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};Gt.Safari12=Gr});var Ni=C(Kt=>{"use strict";Object.defineProperty(Kt,"__esModule",{value:!0});Kt.ReactNative106=void 0;var Z=ue(),qo=W(),Bo=q(),mt=ie(),Uo=J(),Vo=Te(),Ho=We(),ft=Ge(),Kr=Ke(),Qr=Qe(),y=new Bo.Logger("ReactNative106"),Mi="ReactNative106",Oi={OS:65535,MIS:65535},Jr=class s extends qo.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Mi,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{y.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let i=Z.parse(r.sdp);return s.getLocalRtpCapabilities(i)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(y.debug("getNativeSctpCapabilities()"),{numStreams:Oi})}}static getLocalRtpCapabilities(e,t=[]){let r=ft.extractRtpCapabilities({sdpObject:e});mt.validateAndNormalizeRtpCapabilities(r),Qr.addNackSupportForOpus(r);for(let i of t)Qr.addHeaderExtensionSupport(r,i);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),y.debug("constructor()"),this._direction=e,this._remoteSdp=new Ho.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=p,i.role&&i.role!=="auto"&&(this._forcedLocalDtlsRole=i.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(y.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return 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 r={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();y.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:n,codec:a,onRtpSender:o}){this.assertNotClosed(),this.assertSendDirection(),y.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((I,ke)=>{I.rid=`r${ke}`});let c=this._remoteSdp.getNextMediaSectionIdx(),p=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});o&&o(p.sender);let d=await this._pc.createOffer(),l=Z.parse(d.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let u=[];u.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let m=s.getLocalRtpCapabilities(l,u),g=this._getSendExtendedRtpCapabilities(m),h=mt.getSendingRtpParameters(e.kind,g);h.codecs=mt.reduceCodecs(h.codecs,a);let f=mt.getSendingRemoteRtpParameters(e.kind,g);f.codecs=mt.reduceCodecs(f.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l});let v=!1,E=(0,Vo.parse)((r??[{}])[0].scalabilityMode),k;r?.length===1&&E.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),k=l.media[c.idx],Kr.addLegacySimulcast({offerMediaObject:k,numStreams:E.spatialLayers}),d={type:"offer",sdp:Z.write(l)}),n?.absCaptureTime&&(k=l.media[c.idx],ft.addHeaderExtension({offerMediaObject:k,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:f.headerExtensions.find(I=>I.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 P=p.mid??void 0;if(P||y.warn("send() | missing transceiver.mid (bug in react-native-webrtc, using a workaround"),h.mid=P,l=Z.parse(this._pc.localDescription.sdp),k=l.media[c.idx],h.rtcp.cname=ft.getCname({offerMediaObject:k}),h.msid=`${t??this._sendStream.id} ${e.id}`,!r)h.encodings=Kr.getRtpEncodings({offerMediaObject:k,codecs:h.codecs});else if(r.length===1){let I=Kr.getRtpEncodings({offerMediaObject:k,codecs:h.codecs});Object.assign(I[0],r[0]),v&&(I=[I[0]]),h.encodings=I}else h.encodings=r;if(h.encodings.length>1&&(h.codecs[0].mimeType.toLowerCase()==="video/vp8"||h.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let I of h.encodings)I.scalabilityMode?I.scalabilityMode=`L1T${E.temporalLayers}`:I.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:k,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:f,codecOptions:i});let x={type:"answer",sdp:this._remoteSdp.getSdp()};return y.debug("send() | calling pc.setRemoteDescription() [answer:%o]",x),await this._pc.setRemoteDescription(x),P||(P=p.mid,h.mid=P),this._mapMidTransceiver.set(P,p),{localId:P,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 i=await this._pc.createOffer();y.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let n={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),y.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();y.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),y.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();y.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?y.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):y.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),y.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();y.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),y.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();y.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};y.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Oi.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=Z.parse(n.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),y.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;y.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:m}=Qr.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??m??d.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(let o of e){let{trackId:c,onRtpReceiver:p}=o;if(p){let d=r.get(c),l=this._pc.getTransceivers().find(u=>u.mid===d);if(!l)throw new Error("transceiver not found");p(l.receiver)}}let n=await this._pc.createAnswer(),a=Z.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=r.get(c),l=a.media.find(u=>String(u.mid)===d);ft.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l})}n={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]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,p=r.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(d)this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){y.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();y.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){y.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();y.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){y.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();y.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};y.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(r,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),m=Z.parse(u.sdp),g=m.media.find(h=>h.type==="application");g.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 r=ft.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Uo.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};Kt.ReactNative106=Jr});var $i=C(Je=>{"use strict";Object.defineProperty(Je,"__esModule",{value:!0});Je.Device=void 0;Je.detectDevice=ji;Je.detectDeviceAsync=Ai;var Wo=q(),Go=W(),ve=J(),Qt=be(),G=ie(),Ko=ni(),Qo=yi(),Jo=Ci(),Yo=ki(),Xo=Ii(),Zo=Ni(),w=new Wo.Logger("Device");function ji(s,e){return w.debug("detectDevice()"),!s&&typeof navigator=="object"&&(s=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),Fi(s,e)}async function Ai(s,e){return w.debug("detectDeviceAsync()"),!s&&typeof navigator=="object"&&(s=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),Fi(s,e)}var Yr=class s{_handlerFactory;_handlerName;_loaded=!1;_getSendExtendedRtpCapabilities;_recvRtpCapabilities;_sendRtpCapabilities;_canProduceByKind={audio:!1,video:!1};_sctpCapabilities;_observer=new Go.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 Ai(),!e))throw new ve.UnsupportedError("device not supported");return new s({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 ve.UnsupportedError("device not supported");switch(e){case"Chrome111":{this._handlerFactory=Qo.Chrome111.createFactory();break}case"Chrome74":{this._handlerFactory=Jo.Chrome74.createFactory();break}case"Firefox120":{this._handlerFactory=Yo.Firefox120.createFactory();break}case"Safari12":{this._handlerFactory=Xo.Safari12.createFactory();break}case"ReactNative106":{this._handlerFactory=Zo.ReactNative106.createFactory();break}default:throw new TypeError(`unknown handlerName "${e}"`)}}this._handlerName=this._handlerFactory.name}get handlerName(){return this._handlerName}get loaded(){return this._loaded}get rtpCapabilities(){return this.recvRtpCapabilities}get recvRtpCapabilities(){if(!this._loaded)throw new ve.InvalidStateError("not loaded");return this._recvRtpCapabilities}get sendRtpCapabilities(){if(!this._loaded)throw new ve.InvalidStateError("not loaded");return this._sendRtpCapabilities}get sctpCapabilities(){if(!this._loaded)throw new ve.InvalidStateError("not loaded");return this._sctpCapabilities}get observer(){return this._observer}async load({routerRtpCapabilities:e,preferLocalCodecsOrder:t=!1}){if(w.debug("load() [routerRtpCapabilities:%o]",e),this._loaded)throw new ve.InvalidStateError("already loaded");let r=Qt.clone(e);G.validateAndNormalizeRtpCapabilities(r);let{getNativeRtpCapabilities:i,getNativeSctpCapabilities:n}=this._handlerFactory,a=Qt.clone(await i({direction:"recvonly"}));w.debug("load() | got native receiving RTP capabilities:%o",a),G.validateAndNormalizeRtpCapabilities(a);let o=Qt.clone(await i({direction:"sendonly"}));w.debug("load() | got native sending RTP capabilities:%o",o),G.validateAndNormalizeRtpCapabilities(o),this._getSendExtendedRtpCapabilities=d=>Qt.clone(G.getExtendedRtpCapabilities(d,r,t));let c=G.getExtendedRtpCapabilities(a,r,!1);this._recvRtpCapabilities=G.getRecvRtpCapabilities(c),w.debug("load() | got receiving RTP capabilities:%o",this._recvRtpCapabilities),G.validateAndNormalizeRtpCapabilities(this._recvRtpCapabilities);let p=G.getExtendedRtpCapabilities(o,r,t);this._sendRtpCapabilities=G.getSendRtpCapabilities(p),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 n(),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 ve.InvalidStateError("not loaded");return this._canProduceByKind[e]}createSendTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:p}){return w.debug("createSendTransport()"),this.createTransport({direction:"send",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:p})}createRecvTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:p}){return w.debug("createRecvTransport()"),this.createTransport({direction:"recv",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:p})}createTransport({direction:e,id:t,iceParameters:r,iceCandidates:i,dtlsParameters:n,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:p,appData:d}){if(this._loaded){if(typeof t!="string")throw new TypeError("missing id");if(typeof r!="object")throw new TypeError("missing iceParameters");if(Array.isArray(i)){if(typeof n!="object")throw new TypeError("missing dtlsParameters");if(a&&typeof a!="object")throw new TypeError("wrong sctpParameters");if(d&&typeof d!="object")throw new TypeError("if given, appData must be an object")}else throw new TypeError("missing iceCandidates")}else throw new ve.InvalidStateError("not loaded");let l=new Ko.Transport({direction:e,id:t,iceParameters:r,iceCandidates:i,dtlsParameters:n,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:p,appData:d,handlerFactory:this._handlerFactory,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities,recvRtpCapabilities:this._recvRtpCapabilities,canProduceByKind:this._canProduceByKind});return this._observer.safeEmit("newtransport",l),l}};Je.Device=Yr;function Fi(s,e){w.debug('detectDeviceImpl() [userAgent:"%s", userAgentData:%o]',s,e);let t=ec(s,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 r=tc(s);if(r){if(r>=120)return w.debug("detectDeviceImpl() | using Firefox120 handler"),"Firefox120";w.warn("detectDeviceImpl() | unsupported Firefox browser/version");return}let i=rc(s);if(i){if(i>=605)return w.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";w.warn("detectDeviceImpl() | unsupported desktop Safari browser/version");return}let n=sc(s);if(n){if(n>=605)return w.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";w.warn("detectDeviceImpl() | unsupported iOS Safari based browser/version");return}if(gt()){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]',s,e)}function ec(s,e){if(w.debug("getChromiumMajorVersion()"),Jt(s,e)){w.debug("getChromiumMajorVersion() | this is iOS => undefined");return}if(gt()){w.debug("getChromiumMajorVersion() | this is React-Native => undefined");return}if(e){let i=(Array.isArray(e.brands)?e.brands:[]).find(n=>n.brand==="Chromium");if(i){let n=Number(i.version);return w.debug(`getChromiumMajorVersion() | Chromium major version based on NavigatorUAData => ${n}`),n}}let t=s?.match(/\b(?:Chrome|Chromium)\/(\w+)/i);if(t?.[1]){let r=Number(t[1]);return w.debug(`getChromiumMajorVersion() | Chromium major version based on User-Agent => ${r}`),r}w.debug("getChromiumMajorVersion() | this is not Chromium => undefined")}function tc(s){if(w.debug("getFirefoxMajorVersion()"),Jt(s)){w.debug("getFirefoxMajorVersion() | this is iOS => undefined");return}if(gt()){w.debug("getFirefoxMajorVersion() | this is React-Native => undefined");return}let e=s?.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 rc(s){if(w.debug("getMacOSWebKitMajorVersion()"),Jt(s)){w.debug("getMacOSWebKitMajorVersion() | this is iOS => undefined");return}if(gt()){w.debug("getMacOSWebKitMajorVersion() | this is React-Native => undefined");return}if(!(s&&/\bSafari\b/i.test(s)&&!/\bChrome\b/i.test(s)&&!/\bChromium\b/i.test(s)&&!/\bFirefox\b/i.test(s))){w.debug("getMacOSWebKitMajorVersion() | this is not Safari => undefined");return}let t=s.match(/AppleWebKit\/(\w+)/i);if(t?.[1]){let r=Number(t[1]);return w.debug(`getMacOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${r}`),r}w.debug("getMacOSWebKitMajorVersion() | this is not WebKit => undefined")}function sc(s){if(w.debug("getIOSWebKitMajorVersion()"),!Jt(s)){w.debug("getIOSWebKitMajorVersion() | this is not iOS => undefined");return}if(gt()){w.debug("getIOSWebKitMajorVersion() | this is React-Native => undefined");return}let e=s?.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 Jt(s,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):s&&/iPad|iPhone|iPod/.test(s)?(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 gt(){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 qi=C(zi=>{"use strict";var xe=256,Xt=[],Yt;for(;xe--;)Xt[xe]=(xe+256).toString(16).substring(1);function ic(){var s=0,e,t="";if(!Yt||xe+16>256){for(Yt=Array(s=256);s--;)Yt[s]=256*Math.random()|0;s=xe=0}for(;s<16;s++)e=Yt[xe+s],s==6?t+=Xt[e&15|64]:s==8?t+=Xt[e&63|128]:t+=Xt[e],s&1&&s>1&&s<11&&(t+="-");return xe++,t}zi.v4=ic});var Bi=C(Zt=>{"use strict";Object.defineProperty(Zt,"__esModule",{value:!0});Zt.FakeEventTarget=void 0;var Xr=class{listeners={};addEventListener(e,t,r){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof r=="object"&&r.once===!0}))}removeEventListener(e,t,r){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(i=>i.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new Error("invalid event object");let t=this.listeners[e.type];if(!t)return!0;for(let r of[...t]){try{r.callback.call(this,e)}catch(i){setTimeout(()=>{throw i},0)}r.once&&this.removeEventListener(e.type,r.callback)}return!e.defaultPrevented}};Zt.FakeEventTarget=Xr});var Ui=C(er=>{"use strict";Object.defineProperty(er,"__esModule",{value:!0});er.FakeEvent=void 0;var Zr=class{NONE=0;CAPTURING_PHASE=1;AT_TARGET=2;BUBBLING_PHASE=3;type;bubbles;cancelable;defaultPrevented=!1;composed=!1;currentTarget=null;eventPhase=this.NONE;isTrusted=!0;target=null;timeStamp=0;cancelBubble=!1;returnValue=!0;srcElement=null;constructor(e,t={}){this.type=e,this.bubbles=t.bubbles??!1,this.cancelable=t.cancelable??!1}preventDefault(){this.cancelable&&(this.defaultPrevented=!0)}stopPropagation(){}stopImmediatePropagation(){}composedPath(){return[]}initEvent(e,t,r){}};er.FakeEvent=Zr});var Vi=C(es=>{"use strict";Object.defineProperty(es,"__esModule",{value:!0});es.clone=nc;function nc(s){if(s!==void 0)return Number.isNaN(s)?NaN:typeof structuredClone=="function"?structuredClone(s):JSON.parse(JSON.stringify(s))}});var Wi=C(rr=>{"use strict";Object.defineProperty(rr,"__esModule",{value:!0});rr.FakeMediaStreamTrack=void 0;var Hi=qi(),ac=Bi(),Ye=Ui(),tr=Vi(),ts=class s extends ac.FakeEventTarget{#f;#l;#u;#e;#r;#t;#s;#h;#i;#m;#n;#a=null;#o=null;#c=null;#d=null;#p=null;constructor({kind:e,id:t,label:r,contentHint:i,enabled:n,muted:a,readyState:o,capabilities:c,constraints:p,settings:d,data:l}){super(),this.#f=t??(0,Hi.v4)(),this.#l=e,this.#u=r??"",this.#s=i??"",this.#r=n??!0,this.#t=a??!1,this.#e=o??"live",this.#h=c??{},this.#i=p??{},this.#m=d??{},this.#n=l??{}}get id(){return this.#f}get kind(){return this.#l}get label(){return this.#u}get contentHint(){return this.#s}set contentHint(e){this.#s=e}get enabled(){return this.#r}set enabled(e){let t=this.#r!==e;this.#r=e,t&&this.dispatchEvent(new Ye.FakeEvent("enabledchange"))}get muted(){return this.#t}get readyState(){return this.#e}get data(){return this.#n}set data(e){this.#n=e}get onmute(){return this.#a}set onmute(e){this.#a&&this.removeEventListener("mute",this.#a),this.#a=e,e&&this.addEventListener("mute",e)}get onunmute(){return this.#o}set onunmute(e){this.#o&&this.removeEventListener("unmute",this.#o),this.#o=e,e&&this.addEventListener("unmute",e)}get onended(){return this.#c}set onended(e){this.#c&&this.removeEventListener("ended",this.#c),this.#c=e,e&&this.addEventListener("ended",e)}get onenabledchange(){return this.#d}set onenabledchange(e){this.#d&&this.removeEventListener("enabledchange",this.#d),this.#d=e,e&&this.addEventListener("enabledchange",e)}get onstopped(){return this.#p}set onstopped(e){this.#p&&this.removeEventListener("stopped",this.#p),this.#p=e,e&&this.addEventListener("stopped",e)}addEventListener(e,t,r){super.addEventListener(e,t,r)}removeEventListener(e,t,r){super.removeEventListener(e,t,r)}stop(){this.#e!=="ended"&&(this.#e="ended",this.dispatchEvent(new Ye.FakeEvent("stopped")))}clone({id:e,data:t}={}){return new s({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,tr.clone)(this.#h),constraints:(0,tr.clone)(this.#i),settings:(0,tr.clone)(this.#m),data:t??(0,tr.clone)(this.#n)})}getCapabilities(){return this.#h}getConstraints(){return this.#i}async applyConstraints(e={}){return this.#i=e,Promise.resolve()}getSettings(){return this.#m}remoteStop(){this.#e!=="ended"&&(this.#e="ended",this.dispatchEvent(new Ye.FakeEvent("stopped")),this.dispatchEvent(new Ye.FakeEvent("ended")))}remoteMute(){this.#t||(this.#t=!0,this.dispatchEvent(new Ye.FakeEvent("mute")))}remoteUnmute(){this.#t&&(this.#t=!1,this.dispatchEvent(new Ye.FakeEvent("unmute")))}};rr.FakeMediaStreamTrack=ts});var Gi=C(sr=>{"use strict";Object.defineProperty(sr,"__esModule",{value:!0});sr.FakeEventTarget=void 0;var rs=class{listeners={};addEventListener(e,t,r){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof r=="object"&&r.once===!0}))}removeEventListener(e,t,r){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(i=>i.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new Error("invalid event object");let t=this.listeners[e.type];if(!t)return!0;for(let r of[...t]){try{r.callback.call(this,e)}catch(i){setTimeout(()=>{throw i},0)}r.once&&this.removeEventListener(e.type,r.callback)}return!e.defaultPrevented}};sr.FakeEventTarget=rs});var Ji=C(nr=>{"use strict";Object.defineProperty(nr,"__esModule",{value:!0});nr.FakeHandler=void 0;var oc=Wi(),cc=W(),dc=q(),Xe=be(),ss=ie(),Qi=J(),pc=Gi(),$=new dc.Logger("FakeHandler"),Ki="FakeHandler",is=class s extends cc.EnhancedEventEmitter{_closed=!1;_fakeParameters;_getSendExtendedRtpCapabilities;_cname=`CNAME-${Xe.generateRandomNumber()}`;_defaultSendStreamId=`${Xe.generateRandomNumber()}`;_transportReady=!1;_nextLocalId=1;_tracks=new Map;_nextSctpStreamId=0;static createFactory(e){return{name:Ki,factory:t=>new s(t,e),getNativeRtpCapabilities:async({direction:t})=>($.debug("getNativeRtpCapabilities() [direction:%o]",t),s.getLocalRtpCapabilities(e)),getNativeSctpCapabilities:async()=>($.debug("getNativeSctpCapabilities()"),e.generateNativeSctpCapabilities())}}static getLocalRtpCapabilities(e){let t=e.generateNativeRtpCapabilities();return ss.validateAndNormalizeRtpCapabilities(t),t}constructor({getSendExtendedRtpCapabilities:e},t){super(),$.debug("constructor()"),this._getSendExtendedRtpCapabilities=e,this._fakeParameters=t}get name(){return Ki}close(){$.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(),$.debug("updateIceServers()")}async restartIce(e){this.assertNotClosed(),$.debug("restartIce()")}async getTransportStats(){return this.assertNotClosed(),new Map}async send({track:e,streamId:t,encodings:r,codecOptions:i,codec:n}){this.assertNotClosed(),$.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),this._transportReady||await this.setupTransport({localDtlsRole:"server"});let a=s.getLocalRtpCapabilities(this._fakeParameters),o=this._getSendExtendedRtpCapabilities(a),c=ss.getSendingRtpParameters(e.kind,o);c.codecs=ss.reduceCodecs(c.codecs,n);let p=c.codecs.some(l=>/.+\/rtx$/i.test(l.mimeType));c.mid=`mid-${Xe.generateRandomNumber()}`,c.msid=`${t??"-"} ${e.id}`,r||(r=[{}]);for(let l of r)l.ssrc=Xe.generateRandomNumber(),p&&(l.rtx={ssrc:Xe.generateRandomNumber()});c.encodings=r,c.rtcp={cname:this._cname,reducedSize:!0,mux:!0},c.msid=`${t??this._defaultSendStreamId} ${e.id}`;let d=this._nextLocalId++;return this._tracks.set(d,e),{localId:String(d),rtpParameters:c}}async stopSending(e){if($.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?$.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):$.debug("replaceTrack() [localId:%s, no track]",e),this._tracks.delete(Number(e)),this._tracks.set(Number(e),t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),$.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),$.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"}),$.debug("sendDataChannel()");let t=new ir({id:this._nextSctpStreamId++,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:e.label,protocol:e.protocol}),r={streamId:this._nextSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits};return{dataChannel:t,sctpStreamParameters:r}}async receive(e){this.assertNotClosed();let t=[];for(let r of e){let{trackId:i,kind:n}=r;this._transportReady||await this.setupTransport({localDtlsRole:"client"}),$.debug("receive() [trackId:%s, kind:%s]",i,n);let a=this._nextLocalId++,o=new oc.FakeMediaStreamTrack({kind:n});this._tracks.set(a,o),t.push({localId:String(a),track:o})}return t}async stopReceiving(e){if(!this._closed)for(let t of e)$.debug("stopReceiving() [localId:%s]",t),this._tracks.delete(Number(t))}async pauseReceiving(e){this.assertNotClosed()}async resumeReceiving(e){this.assertNotClosed()}async getReceiverStats(e){return this.assertNotClosed(),new Map}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){return this.assertNotClosed(),this._transportReady||await this.setupTransport({localDtlsRole:"client"}),$.debug("receiveDataChannel()"),{dataChannel:new ir({id:e.streamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:t,protocol:r})}}getDataChannelMaxMessageSize(){return 5e5}async setupTransport({localDtlsRole:e,localSdpObject:t}){let r=Xe.clone(this._fakeParameters.generateLocalDtlsParameters());e&&(r.role=e),this.emit("@connectionstatechange","connecting"),await new Promise((i,n)=>this.emit("@connect",{dtlsParameters:r},i,n)),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new Qi.InvalidStateError("method called in a closed handler")}};nr.FakeHandler=is;var ir=class extends pc.FakeEventTarget{_id;_negotiated=!0;_ordered;_maxPacketLifeTime;_maxRetransmits;_label;_protocol;_readyState="connecting";_bufferedAmount=0;_bufferedAmountLowThreshold=0;_binaryType="arraybuffer";_onopen=null;_onclosing=null;_onclose=null;_onmessage=null;_onbufferedamountlow=null;_onerror=null;constructor({id:e,ordered:t=!0,maxPacketLifeTime:r=null,maxRetransmits:i=null,label:n="",protocol:a=""}){super(),$.debug(`constructor() [id:${e}, ordered:${t}, maxPacketLifeTime:${r}, maxRetransmits:${i}, label:${n}, protocol:${a}`),this._id=e,this._ordered=t,this._maxPacketLifeTime=r,this._maxRetransmits=i,this._label=n,this._protocol=a}get id(){return this._id}get negotiated(){return this._negotiated}get ordered(){return this._ordered}get maxPacketLifeTime(){return this._maxPacketLifeTime}get maxRetransmits(){return this._maxRetransmits}get label(){return this._label}get protocol(){return this._protocol}get readyState(){return this._readyState}get bufferedAmount(){return this._bufferedAmount}get bufferedAmountLowThreshold(){return this._bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._bufferedAmountLowThreshold=e}get binaryType(){return this._binaryType}set binaryType(e){this._binaryType=e}get onopen(){return this._onopen}set onopen(e){this._onopen&&this.removeEventListener("open",this._onopen),this._onopen=e,e&&this.addEventListener("open",e)}get onclosing(){return this._onclosing}set onclosing(e){this._onclosing&&this.removeEventListener("closing",this._onclosing),this._onclosing=e,e&&this.addEventListener("closing",e)}get onclose(){return this._onclose}set onclose(e){this._onclose&&this.removeEventListener("close",this._onclose),this._onclose=e,e&&this.addEventListener("close",e)}get onmessage(){return this._onmessage}set onmessage(e){this._onmessage&&this.removeEventListener("message",this._onmessage),this._onmessage=e,e&&this.addEventListener("message",e)}get onbufferedamountlow(){return this._onbufferedamountlow}set onbufferedamountlow(e){this._onbufferedamountlow&&this.removeEventListener("bufferedamountlow",this._onbufferedamountlow),this._onbufferedamountlow=e,e&&this.addEventListener("bufferedamountlow",e)}get onerror(){return this._onerror}set onerror(e){this._onerror&&this.removeEventListener("error",this._onerror),this._onerror=e,e&&this.addEventListener("error",e)}addEventListener(e,t,r){super.addEventListener(e,t,r)}removeEventListener(e,t,r){super.removeEventListener(e,t,r)}close(){["closing","closed"].includes(this._readyState)||(this._readyState="closed")}send(e){if(this._readyState!=="open")throw new Qi.InvalidStateError("not open")}}});var Yi=C(se=>{"use strict";Object.defineProperty(se,"__esModule",{value:!0});se.generateRouterRtpCapabilities=lc;se.generateNativeRtpCapabilities=uc;se.generateNativeSctpCapabilities=hc;se.generateLocalDtlsParameters=mc;se.generateTransportRemoteParameters=fc;se.generateProducerRemoteParameters=gc;se.generateConsumerRemoteParameters=_c;se.generateDataProducerRemoteParameters=vc;se.generateDataConsumerRemoteParameters=wc;var U=be();function K(){return String(U.generateRandomNumber())}function lc(){return U.deepFreeze({codecs:[{mimeType:"audio/opus",kind:"audio",preferredPayloadType:100,clockRate:48e3,channels:2,rtcpFeedback:[{type:"transport-cc"}],parameters:{useinbandfec:1,foo:"bar"}},{mimeType:"video/VP8",kind:"video",preferredPayloadType:101,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"x-google-start-bitrate":1500}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:102,clockRate:9e4,rtcpFeedback:[],parameters:{apt:101}},{mimeType:"video/H264",kind:"video",preferredPayloadType:103,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"level-asymmetry-allowed":1,"packetization-mode":1,"profile-level-id":"42e01f"}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:104,clockRate:9e4,rtcpFeedback:[],parameters:{apt:103}},{mimeType:"video/VP9",kind:"video",preferredPayloadType:105,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"profile-id":0,"x-google-start-bitrate":1500}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:106,clockRate:9e4,rtcpFeedback:[],parameters:{apt:105}}],headerExtensions:[{kind:"audio",uri:"urn:ietf:params:rtp-hdrext:sdes:mid",preferredId:1,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:mid",preferredId:1,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id",preferredId:2,preferredEncrypt:!1,direction:"recvonly"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id",preferredId:3,preferredEncrypt:!1,direction:"recvonly"},{kind:"audio",uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",preferredId:4,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",preferredId:4,preferredEncrypt:!1,direction:"sendrecv"},{kind:"audio",uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",preferredId:5,preferredEncrypt:!1,direction:"recvonly"},{kind:"video",uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",preferredId:5,preferredEncrypt:!1,direction:"sendrecv"},{kind:"audio",uri:"urn:ietf:params:rtp-hdrext:ssrc-audio-level",preferredId:10,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:3gpp:video-orientation",preferredId:11,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:toffset",preferredId:12,preferredEncrypt:!1,direction:"sendrecv"}]})}function uc(){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 hc(){return U.deepFreeze({numStreams:{OS:2048,MIS:2048}})}function mc(){return U.deepFreeze({fingerprints:[{algorithm:"sha-256",value:"82:5A:68:3D:36:C3:0A:DE:AF:E7:32:43:D2:88:83:57:AC:2D:65:E5:80:C4:B6:FB:AF:1A:A0:21:9F:6D:0C:AD"}],role:"auto"})}function fc(){return{id:K(),iceParameters:U.deepFreeze({iceLite:!0,password:"yku5ej8nvfaor28lvtrabcx0wkrpkztz",usernameFragment:"h3hk1iz6qqlnqlne"}),iceCandidates:U.deepFreeze([{foundation:"udpcandidate",address:"9.9.9.9",ip:"9.9.9.9",port:40533,priority:1078862079,protocol:"udp",type:"host",tcpType:"passive"},{foundation:"udpcandidate",address:"9.9.9.9",ip:"9:9:9:9:9:9",port:41333,priority:1078862089,protocol:"udp",type:"host",tcpType:"passive"}]),dtlsParameters:U.deepFreeze({fingerprints:[{algorithm:"sha-256",value:"A9:F4:E0:D2:74:D3:0F:D9:CA:A5:2F:9F:7F:47:FA:F0:C4:72:DD:73:49:D0:3B:14:90:20:51:30:1B:90:8E:71"},{algorithm:"sha-384",value:"03:D9:0B:87:13:98:F6:6D:BC:FC:92:2E:39:D4:E1:97:32:61:30:56:84:70:81:6E:D1:82:97:EA:D9:C1:21:0F:6B:C5:E7:7F:E1:97:0C:17:97:6E:CF:B3:EF:2E:74:B0"},{algorithm:"sha-512",value:"84:27:A4:28:A4:73:AF:43:02:2A:44:68:FF:2F:29:5C:3B:11:9A:60:F4:A8:F0:F5:AC:A0:E3:49:3E:B1:34:53:A9:85:CE:51:9B:ED:87:5E:B8:F4:8E:3D:FA:20:51:B8:96:EE:DA:56:DC:2F:5C:62:79:15:23:E0:21:82:2B:2C"}],role:"auto"}),sctpParameters:U.deepFreeze({port:5e3,OS:2048,MIS:2048,maxMessageSize:2e6})}}function gc(){return U.deepFreeze({id:K()})}function _c({id:s,codecMimeType:e}={}){switch(e){case"audio/opus":return{id:s??K(),producerId:K(),kind:"audio",rtpParameters:U.deepFreeze({codecs:[{mimeType:"audio/opus",payloadType:100,clockRate:48e3,channels:2,rtcpFeedback:[{type:"transport-cc"}],parameters:{useinbandfec:1,foo:"bar"}}],encodings:[{ssrc:46687003}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:ietf:params:rtp-hdrext:ssrc-audio-level",id:10}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"audio/ISAC":return{id:s??K(),producerId:K(),kind:"audio",rtpParameters:U.deepFreeze({codecs:[{mimeType:"audio/ISAC",payloadType:111,clockRate:16e3,channels:1,rtcpFeedback:[{type:"transport-cc"}],parameters:{}}],encodings:[{ssrc:46687004}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"video/VP8":return{id:s??K(),producerId:K(),kind:"video",rtpParameters:U.deepFreeze({codecs:[{mimeType:"video/VP8",payloadType:101,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"x-google-start-bitrate":1500}},{mimeType:"video/rtx",payloadType:102,clockRate:9e4,rtcpFeedback:[],parameters:{apt:101}}],encodings:[{ssrc:99991111,rtx:{ssrc:99991112}}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",id:4},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:3gpp:video-orientation",id:11},{uri:"urn:ietf:params:rtp-hdrext:toffset",id:12}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"video/H264":return{id:s??K(),producerId:K(),kind:"video",rtpParameters:U.deepFreeze({codecs:[{mimeType:"video/H264",payloadType:103,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"level-asymmetry-allowed":1,"packetization-mode":1,"profile-level-id":"42e01f"}},{mimeType:"video/rtx",payloadType:104,clockRate:9e4,rtcpFeedback:[],parameters:{apt:103}}],encodings:[{ssrc:99991113,rtx:{ssrc:99991114}}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",id:4},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:3gpp:video-orientation",id:11},{uri:"urn:ietf:params:rtp-hdrext:toffset",id:12}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};default:throw new TypeError(`unknown codecMimeType '${e}'`)}}function vc(){return U.deepFreeze({id:K()})}function wc({id:s}={}){return{id:s??K(),dataProducerId:K(),sctpStreamParameters:U.deepFreeze({streamId:666,maxPacketLifeTime:5e3,maxRetransmits:void 0})}}});var $r=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 yc=tt();O.debug=yc.default;O.types=Ss();O.version="3.20.0";var ns=$i();Object.defineProperty(O,"Device",{enumerable:!0,get:function(){return ns.Device}});Object.defineProperty(O,"detectDevice",{enumerable:!0,get:function(){return ns.detectDevice}});Object.defineProperty(O,"detectDeviceAsync",{enumerable:!0,get:function(){return ns.detectDeviceAsync}});var bc=Te();Object.defineProperty(O,"parseScalabilityMode",{enumerable:!0,get:function(){return bc.parse}});O.ortc=ie();O.enhancedEvents=W();var Sc=Ji();Object.defineProperty(O,"FakeHandler",{enumerable:!0,get:function(){return Sc.FakeHandler}});O.testFakeParameters=Yi()});var Zi=C((xd,as)=>{"use strict";var Cc=Object.prototype.hasOwnProperty,V="~";function _t(){}Object.create&&(_t.prototype=Object.create(null),new _t().__proto__||(V=!1));function Rc(s,e,t){this.fn=s,this.context=e,this.once=t||!1}function Xi(s,e,t,r,i){if(typeof t!="function")throw new TypeError("The listener must be a function");var n=new Rc(t,r||s,i),a=V?V+e:e;return s._events[a]?s._events[a].fn?s._events[a]=[s._events[a],n]:s._events[a].push(n):(s._events[a]=n,s._eventsCount++),s}function ar(s,e){--s._eventsCount===0?s._events=new _t:delete s._events[e]}function z(){this._events=new _t,this._eventsCount=0}z.prototype.eventNames=function(){var e=[],t,r;if(this._eventsCount===0)return e;for(r in t=this._events)Cc.call(t,r)&&e.push(V?r.slice(1):r);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};z.prototype.listeners=function(e){var t=V?V+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var i=0,n=r.length,a=new Array(n);i<n;i++)a[i]=r[i].fn;return a};z.prototype.listenerCount=function(e){var t=V?V+e:e,r=this._events[t];return r?r.fn?1:r.length:0};z.prototype.emit=function(e,t,r,i,n,a){var o=V?V+e:e;if(!this._events[o])return!1;var c=this._events[o],p=arguments.length,d,l;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),p){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,r),!0;case 4:return c.fn.call(c.context,t,r,i),!0;case 5:return c.fn.call(c.context,t,r,i,n),!0;case 6:return c.fn.call(c.context,t,r,i,n,a),!0}for(l=1,d=new Array(p-1);l<p;l++)d[l-1]=arguments[l];c.fn.apply(c.context,d)}else{var u=c.length,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,r);break;case 4:c[l].fn.call(c[l].context,t,r,i);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};z.prototype.on=function(e,t,r){return Xi(this,e,t,r,!1)};z.prototype.once=function(e,t,r){return Xi(this,e,t,r,!0)};z.prototype.removeListener=function(e,t,r,i){var n=V?V+e:e;if(!this._events[n])return this;if(!t)return ar(this,n),this;var a=this._events[n];if(a.fn)a.fn===t&&(!i||a.once)&&(!r||a.context===r)&&ar(this,n);else{for(var o=0,c=[],p=a.length;o<p;o++)(a[o].fn!==t||i&&!a[o].once||r&&a[o].context!==r)&&c.push(a[o]);c.length?this._events[n]=c.length===1?c[0]:c:ar(this,n)}return this};z.prototype.removeAllListeners=function(e){var t;return e?(t=V?V+e:e,this._events[t]&&ar(this,t)):(this._events=new _t,this._eventsCount=0),this};z.prototype.off=z.prototype.removeListener;z.prototype.addListener=z.prototype.on;z.prefixed=V;z.EventEmitter=z;typeof as<"u"&&(as.exports=z)});var Pc={};ds(Pc,{App:()=>sn,Session:()=>Pe,createStore:()=>on,videoStream:()=>cn});module.exports=ls(Pc);var fe=class{_handlers=new Map;_ws;_onMessage;constructor(e){this._ws=e,this._onMessage=t=>{let r;try{r=JSON.parse(typeof t.data=="string"?t.data:"")}catch{console.warn("[ChannelMultiplexer] Failed to parse WebSocket message as JSON");return}if(!r.channel)return;let i=this._handlers.get(r.channel);if(i)for(let n of i)n(r)},this._ws.addEventListener("message",this._onMessage)}on(e,t){let r=this._handlers.get(e);return r||(r=new Set,this._handlers.set(e,r)),r.add(t),()=>{r.delete(t),r.size===0&&this._handlers.delete(e)}}emit(e,t){this._ws.send(JSON.stringify({channel:e,...t}))}dispose(){this._handlers.clear(),this._ws.removeEventListener("message",this._onMessage)}};function cr(s,e){let t={...s};for(let r of Object.keys(e)){let i=e[r],n=t[r];i!==null&&typeof i=="object"&&!Array.isArray(i)&&n!==null&&typeof n=="object"&&!Array.isArray(n)?t[r]=cr(n,i):t[r]=i}return t}function fn(s,e){let t=e.split("."),r=s;for(let i of t){if(r==null||typeof r!="object")return;r=r[i]}return r}var wt=class{_state={};_listeners=new Set;_key;_sessionId;_multiplexer;constructor(e,t,r){this._key=e,this._sessionId=t,this._multiplexer=r,this._multiplexer.on(this._channel,i=>{if(i.type==="doc_update"&&i.patch&&typeof i.patch=="object"){this._state=cr(this._state,i.patch);let n={...this._state};for(let a of this._listeners)a(n)}})}get _channel(){return`session:${this._sessionId}:doc:${this._key}`}set(e){this._state=cr(this._state,e),this._multiplexer.emit(this._channel,{type:"doc_update",patch:e,snapshot:this._state});let t={...this._state};for(let r of this._listeners)r(t)}get(e,t){return e?fn(this._state,e)??t:{...this._state}}on(e,t){return this._listeners.add(t),()=>this._listeners.delete(t)}};var gn="session:",Pe=class{_sessionId;_multiplexer;_transport;_docs=new Map;constructor(e,t,r){this._sessionId=e,this._multiplexer=t,this._transport=r}stream(e,t){if(arguments.length===1){let r=this._transport.getTrackByName(e);if(!r)throw new Error(`[urun] No track available for stream "${e}"`);return r}else t==null?this._transport.removeTrack():this._transport.addTrack(t).catch(r=>{console.error(`[urun] Failed to add track for stream "${e}":`,r)})}doc(e){let t=this._docs.get(e);return t||(t=new wt(e,this._sessionId,this._multiplexer),this._docs.set(e,t)),t}on(e,t){let r=`${gn}${this._sessionId}:${e}`;return this._multiplexer.on(r,i=>{t(i)})}};var rn=et($r());var os=et(Zi(),1);var en=[1e3,2e3,4e3,8e3,3e4],tn=5,or=class{_state="disconnected";_sessionId=null;_tracks=new Map;_tracksByName=new Map;_options;_emitter=new os.default;_ws=null;_device=null;_recvTransport=null;_sendTransport=null;_consumers=new Map;_audioProducer=null;_pendingProduce=null;_multiplexer=null;_reconnectAttempts=0;_intentionalDisconnect=!1;_reconnectTimer=null;_generation=0;get state(){return this._state}get sessionId(){return this._sessionId}get tracks(){return this._tracks}get multiplexer(){return this._multiplexer}get isOpen(){return this._ws?.readyState===WebSocket.OPEN}getTrackByName(e){return this._tracksByName.get(e)}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)}async connect(e){this._intentionalDisconnect=!1;let t=++this._generation;return this._setState("connecting"),new Promise((r,i)=>{try{let n=this._sessionId?`${this._options.url}?sessionId=${encodeURIComponent(this._sessionId)}`:this._options.url,a=new WebSocket(n);this._ws=a;let o=setTimeout(()=>{a.close(),t===this._generation&&i(new Error("TransportSession: connect timed out"))},15e3);a.onopen=()=>{if(t!==this._generation)return;clearTimeout(o),this._multiplexer=new fe(a);let c={type:"start",video:e?.video??{width:854,height:480,frameRate:16}};e?.prompt&&(c.prompt=e.prompt),e?.cameraControl&&(c.camera_control=e.cameraControl),e?.args&&(c.args=e.args),e?.app&&(c.app=e.app),e?.functionName&&(c.function=e.functionName),this._options.orgId&&(c.orgId=this._options.orgId),this._options.jwt&&(c.jwt=this._options.jwt),this._options.authProvider&&(c.authProvider=this._options.authProvider),a.send(JSON.stringify(c)),this._reconnectAttempts=0,this._setState("connected"),this._emitter.emit("connected"),r()},a.onerror=()=>{this._ws!==a||t!==this._generation||(clearTimeout(o),i(new Error("WebSocket connection error")))},a.onclose=()=>{this._ws!==a||t!==this._generation||(clearTimeout(o),this._setState("disconnected"),this._intentionalDisconnect||(this._emitter.emit("disconnected"),this._attemptReconnect(e)))},a.onmessage=c=>{if(!(this._ws!==a||t!==this._generation)&&typeof c.data=="string")try{this._handleMessage(JSON.parse(c.data))}catch(p){this._emitter.emit("error",p instanceof Error?p:new Error(String(p)))}}}catch(n){this._setState("failed"),i(n)}})}disconnect(){if(this._generation+=1,this._intentionalDisconnect=!0,this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null),this._audioProducer){this._send({type:"stopAudio"});try{this._audioProducer.close()}catch{}this._audioProducer=null}for(let e of this._consumers.values())try{e.close()}catch{}if(this._consumers.clear(),this._sendTransport){try{this._sendTransport.close()}catch{}this._sendTransport=null}if(this._recvTransport){try{this._recvTransport.close()}catch{}this._recvTransport=null}if(this._pendingProduce&&(clearTimeout(this._pendingProduce.timeoutId),this._pendingProduce.reject(new Error("TransportSession: disconnected")),this._pendingProduce=null),this._device=null,this._multiplexer&&(this._multiplexer.dispose(),this._multiplexer=null),this._ws){let e=this._ws;this._ws=null;try{e.close(1e3,"intentional disconnect")}catch{}}this._tracks.clear(),this._tracksByName.clear(),this._setState("disconnected"),this._emitter.emit("disconnected")}on(e,t){return this._emitter.on(e,t),()=>{this._emitter.off(e,t)}}sendInput(e,t){this._send({type:"input",data:e,sequence:t})}async addTrack(e){if(!this._sendTransport)throw new Error("TransportSession: send transport not ready");this._audioProducer=await this._sendTransport.produce({track:e,codecOptions:{opusStereo:!1,opusDtx:!1,opusFec:!1}})}removeTrack(){this._audioProducer&&(this._send({type:"stopAudio"}),this._audioProducer.close(),this._audioProducer=null)}requestDiagnostics(){this._send({type:"diagnostics"})}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"produced":if(this._pendingProduce){let t=this._pendingProduce;this._pendingProduce=null,clearTimeout(t.timeoutId),t.resolve(e.id)}break;case"started":this._emitter.emit("started");break}}async _onRouterCapabilities(e){let t=new rn.Device;await t.load({routerRtpCapabilities:e}),this._device=t,this._send({type:"rtpCapabilities",rtpCapabilities:t.rtpCapabilities})}async _onCreateRecvTransport(e){if(!this._device)return;let t=this._device.createRecvTransport({id:e.id,iceParameters:e.iceParameters,iceCandidates:e.iceCandidates,dtlsParameters:e.dtlsParameters,iceServers:[{urls:"stun:stun.l.google.com:19302"},{urls:"stun:stun1.l.google.com:19302"}]}),r=this._generation;t.on("connect",({dtlsParameters:i},n,a)=>{try{this._send({type:"connectTransport",transportId:t.id,dtlsParameters:i}),n()}catch(o){a(o)}}),t.on("connectionstatechange",i=>{r===this._generation&&(this._intentionalDisconnect&&i==="closed"||(i==="failed"||i==="closed")&&this._emitter.emit("error",new Error(`media transport ${i}`)))}),this._recvTransport=t}async _onCreateSendTransport(e){if(!this._device)return;let t=this._device.createSendTransport({id:e.id,iceParameters:e.iceParameters,iceCandidates:e.iceCandidates,dtlsParameters:e.dtlsParameters,iceServers:[{urls:"stun:stun.l.google.com:19302"},{urls:"stun:stun1.l.google.com:19302"}]}),r=this._generation;t.on("connect",({dtlsParameters:i},n,a)=>{try{this._send({type:"connectSendTransport",transportId:t.id,dtlsParameters:i}),n()}catch(o){a(o)}}),t.on("produce",({kind:i,rtpParameters:n},a,o)=>{if(this._pendingProduce){o(new Error("produce already pending"));return}let c=setTimeout(()=>{let p=this._pendingProduce;!p||p.timeoutId!==c||(this._pendingProduce=null,p.reject(new Error("Produce timed out")))},15e3);this._pendingProduce={timeoutId:c,resolve:p=>{a({id:p})},reject:o};try{this._send({type:"produce",kind:i,rtpParameters:n})}catch(p){this._pendingProduce?.timeoutId===c&&(this._pendingProduce=null,clearTimeout(c)),o(p)}}),t.on("connectionstatechange",i=>{r===this._generation&&(this._intentionalDisconnect&&i==="closed"||(i==="failed"||i==="closed")&&this._emitter.emit("error",new Error(`media send transport ${i}`)))}),this._sendTransport=t,this._emitter.emit("audioTransportReady")}async _onConsume(e){if(!this._recvTransport)return;let t=await this._recvTransport.consume({id:e.id,producerId:e.producerId,kind:e.kind,rtpParameters:e.rtpParameters});this._consumers.set(t.id,t),this._tracks.set(t.track.id,t.track);let r=e.streamName??e.label;r&&this._tracksByName.set(r,t.track),this._emitter.emit("track",t.track),this._send({type:"resumeConsumer",consumerId:t.id})}_attemptReconnect(e){if(this._intentionalDisconnect)return;if(this._reconnectAttempts>=tn){this._setState("failed"),this._emitter.emit("error",new Error(`Failed after ${tn} attempts`));return}let t=en[Math.min(this._reconnectAttempts,en.length-1)];this._reconnectAttempts++,this._reconnectTimer=setTimeout(async()=>{this._cleanupMedia();try{await this.connect(e)}catch{}},t)}_cleanupMedia(){for(let e of this._consumers.values())try{e.close()}catch{}if(this._consumers.clear(),this._audioProducer){try{this._audioProducer.close()}catch{}this._audioProducer=null}if(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}};var Tc=new Set(["then","catch","finally","toJSON",Symbol.toPrimitive]);function Ec(s){return s.replace(/^http/,"ws").replace(/\/$/,"")+"/ws"}function xc(s,e){let t=()=>{s.send(JSON.stringify(e))};if(s.readyState===WebSocket.OPEN){t();return}if(s.readyState===WebSocket.CONNECTING){let r=()=>{s.removeEventListener("open",r),t()};s.addEventListener("open",r)}}function sn(s,e){let t=Ec(e.baseUrl),r=new WebSocket(t),i=new fe(r);return new Proxy({},{get(n,a){if(!(Tc.has(a)||typeof a!="string"))return o=>{let c=o??{},p=`s_${Date.now()}_${Math.random().toString(36).slice(2)}`,d=new or({url:t,orgId:e.orgId,jwt:e.jwt,authProvider:e.authProvider,sessionId:p});return d.connect({app:s,functionName:a,args:c}).catch(l=>{console.error(`[urun] Failed to connect session for ${a}:`,l)}),xc(r,{type:"app.call",app:s,fn:a,args:c,sessionId:p,orgId:e.orgId,jwt:e.jwt,authProvider:e.authProvider}),new Pe(p,i,d)}}})}var nn=3e4,an="stream:",cs=class{_ws;_multiplexer;_pendingRpc=new Map;_rpcId=0;constructor(e,t){this._ws=e,this._multiplexer=t,this._ws.addEventListener("message",r=>{let i;try{i=JSON.parse(typeof r.data=="string"?r.data:"")}catch{return}if(i.rpcId&&this._pendingRpc.has(i.rpcId)){let n=this._pendingRpc.get(i.rpcId);this._pendingRpc.delete(i.rpcId),clearTimeout(n.timer),i.error?n.reject(new Error(i.error)):n.resolve(i.result)}})}async get(e){return this._sendRpc("store.get",{key:e})}async has(e){return await this._sendRpc("store.has",{key:e})}on(e,t){let r=`${an}${e}`;return this._multiplexer.on(r,i=>{t(i)})}emit(e,t){let r=`${an}${e}`,i=typeof t=="object"&&t!==null&&!Array.isArray(t)?t:{data:t};this._multiplexer.emit(r,i)}_getInternals(){return{multiplexer:this._multiplexer,ws:this._ws}}_sendRpc(e,t){return new Promise((r,i)=>{if(!this._ws||this._ws.readyState!==WebSocket.OPEN){i(new Error("WebSocket not open"));return}let n=String(++this._rpcId),a=setTimeout(()=>{this._pendingRpc.has(n)&&(this._pendingRpc.delete(n),i(new Error(`RPC request "${e}" timed out after ${nn}ms`)))},nn);this._pendingRpc.set(n,{resolve:r,reject:i,timer:a}),this._ws.send(JSON.stringify({rpcId:n,type:e,...t}))})}};function on(s){let r=`${s.baseUrl.replace(/\/$/,"").replace(/^http/,"ws")}/store/${encodeURIComponent(s.orgId)}`,i=new WebSocket(r);(s.jwt||s.apiKey)&&i.addEventListener("open",()=>{i.send(JSON.stringify({type:"auth",orgId:s.orgId,jwt:s.jwt,authProvider:s.authProvider,apiKey:s.apiKey}))});let n=new fe(i);return new cs(i,n)}var kc='video/mp4; codecs="avc1.42E01E"';function cn(s,e){let t=e?.codec??kc,r=document.createElement("video");r.muted=!0,r.playsInline=!0;let i=new MediaSource,n=URL.createObjectURL(i);r.src=n,i.addEventListener("sourceopen",()=>{let u;try{u=i.addSourceBuffer(t)}catch(f){throw f instanceof DOMException&&f.name==="NotSupportedError"?new Error(`Codec not supported: "${t}". Ensure the codec string matches the fMP4 container format. Common values: video/mp4; codecs="avc1.42E01E" (H.264 Baseline), video/mp4; codecs="avc1.4D401F" (H.264 Main).`):f}let m=s.getReader();function g(){return u.updating?new Promise(f=>{u.addEventListener("updateend",()=>f(),{once:!0})}):Promise.resolve()}async function h(){try{for(;;){let{done:f,value:v}=await m.read();if(f){await g(),i.readyState==="open"&&i.endOfStream();return}await g();try{u.appendBuffer(v)}catch(E){if(E instanceof DOMException&&E.name==="QuotaExceededError"){let k=u.buffered;if(k.length>0){let P=k.start(k.length-1);u.remove(0,P),await g(),u.appendBuffer(v)}else throw E}else throw E}}}catch{if(i.readyState==="open")try{i.endOfStream("decode")}catch{}}}h()}),r.play().catch(()=>{});let a=r,o=a.captureStream??a.mozCaptureStream;if(!o)throw new Error("captureStream() is not supported in this browser. videoStream() requires HTMLMediaElement.captureStream() support.");let c=o.call(r),p=c.getTracks(),d=0,l=p.length;if(l===0)r.addEventListener("emptied",()=>{URL.revokeObjectURL(n)},{once:!0});else for(let u of p)u.addEventListener("ended",()=>{d++,d>=l&&URL.revokeObjectURL(n)});return c}0&&(module.exports={App,Session,createStore,videoStream});
|
|
7
|
+
`}});var ue=C(oe=>{"use strict";var Re=ui(),io=mi(),no=Ft();oe.grammar=no;oe.write=io;oe.parse=Re.parse;oe.parseParams=Re.parseParams;oe.parseFmtpConfig=Re.parseFmtpConfig;oe.parsePayloads=Re.parsePayloads;oe.parseRemoteCandidates=Re.parseRemoteCandidates;oe.parseImageAttributes=Re.parseImageAttributes;oe.parseSimulcastStreamList=Re.parseSimulcastStreamList});var Te=C(jr=>{"use strict";Object.defineProperty(jr,"__esModule",{value:!0});jr.parse=oo;var ao=new RegExp("^[LS]([1-9]\\d{0,1})T([1-9]\\d{0,1})");function oo(s){let e=ao.exec(s??"");return e?{spatialLayers:Number(e[1]),temporalLayers:Number(e[2])}:{spatialLayers:1,temporalLayers:1}}});var _i=C(_e=>{"use strict";Object.defineProperty(_e,"__esModule",{value:!0});_e.OfferMediaSection=_e.AnswerMediaSection=_e.MediaSection=void 0;var co=ue(),fi=be(),nt=class{_mediaObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r}){if(this._mediaObject={type:"",port:0,protocol:"",payloads:"",rtp:[],fmtp:[]},e&&this.setIceParameters(e),t){this._mediaObject.candidates=[];for(let i of t){let n={foundation:i.foundation,component:1,ip:i.address??i.ip,port:i.port,priority:i.priority,transport:i.protocol,type:i.type};i.tcpType&&(n.tcptype=i.tcpType),this._mediaObject.candidates.push(n)}this._mediaObject.endOfCandidates="end-of-candidates",this._mediaObject.iceOptions="renomination"}r&&this.setDtlsRole(r.role)}get mid(){return String(this._mediaObject.mid)}get closed(){return this._mediaObject.port===0}getObject(){return this._mediaObject}setIceParameters(e){this._mediaObject.iceUfrag=e.usernameFragment,this._mediaObject.icePwd=e.password}pause(){this._mediaObject.direction="inactive"}disable(){this.pause()}close(){this.disable(),this._mediaObject.port=0,delete this._mediaObject.candidates,delete this._mediaObject.endOfCandidates,delete this._mediaObject.iceUfrag,delete this._mediaObject.icePwd,delete this._mediaObject.iceOptions,this._mediaObject.rtp=[],this._mediaObject.fmtp=[],delete this._mediaObject.rtcp,delete this._mediaObject.rtcpFb,delete this._mediaObject.ssrcs,delete this._mediaObject.ssrcGroups,delete this._mediaObject.simulcast,delete this._mediaObject.simulcast_03,delete this._mediaObject.rids,delete this._mediaObject.extmapAllowMixed}};_e.MediaSection=nt;var Ar=class extends nt{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:i,plainRtpParameters:n,offerMediaObject:a,offerRtpParameters:o,answerRtpParameters:c,codecOptions:p}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r}),this._mediaObject.mid=String(a.mid),this._mediaObject.type=a.type,this._mediaObject.protocol=a.protocol,n?(this._mediaObject.connection={ip:n.ip,version:n.ipVersion},this._mediaObject.port=n.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},this._mediaObject.port=7),a.type){case"audio":case"video":{this._mediaObject.direction="recvonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[];for(let d of c.codecs){let l={payload:d.payloadType,codec:gi(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:f,opusDtx:v,opusMaxPlaybackRate:E,opusMaxAverageBitrate:k,opusPtime:P,opusNack:x,videoGoogleStartBitrate:I,videoGoogleMaxBitrate:ke,videoGoogleMinBitrate:Xe}=p,me=o.codecs.find(we=>we.payloadType===d.payloadType);switch(d.mimeType.toLowerCase()){case"audio/opus":case"audio/multiopus":{h!==void 0&&(me.parameters["sprop-stereo"]=h?1:0,u.stereo=h?1:0),f!==void 0&&(me.parameters.useinbandfec=f?1:0,u.useinbandfec=f?1:0),v!==void 0&&(me.parameters.usedtx=v?1:0,u.usedtx=v?1:0),E!==void 0&&(u.maxplaybackrate=E),k!==void 0&&(u.maxaveragebitrate=k),P!==void 0&&(me.parameters.ptime=P,u.ptime=P),x||(me.rtcpFeedback=me.rtcpFeedback.filter(we=>we.type!=="nack"||we.parameter),m=m.filter(we=>we.type!=="nack"||we.parameter));break}case"video/vp8":case"video/vp9":case"video/h264":case"video/h265":case"video/av1":{I!==void 0&&(u["x-google-start-bitrate"]=I),ke!==void 0&&(u["x-google-max-bitrate"]=ke),Xe!==void 0&&(u["x-google-min-bitrate"]=Xe);break}}}let g={payload:d.payloadType,config:""};for(let h of Object.keys(u))g.config&&(g.config+=";"),g.config+=`${h}=${u[h]}`;g.config&&this._mediaObject.fmtp.push(g);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=i.port,this._mediaObject.maxMessageSize=i.maxMessageSize):a.sctpmap&&(this._mediaObject.payloads=String(i.port),this._mediaObject.sctpmap={app:"webrtc-datachannel",sctpmapNumber:i.port,maxMessageSize:i.maxMessageSize});break}}}setDtlsRole(e){switch(e){case"client":{this._mediaObject.setup="active";break}case"server":{this._mediaObject.setup="passive";break}case"auto":{this._mediaObject.setup="actpass";break}}}resume(){this._mediaObject.direction="recvonly"}muxSimulcastStreams(e){if(!this._mediaObject.simulcast?.list1)return;let t={};for(let n of e)n.rid&&(t[n.rid]=n);let r=this._mediaObject.simulcast.list1,i=co.parseSimulcastStreamList(r);for(let n of i)for(let a of n)a.paused=!t[a.scid]?.active;this._mediaObject.simulcast.list1=i.map(n=>n.map(a=>`${a.paused?"~":""}${a.scid}`).join(",")).join(";")}};_e.AnswerMediaSection=Ar;var Fr=class extends nt{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:i,plainRtpParameters:n,mid:a,kind:o,offerRtpParameters:c,streamId:p,trackId:d}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r}),this._mediaObject.mid=String(a),this._mediaObject.type=o,n?(this._mediaObject.connection={ip:n.ip,version:n.ipVersion},this._mediaObject.protocol="RTP/AVP",this._mediaObject.port=n.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},i?this._mediaObject.protocol="UDP/DTLS/SCTP":this._mediaObject.protocol="UDP/TLS/RTP/SAVPF",this._mediaObject.port=7),this._mediaObject.extmapAllowMixed="extmap-allow-mixed",o){case"audio":case"video":{this._mediaObject.direction="sendonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[],this._mediaObject.msid=[{id:p,appdata:d}];for(let g of c.codecs){let h={payload:g.payloadType,codec:gi(g),rate:g.clockRate};g.channels>1&&(h.encoding=g.channels),this._mediaObject.rtp.push(h);let f={payload:g.payloadType,config:""};for(let v of Object.keys(g.parameters??{}))f.config&&(f.config+=";"),f.config+=`${v}=${g.parameters[v]}`;f.config&&this._mediaObject.fmtp.push(f);for(let v of g.rtcpFeedback)this._mediaObject.rtcpFb.push({payload:g.payloadType,type:v.type,subtype:v.parameter})}this._mediaObject.payloads=c.codecs.map(g=>g.payloadType).join(" "),this._mediaObject.ext=[];for(let g of c.headerExtensions)this._mediaObject.ext.push({uri:g.uri,value:g.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=i.port,this._mediaObject.maxMessageSize=i.maxMessageSize;break}}}setDtlsRole(e){this._mediaObject.setup="actpass"}resume(){this._mediaObject.direction="sendonly"}};_e.OfferMediaSection=Fr;function gi(s){let t=new RegExp("^(audio|video)/(.+)","i").exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");return t[2]}});var Ge=C(qt=>{"use strict";Object.defineProperty(qt,"__esModule",{value:!0});qt.RemoteSdp=void 0;var po=ue(),lo=q(),zt=_i(),uo=$r(),ho=["av1","h264"],$t=new lo.Logger("RemoteSdp"),zr=class{_iceParameters;_iceCandidates;_dtlsParameters;_sctpParameters;_plainRtpParameters;_mediaSections=[];_midToIndex=new Map;_firstMid;_sdpObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:i,plainRtpParameters:n}){if(this._iceParameters=e,this._iceCandidates=t,this._dtlsParameters=r,this._sctpParameters=i,this._plainRtpParameters=n,this._sdpObject={version:0,origin:{address:"0.0.0.0",ipVer:4,netType:"IN",sessionId:"10000",sessionVersion:0,username:`media-client-v${uo.version}`},name:"-",timing:{start:0,stop:0},media:[]},this._sdpObject.iceOptions="ice2",e?.iceLite&&(this._sdpObject.icelite="ice-lite"),r){this._sdpObject.msidSemantic={semantic:"WMS",token:"*"};let a=this._dtlsParameters.fingerprints.length;this._sdpObject.fingerprint={type:r.fingerprints[a-1].algorithm,hash:r.fingerprints[a-1].value},this._sdpObject.groups=[{type:"BUNDLE",mids:""}]}n&&(this._sdpObject.origin.address=n.ip,this._sdpObject.origin.ipVer=n.ipVersion)}updateIceParameters(e){$t.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){$t.debug("updateDtlsRole() [role:%s]",e),this._dtlsParameters.role=e;for(let t of this._mediaSections)t.setDtlsRole(e)}setSessionExtmapAllowMixed(){$t.debug("setSessionExtmapAllowMixed()"),this._sdpObject.extmapAllowMixed="extmap-allow-mixed"}getNextMediaSectionIdx(){for(let e=0;e<this._mediaSections.length;++e){let t=this._mediaSections[e];if(t.closed)return{idx:e,reuseMid:t.mid}}return{idx:this._mediaSections.length}}send({offerMediaObject:e,reuseMid:t,offerRtpParameters:r,answerRtpParameters:i,codecOptions:n}){let a=new zt.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,offerMediaObject:e,offerRtpParameters:r,answerRtpParameters:i,codecOptions:n}),o=a.getObject();o.rtp.find(p=>ho.includes(p.codec.toLowerCase()))||(o.ext=o.ext?.filter(p=>p.uri!=="https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension")),t?this.replaceMediaSection(a,t):this._midToIndex.has(a.mid)?this.replaceMediaSection(a):this.addMediaSection(a)}receive({mid:e,kind:t,offerRtpParameters:r,streamId:i,trackId:n}){this.setSessionExtmapAllowMixed();let a=new zt.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,mid:e,kind:t,offerRtpParameters:r,streamId:i,trackId:n}),o=this._mediaSections.find(c=>c.closed&&c.getObject().type===t);o?this.replaceMediaSection(a,o.mid):this.addMediaSection(a)}pauseMediaSection(e){this.findMediaSection(e).pause()}resumeSendingMediaSection(e){this.findMediaSection(e).resume()}resumeReceivingMediaSection(e){this.findMediaSection(e).resume()}disableMediaSection(e){this.findMediaSection(e).disable()}closeMediaSection(e){let t=this.findMediaSection(e);return e===this._firstMid?($t.debug("closeMediaSection() | cannot close first media section, disabling it instead [mid:%s]",e),this.disableMediaSection(e),!1):(t.close(),this.regenerateBundleMids(),!0)}muxMediaSectionSimulcast(e,t){let r=this.findMediaSection(e);r.muxSimulcastStreams(t),this.replaceMediaSection(r)}sendSctpAssociation({offerMediaObject:e}){let t=new zt.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 zt.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++,po.write(this._sdpObject)}addMediaSection(e){this._firstMid||(this._firstMid=e.mid),this._mediaSections.push(e),this._midToIndex.set(e.mid,this._mediaSections.length-1),this._sdpObject.media.push(e.getObject()),this.regenerateBundleMids()}replaceMediaSection(e,t){if(typeof t=="string"){let r=this._midToIndex.get(t);if(r===void 0)throw new Error(`no media section found for reuseMid '${t}'`);let i=this._mediaSections[r];this._mediaSections[r]=e,this._midToIndex.delete(i.mid),this._midToIndex.set(e.mid,r),this._sdpObject.media[r]=e.getObject(),this.regenerateBundleMids()}else{let r=this._midToIndex.get(e.mid);if(r===void 0)throw new Error(`no media section found with mid '${e.mid}'`);this._mediaSections[r]=e,this._sdpObject.media[r]=e.getObject()}}findMediaSection(e){let t=this._midToIndex.get(e);if(t===void 0)throw new Error(`no media section found with mid '${e}'`);return this._mediaSections[t]}regenerateBundleMids(){this._dtlsParameters&&(this._sdpObject.groups[0].mids=this._mediaSections.filter(e=>!e.closed).map(e=>e.mid).join(" "))}};qt.RemoteSdp=zr});var We=C(Ee=>{"use strict";Object.defineProperty(Ee,"__esModule",{value:!0});Ee.extractRtpCapabilities=mo;Ee.extractDtlsParameters=fo;Ee.getCname=go;Ee.applyCodecParameters=_o;Ee.addHeaderExtension=vo;var vi=ue();function mo({sdpObject:s}){let e=new Map,t=new Map;for(let i of s.media){let n=i.type;switch(n){case"audio":case"video":break;default:continue}for(let a of i.rtp){let o={kind:n,mimeType:`${n}/${a.codec}`,preferredPayloadType:a.payload,clockRate:a.rate,channels:a.encoding,parameters:{},rtcpFeedback:[]};e.set(o.preferredPayloadType,o)}for(let a of i.fmtp??[]){let o=vi.parseParams(a.config),c=e.get(a.payload);c&&(o?.hasOwnProperty("profile-level-id")&&(o["profile-level-id"]=String(o["profile-level-id"])),c.parameters=o)}for(let a of i.rtcpFb??[]){let o={type:a.type,parameter:a.subtype};if(o.parameter||delete o.parameter,a.payload!=="*"){let c=e.get(Number(a.payload));if(!c)continue;c.rtcpFeedback.push(o)}else for(let c of e.values())c.kind===n&&!/.+\/rtx$/i.test(c.mimeType)&&c.rtcpFeedback.push(o)}for(let a of i.ext??[]){if(a["encrypt-uri"])continue;let o={kind:n,uri:a.uri,preferredId:a.value};t.set(o.preferredId,o)}}return{codecs:Array.from(e.values()),headerExtensions:Array.from(t.values())}}function fo({sdpObject:s}){let e=s.setup,t=s.fingerprint;if(!e||!t){let n=(s.media??[]).find(a=>a.port!==0);n&&(e=e??n.setup,t=t??n.fingerprint)}if(e){if(!t)throw new Error("no a=fingerprint found at SDP session or media level")}else throw new Error("no a=setup found at SDP session or media level");let r;switch(e){case"active":{r="client";break}case"passive":{r="server";break}case"actpass":{r="auto";break}}return{role:r,fingerprints:[{algorithm:t.type,value:t.hash}]}}function go({offerMediaObject:s}){let e=(s.ssrcs??[]).find(t=>t.attribute==="cname");return e?e.value:""}function _o({offerRtpParameters:s,answerMediaObject:e}){for(let t of s.codecs){let r=t.mimeType.toLowerCase();if(r!=="audio/opus"||!(e.rtp??[]).find(o=>o.payload===t.payloadType))continue;e.fmtp=e.fmtp??[];let n=e.fmtp.find(o=>o.payload===t.payloadType);n||(n={payload:t.payloadType,config:""},e.fmtp.push(n));let a=vi.parseParams(n.config);if(r==="audio/opus"){let o=t.parameters?.["sprop-stereo"];o!==void 0&&(a.stereo=Number(o)?1:0)}n.config="";for(let o of Object.keys(a))n.config&&(n.config+=";"),n.config+=`${o}=${a[o]}`}}function vo({offerMediaObject:s,headerExtensionUri:e,headerExtensionId:t}){s.ext||(s.ext=[]),s.ext.push({uri:e,value:t})}});var Ke=C(Bt=>{"use strict";Object.defineProperty(Bt,"__esModule",{value:!0});Bt.getRtpEncodings=wo;Bt.addLegacySimulcast=yo;function wo({offerMediaObject:s,codecs:e}){let t=new Set;for(let n of s.ssrcs??[]){let a=n.id;a&&t.add(a)}if(t.size===0)throw new Error("no a=ssrc lines found");let r=new Map;for(let n of s.ssrcGroups??[]){if(n.semantics!=="FID")continue;let a=n.ssrcs.split(/\s+/),o=Number(a[0]),c=Number(a[1]);t.has(o)&&(t.delete(o),t.delete(c),r.set(o,c))}for(let n of t)r.set(n,void 0);let i=[];for(let[n,a]of r){let o={ssrc:n};a&&e.length>1&&(o.rtx={ssrc:a}),i.push(o)}return i}function yo({offerMediaObject:s,numStreams:e}){if(e<=1)throw new TypeError("numStreams must be greater than 1");let t=(s.ssrcs??[]).find(l=>l.attribute==="msid");if(!t)throw new Error("a=ssrc line with msid information not found");let[r,i]=t.value.split(" "),n=Number(t.id),a;(s.ssrcGroups??[]).some(l=>{if(l.semantics!=="FID")return!1;let u=l.ssrcs.split(/\s+/);return Number(u[0])===n?(a=Number(u[1]),!0):!1});let o=(s.ssrcs??[]).find(l=>l.attribute==="cname");if(!o)throw new Error("a=ssrc line with cname information not found");let c=o.value,p=[],d=[];for(let l=0;l<e;++l)p.push(n+l),a&&d.push(a+l);s.ssrcGroups=[],s.ssrcs=[],s.ssrcGroups.push({semantics:"SIM",ssrcs:p.join(" ")});for(let l of p)s.ssrcs.push({id:l,attribute:"cname",value:c}),s.ssrcs.push({id:l,attribute:"msid",value:`${r} ${i}`});for(let l=0;l<d.length;++l){let u=p[l],m=d[l];s.ssrcs.push({id:m,attribute:"cname",value:c}),s.ssrcs.push({id:m,attribute:"msid",value:`${r} ${i}`}),s.ssrcGroups.push({semantics:"FID",ssrcs:`${u} ${m}`})}}});var Qe=C(at=>{"use strict";Object.defineProperty(at,"__esModule",{value:!0});at.addNackSupportForOpus=bo;at.addHeaderExtensionSupport=So;at.getMsidStreamIdAndTrackId=Co;function bo(s){for(let e of s.codecs??[])(e.mimeType.toLowerCase()==="audio/opus"||e.mimeType.toLowerCase()==="audio/multiopus")&&!e.rtcpFeedback?.some(t=>t.type==="nack"&&!t.parameter)&&(e.rtcpFeedback||(e.rtcpFeedback=[]),e.rtcpFeedback.push({type:"nack"}))}function So(s,e){let t,r=s.headerExtensions?.find(n=>n.uri===e.uri);if(r){if(r.kind===e.kind)return;t=r.preferredId}if(s.headerExtensions||(s.headerExtensions=[]),t===void 0){t=1;let n=new Set(s.headerExtensions.map(a=>a.preferredId));for(;n.has(t);)++t}let i={kind:e.kind,uri:e.uri,preferredId:t,preferredEncrypt:!1,direction:e.direction};s.headerExtensions.push(i)}function Co(s){if(!s||typeof s!="string")return{msidStreamId:void 0,msidTrackId:void 0};let[e,t]=s.trim().split(/\s+/);return e?{msidStreamId:e,msidTrackId:t}:{msidStreamId:void 0,msidTrackId:void 0}}});var Si=C(Ut=>{"use strict";Object.defineProperty(Ut,"__esModule",{value:!0});Ut.Chrome111=void 0;var ce=ue(),Ro=G(),To=q(),ot=ie(),Eo=J(),xo=Te(),ko=Ge(),ct=We(),wi=Ke(),qr=Qe(),R=new To.Logger("Chrome111"),yi="Chrome111",bi={OS:65535,MIS:65535},Br=class s extends Ro.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:yi,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{R.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e,sendEncodings:[{scalabilityMode:"L3T3"}]});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let i=ce.parse(r.sdp);return s.getLocalRtpCapabilities(i)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(R.debug("getNativeSctpCapabilities()"),{numStreams:bi})}}static getLocalRtpCapabilities(e,t=[]){let r=ct.extractRtpCapabilities({sdpObject:e});ot.validateAndNormalizeRtpCapabilities(r),qr.addNackSupportForOpus(r);for(let i of t)qr.addHeaderExtensionSupport(r,i);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),R.debug("constructor()"),this._direction=e,this._remoteSdp=new ko.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=p,i.role&&i.role!=="auto"&&(this._forcedLocalDtlsRole=i.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(R.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return yi}close(){if(R.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),R.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),R.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});R.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:n,codec:a,onRtpSender:o}){if(this.assertNotClosed(),this.assertSendDirection(),R.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1){let P=1;for(let x of r){let I=x.scalabilityMode?(0,xo.parse)(x.scalabilityMode).temporalLayers:3;I>P&&(P=I)}r.forEach((x,I)=>{x.rid=`r${I}`,x.scalabilityMode=`L1T${P}`})}let c=this._remoteSdp.getNextMediaSectionIdx(),p=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});o&&o(p.sender);let d=await this._pc.createOffer(),l=ce.parse(d.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let u=[];u.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let m=s.getLocalRtpCapabilities(l,u),g=this._getSendExtendedRtpCapabilities(m),h=ot.getSendingRtpParameters(e.kind,g);h.codecs=ot.reduceCodecs(h.codecs,a);let f=ot.getSendingRemoteRtpParameters(e.kind,g);if(f.codecs=ot.reduceCodecs(f.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l}),n?.absCaptureTime){let P=l.media[c.idx];ct.addHeaderExtension({offerMediaObject:P,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:f.headerExtensions.find(x=>x.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:ce.write(l)}}R.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let v=p.mid;h.mid=v,l=ce.parse(this._pc.localDescription.sdp);let E=l.media[c.idx];if(h.rtcp.cname=ct.getCname({offerMediaObject:E}),h.msid=`${t??this._sendStream.id} ${e.id}`,!r)h.encodings=wi.getRtpEncodings({offerMediaObject:E,codecs:h.codecs});else if(r.length===1){let P=wi.getRtpEncodings({offerMediaObject:E,codecs:h.codecs});Object.assign(P[0],r[0]),h.encodings=P}else h.encodings=r;this._remoteSdp.send({offerMediaObject:E,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:f,codecOptions:i});let k={type:"answer",sdp:this._remoteSdp.getSdp()};return R.debug("send() | calling pc.setRemoteDescription() [answer:%o]",k),await this._pc.setRemoteDescription(k),this._mapMidTransceiver.set(v,p),{localId:v,rtpParameters:h,rtpSender:p.sender}}async stopSending(e){if(this.assertSendDirection(),R.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let i=await this._pc.createOffer();R.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let n={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),R.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();R.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),R.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();R.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?R.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):R.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),R.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();R.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),R.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();R.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};R.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%bi.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=ce.parse(n.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),R.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;R.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:m}=qr.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??m??d.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(let o of e){let{trackId:c,onRtpReceiver:p}=o;if(p){let d=r.get(c),l=this._pc.getTransceivers().find(u=>u.mid===d);if(!l)throw new Error("transceiver not found");p(l.receiver)}}let n=await this._pc.createAnswer(),a=ce.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=r.get(c),l=a.media.find(u=>String(u.mid)===d);ct.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l})}n={type:"answer",sdp:ce.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),R.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,p=r.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(d)this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){R.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){R.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){R.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};R.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(r,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),m=ce.parse(u.sdp),g=m.media.find(h=>h.type==="application");g.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),u={type:"answer",sdp:ce.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=ce.parse(this._pc.localDescription.sdp));let r=ct.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Eo.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};Ut.Chrome111=Br});var Ti=C(Vt=>{"use strict";Object.defineProperty(Vt,"__esModule",{value:!0});Vt.Chrome74=void 0;var Y=ue(),Po=q(),Do=G(),dt=ie(),Lo=J(),Io=Te(),Mo=Ge(),pt=We(),Ur=Ke(),Vr=Qe(),b=new Po.Logger("Chrome74"),Ci="Chrome74",Ri={OS:1024,MIS:1024},Hr=class s extends Do.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Ci,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{b.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let i=Y.parse(r.sdp);return s.getLocalRtpCapabilities(i)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(b.debug("getNativeSctpCapabilities()"),{numStreams:Ri})}}static getLocalRtpCapabilities(e,t=[]){let r=pt.extractRtpCapabilities({sdpObject:e});dt.validateAndNormalizeRtpCapabilities(r),Vr.addNackSupportForOpus(r);for(let i of t)Vr.addHeaderExtensionSupport(r,i);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),b.debug("constructor()"),this._direction=e,this._remoteSdp=new Mo.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=p,i.role&&i.role!=="auto"&&(this._forcedLocalDtlsRole=i.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(b.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Ci}close(){if(b.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),b.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),b.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});b.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:n,codec:a}){this.assertNotClosed(),this.assertSendDirection(),b.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((x,I)=>{x.rid=`r${I}`});let o=this._remoteSdp.getNextMediaSectionIdx(),c=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r}),p=await this._pc.createOffer(),d=Y.parse(p.sdp);d.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let l=[];l.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let u=s.getLocalRtpCapabilities(d,l),m=this._getSendExtendedRtpCapabilities(u),g=dt.getSendingRtpParameters(e.kind,m);g.codecs=dt.reduceCodecs(g.codecs,a);let h=dt.getSendingRemoteRtpParameters(e.kind,m);h.codecs=dt.reduceCodecs(h.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:d});let f=!1,v=(0,Io.parse)((r??[{}])[0].scalabilityMode),E;r?.length===1&&v.spatialLayers>1&&g.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(b.debug("send() | enabling legacy simulcast for VP9 SVC"),f=!0,d=Y.parse(p.sdp),E=d.media[o.idx],Ur.addLegacySimulcast({offerMediaObject:E,numStreams:v.spatialLayers}),p={type:"offer",sdp:Y.write(d)}),b.debug("send() | calling pc.setLocalDescription() [offer:%o]",p),n?.absCaptureTime&&(E=d.media[o.idx],pt.addHeaderExtension({offerMediaObject:E,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:h.headerExtensions.find(x=>x.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),p={type:"offer",sdp:Y.write(d)}),await this._pc.setLocalDescription(p);let k=c.mid;if(g.mid=k,d=Y.parse(this._pc.localDescription.sdp),E=d.media[o.idx],g.rtcp.cname=pt.getCname({offerMediaObject:E}),g.msid=`${t??this._sendStream.id} ${e.id}`,!r)g.encodings=Ur.getRtpEncodings({offerMediaObject:E,codecs:g.codecs});else if(r.length===1){let x=Ur.getRtpEncodings({offerMediaObject:E,codecs:g.codecs});Object.assign(x[0],r[0]),f&&(x=[x[0]]),g.encodings=x}else g.encodings=r;if(g.encodings.length>1&&(g.codecs[0].mimeType.toLowerCase()==="video/vp8"||g.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let x of g.encodings)x.scalabilityMode?x.scalabilityMode=`L1T${v.temporalLayers}`:x.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:E,reuseMid:o.reuseMid,offerRtpParameters:g,answerRtpParameters:h,codecOptions:i});let P={type:"answer",sdp:this._remoteSdp.getSdp()};return b.debug("send() | calling pc.setRemoteDescription() [answer:%o]",P),await this._pc.setRemoteDescription(P),this._mapMidTransceiver.set(k,c),{localId:k,rtpParameters:g,rtpSender:c.sender}}async stopSending(e){if(this.assertSendDirection(),b.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let i=await this._pc.createOffer();b.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let n={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),b.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();b.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),b.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();b.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?b.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):b.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),b.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();b.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),b.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();b.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};b.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Ri.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=Y.parse(n.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),b.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;b.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:m}=Vr.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??m??d.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);let n=await this._pc.createAnswer(),a=Y.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=r.get(c),l=a.media.find(u=>String(u.mid)===d);pt.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l})}n={type:"answer",sdp:Y.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),b.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,p=r.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(d)this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){b.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){b.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){b.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};b.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(r,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),m=Y.parse(u.sdp),g=m.media.find(h=>h.type==="application");g.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),u={type:"answer",sdp:Y.write(m)},b.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=Y.parse(this._pc.localDescription.sdp));let r=pt.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Lo.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};Vt.Chrome74=Hr});var Di=C(Gt=>{"use strict";Object.defineProperty(Gt,"__esModule",{value:!0});Gt.Firefox120=void 0;var he=ue(),Oo=G(),No=q(),Ei=J(),lt=ie(),jo=Te(),Ao=Ge(),Ht=We(),xi=Ke(),Fo=Qe(),T=new No.Logger("Firefox120"),ki="Firefox120",Pi={OS:16,MIS:2048},Gr=class s extends Oo.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 s(e),getNativeRtpCapabilities:async({direction:e})=>{T.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"}),r=document.createElement("canvas");r.getContext("2d");let n=r.captureStream().getVideoTracks()[0];try{t.addTransceiver("audio",{direction:e}),t.addTransceiver(n,{direction:e,sendEncodings:[{rid:"r0",maxBitrate:1e5},{rid:"r1",maxBitrate:5e5}]});let a=await t.createOffer();try{r.remove()}catch{}try{n.stop()}catch{}try{t.close()}catch{}t=void 0;let o=he.parse(a.sdp);return s.getLocalRtpCapabilities(o)}catch(a){try{r.remove()}catch{}try{n.stop()}catch{}try{t?.close()}catch{}throw t=void 0,a}},getNativeSctpCapabilities:async()=>(T.debug("getNativeSctpCapabilities()"),{numStreams:Pi})}}static getLocalRtpCapabilities(e){let t=Ht.extractRtpCapabilities({sdpObject:e});return lt.validateAndNormalizeRtpCapabilities(t),t}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),T.debug("constructor()"),this._direction=e,this._remoteSdp=new Ao.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=p,this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(T.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return ki}close(){if(T.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){throw this.assertNotClosed(),new Ei.UnsupportedError("not supported")}async restartIce(e){if(this.assertNotClosed(),T.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});T.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();T.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,codec:n,onRtpSender:a}){this.assertNotClosed(),this.assertSendDirection(),T.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((E,k)=>{E.rid=`r${k}`});let o=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});a&&a(o.sender);let c=await this._pc.createOffer(),p=he.parse(c.sdp);p.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let d=s.getLocalRtpCapabilities(p),l=this._getSendExtendedRtpCapabilities(d),u=lt.getSendingRtpParameters(e.kind,l);u.codecs=lt.reduceCodecs(u.codecs,n);let m=lt.getSendingRemoteRtpParameters(e.kind,l);m.codecs=lt.reduceCodecs(m.codecs,n),this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:p});let g=(0,jo.parse)((r??[{}])[0].scalabilityMode);T.debug("send() | calling pc.setLocalDescription() [offer:%o]",c),await this._pc.setLocalDescription(c);let h=o.mid;u.mid=h,p=he.parse(this._pc.localDescription.sdp);let f=p.media[p.media.length-1];if(u.rtcp.cname=Ht.getCname({offerMediaObject:f}),u.msid=`${t??this._sendStream.id} ${e.id}`,!r)u.encodings=xi.getRtpEncodings({offerMediaObject:f,codecs:u.codecs});else if(r.length===1){let E=xi.getRtpEncodings({offerMediaObject:f,codecs:u.codecs});Object.assign(E[0],r[0]),u.encodings=E}else u.encodings=r;if(u.encodings.length>1&&(u.codecs[0].mimeType.toLowerCase()==="video/vp8"||u.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let E of u.encodings)E.scalabilityMode?E.scalabilityMode=`L1T${g.temporalLayers}`:E.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:f,offerRtpParameters:u,answerRtpParameters:m,codecOptions:i});let v={type:"answer",sdp:this._remoteSdp.getSdp()};return T.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(),T.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated transceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.disableMediaSection(t.mid);let r=await this._pc.createOffer();T.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),T.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();T.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),T.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let r=await this._pc.createOffer();T.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?T.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):T.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),T.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated transceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();T.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),T.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();T.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};T.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Pi.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=he.parse(n.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:a}),T.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;T.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:m}=Fo.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??m??d.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(let o of e){let{trackId:c,onRtpReceiver:p}=o;if(p){let d=r.get(c),l=this._pc.getTransceivers().find(u=>u.mid===d);if(!l)throw new Error("transceiver not found");p(l.receiver)}}let n=await this._pc.createAnswer(),a=he.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=r.get(c),l=a.media.find(u=>String(u.mid)===d);Ht.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l}),n={type:"answer",sdp:he.write(a)}}this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:a}),T.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,p=r.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(!d)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){T.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();T.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){T.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();T.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){T.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();T.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};T.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(r,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),m=he.parse(u.sdp),g=m.media.find(h=>h.type==="application");g.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:m}),u={type:"answer",sdp:he.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=he.parse(this._pc.localDescription.sdp));let r=Ht.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Ei.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};Gt.Firefox120=Gr});var Oi=C(Wt=>{"use strict";Object.defineProperty(Wt,"__esModule",{value:!0});Wt.Safari12=void 0;var Z=ue(),zo=G(),$o=q(),ut=ie(),qo=J(),Bo=Te(),Uo=Ge(),ht=We(),Li=Ke(),Wr=Qe(),S=new $o.Logger("Safari12"),Ii="Safari12",Mi={OS:65535,MIS:65535},Kr=class s extends zo.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 s(e),getNativeRtpCapabilities:async({direction:e})=>{S.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let i=Z.parse(r.sdp);return s.getLocalRtpCapabilities(i)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(S.debug("getNativeSctpCapabilities()"),{numStreams:Mi})}}static getLocalRtpCapabilities(e,t=[]){let r=ht.extractRtpCapabilities({sdpObject:e});ut.validateAndNormalizeRtpCapabilities(r),Wr.addNackSupportForOpus(r);for(let i of t)Wr.addHeaderExtensionSupport(r,i);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),S.debug("constructor()"),this._direction=e,this._remoteSdp=new Uo.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=p,i.role&&i.role!=="auto"&&(this._forcedLocalDtlsRole=i.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)}),this._pc.addEventListener("icecandidateerror",d=>{this.emit("@icecandidateerror",d)}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(S.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Ii}close(){if(S.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),S.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),S.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});S.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();S.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:n,codec:a,onRtpSender:o}){this.assertNotClosed(),this.assertSendDirection(),S.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t);let c=this._remoteSdp.getNextMediaSectionIdx(),p=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream]});o&&o(p.sender);let d=await this._pc.createOffer(),l=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=s.getLocalRtpCapabilities(l,u),g=this._getSendExtendedRtpCapabilities(m),h=ut.getSendingRtpParameters(e.kind,g);h.codecs=ut.reduceCodecs(h.codecs,a);let f=ut.getSendingRemoteRtpParameters(e.kind,g);f.codecs=ut.reduceCodecs(f.codecs,a);let v;this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l});let E=(0,Bo.parse)((r??[{}])[0].scalabilityMode);r&&r.length>1&&(S.debug("send() | enabling legacy simulcast"),l=Z.parse(d.sdp),v=l.media[c.idx],Li.addLegacySimulcast({offerMediaObject:v,numStreams:r.length}),d={type:"offer",sdp:Z.write(l)}),n?.absCaptureTime&&(v=l.media[c.idx],ht.addHeaderExtension({offerMediaObject:v,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:f.headerExtensions.find(x=>x.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:Z.write(l)}),S.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let k=p.mid;if(h.mid=k,l=Z.parse(this._pc.localDescription.sdp),v=l.media[c.idx],h.rtcp.cname=ht.getCname({offerMediaObject:v}),h.msid=`${t??this._sendStream.id} ${e.id}`,h.encodings=Li.getRtpEncodings({offerMediaObject:v,codecs:h.codecs}),r)for(let x=0;x<h.encodings.length;++x)r[x]&&Object.assign(h.encodings[x],r[x]);if(h.encodings.length>1&&(h.codecs[0].mimeType.toLowerCase()==="video/vp8"||h.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let x of h.encodings)x.scalabilityMode?x.scalabilityMode=`L1T${E.temporalLayers}`:x.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:v,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:f,codecOptions:i});let P={type:"answer",sdp:this._remoteSdp.getSdp()};return S.debug("send() | calling pc.setRemoteDescription() [answer:%o]",P),await this._pc.setRemoteDescription(P),this._mapMidTransceiver.set(k,p),{localId:k,rtpParameters:h,rtpSender:p.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;S.debug("stopSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let i=await this._pc.createOffer();S.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let n={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),S.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();S.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),S.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let r=await this._pc.createOffer();S.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?S.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):S.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),S.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();S.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),S.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();S.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};S.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Mi.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=Z.parse(n.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),S.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;S.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:m}=Wr.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??m??d.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(let o of e){let{trackId:c,onRtpReceiver:p}=o;if(p){let d=r.get(c),l=this._pc.getTransceivers().find(u=>u.mid===d);if(!l)throw new Error("transceiver not found");p(l.receiver)}}let n=await this._pc.createAnswer(),a=Z.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=r.get(c),l=a.media.find(u=>String(u.mid)===d);ht.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l})}n={type:"answer",sdp:Z.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),S.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,p=r.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(!d)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){S.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();S.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){S.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();S.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){S.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();S.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};S.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(r,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),m=Z.parse(u.sdp),g=m.media.find(h=>h.type==="application");g.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),u={type:"answer",sdp:Z.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=Z.parse(this._pc.localDescription.sdp));let r=ht.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new qo.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')}};Wt.Safari12=Kr});var Ai=C(Kt=>{"use strict";Object.defineProperty(Kt,"__esModule",{value:!0});Kt.ReactNative106=void 0;var X=ue(),Vo=G(),Ho=q(),mt=ie(),Go=J(),Wo=Te(),Ko=Ge(),ft=We(),Qr=Ke(),Jr=Qe(),y=new Ho.Logger("ReactNative106"),Ni="ReactNative106",ji={OS:65535,MIS:65535},Yr=class s extends Vo.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Ni,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{y.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let i=X.parse(r.sdp);return s.getLocalRtpCapabilities(i)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(y.debug("getNativeSctpCapabilities()"),{numStreams:ji})}}static getLocalRtpCapabilities(e,t=[]){let r=ft.extractRtpCapabilities({sdpObject:e});mt.validateAndNormalizeRtpCapabilities(r),Jr.addNackSupportForOpus(r);for(let i of t)Jr.addHeaderExtensionSupport(r,i);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),y.debug("constructor()"),this._direction=e,this._remoteSdp=new Ko.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=p,i.role&&i.role!=="auto"&&(this._forcedLocalDtlsRole=i.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(y.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Ni}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 r={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();y.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:n,codec:a,onRtpSender:o}){this.assertNotClosed(),this.assertSendDirection(),y.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((I,ke)=>{I.rid=`r${ke}`});let c=this._remoteSdp.getNextMediaSectionIdx(),p=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});o&&o(p.sender);let d=await this._pc.createOffer(),l=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=s.getLocalRtpCapabilities(l,u),g=this._getSendExtendedRtpCapabilities(m),h=mt.getSendingRtpParameters(e.kind,g);h.codecs=mt.reduceCodecs(h.codecs,a);let f=mt.getSendingRemoteRtpParameters(e.kind,g);f.codecs=mt.reduceCodecs(f.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l});let v=!1,E=(0,Wo.parse)((r??[{}])[0].scalabilityMode),k;r?.length===1&&E.spatialLayers>1&&h.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(y.debug("send() | enabling legacy simulcast for VP9 SVC"),v=!0,l=X.parse(d.sdp),k=l.media[c.idx],Qr.addLegacySimulcast({offerMediaObject:k,numStreams:E.spatialLayers}),d={type:"offer",sdp:X.write(l)}),n?.absCaptureTime&&(k=l.media[c.idx],ft.addHeaderExtension({offerMediaObject:k,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:f.headerExtensions.find(I=>I.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:X.write(l)}),y.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let P=p.mid??void 0;if(P||y.warn("send() | missing transceiver.mid (bug in react-native-webrtc, using a workaround"),h.mid=P,l=X.parse(this._pc.localDescription.sdp),k=l.media[c.idx],h.rtcp.cname=ft.getCname({offerMediaObject:k}),h.msid=`${t??this._sendStream.id} ${e.id}`,!r)h.encodings=Qr.getRtpEncodings({offerMediaObject:k,codecs:h.codecs});else if(r.length===1){let I=Qr.getRtpEncodings({offerMediaObject:k,codecs:h.codecs});Object.assign(I[0],r[0]),v&&(I=[I[0]]),h.encodings=I}else h.encodings=r;if(h.encodings.length>1&&(h.codecs[0].mimeType.toLowerCase()==="video/vp8"||h.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let I of h.encodings)I.scalabilityMode?I.scalabilityMode=`L1T${E.temporalLayers}`:I.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:k,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:f,codecOptions:i});let x={type:"answer",sdp:this._remoteSdp.getSdp()};return y.debug("send() | calling pc.setRemoteDescription() [answer:%o]",x),await this._pc.setRemoteDescription(x),P||(P=p.mid,h.mid=P),this._mapMidTransceiver.set(P,p),{localId:P,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 i=await this._pc.createOffer();y.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let n={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),y.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();y.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),y.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();y.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?y.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):y.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),y.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();y.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),y.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();y.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};y.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%ji.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=X.parse(n.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),y.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;y.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:m}=Jr.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??m??d.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(let o of e){let{trackId:c,onRtpReceiver:p}=o;if(p){let d=r.get(c),l=this._pc.getTransceivers().find(u=>u.mid===d);if(!l)throw new Error("transceiver not found");p(l.receiver)}}let n=await this._pc.createAnswer(),a=X.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=r.get(c),l=a.media.find(u=>String(u.mid)===d);ft.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l})}n={type:"answer",sdp:X.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),y.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,p=r.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(d)this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){y.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();y.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){y.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();y.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){y.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();y.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};y.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(r,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),m=X.parse(u.sdp),g=m.media.find(h=>h.type==="application");g.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),u={type:"answer",sdp:X.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=X.parse(this._pc.localDescription.sdp));let r=ft.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Go.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};Kt.ReactNative106=Yr});var qi=C(Je=>{"use strict";Object.defineProperty(Je,"__esModule",{value:!0});Je.Device=void 0;Je.detectDevice=Fi;Je.detectDeviceAsync=zi;var Qo=q(),Jo=G(),ve=J(),Qt=be(),W=ie(),Yo=oi(),Zo=Si(),Xo=Ti(),ec=Di(),tc=Oi(),rc=Ai(),w=new Qo.Logger("Device");function Fi(s,e){return w.debug("detectDevice()"),!s&&typeof navigator=="object"&&(s=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),$i(s,e)}async function zi(s,e){return w.debug("detectDeviceAsync()"),!s&&typeof navigator=="object"&&(s=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),$i(s,e)}var Zr=class s{_handlerFactory;_handlerName;_loaded=!1;_getSendExtendedRtpCapabilities;_recvRtpCapabilities;_sendRtpCapabilities;_canProduceByKind={audio:!1,video:!1};_sctpCapabilities;_observer=new Jo.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 zi(),!e))throw new ve.UnsupportedError("device not supported");return new s({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=Fi(),e)w.debug("constructor() | detected handler: %s",e);else throw new ve.UnsupportedError("device not supported");switch(e){case"Chrome111":{this._handlerFactory=Zo.Chrome111.createFactory();break}case"Chrome74":{this._handlerFactory=Xo.Chrome74.createFactory();break}case"Firefox120":{this._handlerFactory=ec.Firefox120.createFactory();break}case"Safari12":{this._handlerFactory=tc.Safari12.createFactory();break}case"ReactNative106":{this._handlerFactory=rc.ReactNative106.createFactory();break}default:throw new TypeError(`unknown handlerName "${e}"`)}}this._handlerName=this._handlerFactory.name}get handlerName(){return this._handlerName}get loaded(){return this._loaded}get rtpCapabilities(){return this.recvRtpCapabilities}get recvRtpCapabilities(){if(!this._loaded)throw new ve.InvalidStateError("not loaded");return this._recvRtpCapabilities}get sendRtpCapabilities(){if(!this._loaded)throw new ve.InvalidStateError("not loaded");return this._sendRtpCapabilities}get sctpCapabilities(){if(!this._loaded)throw new ve.InvalidStateError("not loaded");return this._sctpCapabilities}get observer(){return this._observer}async load({routerRtpCapabilities:e,preferLocalCodecsOrder:t=!1}){if(w.debug("load() [routerRtpCapabilities:%o]",e),this._loaded)throw new ve.InvalidStateError("already loaded");let r=Qt.clone(e);W.validateAndNormalizeRtpCapabilities(r);let{getNativeRtpCapabilities:i,getNativeSctpCapabilities:n}=this._handlerFactory,a=Qt.clone(await i({direction:"recvonly"}));w.debug("load() | got native receiving RTP capabilities:%o",a),W.validateAndNormalizeRtpCapabilities(a);let o=Qt.clone(await i({direction:"sendonly"}));w.debug("load() | got native sending RTP capabilities:%o",o),W.validateAndNormalizeRtpCapabilities(o),this._getSendExtendedRtpCapabilities=d=>Qt.clone(W.getExtendedRtpCapabilities(d,r,t));let c=W.getExtendedRtpCapabilities(a,r,!1);this._recvRtpCapabilities=W.getRecvRtpCapabilities(c),w.debug("load() | got receiving RTP capabilities:%o",this._recvRtpCapabilities),W.validateAndNormalizeRtpCapabilities(this._recvRtpCapabilities);let p=W.getExtendedRtpCapabilities(o,r,t);this._sendRtpCapabilities=W.getSendRtpCapabilities(p),w.debug("load() | got sending RTP capabilities:%o",this._sendRtpCapabilities),W.validateAndNormalizeRtpCapabilities(this._sendRtpCapabilities),this._canProduceByKind.audio=W.canSend("audio",this._sendRtpCapabilities),this._canProduceByKind.video=W.canSend("video",this._sendRtpCapabilities),this._sctpCapabilities=await n(),W.validateSctpCapabilities(this._sctpCapabilities),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 ve.InvalidStateError("not loaded");return this._canProduceByKind[e]}createSendTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:p}){return w.debug("createSendTransport()"),this.createTransport({direction:"send",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:p})}createRecvTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:p}){return w.debug("createRecvTransport()"),this.createTransport({direction:"recv",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:p})}createTransport({direction:e,id:t,iceParameters:r,iceCandidates:i,dtlsParameters:n,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:p,appData:d}){if(this._loaded){if(typeof t!="string")throw new TypeError("missing id");if(typeof r!="object")throw new TypeError("missing iceParameters");if(Array.isArray(i)){if(typeof n!="object")throw new TypeError("missing dtlsParameters");if(a&&typeof a!="object")throw new TypeError("wrong sctpParameters");if(d&&typeof d!="object")throw new TypeError("if given, appData must be an object")}else throw new TypeError("missing iceCandidates")}else throw new ve.InvalidStateError("not loaded");let l=new Yo.Transport({direction:e,id:t,iceParameters:r,iceCandidates:i,dtlsParameters:n,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:p,appData:d,handlerFactory:this._handlerFactory,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities,recvRtpCapabilities:this._recvRtpCapabilities,canProduceByKind:this._canProduceByKind});return this._observer.safeEmit("newtransport",l),l}};Je.Device=Zr;function $i(s,e){w.debug('detectDeviceImpl() [userAgent:"%s", userAgentData:%o]',s,e);let t=sc(s,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 r=ic(s);if(r){if(r>=120)return w.debug("detectDeviceImpl() | using Firefox120 handler"),"Firefox120";w.warn("detectDeviceImpl() | unsupported Firefox browser/version");return}let i=nc(s);if(i){if(i>=605)return w.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";w.warn("detectDeviceImpl() | unsupported desktop Safari browser/version");return}let n=ac(s);if(n){if(n>=605)return w.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";w.warn("detectDeviceImpl() | unsupported iOS Safari based browser/version");return}if(gt()){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]',s,e)}function sc(s,e){if(w.debug("getChromiumMajorVersion()"),Jt(s,e)){w.debug("getChromiumMajorVersion() | this is iOS => undefined");return}if(gt()){w.debug("getChromiumMajorVersion() | this is React-Native => undefined");return}if(e){let i=(Array.isArray(e.brands)?e.brands:[]).find(n=>n.brand==="Chromium");if(i){let n=Number(i.version);return w.debug(`getChromiumMajorVersion() | Chromium major version based on NavigatorUAData => ${n}`),n}}let t=s?.match(/\b(?:Chrome|Chromium)\/(\w+)/i);if(t?.[1]){let r=Number(t[1]);return w.debug(`getChromiumMajorVersion() | Chromium major version based on User-Agent => ${r}`),r}w.debug("getChromiumMajorVersion() | this is not Chromium => undefined")}function ic(s){if(w.debug("getFirefoxMajorVersion()"),Jt(s)){w.debug("getFirefoxMajorVersion() | this is iOS => undefined");return}if(gt()){w.debug("getFirefoxMajorVersion() | this is React-Native => undefined");return}let e=s?.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 nc(s){if(w.debug("getMacOSWebKitMajorVersion()"),Jt(s)){w.debug("getMacOSWebKitMajorVersion() | this is iOS => undefined");return}if(gt()){w.debug("getMacOSWebKitMajorVersion() | this is React-Native => undefined");return}if(!(s&&/\bSafari\b/i.test(s)&&!/\bChrome\b/i.test(s)&&!/\bChromium\b/i.test(s)&&!/\bFirefox\b/i.test(s))){w.debug("getMacOSWebKitMajorVersion() | this is not Safari => undefined");return}let t=s.match(/AppleWebKit\/(\w+)/i);if(t?.[1]){let r=Number(t[1]);return w.debug(`getMacOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${r}`),r}w.debug("getMacOSWebKitMajorVersion() | this is not WebKit => undefined")}function ac(s){if(w.debug("getIOSWebKitMajorVersion()"),!Jt(s)){w.debug("getIOSWebKitMajorVersion() | this is not iOS => undefined");return}if(gt()){w.debug("getIOSWebKitMajorVersion() | this is React-Native => undefined");return}let e=s?.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 Jt(s,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):s&&/iPad|iPhone|iPod/.test(s)?(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 gt(){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(Bi=>{"use strict";var xe=256,Zt=[],Yt;for(;xe--;)Zt[xe]=(xe+256).toString(16).substring(1);function oc(){var s=0,e,t="";if(!Yt||xe+16>256){for(Yt=Array(s=256);s--;)Yt[s]=256*Math.random()|0;s=xe=0}for(;s<16;s++)e=Yt[xe+s],s==6?t+=Zt[e&15|64]:s==8?t+=Zt[e&63|128]:t+=Zt[e],s&1&&s>1&&s<11&&(t+="-");return xe++,t}Bi.v4=oc});var Vi=C(Xt=>{"use strict";Object.defineProperty(Xt,"__esModule",{value:!0});Xt.FakeEventTarget=void 0;var Xr=class{listeners={};addEventListener(e,t,r){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof r=="object"&&r.once===!0}))}removeEventListener(e,t,r){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(i=>i.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new Error("invalid event object");let t=this.listeners[e.type];if(!t)return!0;for(let r of[...t]){try{r.callback.call(this,e)}catch(i){setTimeout(()=>{throw i},0)}r.once&&this.removeEventListener(e.type,r.callback)}return!e.defaultPrevented}};Xt.FakeEventTarget=Xr});var Hi=C(er=>{"use strict";Object.defineProperty(er,"__esModule",{value:!0});er.FakeEvent=void 0;var es=class{NONE=0;CAPTURING_PHASE=1;AT_TARGET=2;BUBBLING_PHASE=3;type;bubbles;cancelable;defaultPrevented=!1;composed=!1;currentTarget=null;eventPhase=this.NONE;isTrusted=!0;target=null;timeStamp=0;cancelBubble=!1;returnValue=!0;srcElement=null;constructor(e,t={}){this.type=e,this.bubbles=t.bubbles??!1,this.cancelable=t.cancelable??!1}preventDefault(){this.cancelable&&(this.defaultPrevented=!0)}stopPropagation(){}stopImmediatePropagation(){}composedPath(){return[]}initEvent(e,t,r){}};er.FakeEvent=es});var Gi=C(ts=>{"use strict";Object.defineProperty(ts,"__esModule",{value:!0});ts.clone=cc;function cc(s){if(s!==void 0)return Number.isNaN(s)?NaN:typeof structuredClone=="function"?structuredClone(s):JSON.parse(JSON.stringify(s))}});var Ki=C(rr=>{"use strict";Object.defineProperty(rr,"__esModule",{value:!0});rr.FakeMediaStreamTrack=void 0;var Wi=Ui(),dc=Vi(),Ye=Hi(),tr=Gi(),rs=class s extends dc.FakeEventTarget{#f;#l;#u;#e;#r;#t;#s;#h;#i;#m;#n;#a=null;#o=null;#c=null;#d=null;#p=null;constructor({kind:e,id:t,label:r,contentHint:i,enabled:n,muted:a,readyState:o,capabilities:c,constraints:p,settings:d,data:l}){super(),this.#f=t??(0,Wi.v4)(),this.#l=e,this.#u=r??"",this.#s=i??"",this.#r=n??!0,this.#t=a??!1,this.#e=o??"live",this.#h=c??{},this.#i=p??{},this.#m=d??{},this.#n=l??{}}get id(){return this.#f}get kind(){return this.#l}get label(){return this.#u}get contentHint(){return this.#s}set contentHint(e){this.#s=e}get enabled(){return this.#r}set enabled(e){let t=this.#r!==e;this.#r=e,t&&this.dispatchEvent(new Ye.FakeEvent("enabledchange"))}get muted(){return this.#t}get readyState(){return this.#e}get data(){return this.#n}set data(e){this.#n=e}get onmute(){return this.#a}set onmute(e){this.#a&&this.removeEventListener("mute",this.#a),this.#a=e,e&&this.addEventListener("mute",e)}get onunmute(){return this.#o}set onunmute(e){this.#o&&this.removeEventListener("unmute",this.#o),this.#o=e,e&&this.addEventListener("unmute",e)}get onended(){return this.#c}set onended(e){this.#c&&this.removeEventListener("ended",this.#c),this.#c=e,e&&this.addEventListener("ended",e)}get onenabledchange(){return this.#d}set onenabledchange(e){this.#d&&this.removeEventListener("enabledchange",this.#d),this.#d=e,e&&this.addEventListener("enabledchange",e)}get onstopped(){return this.#p}set onstopped(e){this.#p&&this.removeEventListener("stopped",this.#p),this.#p=e,e&&this.addEventListener("stopped",e)}addEventListener(e,t,r){super.addEventListener(e,t,r)}removeEventListener(e,t,r){super.removeEventListener(e,t,r)}stop(){this.#e!=="ended"&&(this.#e="ended",this.dispatchEvent(new Ye.FakeEvent("stopped")))}clone({id:e,data:t}={}){return new s({id:e??(0,Wi.v4)(),kind:this.#l,label:this.#u,contentHint:this.#s,enabled:this.#r,muted:this.#t,readyState:this.#e,capabilities:(0,tr.clone)(this.#h),constraints:(0,tr.clone)(this.#i),settings:(0,tr.clone)(this.#m),data:t??(0,tr.clone)(this.#n)})}getCapabilities(){return this.#h}getConstraints(){return this.#i}async applyConstraints(e={}){return this.#i=e,Promise.resolve()}getSettings(){return this.#m}remoteStop(){this.#e!=="ended"&&(this.#e="ended",this.dispatchEvent(new Ye.FakeEvent("stopped")),this.dispatchEvent(new Ye.FakeEvent("ended")))}remoteMute(){this.#t||(this.#t=!0,this.dispatchEvent(new Ye.FakeEvent("mute")))}remoteUnmute(){this.#t&&(this.#t=!1,this.dispatchEvent(new Ye.FakeEvent("unmute")))}};rr.FakeMediaStreamTrack=rs});var Qi=C(sr=>{"use strict";Object.defineProperty(sr,"__esModule",{value:!0});sr.FakeEventTarget=void 0;var ss=class{listeners={};addEventListener(e,t,r){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof r=="object"&&r.once===!0}))}removeEventListener(e,t,r){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(i=>i.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new Error("invalid event object");let t=this.listeners[e.type];if(!t)return!0;for(let r of[...t]){try{r.callback.call(this,e)}catch(i){setTimeout(()=>{throw i},0)}r.once&&this.removeEventListener(e.type,r.callback)}return!e.defaultPrevented}};sr.FakeEventTarget=ss});var Zi=C(nr=>{"use strict";Object.defineProperty(nr,"__esModule",{value:!0});nr.FakeHandler=void 0;var pc=Ki(),lc=G(),uc=q(),Ze=be(),is=ie(),Yi=J(),hc=Qi(),z=new uc.Logger("FakeHandler"),Ji="FakeHandler",ns=class s extends lc.EnhancedEventEmitter{_closed=!1;_fakeParameters;_getSendExtendedRtpCapabilities;_cname=`CNAME-${Ze.generateRandomNumber()}`;_defaultSendStreamId=`${Ze.generateRandomNumber()}`;_transportReady=!1;_nextLocalId=1;_tracks=new Map;_nextSctpStreamId=0;static createFactory(e){return{name:Ji,factory:t=>new s(t,e),getNativeRtpCapabilities:async({direction:t})=>(z.debug("getNativeRtpCapabilities() [direction:%o]",t),s.getLocalRtpCapabilities(e)),getNativeSctpCapabilities:async()=>(z.debug("getNativeSctpCapabilities()"),e.generateNativeSctpCapabilities())}}static getLocalRtpCapabilities(e){let t=e.generateNativeRtpCapabilities();return is.validateAndNormalizeRtpCapabilities(t),t}constructor({getSendExtendedRtpCapabilities:e},t){super(),z.debug("constructor()"),this._getSendExtendedRtpCapabilities=e,this._fakeParameters=t}get name(){return Ji}close(){z.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(),z.debug("updateIceServers()")}async restartIce(e){this.assertNotClosed(),z.debug("restartIce()")}async getTransportStats(){return this.assertNotClosed(),new Map}async send({track:e,streamId:t,encodings:r,codecOptions:i,codec:n}){this.assertNotClosed(),z.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),this._transportReady||await this.setupTransport({localDtlsRole:"server"});let a=s.getLocalRtpCapabilities(this._fakeParameters),o=this._getSendExtendedRtpCapabilities(a),c=is.getSendingRtpParameters(e.kind,o);c.codecs=is.reduceCodecs(c.codecs,n);let p=c.codecs.some(l=>/.+\/rtx$/i.test(l.mimeType));c.mid=`mid-${Ze.generateRandomNumber()}`,c.msid=`${t??"-"} ${e.id}`,r||(r=[{}]);for(let l of r)l.ssrc=Ze.generateRandomNumber(),p&&(l.rtx={ssrc:Ze.generateRandomNumber()});c.encodings=r,c.rtcp={cname:this._cname,reducedSize:!0,mux:!0},c.msid=`${t??this._defaultSendStreamId} ${e.id}`;let d=this._nextLocalId++;return this._tracks.set(d,e),{localId:String(d),rtpParameters:c}}async stopSending(e){if(z.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?z.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):z.debug("replaceTrack() [localId:%s, no track]",e),this._tracks.delete(Number(e)),this._tracks.set(Number(e),t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),z.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),z.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"}),z.debug("sendDataChannel()");let t=new ir({id:this._nextSctpStreamId++,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:e.label,protocol:e.protocol}),r={streamId:this._nextSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits};return{dataChannel:t,sctpStreamParameters:r}}async receive(e){this.assertNotClosed();let t=[];for(let r of e){let{trackId:i,kind:n}=r;this._transportReady||await this.setupTransport({localDtlsRole:"client"}),z.debug("receive() [trackId:%s, kind:%s]",i,n);let a=this._nextLocalId++,o=new pc.FakeMediaStreamTrack({kind:n});this._tracks.set(a,o),t.push({localId:String(a),track:o})}return t}async stopReceiving(e){if(!this._closed)for(let t of e)z.debug("stopReceiving() [localId:%s]",t),this._tracks.delete(Number(t))}async pauseReceiving(e){this.assertNotClosed()}async resumeReceiving(e){this.assertNotClosed()}async getReceiverStats(e){return this.assertNotClosed(),new Map}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){return this.assertNotClosed(),this._transportReady||await this.setupTransport({localDtlsRole:"client"}),z.debug("receiveDataChannel()"),{dataChannel:new ir({id:e.streamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:t,protocol:r})}}getDataChannelMaxMessageSize(){return 5e5}async setupTransport({localDtlsRole:e,localSdpObject:t}){let r=Ze.clone(this._fakeParameters.generateLocalDtlsParameters());e&&(r.role=e),this.emit("@connectionstatechange","connecting"),await new Promise((i,n)=>this.emit("@connect",{dtlsParameters:r},i,n)),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new Yi.InvalidStateError("method called in a closed handler")}};nr.FakeHandler=ns;var ir=class extends hc.FakeEventTarget{_id;_negotiated=!0;_ordered;_maxPacketLifeTime;_maxRetransmits;_label;_protocol;_readyState="connecting";_bufferedAmount=0;_bufferedAmountLowThreshold=0;_binaryType="arraybuffer";_onopen=null;_onclosing=null;_onclose=null;_onmessage=null;_onbufferedamountlow=null;_onerror=null;constructor({id:e,ordered:t=!0,maxPacketLifeTime:r=null,maxRetransmits:i=null,label:n="",protocol:a=""}){super(),z.debug(`constructor() [id:${e}, ordered:${t}, maxPacketLifeTime:${r}, maxRetransmits:${i}, label:${n}, protocol:${a}`),this._id=e,this._ordered=t,this._maxPacketLifeTime=r,this._maxRetransmits=i,this._label=n,this._protocol=a}get id(){return this._id}get negotiated(){return this._negotiated}get ordered(){return this._ordered}get maxPacketLifeTime(){return this._maxPacketLifeTime}get maxRetransmits(){return this._maxRetransmits}get label(){return this._label}get protocol(){return this._protocol}get readyState(){return this._readyState}get bufferedAmount(){return this._bufferedAmount}get bufferedAmountLowThreshold(){return this._bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._bufferedAmountLowThreshold=e}get binaryType(){return this._binaryType}set binaryType(e){this._binaryType=e}get onopen(){return this._onopen}set onopen(e){this._onopen&&this.removeEventListener("open",this._onopen),this._onopen=e,e&&this.addEventListener("open",e)}get onclosing(){return this._onclosing}set onclosing(e){this._onclosing&&this.removeEventListener("closing",this._onclosing),this._onclosing=e,e&&this.addEventListener("closing",e)}get onclose(){return this._onclose}set onclose(e){this._onclose&&this.removeEventListener("close",this._onclose),this._onclose=e,e&&this.addEventListener("close",e)}get onmessage(){return this._onmessage}set onmessage(e){this._onmessage&&this.removeEventListener("message",this._onmessage),this._onmessage=e,e&&this.addEventListener("message",e)}get onbufferedamountlow(){return this._onbufferedamountlow}set onbufferedamountlow(e){this._onbufferedamountlow&&this.removeEventListener("bufferedamountlow",this._onbufferedamountlow),this._onbufferedamountlow=e,e&&this.addEventListener("bufferedamountlow",e)}get onerror(){return this._onerror}set onerror(e){this._onerror&&this.removeEventListener("error",this._onerror),this._onerror=e,e&&this.addEventListener("error",e)}addEventListener(e,t,r){super.addEventListener(e,t,r)}removeEventListener(e,t,r){super.removeEventListener(e,t,r)}close(){["closing","closed"].includes(this._readyState)||(this._readyState="closed")}send(e){if(this._readyState!=="open")throw new Yi.InvalidStateError("not open")}}});var Xi=C(se=>{"use strict";Object.defineProperty(se,"__esModule",{value:!0});se.generateRouterRtpCapabilities=mc;se.generateNativeRtpCapabilities=fc;se.generateNativeSctpCapabilities=gc;se.generateLocalDtlsParameters=_c;se.generateTransportRemoteParameters=vc;se.generateProducerRemoteParameters=wc;se.generateConsumerRemoteParameters=yc;se.generateDataProducerRemoteParameters=bc;se.generateDataConsumerRemoteParameters=Sc;var U=be();function K(){return String(U.generateRandomNumber())}function mc(){return U.deepFreeze({codecs:[{mimeType:"audio/opus",kind:"audio",preferredPayloadType:100,clockRate:48e3,channels:2,rtcpFeedback:[{type:"transport-cc"}],parameters:{useinbandfec:1,foo:"bar"}},{mimeType:"video/VP8",kind:"video",preferredPayloadType:101,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"x-google-start-bitrate":1500}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:102,clockRate:9e4,rtcpFeedback:[],parameters:{apt:101}},{mimeType:"video/H264",kind:"video",preferredPayloadType:103,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"level-asymmetry-allowed":1,"packetization-mode":1,"profile-level-id":"42e01f"}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:104,clockRate:9e4,rtcpFeedback:[],parameters:{apt:103}},{mimeType:"video/VP9",kind:"video",preferredPayloadType:105,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"profile-id":0,"x-google-start-bitrate":1500}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:106,clockRate:9e4,rtcpFeedback:[],parameters:{apt:105}}],headerExtensions:[{kind:"audio",uri:"urn:ietf:params:rtp-hdrext:sdes:mid",preferredId:1,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:mid",preferredId:1,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id",preferredId:2,preferredEncrypt:!1,direction:"recvonly"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id",preferredId:3,preferredEncrypt:!1,direction:"recvonly"},{kind:"audio",uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",preferredId:4,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",preferredId:4,preferredEncrypt:!1,direction:"sendrecv"},{kind:"audio",uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",preferredId:5,preferredEncrypt:!1,direction:"recvonly"},{kind:"video",uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",preferredId:5,preferredEncrypt:!1,direction:"sendrecv"},{kind:"audio",uri:"urn:ietf:params:rtp-hdrext:ssrc-audio-level",preferredId:10,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:3gpp:video-orientation",preferredId:11,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:toffset",preferredId:12,preferredEncrypt:!1,direction:"sendrecv"}]})}function fc(){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 gc(){return U.deepFreeze({numStreams:{OS:2048,MIS:2048}})}function _c(){return U.deepFreeze({fingerprints:[{algorithm:"sha-256",value:"82:5A:68:3D:36:C3:0A:DE:AF:E7:32:43:D2:88:83:57:AC:2D:65:E5:80:C4:B6:FB:AF:1A:A0:21:9F:6D:0C:AD"}],role:"auto"})}function vc(){return{id:K(),iceParameters:U.deepFreeze({iceLite:!0,password:"yku5ej8nvfaor28lvtrabcx0wkrpkztz",usernameFragment:"h3hk1iz6qqlnqlne"}),iceCandidates:U.deepFreeze([{foundation:"udpcandidate",address:"9.9.9.9",ip:"9.9.9.9",port:40533,priority:1078862079,protocol:"udp",type:"host",tcpType:"passive"},{foundation:"udpcandidate",address:"9.9.9.9",ip:"9:9:9:9:9:9",port:41333,priority:1078862089,protocol:"udp",type:"host",tcpType:"passive"}]),dtlsParameters:U.deepFreeze({fingerprints:[{algorithm:"sha-256",value:"A9:F4:E0:D2:74:D3:0F:D9:CA:A5:2F:9F:7F:47:FA:F0:C4:72:DD:73:49:D0:3B:14:90:20:51:30:1B:90:8E:71"},{algorithm:"sha-384",value:"03:D9:0B:87:13:98:F6:6D:BC:FC:92:2E:39:D4:E1:97:32:61:30:56:84:70:81:6E:D1:82:97:EA:D9:C1:21:0F:6B:C5:E7:7F:E1:97:0C:17:97:6E:CF:B3:EF:2E:74:B0"},{algorithm:"sha-512",value:"84:27:A4:28:A4:73:AF:43:02:2A:44:68:FF:2F:29:5C:3B:11:9A:60:F4:A8:F0:F5:AC:A0:E3:49:3E:B1:34:53:A9:85:CE:51:9B:ED:87:5E:B8:F4:8E:3D:FA:20:51:B8:96:EE:DA:56:DC:2F:5C:62:79:15:23:E0:21:82:2B:2C"}],role:"auto"}),sctpParameters:U.deepFreeze({port:5e3,OS:2048,MIS:2048,maxMessageSize:2e6})}}function wc(){return U.deepFreeze({id:K()})}function yc({id:s,codecMimeType:e}={}){switch(e){case"audio/opus":return{id:s??K(),producerId:K(),kind:"audio",rtpParameters:U.deepFreeze({codecs:[{mimeType:"audio/opus",payloadType:100,clockRate:48e3,channels:2,rtcpFeedback:[{type:"transport-cc"}],parameters:{useinbandfec:1,foo:"bar"}}],encodings:[{ssrc:46687003}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:ietf:params:rtp-hdrext:ssrc-audio-level",id:10}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"audio/ISAC":return{id:s??K(),producerId:K(),kind:"audio",rtpParameters:U.deepFreeze({codecs:[{mimeType:"audio/ISAC",payloadType:111,clockRate:16e3,channels:1,rtcpFeedback:[{type:"transport-cc"}],parameters:{}}],encodings:[{ssrc:46687004}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"video/VP8":return{id:s??K(),producerId:K(),kind:"video",rtpParameters:U.deepFreeze({codecs:[{mimeType:"video/VP8",payloadType:101,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"x-google-start-bitrate":1500}},{mimeType:"video/rtx",payloadType:102,clockRate:9e4,rtcpFeedback:[],parameters:{apt:101}}],encodings:[{ssrc:99991111,rtx:{ssrc:99991112}}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",id:4},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:3gpp:video-orientation",id:11},{uri:"urn:ietf:params:rtp-hdrext:toffset",id:12}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"video/H264":return{id:s??K(),producerId:K(),kind:"video",rtpParameters:U.deepFreeze({codecs:[{mimeType:"video/H264",payloadType:103,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"level-asymmetry-allowed":1,"packetization-mode":1,"profile-level-id":"42e01f"}},{mimeType:"video/rtx",payloadType:104,clockRate:9e4,rtcpFeedback:[],parameters:{apt:103}}],encodings:[{ssrc:99991113,rtx:{ssrc:99991114}}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",id:4},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:3gpp:video-orientation",id:11},{uri:"urn:ietf:params:rtp-hdrext:toffset",id:12}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};default:throw new TypeError(`unknown codecMimeType '${e}'`)}}function bc(){return U.deepFreeze({id:K()})}function Sc({id:s}={}){return{id:s??K(),dataProducerId:K(),sctpStreamParameters:U.deepFreeze({streamId:666,maxPacketLifeTime:5e3,maxRetransmits:void 0})}}});var $r=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 Cc=tt();O.debug=Cc.default;O.types=Rs();O.version="3.20.0";var as=qi();Object.defineProperty(O,"Device",{enumerable:!0,get:function(){return as.Device}});Object.defineProperty(O,"detectDevice",{enumerable:!0,get:function(){return as.detectDevice}});Object.defineProperty(O,"detectDeviceAsync",{enumerable:!0,get:function(){return as.detectDeviceAsync}});var Rc=Te();Object.defineProperty(O,"parseScalabilityMode",{enumerable:!0,get:function(){return Rc.parse}});O.ortc=ie();O.enhancedEvents=G();var Tc=Zi();Object.defineProperty(O,"FakeHandler",{enumerable:!0,get:function(){return Tc.FakeHandler}});O.testFakeParameters=Xi()});var tn=C((Od,os)=>{"use strict";var Ec=Object.prototype.hasOwnProperty,V="~";function _t(){}Object.create&&(_t.prototype=Object.create(null),new _t().__proto__||(V=!1));function xc(s,e,t){this.fn=s,this.context=e,this.once=t||!1}function en(s,e,t,r,i){if(typeof t!="function")throw new TypeError("The listener must be a function");var n=new xc(t,r||s,i),a=V?V+e:e;return s._events[a]?s._events[a].fn?s._events[a]=[s._events[a],n]:s._events[a].push(n):(s._events[a]=n,s._eventsCount++),s}function ar(s,e){--s._eventsCount===0?s._events=new _t:delete s._events[e]}function $(){this._events=new _t,this._eventsCount=0}$.prototype.eventNames=function(){var e=[],t,r;if(this._eventsCount===0)return e;for(r in t=this._events)Ec.call(t,r)&&e.push(V?r.slice(1):r);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};$.prototype.listeners=function(e){var t=V?V+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var i=0,n=r.length,a=new Array(n);i<n;i++)a[i]=r[i].fn;return a};$.prototype.listenerCount=function(e){var t=V?V+e:e,r=this._events[t];return r?r.fn?1:r.length:0};$.prototype.emit=function(e,t,r,i,n,a){var o=V?V+e:e;if(!this._events[o])return!1;var c=this._events[o],p=arguments.length,d,l;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),p){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,r),!0;case 4:return c.fn.call(c.context,t,r,i),!0;case 5:return c.fn.call(c.context,t,r,i,n),!0;case 6:return c.fn.call(c.context,t,r,i,n,a),!0}for(l=1,d=new Array(p-1);l<p;l++)d[l-1]=arguments[l];c.fn.apply(c.context,d)}else{var u=c.length,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,r);break;case 4:c[l].fn.call(c[l].context,t,r,i);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,r){return en(this,e,t,r,!1)};$.prototype.once=function(e,t,r){return en(this,e,t,r,!0)};$.prototype.removeListener=function(e,t,r,i){var n=V?V+e:e;if(!this._events[n])return this;if(!t)return ar(this,n),this;var a=this._events[n];if(a.fn)a.fn===t&&(!i||a.once)&&(!r||a.context===r)&&ar(this,n);else{for(var o=0,c=[],p=a.length;o<p;o++)(a[o].fn!==t||i&&!a[o].once||r&&a[o].context!==r)&&c.push(a[o]);c.length?this._events[n]=c.length===1?c[0]:c:ar(this,n)}return this};$.prototype.removeAllListeners=function(e){var t;return e?(t=V?V+e:e,this._events[t]&&ar(this,t)):(this._events=new _t,this._eventsCount=0),this};$.prototype.off=$.prototype.removeListener;$.prototype.addListener=$.prototype.on;$.prefixed=V;$.EventEmitter=$;typeof os<"u"&&(os.exports=$)});var jc={};ls(jc,{App:()=>cn,Session:()=>Pe,createStore:()=>ln,videoStream:()=>un});module.exports=hs(jc);var fe=class{_handlers=new Map;_ws;_onMessage;_onOpen;_listeningForOpen=!1;_pendingSends=[];_disposed=!1;constructor(e){this._ws=e,this._onMessage=t=>{let r;try{r=JSON.parse(typeof t.data=="string"?t.data:"")}catch{console.warn("[ChannelMultiplexer] Failed to parse WebSocket message as JSON");return}if(!r.channel)return;let i=this._handlers.get(r.channel);if(i)for(let n of i)n(r)},this._ws.addEventListener("message",this._onMessage),this._onOpen=()=>{this.flushPendingSends()}}on(e,t){let r=this._handlers.get(e);return r||(r=new Set,this._handlers.set(e,r)),r.add(t),()=>{r.delete(t),r.size===0&&this._handlers.delete(e)}}emit(e,t){if(this._disposed)return;let r=JSON.stringify({channel:e,...t});if(this._ws.readyState===WebSocket.OPEN){this._ws.send(r);return}this._ws.readyState===WebSocket.CONNECTING&&(this._pendingSends.push(r),this.listenForOpen())}dispose(){this._disposed=!0,this._pendingSends=[],this._handlers.clear(),this._ws.removeEventListener("message",this._onMessage),this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1}flushPendingSends(){if(this._disposed||this._ws.readyState!==WebSocket.OPEN)return;this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1;let e=this._pendingSends;this._pendingSends=[];for(let t of e)this._ws.send(t)}listenForOpen(){this._listeningForOpen||(this._listeningForOpen=!0,this._ws.addEventListener("open",this._onOpen))}};function cr(s,e){let t={...s};for(let r of Object.keys(e)){let i=e[r],n=t[r];i!==null&&typeof i=="object"&&!Array.isArray(i)&&n!==null&&typeof n=="object"&&!Array.isArray(n)?t[r]=cr(n,i):t[r]=i}return t}function wn(s,e){let t=e.split("."),r=s;for(let i of t){if(r==null||typeof r!="object")return;r=r[i]}return r}var wt=class{_state={};_listeners=new Set;_key;_sessionId;_multiplexer;constructor(e,t,r){this._key=e,this._sessionId=t,this._multiplexer=r,this._multiplexer.on(this._channel,i=>{if(i.type==="doc_update"&&i.patch&&typeof i.patch=="object"){this._state=cr(this._state,i.patch);let n={...this._state};for(let a of this._listeners)a(n)}})}get _channel(){return`session:${this._sessionId}:doc:${this._key}`}set(e){this._state=cr(this._state,e),this._multiplexer.emit(this._channel,{type:"doc_update",patch:e,snapshot:this._state});let t={...this._state};for(let r of this._listeners)r(t)}get(e,t){return e?wn(this._state,e)??t:{...this._state}}on(e,t){return this._listeners.add(t),()=>this._listeners.delete(t)}};var dr=class{constructor(e,t){this._name=e;this._transport=t;this._track=this._transport.getTrackByName(this._name)??null,this._unsubscribeTransport=this._transport.on("track",()=>{let r=this._transport.getTrackByName(this._name)??null;r!==this._track&&this._setTrack(r)})}_name;_transport;_track=null;_handlers=new Map;_unsubscribeTransport=null;get track(){let e=this._transport.getTrackByName(this._name)??this._track;return e!==this._track&&this._setTrack(e),this._track}async attach(e){await this._transport.addTrack(e)}async detach(){this._transport.removeTrack()}async seek(e){if(e!=="live"&&(!Number.isFinite(e)||e<0))throw new Error('[urun] stream.seek target must be "live" or a non-negative number of seconds');this._transport.seekStream(this._name,e)}on(e,t){let r=this._handlers.get(e);return r||(r=new Set,this._handlers.set(e,r)),r.add(t),()=>{r?.delete(t),r?.size===0&&this._handlers.delete(e)}}dispose(){this._unsubscribeTransport?.(),this._unsubscribeTransport=null,this._handlers.clear()}_setTrack(e){this._track=e,e&&e.addEventListener("ended",()=>{this._track===e&&this._setTrack(null)},{once:!0});let t=this._handlers.get("track");if(t)for(let r of t)r(e)}},Pe=class{_sessionId;_multiplexer;_transport;_docs=new Map;_streams=new Map;constructor(e,t,r){this._sessionId=e,this._multiplexer=t,this._transport=r}get id(){return this._sessionId}stream(e){let t=this._streams.get(e);return t||(t=new dr(e,this._transport),this._streams.set(e,t)),t}doc(e){let t=this._docs.get(e);return t||(t=new wt(e,this._sessionId,this._multiplexer),this._docs.set(e,t)),t}disconnect(){for(let e of this._streams.values())e.dispose();this._streams.clear(),this._transport.disconnect()}};var nn=et($r());var cs=et(tn(),1);var rn=[1e3,2e3,4e3,8e3,3e4],sn=5,kc=15e3,or=class{_state="disconnected";_sessionId=null;_tracks=new Map;_tracksByName=new Map;_options;_emitter=new cs.default;_ws=null;_device=null;_recvTransport=null;_sendTransport=null;_consumers=new Map;_audioProducer=null;_pendingProduce=null;_multiplexer=null;_reconnectAttempts=0;_intentionalDisconnect=!1;_reconnectTimer=null;_generation=0;get state(){return this._state}get sessionId(){return this._sessionId}get tracks(){return this._tracks}get multiplexer(){return this._multiplexer}get isOpen(){return this._ws?.readyState===WebSocket.OPEN}getTrackByName(e){return this._tracksByName.get(e)}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)}async connect(e){this._intentionalDisconnect=!1;let t=++this._generation;this._setState("connecting");let r=this._connectUrls(),i=null;for(let n of r){if(t!==this._generation||this._intentionalDisconnect)throw new Error("TransportSession: connect cancelled");try{await this._connectOnce(n,t,e);return}catch(a){i=a instanceof Error?a:new Error(String(a)),this._cleanupSocket()}}throw this._setState("failed"),i??new Error("TransportSession: connect failed")}disconnect(){if(this._generation+=1,this._intentionalDisconnect=!0,this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null),this._audioProducer){this._send({type:"stopAudio"});try{this._audioProducer.close()}catch{}this._audioProducer=null}for(let e of this._consumers.values())try{e.close()}catch{}if(this._consumers.clear(),this._sendTransport){try{this._sendTransport.close()}catch{}this._sendTransport=null}if(this._recvTransport){try{this._recvTransport.close()}catch{}this._recvTransport=null}if(this._pendingProduce&&(clearTimeout(this._pendingProduce.timeoutId),this._pendingProduce.reject(new Error("TransportSession: disconnected")),this._pendingProduce=null),this._device=null,this._multiplexer&&(this._multiplexer.dispose(),this._multiplexer=null),this._ws){let e=this._ws;this._ws=null;try{e.close(1e3,"intentional disconnect")}catch{}}this._tracks.clear(),this._tracksByName.clear(),this._setState("disconnected"),this._emitter.emit("disconnected")}on(e,t){return this._emitter.on(e,t),()=>{this._emitter.off(e,t)}}sendInput(e,t){this._send({type:"input",data:e,sequence:t})}async addTrack(e){if(!this._sendTransport)throw new Error("TransportSession: send transport not ready");this._audioProducer=await this._sendTransport.produce({track:e,codecOptions:{opusStereo:!1,opusDtx:!1,opusFec:!1}})}removeTrack(){this._audioProducer&&(this._send({type:"stopAudio"}),this._audioProducer.close(),this._audioProducer=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"produced":if(this._pendingProduce){let t=this._pendingProduce;this._pendingProduce=null,clearTimeout(t.timeoutId),t.resolve(e.id)}break;case"started":this._emitter.emit("started");break}}async _onRouterCapabilities(e){let t=new nn.Device;await t.load({routerRtpCapabilities:e}),this._device=t,this._send({type:"rtpCapabilities",rtpCapabilities:t.rtpCapabilities})}async _onCreateRecvTransport(e){if(!this._device)return;let t=this._device.createRecvTransport({id:e.id,iceParameters:e.iceParameters,iceCandidates:e.iceCandidates,dtlsParameters:e.dtlsParameters,iceServers:[{urls:"stun:stun.l.google.com:19302"},{urls:"stun:stun1.l.google.com:19302"}]}),r=this._generation;t.on("connect",({dtlsParameters:i},n,a)=>{try{this._send({type:"connectTransport",transportId:t.id,dtlsParameters:i}),n()}catch(o){a(o)}}),t.on("connectionstatechange",i=>{r===this._generation&&(this._intentionalDisconnect&&i==="closed"||(i==="failed"||i==="closed")&&this._emitter.emit("error",new Error(`media transport ${i}`)))}),this._recvTransport=t}async _onCreateSendTransport(e){if(!this._device)return;let t=this._device.createSendTransport({id:e.id,iceParameters:e.iceParameters,iceCandidates:e.iceCandidates,dtlsParameters:e.dtlsParameters,iceServers:[{urls:"stun:stun.l.google.com:19302"},{urls:"stun:stun1.l.google.com:19302"}]}),r=this._generation;t.on("connect",({dtlsParameters:i},n,a)=>{try{this._send({type:"connectSendTransport",transportId:t.id,dtlsParameters:i}),n()}catch(o){a(o)}}),t.on("produce",({kind:i,rtpParameters:n},a,o)=>{if(this._pendingProduce){o(new Error("produce already pending"));return}let c=setTimeout(()=>{let p=this._pendingProduce;!p||p.timeoutId!==c||(this._pendingProduce=null,p.reject(new Error("Produce timed out")))},15e3);this._pendingProduce={timeoutId:c,resolve:p=>{a({id:p})},reject:o};try{this._send({type:"produce",kind:i,rtpParameters:n})}catch(p){this._pendingProduce?.timeoutId===c&&(this._pendingProduce=null,clearTimeout(c)),o(p)}}),t.on("connectionstatechange",i=>{r===this._generation&&(this._intentionalDisconnect&&i==="closed"||(i==="failed"||i==="closed")&&this._emitter.emit("error",new Error(`media send transport ${i}`)))}),this._sendTransport=t,this._emitter.emit("audioTransportReady")}async _onConsume(e){if(!this._recvTransport)return;let t=await this._recvTransport.consume({id:e.id,producerId:e.producerId,kind:e.kind,rtpParameters:e.rtpParameters});this._consumers.set(t.id,t),this._tracks.set(t.track.id,t.track);let r=e.streamName??e.label;r&&this._tracksByName.set(r,t.track),this._emitter.emit("track",t.track),this._send({type:"resumeConsumer",consumerId:t.id})}_attemptReconnect(e){if(this._intentionalDisconnect)return;if(this._reconnectAttempts>=sn){this._setState("failed"),this._emitter.emit("error",new Error(`Failed after ${sn} attempts`));return}let t=rn[Math.min(this._reconnectAttempts,rn.length-1)];this._reconnectAttempts++,this._reconnectTimer=setTimeout(async()=>{this._cleanupMedia();try{await this.connect(e)}catch{}},t)}_connectUrls(){let e=[],t=r=>{if(!r)return;let i=this._sessionId?`${r}${r.includes("?")?"&":"?"}sessionId=${encodeURIComponent(this._sessionId)}`:r;e.includes(i)||e.push(i)};t(this._options.url);for(let r of this._options.fallbackUrls??[])t(r);return e}_connectOnce(e,t,r){return new Promise((i,n)=>{let a=!1,o=!1,c=null,p=new WebSocket(e);this._ws=p;let d=l=>{o||this._ws!==p||t!==this._generation||(o=!0,c&&clearTimeout(c),n(l))};c=setTimeout(()=>{try{p.close()}catch{}d(new Error("TransportSession: connect timed out"))},kc),p.onopen=()=>{o||t!==this._generation||(a=!0,c&&clearTimeout(c),this._multiplexer=new fe(p),p.send(JSON.stringify(this._startMessage(r))),this._reconnectAttempts=0,this._setState("connected"),this._emitter.emit("connected"),o=!0,i())},p.onerror=()=>{a||d(new Error("WebSocket connection error"))},p.onclose=()=>{if(!(this._ws!==p||t!==this._generation)){if(!a){d(new Error("WebSocket closed before connecting"));return}c&&clearTimeout(c),this._setState("disconnected"),this._intentionalDisconnect||(this._emitter.emit("disconnected"),this._attemptReconnect(r))}},p.onmessage=l=>{if(!(this._ws!==p||t!==this._generation)&&typeof l.data=="string")try{this._handleMessage(JSON.parse(l.data))}catch(u){this._emitter.emit("error",u instanceof Error?u:new Error(String(u)))}}})}_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),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._ws)return;let e=this._ws;this._ws=null;try{e.close()}catch{}}_cleanupMedia(){for(let e of this._consumers.values())try{e.close()}catch{}if(this._consumers.clear(),this._audioProducer){try{this._audioProducer.close()}catch{}this._audioProducer=null}if(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}};var Pc="session-api.prod.cloud.urun.sh",Dc=["https://session-api.use2.prod.cloud.urun.sh","https://session-api.usw2.prod.cloud.urun.sh"];function an(s){return s.trim().replace(/\/+$/,"")}function Lc(s,e){let t=[],r=i=>{if(!i)return;let n=an(i);n&&!t.includes(n)&&t.push(n)};r(s);for(let i of e??[])r(i);for(let i of Ic(s))r(i);return t}function ds(s){return an(s).replace(/^http/,"ws")+"/ws"}function on(s,e){return Lc(s,e).map(ds)}function Ic(s){try{return new URL(s).hostname!==Pc?[]:Dc}catch{return[]}}var Mc=new Set(["then","catch","finally","toJSON",Symbol.toPrimitive]);function Oc(s,e){let t=()=>{s.send(JSON.stringify(e))};if(s.readyState===WebSocket.OPEN){t();return}if(s.readyState===WebSocket.CONNECTING){let r=()=>{s.removeEventListener("open",r),t()};s.addEventListener("open",r)}}function cn(s,e){let t=ds(e.baseUrl),r=new WebSocket(t),i=new fe(r),n=on(e.baseUrl,e.fallbackUrls);return new Proxy({},{get(a,o){if(!(Mc.has(o)||typeof o!="string"))return c=>{let p=c??{},d=`s_${Date.now()}_${Math.random().toString(36).slice(2)}`,l=new or({url:t,fallbackUrls:n.filter(u=>u!==t),orgId:e.orgId,jwt:e.jwt,authProvider:e.authProvider,sessionId:d});return l.connect({app:s,functionName:o,args:p}).catch(u=>{console.error(`[urun] Failed to connect session for ${o}:`,u)}),Oc(r,{type:"app.call",app:s,fn:o,args:p,sessionId:d,orgId:e.orgId,jwt:e.jwt,authProvider:e.authProvider}),new Pe(d,i,l)}}})}var dn=3e4,pn="stream:",ps=class{_ws;_multiplexer;_pendingRpc=new Map;_rpcId=0;constructor(e,t){this._ws=e,this._multiplexer=t,this._ws.addEventListener("message",r=>{let i;try{i=JSON.parse(typeof r.data=="string"?r.data:"")}catch{return}if(i.rpcId&&this._pendingRpc.has(i.rpcId)){let n=this._pendingRpc.get(i.rpcId);this._pendingRpc.delete(i.rpcId),clearTimeout(n.timer),i.error?n.reject(new Error(i.error)):n.resolve(i.result)}})}async get(e){return this._sendRpc("store.get",{key:e})}async has(e){return await this._sendRpc("store.has",{key:e})}on(e,t){let r=`${pn}${e}`;return this._multiplexer.on(r,i=>{t(i)})}emit(e,t){let r=`${pn}${e}`,i=typeof t=="object"&&t!==null&&!Array.isArray(t)?t:{data:t};this._multiplexer.emit(r,i)}_getInternals(){return{multiplexer:this._multiplexer,ws:this._ws}}_sendRpc(e,t){return new Promise((r,i)=>{if(!this._ws||this._ws.readyState!==WebSocket.OPEN){i(new Error("WebSocket not open"));return}let n=String(++this._rpcId),a=setTimeout(()=>{this._pendingRpc.has(n)&&(this._pendingRpc.delete(n),i(new Error(`RPC request "${e}" timed out after ${dn}ms`)))},dn);this._pendingRpc.set(n,{resolve:r,reject:i,timer:a}),this._ws.send(JSON.stringify({rpcId:n,type:e,...t}))})}};function ln(s){let r=`${s.baseUrl.replace(/\/$/,"").replace(/^http/,"ws")}/store/${encodeURIComponent(s.orgId)}`,i=new WebSocket(r);(s.jwt||s.apiKey)&&i.addEventListener("open",()=>{i.send(JSON.stringify({type:"auth",orgId:s.orgId,jwt:s.jwt,authProvider:s.authProvider,apiKey:s.apiKey}))});let n=new fe(i);return new ps(i,n)}var Nc='video/mp4; codecs="avc1.42E01E"';function un(s,e){let t=e?.codec??Nc,r=document.createElement("video");r.muted=!0,r.playsInline=!0;let i=new MediaSource,n=URL.createObjectURL(i);r.src=n,i.addEventListener("sourceopen",()=>{let u;try{u=i.addSourceBuffer(t)}catch(f){throw f instanceof DOMException&&f.name==="NotSupportedError"?new Error(`Codec not supported: "${t}". Ensure the codec string matches the fMP4 container format. Common values: video/mp4; codecs="avc1.42E01E" (H.264 Baseline), video/mp4; codecs="avc1.4D401F" (H.264 Main).`):f}let m=s.getReader();function g(){return u.updating?new Promise(f=>{u.addEventListener("updateend",()=>f(),{once:!0})}):Promise.resolve()}async function h(){try{for(;;){let{done:f,value:v}=await m.read();if(f){await g(),i.readyState==="open"&&i.endOfStream();return}await g();try{u.appendBuffer(v)}catch(E){if(E instanceof DOMException&&E.name==="QuotaExceededError"){let k=u.buffered;if(k.length>0){let P=k.start(k.length-1);u.remove(0,P),await g(),u.appendBuffer(v)}else throw E}else throw E}}}catch{if(i.readyState==="open")try{i.endOfStream("decode")}catch{}}}h()}),r.play().catch(()=>{});let a=r,o=a.captureStream??a.mozCaptureStream;if(!o)throw new Error("captureStream() is not supported in this browser. videoStream() requires HTMLMediaElement.captureStream() support.");let c=o.call(r),p=c.getTracks(),d=0,l=p.length;if(l===0)r.addEventListener("emptied",()=>{URL.revokeObjectURL(n)},{once:!0});else for(let u of p)u.addEventListener("ended",()=>{d++,d>=l&&URL.revokeObjectURL(n)});return c}0&&(module.exports={App,Session,createStore,videoStream});
|