@urun-sh/core 0.2.57 → 0.2.59

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.
@@ -1,3 +1,3 @@
1
- "use strict";var _a=Object.create;var Pt=Object.defineProperty;var va=Object.getOwnPropertyDescriptor;var wa=Object.getOwnPropertyNames;var ya=Object.getPrototypeOf,ba=Object.prototype.hasOwnProperty;var E=(s,e)=>()=>{try{return e||s((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}},Sa=(s,e)=>{for(var t in e)Pt(s,t,{get:e[t],enumerable:!0})},Fs=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of wa(e))!ba.call(s,n)&&n!==t&&Pt(s,n,{get:()=>e[n],enumerable:!(r=va(e,n))||r.enumerable});return s};var kr=(s,e,t)=>(t=s!=null?_a(ya(s)):{},Fs(e||!s||!s.__esModule?Pt(t,"default",{value:s,enumerable:!0}):t,s)),Ra=s=>Fs(Pt({},"__esModule",{value:!0}),s);var $s=E((kl,qs)=>{"use strict";var Oe=1e3,Ae=Oe*60,Ne=Ae*60,Ce=Ne*24,Ca=Ce*7,Ta=Ce*365.25;qs.exports=function(s,e){e=e||{};var t=typeof s;if(t==="string"&&s.length>0)return ka(s);if(t==="number"&&isFinite(s))return e.long?Pa(s):Ea(s);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(s))};function ka(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*Ta;case"weeks":case"week":case"w":return t*Ca;case"days":case"day":case"d":return t*Ce;case"hours":case"hour":case"hrs":case"hr":case"h":return t*Ne;case"minutes":case"minute":case"mins":case"min":case"m":return t*Ae;case"seconds":case"second":case"secs":case"sec":case"s":return t*Oe;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:return}}}}function Ea(s){var e=Math.abs(s);return e>=Ce?Math.round(s/Ce)+"d":e>=Ne?Math.round(s/Ne)+"h":e>=Ae?Math.round(s/Ae)+"m":e>=Oe?Math.round(s/Oe)+"s":s+"ms"}function Pa(s){var e=Math.abs(s);return e>=Ce?xt(s,e,Ce,"day"):e>=Ne?xt(s,e,Ne,"hour"):e>=Ae?xt(s,e,Ae,"minute"):e>=Oe?xt(s,e,Oe,"second"):s+" ms"}function xt(s,e,t,r){var n=e>=t*1.5;return Math.round(s/t)+" "+r+(n?"s":"")}});var Bs=E((El,Us)=>{"use strict";function xa(s){t.debug=t,t.default=t,t.coerce=c,t.disable=a,t.enable=n,t.enabled=o,t.humanize=$s(),t.destroy=l,Object.keys(s).forEach(d=>{t[d]=s[d]}),t.names=[],t.skips=[],t.formatters={};function e(d){let p=0;for(let u=0;u<d.length;u++)p=(p<<5)-p+d.charCodeAt(u),p|=0;return t.colors[Math.abs(p)%t.colors.length]}t.selectColor=e;function t(d){let p,u=null,h,m;function f(...g){if(!f.enabled)return;let _=f,v=Number(new Date),T=v-(p||v);_.diff=T,_.prev=p,_.curr=v,p=v,g[0]=t.coerce(g[0]),typeof g[0]!="string"&&g.unshift("%O");let P=0;g[0]=g[0].replace(/%([a-zA-Z%])/g,(D,$)=>{if(D==="%%")return"%";P++;let V=t.formatters[$];if(typeof V=="function"){let te=g[P];D=V.call(_,te),g.splice(P,1),P--}return D}),t.formatArgs.call(_,g),(_.log||t.log).apply(_,g)}return f.namespace=d,f.useColors=t.useColors(),f.color=t.selectColor(d),f.extend=r,f.destroy=t.destroy,Object.defineProperty(f,"enabled",{enumerable:!0,configurable:!1,get:()=>u!==null?u:(h!==t.namespaces&&(h=t.namespaces,m=t.enabled(d)),m),set:g=>{u=g}}),typeof t.init=="function"&&t.init(f),f}function r(d,p){let u=t(this.namespace+(typeof p>"u"?":":p)+d);return u.log=this.log,u}function n(d){t.save(d),t.namespaces=d,t.names=[],t.skips=[];let p=(typeof d=="string"?d:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let u of p)u[0]==="-"?t.skips.push(u.slice(1)):t.names.push(u)}function i(d,p){let u=0,h=0,m=-1,f=0;for(;u<d.length;)if(h<p.length&&(p[h]===d[u]||p[h]==="*"))p[h]==="*"?(m=h,f=u,h++):(u++,h++);else if(m!==-1)h=m+1,f++,u=f;else return!1;for(;h<p.length&&p[h]==="*";)h++;return h===p.length}function a(){let d=[...t.names,...t.skips.map(p=>"-"+p)].join(",");return t.enable(""),d}function o(d){for(let p of t.skips)if(i(d,p))return!1;for(let p of t.names)if(i(d,p))return!0;return!1}function c(d){return d instanceof Error?d.stack||d.message:d}function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.enable(t.load()),t}Us.exports=xa});var at=E((G,Dt)=>{"use strict";G.formatArgs=Ia;G.save=La;G.load=Ma;G.useColors=Da;G.storage=Oa();G.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`."))}})();G.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 Da(){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 Ia(s){if(s[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+s[0]+(this.useColors?"%c ":" ")+"+"+Dt.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;s.splice(1,0,e,"color: inherit");let t=0,r=0;s[0].replace(/%[a-zA-Z%]/g,n=>{n!=="%%"&&(t++,n==="%c"&&(r=t))}),s.splice(r,0,e)}G.log=console.debug||console.log||(()=>{});function La(s){try{s?G.storage.setItem("debug",s):G.storage.removeItem("debug")}catch{}}function Ma(){let s;try{s=G.storage.getItem("debug")||G.storage.getItem("DEBUG")}catch{}return!s&&typeof process<"u"&&"env"in process&&(s=process.env.DEBUG),s}function Oa(){try{return localStorage}catch{}}Dt.exports=Bs()(G);var{formatters:Aa}=Dt.exports;Aa.j=function(s){try{return JSON.stringify(s)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var Ws=E(zs=>{"use strict";Object.defineProperty(zs,"__esModule",{value:!0})});var B=E(It=>{"use strict";Object.defineProperty(It,"__esModule",{value:!0});It.Logger=void 0;var je=at(),Fe="media-client",Er=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,je.default)(`${Fe}:${e}`),this._warn=(0,je.default)(`${Fe}:WARN:${e}`),this._error=(0,je.default)(`${Fe}:ERROR:${e}`)):(this._debug=(0,je.default)(Fe),this._warn=(0,je.default)(`${Fe}:WARN`),this._error=(0,je.default)(`${Fe}:ERROR`)),this._debug.log=console.info.bind(console),this._warn.log=console.warn.bind(console),this._error.log=console.error.bind(console)}get debug(){return this._debug}get warn(){return this._warn}get error(){return this._error}};It.Logger=Er});var tn=E((Dl,Pr)=>{"use strict";var qe=typeof Reflect=="object"?Reflect:null,Hs=qe&&typeof qe.apply=="function"?qe.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)},Lt;qe&&typeof qe.ownKeys=="function"?Lt=qe.ownKeys:Object.getOwnPropertySymbols?Lt=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Lt=function(e){return Object.getOwnPropertyNames(e)};function Na(s){console&&console.warn&&console.warn(s)}var Gs=Number.isNaN||function(e){return e!==e};function I(){I.init.call(this)}Pr.exports=I;Pr.exports.once=$a;I.EventEmitter=I;I.prototype._events=void 0;I.prototype._eventsCount=0;I.prototype._maxListeners=void 0;var Vs=10;function Mt(s){if(typeof s!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof s)}Object.defineProperty(I,"defaultMaxListeners",{enumerable:!0,get:function(){return Vs},set:function(s){if(typeof s!="number"||s<0||Gs(s))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+s+".");Vs=s}});I.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};I.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||Gs(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?I.defaultMaxListeners:s._maxListeners}I.prototype.getMaxListeners=function(){return Ks(this)};I.prototype.emit=function(e){for(var t=[],r=1;r<arguments.length;r++)t.push(arguments[r]);var n=e==="error",i=this._events;if(i!==void 0)n=n&&i.error===void 0;else if(!n)return!1;if(n){var a;if(t.length>0&&(a=t[0]),a instanceof Error)throw a;var o=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw o.context=a,o}var c=i[e];if(c===void 0)return!1;if(typeof c=="function")Hs(c,this,t);else for(var l=c.length,d=Zs(c,l),r=0;r<l;++r)Hs(d[r],this,t);return!0};function Qs(s,e,t,r){var n,i,a;if(Mt(t),i=s._events,i===void 0?(i=s._events=Object.create(null),s._eventsCount=0):(i.newListener!==void 0&&(s.emit("newListener",e,t.listener?t.listener:t),i=s._events),a=i[e]),a===void 0)a=i[e]=t,++s._eventsCount;else if(typeof a=="function"?a=i[e]=r?[t,a]:[a,t]:r?a.unshift(t):a.push(t),n=Ks(s),n>0&&a.length>n&&!a.warned){a.warned=!0;var o=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");o.name="MaxListenersExceededWarning",o.emitter=s,o.type=e,o.count=a.length,Na(o)}return s}I.prototype.addListener=function(e,t){return Qs(this,e,t,!1)};I.prototype.on=I.prototype.addListener;I.prototype.prependListener=function(e,t){return Qs(this,e,t,!0)};function ja(){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 Ys(s,e,t){var r={fired:!1,wrapFn:void 0,target:s,type:e,listener:t},n=ja.bind(r);return n.listener=t,r.wrapFn=n,n}I.prototype.once=function(e,t){return Mt(t),this.on(e,Ys(this,e,t)),this};I.prototype.prependOnceListener=function(e,t){return Mt(t),this.prependListener(e,Ys(this,e,t)),this};I.prototype.removeListener=function(e,t){var r,n,i,a,o;if(Mt(t),n=this._events,n===void 0)return this;if(r=n[e],r===void 0)return this;if(r===t||r.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete n[e],n.removeListener&&this.emit("removeListener",e,r.listener||t));else if(typeof r!="function"){for(i=-1,a=r.length-1;a>=0;a--)if(r[a]===t||r[a].listener===t){o=r[a].listener,i=a;break}if(i<0)return this;i===0?r.shift():Fa(r,i),r.length===1&&(n[e]=r[0]),n.removeListener!==void 0&&this.emit("removeListener",e,o||t)}return this};I.prototype.off=I.prototype.removeListener;I.prototype.removeAllListeners=function(e){var t,r,n;if(r=this._events,r===void 0)return this;if(r.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):r[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete r[e]),this;if(arguments.length===0){var i=Object.keys(r),a;for(n=0;n<i.length;++n)a=i[n],a!=="removeListener"&&this.removeAllListeners(a);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(t=r[e],typeof t=="function")this.removeListener(e,t);else if(t!==void 0)for(n=t.length-1;n>=0;n--)this.removeListener(e,t[n]);return this};function Js(s,e,t){var r=s._events;if(r===void 0)return[];var n=r[e];return n===void 0?[]:typeof n=="function"?t?[n.listener||n]:[n]:t?qa(n):Zs(n,n.length)}I.prototype.listeners=function(e){return Js(this,e,!0)};I.prototype.rawListeners=function(e){return Js(this,e,!1)};I.listenerCount=function(s,e){return typeof s.listenerCount=="function"?s.listenerCount(e):Xs.call(s,e)};I.prototype.listenerCount=Xs;function Xs(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}I.prototype.eventNames=function(){return this._eventsCount>0?Lt(this._events):[]};function Zs(s,e){for(var t=new Array(e),r=0;r<e;++r)t[r]=s[r];return t}function Fa(s,e){for(;e+1<s.length;e++)s[e]=s[e+1];s.pop()}function qa(s){for(var e=new Array(s.length),t=0;t<e.length;++t)e[t]=s[t].listener||s[t];return e}function $a(s,e){return new Promise(function(t,r){function n(a){s.removeListener(e,i),r(a)}function i(){typeof s.removeListener=="function"&&s.removeListener("error",n),t([].slice.call(arguments))}en(s,e,i,{once:!0}),e!=="error"&&Ua(s,n,{once:!0})})}function Ua(s,e,t){typeof s.on=="function"&&en(s,"error",e,t)}function en(s,e,t,r){if(typeof s.on=="function")r.once?s.once(e,t):s.on(e,t);else if(typeof s.addEventListener=="function")s.addEventListener(e,function n(i){r.once&&s.removeEventListener(e,n),t(i)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof s)}});var K=E(Ot=>{"use strict";Object.defineProperty(Ot,"__esModule",{value:!0});Ot.EnhancedEventEmitter=void 0;var Ba=tn(),za=B(),Wa=new za.Logger("EnhancedEventEmitter"),xr=class extends Ba.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){Wa.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)}};Ot.EnhancedEventEmitter=xr});var J=E($e=>{"use strict";Object.defineProperty($e,"__esModule",{value:!0});$e.InvalidStateError=$e.UnsupportedError=void 0;var Dr=class s extends Error{constructor(e){super(e),this.name="UnsupportedError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,s):this.stack=new Error(e).stack}};$e.UnsupportedError=Dr;var Ir=class s extends Error{constructor(e){super(e),this.name="InvalidStateError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,s):this.stack=new Error(e).stack}};$e.InvalidStateError=Ir});var Te=E(ot=>{"use strict";Object.defineProperty(ot,"__esModule",{value:!0});ot.clone=Ha;ot.generateRandomNumber=Va;ot.deepFreeze=rn;function Ha(s){if(s!==void 0)return Number.isNaN(s)?NaN:typeof structuredClone=="function"?structuredClone(s):JSON.parse(JSON.stringify(s))}function Va(){return Math.round(Math.random()*1e7)}function rn(s){let e=Reflect.ownKeys(s);for(let t of e){let r=s[t];(r&&typeof r=="object"||typeof r=="function")&&rn(r)}return Object.freeze(s)}});var sn=E(At=>{"use strict";Object.defineProperty(At,"__esModule",{value:!0});At.Logger=void 0;var Ue=at(),Be="h264-profile-level-id",Lr=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,Ue.default)(`${Be}:${e}`),this._warn=(0,Ue.default)(`${Be}:WARN:${e}`),this._error=(0,Ue.default)(`${Be}:ERROR:${e}`)):(this._debug=(0,Ue.default)(Be),this._warn=(0,Ue.default)(`${Be}:WARN`),this._error=(0,Ue.default)(`${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}};At.Logger=Lr});var ln=E(j=>{"use strict";Object.defineProperty(j,"__esModule",{value:!0});j.ProfileLevelId=j.Level=j.Profile=void 0;j.parseProfileLevelId=cn;j.profileLevelIdToString=dn;j.profileToString=Ya;j.levelToString=Ja;j.parseSdpProfileLevelId=ke;j.isSameProfile=Xa;j.isSameProfileAndLevel=Za;j.generateProfileLevelIdStringForAnswer=eo;j.supportedLevel=to;var Ga=sn(),ne=new Ga.Logger,M;(function(s){s[s.ConstrainedBaseline=1]="ConstrainedBaseline",s[s.Baseline=2]="Baseline",s[s.Main=3]="Main",s[s.ConstrainedHigh=4]="ConstrainedHigh",s[s.High=5]="High",s[s.PredictiveHigh444=6]="PredictiveHigh444"})(M||(j.Profile=M={}));var w;(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"})(w||(j.Level=w={}));var ze=class{profile;level;constructor(e,t){this.profile=e,this.level=t}};j.ProfileLevelId=ze;var Ka=new ze(M.ConstrainedBaseline,w.L3_1),re=class{mask;masked_value;constructor(e){this.mask=~an("x",e),this.masked_value=an("1",e)}isMatch(e){return this.masked_value===(e&this.mask)}},se=class{profile_idc;profile_iop;profile;constructor(e,t,r){this.profile_idc=e,this.profile_iop=t,this.profile=r}},Qa=[new se(66,new re("x1xx0000"),M.ConstrainedBaseline),new se(77,new re("1xxx0000"),M.ConstrainedBaseline),new se(88,new re("11xx0000"),M.ConstrainedBaseline),new se(66,new re("x0xx0000"),M.Baseline),new se(88,new re("10xx0000"),M.Baseline),new se(77,new re("0x0x0000"),M.Main),new se(100,new re("00000000"),M.High),new se(100,new re("00001100"),M.ConstrainedHigh),new se(244,new re("00000000"),M.PredictiveHigh444)],nn=[{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:w.L1},{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:w.L1_b},{max_macroblocks_per_second:3e3,max_macroblock_frame_size:396,level:w.L1_1},{max_macroblocks_per_second:6e3,max_macroblock_frame_size:396,level:w.L1_2},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:w.L1_3},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:w.L2},{max_macroblocks_per_second:19800,max_macroblock_frame_size:792,level:w.L2_1},{max_macroblocks_per_second:20250,max_macroblock_frame_size:1620,level:w.L2_2},{max_macroblocks_per_second:40500,max_macroblock_frame_size:1620,level:w.L3},{max_macroblocks_per_second:108e3,max_macroblock_frame_size:3600,level:w.L3_1},{max_macroblocks_per_second:216e3,max_macroblock_frame_size:5120,level:w.L3_2},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:w.L4},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:w.L4_1},{max_macroblocks_per_second:522240,max_macroblock_frame_size:8704,level:w.L4_2},{max_macroblocks_per_second:589824,max_macroblock_frame_size:22080,level:w.L5},{max_macroblocks_per_second:983040,max_macroblock_frame_size:36864,level:w.L5_1},{max_macroblocks_per_second:2073600,max_macroblock_frame_size:36864,level:w.L5_2}];function cn(s){if(typeof s!="string"||s.length!==6)return;let t=parseInt(s,16);if(t===0)return;let r=t&255,n=t>>8&255,i=t>>16&255,a;switch(r){case w.L1_1:{a=(n&16)!==0?w.L1_b:w.L1_1;break}case w.L1:case w.L1_2:case w.L1_3:case w.L2:case w.L2_1:case w.L2_2:case w.L3:case w.L3_1:case w.L3_2:case w.L4:case w.L4_1:case w.L4_2:case w.L5:case w.L5_1:case w.L5_2:{a=r;break}default:{ne.warn(`parseProfileLevelId() | unrecognized level_idc [str:${s}, level_idc:${r}]`);return}}for(let o of Qa)if(i===o.profile_idc&&o.profile_iop.isMatch(n))return ne.debug(`parseProfileLevelId() | result [str:${s}, profile:${o.profile}, level:${a}]`),new ze(o.profile,a);ne.warn(`parseProfileLevelId() | unrecognized profile_idc/profile_iop combination [str:${s}, profile_idc:${i}, profile_iop:${n}]`)}function dn(s){if(s.level==w.L1_b)switch(s.profile){case M.ConstrainedBaseline:return"42f00b";case M.Baseline:return"42100b";case M.Main:return"4d100b";default:{ne.warn(`profileLevelIdToString() | Level 1_b not is allowed for profile ${s.profile}`);return}}let e;switch(s.profile){case M.ConstrainedBaseline:{e="42e0";break}case M.Baseline:{e="4200";break}case M.Main:{e="4d00";break}case M.ConstrainedHigh:{e="640c";break}case M.High:{e="6400";break}case M.PredictiveHigh444:{e="f400";break}default:{ne.warn(`profileLevelIdToString() | unrecognized profile ${s.profile}`);return}}let t=s.level.toString(16);return t.length===1&&(t=`0${t}`),`${e}${t}`}function Ya(s){switch(s){case M.ConstrainedBaseline:return"ConstrainedBaseline";case M.Baseline:return"Baseline";case M.Main:return"Main";case M.ConstrainedHigh:return"ConstrainedHigh";case M.High:return"High";case M.PredictiveHigh444:return"PredictiveHigh444";default:{ne.warn(`profileToString() | unrecognized profile ${s}`);return}}}function Ja(s){switch(s){case w.L1_b:return"1b";case w.L1:return"1";case w.L1_1:return"1.1";case w.L1_2:return"1.2";case w.L1_3:return"1.3";case w.L2:return"2";case w.L2_1:return"2.1";case w.L2_2:return"2.2";case w.L3:return"3";case w.L3_1:return"3.1";case w.L3_2:return"3.2";case w.L4:return"4";case w.L4_1:return"4.1";case w.L4_2:return"4.2";case w.L5:return"5";case w.L5_1:return"5.1";case w.L5_2:return"5.2";default:{ne.warn(`levelToString() | unrecognized level ${s}`);return}}}function ke(s={}){let e=s["profile-level-id"];return e?cn(e):Ka}function Xa(s={},e={}){let t=ke(s),r=ke(e);return!!(t&&r&&t.profile===r.profile)}function Za(s={},e={}){let t=ke(s),r=ke(e);return!!(t&&r&&t.profile===r.profile&&t.level==r.level)}function eo(s={},e={}){if(!s["profile-level-id"]&&!e["profile-level-id"]){ne.warn("generateProfileLevelIdStringForAnswer() | profile-level-id missing in local and remote params");return}let t=ke(s),r=ke(e);if(!t)throw new TypeError("invalid local_profile_level_id");if(!r)throw new TypeError("invalid remote_profile_level_id");if(t.profile!==r.profile)throw new TypeError("H264 Profile mismatch");let n=on(s)&&on(e),i=t.level,a=r.level,o=so(i,a),c=n?i:o;return ne.debug(`generateProfileLevelIdStringForAnswer() | result [profile:${t.profile}, level:${c}]`),dn(new ze(t.profile,c))}function to(s,e){for(let r=nn.length-1;r>=0;--r){let n=nn[r];if(n.max_macroblock_frame_size*256<=s&&n.max_macroblocks_per_second<=e*n.max_macroblock_frame_size)return ne.debug(`supportedLevel() | result [max_frame_pixel_count:${s}, max_fps:${e}, level:${n.level}]`),n.level}ne.warn(`supportedLevel() | no level supported [max_frame_pixel_count:${s}, max_fps:${e}]`)}function an(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 ro(s,e){return s===w.L1_b?e!==w.L1&&e!==w.L1_b:e===w.L1_b?s!==w.L1:s<e}function so(s,e){return ro(s,e)?s:e}function on(s={}){let e=s["level-asymmetry-allowed"];return e===!0||e===1||e==="1"}});var oe=E(z=>{"use strict";Object.defineProperty(z,"__esModule",{value:!0});z.validateAndNormalizeRtpCapabilities=co;z.validateAndNormalizeRtpParameters=Or;z.validateAndNormalizeSctpStreamParameters=lo;z.validateSctpCapabilities=po;z.getExtendedRtpCapabilities=uo;z.getRecvRtpCapabilities=ho;z.getSendRtpCapabilities=fo;z.getSendingRtpParameters=mo;z.getSendingRemoteRtpParameters=go;z.reduceCodecs=_o;z.generateProbatorRtpParameters=vo;z.canSend=wo;z.canReceive=yo;var pn=ln(),no=Te(),io="probator",ao=1234,oo=127;function co(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)bo(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)So(e)}function Or(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)Ro(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)Co(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)To(e);if(s.rtcp&&typeof s.rtcp!="object")throw new TypeError("params.rtcp is not an object");s.rtcp||(s.rtcp={}),ko(s.rtcp)}function lo(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 po(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");Eo(s.numStreams)}function uo(s,e,t){let r={codecs:[],headerExtensions:[]};if(t)for(let n of s.codecs??[]){if(We(n))continue;let i=(e.codecs??[]).find(o=>Mr(o,n,{strict:!0,modify:!0}));if(!i)continue;let a={kind:n.kind,mimeType:n.mimeType,clockRate:n.clockRate,channels:n.channels,localPayloadType:n.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:i.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:n.parameters??{},remoteParameters:i.parameters??{},rtcpFeedback:un(n,i)};r.codecs.push(a)}else for(let n of e.codecs??[]){if(We(n))continue;let i=(s.codecs??[]).find(o=>Mr(o,n,{strict:!0,modify:!0}));if(!i)continue;let a={kind:i.kind,mimeType:i.mimeType,clockRate:i.clockRate,channels:i.channels,localPayloadType:i.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:n.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:i.parameters??{},remoteParameters:n.parameters??{},rtcpFeedback:un(i,n)};r.codecs.push(a)}for(let n of r.codecs){let i=s.codecs.find(o=>We(o)&&o.parameters?.apt===n.localPayloadType),a=e.codecs.find(o=>We(o)&&o.parameters?.apt===n.remotePayloadType);i&&a&&(n.localRtxPayloadType=i.preferredPayloadType,n.remoteRtxPayloadType=a.preferredPayloadType)}for(let n of e.headerExtensions){let i=s.headerExtensions.find(o=>Po(o,n));if(!i)continue;let a={kind:n.kind,uri:n.uri,sendId:i.preferredId,recvId:n.preferredId,encrypt:i.preferredEncrypt??!1,direction:"sendrecv"};switch(n.direction){case"sendrecv":{a.direction="sendrecv";break}case"recvonly":{a.direction="sendonly";break}case"sendonly":{a.direction="recvonly";break}case"inactive":{a.direction="inactive";break}}r.headerExtensions.push(a)}return r}function ho(s){return fn({direction:"recvonly",extendedRtpCapabilities:s})}function fo(s){return fn({direction:"sendonly",extendedRtpCapabilities:s})}function mo(s,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let r of e.codecs){if(r.kind!==s)continue;let n={mimeType:r.mimeType,payloadType:r.localPayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.localParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(n),r.localRtxPayloadType){let i={mimeType:`${r.kind}/rtx`,payloadType:r.localRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.localPayloadType},rtcpFeedback:[]};t.codecs.push(i)}}for(let r of e.headerExtensions){if(r.kind&&r.kind!==s||r.direction!=="sendrecv"&&r.direction!=="sendonly")continue;let n={uri:r.uri,id:r.sendId,encrypt:r.encrypt,parameters:{}};t.headerExtensions.push(n)}return t}function go(s,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let r of e.codecs){if(r.kind!==s)continue;let n={mimeType:r.mimeType,payloadType:r.localPayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.remoteParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(n),r.localRtxPayloadType){let i={mimeType:`${r.kind}/rtx`,payloadType:r.localRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.localPayloadType},rtcpFeedback:[]};t.codecs.push(i)}}for(let r of e.headerExtensions){if(r.kind&&r.kind!==s||r.direction!=="sendrecv"&&r.direction!=="sendonly")continue;let n={uri:r.uri,id:r.sendId,encrypt:r.encrypt,parameters:{}};t.headerExtensions.push(n)}if(t.headerExtensions.some(r=>r.uri==="http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"))for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(n=>n.type!=="goog-remb");else if(t.headerExtensions.some(r=>r.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"))for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(n=>n.type!=="transport-cc");else for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(n=>n.type!=="transport-cc"&&n.type!=="goog-remb");return t}function _o(s,e){let t=[];if(!e)t.push(s[0]),We(s[1])&&t.push(s[1]);else{for(let r=0;r<s.length;++r)if(Mr(s[r],e,{strict:!0})){t.push(s[r]),We(s[r+1])&&t.push(s[r+1]);break}if(t.length===0)throw new TypeError("no matching codec found")}return t}function vo(s){s=no.clone(s),Or(s);let e={mid:io,codecs:[],headerExtensions:[],encodings:[{ssrc:ao}],rtcp:{cname:"probator"}};return e.codecs.push(s.codecs[0]),e.codecs[0].payloadType=oo,e.headerExtensions=s.headerExtensions,e}function wo(s,e){return(e.codecs??[]).some(t=>t.kind===s)}function yo(s,e){if(Or(s),s.codecs.length===0)return!1;let t=s.codecs[0];return(e.codecs??[]).some(r=>r.preferredPayloadType===t.payloadType)}function bo(s){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof s!="object")throw new TypeError("codec is not an object");if(!s.mimeType||typeof s.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(s.kind=t[1].toLowerCase(),typeof s.preferredPayloadType!="number")throw new TypeError("missing codec.preferredPayloadType");if(typeof s.clockRate!="number")throw new TypeError("missing codec.clockRate");s.kind==="audio"?typeof s.channels!="number"&&(s.channels=1):delete s.channels,(!s.parameters||typeof s.parameters!="object")&&(s.parameters={});for(let r of Object.keys(s.parameters)){let n=s.parameters[r];if(n===void 0&&(s.parameters[r]="",n=""),typeof n!="string"&&typeof n!="number")throw new TypeError(`invalid codec parameter [key:${r}s, value:${n}]`);if(r==="apt"&&typeof n!="number")throw new TypeError("invalid codec apt parameter")}(!s.rtcpFeedback||!Array.isArray(s.rtcpFeedback))&&(s.rtcpFeedback=[]);for(let r of s.rtcpFeedback)hn(r)}function hn(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 So(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 Ro(s){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof s!="object")throw new TypeError("codec is not an object");if(!s.mimeType||typeof s.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(typeof s.payloadType!="number")throw new TypeError("missing codec.payloadType");if(typeof s.clockRate!="number")throw new TypeError("missing codec.clockRate");t[1].toLowerCase()==="audio"?typeof s.channels!="number"&&(s.channels=1):delete s.channels,(!s.parameters||typeof s.parameters!="object")&&(s.parameters={});for(let n of Object.keys(s.parameters)){let i=s.parameters[n];if(i===void 0&&(s.parameters[n]="",i=""),typeof i!="string"&&typeof i!="number")throw new TypeError(`invalid codec parameter [key:${n}s, value:${i}]`);if(n==="apt"&&typeof i!="number")throw new TypeError("invalid codec apt parameter")}(!s.rtcpFeedback||!Array.isArray(s.rtcpFeedback))&&(s.rtcpFeedback=[]);for(let n of s.rtcpFeedback)hn(n)}function Co(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 To(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 ko(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 Eo(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 fn({direction:s,extendedRtpCapabilities:e}){let t={codecs:[],headerExtensions:[]};for(let r of e.codecs){let n={kind:r.kind,mimeType:r.mimeType,preferredPayloadType:r.remotePayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.localParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(n),!r.remoteRtxPayloadType)continue;let i={kind:r.kind,mimeType:`${r.kind}/rtx`,preferredPayloadType:r.remoteRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.remotePayloadType},rtcpFeedback:[]};t.codecs.push(i)}for(let r of e.headerExtensions){if(r.direction!=="sendrecv"&&r.direction!==s)continue;let n={kind:r.kind,uri:r.uri,preferredId:r.recvId,preferredEncrypt:r.encrypt??!1,direction:r.direction};t.headerExtensions.push(n)}return t}function We(s){return s?/.+\/rtx$/i.test(s.mimeType):!1}function Mr(s,e,{strict:t=!1,modify:r=!1}={}){let n=s.mimeType.toLowerCase(),i=e.mimeType.toLowerCase();if(n!==i||s.clockRate!==e.clockRate||s.channels!==e.channels)return!1;switch(n){case"video/h264":{if(t){let a=s.parameters["packetization-mode"]??0,o=e.parameters["packetization-mode"]??0;if(a!==o||!pn.isSameProfile(s.parameters,e.parameters))return!1;let c;try{c=pn.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 Po(s,e){return!(s.kind&&e.kind&&s.kind!==e.kind||s.uri!==e.uri)}function un(s,e){let t=[];for(let r of s.rtcpFeedback??[]){let n=(e.rtcpFeedback??[]).find(i=>i.type===r.type&&(i.parameter===r.parameter||!i.parameter&&!r.parameter));n&&t.push(n)}return t}});var mn=E(Nt=>{"use strict";Object.defineProperty(Nt,"__esModule",{value:!0});Nt.Logger=void 0;var He=at(),Ve="awaitqueue",Ar=class{_debug;_warn;_error;constructor(e){e?(this._debug=He(`${Ve}:${e}`),this._warn=He(`${Ve}:WARN:${e}`),this._error=He(`${Ve}:ERROR:${e}`)):(this._debug=He(Ve),this._warn=He(`${Ve}:WARN`),this._error=He(`${Ve}: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}};Nt.Logger=Ar});var Fr=E(Ge=>{"use strict";Object.defineProperty(Ge,"__esModule",{value:!0});Ge.AwaitQueueRemovedTaskError=Ge.AwaitQueueStoppedError=void 0;var Nr=class s extends Error{constructor(e){super(e??"queue stopped"),this.name="AwaitQueueStoppedError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,s)}};Ge.AwaitQueueStoppedError=Nr;var jr=class s extends Error{constructor(e){super(e??"queue task removed"),this.name="AwaitQueueRemovedTaskError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,s)}};Ge.AwaitQueueRemovedTaskError=jr});var gn=E(jt=>{"use strict";Object.defineProperty(jt,"__esModule",{value:!0});jt.AwaitQueue=void 0;var xo=mn(),qr=Fr(),he=new xo.Logger("AwaitQueue"),$r=class{pendingTasks=new Map;nextTaskId=0;constructor(){he.debug("constructor()")}get size(){return this.pendingTasks.size}async push(e,t,r){if(t=t??e.name,he.debug(`push() [name:${t}, options:%o]`,r),typeof e!="function")throw new TypeError("given task is not a function");if(t)try{Object.defineProperty(e,"name",{value:t})}catch{}return new Promise((n,i)=>{if(t&&r?.removeOngoingTasksWithSameName)for(let o of this.pendingTasks.values())o.name===t&&o.reject(new qr.AwaitQueueRemovedTaskError,{canExecuteNextTask:!1});let a={id:this.nextTaskId++,task:e,name:t,enqueuedAt:Date.now(),executedAt:void 0,completed:!1,resolve:o=>{if(a.completed)return;a.completed=!0,this.pendingTasks.delete(a.id),he.debug(`resolving task [name:${a.name}]`),n(o);let[c]=this.pendingTasks.values();c&&!c.executedAt&&this.execute(c)},reject:(o,{canExecuteNextTask:c})=>{if(!a.completed&&(a.completed=!0,this.pendingTasks.delete(a.id),he.debug(`rejecting task [name:${a.name}]: %s`,String(o)),i(o),c)){let[l]=this.pendingTasks.values();l&&!l.executedAt&&this.execute(l)}}};this.pendingTasks.set(a.id,a),this.pendingTasks.size===1&&this.execute(a)})}stop(){he.debug("stop()");for(let e of this.pendingTasks.values())he.debug(`stop() | stopping task [name:${e.name}]`),e.reject(new qr.AwaitQueueStoppedError,{canExecuteNextTask:!1})}remove(e){he.debug(`remove() [taskIdx:${e}]`);let t=Array.from(this.pendingTasks.values())[e];if(!t){he.debug(`stop() | no task with given idx [taskIdx:${e}]`);return}t.reject(new qr.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(he.debug(`execute() [name:${e.name}]`),e.executedAt)throw new Error("task already being executed");e.executedAt=Date.now();try{let t=await e.task();e.resolve(t)}catch(t){e.reject(t,{canExecuteNextTask:!0})}}};jt.AwaitQueue=$r});var vn=E(we=>{"use strict";Object.defineProperty(we,"__esModule",{value:!0});we.AwaitQueueRemovedTaskError=we.AwaitQueueStoppedError=we.AwaitQueue=void 0;var Do=gn();Object.defineProperty(we,"AwaitQueue",{enumerable:!0,get:function(){return Do.AwaitQueue}});var _n=Fr();Object.defineProperty(we,"AwaitQueueStoppedError",{enumerable:!0,get:function(){return _n.AwaitQueueStoppedError}});Object.defineProperty(we,"AwaitQueueRemovedTaskError",{enumerable:!0,get:function(){return _n.AwaitQueueRemovedTaskError}})});var yn=E(Ft=>{"use strict";Object.defineProperty(Ft,"__esModule",{value:!0});Ft.Producer=void 0;var Io=B(),wn=K(),Ke=J(),ce=new Io.Logger("Producer"),Ur=class extends wn.EnhancedEventEmitter{_id;_localId;_closed=!1;_rtpSender;_track;_kind;_rtpParameters;_paused;_maxSpatialLayer;_stopTracks;_disableTrackOnPause;_zeroRtpOnPause;_appData;_observer=new wn.EnhancedEventEmitter;constructor({id:e,localId:t,rtpSender:r,track:n,rtpParameters:i,stopTracks:a,disableTrackOnPause:o,zeroRtpOnPause:c,appData:l}){super(),ce.debug("constructor()"),this._id=e,this._localId=t,this._rtpSender=r,this._track=n,this._kind=n.kind,this._rtpParameters=i,this._paused=o?!n.enabled:!1,this._maxSpatialLayer=void 0,this._stopTracks=a,this._disableTrackOnPause=o,this._zeroRtpOnPause=c,this._appData=l??{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get closed(){return this._closed}get kind(){return this._kind}get rtpSender(){return this._rtpSender}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get maxSpatialLayer(){return this._maxSpatialLayer}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(ce.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(ce.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new Ke.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(ce.debug("pause()"),this._closed){ce.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(ce.debug("resume()"),this._closed){ce.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(ce.debug("replaceTrack() [track:%o]",e),this._closed){if(e&&this._stopTracks)try{e.stop()}catch{}throw new Ke.InvalidStateError("closed")}else if(e?.readyState==="ended")throw new Ke.InvalidStateError("track ended");if(e===this._track){ce.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 Ke.InvalidStateError("closed");if(this._kind!=="video")throw new Ke.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 Ke.InvalidStateError("closed");if(typeof e!="object")throw new TypeError("invalid params");await new Promise((t,r)=>{this.safeEmit("@setrtpencodingparameters",e,t,r)})}onTrackEnded(){ce.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{}}};Ft.Producer=Ur});var Sn=E(qt=>{"use strict";Object.defineProperty(qt,"__esModule",{value:!0});qt.Consumer=void 0;var Lo=B(),bn=K(),Mo=J(),de=new Lo.Logger("Consumer"),Br=class extends bn.EnhancedEventEmitter{_id;_localId;_producerId;_closed=!1;_rtpReceiver;_track;_rtpParameters;_paused;_appData;_observer=new bn.EnhancedEventEmitter;constructor({id:e,localId:t,producerId:r,rtpReceiver:n,track:i,rtpParameters:a,appData:o}){super(),de.debug("constructor()"),this._id=e,this._localId=t,this._producerId=r,this._rtpReceiver=n,this._track=i,this._rtpParameters=a,this._paused=!i.enabled,this._appData=o??{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get producerId(){return this._producerId}get closed(){return this._closed}get kind(){return this._track.kind}get rtpReceiver(){return this._rtpReceiver}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(de.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(de.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new Mo.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(de.debug("pause()"),this._closed){de.error("pause() | Consumer closed");return}if(this._paused){de.debug("pause() | Consumer is already paused");return}this._paused=!0,this._track.enabled=!1,this.emit("@pause"),this._observer.safeEmit("pause")}resume(){if(de.debug("resume()"),this._closed){de.error("resume() | Consumer closed");return}if(!this._paused){de.debug("resume() | Consumer is already resumed");return}this._paused=!1,this._track.enabled=!0,this.emit("@resume"),this._observer.safeEmit("resume")}onTrackEnded(){de.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{}}};qt.Consumer=Br});var Cn=E($t=>{"use strict";Object.defineProperty($t,"__esModule",{value:!0});$t.DataProducer=void 0;var Oo=B(),Rn=K(),Ao=J(),fe=new Oo.Logger("DataProducer"),zr=class extends Rn.EnhancedEventEmitter{_id;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new Rn.EnhancedEventEmitter;constructor({id:e,dataChannel:t,sctpStreamParameters:r,appData:n}){super(),fe.debug("constructor()"),this._id=e,this._dataChannel=t,this._sctpStreamParameters=r,this._appData=n??{},this.handleDataChannel()}get id(){return this._id}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get bufferedAmount(){return this._dataChannel.bufferedAmount}get bufferedAmountLowThreshold(){return this._dataChannel.bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._dataChannel.bufferedAmountLowThreshold=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(fe.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(fe.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}send(e){if(fe.debug("send()"),this._closed)throw new Ao.InvalidStateError("closed");this._dataChannel.send(e)}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(fe.debug('DataChannel "open" event'),this.safeEmit("open"))}),this._dataChannel.addEventListener("error",e=>{if(this._closed)return;let t=e.error??new Error("unknown DataChannel error");e.error?.errorDetail==="sctp-failure"?fe.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):fe.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(fe.warn('DataChannel "close" event'),this._closed=!0,this.emit("@close"),this.safeEmit("close"),this._observer.safeEmit("close"))}),this._dataChannel.addEventListener("message",()=>{this._closed||fe.warn('DataChannel "message" event in a DataProducer, message discarded')}),this._dataChannel.addEventListener("bufferedamountlow",()=>{this._closed||this.safeEmit("bufferedamountlow")})}};$t.DataProducer=zr});var kn=E(Ut=>{"use strict";Object.defineProperty(Ut,"__esModule",{value:!0});Ut.DataConsumer=void 0;var No=B(),Tn=K(),Ee=new No.Logger("DataConsumer"),Wr=class extends Tn.EnhancedEventEmitter{_id;_dataProducerId;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new Tn.EnhancedEventEmitter;constructor({id:e,dataProducerId:t,dataChannel:r,sctpStreamParameters:n,appData:i}){super(),Ee.debug("constructor()"),this._id=e,this._dataProducerId=t,this._dataChannel=r,this._sctpStreamParameters=n,this._appData=i??{},this.handleDataChannel()}get id(){return this._id}get dataProducerId(){return this._dataProducerId}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get binaryType(){return this._dataChannel.binaryType}set binaryType(e){this._dataChannel.binaryType=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(Ee.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(Ee.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(Ee.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"?Ee.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):Ee.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(Ee.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)})}};Ut.DataConsumer=Wr});var Pn=E(Bt=>{"use strict";Object.defineProperty(Bt,"__esModule",{value:!0});Bt.Transport=void 0;var jo=vn(),Fo=B(),En=K(),N=J(),Hr=Te(),ct=oe(),qo=yn(),$o=Sn(),Uo=Cn(),Bo=kn(),A=new Fo.Logger("Transport"),Vr=class{consumerOptions;promise;resolve;reject;constructor(e){this.consumerOptions=e,this.promise=new Promise((t,r)=>{this.resolve=t,this.reject=r})}},Gr=class extends En.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 jo.AwaitQueue;_pendingConsumerTasks=[];_consumerCreationInProgress=!1;_pendingPauseConsumers=new Map;_consumerPauseInProgress=!1;_pendingResumeConsumers=new Map;_consumerResumeInProgress=!1;_pendingCloseConsumers=new Map;_consumerCloseInProgress=!1;_observer=new En.EnhancedEventEmitter;constructor({direction:e,id:t,iceParameters:r,iceCandidates:n,dtlsParameters:i,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:l,appData:d,handlerFactory:p,getSendExtendedRtpCapabilities:u,recvRtpCapabilities:h,canProduceByKind:m}){super(),A.debug("constructor() [id:%s, direction:%s]",t,e),this._id=t,this._direction=e,this._getSendExtendedRtpCapabilities=u,this._recvRtpCapabilities=h,this._canProduceByKind=m,this._maxSctpMessageSize=a?.maxMessageSize;let f=Hr.clone(l)??{};delete f.iceServers,delete f.iceTransportPolicy,delete f.bundlePolicy,delete f.rtcpMuxPolicy,this._handler=p.factory({direction:e,iceParameters:r,iceCandidates:n,dtlsParameters:i,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:f,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities}),this._appData=d??{},this.handleHandler()}get id(){return this._id}get closed(){return this._closed}get direction(){return this._direction}get handler(){return this._handler}get iceGatheringState(){return this._iceGatheringState}get connectionState(){return this._connectionState}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){if(!this._closed){A.debug("close()"),this._closed=!0,this._awaitQueue.stop(),this._handler.close(),this._connectionState="closed";for(let e of this._producers.values())e.transportClosed();this._producers.clear();for(let e of this._consumers.values())e.transportClosed();this._consumers.clear();for(let e of this._dataProducers.values())e.transportClosed();this._dataProducers.clear();for(let e of this._dataConsumers.values())e.transportClosed();this._dataConsumers.clear(),this._observer.safeEmit("close"),super.close(),this._observer.close()}}async getStats(){if(this._closed)throw new N.InvalidStateError("closed");return this._handler.getTransportStats()}async restartIce({iceParameters:e}){if(A.debug("restartIce()"),this._closed)throw new N.InvalidStateError("closed");if(!e)throw new TypeError("missing iceParameters");return this._awaitQueue.push(async()=>await this._handler.restartIce(e),"transport.restartIce()")}async updateIceServers({iceServers:e}={}){if(A.debug("updateIceServers()"),this._closed)throw new N.InvalidStateError("closed");if(!Array.isArray(e))throw new TypeError("missing iceServers");return this._awaitQueue.push(async()=>this._handler.updateIceServers(e),"transport.updateIceServers()")}async produce({track:e,streamId:t,encodings:r,codecOptions:n,headerExtensionOptions:i,codec:a,stopTracks:o=!0,disableTrackOnPause:c=!0,zeroRtpOnPause:l=!1,onRtpSender:d,appData:p={}}={}){if(A.debug("produce() [track:%o]",e),this._closed)throw new N.InvalidStateError("closed");if(e){if(this._direction!=="send")throw new N.UnsupportedError("not a sending Transport");if(this._canProduceByKind[e.kind]){if(e.readyState==="ended")throw new N.InvalidStateError("track ended");if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(this.listenerCount("produce")===0)throw new TypeError('no "produce" listener set into this transport');if(p&&typeof p!="object")throw new TypeError("if given, appData must be an object")}else throw new N.UnsupportedError(`cannot produce ${e.kind}`)}else throw new TypeError("missing track");return this._awaitQueue.push(async()=>{let u;if(r&&!Array.isArray(r))throw TypeError("encodings must be an array");r?.length===0?u=void 0:r&&(u=r.map(g=>{let _={active:!0};return g.active===!1&&(_.active=!1),typeof g.dtx=="boolean"&&(_.dtx=g.dtx),typeof g.scalabilityMode=="string"&&(_.scalabilityMode=g.scalabilityMode),typeof g.scaleResolutionDownBy=="number"&&(_.scaleResolutionDownBy=g.scaleResolutionDownBy),typeof g.maxBitrate=="number"&&(_.maxBitrate=g.maxBitrate),typeof g.maxFramerate=="number"&&(_.maxFramerate=g.maxFramerate),typeof g.adaptivePtime=="boolean"&&(_.adaptivePtime=g.adaptivePtime),typeof g.priority=="string"&&(_.priority=g.priority),typeof g.networkPriority=="string"&&(_.networkPriority=g.networkPriority),_}));let{localId:h,rtpParameters:m,rtpSender:f}=await this._handler.send({track:e,streamId:t,encodings:u,codecOptions:n,headerExtensionOptions:i,codec:a,onRtpSender:d});try{ct.validateAndNormalizeRtpParameters(m);let{id:g}=await new Promise((v,T)=>{this.safeEmit("produce",{kind:e.kind,rtpParameters:m,appData:p},v,T)}),_=new qo.Producer({id:g,localId:h,rtpSender:f,track:e,rtpParameters:m,stopTracks:o,disableTrackOnPause:c,zeroRtpOnPause:l,appData:p});return this._producers.set(_.id,_),this.handleProducer(_),this._observer.safeEmit("newproducer",_),_}catch(g){throw this._handler.stopSending(h).catch(()=>{}),g}},"transport.produce()").catch(u=>{if(o)try{e.stop()}catch{}throw u})}async consume({id:e,producerId:t,kind:r,rtpParameters:n,streamId:i,onRtpReceiver:a,appData:o={}}){if(A.debug("consume()"),this._closed)throw new N.InvalidStateError("closed");if(this._direction!=="recv")throw new N.UnsupportedError("not a receiving Transport");if(typeof e!="string")throw new TypeError("missing id");if(typeof t!="string")throw new TypeError("missing producerId");if(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=Hr.clone(n);if(!ct.canReceive(c,this._recvRtpCapabilities))throw new N.UnsupportedError("cannot consume this Producer");let d=new Vr({id:e,producerId:t,kind:r,rtpParameters:c,streamId:i,onRtpReceiver:a,appData:o});return this._pendingConsumerTasks.push(d),queueMicrotask(()=>{this._closed||this._consumerCreationInProgress===!1&&this.createPendingConsumers()}),d.promise}async produceData({ordered:e=!0,maxPacketLifeTime:t,maxRetransmits:r,label:n="",protocol:i="",appData:a={}}={}){if(A.debug("produceData()"),this._closed)throw new N.InvalidStateError("closed");if(this._direction!=="send")throw new N.UnsupportedError("not a sending Transport");if(this._maxSctpMessageSize){if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(this.listenerCount("producedata")===0)throw new TypeError('no "producedata" listener set into this transport');if(a&&typeof a!="object")throw new TypeError("if given, appData must be an object")}else throw new N.UnsupportedError("SCTP not enabled by remote Transport");return(t||r)&&(e=!1),this._awaitQueue.push(async()=>{let{dataChannel:o,sctpStreamParameters:c}=await this._handler.sendDataChannel({sctpStreamParameters:{ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:n,protocol:i}});ct.validateAndNormalizeSctpStreamParameters(c);let{id:l}=await new Promise((p,u)=>{this.safeEmit("producedata",{sctpStreamParameters:c,label:n,protocol:i,appData:a},p,u)}),d=new Uo.DataProducer({id:l,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:n="",protocol:i="",appData:a={}}){if(A.debug("consumeData()"),this._closed)throw new N.InvalidStateError("closed");if(this._direction!=="recv")throw new N.UnsupportedError("not a receiving Transport");if(this._maxSctpMessageSize){if(typeof e!="string")throw new TypeError("missing id");if(typeof t!="string")throw new TypeError("missing dataProducerId");if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(a&&typeof a!="object")throw new TypeError("if given, appData must be an object")}else throw new N.UnsupportedError("SCTP not enabled by remote Transport");let o=Hr.clone(r);return ct.validateAndNormalizeSctpStreamParameters(o),this._awaitQueue.push(async()=>{let{dataChannel:c}=await this._handler.receiveDataChannel({maxMessageSize:this._maxSctpMessageSize,sctpStreamParameters:o,label:n,protocol:i}),l=new Bo.DataConsumer({id:e,dataProducerId:t,dataChannel:c,sctpStreamParameters:o,appData:a});return this._dataConsumers.set(l.id,l),this.handleDataConsumer(l),this._observer.safeEmit("newdataconsumer",l),l},"transport.consumeData()")}getDataChannelMaxMessageSize(){return this._handler.getDataChannelMaxMessageSize()}createPendingConsumers(){this._consumerCreationInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingConsumerTasks.length===0){A.debug("createPendingConsumers() | there is no Consumer to be created");return}let e=[...this._pendingConsumerTasks];this._pendingConsumerTasks=[];let t,r=[];for(let n of e){let{id:i,kind:a,rtpParameters:o,streamId:c,onRtpReceiver:l}=n.consumerOptions;r.push({trackId:i,kind:a,rtpParameters:o,streamId:c,onRtpReceiver:l})}try{let n=await this._handler.receive(r);for(let i=0;i<n.length;++i){let a=e[i],o=n[i],{id:c,producerId:l,kind:d,rtpParameters:p,appData:u}=a.consumerOptions,{localId:h,rtpReceiver:m,track:f}=o,g=new $o.Consumer({id:c,localId:h,producerId:l,rtpReceiver:m,track:f,rtpParameters:p,appData:u});this._consumers.set(g.id,g),this.handleConsumer(g),!this._probatorConsumerCreated&&!t&&d==="video"&&(t=g),this._observer.safeEmit("newconsumer",g),a.resolve(g)}}catch(n){for(let i of e)i.reject(n)}if(t)try{let n=ct.generateProbatorRtpParameters(t.rtpParameters);await this._handler.receive([{trackId:"probator",kind:"video",rtpParameters:n}]),A.debug("createPendingConsumers() | Consumer for RTP probation created"),this._probatorConsumerCreated=!0}catch(n){A.error("createPendingConsumers() | failed to create Consumer for RTP probation:%o",n)}},"transport.createPendingConsumers()").then(()=>{this._consumerCreationInProgress=!1,this._pendingConsumerTasks.length>0&&this.createPendingConsumers()}).catch(()=>{})}pausePendingConsumers(){this._consumerPauseInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingPauseConsumers.size===0){A.debug("pausePendingConsumers() | there is no Consumer to be paused");return}let e=Array.from(this._pendingPauseConsumers.values());this._pendingPauseConsumers.clear();try{let t=e.map(r=>r.localId);await this._handler.pauseReceiving(t)}catch(t){A.error("pausePendingConsumers() | failed to pause Consumers:",t)}},"transport.pausePendingConsumers()").then(()=>{this._consumerPauseInProgress=!1,this._pendingPauseConsumers.size>0&&this.pausePendingConsumers()}).catch(()=>{})}resumePendingConsumers(){this._consumerResumeInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingResumeConsumers.size===0){A.debug("resumePendingConsumers() | there is no Consumer to be resumed");return}let e=Array.from(this._pendingResumeConsumers.values());this._pendingResumeConsumers.clear();try{let t=e.map(r=>r.localId);await this._handler.resumeReceiving(t)}catch(t){A.error("resumePendingConsumers() | failed to resume Consumers:",t)}},"transport.resumePendingConsumers()").then(()=>{this._consumerResumeInProgress=!1,this._pendingResumeConsumers.size>0&&this.resumePendingConsumers()}).catch(()=>{})}closePendingConsumers(){this._consumerCloseInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingCloseConsumers.size===0){A.debug("closePendingConsumers() | there is no Consumer to be closed");return}let e=Array.from(this._pendingCloseConsumers.values());this._pendingCloseConsumers.clear();try{await this._handler.stopReceiving(e.map(t=>t.localId))}catch(t){A.error("closePendingConsumers() | failed to close Consumers:",t)}},"transport.closePendingConsumers()").then(()=>{this._consumerCloseInProgress=!1,this._pendingCloseConsumers.size>0&&this.closePendingConsumers()}).catch(()=>{})}handleHandler(){let e=this._handler;e.on("@connect",({dtlsParameters:t},r,n)=>{if(this._closed){n(new N.InvalidStateError("closed"));return}this.safeEmit("connect",{dtlsParameters:t},r,n)}),e.on("@icegatheringstatechange",t=>{t!==this._iceGatheringState&&(A.debug("ICE gathering state changed to %s",t),this._iceGatheringState=t,this._closed||this.safeEmit("icegatheringstatechange",t))}),e.on("@icecandidateerror",t=>{A.warn(`ICE candidate error [url:${t.url}, localAddress:${t.address}, localPort:${t.port}]: ${t.errorCode} "${t.errorText}"`),this.safeEmit("icecandidateerror",t)}),e.on("@connectionstatechange",t=>{t!==this._connectionState&&(A.debug("connection state changed to %s",t),this._connectionState=t,this._closed||this.safeEmit("connectionstatechange",t))})}handleProducer(e){e.on("@close",()=>{this._producers.delete(e.id),!this._closed&&this._awaitQueue.push(async()=>await this._handler.stopSending(e.localId),"producer @close event").catch(t=>A.warn("producer.close() failed:%o",t))}),e.on("@pause",(t,r)=>{this._awaitQueue.push(async()=>await this._handler.pauseSending(e.localId),"producer @pause event").then(t).catch(r)}),e.on("@resume",(t,r)=>{this._awaitQueue.push(async()=>await this._handler.resumeSending(e.localId),"producer @resume event").then(t).catch(r)}),e.on("@replacetrack",(t,r,n)=>{this._awaitQueue.push(async()=>await this._handler.replaceTrack(e.localId,t),"producer @replacetrack event").then(r).catch(n)}),e.on("@setmaxspatiallayer",(t,r,n)=>{this._awaitQueue.push(async()=>await this._handler.setMaxSpatialLayer(e.localId,t),"producer @setmaxspatiallayer event").then(r).catch(n)}),e.on("@setrtpencodingparameters",(t,r,n)=>{this._awaitQueue.push(async()=>await this._handler.setRtpEncodingParameters(e.localId,t),"producer @setrtpencodingparameters event").then(r).catch(n)}),e.on("@getstats",(t,r)=>{if(this._closed)return r(new N.InvalidStateError("closed"));this._handler.getSenderStats(e.localId).then(t).catch(r)})}handleConsumer(e){e.on("@close",()=>{this._consumers.delete(e.id),this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.delete(e.id),!this._closed&&(this._pendingCloseConsumers.set(e.id,e),this._consumerCloseInProgress===!1&&this.closePendingConsumers())}),e.on("@pause",()=>{this._pendingResumeConsumers.has(e.id)&&this._pendingResumeConsumers.delete(e.id),this._pendingPauseConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerPauseInProgress===!1&&this.pausePendingConsumers()})}),e.on("@resume",()=>{this._pendingPauseConsumers.has(e.id)&&this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerResumeInProgress===!1&&this.resumePendingConsumers()})}),e.on("@getstats",(t,r)=>{if(this._closed)return r(new N.InvalidStateError("closed"));this._handler.getReceiverStats(e.localId).then(t).catch(r)})}handleDataProducer(e){e.on("@close",()=>{this._dataProducers.delete(e.id)})}handleDataConsumer(e){e.on("@close",()=>{this._dataConsumers.delete(e.id)})}};Bt.Transport=Gr});var zt=E((Vl,Dn)=>{"use strict";var xn=Dn.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(xn).forEach(function(s){var e=xn[s];e.forEach(function(t){t.reg||(t.reg=/(.*)/),t.format||(t.format="%s")})})});var Mn=E(me=>{"use strict";var Qe=function(s){return String(Number(s))===s?Number(s):s},zo=function(s,e,t,r){if(r&&!t)e[r]=Qe(s[1]);else for(var n=0;n<t.length;n+=1)s[n+1]!=null&&(e[t[n]]=Qe(s[n+1]))},Wo=function(s,e,t){var r=s.name&&s.names;s.push&&!e[s.push]?e[s.push]=[]:r&&!e[s.name]&&(e[s.name]={});var n=s.push?{}:r?e[s.name]:e;zo(t.match(s.reg),n,s.names,s.name),s.push&&e[s.push].push(n)},In=zt(),Ho=RegExp.prototype.test.bind(/^([a-z])=(.*)/);me.parse=function(s){var e={},t=[],r=e;return s.split(/(\r\n|\r|\n)/).filter(Ho).forEach(function(n){var i=n[0],a=n.slice(2);i==="m"&&(t.push({rtp:[],fmtp:[]}),r=t[t.length-1]);for(var o=0;o<(In[i]||[]).length;o+=1){var c=In[i][o];if(c.reg.test(a))return Wo(c,r,a)}}),e.media=t,e};var Ln=function(s,e){var t=e.split(/=(.+)/,2);return t.length===2?s[t[0]]=Qe(t[1]):t.length===1&&e.length>1&&(s[t[0]]=void 0),s};me.parseParams=function(s){return s.split(/;\s?/).reduce(Ln,{})};me.parseFmtpConfig=me.parseParams;me.parsePayloads=function(s){return s.toString().split(" ").map(Number)};me.parseRemoteCandidates=function(s){for(var e=[],t=s.split(" ").map(Qe),r=0;r<t.length;r+=3)e.push({component:t[r],ip:t[r+1],port:t[r+2]});return e};me.parseImageAttributes=function(s){return s.split(" ").map(function(e){return e.substring(1,e.length-1).split(",").reduce(Ln,{})})};me.parseSimulcastStreamList=function(s){return s.split(";").map(function(e){return e.split(",").map(function(t){var r,n=!1;return t[0]!=="~"?r=Qe(t):(r=Qe(t.substring(1,t.length)),n=!0),{scid:r,paused:n}})})}});var An=E((Kl,On)=>{"use strict";var Kr=zt(),Vo=/%[sdv%]/g,Go=function(s){var e=1,t=arguments,r=t.length;return s.replace(Vo,function(n){if(e>=r)return n;var i=t[e];switch(e+=1,n){case"%%":return"%";case"%s":return String(i);case"%d":return Number(i);case"%v":return""}})},dt=function(s,e,t){var r=e.format instanceof Function?e.format(e.push?t:t[e.name]):e.format,n=[s+"="+r];if(e.names)for(var i=0;i<e.names.length;i+=1){var a=e.names[i];e.name?n.push(t[e.name][a]):n.push(t[e.names[i]])}else n.push(t[e.name]);return Go.apply(null,n)},Ko=["v","o","s","i","u","e","p","c","b","t","r","z","a"],Qo=["i","c","b","a"];On.exports=function(s,e){e=e||{},s.version==null&&(s.version=0),s.name==null&&(s.name=" "),s.media.forEach(function(i){i.payloads==null&&(i.payloads="")});var t=e.outerOrder||Ko,r=e.innerOrder||Qo,n=[];return t.forEach(function(i){Kr[i].forEach(function(a){a.name in s&&s[a.name]!=null?n.push(dt(i,a,s)):a.push in s&&s[a.push]!=null&&s[a.push].forEach(function(o){n.push(dt(i,a,o))})})}),s.media.forEach(function(i){n.push(dt("m",Kr.m[0],i)),r.forEach(function(a){Kr[a].forEach(function(o){o.name in i&&i[o.name]!=null?n.push(dt(a,o,i)):o.push in i&&i[o.push]!=null&&i[o.push].forEach(function(c){n.push(dt(a,o,c))})})})}),n.join(`\r
1
+ "use strict";var _a=Object.create;var xt=Object.defineProperty;var va=Object.getOwnPropertyDescriptor;var wa=Object.getOwnPropertyNames;var ya=Object.getPrototypeOf,ba=Object.prototype.hasOwnProperty;var P=(s,e)=>()=>{try{return e||s((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}},Sa=(s,e)=>{for(var t in e)xt(s,t,{get:e[t],enumerable:!0})},Fs=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of wa(e))!ba.call(s,n)&&n!==t&&xt(s,n,{get:()=>e[n],enumerable:!(r=va(e,n))||r.enumerable});return s};var Pr=(s,e,t)=>(t=s!=null?_a(ya(s)):{},Fs(e||!s||!s.__esModule?xt(t,"default",{value:s,enumerable:!0}):t,s)),Ra=s=>Fs(xt({},"__esModule",{value:!0}),s);var qs=P((El,$s)=>{"use strict";var Ae=1e3,Oe=Ae*60,Ne=Oe*60,Ce=Ne*24,Ca=Ce*7,Ta=Ce*365.25;$s.exports=function(s,e){e=e||{};var t=typeof s;if(t==="string"&&s.length>0)return ka(s);if(t==="number"&&isFinite(s))return e.long?Pa(s):Ea(s);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(s))};function ka(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*Ta;case"weeks":case"week":case"w":return t*Ca;case"days":case"day":case"d":return t*Ce;case"hours":case"hour":case"hrs":case"hr":case"h":return t*Ne;case"minutes":case"minute":case"mins":case"min":case"m":return t*Oe;case"seconds":case"second":case"secs":case"sec":case"s":return t*Ae;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:return}}}}function Ea(s){var e=Math.abs(s);return e>=Ce?Math.round(s/Ce)+"d":e>=Ne?Math.round(s/Ne)+"h":e>=Oe?Math.round(s/Oe)+"m":e>=Ae?Math.round(s/Ae)+"s":s+"ms"}function Pa(s){var e=Math.abs(s);return e>=Ce?Dt(s,e,Ce,"day"):e>=Ne?Dt(s,e,Ne,"hour"):e>=Oe?Dt(s,e,Oe,"minute"):e>=Ae?Dt(s,e,Ae,"second"):s+" ms"}function Dt(s,e,t,r){var n=e>=t*1.5;return Math.round(s/t)+" "+r+(n?"s":"")}});var Bs=P((Pl,Us)=>{"use strict";function xa(s){t.debug=t,t.default=t,t.coerce=c,t.disable=a,t.enable=n,t.enabled=o,t.humanize=qs(),t.destroy=l,Object.keys(s).forEach(d=>{t[d]=s[d]}),t.names=[],t.skips=[],t.formatters={};function e(d){let p=0;for(let u=0;u<d.length;u++)p=(p<<5)-p+d.charCodeAt(u),p|=0;return t.colors[Math.abs(p)%t.colors.length]}t.selectColor=e;function t(d){let p,u=null,h,m;function f(...g){if(!f.enabled)return;let _=f,v=Number(new Date),S=v-(p||v);_.diff=S,_.prev=p,_.curr=v,p=v,g[0]=t.coerce(g[0]),typeof g[0]!="string"&&g.unshift("%O");let x=0;g[0]=g[0].replace(/%([a-zA-Z%])/g,(D,j)=>{if(D==="%%")return"%";x++;let V=t.formatters[j];if(typeof V=="function"){let G=g[x];D=V.call(_,G),g.splice(x,1),x--}return D}),t.formatArgs.call(_,g),(_.log||t.log).apply(_,g)}return f.namespace=d,f.useColors=t.useColors(),f.color=t.selectColor(d),f.extend=r,f.destroy=t.destroy,Object.defineProperty(f,"enabled",{enumerable:!0,configurable:!1,get:()=>u!==null?u:(h!==t.namespaces&&(h=t.namespaces,m=t.enabled(d)),m),set:g=>{u=g}}),typeof t.init=="function"&&t.init(f),f}function r(d,p){let u=t(this.namespace+(typeof p>"u"?":":p)+d);return u.log=this.log,u}function n(d){t.save(d),t.namespaces=d,t.names=[],t.skips=[];let p=(typeof d=="string"?d:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let u of p)u[0]==="-"?t.skips.push(u.slice(1)):t.names.push(u)}function i(d,p){let u=0,h=0,m=-1,f=0;for(;u<d.length;)if(h<p.length&&(p[h]===d[u]||p[h]==="*"))p[h]==="*"?(m=h,f=u,h++):(u++,h++);else if(m!==-1)h=m+1,f++,u=f;else return!1;for(;h<p.length&&p[h]==="*";)h++;return h===p.length}function a(){let d=[...t.names,...t.skips.map(p=>"-"+p)].join(",");return t.enable(""),d}function o(d){for(let p of t.skips)if(i(d,p))return!1;for(let p of t.names)if(i(d,p))return!0;return!1}function c(d){return d instanceof Error?d.stack||d.message:d}function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.enable(t.load()),t}Us.exports=xa});var at=P((K,It)=>{"use strict";K.formatArgs=Ia;K.save=La;K.load=Ma;K.useColors=Da;K.storage=Aa();K.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`."))}})();K.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 Da(){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 Ia(s){if(s[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+s[0]+(this.useColors?"%c ":" ")+"+"+It.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;s.splice(1,0,e,"color: inherit");let t=0,r=0;s[0].replace(/%[a-zA-Z%]/g,n=>{n!=="%%"&&(t++,n==="%c"&&(r=t))}),s.splice(r,0,e)}K.log=console.debug||console.log||(()=>{});function La(s){try{s?K.storage.setItem("debug",s):K.storage.removeItem("debug")}catch{}}function Ma(){let s;try{s=K.storage.getItem("debug")||K.storage.getItem("DEBUG")}catch{}return!s&&typeof process<"u"&&"env"in process&&(s=process.env.DEBUG),s}function Aa(){try{return localStorage}catch{}}It.exports=Bs()(K);var{formatters:Oa}=It.exports;Oa.j=function(s){try{return JSON.stringify(s)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var Ws=P(zs=>{"use strict";Object.defineProperty(zs,"__esModule",{value:!0})});var B=P(Lt=>{"use strict";Object.defineProperty(Lt,"__esModule",{value:!0});Lt.Logger=void 0;var je=at(),Fe="media-client",xr=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,je.default)(`${Fe}:${e}`),this._warn=(0,je.default)(`${Fe}:WARN:${e}`),this._error=(0,je.default)(`${Fe}:ERROR:${e}`)):(this._debug=(0,je.default)(Fe),this._warn=(0,je.default)(`${Fe}:WARN`),this._error=(0,je.default)(`${Fe}:ERROR`)),this._debug.log=console.info.bind(console),this._warn.log=console.warn.bind(console),this._error.log=console.error.bind(console)}get debug(){return this._debug}get warn(){return this._warn}get error(){return this._error}};Lt.Logger=xr});var tn=P((Il,Dr)=>{"use strict";var $e=typeof Reflect=="object"?Reflect:null,Hs=$e&&typeof $e.apply=="function"?$e.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)},Mt;$e&&typeof $e.ownKeys=="function"?Mt=$e.ownKeys:Object.getOwnPropertySymbols?Mt=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:Mt=function(e){return Object.getOwnPropertyNames(e)};function Na(s){console&&console.warn&&console.warn(s)}var Gs=Number.isNaN||function(e){return e!==e};function I(){I.init.call(this)}Dr.exports=I;Dr.exports.once=qa;I.EventEmitter=I;I.prototype._events=void 0;I.prototype._eventsCount=0;I.prototype._maxListeners=void 0;var Vs=10;function At(s){if(typeof s!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof s)}Object.defineProperty(I,"defaultMaxListeners",{enumerable:!0,get:function(){return Vs},set:function(s){if(typeof s!="number"||s<0||Gs(s))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+s+".");Vs=s}});I.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};I.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||Gs(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?I.defaultMaxListeners:s._maxListeners}I.prototype.getMaxListeners=function(){return Ks(this)};I.prototype.emit=function(e){for(var t=[],r=1;r<arguments.length;r++)t.push(arguments[r]);var n=e==="error",i=this._events;if(i!==void 0)n=n&&i.error===void 0;else if(!n)return!1;if(n){var a;if(t.length>0&&(a=t[0]),a instanceof Error)throw a;var o=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw o.context=a,o}var c=i[e];if(c===void 0)return!1;if(typeof c=="function")Hs(c,this,t);else for(var l=c.length,d=Zs(c,l),r=0;r<l;++r)Hs(d[r],this,t);return!0};function Qs(s,e,t,r){var n,i,a;if(At(t),i=s._events,i===void 0?(i=s._events=Object.create(null),s._eventsCount=0):(i.newListener!==void 0&&(s.emit("newListener",e,t.listener?t.listener:t),i=s._events),a=i[e]),a===void 0)a=i[e]=t,++s._eventsCount;else if(typeof a=="function"?a=i[e]=r?[t,a]:[a,t]:r?a.unshift(t):a.push(t),n=Ks(s),n>0&&a.length>n&&!a.warned){a.warned=!0;var o=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");o.name="MaxListenersExceededWarning",o.emitter=s,o.type=e,o.count=a.length,Na(o)}return s}I.prototype.addListener=function(e,t){return Qs(this,e,t,!1)};I.prototype.on=I.prototype.addListener;I.prototype.prependListener=function(e,t){return Qs(this,e,t,!0)};function ja(){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 Ys(s,e,t){var r={fired:!1,wrapFn:void 0,target:s,type:e,listener:t},n=ja.bind(r);return n.listener=t,r.wrapFn=n,n}I.prototype.once=function(e,t){return At(t),this.on(e,Ys(this,e,t)),this};I.prototype.prependOnceListener=function(e,t){return At(t),this.prependListener(e,Ys(this,e,t)),this};I.prototype.removeListener=function(e,t){var r,n,i,a,o;if(At(t),n=this._events,n===void 0)return this;if(r=n[e],r===void 0)return this;if(r===t||r.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete n[e],n.removeListener&&this.emit("removeListener",e,r.listener||t));else if(typeof r!="function"){for(i=-1,a=r.length-1;a>=0;a--)if(r[a]===t||r[a].listener===t){o=r[a].listener,i=a;break}if(i<0)return this;i===0?r.shift():Fa(r,i),r.length===1&&(n[e]=r[0]),n.removeListener!==void 0&&this.emit("removeListener",e,o||t)}return this};I.prototype.off=I.prototype.removeListener;I.prototype.removeAllListeners=function(e){var t,r,n;if(r=this._events,r===void 0)return this;if(r.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):r[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete r[e]),this;if(arguments.length===0){var i=Object.keys(r),a;for(n=0;n<i.length;++n)a=i[n],a!=="removeListener"&&this.removeAllListeners(a);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(t=r[e],typeof t=="function")this.removeListener(e,t);else if(t!==void 0)for(n=t.length-1;n>=0;n--)this.removeListener(e,t[n]);return this};function Js(s,e,t){var r=s._events;if(r===void 0)return[];var n=r[e];return n===void 0?[]:typeof n=="function"?t?[n.listener||n]:[n]:t?$a(n):Zs(n,n.length)}I.prototype.listeners=function(e){return Js(this,e,!0)};I.prototype.rawListeners=function(e){return Js(this,e,!1)};I.listenerCount=function(s,e){return typeof s.listenerCount=="function"?s.listenerCount(e):Xs.call(s,e)};I.prototype.listenerCount=Xs;function Xs(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}I.prototype.eventNames=function(){return this._eventsCount>0?Mt(this._events):[]};function Zs(s,e){for(var t=new Array(e),r=0;r<e;++r)t[r]=s[r];return t}function Fa(s,e){for(;e+1<s.length;e++)s[e]=s[e+1];s.pop()}function $a(s){for(var e=new Array(s.length),t=0;t<e.length;++t)e[t]=s[t].listener||s[t];return e}function qa(s,e){return new Promise(function(t,r){function n(a){s.removeListener(e,i),r(a)}function i(){typeof s.removeListener=="function"&&s.removeListener("error",n),t([].slice.call(arguments))}en(s,e,i,{once:!0}),e!=="error"&&Ua(s,n,{once:!0})})}function Ua(s,e,t){typeof s.on=="function"&&en(s,"error",e,t)}function en(s,e,t,r){if(typeof s.on=="function")r.once?s.once(e,t):s.on(e,t);else if(typeof s.addEventListener=="function")s.addEventListener(e,function n(i){r.once&&s.removeEventListener(e,n),t(i)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof s)}});var Q=P(Ot=>{"use strict";Object.defineProperty(Ot,"__esModule",{value:!0});Ot.EnhancedEventEmitter=void 0;var Ba=tn(),za=B(),Wa=new za.Logger("EnhancedEventEmitter"),Ir=class extends Ba.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){Wa.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)}};Ot.EnhancedEventEmitter=Ir});var X=P(qe=>{"use strict";Object.defineProperty(qe,"__esModule",{value:!0});qe.InvalidStateError=qe.UnsupportedError=void 0;var Lr=class s extends Error{constructor(e){super(e),this.name="UnsupportedError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,s):this.stack=new Error(e).stack}};qe.UnsupportedError=Lr;var Mr=class s extends Error{constructor(e){super(e),this.name="InvalidStateError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,s):this.stack=new Error(e).stack}};qe.InvalidStateError=Mr});var Te=P(ot=>{"use strict";Object.defineProperty(ot,"__esModule",{value:!0});ot.clone=Ha;ot.generateRandomNumber=Va;ot.deepFreeze=rn;function Ha(s){if(s!==void 0)return Number.isNaN(s)?NaN:typeof structuredClone=="function"?structuredClone(s):JSON.parse(JSON.stringify(s))}function Va(){return Math.round(Math.random()*1e7)}function rn(s){let e=Reflect.ownKeys(s);for(let t of e){let r=s[t];(r&&typeof r=="object"||typeof r=="function")&&rn(r)}return Object.freeze(s)}});var sn=P(Nt=>{"use strict";Object.defineProperty(Nt,"__esModule",{value:!0});Nt.Logger=void 0;var Ue=at(),Be="h264-profile-level-id",Ar=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,Ue.default)(`${Be}:${e}`),this._warn=(0,Ue.default)(`${Be}:WARN:${e}`),this._error=(0,Ue.default)(`${Be}:ERROR:${e}`)):(this._debug=(0,Ue.default)(Be),this._warn=(0,Ue.default)(`${Be}:WARN`),this._error=(0,Ue.default)(`${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}};Nt.Logger=Ar});var ln=P(F=>{"use strict";Object.defineProperty(F,"__esModule",{value:!0});F.ProfileLevelId=F.Level=F.Profile=void 0;F.parseProfileLevelId=cn;F.profileLevelIdToString=dn;F.profileToString=Ya;F.levelToString=Ja;F.parseSdpProfileLevelId=ke;F.isSameProfile=Xa;F.isSameProfileAndLevel=Za;F.generateProfileLevelIdStringForAnswer=eo;F.supportedLevel=to;var Ga=sn(),ne=new Ga.Logger,M;(function(s){s[s.ConstrainedBaseline=1]="ConstrainedBaseline",s[s.Baseline=2]="Baseline",s[s.Main=3]="Main",s[s.ConstrainedHigh=4]="ConstrainedHigh",s[s.High=5]="High",s[s.PredictiveHigh444=6]="PredictiveHigh444"})(M||(F.Profile=M={}));var w;(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"})(w||(F.Level=w={}));var ze=class{profile;level;constructor(e,t){this.profile=e,this.level=t}};F.ProfileLevelId=ze;var Ka=new ze(M.ConstrainedBaseline,w.L3_1),re=class{mask;masked_value;constructor(e){this.mask=~an("x",e),this.masked_value=an("1",e)}isMatch(e){return this.masked_value===(e&this.mask)}},se=class{profile_idc;profile_iop;profile;constructor(e,t,r){this.profile_idc=e,this.profile_iop=t,this.profile=r}},Qa=[new se(66,new re("x1xx0000"),M.ConstrainedBaseline),new se(77,new re("1xxx0000"),M.ConstrainedBaseline),new se(88,new re("11xx0000"),M.ConstrainedBaseline),new se(66,new re("x0xx0000"),M.Baseline),new se(88,new re("10xx0000"),M.Baseline),new se(77,new re("0x0x0000"),M.Main),new se(100,new re("00000000"),M.High),new se(100,new re("00001100"),M.ConstrainedHigh),new se(244,new re("00000000"),M.PredictiveHigh444)],nn=[{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:w.L1},{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:w.L1_b},{max_macroblocks_per_second:3e3,max_macroblock_frame_size:396,level:w.L1_1},{max_macroblocks_per_second:6e3,max_macroblock_frame_size:396,level:w.L1_2},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:w.L1_3},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:w.L2},{max_macroblocks_per_second:19800,max_macroblock_frame_size:792,level:w.L2_1},{max_macroblocks_per_second:20250,max_macroblock_frame_size:1620,level:w.L2_2},{max_macroblocks_per_second:40500,max_macroblock_frame_size:1620,level:w.L3},{max_macroblocks_per_second:108e3,max_macroblock_frame_size:3600,level:w.L3_1},{max_macroblocks_per_second:216e3,max_macroblock_frame_size:5120,level:w.L3_2},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:w.L4},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:w.L4_1},{max_macroblocks_per_second:522240,max_macroblock_frame_size:8704,level:w.L4_2},{max_macroblocks_per_second:589824,max_macroblock_frame_size:22080,level:w.L5},{max_macroblocks_per_second:983040,max_macroblock_frame_size:36864,level:w.L5_1},{max_macroblocks_per_second:2073600,max_macroblock_frame_size:36864,level:w.L5_2}];function cn(s){if(typeof s!="string"||s.length!==6)return;let t=parseInt(s,16);if(t===0)return;let r=t&255,n=t>>8&255,i=t>>16&255,a;switch(r){case w.L1_1:{a=(n&16)!==0?w.L1_b:w.L1_1;break}case w.L1:case w.L1_2:case w.L1_3:case w.L2:case w.L2_1:case w.L2_2:case w.L3:case w.L3_1:case w.L3_2:case w.L4:case w.L4_1:case w.L4_2:case w.L5:case w.L5_1:case w.L5_2:{a=r;break}default:{ne.warn(`parseProfileLevelId() | unrecognized level_idc [str:${s}, level_idc:${r}]`);return}}for(let o of Qa)if(i===o.profile_idc&&o.profile_iop.isMatch(n))return ne.debug(`parseProfileLevelId() | result [str:${s}, profile:${o.profile}, level:${a}]`),new ze(o.profile,a);ne.warn(`parseProfileLevelId() | unrecognized profile_idc/profile_iop combination [str:${s}, profile_idc:${i}, profile_iop:${n}]`)}function dn(s){if(s.level==w.L1_b)switch(s.profile){case M.ConstrainedBaseline:return"42f00b";case M.Baseline:return"42100b";case M.Main:return"4d100b";default:{ne.warn(`profileLevelIdToString() | Level 1_b not is allowed for profile ${s.profile}`);return}}let e;switch(s.profile){case M.ConstrainedBaseline:{e="42e0";break}case M.Baseline:{e="4200";break}case M.Main:{e="4d00";break}case M.ConstrainedHigh:{e="640c";break}case M.High:{e="6400";break}case M.PredictiveHigh444:{e="f400";break}default:{ne.warn(`profileLevelIdToString() | unrecognized profile ${s.profile}`);return}}let t=s.level.toString(16);return t.length===1&&(t=`0${t}`),`${e}${t}`}function Ya(s){switch(s){case M.ConstrainedBaseline:return"ConstrainedBaseline";case M.Baseline:return"Baseline";case M.Main:return"Main";case M.ConstrainedHigh:return"ConstrainedHigh";case M.High:return"High";case M.PredictiveHigh444:return"PredictiveHigh444";default:{ne.warn(`profileToString() | unrecognized profile ${s}`);return}}}function Ja(s){switch(s){case w.L1_b:return"1b";case w.L1:return"1";case w.L1_1:return"1.1";case w.L1_2:return"1.2";case w.L1_3:return"1.3";case w.L2:return"2";case w.L2_1:return"2.1";case w.L2_2:return"2.2";case w.L3:return"3";case w.L3_1:return"3.1";case w.L3_2:return"3.2";case w.L4:return"4";case w.L4_1:return"4.1";case w.L4_2:return"4.2";case w.L5:return"5";case w.L5_1:return"5.1";case w.L5_2:return"5.2";default:{ne.warn(`levelToString() | unrecognized level ${s}`);return}}}function ke(s={}){let e=s["profile-level-id"];return e?cn(e):Ka}function Xa(s={},e={}){let t=ke(s),r=ke(e);return!!(t&&r&&t.profile===r.profile)}function Za(s={},e={}){let t=ke(s),r=ke(e);return!!(t&&r&&t.profile===r.profile&&t.level==r.level)}function eo(s={},e={}){if(!s["profile-level-id"]&&!e["profile-level-id"]){ne.warn("generateProfileLevelIdStringForAnswer() | profile-level-id missing in local and remote params");return}let t=ke(s),r=ke(e);if(!t)throw new TypeError("invalid local_profile_level_id");if(!r)throw new TypeError("invalid remote_profile_level_id");if(t.profile!==r.profile)throw new TypeError("H264 Profile mismatch");let n=on(s)&&on(e),i=t.level,a=r.level,o=so(i,a),c=n?i:o;return ne.debug(`generateProfileLevelIdStringForAnswer() | result [profile:${t.profile}, level:${c}]`),dn(new ze(t.profile,c))}function to(s,e){for(let r=nn.length-1;r>=0;--r){let n=nn[r];if(n.max_macroblock_frame_size*256<=s&&n.max_macroblocks_per_second<=e*n.max_macroblock_frame_size)return ne.debug(`supportedLevel() | result [max_frame_pixel_count:${s}, max_fps:${e}, level:${n.level}]`),n.level}ne.warn(`supportedLevel() | no level supported [max_frame_pixel_count:${s}, max_fps:${e}]`)}function an(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 ro(s,e){return s===w.L1_b?e!==w.L1&&e!==w.L1_b:e===w.L1_b?s!==w.L1:s<e}function so(s,e){return ro(s,e)?s:e}function on(s={}){let e=s["level-asymmetry-allowed"];return e===!0||e===1||e==="1"}});var oe=P(z=>{"use strict";Object.defineProperty(z,"__esModule",{value:!0});z.validateAndNormalizeRtpCapabilities=co;z.validateAndNormalizeRtpParameters=Nr;z.validateAndNormalizeSctpStreamParameters=lo;z.validateSctpCapabilities=po;z.getExtendedRtpCapabilities=uo;z.getRecvRtpCapabilities=ho;z.getSendRtpCapabilities=fo;z.getSendingRtpParameters=mo;z.getSendingRemoteRtpParameters=go;z.reduceCodecs=_o;z.generateProbatorRtpParameters=vo;z.canSend=wo;z.canReceive=yo;var pn=ln(),no=Te(),io="probator",ao=1234,oo=127;function co(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)bo(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)So(e)}function Nr(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)Ro(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)Co(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)To(e);if(s.rtcp&&typeof s.rtcp!="object")throw new TypeError("params.rtcp is not an object");s.rtcp||(s.rtcp={}),ko(s.rtcp)}function lo(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 po(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");Eo(s.numStreams)}function uo(s,e,t){let r={codecs:[],headerExtensions:[]};if(t)for(let n of s.codecs??[]){if(We(n))continue;let i=(e.codecs??[]).find(o=>Or(o,n,{strict:!0,modify:!0}));if(!i)continue;let a={kind:n.kind,mimeType:n.mimeType,clockRate:n.clockRate,channels:n.channels,localPayloadType:n.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:i.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:n.parameters??{},remoteParameters:i.parameters??{},rtcpFeedback:un(n,i)};r.codecs.push(a)}else for(let n of e.codecs??[]){if(We(n))continue;let i=(s.codecs??[]).find(o=>Or(o,n,{strict:!0,modify:!0}));if(!i)continue;let a={kind:i.kind,mimeType:i.mimeType,clockRate:i.clockRate,channels:i.channels,localPayloadType:i.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:n.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:i.parameters??{},remoteParameters:n.parameters??{},rtcpFeedback:un(i,n)};r.codecs.push(a)}for(let n of r.codecs){let i=s.codecs.find(o=>We(o)&&o.parameters?.apt===n.localPayloadType),a=e.codecs.find(o=>We(o)&&o.parameters?.apt===n.remotePayloadType);i&&a&&(n.localRtxPayloadType=i.preferredPayloadType,n.remoteRtxPayloadType=a.preferredPayloadType)}for(let n of e.headerExtensions){let i=s.headerExtensions.find(o=>Po(o,n));if(!i)continue;let a={kind:n.kind,uri:n.uri,sendId:i.preferredId,recvId:n.preferredId,encrypt:i.preferredEncrypt??!1,direction:"sendrecv"};switch(n.direction){case"sendrecv":{a.direction="sendrecv";break}case"recvonly":{a.direction="sendonly";break}case"sendonly":{a.direction="recvonly";break}case"inactive":{a.direction="inactive";break}}r.headerExtensions.push(a)}return r}function ho(s){return fn({direction:"recvonly",extendedRtpCapabilities:s})}function fo(s){return fn({direction:"sendonly",extendedRtpCapabilities:s})}function mo(s,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let r of e.codecs){if(r.kind!==s)continue;let n={mimeType:r.mimeType,payloadType:r.localPayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.localParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(n),r.localRtxPayloadType){let i={mimeType:`${r.kind}/rtx`,payloadType:r.localRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.localPayloadType},rtcpFeedback:[]};t.codecs.push(i)}}for(let r of e.headerExtensions){if(r.kind&&r.kind!==s||r.direction!=="sendrecv"&&r.direction!=="sendonly")continue;let n={uri:r.uri,id:r.sendId,encrypt:r.encrypt,parameters:{}};t.headerExtensions.push(n)}return t}function go(s,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let r of e.codecs){if(r.kind!==s)continue;let n={mimeType:r.mimeType,payloadType:r.localPayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.remoteParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(n),r.localRtxPayloadType){let i={mimeType:`${r.kind}/rtx`,payloadType:r.localRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.localPayloadType},rtcpFeedback:[]};t.codecs.push(i)}}for(let r of e.headerExtensions){if(r.kind&&r.kind!==s||r.direction!=="sendrecv"&&r.direction!=="sendonly")continue;let n={uri:r.uri,id:r.sendId,encrypt:r.encrypt,parameters:{}};t.headerExtensions.push(n)}if(t.headerExtensions.some(r=>r.uri==="http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"))for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(n=>n.type!=="goog-remb");else if(t.headerExtensions.some(r=>r.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"))for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(n=>n.type!=="transport-cc");else for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(n=>n.type!=="transport-cc"&&n.type!=="goog-remb");return t}function _o(s,e){let t=[];if(!e)t.push(s[0]),We(s[1])&&t.push(s[1]);else{for(let r=0;r<s.length;++r)if(Or(s[r],e,{strict:!0})){t.push(s[r]),We(s[r+1])&&t.push(s[r+1]);break}if(t.length===0)throw new TypeError("no matching codec found")}return t}function vo(s){s=no.clone(s),Nr(s);let e={mid:io,codecs:[],headerExtensions:[],encodings:[{ssrc:ao}],rtcp:{cname:"probator"}};return e.codecs.push(s.codecs[0]),e.codecs[0].payloadType=oo,e.headerExtensions=s.headerExtensions,e}function wo(s,e){return(e.codecs??[]).some(t=>t.kind===s)}function yo(s,e){if(Nr(s),s.codecs.length===0)return!1;let t=s.codecs[0];return(e.codecs??[]).some(r=>r.preferredPayloadType===t.payloadType)}function bo(s){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof s!="object")throw new TypeError("codec is not an object");if(!s.mimeType||typeof s.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(s.kind=t[1].toLowerCase(),typeof s.preferredPayloadType!="number")throw new TypeError("missing codec.preferredPayloadType");if(typeof s.clockRate!="number")throw new TypeError("missing codec.clockRate");s.kind==="audio"?typeof s.channels!="number"&&(s.channels=1):delete s.channels,(!s.parameters||typeof s.parameters!="object")&&(s.parameters={});for(let r of Object.keys(s.parameters)){let n=s.parameters[r];if(n===void 0&&(s.parameters[r]="",n=""),typeof n!="string"&&typeof n!="number")throw new TypeError(`invalid codec parameter [key:${r}s, value:${n}]`);if(r==="apt"&&typeof n!="number")throw new TypeError("invalid codec apt parameter")}(!s.rtcpFeedback||!Array.isArray(s.rtcpFeedback))&&(s.rtcpFeedback=[]);for(let r of s.rtcpFeedback)hn(r)}function hn(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 So(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 Ro(s){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof s!="object")throw new TypeError("codec is not an object");if(!s.mimeType||typeof s.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(typeof s.payloadType!="number")throw new TypeError("missing codec.payloadType");if(typeof s.clockRate!="number")throw new TypeError("missing codec.clockRate");t[1].toLowerCase()==="audio"?typeof s.channels!="number"&&(s.channels=1):delete s.channels,(!s.parameters||typeof s.parameters!="object")&&(s.parameters={});for(let n of Object.keys(s.parameters)){let i=s.parameters[n];if(i===void 0&&(s.parameters[n]="",i=""),typeof i!="string"&&typeof i!="number")throw new TypeError(`invalid codec parameter [key:${n}s, value:${i}]`);if(n==="apt"&&typeof i!="number")throw new TypeError("invalid codec apt parameter")}(!s.rtcpFeedback||!Array.isArray(s.rtcpFeedback))&&(s.rtcpFeedback=[]);for(let n of s.rtcpFeedback)hn(n)}function Co(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 To(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 ko(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 Eo(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 fn({direction:s,extendedRtpCapabilities:e}){let t={codecs:[],headerExtensions:[]};for(let r of e.codecs){let n={kind:r.kind,mimeType:r.mimeType,preferredPayloadType:r.remotePayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.localParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(n),!r.remoteRtxPayloadType)continue;let i={kind:r.kind,mimeType:`${r.kind}/rtx`,preferredPayloadType:r.remoteRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.remotePayloadType},rtcpFeedback:[]};t.codecs.push(i)}for(let r of e.headerExtensions){if(r.direction!=="sendrecv"&&r.direction!==s)continue;let n={kind:r.kind,uri:r.uri,preferredId:r.recvId,preferredEncrypt:r.encrypt??!1,direction:r.direction};t.headerExtensions.push(n)}return t}function We(s){return s?/.+\/rtx$/i.test(s.mimeType):!1}function Or(s,e,{strict:t=!1,modify:r=!1}={}){let n=s.mimeType.toLowerCase(),i=e.mimeType.toLowerCase();if(n!==i||s.clockRate!==e.clockRate||s.channels!==e.channels)return!1;switch(n){case"video/h264":{if(t){let a=s.parameters["packetization-mode"]??0,o=e.parameters["packetization-mode"]??0;if(a!==o||!pn.isSameProfile(s.parameters,e.parameters))return!1;let c;try{c=pn.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 Po(s,e){return!(s.kind&&e.kind&&s.kind!==e.kind||s.uri!==e.uri)}function un(s,e){let t=[];for(let r of s.rtcpFeedback??[]){let n=(e.rtcpFeedback??[]).find(i=>i.type===r.type&&(i.parameter===r.parameter||!i.parameter&&!r.parameter));n&&t.push(n)}return t}});var mn=P(jt=>{"use strict";Object.defineProperty(jt,"__esModule",{value:!0});jt.Logger=void 0;var He=at(),Ve="awaitqueue",jr=class{_debug;_warn;_error;constructor(e){e?(this._debug=He(`${Ve}:${e}`),this._warn=He(`${Ve}:WARN:${e}`),this._error=He(`${Ve}:ERROR:${e}`)):(this._debug=He(Ve),this._warn=He(`${Ve}:WARN`),this._error=He(`${Ve}: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}};jt.Logger=jr});var qr=P(Ge=>{"use strict";Object.defineProperty(Ge,"__esModule",{value:!0});Ge.AwaitQueueRemovedTaskError=Ge.AwaitQueueStoppedError=void 0;var Fr=class s extends Error{constructor(e){super(e??"queue stopped"),this.name="AwaitQueueStoppedError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,s)}};Ge.AwaitQueueStoppedError=Fr;var $r=class s extends Error{constructor(e){super(e??"queue task removed"),this.name="AwaitQueueRemovedTaskError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,s)}};Ge.AwaitQueueRemovedTaskError=$r});var gn=P(Ft=>{"use strict";Object.defineProperty(Ft,"__esModule",{value:!0});Ft.AwaitQueue=void 0;var xo=mn(),Ur=qr(),he=new xo.Logger("AwaitQueue"),Br=class{pendingTasks=new Map;nextTaskId=0;constructor(){he.debug("constructor()")}get size(){return this.pendingTasks.size}async push(e,t,r){if(t=t??e.name,he.debug(`push() [name:${t}, options:%o]`,r),typeof e!="function")throw new TypeError("given task is not a function");if(t)try{Object.defineProperty(e,"name",{value:t})}catch{}return new Promise((n,i)=>{if(t&&r?.removeOngoingTasksWithSameName)for(let o of this.pendingTasks.values())o.name===t&&o.reject(new Ur.AwaitQueueRemovedTaskError,{canExecuteNextTask:!1});let a={id:this.nextTaskId++,task:e,name:t,enqueuedAt:Date.now(),executedAt:void 0,completed:!1,resolve:o=>{if(a.completed)return;a.completed=!0,this.pendingTasks.delete(a.id),he.debug(`resolving task [name:${a.name}]`),n(o);let[c]=this.pendingTasks.values();c&&!c.executedAt&&this.execute(c)},reject:(o,{canExecuteNextTask:c})=>{if(!a.completed&&(a.completed=!0,this.pendingTasks.delete(a.id),he.debug(`rejecting task [name:${a.name}]: %s`,String(o)),i(o),c)){let[l]=this.pendingTasks.values();l&&!l.executedAt&&this.execute(l)}}};this.pendingTasks.set(a.id,a),this.pendingTasks.size===1&&this.execute(a)})}stop(){he.debug("stop()");for(let e of this.pendingTasks.values())he.debug(`stop() | stopping task [name:${e.name}]`),e.reject(new Ur.AwaitQueueStoppedError,{canExecuteNextTask:!1})}remove(e){he.debug(`remove() [taskIdx:${e}]`);let t=Array.from(this.pendingTasks.values())[e];if(!t){he.debug(`stop() | no task with given idx [taskIdx:${e}]`);return}t.reject(new Ur.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(he.debug(`execute() [name:${e.name}]`),e.executedAt)throw new Error("task already being executed");e.executedAt=Date.now();try{let t=await e.task();e.resolve(t)}catch(t){e.reject(t,{canExecuteNextTask:!0})}}};Ft.AwaitQueue=Br});var vn=P(we=>{"use strict";Object.defineProperty(we,"__esModule",{value:!0});we.AwaitQueueRemovedTaskError=we.AwaitQueueStoppedError=we.AwaitQueue=void 0;var Do=gn();Object.defineProperty(we,"AwaitQueue",{enumerable:!0,get:function(){return Do.AwaitQueue}});var _n=qr();Object.defineProperty(we,"AwaitQueueStoppedError",{enumerable:!0,get:function(){return _n.AwaitQueueStoppedError}});Object.defineProperty(we,"AwaitQueueRemovedTaskError",{enumerable:!0,get:function(){return _n.AwaitQueueRemovedTaskError}})});var yn=P($t=>{"use strict";Object.defineProperty($t,"__esModule",{value:!0});$t.Producer=void 0;var Io=B(),wn=Q(),Ke=X(),ce=new Io.Logger("Producer"),zr=class extends wn.EnhancedEventEmitter{_id;_localId;_closed=!1;_rtpSender;_track;_kind;_rtpParameters;_paused;_maxSpatialLayer;_stopTracks;_disableTrackOnPause;_zeroRtpOnPause;_appData;_observer=new wn.EnhancedEventEmitter;constructor({id:e,localId:t,rtpSender:r,track:n,rtpParameters:i,stopTracks:a,disableTrackOnPause:o,zeroRtpOnPause:c,appData:l}){super(),ce.debug("constructor()"),this._id=e,this._localId=t,this._rtpSender=r,this._track=n,this._kind=n.kind,this._rtpParameters=i,this._paused=o?!n.enabled:!1,this._maxSpatialLayer=void 0,this._stopTracks=a,this._disableTrackOnPause=o,this._zeroRtpOnPause=c,this._appData=l??{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get closed(){return this._closed}get kind(){return this._kind}get rtpSender(){return this._rtpSender}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get maxSpatialLayer(){return this._maxSpatialLayer}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(ce.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(ce.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new Ke.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(ce.debug("pause()"),this._closed){ce.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(ce.debug("resume()"),this._closed){ce.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(ce.debug("replaceTrack() [track:%o]",e),this._closed){if(e&&this._stopTracks)try{e.stop()}catch{}throw new Ke.InvalidStateError("closed")}else if(e?.readyState==="ended")throw new Ke.InvalidStateError("track ended");if(e===this._track){ce.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 Ke.InvalidStateError("closed");if(this._kind!=="video")throw new Ke.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 Ke.InvalidStateError("closed");if(typeof e!="object")throw new TypeError("invalid params");await new Promise((t,r)=>{this.safeEmit("@setrtpencodingparameters",e,t,r)})}onTrackEnded(){ce.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{}}};$t.Producer=zr});var Sn=P(qt=>{"use strict";Object.defineProperty(qt,"__esModule",{value:!0});qt.Consumer=void 0;var Lo=B(),bn=Q(),Mo=X(),de=new Lo.Logger("Consumer"),Wr=class extends bn.EnhancedEventEmitter{_id;_localId;_producerId;_closed=!1;_rtpReceiver;_track;_rtpParameters;_paused;_appData;_observer=new bn.EnhancedEventEmitter;constructor({id:e,localId:t,producerId:r,rtpReceiver:n,track:i,rtpParameters:a,appData:o}){super(),de.debug("constructor()"),this._id=e,this._localId=t,this._producerId=r,this._rtpReceiver=n,this._track=i,this._rtpParameters=a,this._paused=!i.enabled,this._appData=o??{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get producerId(){return this._producerId}get closed(){return this._closed}get kind(){return this._track.kind}get rtpReceiver(){return this._rtpReceiver}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(de.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(de.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new Mo.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(de.debug("pause()"),this._closed){de.error("pause() | Consumer closed");return}if(this._paused){de.debug("pause() | Consumer is already paused");return}this._paused=!0,this._track.enabled=!1,this.emit("@pause"),this._observer.safeEmit("pause")}resume(){if(de.debug("resume()"),this._closed){de.error("resume() | Consumer closed");return}if(!this._paused){de.debug("resume() | Consumer is already resumed");return}this._paused=!1,this._track.enabled=!0,this.emit("@resume"),this._observer.safeEmit("resume")}onTrackEnded(){de.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{}}};qt.Consumer=Wr});var Cn=P(Ut=>{"use strict";Object.defineProperty(Ut,"__esModule",{value:!0});Ut.DataProducer=void 0;var Ao=B(),Rn=Q(),Oo=X(),fe=new Ao.Logger("DataProducer"),Hr=class extends Rn.EnhancedEventEmitter{_id;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new Rn.EnhancedEventEmitter;constructor({id:e,dataChannel:t,sctpStreamParameters:r,appData:n}){super(),fe.debug("constructor()"),this._id=e,this._dataChannel=t,this._sctpStreamParameters=r,this._appData=n??{},this.handleDataChannel()}get id(){return this._id}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get bufferedAmount(){return this._dataChannel.bufferedAmount}get bufferedAmountLowThreshold(){return this._dataChannel.bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._dataChannel.bufferedAmountLowThreshold=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(fe.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(fe.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}send(e){if(fe.debug("send()"),this._closed)throw new Oo.InvalidStateError("closed");this._dataChannel.send(e)}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(fe.debug('DataChannel "open" event'),this.safeEmit("open"))}),this._dataChannel.addEventListener("error",e=>{if(this._closed)return;let t=e.error??new Error("unknown DataChannel error");e.error?.errorDetail==="sctp-failure"?fe.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):fe.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(fe.warn('DataChannel "close" event'),this._closed=!0,this.emit("@close"),this.safeEmit("close"),this._observer.safeEmit("close"))}),this._dataChannel.addEventListener("message",()=>{this._closed||fe.warn('DataChannel "message" event in a DataProducer, message discarded')}),this._dataChannel.addEventListener("bufferedamountlow",()=>{this._closed||this.safeEmit("bufferedamountlow")})}};Ut.DataProducer=Hr});var kn=P(Bt=>{"use strict";Object.defineProperty(Bt,"__esModule",{value:!0});Bt.DataConsumer=void 0;var No=B(),Tn=Q(),Ee=new No.Logger("DataConsumer"),Vr=class extends Tn.EnhancedEventEmitter{_id;_dataProducerId;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new Tn.EnhancedEventEmitter;constructor({id:e,dataProducerId:t,dataChannel:r,sctpStreamParameters:n,appData:i}){super(),Ee.debug("constructor()"),this._id=e,this._dataProducerId=t,this._dataChannel=r,this._sctpStreamParameters=n,this._appData=i??{},this.handleDataChannel()}get id(){return this._id}get dataProducerId(){return this._dataProducerId}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get binaryType(){return this._dataChannel.binaryType}set binaryType(e){this._dataChannel.binaryType=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(Ee.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(Ee.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(Ee.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"?Ee.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):Ee.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(Ee.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)})}};Bt.DataConsumer=Vr});var Pn=P(zt=>{"use strict";Object.defineProperty(zt,"__esModule",{value:!0});zt.Transport=void 0;var jo=vn(),Fo=B(),En=Q(),N=X(),Gr=Te(),ct=oe(),$o=yn(),qo=Sn(),Uo=Cn(),Bo=kn(),O=new Fo.Logger("Transport"),Kr=class{consumerOptions;promise;resolve;reject;constructor(e){this.consumerOptions=e,this.promise=new Promise((t,r)=>{this.resolve=t,this.reject=r})}},Qr=class extends En.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 jo.AwaitQueue;_pendingConsumerTasks=[];_consumerCreationInProgress=!1;_pendingPauseConsumers=new Map;_consumerPauseInProgress=!1;_pendingResumeConsumers=new Map;_consumerResumeInProgress=!1;_pendingCloseConsumers=new Map;_consumerCloseInProgress=!1;_observer=new En.EnhancedEventEmitter;constructor({direction:e,id:t,iceParameters:r,iceCandidates:n,dtlsParameters:i,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:l,appData:d,handlerFactory:p,getSendExtendedRtpCapabilities:u,recvRtpCapabilities:h,canProduceByKind:m}){super(),O.debug("constructor() [id:%s, direction:%s]",t,e),this._id=t,this._direction=e,this._getSendExtendedRtpCapabilities=u,this._recvRtpCapabilities=h,this._canProduceByKind=m,this._maxSctpMessageSize=a?.maxMessageSize;let f=Gr.clone(l)??{};delete f.iceServers,delete f.iceTransportPolicy,delete f.bundlePolicy,delete f.rtcpMuxPolicy,this._handler=p.factory({direction:e,iceParameters:r,iceCandidates:n,dtlsParameters:i,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:f,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities}),this._appData=d??{},this.handleHandler()}get id(){return this._id}get closed(){return this._closed}get direction(){return this._direction}get handler(){return this._handler}get iceGatheringState(){return this._iceGatheringState}get connectionState(){return this._connectionState}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){if(!this._closed){O.debug("close()"),this._closed=!0,this._awaitQueue.stop(),this._handler.close(),this._connectionState="closed";for(let e of this._producers.values())e.transportClosed();this._producers.clear();for(let e of this._consumers.values())e.transportClosed();this._consumers.clear();for(let e of this._dataProducers.values())e.transportClosed();this._dataProducers.clear();for(let e of this._dataConsumers.values())e.transportClosed();this._dataConsumers.clear(),this._observer.safeEmit("close"),super.close(),this._observer.close()}}async getStats(){if(this._closed)throw new N.InvalidStateError("closed");return this._handler.getTransportStats()}async restartIce({iceParameters:e}){if(O.debug("restartIce()"),this._closed)throw new N.InvalidStateError("closed");if(!e)throw new TypeError("missing iceParameters");return this._awaitQueue.push(async()=>await this._handler.restartIce(e),"transport.restartIce()")}async updateIceServers({iceServers:e}={}){if(O.debug("updateIceServers()"),this._closed)throw new N.InvalidStateError("closed");if(!Array.isArray(e))throw new TypeError("missing iceServers");return this._awaitQueue.push(async()=>this._handler.updateIceServers(e),"transport.updateIceServers()")}async produce({track:e,streamId:t,encodings:r,codecOptions:n,headerExtensionOptions:i,codec:a,stopTracks:o=!0,disableTrackOnPause:c=!0,zeroRtpOnPause:l=!1,onRtpSender:d,appData:p={}}={}){if(O.debug("produce() [track:%o]",e),this._closed)throw new N.InvalidStateError("closed");if(e){if(this._direction!=="send")throw new N.UnsupportedError("not a sending Transport");if(this._canProduceByKind[e.kind]){if(e.readyState==="ended")throw new N.InvalidStateError("track ended");if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(this.listenerCount("produce")===0)throw new TypeError('no "produce" listener set into this transport');if(p&&typeof p!="object")throw new TypeError("if given, appData must be an object")}else throw new N.UnsupportedError(`cannot produce ${e.kind}`)}else throw new TypeError("missing track");return this._awaitQueue.push(async()=>{let u;if(r&&!Array.isArray(r))throw TypeError("encodings must be an array");r?.length===0?u=void 0:r&&(u=r.map(g=>{let _={active:!0};return g.active===!1&&(_.active=!1),typeof g.dtx=="boolean"&&(_.dtx=g.dtx),typeof g.scalabilityMode=="string"&&(_.scalabilityMode=g.scalabilityMode),typeof g.scaleResolutionDownBy=="number"&&(_.scaleResolutionDownBy=g.scaleResolutionDownBy),typeof g.maxBitrate=="number"&&(_.maxBitrate=g.maxBitrate),typeof g.maxFramerate=="number"&&(_.maxFramerate=g.maxFramerate),typeof g.adaptivePtime=="boolean"&&(_.adaptivePtime=g.adaptivePtime),typeof g.priority=="string"&&(_.priority=g.priority),typeof g.networkPriority=="string"&&(_.networkPriority=g.networkPriority),_}));let{localId:h,rtpParameters:m,rtpSender:f}=await this._handler.send({track:e,streamId:t,encodings:u,codecOptions:n,headerExtensionOptions:i,codec:a,onRtpSender:d});try{ct.validateAndNormalizeRtpParameters(m);let{id:g}=await new Promise((v,S)=>{this.safeEmit("produce",{kind:e.kind,rtpParameters:m,appData:p},v,S)}),_=new $o.Producer({id:g,localId:h,rtpSender:f,track:e,rtpParameters:m,stopTracks:o,disableTrackOnPause:c,zeroRtpOnPause:l,appData:p});return this._producers.set(_.id,_),this.handleProducer(_),this._observer.safeEmit("newproducer",_),_}catch(g){throw this._handler.stopSending(h).catch(()=>{}),g}},"transport.produce()").catch(u=>{if(o)try{e.stop()}catch{}throw u})}async consume({id:e,producerId:t,kind:r,rtpParameters:n,streamId:i,onRtpReceiver:a,appData:o={}}){if(O.debug("consume()"),this._closed)throw new N.InvalidStateError("closed");if(this._direction!=="recv")throw new N.UnsupportedError("not a receiving Transport");if(typeof e!="string")throw new TypeError("missing id");if(typeof t!="string")throw new TypeError("missing producerId");if(r!=="audio"&&r!=="video")throw new TypeError(`invalid kind '${r}'`);if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(o&&typeof o!="object")throw new TypeError("if given, appData must be an object");let c=Gr.clone(n);if(!ct.canReceive(c,this._recvRtpCapabilities))throw new N.UnsupportedError("cannot consume this Producer");let d=new Kr({id:e,producerId:t,kind:r,rtpParameters:c,streamId:i,onRtpReceiver:a,appData:o});return this._pendingConsumerTasks.push(d),queueMicrotask(()=>{this._closed||this._consumerCreationInProgress===!1&&this.createPendingConsumers()}),d.promise}async produceData({ordered:e=!0,maxPacketLifeTime:t,maxRetransmits:r,label:n="",protocol:i="",appData:a={}}={}){if(O.debug("produceData()"),this._closed)throw new N.InvalidStateError("closed");if(this._direction!=="send")throw new N.UnsupportedError("not a sending Transport");if(this._maxSctpMessageSize){if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(this.listenerCount("producedata")===0)throw new TypeError('no "producedata" listener set into this transport');if(a&&typeof a!="object")throw new TypeError("if given, appData must be an object")}else throw new N.UnsupportedError("SCTP not enabled by remote Transport");return(t||r)&&(e=!1),this._awaitQueue.push(async()=>{let{dataChannel:o,sctpStreamParameters:c}=await this._handler.sendDataChannel({sctpStreamParameters:{ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:n,protocol:i}});ct.validateAndNormalizeSctpStreamParameters(c);let{id:l}=await new Promise((p,u)=>{this.safeEmit("producedata",{sctpStreamParameters:c,label:n,protocol:i,appData:a},p,u)}),d=new Uo.DataProducer({id:l,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:n="",protocol:i="",appData:a={}}){if(O.debug("consumeData()"),this._closed)throw new N.InvalidStateError("closed");if(this._direction!=="recv")throw new N.UnsupportedError("not a receiving Transport");if(this._maxSctpMessageSize){if(typeof e!="string")throw new TypeError("missing id");if(typeof t!="string")throw new TypeError("missing dataProducerId");if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(a&&typeof a!="object")throw new TypeError("if given, appData must be an object")}else throw new N.UnsupportedError("SCTP not enabled by remote Transport");let o=Gr.clone(r);return ct.validateAndNormalizeSctpStreamParameters(o),this._awaitQueue.push(async()=>{let{dataChannel:c}=await this._handler.receiveDataChannel({maxMessageSize:this._maxSctpMessageSize,sctpStreamParameters:o,label:n,protocol:i}),l=new Bo.DataConsumer({id:e,dataProducerId:t,dataChannel:c,sctpStreamParameters:o,appData:a});return this._dataConsumers.set(l.id,l),this.handleDataConsumer(l),this._observer.safeEmit("newdataconsumer",l),l},"transport.consumeData()")}getDataChannelMaxMessageSize(){return this._handler.getDataChannelMaxMessageSize()}createPendingConsumers(){this._consumerCreationInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingConsumerTasks.length===0){O.debug("createPendingConsumers() | there is no Consumer to be created");return}let e=[...this._pendingConsumerTasks];this._pendingConsumerTasks=[];let t,r=[];for(let n of e){let{id:i,kind:a,rtpParameters:o,streamId:c,onRtpReceiver:l}=n.consumerOptions;r.push({trackId:i,kind:a,rtpParameters:o,streamId:c,onRtpReceiver:l})}try{let n=await this._handler.receive(r);for(let i=0;i<n.length;++i){let a=e[i],o=n[i],{id:c,producerId:l,kind:d,rtpParameters:p,appData:u}=a.consumerOptions,{localId:h,rtpReceiver:m,track:f}=o,g=new qo.Consumer({id:c,localId:h,producerId:l,rtpReceiver:m,track:f,rtpParameters:p,appData:u});this._consumers.set(g.id,g),this.handleConsumer(g),!this._probatorConsumerCreated&&!t&&d==="video"&&(t=g),this._observer.safeEmit("newconsumer",g),a.resolve(g)}}catch(n){for(let i of e)i.reject(n)}if(t)try{let n=ct.generateProbatorRtpParameters(t.rtpParameters);await this._handler.receive([{trackId:"probator",kind:"video",rtpParameters:n}]),O.debug("createPendingConsumers() | Consumer for RTP probation created"),this._probatorConsumerCreated=!0}catch(n){O.error("createPendingConsumers() | failed to create Consumer for RTP probation:%o",n)}},"transport.createPendingConsumers()").then(()=>{this._consumerCreationInProgress=!1,this._pendingConsumerTasks.length>0&&this.createPendingConsumers()}).catch(()=>{})}pausePendingConsumers(){this._consumerPauseInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingPauseConsumers.size===0){O.debug("pausePendingConsumers() | there is no Consumer to be paused");return}let e=Array.from(this._pendingPauseConsumers.values());this._pendingPauseConsumers.clear();try{let t=e.map(r=>r.localId);await this._handler.pauseReceiving(t)}catch(t){O.error("pausePendingConsumers() | failed to pause Consumers:",t)}},"transport.pausePendingConsumers()").then(()=>{this._consumerPauseInProgress=!1,this._pendingPauseConsumers.size>0&&this.pausePendingConsumers()}).catch(()=>{})}resumePendingConsumers(){this._consumerResumeInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingResumeConsumers.size===0){O.debug("resumePendingConsumers() | there is no Consumer to be resumed");return}let e=Array.from(this._pendingResumeConsumers.values());this._pendingResumeConsumers.clear();try{let t=e.map(r=>r.localId);await this._handler.resumeReceiving(t)}catch(t){O.error("resumePendingConsumers() | failed to resume Consumers:",t)}},"transport.resumePendingConsumers()").then(()=>{this._consumerResumeInProgress=!1,this._pendingResumeConsumers.size>0&&this.resumePendingConsumers()}).catch(()=>{})}closePendingConsumers(){this._consumerCloseInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingCloseConsumers.size===0){O.debug("closePendingConsumers() | there is no Consumer to be closed");return}let e=Array.from(this._pendingCloseConsumers.values());this._pendingCloseConsumers.clear();try{await this._handler.stopReceiving(e.map(t=>t.localId))}catch(t){O.error("closePendingConsumers() | failed to close Consumers:",t)}},"transport.closePendingConsumers()").then(()=>{this._consumerCloseInProgress=!1,this._pendingCloseConsumers.size>0&&this.closePendingConsumers()}).catch(()=>{})}handleHandler(){let e=this._handler;e.on("@connect",({dtlsParameters:t},r,n)=>{if(this._closed){n(new N.InvalidStateError("closed"));return}this.safeEmit("connect",{dtlsParameters:t},r,n)}),e.on("@icegatheringstatechange",t=>{t!==this._iceGatheringState&&(O.debug("ICE gathering state changed to %s",t),this._iceGatheringState=t,this._closed||this.safeEmit("icegatheringstatechange",t))}),e.on("@icecandidateerror",t=>{O.warn(`ICE candidate error [url:${t.url}, localAddress:${t.address}, localPort:${t.port}]: ${t.errorCode} "${t.errorText}"`),this.safeEmit("icecandidateerror",t)}),e.on("@connectionstatechange",t=>{t!==this._connectionState&&(O.debug("connection state changed to %s",t),this._connectionState=t,this._closed||this.safeEmit("connectionstatechange",t))})}handleProducer(e){e.on("@close",()=>{this._producers.delete(e.id),!this._closed&&this._awaitQueue.push(async()=>await this._handler.stopSending(e.localId),"producer @close event").catch(t=>O.warn("producer.close() failed:%o",t))}),e.on("@pause",(t,r)=>{this._awaitQueue.push(async()=>await this._handler.pauseSending(e.localId),"producer @pause event").then(t).catch(r)}),e.on("@resume",(t,r)=>{this._awaitQueue.push(async()=>await this._handler.resumeSending(e.localId),"producer @resume event").then(t).catch(r)}),e.on("@replacetrack",(t,r,n)=>{this._awaitQueue.push(async()=>await this._handler.replaceTrack(e.localId,t),"producer @replacetrack event").then(r).catch(n)}),e.on("@setmaxspatiallayer",(t,r,n)=>{this._awaitQueue.push(async()=>await this._handler.setMaxSpatialLayer(e.localId,t),"producer @setmaxspatiallayer event").then(r).catch(n)}),e.on("@setrtpencodingparameters",(t,r,n)=>{this._awaitQueue.push(async()=>await this._handler.setRtpEncodingParameters(e.localId,t),"producer @setrtpencodingparameters event").then(r).catch(n)}),e.on("@getstats",(t,r)=>{if(this._closed)return r(new N.InvalidStateError("closed"));this._handler.getSenderStats(e.localId).then(t).catch(r)})}handleConsumer(e){e.on("@close",()=>{this._consumers.delete(e.id),this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.delete(e.id),!this._closed&&(this._pendingCloseConsumers.set(e.id,e),this._consumerCloseInProgress===!1&&this.closePendingConsumers())}),e.on("@pause",()=>{this._pendingResumeConsumers.has(e.id)&&this._pendingResumeConsumers.delete(e.id),this._pendingPauseConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerPauseInProgress===!1&&this.pausePendingConsumers()})}),e.on("@resume",()=>{this._pendingPauseConsumers.has(e.id)&&this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerResumeInProgress===!1&&this.resumePendingConsumers()})}),e.on("@getstats",(t,r)=>{if(this._closed)return r(new N.InvalidStateError("closed"));this._handler.getReceiverStats(e.localId).then(t).catch(r)})}handleDataProducer(e){e.on("@close",()=>{this._dataProducers.delete(e.id)})}handleDataConsumer(e){e.on("@close",()=>{this._dataConsumers.delete(e.id)})}};zt.Transport=Qr});var Wt=P((Gl,Dn)=>{"use strict";var xn=Dn.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(xn).forEach(function(s){var e=xn[s];e.forEach(function(t){t.reg||(t.reg=/(.*)/),t.format||(t.format="%s")})})});var Mn=P(me=>{"use strict";var Qe=function(s){return String(Number(s))===s?Number(s):s},zo=function(s,e,t,r){if(r&&!t)e[r]=Qe(s[1]);else for(var n=0;n<t.length;n+=1)s[n+1]!=null&&(e[t[n]]=Qe(s[n+1]))},Wo=function(s,e,t){var r=s.name&&s.names;s.push&&!e[s.push]?e[s.push]=[]:r&&!e[s.name]&&(e[s.name]={});var n=s.push?{}:r?e[s.name]:e;zo(t.match(s.reg),n,s.names,s.name),s.push&&e[s.push].push(n)},In=Wt(),Ho=RegExp.prototype.test.bind(/^([a-z])=(.*)/);me.parse=function(s){var e={},t=[],r=e;return s.split(/(\r\n|\r|\n)/).filter(Ho).forEach(function(n){var i=n[0],a=n.slice(2);i==="m"&&(t.push({rtp:[],fmtp:[]}),r=t[t.length-1]);for(var o=0;o<(In[i]||[]).length;o+=1){var c=In[i][o];if(c.reg.test(a))return Wo(c,r,a)}}),e.media=t,e};var Ln=function(s,e){var t=e.split(/=(.+)/,2);return t.length===2?s[t[0]]=Qe(t[1]):t.length===1&&e.length>1&&(s[t[0]]=void 0),s};me.parseParams=function(s){return s.split(/;\s?/).reduce(Ln,{})};me.parseFmtpConfig=me.parseParams;me.parsePayloads=function(s){return s.toString().split(" ").map(Number)};me.parseRemoteCandidates=function(s){for(var e=[],t=s.split(" ").map(Qe),r=0;r<t.length;r+=3)e.push({component:t[r],ip:t[r+1],port:t[r+2]});return e};me.parseImageAttributes=function(s){return s.split(" ").map(function(e){return e.substring(1,e.length-1).split(",").reduce(Ln,{})})};me.parseSimulcastStreamList=function(s){return s.split(";").map(function(e){return e.split(",").map(function(t){var r,n=!1;return t[0]!=="~"?r=Qe(t):(r=Qe(t.substring(1,t.length)),n=!0),{scid:r,paused:n}})})}});var On=P((Ql,An)=>{"use strict";var Yr=Wt(),Vo=/%[sdv%]/g,Go=function(s){var e=1,t=arguments,r=t.length;return s.replace(Vo,function(n){if(e>=r)return n;var i=t[e];switch(e+=1,n){case"%%":return"%";case"%s":return String(i);case"%d":return Number(i);case"%v":return""}})},dt=function(s,e,t){var r=e.format instanceof Function?e.format(e.push?t:t[e.name]):e.format,n=[s+"="+r];if(e.names)for(var i=0;i<e.names.length;i+=1){var a=e.names[i];e.name?n.push(t[e.name][a]):n.push(t[e.names[i]])}else n.push(t[e.name]);return Go.apply(null,n)},Ko=["v","o","s","i","u","e","p","c","b","t","r","z","a"],Qo=["i","c","b","a"];An.exports=function(s,e){e=e||{},s.version==null&&(s.version=0),s.name==null&&(s.name=" "),s.media.forEach(function(i){i.payloads==null&&(i.payloads="")});var t=e.outerOrder||Ko,r=e.innerOrder||Qo,n=[];return t.forEach(function(i){Yr[i].forEach(function(a){a.name in s&&s[a.name]!=null?n.push(dt(i,a,s)):a.push in s&&s[a.push]!=null&&s[a.push].forEach(function(o){n.push(dt(i,a,o))})})}),s.media.forEach(function(i){n.push(dt("m",Yr.m[0],i)),r.forEach(function(a){Yr[a].forEach(function(o){o.name in i&&i[o.name]!=null?n.push(dt(a,o,i)):o.push in i&&i[o.push]!=null&&i[o.push].forEach(function(c){n.push(dt(a,o,c))})})})}),n.join(`\r
2
2
  `)+`\r
3
- `}});var ge=E(le=>{"use strict";var Pe=Mn(),Yo=An(),Jo=zt();le.grammar=Jo;le.write=Yo;le.parse=Pe.parse;le.parseParams=Pe.parseParams;le.parseFmtpConfig=Pe.parseFmtpConfig;le.parsePayloads=Pe.parsePayloads;le.parseRemoteCandidates=Pe.parseRemoteCandidates;le.parseImageAttributes=Pe.parseImageAttributes;le.parseSimulcastStreamList=Pe.parseSimulcastStreamList});var xe=E(Qr=>{"use strict";Object.defineProperty(Qr,"__esModule",{value:!0});Qr.parse=Zo;var Xo=new RegExp("^[LS]([1-9]\\d{0,1})T([1-9]\\d{0,1})");function Zo(s){let e=Xo.exec(s??"");return e?{spatialLayers:Number(e[1]),temporalLayers:Number(e[2])}:{spatialLayers:1,temporalLayers:1}}});var Fn=E(ye=>{"use strict";Object.defineProperty(ye,"__esModule",{value:!0});ye.OfferMediaSection=ye.AnswerMediaSection=ye.MediaSection=void 0;var ec=ge(),Nn=Te(),lt=class{_mediaObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r}){if(this._mediaObject={type:"",port:0,protocol:"",payloads:"",rtp:[],fmtp:[]},e&&this.setIceParameters(e),t){this._mediaObject.candidates=[];for(let n of t){let i={foundation:n.foundation,component:1,ip:n.address??n.ip,port:n.port,priority:n.priority,transport:n.protocol,type:n.type};n.tcpType&&(i.tcptype=n.tcpType),this._mediaObject.candidates.push(i)}this._mediaObject.endOfCandidates="end-of-candidates",this._mediaObject.iceOptions="renomination"}r&&this.setDtlsRole(r.role)}get mid(){return String(this._mediaObject.mid)}get closed(){return this._mediaObject.port===0}getObject(){return this._mediaObject}setIceParameters(e){this._mediaObject.iceUfrag=e.usernameFragment,this._mediaObject.icePwd=e.password}pause(){this._mediaObject.direction="inactive"}disable(){this.pause()}close(){this.disable(),this._mediaObject.port=0,delete this._mediaObject.candidates,delete this._mediaObject.endOfCandidates,delete this._mediaObject.iceUfrag,delete this._mediaObject.icePwd,delete this._mediaObject.iceOptions,this._mediaObject.rtp=[],this._mediaObject.fmtp=[],delete this._mediaObject.rtcp,delete this._mediaObject.rtcpFb,delete this._mediaObject.ssrcs,delete this._mediaObject.ssrcGroups,delete this._mediaObject.simulcast,delete this._mediaObject.simulcast_03,delete this._mediaObject.rids,delete this._mediaObject.extmapAllowMixed}};ye.MediaSection=lt;var Yr=class extends lt{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:n,plainRtpParameters:i,offerMediaObject:a,offerRtpParameters:o,answerRtpParameters:c,codecOptions:l}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r}),this._mediaObject.mid=String(a.mid),this._mediaObject.type=a.type,this._mediaObject.protocol=a.protocol,i?(this._mediaObject.connection={ip:i.ip,version:i.ipVersion},this._mediaObject.port=i.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},this._mediaObject.port=7),a.type){case"audio":case"video":{this._mediaObject.direction="recvonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[];for(let d of c.codecs){let p={payload:d.payloadType,codec:jn(d),rate:d.clockRate};d.channels>1&&(p.encoding=d.channels),this._mediaObject.rtp.push(p);let u=Nn.clone(d.parameters)??{},h=Nn.clone(d.rtcpFeedback)??[];if(l){let{opusStereo:f,opusFec:g,opusDtx:_,opusMaxPlaybackRate:v,opusMaxAverageBitrate:T,opusPtime:P,opusNack:x,videoGoogleStartBitrate:D,videoGoogleMaxBitrate:$,videoGoogleMinBitrate:V}=l,te=o.codecs.find(ae=>ae.payloadType===d.payloadType);switch(d.mimeType.toLowerCase()){case"audio/opus":case"audio/multiopus":{f!==void 0&&(te.parameters["sprop-stereo"]=f?1:0,u.stereo=f?1:0),g!==void 0&&(te.parameters.useinbandfec=g?1:0,u.useinbandfec=g?1:0),_!==void 0&&(te.parameters.usedtx=_?1:0,u.usedtx=_?1:0),v!==void 0&&(u.maxplaybackrate=v),T!==void 0&&(u.maxaveragebitrate=T),P!==void 0&&(te.parameters.ptime=P,u.ptime=P),x||(te.rtcpFeedback=te.rtcpFeedback.filter(ae=>ae.type!=="nack"||ae.parameter),h=h.filter(ae=>ae.type!=="nack"||ae.parameter));break}case"video/vp8":case"video/vp9":case"video/h264":case"video/h265":case"video/av1":{D!==void 0&&(u["x-google-start-bitrate"]=D),$!==void 0&&(u["x-google-max-bitrate"]=$),V!==void 0&&(u["x-google-min-bitrate"]=V);break}}}let m={payload:d.payloadType,config:""};for(let f of Object.keys(u))m.config&&(m.config+=";"),m.config+=`${f}=${u[f]}`;m.config&&this._mediaObject.fmtp.push(m);for(let f of h)this._mediaObject.rtcpFb.push({payload:d.payloadType,type:f.type,subtype:f.parameter})}this._mediaObject.payloads=c.codecs.map(d=>d.payloadType).join(" "),this._mediaObject.ext=[];for(let d of c.headerExtensions)(a.ext??[]).some(u=>u.uri===d.uri)&&this._mediaObject.ext.push({uri:d.uri,value:d.id});if(a.extmapAllowMixed==="extmap-allow-mixed"&&(this._mediaObject.extmapAllowMixed="extmap-allow-mixed"),a.simulcast){this._mediaObject.simulcast={dir1:"recv",list1:a.simulcast.list1},this._mediaObject.rids=[];for(let d of a.rids??[])d.direction==="send"&&this._mediaObject.rids.push({id:d.id,direction:"recv"})}else if(a.simulcast_03){this._mediaObject.simulcast_03={value:a.simulcast_03.value.replace(/send/g,"recv")},this._mediaObject.rids=[];for(let d of a.rids??[])d.direction==="send"&&this._mediaObject.rids.push({id:d.id,direction:"recv"})}this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";break}case"application":{typeof a.sctpPort=="number"?(this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=n.port,this._mediaObject.maxMessageSize=n.maxMessageSize):a.sctpmap&&(this._mediaObject.payloads=String(n.port),this._mediaObject.sctpmap={app:"webrtc-datachannel",sctpmapNumber:n.port,maxMessageSize:n.maxMessageSize});break}}}setDtlsRole(e){switch(e){case"client":{this._mediaObject.setup="active";break}case"server":{this._mediaObject.setup="passive";break}case"auto":{this._mediaObject.setup="actpass";break}}}resume(){this._mediaObject.direction="recvonly"}muxSimulcastStreams(e){if(!this._mediaObject.simulcast?.list1)return;let t={};for(let i of e)i.rid&&(t[i.rid]=i);let r=this._mediaObject.simulcast.list1,n=ec.parseSimulcastStreamList(r);for(let i of n)for(let a of i)a.paused=!t[a.scid]?.active;this._mediaObject.simulcast.list1=n.map(i=>i.map(a=>`${a.paused?"~":""}${a.scid}`).join(",")).join(";")}};ye.AnswerMediaSection=Yr;var Jr=class extends lt{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:n,plainRtpParameters:i,mid:a,kind:o,offerRtpParameters:c,streamId:l,trackId:d}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r}),this._mediaObject.mid=String(a),this._mediaObject.type=o,i?(this._mediaObject.connection={ip:i.ip,version:i.ipVersion},this._mediaObject.protocol="RTP/AVP",this._mediaObject.port=i.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},n?this._mediaObject.protocol="UDP/DTLS/SCTP":this._mediaObject.protocol="UDP/TLS/RTP/SAVPF",this._mediaObject.port=7),this._mediaObject.extmapAllowMixed="extmap-allow-mixed",o){case"audio":case"video":{this._mediaObject.direction="sendonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[],this._mediaObject.msid=[{id:l,appdata:d}];for(let m of c.codecs){let f={payload:m.payloadType,codec:jn(m),rate:m.clockRate};m.channels>1&&(f.encoding=m.channels),this._mediaObject.rtp.push(f);let g={payload:m.payloadType,config:""};for(let _ of Object.keys(m.parameters??{}))g.config&&(g.config+=";"),g.config+=`${_}=${m.parameters[_]}`;g.config&&this._mediaObject.fmtp.push(g);for(let _ of m.rtcpFeedback)this._mediaObject.rtcpFb.push({payload:m.payloadType,type:_.type,subtype:_.parameter})}this._mediaObject.payloads=c.codecs.map(m=>m.payloadType).join(" "),this._mediaObject.ext=[];for(let m of c.headerExtensions)this._mediaObject.ext.push({uri:m.uri,value:m.id});this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";let p=c.encodings[0],u=p.ssrc,h=p.rtx?.ssrc;this._mediaObject.ssrcs=[],this._mediaObject.ssrcGroups=[],u&&c.rtcp.cname&&this._mediaObject.ssrcs.push({id:u,attribute:"cname",value:c.rtcp.cname}),h&&(c.rtcp.cname&&this._mediaObject.ssrcs.push({id:h,attribute:"cname",value:c.rtcp.cname}),u&&this._mediaObject.ssrcGroups.push({semantics:"FID",ssrcs:`${u} ${h}`}));break}case"application":{this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=n.port,this._mediaObject.maxMessageSize=n.maxMessageSize;break}}}setDtlsRole(e){this._mediaObject.setup="actpass"}resume(){this._mediaObject.direction="sendonly"}};ye.OfferMediaSection=Jr;function jn(s){let t=new RegExp("^(audio|video)/(.+)","i").exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");return t[2]}});var Ye=E(Vt=>{"use strict";Object.defineProperty(Vt,"__esModule",{value:!0});Vt.RemoteSdp=void 0;var tc=ge(),rc=B(),Wt=Fn(),sc=Zr(),nc=["av1","h264"],Ht=new rc.Logger("RemoteSdp"),Xr=class{_iceParameters;_iceCandidates;_dtlsParameters;_sctpParameters;_plainRtpParameters;_mediaSections=[];_midToIndex=new Map;_firstMid;_sdpObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:n,plainRtpParameters:i}){if(this._iceParameters=e,this._iceCandidates=t,this._dtlsParameters=r,this._sctpParameters=n,this._plainRtpParameters=i,this._sdpObject={version:0,origin:{address:"0.0.0.0",ipVer:4,netType:"IN",sessionId:"10000",sessionVersion:0,username:`media-client-v${sc.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:""}]}i&&(this._sdpObject.origin.address=i.ip,this._sdpObject.origin.ipVer=i.ipVersion)}updateIceParameters(e){Ht.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){Ht.debug("updateDtlsRole() [role:%s]",e),this._dtlsParameters.role=e;for(let t of this._mediaSections)t.setDtlsRole(e)}setSessionExtmapAllowMixed(){Ht.debug("setSessionExtmapAllowMixed()"),this._sdpObject.extmapAllowMixed="extmap-allow-mixed"}getNextMediaSectionIdx(){for(let e=0;e<this._mediaSections.length;++e){let t=this._mediaSections[e];if(t.closed)return{idx:e,reuseMid:t.mid}}return{idx:this._mediaSections.length}}send({offerMediaObject:e,reuseMid:t,offerRtpParameters:r,answerRtpParameters:n,codecOptions:i}){let a=new Wt.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,offerMediaObject:e,offerRtpParameters:r,answerRtpParameters:n,codecOptions:i}),o=a.getObject();o.rtp.find(l=>nc.includes(l.codec.toLowerCase()))||(o.ext=o.ext?.filter(l=>l.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:n,trackId:i}){this.setSessionExtmapAllowMixed();let a=new Wt.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,mid:e,kind:t,offerRtpParameters:r,streamId:n,trackId:i}),o=this._mediaSections.find(c=>c.closed&&c.getObject().type===t);o?this.replaceMediaSection(a,o.mid):this.addMediaSection(a)}pauseMediaSection(e){this.findMediaSection(e).pause()}resumeSendingMediaSection(e){this.findMediaSection(e).resume()}resumeReceivingMediaSection(e){this.findMediaSection(e).resume()}disableMediaSection(e){this.findMediaSection(e).disable()}closeMediaSection(e){let t=this.findMediaSection(e);return e===this._firstMid?(Ht.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 Wt.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 Wt.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++,tc.write(this._sdpObject)}addMediaSection(e){this._firstMid||(this._firstMid=e.mid),this._mediaSections.push(e),this._midToIndex.set(e.mid,this._mediaSections.length-1),this._sdpObject.media.push(e.getObject()),this.regenerateBundleMids()}replaceMediaSection(e,t){if(typeof t=="string"){let r=this._midToIndex.get(t);if(r===void 0)throw new Error(`no media section found for reuseMid '${t}'`);let n=this._mediaSections[r];this._mediaSections[r]=e,this._midToIndex.delete(n.mid),this._midToIndex.set(e.mid,r),this._sdpObject.media[r]=e.getObject(),this.regenerateBundleMids()}else{let r=this._midToIndex.get(e.mid);if(r===void 0)throw new Error(`no media section found with mid '${e.mid}'`);this._mediaSections[r]=e,this._sdpObject.media[r]=e.getObject()}}findMediaSection(e){let t=this._midToIndex.get(e);if(t===void 0)throw new Error(`no media section found with mid '${e}'`);return this._mediaSections[t]}regenerateBundleMids(){this._dtlsParameters&&(this._sdpObject.groups[0].mids=this._mediaSections.filter(e=>!e.closed).map(e=>e.mid).join(" "))}};Vt.RemoteSdp=Xr});var Je=E(De=>{"use strict";Object.defineProperty(De,"__esModule",{value:!0});De.extractRtpCapabilities=ic;De.extractDtlsParameters=ac;De.getCname=oc;De.applyCodecParameters=cc;De.addHeaderExtension=dc;var qn=ge();function ic({sdpObject:s}){let e=new Map,t=new Map;for(let n of s.media){let i=n.type;switch(i){case"audio":case"video":break;default:continue}for(let a of n.rtp){let o={kind:i,mimeType:`${i}/${a.codec}`,preferredPayloadType:a.payload,clockRate:a.rate,channels:a.encoding,parameters:{},rtcpFeedback:[]};e.set(o.preferredPayloadType,o)}for(let a of n.fmtp??[]){let o=qn.parseParams(a.config),c=e.get(a.payload);c&&(o?.hasOwnProperty("profile-level-id")&&(o["profile-level-id"]=String(o["profile-level-id"])),c.parameters=o)}for(let a of n.rtcpFb??[]){let o={type:a.type,parameter:a.subtype};if(o.parameter||delete o.parameter,a.payload!=="*"){let c=e.get(Number(a.payload));if(!c)continue;c.rtcpFeedback.push(o)}else for(let c of e.values())c.kind===i&&!/.+\/rtx$/i.test(c.mimeType)&&c.rtcpFeedback.push(o)}for(let a of n.ext??[]){if(a["encrypt-uri"])continue;let o={kind:i,uri:a.uri,preferredId:a.value};t.set(o.preferredId,o)}}return{codecs:Array.from(e.values()),headerExtensions:Array.from(t.values())}}function ac({sdpObject:s}){let e=s.setup,t=s.fingerprint;if(!e||!t){let i=(s.media??[]).find(a=>a.port!==0);i&&(e=e??i.setup,t=t??i.fingerprint)}if(e){if(!t)throw new Error("no a=fingerprint found at SDP session or media level")}else throw new Error("no a=setup found at SDP session or media level");let 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 oc({offerMediaObject:s}){let e=(s.ssrcs??[]).find(t=>t.attribute==="cname");return e?e.value:""}function cc({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 i=e.fmtp.find(o=>o.payload===t.payloadType);i||(i={payload:t.payloadType,config:""},e.fmtp.push(i));let a=qn.parseParams(i.config);if(r==="audio/opus"){let o=t.parameters?.["sprop-stereo"];o!==void 0&&(a.stereo=Number(o)?1:0)}i.config="";for(let o of Object.keys(a))i.config&&(i.config+=";"),i.config+=`${o}=${a[o]}`}}function dc({offerMediaObject:s,headerExtensionUri:e,headerExtensionId:t}){s.ext||(s.ext=[]),s.ext.push({uri:e,value:t})}});var Xe=E(Gt=>{"use strict";Object.defineProperty(Gt,"__esModule",{value:!0});Gt.getRtpEncodings=lc;Gt.addLegacySimulcast=pc;function lc({offerMediaObject:s,codecs:e}){let t=new Set;for(let i of s.ssrcs??[]){let a=i.id;a&&t.add(a)}if(t.size===0)throw new Error("no a=ssrc lines found");let r=new Map;for(let i of s.ssrcGroups??[]){if(i.semantics!=="FID")continue;let a=i.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 i of t)r.set(i,void 0);let n=[];for(let[i,a]of r){let o={ssrc:i};a&&e.length>1&&(o.rtx={ssrc:a}),n.push(o)}return n}function pc({offerMediaObject:s,numStreams:e}){if(e<=1)throw new TypeError("numStreams must be greater than 1");let t=(s.ssrcs??[]).find(p=>p.attribute==="msid");if(!t)throw new Error("a=ssrc line with msid information not found");let[r,n]=t.value.split(" "),i=Number(t.id),a;(s.ssrcGroups??[]).some(p=>{if(p.semantics!=="FID")return!1;let u=p.ssrcs.split(/\s+/);return Number(u[0])===i?(a=Number(u[1]),!0):!1});let o=(s.ssrcs??[]).find(p=>p.attribute==="cname");if(!o)throw new Error("a=ssrc line with cname information not found");let c=o.value,l=[],d=[];for(let p=0;p<e;++p)l.push(i+p),a&&d.push(a+p);s.ssrcGroups=[],s.ssrcs=[],s.ssrcGroups.push({semantics:"SIM",ssrcs:l.join(" ")});for(let p of l)s.ssrcs.push({id:p,attribute:"cname",value:c}),s.ssrcs.push({id:p,attribute:"msid",value:`${r} ${n}`});for(let p=0;p<d.length;++p){let u=l[p],h=d[p];s.ssrcs.push({id:h,attribute:"cname",value:c}),s.ssrcs.push({id:h,attribute:"msid",value:`${r} ${n}`}),s.ssrcGroups.push({semantics:"FID",ssrcs:`${u} ${h}`})}}});var Ze=E(pt=>{"use strict";Object.defineProperty(pt,"__esModule",{value:!0});pt.addNackSupportForOpus=uc;pt.addHeaderExtensionSupport=hc;pt.getMsidStreamIdAndTrackId=fc;function uc(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 hc(s,e){let t,r=s.headerExtensions?.find(i=>i.uri===e.uri);if(r){if(r.kind===e.kind)return;t=r.preferredId}if(s.headerExtensions||(s.headerExtensions=[]),t===void 0){t=1;let i=new Set(s.headerExtensions.map(a=>a.preferredId));for(;i.has(t);)++t}let n={kind:e.kind,uri:e.uri,preferredId:t,preferredEncrypt:!1,direction:e.direction};s.headerExtensions.push(n)}function fc(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 zn=E(Kt=>{"use strict";Object.defineProperty(Kt,"__esModule",{value:!0});Kt.Chrome111=void 0;var pe=ge(),mc=K(),gc=B(),ut=oe(),_c=J(),vc=xe(),wc=Ye(),ht=Je(),$n=Xe(),es=Ze(),C=new gc.Logger("Chrome111"),Un="Chrome111",Bn={OS:65535,MIS:65535},ts=class s extends mc.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Un,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{C.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e,sendEncodings:[{scalabilityMode:"L3T3"}]});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let n=pe.parse(r.sdp);return s.getLocalRtpCapabilities(n)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(C.debug("getNativeSctpCapabilities()"),{numStreams:Bn})}}static getLocalRtpCapabilities(e,t=[]){let r=ht.extractRtpCapabilities({sdpObject:e});ut.validateAndNormalizeRtpCapabilities(r),es.addNackSupportForOpus(r);for(let n of t)es.addHeaderExtensionSupport(r,n);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:l}){super(),C.debug("constructor()"),this._direction=e,this._remoteSdp=new wc.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=l,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(C.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Un}close(){if(C.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),C.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),C.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});C.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:n,headerExtensionOptions:i,codec:a,onRtpSender:o}){if(this.assertNotClosed(),this.assertSendDirection(),C.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 D=x.scalabilityMode?(0,vc.parse)(x.scalabilityMode).temporalLayers:3;D>P&&(P=D)}r.forEach((x,D)=>{x.rid=`r${D}`,x.scalabilityMode=`L1T${P}`})}let c=this._remoteSdp.getNextMediaSectionIdx(),l=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});o&&o(l.sender);let d=await this._pc.createOffer(),p=pe.parse(d.sdp);p.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 h=s.getLocalRtpCapabilities(p,u),m=this._getSendExtendedRtpCapabilities(h),f=ut.getSendingRtpParameters(e.kind,m);f.codecs=ut.reduceCodecs(f.codecs,a);let g=ut.getSendingRemoteRtpParameters(e.kind,m);if(g.codecs=ut.reduceCodecs(g.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:p}),i?.absCaptureTime){let P=p.media[c.idx];ht.addHeaderExtension({offerMediaObject:P,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(x=>x.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:pe.write(p)}}C.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let _=l.mid;f.mid=_,p=pe.parse(this._pc.localDescription.sdp);let v=p.media[c.idx];if(f.rtcp.cname=ht.getCname({offerMediaObject:v}),f.msid=`${t??this._sendStream.id} ${e.id}`,!r)f.encodings=$n.getRtpEncodings({offerMediaObject:v,codecs:f.codecs});else if(r.length===1){let P=$n.getRtpEncodings({offerMediaObject:v,codecs:f.codecs});Object.assign(P[0],r[0]),f.encodings=P}else f.encodings=r;this._remoteSdp.send({offerMediaObject:v,reuseMid:c.reuseMid,offerRtpParameters:f,answerRtpParameters:g,codecOptions:n});let T={type:"answer",sdp:this._remoteSdp.getSdp()};return C.debug("send() | calling pc.setRemoteDescription() [answer:%o]",T),await this._pc.setRemoteDescription(T),this._mapMidTransceiver.set(_,l),{localId:_,rtpParameters:f,rtpSender:l.sender}}async stopSending(e){if(this.assertSendDirection(),C.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let n=await this._pc.createOffer();C.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),C.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();C.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),C.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();C.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?C.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):C.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),C.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();C.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),C.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();C.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};C.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};C.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Bn.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),a=pe.parse(i.sdp),o=a.media.find(l=>l.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),C.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:l,rtpParameters:d,streamId:p}=o;C.debug("receive() [trackId:%s, kind:%s]",c,l);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:h}=es.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:l,offerRtpParameters:d,streamId:p??h??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let o of e){let{trackId:c,onRtpReceiver:l}=o;if(l){let d=r.get(c),p=this._pc.getTransceivers().find(u=>u.mid===d);if(!p)throw new Error("transceiver not found");l(p.receiver)}}let i=await this._pc.createAnswer(),a=pe.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:l}=o,d=r.get(c),p=a.media.find(u=>String(u.mid)===d);ht.applyCodecParameters({offerRtpParameters:l,answerMediaObject:p})}i={type:"answer",sdp:pe.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),C.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let o of e){let{trackId:c}=o,l=r.get(c),d=this._pc.getTransceivers().find(p=>p.mid===l);if(d)this._mapMidTransceiver.set(l,d),t.push({localId:l,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){C.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){C.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){C.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,l={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};C.debug("receiveDataChannel() [options:%o]",l);let d=this._pc.createDataChannel(r,l);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let p={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",p),await this._pc.setRemoteDescription(p);let u=await this._pc.createAnswer(),h=pe.parse(u.sdp),m=h.media.find(f=>f.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:h}),u={type:"answer",sdp:pe.write(h)},C.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=pe.parse(this._pc.localDescription.sdp));let r=ht.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:r},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new _c.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.Chrome111=ts});var Vn=E(Qt=>{"use strict";Object.defineProperty(Qt,"__esModule",{value:!0});Qt.Chrome74=void 0;var X=ge(),yc=B(),bc=K(),ft=oe(),Sc=J(),Rc=xe(),Cc=Ye(),mt=Je(),rs=Xe(),ss=Ze(),S=new yc.Logger("Chrome74"),Wn="Chrome74",Hn={OS:1024,MIS:1024},ns=class s extends bc.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Wn,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 n=X.parse(r.sdp);return s.getLocalRtpCapabilities(n)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(S.debug("getNativeSctpCapabilities()"),{numStreams:Hn})}}static getLocalRtpCapabilities(e,t=[]){let r=mt.extractRtpCapabilities({sdpObject:e});ft.validateAndNormalizeRtpCapabilities(r),ss.addNackSupportForOpus(r);for(let n of t)ss.addHeaderExtensionSupport(r,n);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:l}){super(),S.debug("constructor()"),this._direction=e,this._remoteSdp=new Cc.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=l,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(S.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Wn}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:n,headerExtensionOptions:i,codec:a}){this.assertNotClosed(),this.assertSendDirection(),S.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((x,D)=>{x.rid=`r${D}`});let o=this._remoteSdp.getNextMediaSectionIdx(),c=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r}),l=await this._pc.createOffer(),d=X.parse(l.sdp);d.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let p=[];p.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let u=s.getLocalRtpCapabilities(d,p),h=this._getSendExtendedRtpCapabilities(u),m=ft.getSendingRtpParameters(e.kind,h);m.codecs=ft.reduceCodecs(m.codecs,a);let f=ft.getSendingRemoteRtpParameters(e.kind,h);f.codecs=ft.reduceCodecs(f.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:d});let g=!1,_=(0,Rc.parse)((r??[{}])[0].scalabilityMode),v;r?.length===1&&_.spatialLayers>1&&m.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(S.debug("send() | enabling legacy simulcast for VP9 SVC"),g=!0,d=X.parse(l.sdp),v=d.media[o.idx],rs.addLegacySimulcast({offerMediaObject:v,numStreams:_.spatialLayers}),l={type:"offer",sdp:X.write(d)}),S.debug("send() | calling pc.setLocalDescription() [offer:%o]",l),i?.absCaptureTime&&(v=d.media[o.idx],mt.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}),l={type:"offer",sdp:X.write(d)}),await this._pc.setLocalDescription(l);let T=c.mid;if(m.mid=T,d=X.parse(this._pc.localDescription.sdp),v=d.media[o.idx],m.rtcp.cname=mt.getCname({offerMediaObject:v}),m.msid=`${t??this._sendStream.id} ${e.id}`,!r)m.encodings=rs.getRtpEncodings({offerMediaObject:v,codecs:m.codecs});else if(r.length===1){let x=rs.getRtpEncodings({offerMediaObject:v,codecs:m.codecs});Object.assign(x[0],r[0]),g&&(x=[x[0]]),m.encodings=x}else m.encodings=r;if(m.encodings.length>1&&(m.codecs[0].mimeType.toLowerCase()==="video/vp8"||m.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let x of m.encodings)x.scalabilityMode?x.scalabilityMode=`L1T${_.temporalLayers}`:x.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:v,reuseMid:o.reuseMid,offerRtpParameters:m,answerRtpParameters:f,codecOptions:n});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(T,c),{localId:T,rtpParameters:m,rtpSender:c.sender}}async stopSending(e){if(this.assertSendDirection(),S.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let n=await this._pc.createOffer();S.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),S.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();S.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),S.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();S.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?S.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):S.debug("replaceTrack() [localId:%s, no track]",e);let 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 n=r.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();S.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),S.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();S.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};S.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Hn.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),a=X.parse(i.sdp),o=a.media.find(l=>l.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),S.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:l,rtpParameters:d,streamId:p}=o;S.debug("receive() [trackId:%s, kind:%s]",c,l);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:h}=ss.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:l,offerRtpParameters:d,streamId:p??h??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);let i=await this._pc.createAnswer(),a=X.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:l}=o,d=r.get(c),p=a.media.find(u=>String(u.mid)===d);mt.applyCodecParameters({offerRtpParameters:l,answerMediaObject:p})}i={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]",i),await this._pc.setLocalDescription(i);for(let o of e){let{trackId:c}=o,l=r.get(c),d=this._pc.getTransceivers().find(p=>p.mid===l);if(d)this._mapMidTransceiver.set(l,d),t.push({localId:l,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){S.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();S.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){S.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let 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 n of e){S.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let 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:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,l={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};S.debug("receiveDataChannel() [options:%o]",l);let d=this._pc.createDataChannel(r,l);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let p={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",p),await this._pc.setRemoteDescription(p);let u=await this._pc.createAnswer(),h=X.parse(u.sdp),m=h.media.find(f=>f.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:h}),u={type:"answer",sdp:X.write(h)},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=mt.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:r},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Sc.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')}};Qt.Chrome74=ns});var Jn=E(Jt=>{"use strict";Object.defineProperty(Jt,"__esModule",{value:!0});Jt.Firefox120=void 0;var _e=ge(),Tc=K(),kc=B(),Gn=J(),gt=oe(),Ec=xe(),Pc=Ye(),Yt=Je(),Kn=Xe(),xc=Ze(),k=new kc.Logger("Firefox120"),Qn="Firefox120",Yn={OS:16,MIS:2048},is=class s extends Tc.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Qn,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{k.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"}),r=document.createElement("canvas");r.getContext("2d");let i=r.captureStream().getVideoTracks()[0];try{t.addTransceiver("audio",{direction:e}),t.addTransceiver(i,{direction:e,sendEncodings:[{rid:"r0",maxBitrate:1e5},{rid:"r1",maxBitrate:5e5}]});let a=await t.createOffer();try{r.remove()}catch{}try{i.stop()}catch{}try{t.close()}catch{}t=void 0;let o=_e.parse(a.sdp);return s.getLocalRtpCapabilities(o)}catch(a){try{r.remove()}catch{}try{i.stop()}catch{}try{t?.close()}catch{}throw t=void 0,a}},getNativeSctpCapabilities:async()=>(k.debug("getNativeSctpCapabilities()"),{numStreams:Yn})}}static getLocalRtpCapabilities(e){let t=Yt.extractRtpCapabilities({sdpObject:e});return gt.validateAndNormalizeRtpCapabilities(t),t}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:l}){super(),k.debug("constructor()"),this._direction=e,this._remoteSdp=new Pc.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=l,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):(k.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Qn}close(){if(k.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){throw this.assertNotClosed(),new Gn.UnsupportedError("not supported")}async restartIce(e){if(this.assertNotClosed(),k.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});k.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};k.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};k.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();k.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:n,codec:i,onRtpSender:a}){this.assertNotClosed(),this.assertSendDirection(),k.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((v,T)=>{v.rid=`r${T}`});let o=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});a&&a(o.sender);let c=await this._pc.createOffer(),l=_e.parse(c.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let d=s.getLocalRtpCapabilities(l),p=this._getSendExtendedRtpCapabilities(d),u=gt.getSendingRtpParameters(e.kind,p);u.codecs=gt.reduceCodecs(u.codecs,i);let h=gt.getSendingRemoteRtpParameters(e.kind,p);h.codecs=gt.reduceCodecs(h.codecs,i),this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:l});let m=(0,Ec.parse)((r??[{}])[0].scalabilityMode);k.debug("send() | calling pc.setLocalDescription() [offer:%o]",c),await this._pc.setLocalDescription(c);let f=o.mid;u.mid=f,l=_e.parse(this._pc.localDescription.sdp);let g=l.media[l.media.length-1];if(u.rtcp.cname=Yt.getCname({offerMediaObject:g}),u.msid=`${t??this._sendStream.id} ${e.id}`,!r)u.encodings=Kn.getRtpEncodings({offerMediaObject:g,codecs:u.codecs});else if(r.length===1){let v=Kn.getRtpEncodings({offerMediaObject:g,codecs:u.codecs});Object.assign(v[0],r[0]),u.encodings=v}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 v of u.encodings)v.scalabilityMode?v.scalabilityMode=`L1T${m.temporalLayers}`:v.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:g,offerRtpParameters:u,answerRtpParameters:h,codecOptions:n});let _={type:"answer",sdp:this._remoteSdp.getSdp()};return k.debug("send() | calling pc.setRemoteDescription() [answer:%o]",_),await this._pc.setRemoteDescription(_),this._mapMidTransceiver.set(f,o),{localId:f,rtpParameters:u,rtpSender:o.sender}}async stopSending(e){if(this.assertSendDirection(),k.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated transceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.disableMediaSection(t.mid);let r=await this._pc.createOffer();k.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};k.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),k.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();k.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};k.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),k.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();k.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};k.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?k.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):k.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),k.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated transceiver not found");let n=r.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();k.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};k.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),k.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();k.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};k.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};k.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Yn.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),a=_e.parse(i.sdp),o=a.media.find(l=>l.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:a}),k.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};k.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:l,rtpParameters:d,streamId:p}=o;k.debug("receive() [trackId:%s, kind:%s]",c,l);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:h}=xc.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:l,offerRtpParameters:d,streamId:p??h??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};k.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let o of e){let{trackId:c,onRtpReceiver:l}=o;if(l){let d=r.get(c),p=this._pc.getTransceivers().find(u=>u.mid===d);if(!p)throw new Error("transceiver not found");l(p.receiver)}}let i=await this._pc.createAnswer(),a=_e.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:l}=o,d=r.get(c),p=a.media.find(u=>String(u.mid)===d);Yt.applyCodecParameters({offerRtpParameters:l,answerMediaObject:p}),i={type:"answer",sdp:_e.write(a)}}this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:a}),k.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let o of e){let{trackId:c}=o,l=r.get(c),d=this._pc.getTransceivers().find(p=>p.mid===l);if(!d)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(l,d),t.push({localId:l,track:d.receiver.track,rtpReceiver:d.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){k.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};k.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();k.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){k.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};k.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();k.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){k.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};k.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();k.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,l={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};k.debug("receiveDataChannel() [options:%o]",l);let d=this._pc.createDataChannel(r,l);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let p={type:"offer",sdp:this._remoteSdp.getSdp()};k.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",p),await this._pc.setRemoteDescription(p);let u=await this._pc.createAnswer(),h=_e.parse(u.sdp),m=h.media.find(f=>f.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:h}),u={type:"answer",sdp:_e.write(h)},k.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=_e.parse(this._pc.localDescription.sdp));let r=Yt.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:r},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Gn.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')}};Jt.Firefox120=is});var ti=E(Xt=>{"use strict";Object.defineProperty(Xt,"__esModule",{value:!0});Xt.Safari12=void 0;var Z=ge(),Dc=K(),Ic=B(),_t=oe(),Lc=J(),Mc=xe(),Oc=Ye(),vt=Je(),Xn=Xe(),as=Ze(),R=new Ic.Logger("Safari12"),Zn="Safari12",ei={OS:65535,MIS:65535},os=class s extends Dc.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Zn,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{R.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let n=Z.parse(r.sdp);return s.getLocalRtpCapabilities(n)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(R.debug("getNativeSctpCapabilities()"),{numStreams:ei})}}static getLocalRtpCapabilities(e,t=[]){let r=vt.extractRtpCapabilities({sdpObject:e});_t.validateAndNormalizeRtpCapabilities(r),as.addNackSupportForOpus(r);for(let n of t)as.addHeaderExtensionSupport(r,n);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:l}){super(),R.debug("constructor()"),this._direction=e,this._remoteSdp=new Oc.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=l,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)}),this._pc.addEventListener("icecandidateerror",d=>{this.emit("@icecandidateerror",d)}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(R.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Zn}close(){if(R.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),R.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),R.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});R.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:n,headerExtensionOptions:i,codec:a,onRtpSender:o}){this.assertNotClosed(),this.assertSendDirection(),R.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t);let c=this._remoteSdp.getNextMediaSectionIdx(),l=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream]});o&&o(l.sender);let d=await this._pc.createOffer(),p=Z.parse(d.sdp);p.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 h=s.getLocalRtpCapabilities(p,u),m=this._getSendExtendedRtpCapabilities(h),f=_t.getSendingRtpParameters(e.kind,m);f.codecs=_t.reduceCodecs(f.codecs,a);let g=_t.getSendingRemoteRtpParameters(e.kind,m);g.codecs=_t.reduceCodecs(g.codecs,a);let _;this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:p});let v=(0,Mc.parse)((r??[{}])[0].scalabilityMode);r&&r.length>1&&(R.debug("send() | enabling legacy simulcast"),p=Z.parse(d.sdp),_=p.media[c.idx],Xn.addLegacySimulcast({offerMediaObject:_,numStreams:r.length}),d={type:"offer",sdp:Z.write(p)}),i?.absCaptureTime&&(_=p.media[c.idx],vt.addHeaderExtension({offerMediaObject:_,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(x=>x.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:Z.write(p)}),R.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let T=l.mid;if(f.mid=T,p=Z.parse(this._pc.localDescription.sdp),_=p.media[c.idx],f.rtcp.cname=vt.getCname({offerMediaObject:_}),f.msid=`${t??this._sendStream.id} ${e.id}`,f.encodings=Xn.getRtpEncodings({offerMediaObject:_,codecs:f.codecs}),r)for(let x=0;x<f.encodings.length;++x)r[x]&&Object.assign(f.encodings[x],r[x]);if(f.encodings.length>1&&(f.codecs[0].mimeType.toLowerCase()==="video/vp8"||f.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let x of f.encodings)x.scalabilityMode?x.scalabilityMode=`L1T${v.temporalLayers}`:x.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:_,reuseMid:c.reuseMid,offerRtpParameters:f,answerRtpParameters:g,codecOptions:n});let P={type:"answer",sdp:this._remoteSdp.getSdp()};return R.debug("send() | calling pc.setRemoteDescription() [answer:%o]",P),await this._pc.setRemoteDescription(P),this._mapMidTransceiver.set(T,l),{localId:T,rtpParameters:f,rtpSender:l.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;R.debug("stopSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let n=await this._pc.createOffer();R.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),R.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();R.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),R.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let r=await this._pc.createOffer();R.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?R.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):R.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),R.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();R.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let 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 n=r.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();R.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let 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%ei.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),a=Z.parse(i.sdp),o=a.media.find(l=>l.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),R.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:l,rtpParameters:d,streamId:p}=o;R.debug("receive() [trackId:%s, kind:%s]",c,l);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:h}=as.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:l,offerRtpParameters:d,streamId:p??h??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let o of e){let{trackId:c,onRtpReceiver:l}=o;if(l){let d=r.get(c),p=this._pc.getTransceivers().find(u=>u.mid===d);if(!p)throw new Error("transceiver not found");l(p.receiver)}}let i=await this._pc.createAnswer(),a=Z.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:l}=o,d=r.get(c),p=a.media.find(u=>String(u.mid)===d);vt.applyCodecParameters({offerRtpParameters:l,answerMediaObject:p})}i={type:"answer",sdp:Z.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),R.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let o of e){let{trackId:c}=o,l=r.get(c),d=this._pc.getTransceivers().find(p=>p.mid===l);if(!d)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(l,d),t.push({localId:l,track:d.receiver.track,rtpReceiver:d.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){R.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){R.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){R.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,l={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};R.debug("receiveDataChannel() [options:%o]",l);let d=this._pc.createDataChannel(r,l);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let p={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",p),await this._pc.setRemoteDescription(p);let u=await this._pc.createAnswer(),h=Z.parse(u.sdp),m=h.media.find(f=>f.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:h}),u={type:"answer",sdp:Z.write(h)},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=Z.parse(this._pc.localDescription.sdp));let r=vt.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:r},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Lc.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')}};Xt.Safari12=os});var ni=E(Zt=>{"use strict";Object.defineProperty(Zt,"__esModule",{value:!0});Zt.ReactNative106=void 0;var ee=ge(),Ac=K(),Nc=B(),wt=oe(),jc=J(),Fc=xe(),qc=Ye(),yt=Je(),cs=Xe(),ds=Ze(),b=new Nc.Logger("ReactNative106"),ri="ReactNative106",si={OS:65535,MIS:65535},ls=class s extends Ac.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:ri,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{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 n=ee.parse(r.sdp);return s.getLocalRtpCapabilities(n)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(b.debug("getNativeSctpCapabilities()"),{numStreams:si})}}static getLocalRtpCapabilities(e,t=[]){let r=yt.extractRtpCapabilities({sdpObject:e});wt.validateAndNormalizeRtpCapabilities(r),ds.addNackSupportForOpus(r);for(let n of t)ds.addHeaderExtensionSupport(r,n);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:l}){super(),b.debug("constructor()"),this._direction=e,this._remoteSdp=new qc.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=l,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(b.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return ri}close(){if(b.debug("close()"),!this._closed){this._closed=!0,this._sendStream.release(!1);try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),b.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),b.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});b.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:n,headerExtensionOptions:i,codec:a,onRtpSender:o}){this.assertNotClosed(),this.assertSendDirection(),b.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((D,$)=>{D.rid=`r${$}`});let c=this._remoteSdp.getNextMediaSectionIdx(),l=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});o&&o(l.sender);let d=await this._pc.createOffer(),p=ee.parse(d.sdp);p.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 h=s.getLocalRtpCapabilities(p,u),m=this._getSendExtendedRtpCapabilities(h),f=wt.getSendingRtpParameters(e.kind,m);f.codecs=wt.reduceCodecs(f.codecs,a);let g=wt.getSendingRemoteRtpParameters(e.kind,m);g.codecs=wt.reduceCodecs(g.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:p});let _=!1,v=(0,Fc.parse)((r??[{}])[0].scalabilityMode),T;r?.length===1&&v.spatialLayers>1&&f.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(b.debug("send() | enabling legacy simulcast for VP9 SVC"),_=!0,p=ee.parse(d.sdp),T=p.media[c.idx],cs.addLegacySimulcast({offerMediaObject:T,numStreams:v.spatialLayers}),d={type:"offer",sdp:ee.write(p)}),i?.absCaptureTime&&(T=p.media[c.idx],yt.addHeaderExtension({offerMediaObject:T,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(D=>D.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:ee.write(p)}),b.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let P=l.mid??void 0;if(P||b.warn("send() | missing transceiver.mid (bug in react-native-webrtc, using a workaround"),f.mid=P,p=ee.parse(this._pc.localDescription.sdp),T=p.media[c.idx],f.rtcp.cname=yt.getCname({offerMediaObject:T}),f.msid=`${t??this._sendStream.id} ${e.id}`,!r)f.encodings=cs.getRtpEncodings({offerMediaObject:T,codecs:f.codecs});else if(r.length===1){let D=cs.getRtpEncodings({offerMediaObject:T,codecs:f.codecs});Object.assign(D[0],r[0]),_&&(D=[D[0]]),f.encodings=D}else f.encodings=r;if(f.encodings.length>1&&(f.codecs[0].mimeType.toLowerCase()==="video/vp8"||f.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let D of f.encodings)D.scalabilityMode?D.scalabilityMode=`L1T${v.temporalLayers}`:D.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:T,reuseMid:c.reuseMid,offerRtpParameters:f,answerRtpParameters:g,codecOptions:n});let x={type:"answer",sdp:this._remoteSdp.getSdp()};return b.debug("send() | calling pc.setRemoteDescription() [answer:%o]",x),await this._pc.setRemoteDescription(x),P||(P=l.mid,f.mid=P),this._mapMidTransceiver.set(P,l),{localId:P,rtpParameters:f,rtpSender:l.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;b.debug("stopSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let n=await this._pc.createOffer();b.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),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 n={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}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 n={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}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 n=r.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();b.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);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 n=r.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();b.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);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 i=await this._pc.createOffer(),a=ee.parse(i.sdp),o=a.media.find(l=>l.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),b.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:l,rtpParameters:d,streamId:p}=o;b.debug("receive() [trackId:%s, kind:%s]",c,l);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:h}=ds.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:l,offerRtpParameters:d,streamId:p??h??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let o of e){let{trackId:c,onRtpReceiver:l}=o;if(l){let d=r.get(c),p=this._pc.getTransceivers().find(u=>u.mid===d);if(!p)throw new Error("transceiver not found");l(p.receiver)}}let i=await this._pc.createAnswer(),a=ee.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:l}=o,d=r.get(c),p=a.media.find(u=>String(u.mid)===d);yt.applyCodecParameters({offerRtpParameters:l,answerMediaObject:p})}i={type:"answer",sdp:ee.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),b.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let o of e){let{trackId:c}=o,l=r.get(c),d=this._pc.getTransceivers().find(p=>p.mid===l);if(d)this._mapMidTransceiver.set(l,d),t.push({localId:l,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){b.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};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 n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){b.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};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 n of e){b.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};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:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,l={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};b.debug("receiveDataChannel() [options:%o]",l);let d=this._pc.createDataChannel(r,l);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let p={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",p),await this._pc.setRemoteDescription(p);let u=await this._pc.createAnswer(),h=ee.parse(u.sdp),m=h.media.find(f=>f.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:h}),u={type:"answer",sdp:ee.write(h)},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=ee.parse(this._pc.localDescription.sdp));let r=yt.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:r},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new jc.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')}};Zt.ReactNative106=ls});var ci=E(et=>{"use strict";Object.defineProperty(et,"__esModule",{value:!0});et.Device=void 0;et.detectDevice=ii;et.detectDeviceAsync=ai;var $c=B(),Uc=K(),be=J(),er=Te(),Q=oe(),Bc=Pn(),zc=zn(),Wc=Vn(),Hc=Jn(),Vc=ti(),Gc=ni(),y=new $c.Logger("Device");function ii(s,e){return y.debug("detectDevice()"),!s&&typeof navigator=="object"&&(s=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),oi(s,e)}async function ai(s,e){return y.debug("detectDeviceAsync()"),!s&&typeof navigator=="object"&&(s=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),oi(s,e)}var ps=class s{_handlerFactory;_handlerName;_loaded=!1;_getSendExtendedRtpCapabilities;_recvRtpCapabilities;_sendRtpCapabilities;_canProduceByKind={audio:!1,video:!1};_sctpCapabilities;_observer=new Uc.EnhancedEventEmitter;static async factory({handlerName:e,handlerFactory:t}={}){if(y.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 be.UnsupportedError("device not supported");return new s({handlerName:e,handlerFactory:t})}constructor({handlerName:e,handlerFactory:t}={}){if(y.debug("constructor()"),e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(t)this._handlerFactory=t;else{if(e)y.debug("constructor() | handler given: %s",e);else if(e=ii(),e)y.debug("constructor() | detected handler: %s",e);else throw new be.UnsupportedError("device not supported");switch(e){case"Chrome111":{this._handlerFactory=zc.Chrome111.createFactory();break}case"Chrome74":{this._handlerFactory=Wc.Chrome74.createFactory();break}case"Firefox120":{this._handlerFactory=Hc.Firefox120.createFactory();break}case"Safari12":{this._handlerFactory=Vc.Safari12.createFactory();break}case"ReactNative106":{this._handlerFactory=Gc.ReactNative106.createFactory();break}default:throw new TypeError(`unknown handlerName "${e}"`)}}this._handlerName=this._handlerFactory.name}get handlerName(){return this._handlerName}get loaded(){return this._loaded}get rtpCapabilities(){return this.recvRtpCapabilities}get recvRtpCapabilities(){if(!this._loaded)throw new be.InvalidStateError("not loaded");return this._recvRtpCapabilities}get sendRtpCapabilities(){if(!this._loaded)throw new be.InvalidStateError("not loaded");return this._sendRtpCapabilities}get sctpCapabilities(){if(!this._loaded)throw new be.InvalidStateError("not loaded");return this._sctpCapabilities}get observer(){return this._observer}async load({routerRtpCapabilities:e,preferLocalCodecsOrder:t=!1}){if(y.debug("load() [routerRtpCapabilities:%o]",e),this._loaded)throw new be.InvalidStateError("already loaded");let r=er.clone(e);Q.validateAndNormalizeRtpCapabilities(r);let{getNativeRtpCapabilities:n,getNativeSctpCapabilities:i}=this._handlerFactory,a=er.clone(await n({direction:"recvonly"}));y.debug("load() | got native receiving RTP capabilities:%o",a),Q.validateAndNormalizeRtpCapabilities(a);let o=er.clone(await n({direction:"sendonly"}));y.debug("load() | got native sending RTP capabilities:%o",o),Q.validateAndNormalizeRtpCapabilities(o),this._getSendExtendedRtpCapabilities=d=>er.clone(Q.getExtendedRtpCapabilities(d,r,t));let c=Q.getExtendedRtpCapabilities(a,r,!1);this._recvRtpCapabilities=Q.getRecvRtpCapabilities(c),y.debug("load() | got receiving RTP capabilities:%o",this._recvRtpCapabilities),Q.validateAndNormalizeRtpCapabilities(this._recvRtpCapabilities);let l=Q.getExtendedRtpCapabilities(o,r,t);this._sendRtpCapabilities=Q.getSendRtpCapabilities(l),y.debug("load() | got sending RTP capabilities:%o",this._sendRtpCapabilities),Q.validateAndNormalizeRtpCapabilities(this._sendRtpCapabilities),this._canProduceByKind.audio=Q.canSend("audio",this._sendRtpCapabilities),this._canProduceByKind.video=Q.canSend("video",this._sendRtpCapabilities),this._sctpCapabilities=await i(),Q.validateSctpCapabilities(this._sctpCapabilities),y.debug("load() | got native SCTP capabilities:%o",this._sctpCapabilities),y.debug("load() succeeded"),this._loaded=!0}canProduce(e){if(this._loaded){if(e!=="audio"&&e!=="video")throw new TypeError(`invalid kind "${e}"`)}else throw new be.InvalidStateError("not loaded");return this._canProduceByKind[e]}createSendTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:l}){return y.debug("createSendTransport()"),this.createTransport({direction:"send",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:l})}createRecvTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:l}){return y.debug("createRecvTransport()"),this.createTransport({direction:"recv",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:l})}createTransport({direction:e,id:t,iceParameters:r,iceCandidates:n,dtlsParameters:i,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:l,appData:d}){if(this._loaded){if(typeof t!="string")throw new TypeError("missing id");if(typeof r!="object")throw new TypeError("missing iceParameters");if(Array.isArray(n)){if(typeof i!="object")throw new TypeError("missing dtlsParameters");if(a&&typeof a!="object")throw new TypeError("wrong sctpParameters");if(d&&typeof d!="object")throw new TypeError("if given, appData must be an object")}else throw new TypeError("missing iceCandidates")}else throw new be.InvalidStateError("not loaded");let p=new Bc.Transport({direction:e,id:t,iceParameters:r,iceCandidates:n,dtlsParameters:i,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:l,appData:d,handlerFactory:this._handlerFactory,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities,recvRtpCapabilities:this._recvRtpCapabilities,canProduceByKind:this._canProduceByKind});return this._observer.safeEmit("newtransport",p),p}};et.Device=ps;function oi(s,e){y.debug('detectDeviceImpl() [userAgent:"%s", userAgentData:%o]',s,e);let t=Kc(s,e);if(t){if(t>=111)return y.debug("detectDeviceImpl() | using Chrome111 handler"),"Chrome111";if(t>=74)return y.debug("detectDeviceImpl() | using Chrome74 handler"),"Chrome74";y.warn("detectDeviceImpl() | unsupported Chromium based browser/version");return}let r=Qc(s);if(r){if(r>=120)return y.debug("detectDeviceImpl() | using Firefox120 handler"),"Firefox120";y.warn("detectDeviceImpl() | unsupported Firefox browser/version");return}let n=Yc(s);if(n){if(n>=605)return y.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";y.warn("detectDeviceImpl() | unsupported desktop Safari browser/version");return}let i=Jc(s);if(i){if(i>=605)return y.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";y.warn("detectDeviceImpl() | unsupported iOS Safari based browser/version");return}if(bt()){if(typeof RTCPeerConnection<"u"&&typeof RTCRtpTransceiver<"u")return y.debug("detectDeviceImpl() | using ReactNative106 handler"),"ReactNative106";y.warn("detectDeviceImpl() | unsupported react-native-webrtc version without RTCPeerConnection or RTCRtpTransceiver, forgot to call registerGlobals() on it?");return}y.warn('detectDeviceImpl() | device not supported [userAgent:"%s", userAgentData:%o]',s,e)}function Kc(s,e){if(y.debug("getChromiumMajorVersion()"),tr(s,e)){y.debug("getChromiumMajorVersion() | this is iOS => undefined");return}if(bt()){y.debug("getChromiumMajorVersion() | this is React-Native => undefined");return}if(e){let n=(Array.isArray(e.brands)?e.brands:[]).find(i=>i.brand==="Chromium");if(n){let i=Number(n.version);return y.debug(`getChromiumMajorVersion() | Chromium major version based on NavigatorUAData => ${i}`),i}}let t=s?.match(/\b(?:Chrome|Chromium)\/(\w+)/i);if(t?.[1]){let r=Number(t[1]);return y.debug(`getChromiumMajorVersion() | Chromium major version based on User-Agent => ${r}`),r}y.debug("getChromiumMajorVersion() | this is not Chromium => undefined")}function Qc(s){if(y.debug("getFirefoxMajorVersion()"),tr(s)){y.debug("getFirefoxMajorVersion() | this is iOS => undefined");return}if(bt()){y.debug("getFirefoxMajorVersion() | this is React-Native => undefined");return}let e=s?.match(/\bFirefox\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return y.debug(`getFirefoxMajorVersion() | Firefox major version based on User-Agent => ${t}`),t}y.debug("getFirefoxMajorVersion() | this is not Firefox => undefined")}function Yc(s){if(y.debug("getMacOSWebKitMajorVersion()"),tr(s)){y.debug("getMacOSWebKitMajorVersion() | this is iOS => undefined");return}if(bt()){y.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))){y.debug("getMacOSWebKitMajorVersion() | this is not Safari => undefined");return}let t=s.match(/AppleWebKit\/(\w+)/i);if(t?.[1]){let r=Number(t[1]);return y.debug(`getMacOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${r}`),r}y.debug("getMacOSWebKitMajorVersion() | this is not WebKit => undefined")}function Jc(s){if(y.debug("getIOSWebKitMajorVersion()"),!tr(s)){y.debug("getIOSWebKitMajorVersion() | this is not iOS => undefined");return}if(bt()){y.debug("getIOSWebKitMajorVersion() | this is React-Native => undefined");return}let e=s?.match(/AppleWebKit\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return y.debug(`getIOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${t}`),t}y.debug("getIOSWebKitMajorVersion() | this is not WebKit => undefined")}function tr(s,e){return y.debug("isIOS()"),e?.platform==="iOS"?(y.debug("isIOS() | this is iOS based on NavigatorUAData.platform => true"),!0):e?.platform?(y.debug("isIOS() | this is not iOS based on NavigatorUAData.platform => false"),!1):s&&/iPad|iPhone|iPod/.test(s)?(y.debug("isIOS() | this is iOS based on User-Agent => true"),!0):typeof navigator=="object"&&navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1?(y.debug("isIOS() | this is iPadOS 13+ based on User-Agent => true"),!0):(y.debug("isIOS() | this is not iOS => false"),!1)}function bt(){return y.debug("isReactNative()"),typeof navigator=="object"&&navigator.product==="ReactNative"?(y.debug("isReactNative() | this is React-Native based on navigator.product"),!0):(y.debug("isReactNative() | this is not React-Native => false"),!1)}});var li=E(di=>{"use strict";var Ie=256,sr=[],rr;for(;Ie--;)sr[Ie]=(Ie+256).toString(16).substring(1);function Xc(){var s=0,e,t="";if(!rr||Ie+16>256){for(rr=Array(s=256);s--;)rr[s]=256*Math.random()|0;s=Ie=0}for(;s<16;s++)e=rr[Ie+s],s==6?t+=sr[e&15|64]:s==8?t+=sr[e&63|128]:t+=sr[e],s&1&&s>1&&s<11&&(t+="-");return Ie++,t}di.v4=Xc});var pi=E(nr=>{"use strict";Object.defineProperty(nr,"__esModule",{value:!0});nr.FakeEventTarget=void 0;var us=class{listeners={};addEventListener(e,t,r){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof r=="object"&&r.once===!0}))}removeEventListener(e,t,r){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(n=>n.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new Error("invalid event object");let t=this.listeners[e.type];if(!t)return!0;for(let r of[...t]){try{r.callback.call(this,e)}catch(n){setTimeout(()=>{throw n},0)}r.once&&this.removeEventListener(e.type,r.callback)}return!e.defaultPrevented}};nr.FakeEventTarget=us});var ui=E(ir=>{"use strict";Object.defineProperty(ir,"__esModule",{value:!0});ir.FakeEvent=void 0;var hs=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){}};ir.FakeEvent=hs});var hi=E(fs=>{"use strict";Object.defineProperty(fs,"__esModule",{value:!0});fs.clone=Zc;function Zc(s){if(s!==void 0)return Number.isNaN(s)?NaN:typeof structuredClone=="function"?structuredClone(s):JSON.parse(JSON.stringify(s))}});var mi=E(or=>{"use strict";Object.defineProperty(or,"__esModule",{value:!0});or.FakeMediaStreamTrack=void 0;var fi=li(),ed=pi(),tt=ui(),ar=hi(),ms=class s extends ed.FakeEventTarget{#m;#p;#u;#e;#r;#t;#s;#h;#n;#f;#i;#a=null;#o=null;#c=null;#d=null;#l=null;constructor({kind:e,id:t,label:r,contentHint:n,enabled:i,muted:a,readyState:o,capabilities:c,constraints:l,settings:d,data:p}){super(),this.#m=t??(0,fi.v4)(),this.#p=e,this.#u=r??"",this.#s=n??"",this.#r=i??!0,this.#t=a??!1,this.#e=o??"live",this.#h=c??{},this.#n=l??{},this.#f=d??{},this.#i=p??{}}get id(){return this.#m}get kind(){return this.#p}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 tt.FakeEvent("enabledchange"))}get muted(){return this.#t}get readyState(){return this.#e}get data(){return this.#i}set data(e){this.#i=e}get onmute(){return this.#a}set onmute(e){this.#a&&this.removeEventListener("mute",this.#a),this.#a=e,e&&this.addEventListener("mute",e)}get onunmute(){return this.#o}set onunmute(e){this.#o&&this.removeEventListener("unmute",this.#o),this.#o=e,e&&this.addEventListener("unmute",e)}get onended(){return this.#c}set onended(e){this.#c&&this.removeEventListener("ended",this.#c),this.#c=e,e&&this.addEventListener("ended",e)}get onenabledchange(){return this.#d}set onenabledchange(e){this.#d&&this.removeEventListener("enabledchange",this.#d),this.#d=e,e&&this.addEventListener("enabledchange",e)}get onstopped(){return this.#l}set onstopped(e){this.#l&&this.removeEventListener("stopped",this.#l),this.#l=e,e&&this.addEventListener("stopped",e)}addEventListener(e,t,r){super.addEventListener(e,t,r)}removeEventListener(e,t,r){super.removeEventListener(e,t,r)}stop(){this.#e!=="ended"&&(this.#e="ended",this.dispatchEvent(new tt.FakeEvent("stopped")))}clone({id:e,data:t}={}){return new s({id:e??(0,fi.v4)(),kind:this.#p,label:this.#u,contentHint:this.#s,enabled:this.#r,muted:this.#t,readyState:this.#e,capabilities:(0,ar.clone)(this.#h),constraints:(0,ar.clone)(this.#n),settings:(0,ar.clone)(this.#f),data:t??(0,ar.clone)(this.#i)})}getCapabilities(){return this.#h}getConstraints(){return this.#n}async applyConstraints(e={}){return this.#n=e,Promise.resolve()}getSettings(){return this.#f}remoteStop(){this.#e!=="ended"&&(this.#e="ended",this.dispatchEvent(new tt.FakeEvent("stopped")),this.dispatchEvent(new tt.FakeEvent("ended")))}remoteMute(){this.#t||(this.#t=!0,this.dispatchEvent(new tt.FakeEvent("mute")))}remoteUnmute(){this.#t&&(this.#t=!1,this.dispatchEvent(new tt.FakeEvent("unmute")))}};or.FakeMediaStreamTrack=ms});var gi=E(cr=>{"use strict";Object.defineProperty(cr,"__esModule",{value:!0});cr.FakeEventTarget=void 0;var gs=class{listeners={};addEventListener(e,t,r){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof r=="object"&&r.once===!0}))}removeEventListener(e,t,r){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(n=>n.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new Error("invalid event object");let t=this.listeners[e.type];if(!t)return!0;for(let r of[...t]){try{r.callback.call(this,e)}catch(n){setTimeout(()=>{throw n},0)}r.once&&this.removeEventListener(e.type,r.callback)}return!e.defaultPrevented}};cr.FakeEventTarget=gs});var wi=E(lr=>{"use strict";Object.defineProperty(lr,"__esModule",{value:!0});lr.FakeHandler=void 0;var td=mi(),rd=K(),sd=B(),rt=Te(),_s=oe(),vi=J(),nd=gi(),F=new sd.Logger("FakeHandler"),_i="FakeHandler",vs=class s extends rd.EnhancedEventEmitter{_closed=!1;_fakeParameters;_getSendExtendedRtpCapabilities;_cname=`CNAME-${rt.generateRandomNumber()}`;_defaultSendStreamId=`${rt.generateRandomNumber()}`;_transportReady=!1;_nextLocalId=1;_tracks=new Map;_nextSctpStreamId=0;static createFactory(e){return{name:_i,factory:t=>new s(t,e),getNativeRtpCapabilities:async({direction:t})=>(F.debug("getNativeRtpCapabilities() [direction:%o]",t),s.getLocalRtpCapabilities(e)),getNativeSctpCapabilities:async()=>(F.debug("getNativeSctpCapabilities()"),e.generateNativeSctpCapabilities())}}static getLocalRtpCapabilities(e){let t=e.generateNativeRtpCapabilities();return _s.validateAndNormalizeRtpCapabilities(t),t}constructor({getSendExtendedRtpCapabilities:e},t){super(),F.debug("constructor()"),this._getSendExtendedRtpCapabilities=e,this._fakeParameters=t}get name(){return _i}close(){F.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(),F.debug("updateIceServers()")}async restartIce(e){this.assertNotClosed(),F.debug("restartIce()")}async getTransportStats(){return this.assertNotClosed(),new Map}async send({track:e,streamId:t,encodings:r,codecOptions:n,codec:i}){this.assertNotClosed(),F.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=_s.getSendingRtpParameters(e.kind,o);c.codecs=_s.reduceCodecs(c.codecs,i);let l=c.codecs.some(p=>/.+\/rtx$/i.test(p.mimeType));c.mid=`mid-${rt.generateRandomNumber()}`,c.msid=`${t??"-"} ${e.id}`,r||(r=[{}]);for(let p of r)p.ssrc=rt.generateRandomNumber(),l&&(p.rtx={ssrc:rt.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(F.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?F.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):F.debug("replaceTrack() [localId:%s, no track]",e),this._tracks.delete(Number(e)),this._tracks.set(Number(e),t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),F.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),F.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"}),F.debug("sendDataChannel()");let t=new dr({id:this._nextSctpStreamId++,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:e.label,protocol:e.protocol}),r={streamId:this._nextSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits};return{dataChannel:t,sctpStreamParameters:r}}async receive(e){this.assertNotClosed();let t=[];for(let r of e){let{trackId:n,kind:i}=r;this._transportReady||await this.setupTransport({localDtlsRole:"client"}),F.debug("receive() [trackId:%s, kind:%s]",n,i);let a=this._nextLocalId++,o=new td.FakeMediaStreamTrack({kind:i});this._tracks.set(a,o),t.push({localId:String(a),track:o})}return t}async stopReceiving(e){if(!this._closed)for(let t of e)F.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"}),F.debug("receiveDataChannel()"),{dataChannel:new dr({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=rt.clone(this._fakeParameters.generateLocalDtlsParameters());e&&(r.role=e),this.emit("@connectionstatechange","connecting"),await new Promise((n,i)=>this.emit("@connect",{dtlsParameters:r},n,i)),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new vi.InvalidStateError("method called in a closed handler")}};lr.FakeHandler=vs;var dr=class extends nd.FakeEventTarget{_id;_negotiated=!0;_ordered;_maxPacketLifeTime;_maxRetransmits;_label;_protocol;_readyState="connecting";_bufferedAmount=0;_bufferedAmountLowThreshold=0;_binaryType="arraybuffer";_onopen=null;_onclosing=null;_onclose=null;_onmessage=null;_onbufferedamountlow=null;_onerror=null;constructor({id:e,ordered:t=!0,maxPacketLifeTime:r=null,maxRetransmits:n=null,label:i="",protocol:a=""}){super(),F.debug(`constructor() [id:${e}, ordered:${t}, maxPacketLifeTime:${r}, maxRetransmits:${n}, label:${i}, protocol:${a}`),this._id=e,this._ordered=t,this._maxPacketLifeTime=r,this._maxRetransmits=n,this._label=i,this._protocol=a}get id(){return this._id}get negotiated(){return this._negotiated}get ordered(){return this._ordered}get maxPacketLifeTime(){return this._maxPacketLifeTime}get maxRetransmits(){return this._maxRetransmits}get label(){return this._label}get protocol(){return this._protocol}get readyState(){return this._readyState}get bufferedAmount(){return this._bufferedAmount}get bufferedAmountLowThreshold(){return this._bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._bufferedAmountLowThreshold=e}get binaryType(){return this._binaryType}set binaryType(e){this._binaryType=e}get onopen(){return this._onopen}set onopen(e){this._onopen&&this.removeEventListener("open",this._onopen),this._onopen=e,e&&this.addEventListener("open",e)}get onclosing(){return this._onclosing}set onclosing(e){this._onclosing&&this.removeEventListener("closing",this._onclosing),this._onclosing=e,e&&this.addEventListener("closing",e)}get onclose(){return this._onclose}set onclose(e){this._onclose&&this.removeEventListener("close",this._onclose),this._onclose=e,e&&this.addEventListener("close",e)}get onmessage(){return this._onmessage}set onmessage(e){this._onmessage&&this.removeEventListener("message",this._onmessage),this._onmessage=e,e&&this.addEventListener("message",e)}get onbufferedamountlow(){return this._onbufferedamountlow}set onbufferedamountlow(e){this._onbufferedamountlow&&this.removeEventListener("bufferedamountlow",this._onbufferedamountlow),this._onbufferedamountlow=e,e&&this.addEventListener("bufferedamountlow",e)}get onerror(){return this._onerror}set onerror(e){this._onerror&&this.removeEventListener("error",this._onerror),this._onerror=e,e&&this.addEventListener("error",e)}addEventListener(e,t,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 vi.InvalidStateError("not open")}}});var yi=E(ie=>{"use strict";Object.defineProperty(ie,"__esModule",{value:!0});ie.generateRouterRtpCapabilities=id;ie.generateNativeRtpCapabilities=ad;ie.generateNativeSctpCapabilities=od;ie.generateLocalDtlsParameters=cd;ie.generateTransportRemoteParameters=dd;ie.generateProducerRemoteParameters=ld;ie.generateConsumerRemoteParameters=pd;ie.generateDataProducerRemoteParameters=ud;ie.generateDataConsumerRemoteParameters=hd;var W=Te();function Y(){return String(W.generateRandomNumber())}function id(){return W.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 ad(){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 od(){return W.deepFreeze({numStreams:{OS:2048,MIS:2048}})}function cd(){return W.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 dd(){return{id:Y(),iceParameters:W.deepFreeze({iceLite:!0,password:"yku5ej8nvfaor28lvtrabcx0wkrpkztz",usernameFragment:"h3hk1iz6qqlnqlne"}),iceCandidates:W.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:W.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:W.deepFreeze({port:5e3,OS:2048,MIS:2048,maxMessageSize:2e6})}}function ld(){return W.deepFreeze({id:Y()})}function pd({id:s,codecMimeType:e}={}){switch(e){case"audio/opus":return{id:s??Y(),producerId:Y(),kind:"audio",rtpParameters:W.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??Y(),producerId:Y(),kind:"audio",rtpParameters:W.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??Y(),producerId:Y(),kind:"video",rtpParameters:W.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??Y(),producerId:Y(),kind:"video",rtpParameters:W.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 ud(){return W.deepFreeze({id:Y()})}function hd({id:s}={}){return{id:s??Y(),dataProducerId:Y(),sctpStreamParameters:W.deepFreeze({streamId:666,maxPacketLifeTime:5e3,maxRetransmits:void 0})}}});var Zr=E(O=>{"use strict";Object.defineProperty(O,"__esModule",{value:!0});O.debug=O.testFakeParameters=O.FakeHandler=O.enhancedEvents=O.ortc=O.parseScalabilityMode=O.detectDeviceAsync=O.detectDevice=O.Device=O.version=O.types=void 0;var fd=at();O.debug=fd.default;O.types=Ws();O.version="3.20.0";var ws=ci();Object.defineProperty(O,"Device",{enumerable:!0,get:function(){return ws.Device}});Object.defineProperty(O,"detectDevice",{enumerable:!0,get:function(){return ws.detectDevice}});Object.defineProperty(O,"detectDeviceAsync",{enumerable:!0,get:function(){return ws.detectDeviceAsync}});var md=xe();Object.defineProperty(O,"parseScalabilityMode",{enumerable:!0,get:function(){return md.parse}});O.ortc=oe();O.enhancedEvents=K();var gd=wi();Object.defineProperty(O,"FakeHandler",{enumerable:!0,get:function(){return gd.FakeHandler}});O.testFakeParameters=yi()});var Si=E((_p,ys)=>{"use strict";var _d=Object.prototype.hasOwnProperty,H="~";function St(){}Object.create&&(St.prototype=Object.create(null),new St().__proto__||(H=!1));function vd(s,e,t){this.fn=s,this.context=e,this.once=t||!1}function bi(s,e,t,r,n){if(typeof t!="function")throw new TypeError("The listener must be a function");var i=new vd(t,r||s,n),a=H?H+e:e;return s._events[a]?s._events[a].fn?s._events[a]=[s._events[a],i]:s._events[a].push(i):(s._events[a]=i,s._eventsCount++),s}function pr(s,e){--s._eventsCount===0?s._events=new St:delete s._events[e]}function q(){this._events=new St,this._eventsCount=0}q.prototype.eventNames=function(){var e=[],t,r;if(this._eventsCount===0)return e;for(r in t=this._events)_d.call(t,r)&&e.push(H?r.slice(1):r);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};q.prototype.listeners=function(e){var t=H?H+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var n=0,i=r.length,a=new Array(i);n<i;n++)a[n]=r[n].fn;return a};q.prototype.listenerCount=function(e){var t=H?H+e:e,r=this._events[t];return r?r.fn?1:r.length:0};q.prototype.emit=function(e,t,r,n,i,a){var o=H?H+e:e;if(!this._events[o])return!1;var c=this._events[o],l=arguments.length,d,p;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),l){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,r),!0;case 4:return c.fn.call(c.context,t,r,n),!0;case 5:return c.fn.call(c.context,t,r,n,i),!0;case 6:return c.fn.call(c.context,t,r,n,i,a),!0}for(p=1,d=new Array(l-1);p<l;p++)d[p-1]=arguments[p];c.fn.apply(c.context,d)}else{var u=c.length,h;for(p=0;p<u;p++)switch(c[p].once&&this.removeListener(e,c[p].fn,void 0,!0),l){case 1:c[p].fn.call(c[p].context);break;case 2:c[p].fn.call(c[p].context,t);break;case 3:c[p].fn.call(c[p].context,t,r);break;case 4:c[p].fn.call(c[p].context,t,r,n);break;default:if(!d)for(h=1,d=new Array(l-1);h<l;h++)d[h-1]=arguments[h];c[p].fn.apply(c[p].context,d)}}return!0};q.prototype.on=function(e,t,r){return bi(this,e,t,r,!1)};q.prototype.once=function(e,t,r){return bi(this,e,t,r,!0)};q.prototype.removeListener=function(e,t,r,n){var i=H?H+e:e;if(!this._events[i])return this;if(!t)return pr(this,i),this;var a=this._events[i];if(a.fn)a.fn===t&&(!n||a.once)&&(!r||a.context===r)&&pr(this,i);else{for(var o=0,c=[],l=a.length;o<l;o++)(a[o].fn!==t||n&&!a[o].once||r&&a[o].context!==r)&&c.push(a[o]);c.length?this._events[i]=c.length===1?c[0]:c:pr(this,i)}return this};q.prototype.removeAllListeners=function(e){var t;return e?(t=H?H+e:e,this._events[t]&&pr(this,t)):(this._events=new St,this._eventsCount=0),this};q.prototype.off=q.prototype.removeListener;q.prototype.addListener=q.prototype.on;q.prefixed=H;q.EventEmitter=q;typeof ys<"u"&&(ys.exports=q)});var Cl={};Sa(Cl,{ChannelMultiplexer:()=>st,DOC_SYNC_WIRE_CONTRACT_VERSION:()=>ks,DeferredChannelMultiplexer:()=>ur,DeferredDocConnector:()=>yr,LoopbackStreamData:()=>gr,SessionDocumentImpl:()=>Sr,TransportSession:()=>wr,allocateSession:()=>ma,createPresence:()=>ta,createWebsocketDocConnector:()=>Zi,deriveYjsServerUrl:()=>Xi,ensureNodeWebRTC:()=>mr,isNodeRuntime:()=>nt,nodeMediasoupHandlerName:()=>hr,nodeWebRTCUnavailableReason:()=>fr,streamDataLabel:()=>Gi,transportStreamData:()=>Di});module.exports=Ra(Cl);var Vi=kr(Zr());var bs=kr(Si(),1);var st=class{_handlers=new Map;_ws;_onMessage;_onOpen;_listeningForOpen=!1;_pendingSends=[];_disposed=!1;constructor(e){this._ws=e,this._onMessage=t=>{if(typeof t.data!="string")return;let r;try{r=JSON.parse(t.data)}catch{console.warn("[ChannelMultiplexer] Failed to parse WebSocket message as JSON");return}if(!r.channel)return;let n=this._handlers.get(r.channel);if(n)for(let i of n)i(r)},this._ws.addEventListener("message",this._onMessage),this._onOpen=()=>{this.flushPendingSends()}}on(e,t){let r=this._handlers.get(e);return r||(r=new Set,this._handlers.set(e,r)),r.add(t),()=>{r.delete(t),r.size===0&&this._handlers.delete(e)}}emit(e,t){if(this._disposed)return;let r=JSON.stringify({channel:e,...t});if(this._ws.readyState===WebSocket.OPEN){this._ws.send(r);return}this._ws.readyState===WebSocket.CONNECTING&&(this._pendingSends.push(r),this.listenForOpen())}dispose(){this._disposed=!0,this._pendingSends=[],this._handlers.clear(),this._ws.removeEventListener("message",this._onMessage),this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1}flushPendingSends(){if(this._disposed||this._ws.readyState!==WebSocket.OPEN)return;this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1;let e=this._pendingSends;this._pendingSends=[];for(let t of e)this._ws.send(t)}listenForOpen(){this._listeningForOpen||(this._listeningForOpen=!0,this._ws.addEventListener("open",this._onOpen))}},ur=class{_handlers=new Map;_pendingSends=[];_target=null;_targetUnsubscribes=[];_disposed=!1;setTarget(e){if(this._disposed)return;this.detachTarget(),this._target=e;for(let[r,n]of this._handlers)for(let i of n)this._targetUnsubscribes.push(e.on(r,i));let t=this._pendingSends;this._pendingSends=[];for(let r of t)e.emit(r.channel,r.data)}rewriteSessionChannels(e,t){if(e===t)return;let r=`session:${e}:`,n=`session:${t}:`,i=new Map;for(let[a,o]of this._handlers)i.set(a.startsWith(r)?n+a.slice(r.length):a,o);this._handlers=i,this._pendingSends=this._pendingSends.map(a=>({...a,channel:a.channel.startsWith(r)?n+a.channel.slice(r.length):a.channel}))}on(e,t){if(this._disposed)return()=>{};let r=this._handlers.get(e);r||(r=new Set,this._handlers.set(e,r)),r.add(t);let n=this._target?.on(e,t);return n&&this._targetUnsubscribes.push(n),()=>{r?.delete(t),r?.size===0&&this._handlers.delete(e),n?.(),n&&(this._targetUnsubscribes=this._targetUnsubscribes.filter(i=>i!==n))}}emit(e,t){if(!this._disposed){if(this._target){this._target.emit(e,t);return}this._pendingSends.push({channel:e,data:t})}}dispose(){this._disposed=!0,this._pendingSends=[],this._handlers.clear(),this.detachTarget()}detachTarget(){for(let e of this._targetUnsubscribes)e();this._targetUnsubscribes=[],this._target=null}};function nt(){return typeof window>"u"&&typeof process<"u"&&process.versions!=null&&process.versions.node!=null}function hr(){return nt()?"Chrome111":void 0}function fr(){return typeof globalThis.RTCPeerConnection<"u"?null:"the WebRTC peer globals (RTCPeerConnection) are not installed in this runtime"}function mr(){if(!nt())return Promise.resolve();throw new Error("[urun-sh/core] Node WebRTC transport is not available in the browser build. The browser uses native WebRTC/WebSocket globals; import the Node build to use the werift-backed transport.")}var Ri="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";function wd(s){let e=globalThis.crypto,t=new Uint8Array(s);if(e?.getRandomValues)return e.getRandomValues(t),t;for(let r=0;r<s;r++)t[r]=Math.floor(Math.random()*256);return t}function Ci(s=16){let e=wd(s),t="";for(let r=0;r<s;r++)t+=Ri[e[r]%Ri.length];return t}function Ti(s){return`stream:${s}`}var ki="urun-stream-v1";var Ss=1,ve={BINARY:0,TEXT:1,JSON:2,END:3},Ei=Symbol("urun:stream:end");function Pi(s){if(s===Ei)return Uint8Array.from([Ss,ve.END]);let e,t;s instanceof Uint8Array?(e=ve.BINARY,t=s):s instanceof ArrayBuffer?(e=ve.BINARY,t=new Uint8Array(s)):typeof s=="string"?(e=ve.TEXT,t=new TextEncoder().encode(s)):(e=ve.JSON,t=new TextEncoder().encode(JSON.stringify(s)));let r=new Uint8Array(2+t.length);return r[0]=Ss,r[1]=e,r.set(t,2),r}function xi(s){let e=s instanceof Uint8Array?s:new Uint8Array(s);if(e.length<2||e[0]!==Ss)throw new Error(`[urun] bad stream envelope (version=${e[0]}, len=${e.length})`);let t=e[1],r=e.subarray(2);switch(t){case ve.BINARY:return r.slice();case ve.TEXT:return new TextDecoder().decode(r);case ve.JSON:return JSON.parse(new TextDecoder().decode(r));case ve.END:return Ei;default:throw new Error(`[urun] unknown stream envelope KIND 0x${t.toString(16)}`)}}var gr=class{consumerId;_handlers=new Map;constructor(e="loopback"){this.consumerId=e}onData(e,t){let r=this._handlers.get(e);return r||(r=new Set,this._handlers.set(e,r)),r.add(t),()=>r.delete(t)}sendData(e,t,r={}){r.to&&(r.to,this.consumerId);for(let n of this._handlers.get(e)??[])n(t);return Promise.resolve()}};function Di(s){return{get consumerId(){return s.consumerId},onData(e,t){return s.onStreamData(e,t)},sendData(e,t,r){return s.sendStreamData(e,t,r)}}}var vr=15e3,_r=class extends Error{kind;stream;timeoutMs;constructor(e,t){let r=t?.timeoutMs??vr,n=t?.stream??e,i=n!==e?` "${n}"`:"";super(`[urun] SFU did not ack producer ${e}${i} within ${Math.round(r/1e3)}s \u2014 the server never replied to 'produce'. The runtime's inbound port for this stream is likely unadvertised (a cold or capacity-queued runtime), so the SFU has nothing to forward the track to; the published track never reached the runtime.`),this.name="ProduceAckTimeout",this.kind=e,this.stream=n,this.timeoutMs=r,Object.setPrototypeOf(this,new.target.prototype)}};var Rt=class extends Error{code="transport_session_mismatch";connectedSessionId;requestedSessionId;constructor(e,t){super(`[urun] cannot retarget a connected transport to a different session: this leg is live on ${e??"(unknown)"} but setConnection() asked for ${t} \u2014 disconnect() this leg first (or use a fresh session handle)`),this.name="TransportSessionMismatchError",this.connectedSessionId=e,this.requestedSessionId=t,Object.setPrototypeOf(this,new.target.prototype)}},ue=class extends Error{httpStatus;constructor(e,t){super(e),this.name="SessionAllocationError",this.httpStatus=t?.httpStatus,t?.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}};function Ii(s){if(!s)return!1;let e=typeof s=="string"?s:s.name;return e==="queued"||e==="unavailable"||e==="provisioning"}var Li=[1e3,2e3,4e3,8e3,3e4],Mi=5,yd=15e3,Oi=15e3,Ai=15e3,bd=2e3,Sd=6e3,Rd=2e3,Cd=300,Ni=4e3,Td=2,kd=750,Ed=3,ji=[1e3,2e3,4e3],Pd=15e3;function Gi(s){return`stream:${s}`}var Rs="--",xd=["video","audio"];function Fi(s){let e=s.lastIndexOf(Rs);if(e<=0)return;let t=s.slice(e+Rs.length);return xd.includes(t)?t:void 0}var Dd={queued:"queued",pending:"provisioning",allocating:"provisioning",provisioning:"provisioning",allocated:"connecting",connecting:"connecting",live:"live",running:"live",error:"error",failed:"error",rejected:"error",expired:"expired",cancelled:"ended",canceled:"ended",closed:"ended"};function it(s){return s==="error"||s==="ended"||s==="expired"}var qi=3,$i=4e3,Ui=[{urls:"stun:stun.l.google.com:19302"},{urls:"stun:stun1.l.google.com:19302"}];function Bi(s){if(!s)return;let e=/\/(?:ws\/)?rtc\/([^/?#]+)/.exec(s);if(e)try{return decodeURIComponent(e[1])}catch{return e[1]}}var wr=class{_state="disconnected";_sessionId=null;_tracks=new Map;_tracksByName=new Map;_options;_emitter=new bs.default;_ws=null;_connectedUrl=null;_device=null;_mediaUnavailableReason=null;_mediaVerdictResolve;_mediaVerdict=new Promise(e=>{this._mediaVerdictResolve=e});_recvTransport=null;_sendTransport=null;_consumers=new Map;_audioProducer=null;_videoProducer=null;_publishedAudio=null;_publishedVideo=null;_pendingProduce=null;_multiplexer=null;_reconnectAttempts=0;_intentionalDisconnect=!1;_reconnectTimer=null;_cancelPendingDial=null;_stableResetTimer=null;_generation=0;_lastStartOptions;_resolveConnection=null;_recvIceRestartAttempts=0;_recvIceRestartTimer=null;_sendIceRestartAttempts=0;_sendIceRestartTimer=null;_phase={name:"idle"};_requestId;_liveReached=!1;_lastServerStatus;_endsAt=null;_forceResolveOnNextConnect=!1;_connectStartedAt;_wakingSince;_mediaProbeTimer=null;_statsTimer=null;_statsSampleInFlight=!1;_joinProbes=new Map;_decodeDeathHandled=!1;_selectedCandidatePair=Qi();_candidatePairDiagnosticEmitted=!1;_diagnosticSinkFailed=!1;_currentEpoch=0;_consumerId=null;_streamDataHandlers=new Map;_streamDataLane="sctp";_dataProducers=new Map;_dataProducerPromises=new Map;_dataConsumers=new Map;_pendingDataProduce=new Map;_sendTransportWaiters=[];get consumerId(){return this._consumerId===null&&(this._consumerId=Id()),this._consumerId}get state(){return this._state}get currentIncarnation(){return this._currentEpoch}get phase(){return this._phase}get isProducingMedia(){let e=t=>t!==null&&!t.closed&&!t.paused;return e(this._audioProducer)||e(this._videoProducer)}get endsAt(){return this._endsAt}setEndsAt(e){this._endsAt=e}_pastDeadline(){return this._endsAt!==null&&Date.now()>=this._endsAt.getTime()}get status(){let e={phase:this._phase.name,transportState:this._state};return this._sessionId&&(e.sessionId=this._sessionId),this._requestId&&(e.requestId=this._requestId),this._lastServerStatus!==void 0&&(e.lastServerStatus=this._lastServerStatus),this._connectStartedAt!==void 0&&(e.elapsedMs=Date.now()-this._connectStartedAt),this._endsAt!==null&&(e.endsAt=this._endsAt),this._phase.queue&&(e.queue=this._phase.queue),this._phase.runtime&&(e.runtime=this._phase.runtime),this._phase.wakingSince!==void 0&&(e.wakingSince=this._phase.wakingSince),this._phase.error&&(e.error=this._phase.error),e}get sessionId(){return this._sessionId}get tracks(){return this._tracks}get multiplexer(){return this._multiplexer}get isOpen(){return this._ws!==null&&this._ws.readyState===WebSocket.OPEN}get connectedUrl(){return this._connectedUrl}getTrackByName(e){if(Fi(e)!==void 0)return;let t=this._tracksByName.get(e);if(t&&t.readyState!=="ended")return t;for(let r of this._tracks.values())if(!(r.kind!==e||r.readyState==="ended")&&this._streamNameOf(r)===void 0)return r;return t}_streamNameOf(e){for(let[t,r]of this._tracksByName)if(r===e)return t}setAuth(e){this._options={...this._options,...e},this.isOpen&&this._send({type:"auth",orgId:this._options.orgId,jwt:this._options.jwt,authProvider:this._options.authProvider})}constructor(e){this._options=e??{url:""},e?.sessionId&&(this._sessionId=e.sessionId)}setConnection(e){if(this.isOpen){let t=Bi(e.url);if(e.sessionId!==void 0&&e.sessionId!==this._sessionId)throw new Rt(this._sessionId,e.sessionId);if(t!==void 0&&t!==this._sessionId)throw new Rt(this._sessionId,t);this._options={...this._options,...e};return}this._options={...this._options,...e},e.sessionId&&(this._sessionId=e.sessionId)}setConnectionResolver(e){this._resolveConnection=e}applyControlDocState(e){let t=e&&typeof e=="object"?e.session:void 0,r=jd(t);if(r!==void 0&&this.setIncarnation(r),!t||typeof t!="object")return;let n=t,i=typeof n.status=="string"?n.status:void 0;if(i&&!it(this._phase.name)&&!this.isStaleClosedMarker(n))if(i==="error"){let a=n.error_reason??n.errorReason,o=typeof a=="string"&&a?a:"session failed";this._setPhase("error",{error:{reason:o,code:"runtime-failed",kind:"runtime-failed"}})}else(i==="closed"||i==="ended")&&(this._pastDeadline()?this._setPhase("expired",{error:{reason:"session reached its maximum length",code:i,kind:"expired"}}):this._setPhase("ended"))}setIncarnation(e){if(!Number.isFinite(e)||e<=this._currentEpoch)return;let t=this._currentEpoch>0,r=this._state==="connected";this._currentEpoch=e,t&&r&&!this._intentionalDisconnect&&this._renegotiate()}isStaleIncarnation(e){return Number.isFinite(e)?e<this._currentEpoch:!1}isStaleClosedMarker(e){if(!e)return!1;let t=typeof e.status=="string"?e.status:void 0;if(t!=="closed"&&t!=="ended"&&t!=="error")return!1;let r=e.status_epoch??e.statusEpoch,n=typeof r=="number"?r:Number(r);return Number.isFinite(n)?n<this._currentEpoch:!1}async connect(e){if(this.isOpen&&this._state==="connected"&&!this._intentionalDisconnect){e!==void 0&&(this._lastStartOptions=e);return}this._lastStartOptions=e,this._intentionalDisconnect=!1,it(this._phase.name)&&(this._phase={name:"idle"}),this._connectStartedAt??=Date.now(),this._cancelPendingDial?.(new Error("TransportSession: connect superseded by a newer connect()"));let t=++this._generation,r=this._state==="reconnecting"||this._state==="renegotiating";r||this._setState("connecting");let n=null,i=()=>t!==this._generation||this._intentionalDisconnect,a=()=>{if(i())throw new Error("TransportSession: connect cancelled")},o=async()=>{for(let p of this._connectUrls()){a();try{return await this._connectOnce(p,t,e),!0}catch(u){n=u instanceof Error?u:new Error(String(u)),i()||this._cleanupSocket()}}return!1},c=this._forceResolveOnNextConnect&&this._resolveConnection!==null;this._forceResolveOnNextConnect=!1;let l=c?0:this._resolveConnection?Td:1;for(let p=0;p<l;p++)if(p>0&&(await zi(kd),a()),await o())return;if(this._resolveConnection)for(let p=0;p<Ed;p++){this._setState("reconnecting"),await zi(ji[Math.min(p,ji.length-1)]),a();try{let u=await this._resolveConnection();a(),this.setAuth({jwt:u.jwt??this._options.jwt,authProvider:this._options.authProvider,orgId:this._options.orgId}),this.setConnection({url:u.url,sessionId:u.sessionId,iceServers:u.iceServers??this._options.iceServers}),u.endsAt!==void 0&&(this._endsAt=u.endsAt)}catch(u){if(i())throw new Error("TransportSession: connect cancelled");n=u instanceof Error?u:new Error(String(u));continue}if(await o())return}if(i())throw n??new Error("TransportSession: connect cancelled");this._setState("failed");let d=n??new Error("TransportSession: connect failed");throw r||this._emitError(d),d}leaveLeg(){if(!this.isOpen)return!1;this._intentionalDisconnect=!0,this._stopMediaProbe(),this._stopStatsSampler(),this._clearRecvIceRestart(),this._clearSendIceRestart(),this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null);try{this._send({type:"leave"})}catch{}try{this._ws?.close()}catch{}return!0}disconnect(){this._generation+=1,this._intentionalDisconnect=!0,this._cancelPendingDial?.(new Error("TransportSession: connect cancelled by disconnect()")),this._stopMediaProbe(),this._stopStatsSampler(),this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null),this._clearReconnectBudgetReset(),this._reconnectAttempts=0;try{this._publishedAudio?.track.stop()}catch{}try{this._publishedVideo?.track.stop()}catch{}if(this._publishedAudio=null,this._publishedVideo=null,this._audioProducer){this._send({type:"stopAudio"});try{this._audioProducer.track?.stop()}catch{}try{this._audioProducer.close()}catch{}this._audioProducer=null}if(this._videoProducer){this._send({type:"stopVideo"});try{this._videoProducer.track?.stop()}catch{}try{this._videoProducer.close()}catch{}this._videoProducer=null}for(let e of this._consumers.values())try{e.close()}catch{}if(this._consumers.clear(),this._cleanupDataChannels(),this._settleSendTransportWaiters(null,new Error("[urun] sendStreamData: transport disconnected before the send transport arrived")),this._sendTransport){try{this._sendTransport.close()}catch{}this._sendTransport=null}if(this._recvTransport){try{this._recvTransport.close()}catch{}this._recvTransport=null}this._pendingProduce&&(clearTimeout(this._pendingProduce.timeoutId),this._pendingProduce.reject(new Error("TransportSession: disconnected")),this._pendingProduce=null),this._device=null,this._multiplexer&&(this._multiplexer.dispose(),this._multiplexer=null),this._cleanupSocket(),this._tracks.clear(),this._tracksByName.clear(),this._setState("disconnected"),this._liveReached=!1,this._setPhase("ended"),this._emitter.emit("disconnected")}on(e,t){return this._emitter.on(e,t),()=>{this._emitter.off(e,t)}}_emitDiagnostic(e){let t=this._options.diagnosticSink;if(t)try{t(e)}catch(r){this._diagnosticSinkFailed||(this._diagnosticSinkFailed=!0,console.warn(`[urun] diagnosticSink threw (${String(r instanceof Error?r.message:r)}) \u2014 further diagnostics ride only the structured 'diagnostic' event`))}else e.level==="debug"?console.debug(`[urun] ${e.message}`,e.detail??{}):console.warn(`[urun] ${e.message}`,e.detail??{});this._emitter.emit("diagnostic",e)}sendInput(e,t){this._send({type:"input",data:e,sequence:t})}sendSignal(e){this._send(e)}onSignal(e){return this.on("signal",e)}onStreamData(e,t){let r=this._streamDataHandlers.get(e);return r||(r=new Set,this._streamDataHandlers.set(e,r)),r.add(t),()=>{let n=this._streamDataHandlers.get(e);n?.delete(t),n&&n.size===0&&this._streamDataHandlers.delete(e)}}sendStreamData(e,t,r){try{this._requireMediaSupport("sendStreamData")}catch(n){return Promise.reject(n)}return this._ensureDataProducer(e).then(n=>{n.send(Pi(t))})}_awaitSendTransport(){return this._sendTransport?Promise.resolve(this._sendTransport):new Promise((e,t)=>{let r={resolve:i=>{clearTimeout(n),e(i)},reject:i=>{clearTimeout(n),t(i)}},n=setTimeout(()=>{let i=this._sendTransportWaiters.indexOf(r);i>=0&&this._sendTransportWaiters.splice(i,1),t(new Error(`[urun] sendStreamData: no send transport after ${Oi}ms (the server never offered createSendTransport \u2014 data-up produce is impossible on this leg)`))},Oi);this._sendTransportWaiters.push(r)})}_settleSendTransportWaiters(e,t){let r=this._sendTransportWaiters;this._sendTransportWaiters=[];for(let n of r)e?n.resolve(e):n.reject(t??new Error("TransportSession: disconnected"))}_ensureDataProducer(e){let t=this._dataProducers.get(e);if(t&&!t.closed)return Promise.resolve(t);let r=this._dataProducerPromises.get(e);if(r)return r;let n=this._awaitSendTransport().then(i=>i.produceData({label:Ti(e),protocol:ki,ordered:!0})).then(i=>this._awaitDataChannelOpen(i)).then(i=>(this._dataProducers.set(e,i),this._dataProducerPromises.delete(e),i)).catch(i=>{throw this._dataProducerPromises.delete(e),i});return this._dataProducerPromises.set(e,n),n}_awaitDataChannelOpen(e){if(e.closed)return Promise.reject(new Error("[urun] sendStreamData: DataProducer closed before its DataChannel opened"));let t=e.readyState;return t==="open"?Promise.resolve(e):t==="closing"||t==="closed"?Promise.reject(new Error(`[urun] sendStreamData: DataChannel is ${t} \u2014 cannot deliver data-up payloads`)):new Promise((r,n)=>{let i=()=>{l(),r(e)},a=p=>{d(new Error(`[urun] sendStreamData: DataChannel error before open: ${p.message}`))},o=()=>{l(),n(new Error("[urun] sendStreamData: DataProducer closed before its DataChannel opened"))},c=setTimeout(()=>{d(new Error(`[urun] sendStreamData: DataChannel not open after ${Ai}ms (the SCTP handshake never completed \u2014 data-up produce is impossible on this channel)`))},Ai),l=()=>{clearTimeout(c),e.off("open",i),e.off("error",a),e.observer.off("close",o)},d=p=>{l();try{e.close()}catch{}n(p)};e.on("open",i),e.on("error",a),e.observer.on("close",o)})}_dispatchStreamData(e,t){for(let r of this._streamDataHandlers.get(e)??[])r(t)}markStreamDataLaneQuic(){this._streamDataLane="quic"}dispatchQuicStreamData(e,t){this._dispatchStreamData(e,t)}raiseQuicStreamDataError(e){console.error(e.message),this._emitter.emit("error",e)}quicStreamDataLaneLost(e){if(this._streamDataLane!=="quic")return;this._streamDataLane="sctp";let t=[...this._streamDataHandlers.keys()];if(t.length===0)return;let r=new Error(`[urun] QUIC data lane lost mid-stream (${e}) \u2014 active named streams [${t.join(", ")}] resume over SCTP on the failover leg from now; envelopes in flight on the dead lane are gone (mid-stream-join semantics)`);console.error(r.message),this._emitter.emit("error",r)}_streamNameFromLabel(e){if(e)return e.startsWith("stream:")?e.slice(7):void 0}mediaUnavailableReason(){return this._mediaUnavailableReason}mediaAvailability(){return this._mediaVerdict}_requireMediaSupport(e){if(this._mediaUnavailableReason)throw new Error(`[urun-sh/core] ${e}: realtime media is unavailable in this process \u2014 ${this._mediaUnavailableReason}. This session joined in doc/KV-only mode (the media device was skipped); install the optional "werift" dependency to enable realtime media.`)}async addTrack(e,t){this._requireMediaSupport("addTrack"),await this._publishTrack(e,t)}async _publishTrack(e,t){let r=e.kind==="video",n=r?this._videoProducer:this._audioProducer;if(n&&!n.closed){if(n.track===e)return;await n.replaceTrack({track:e}),this._rememberPublishIntent(r,e,t);return}if(!this._sendTransport)throw new Error("TransportSession: send transport not ready");let i=await this._sendTransport.produce({track:e,...r?{}:{codecOptions:{opusStereo:!1,opusDtx:!1,opusFec:!1}},stopTracks:!1,...t?{appData:{name:t}}:{}});r?this._videoProducer=i:this._audioProducer=i,this._rememberPublishIntent(r,e,t)}_rememberPublishIntent(e,t,r){let n={track:t,...r!==void 0?{name:r}:{}};e?this._publishedVideo=n:this._publishedAudio=n}removeTrack(){if(this._publishedAudio=null,this._audioProducer){this._send({type:"stopAudio"});try{this._audioProducer.track?.stop()}catch{}this._audioProducer.close(),this._audioProducer=null}}async addVideoTrack(e,t){this._requireMediaSupport("addVideoTrack"),await this._publishTrack(e,t)}stopVideo(){if(this._publishedVideo=null,this._videoProducer){this._send({type:"stopVideo"});try{this._videoProducer.track?.stop()}catch{}this._videoProducer.close(),this._videoProducer=null}}requestDiagnostics(){this._send({type:"diagnostics"})}seekStream(e,t){this._send({type:"stream.seek",stream:e,target:t})}async _handleMessage(e){switch(e.type){case"routerRtpCapabilities":await this._onRouterCapabilities(e.rtpCapabilities);break;case"createWebRtcTransport":await this._onCreateRecvTransport(e);break;case"createSendTransport":await this._onCreateSendTransport(e);break;case"consume":await this._onConsume(e);break;case"consumerClosed":this._closeConsumer(e.consumerId);break;case"producerClosed":this._closeConsumersByProducer(e.producerId);break;case"consumerPaused":this._consumers.get(e.consumerId)?.pause();break;case"consumerResumed":this._consumers.get(e.consumerId)?.resume();break;case"iceRestarted":this._onIceRestarted(e);break;case"produced":if(this._pendingProduce){let t=this._pendingProduce;this._pendingProduce=null,clearTimeout(t.timeoutId),t.resolve(e.id)}break;case"dataProduced":{let t=e.label,r=t?this._pendingDataProduce.get(t):void 0;r&&t&&(this._pendingDataProduce.delete(t),r.resolve(e.id));break}case"consumeData":await this._onConsumeData(e);break;case"started":this._emitter.emit("started");break;case"status":this._onStatus(e);break;case"stream.seeked":this._onStreamSeeked(e);break;case"error":this._onServerError(e);break;default:this._emitter.emit("signal",e);break}}_onServerError(e){let t=typeof e.message=="string"?e.message:"signaling error",r=typeof e.code=="string"?e.code:void 0;if(/connect\(\) already called/i.test(t)){if(this._resolveConnection){this._generation++;let n=this._ws;this._ws=null;try{n?.close()}catch{}this._cleanupMedia(),this._forceResolveOnNextConnect=!0,this._renegotiate();return}this._setPhase("error",{error:{reason:t,code:"transport-consumed",kind:"transport-failed"}}),this._emitter.emit("error",new Error(t));return}if(r==="TRANSPORT_BIND_FAILED"){this._emitError(new Error(t),r);return}console.warn("[urun] signaling error from server:",t)}_onStreamSeeked(e){let t=typeof e.stream=="string"?e.stream:void 0;if(!t)return;let r=e.target,n=r==="live"?"live":typeof r=="number"?r:Number(r);this._emitter.emit("seeked",t,n)}_onStatus(e){let t=e.request_id??e.requestId;t&&(this._requestId=t);let r=typeof e.status=="string"?e.status:void 0,n=(r?Dd[r]:void 0)??"provisioning",i=it(n);if(this._liveReached&&!i||it(this._phase.name))return;r!==void 0&&(this._lastServerStatus=r);let a=e.queue_position??e.queuePosition,o=e.queue_depth??e.queueDepth,c=typeof a=="number"&&typeof o=="number";if(n==="expired"){let l=typeof e.reason=="string"&&e.reason?e.reason:this._endsAt!==null?"session reached its maximum length":"session expired";this._setPhase("expired",{error:{reason:l,code:r,kind:"expired"}});return}if(n==="error"){let l=typeof e.reason=="string"&&e.reason?e.reason:r??"admission failed";this._setPhase("error",{error:{reason:l,code:r,kind:r==="error"?"runtime-failed":"create-failed"}});return}if(n==="ended"){this._pastDeadline()?this._setPhase("expired",{error:{reason:"session reached its maximum length",code:r,kind:"expired"}}):this._setPhase("ended");return}if(n==="queued"){this._setPhase("queued",c?{queue:{position:a,depth:o}}:void 0);return}if(n==="connecting"){this._setPhase("connecting");return}this._setPhase("provisioning")}async _onRouterCapabilities(e){nt()&&await mr();let t=fr();if(t){this._mediaUnavailableReason=t,this._mediaVerdictResolve(t);return}this._mediaVerdictResolve(null);let r=hr(),n=new Vi.Device(r?{handlerName:r}:void 0);await n.load({routerRtpCapabilities:e}),this._device=n,this._send({type:"rtpCapabilities",rtpCapabilities:n.rtpCapabilities})}async _onCreateRecvTransport(e){this._device&&this._buildRecvTransport(e)}_buildRecvTransport(e){if(!this._device)return;let t=e.iceCandidates,r=this._device.createRecvTransport({id:e.id,iceParameters:e.iceParameters,iceCandidates:t,dtlsParameters:e.dtlsParameters,...e.sctpParameters?{sctpParameters:e.sctpParameters}:{},iceServers:this._options.iceServers??Ui});this._recvIceRestartAttempts=0,this._clearRecvIceRestart();let n=this._generation;r.on("connect",({dtlsParameters:i},a,o)=>{try{this._send({type:"connectTransport",transportId:r.id,dtlsParameters:i}),a()}catch(c){o(c)}}),r.on("connectionstatechange",i=>{if(n===this._generation){if(i==="connected"){this._clearRecvIceRestart(),this._recvIceRestartAttempts=0,this._reportSelectedCandidatePair(r);return}if(!(this._intentionalDisconnect&&i==="closed")&&(i==="failed"||i==="disconnected")){if(this._tryRestartRecvIce())return;i==="failed"&&this._emitError(new Error(`media transport ${i}`),i),this._renegotiate()}}}),this._recvTransport=r}async _reportSelectedCandidatePair(e){let t=null;if(typeof e.getStats=="function")try{t=await e.getStats()}catch{}if(this._recvTransport!==e||(this._selectedCandidatePair=Nd(t),this._candidatePairDiagnosticEmitted))return;let r=Object.values(this._selectedCandidatePair).some(n=>n!==null);r&&(this._candidatePairDiagnosticEmitted=!0),this._emitDiagnostic({level:r?"info":"debug",kind:"ice-candidate-pair",message:`selected ICE candidate pair: local=${this._selectedCandidatePair.localType??"unknown"} remote=${this._selectedCandidatePair.remoteType??"unknown"} protocol=${this._selectedCandidatePair.protocol??"unknown"} remote=${this._selectedCandidatePair.remoteAddress??"unknown"}:${this._selectedCandidatePair.remotePort??"unknown"}`,detail:{sessionId:this._options.sessionId,...this._selectedCandidatePair}})}_tryRestartRecvIce(){let e=this._recvTransport;return!e||e.closed?!1:this._recvIceRestartTimer?!0:this._recvIceRestartAttempts>=qi?!1:(this._recvIceRestartAttempts++,this._armRecvIceRestartWatchdog(),this._requestIceRestart(e.id),!0)}_trySendIceRestart(){let e=this._sendTransport;return!e||e.closed?!1:this._sendIceRestartTimer?!0:this._sendIceRestartAttempts>=qi?!1:(this._sendIceRestartAttempts++,this._armSendIceRestartWatchdog(),this._requestIceRestart(e.id),!0)}_requestIceRestart(e){this._send({type:"restartIce",transportId:e})}_onIceRestarted(e){let t=e.transportId??e.id,r=e.iceParameters;if(!r)return;let n=!!this._recvTransport&&this._recvTransport.id===t,i=!n&&!!this._sendTransport&&this._sendTransport.id===t,a=n?this._recvTransport:i?this._sendTransport:null;a&&(Promise.resolve(a.restartIce({iceParameters:r})).catch(o=>{this._emitter.emit("error",o instanceof Error?o:new Error(String(o)))}),n&&this._recvIceRestartTimer?this._armRecvIceRestartWatchdog():i&&this._sendIceRestartTimer&&this._armSendIceRestartWatchdog())}_armRecvIceRestartWatchdog(){this._clearRecvIceRestart();let e=this._generation;this._recvIceRestartTimer=setTimeout(()=>{this._recvIceRestartTimer=null,!(e!==this._generation||this._intentionalDisconnect)&&this._recvTransport?.connectionState!=="connected"&&(this._emitError(new Error("media transport failed (ice restart timeout)"),"failed"),this._renegotiate())},$i)}_armSendIceRestartWatchdog(){this._clearSendIceRestart();let e=this._generation;this._sendIceRestartTimer=setTimeout(()=>{this._sendIceRestartTimer=null,!(e!==this._generation||this._intentionalDisconnect)&&this._sendTransport?.connectionState!=="connected"&&this._emitError(new Error("media send transport failed (ice restart timeout)"),"failed")},$i)}_clearRecvIceRestart(){this._recvIceRestartTimer&&(clearTimeout(this._recvIceRestartTimer),this._recvIceRestartTimer=null)}_clearSendIceRestart(){this._sendIceRestartTimer&&(clearTimeout(this._sendIceRestartTimer),this._sendIceRestartTimer=null)}async _onCreateSendTransport(e){if(!this._device)return;let t=this._device.createSendTransport({id:e.id,iceParameters:e.iceParameters,iceCandidates:e.iceCandidates,dtlsParameters:e.dtlsParameters,...e.sctpParameters?{sctpParameters:e.sctpParameters}:{},iceServers:this._options.iceServers??Ui});this._sendIceRestartAttempts=0,this._clearSendIceRestart();let r=this._generation;t.on("connect",({dtlsParameters:n},i,a)=>{try{this._send({type:"connectSendTransport",transportId:t.id,dtlsParameters:n}),i()}catch(o){a(o)}}),t.on("produce",({kind:n,rtpParameters:i,appData:a},o,c)=>{if(this._pendingProduce){c(new Error("produce already pending"));return}let l=a&&typeof a.name=="string"?a.name:void 0,d=setTimeout(()=>{let p=this._pendingProduce;if(!p||p.timeoutId!==d)return;this._pendingProduce=null;let u=new _r(n,{stream:l,timeoutMs:vr});this._setPhase("error",{error:{reason:u.message,code:"produce-ack-timeout",kind:"produce-timeout"}}),this._emitter.emit("error",u),p.reject(u)},vr);this._pendingProduce={timeoutId:d,resolve:p=>{o({id:p})},reject:c};try{this._send(l?{type:"produce",kind:n,name:l,rtpParameters:i}:{type:"produce",kind:n,rtpParameters:i})}catch(p){this._pendingProduce?.timeoutId===d&&(this._pendingProduce=null,clearTimeout(d)),c(p)}}),t.on("producedata",({sctpStreamParameters:n,label:i,protocol:a},o,c)=>{try{i&&this._pendingDataProduce.set(i,{resolve:l=>o({id:l}),reject:c}),this._send({type:"produceData",sctpStreamParameters:n,label:i,protocol:a})}catch(l){i&&this._pendingDataProduce.delete(i),c(l)}}),t.on("connectionstatechange",n=>{if(r===this._generation){if(n==="connected"){this._clearSendIceRestart(),this._sendIceRestartAttempts=0;return}this._intentionalDisconnect&&n==="closed"||(n==="failed"||n==="disconnected")&&this._trySendIceRestart()||(n==="failed"||n==="closed")&&this._emitError(new Error(`media send transport ${n}`),n)}}),this._sendTransport=t,this._settleSendTransportWaiters(t),this._emitter.emit("audioTransportReady"),this._republishPublishedTracks()}async _republishPublishedTracks(){let e=this._publishedAudio;if(e&&e.track.readyState!=="ended"&&(!this._audioProducer||this._audioProducer.closed))try{await this.addTrack(e.track,e.name)}catch(r){console.warn("[urun] republish: mic re-produce after reconnect failed",r)}else e&&e.track.readyState==="ended"&&console.warn("[urun] republish: published mic track is ended \u2014 not republishing (device re-acquisition is the app/page-recovery pass)");let t=this._publishedVideo;if(t&&t.track.readyState!=="ended"&&(!this._videoProducer||this._videoProducer.closed))try{await this.addVideoTrack(t.track,t.name)}catch(r){console.warn("[urun] republish: camera re-produce after reconnect failed",r)}else t&&t.track.readyState==="ended"&&console.warn("[urun] republish: published camera track is ended \u2014 not republishing (device re-acquisition is the app/page-recovery pass)")}async _onConsumeData(e){if(this._streamDataLane==="quic"){this.raiseQuicStreamDataError(new Error(`[urun] consumeData (label=${String(e.label)}) pushed on a leg whose data lane is QUIC \u2014 refusing (one canonical data path per leg, contract urun-infra#1605)`));return}if(!this._recvTransport)return;let t=e.label,r=this._streamNameFromLabel(t);if(!r)return;let n=await this._recvTransport.consumeData({id:e.id,dataProducerId:e.dataProducerId,sctpStreamParameters:e.sctpStreamParameters,label:t,protocol:e.protocol});this._dataConsumers.set(r,n),n.on("message",o=>{try{let c=typeof o=="string"?new TextEncoder().encode(o):new Uint8Array(o);this._dispatchStreamData(r,xi(c))}catch(c){this._emitter.emit("error",c instanceof Error?c:new Error(String(c)))}});let i=!1,a=()=>{i||n.closed||(i=!0,this._send({type:"dataConsumerReady",id:e.id}))};n.readyState==="open"?a():n.on("open",a)}async _onConsume(e){if(!this._recvTransport)return;let t=this._generation,r=await this._recvTransport.consume({id:e.id,producerId:e.producerId,kind:e.kind,rtpParameters:e.rtpParameters});this._consumers.set(r.id,r),this._tracks.set(r.track.id,r.track),this._capJitterBuffer(r,r.kind==="video"?"video":"audio");let n=e.streamName??e.label;n&&this._tracksByName.set(n,r.track),r.track.addEventListener?.("unmute",()=>{t!==this._generation||this._intentionalDisconnect||this._isTerminalPhase()||this._liveReached||this._setPhase("live")},{once:!0}),this._emitter.emit("track",r.track);let i=r.id;r.track.addEventListener("ended",()=>{t!==this._generation||this._intentionalDisconnect||this._closeConsumer(i)},{once:!0}),this._send({type:"resumeConsumer",consumerId:r.id}),this._startMediaProbe(),this._startStatsSampler()}_jitterBufferTargetMs(e){if(e==="audio"){let t=this._options.audioPlayout?.jitterBufferTargetMs;return t===void 0?Cd:t}return this._options.videoPlayout?.jitterBufferTargetMs}_capJitterBuffer(e,t){let r=this._jitterBufferTargetMs(t);if(r===void 0)return;let n=t==="video"?"videoPlayout":"audioPlayout",i={mediaKind:t,transportId:this._recvTransport?.id??null};if(!Number.isFinite(r)){this._emitDiagnostic({level:"warning",kind:`${t}-jitter-buffer-invalid`,message:`${n}.jitterBufferTargetMs must be a finite number of milliseconds; got ${String(r)}. No jitter-buffer cap applied.`,detail:{consumerId:e.id,targetMs:String(r),...i}});return}if(r<=0)return;if(r>Ni){this._emitDiagnostic({level:"warning",kind:`${t}-jitter-buffer-invalid`,message:`${n}.jitterBufferTargetMs must be within the W3C jitterBufferTarget range 0-${Ni}ms; got ${r}. No jitter-buffer cap applied.`,detail:{consumerId:e.id,targetMs:r,...i}});return}let a=e.rtpReceiver;if(!a){this._emitDiagnostic({level:"debug",kind:`${t}-jitter-buffer-unsupported`,message:`${t} consumer exposes no RTCRtpReceiver (node/werift leg); no jitter-buffer cap applied.`,detail:{consumerId:e.id,targetMs:r,reason:"no-receiver",...i}});return}let o=[];if("jitterBufferTarget"in a&&(a.jitterBufferTarget=r,o.push("jitterBufferTarget")),"playoutDelayHint"in a&&(a.playoutDelayHint=r/1e3,o.push("playoutDelayHint")),o.length===0){this._emitDiagnostic({level:"debug",kind:`${t}-jitter-buffer-unsupported`,message:`${t==="audio"?"Audio":"Video"} receiver exposes neither jitterBufferTarget nor playoutDelayHint; standing ${t} playout delay is unbounded on this engine.`,detail:{consumerId:e.id,targetMs:r,...i}});return}this._emitDiagnostic({level:"debug",kind:`${t}-jitter-buffer-capped`,message:`${t==="audio"?"Audio":"Video"} receiver jitter buffer capped at ${r}ms.`,detail:{consumerId:e.id,targetMs:r,applied:o,...i}})}_closeConsumer(e){let t=this._consumers.get(e);if(!t)return;this._consumers.delete(e);let r=t.track;try{t.close()}catch{}if(r){this._tracks.delete(r.id);for(let[n,i]of this._tracksByName)i===r&&this._tracksByName.delete(n)}}_closeConsumersByProducer(e){for(let[t,r]of this._consumers)r.producerId===e&&this._closeConsumer(t)}_mediaPollMs(){let e=this._options.mediaLiveness?.pollMs;return e===void 0?bd:e}_firstFrameWindowMs(){let e=this._options.mediaLiveness?.stallTimeoutMs;return e===void 0?Sd:e}_startMediaProbe(){let e=this._mediaPollMs();if(e<=0||this._mediaProbeTimer)return;let t=this._generation;this._mediaProbeTimer=setInterval(()=>{t!==this._generation||this._intentionalDisconnect||this._isTerminalPhase()||this._sampleMediaArrival(t)},e)}_stopMediaProbe(){this._mediaProbeTimer&&(clearInterval(this._mediaProbeTimer),this._mediaProbeTimer=null)}_statsPollMs(){let e=this._options.sessionStats;if(!e)return 0;let t=e.pollMs;return t===void 0?Rd:Number.isFinite(t)&&t>0?t:0}_startStatsSampler(){let e=this._statsPollMs();if(e<=0||this._statsTimer)return;let t=this._generation;this._statsTimer=setInterval(()=>{t!==this._generation||this._intentionalDisconnect||this._isTerminalPhase()||this._statsSampleInFlight||(this._statsSampleInFlight=!0,this._sampleSessionStats(t).catch(r=>{try{this._emitter.emit("error",r instanceof Error?r:new Error(String(r)))}catch{}}).finally(()=>{this._statsSampleInFlight=!1}))},e)}_stopStatsSampler(){this._statsTimer&&(clearInterval(this._statsTimer),this._statsTimer=null),this._statsSampleInFlight=!1}_lanePairKey(e){let t=e.track,r=t?this._streamNameOf(t):void 0;if(r===void 0)return null;let n=Fi(r);return n===void 0?r:r.slice(0,r.length-Rs.length-n.length)}async _sampleSessionStats(e){if(this._consumers.size===0)return;let t=Array.from(this._consumers.values()),r=await Promise.all(t.map(async u=>({consumerId:u.id,kind:u.kind==="video"?"video":"audio",pairKey:this._lanePairKey(u),sample:await Hi(u)})));if(e!==this._generation||this._intentionalDisconnect||this._isTerminalPhase())return;let n=r.filter(u=>u.pairKey===null),i=r.filter(u=>u.pairKey!==null),a=null,o=r;if(i.length>0){let u=new Map;for(let f of i){let g=f.pairKey,_=u.get(g);_?_.push(f):u.set(g,[f])}let h=-1,m=-1;for(let[f,g]of u){let _=new Set(g.map(T=>T.kind)).size>=2?1:0,v=g.reduce((T,P)=>T+P.sample.total,0);(_>h||_===h&&v>m)&&(h=_,m=v,a=f,o=[...g,...n])}}let c=u=>{let h=null,m=-1;for(let{consumerId:f,kind:g,sample:_}of o)g===u&&_.total>m&&(m=_.total,h={consumerId:f,..._});return h},l=c("audio"),d=c("video"),p=d?.estimatedPlayoutTimestamp!=null&&l?.estimatedPlayoutTimestamp!=null?d.estimatedPlayoutTimestamp-l.estimatedPlayoutTimestamp:null;this._emitter.emit("stats",{timestamp:Date.now(),stream:a,avSyncMs:p,audio:l,video:d})}_resetJoinProbes(){this._joinProbes.clear(),this._decodeDeathHandled=!1}async _sampleMediaArrival(e){if(this._consumers.size===0)return;let t=Array.from(this._consumers.entries()),r=await Promise.all(t.map(async([o,c])=>[o,await Hi(c)]));if(e!==this._generation||this._intentionalDisconnect||this._isTerminalPhase())return;for(let o of this._joinProbes.keys())this._consumers.has(o)||this._joinProbes.delete(o);let n=Date.now();!this._liveReached&&r.some(([,o])=>o.total>0)&&this._setPhase("live");let i=null,a=!1;for(let[o,c]of r){if(c.total<=0){a=!0;continue}let l=this._joinProbes.get(o);if(l||(l={firstBytesAt:n,startSample:c,settled:!1},this._joinProbes.set(o,l)),!l.settled){if(c.framesDecoded===null){l.settled=!0;continue}if(c.framesDecoded>0){l.settled=!0;continue}if(n-l.firstBytesAt>=this._firstFrameWindowMs()){i??={id:o,probe:l,sample:c};continue}a=!0}}if(i&&!this._decodeDeathHandled){this._decodeDeathHandled=!0;let o=this._firstFrameWindowMs(),c=Ad(i.probe.startSample,i.sample),l=c.lossPct!==null&&c.lossPct>=5?" \u2014 consistent with network packet loss between the SFU and this browser":"";this._emitDiagnostic({level:"warning",kind:"decode-wall",message:`video is arriving but the decoder never produced its first frame within ${o/1e3}s of join (framesDecoded still 0) \u2014 no keyframe to start from${l}; re-consuming the stream`,detail:{sessionId:this._options.sessionId,consumerId:i.id,firstFrameWindowMs:o,inboundTotal:i.sample.total,framesDecoded:i.sample.framesDecoded,...Od(i.sample),...c,likelyCause:c.lossPct!==null&&c.lossPct>=5?"network-packet-loss":null,...this._selectedCandidatePair}}),this._renegotiate();return}!a&&!i&&this._stopMediaProbe()}_renegotiate(){this._intentionalDisconnect||this._isTerminalPhase()||this._reconnectTimer||(this._stopMediaProbe(),this._stopStatsSampler(),this._setState("renegotiating"),this._attemptReconnect())}recover(){if(this._intentionalDisconnect||this._isTerminalPhase()||this._connectStartedAt===void 0||this._cancelPendingDial)return;if(!this.isOpen){this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null),this._reconnectAttempts=0,this._attemptReconnect(void 0,!0);return}let e=this._recvTransport?.connectionState;(e==="disconnected"||e==="failed")&&(this._recvIceRestartTimer||(this._recvIceRestartAttempts=0),this._tryRestartRecvIce()||this._renegotiate());let t=this._sendTransport?.connectionState;(t==="disconnected"||t==="failed")&&(this._sendIceRestartTimer||(this._sendIceRestartAttempts=0),this._trySendIceRestart())}_attemptReconnect(e,t=!1){if(this._intentionalDisconnect||this._isTerminalPhase()||this._reconnectTimer)return;if(this._reconnectAttempts>=Mi){this._setState("failed"),this._emitError(new Error(`Failed after ${Mi} attempts`));return}let r=t?0:Li[Math.min(this._reconnectAttempts,Li.length-1)];this._reconnectAttempts++,this._state!=="renegotiating"&&this._setState("reconnecting"),this._reconnectTimer=setTimeout(async()=>{this._reconnectTimer=null,this._replaceCurrentLegForReconnect();try{await this.connect(e??this._lastStartOptions)}catch(n){if(n instanceof Error&&n.message==="TransportSession: connect cancelled")return;this._attemptReconnect(e)}},r)}_connectUrls(){let e=[],t=r=>{if(!r)return;let n=Bi(r)!==void 0,i=this._sessionId&&!n?`${r}${r.includes("?")?"&":"?"}sessionId=${encodeURIComponent(this._sessionId)}`:r;e.includes(i)||e.push(i)};t(this._options.url);for(let r of this._options.fallbackUrls??[])t(r);return e}_connectOnce(e,t,r){return new Promise((n,i)=>{let a=!1,o=!1,c=null,l=new WebSocket(e);this._ws=l;let d=()=>this._ws!==l||t!==this._generation,p=h=>{o||(o=!0,c&&clearTimeout(c),this._cancelPendingDial===u&&(this._cancelPendingDial=null),i(h))},u=h=>{try{l.close()}catch{}p(h)};this._cancelPendingDial=u,c=setTimeout(()=>{try{l.close()}catch{}p(new Error("TransportSession: connect timed out"))},yd),l.onopen=()=>{if(!o){if(d()){try{l.close()}catch{}p(new Error("TransportSession: connect superseded during dial"));return}a=!0,c&&clearTimeout(c),this._connectedUrl=e,this._multiplexer=new st(l),l.send(JSON.stringify(this._startMessage(r))),this._scheduleReconnectBudgetReset(),this._setState("connected"),this._liveReached||this._setPhase("connecting"),this._emitter.emit("connected"),o=!0,this._cancelPendingDial===u&&(this._cancelPendingDial=null),n()}},l.onerror=()=>{a||p(new Error("WebSocket connection error"))},l.onclose=()=>{if(!a){p(new Error("WebSocket closed before connecting"));return}if(!d()&&(this._clearReconnectBudgetReset(),c&&clearTimeout(c),this._setState("disconnected"),!this._intentionalDisconnect)){if(this._pastDeadline()&&!it(this._phase.name)){this._setPhase("expired",{error:{reason:"session reached its maximum length",kind:"expired"}}),this._emitter.emit("disconnected");return}this._emitter.emit("disconnected"),!this._isTerminalPhase()&&this._attemptReconnect(r)}},l.onmessage=h=>{if(!(this._ws!==l||t!==this._generation)&&typeof h.data=="string")try{this._handleMessage(JSON.parse(h.data)).catch(m=>{this._emitter.emit("error",m instanceof Error?m:new Error(String(m)))})}catch(m){this._emitter.emit("error",m instanceof Error?m:new Error(String(m)))}}})}_startMessage(e){let t={type:"start",video:e?.video??{width:854,height:480,frameRate:16}};return e?.prompt&&(t.prompt=e.prompt),e?.cameraControl&&(t.camera_control=e.cameraControl),e?.args&&(t.args=e.args),e?.app&&(t.app=e.app),e?.functionName&&(t.function=e.functionName),e?.role&&(t.role=e.role),this._options.orgId&&(t.orgId=this._options.orgId),this._options.jwt&&(t.jwt=this._options.jwt),this._options.authProvider&&(t.authProvider=this._options.authProvider),t}_cleanupSocket(){if(this._clearReconnectBudgetReset(),!this._ws)return;let e=this._ws;this._ws=null,e.onopen=null,e.onmessage=null,e.onerror=null,e.onclose=null;try{e.close()}catch{}}_replaceCurrentLegForReconnect(){this._cleanupSocket(),this._cancelPendingDial?.(new Error("TransportSession: reconnect replacing current dial")),this._cleanupMedia()}_scheduleReconnectBudgetReset(){this._clearReconnectBudgetReset(),this._reconnectAttempts!==0&&(this._stableResetTimer=setTimeout(()=>{this._stableResetTimer=null,this._reconnectAttempts=0},Pd))}_clearReconnectBudgetReset(){this._stableResetTimer&&(clearTimeout(this._stableResetTimer),this._stableResetTimer=null)}_cleanupDataChannels(){for(let e of this._dataProducers.values())try{e.close()}catch{}this._dataProducers.clear(),this._dataProducerPromises.clear();for(let e of this._dataConsumers.values())try{e.close()}catch{}this._dataConsumers.clear();for(let e of this._pendingDataProduce.values())try{e.reject(new Error("TransportSession: disconnected"))}catch{}this._pendingDataProduce.clear()}_cleanupMedia(){this._stopMediaProbe(),this._stopStatsSampler(),this._resetJoinProbes();for(let e of this._consumers.values())try{e.close()}catch{}if(this._consumers.clear(),this._cleanupDataChannels(),this._audioProducer){try{this._audioProducer.close()}catch{}this._audioProducer=null}if(this._videoProducer){try{this._videoProducer.close()}catch{}this._videoProducer=null}if(this._clearRecvIceRestart(),this._clearSendIceRestart(),this._recvTransport){try{this._recvTransport.close()}catch{}this._recvTransport=null}if(this._sendTransport){try{this._sendTransport.close()}catch{}this._sendTransport=null}this._pendingProduce&&(clearTimeout(this._pendingProduce.timeoutId),this._pendingProduce=null),this._device=null,this._tracks.clear(),this._tracksByName.clear(),this._multiplexer&&(this._multiplexer.dispose(),this._multiplexer=null)}_send(e){!this._ws||this._ws.readyState!==WebSocket.OPEN||this._ws.send(JSON.stringify(e))}_setState(e){this._state!==e&&(this._state=e,this._emitter.emit("stateChange",e))}_isTerminalPhase(){return this._phase.name==="ended"||this._phase.name==="expired"?!0:this._phase.name!=="error"?!1:this._phase.error?.kind!=="transport-failed"}_setPhase(e,t){e==="live"&&(this._liveReached=!0);let r={name:e};t?.queue&&(r.queue=t.queue),t?.runtime&&(r.runtime=t.runtime),Ii(e)?(this._wakingSince??=Date.now(),r.wakingSince=this._wakingSince):this._wakingSince=void 0,this._requestId&&(r.requestId=this._requestId),this._sessionId&&(r.sessionId=this._sessionId),this._endsAt!==null&&(r.endsAt=this._endsAt),t?.error&&(r.error=t.error),this._phase=r,this._isTerminalPhase()&&(this._stopMediaProbe(),this._stopStatsSampler(),this._clearRecvIceRestart(),this._clearSendIceRestart(),this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null)),this._emitter.emit("phase",r)}reportAdmission(e){if(e.requestId&&(this._requestId=e.requestId),this._lastServerStatus=e.status,this._liveReached||it(this._phase.name))return;let{runtime:t,queue:r}=e;if(t?.state==="unavailable"){this._setPhase("unavailable",{runtime:t});return}if(t?.state==="starting"){this._setPhase("provisioning",{runtime:t});return}if(t?.state==="busy"||e.status==="queued"){this._setPhase("queued",{queue:r,runtime:t});return}this._setPhase("provisioning")}_emitError(e,t){this._setPhase("error",{error:{reason:e.message,code:t,kind:"transport-failed"}}),this._emitter.emit("error",e)}reportAllocationFailure(e,t){this._setPhase("error",{error:{reason:e.message,code:"allocation-failed",kind:"create-failed",httpStatus:t}}),this._emitter.emit("error",e)}};function zi(s){return new Promise(e=>setTimeout(e,s))}function Id(){return Ci()}var Ki=["packetsReceived","packetsLost","nackCount","pliCount","firCount","keyFramesDecoded","framesReceived","framesDropped","retransmittedPacketsReceived","retransmittedBytesReceived","jitterBufferDelay","jitterBufferEmittedCount","estimatedPlayoutTimestamp","jitterBufferTargetDelay","jitterBufferMinimumDelay","concealedSamples","insertedSamplesForDeceleration"],Ld=new Set(["estimatedPlayoutTimestamp"]);function Md(){return{total:0,framesDecoded:null,packetsReceived:null,packetsLost:null,nackCount:null,jitter:null,pliCount:null,firCount:null,keyFramesDecoded:null,framesReceived:null,framesDropped:null,retransmittedPacketsReceived:null,retransmittedBytesReceived:null,jitterBufferDelay:null,jitterBufferEmittedCount:null,estimatedPlayoutTimestamp:null,jitterBufferTargetDelay:null,jitterBufferMinimumDelay:null,concealedSamples:null,insertedSamplesForDeceleration:null}}function Od(s){return Object.fromEntries(Ki.map(e=>[e,s[e]]))}function Wi(s,e){return s===null||e===null||e<s?null:e-s}function Ad(s,e){let t=s.packetsLost!==null&&e.packetsLost!==null?e.packetsLost-s.packetsLost:null,r=Wi(s.packetsReceived,e.packetsReceived),n=Wi(s.nackCount,e.nackCount),i=t===null?null:Math.max(0,t),a=i!==null&&r!==null?i+r:0;return{packetsLostWindow:t,packetsReceivedWindow:r,nackCountWindow:n,jitterSec:e.jitter,lossPct:a>0&&i!==null?i/a*100:null}}function Qi(){return{localType:null,remoteType:null,protocol:null,remoteAddress:null,remotePort:null}}function Nd(s){let e=new Map;Yi(s,o=>{let c=typeof o.id=="string"?o.id:null;c&&e.set(c,o)});let t=Array.from(e.values()).find(o=>o.type==="transport"),r=typeof t?.selectedCandidatePairId=="string"?t.selectedCandidatePairId:null,n=(r?e.get(r):void 0)??Array.from(e.values()).find(o=>o.type==="candidate-pair"&&o.selected===!0)??Array.from(e.values()).find(o=>o.type==="candidate-pair"&&o.nominated===!0);if(!n)return Qi();let i=typeof n.localCandidateId=="string"?e.get(n.localCandidateId):void 0,a=typeof n.remoteCandidateId=="string"?e.get(n.remoteCandidateId):void 0;return{localType:typeof i?.candidateType=="string"?i.candidateType:null,remoteType:typeof a?.candidateType=="string"?a.candidateType:null,protocol:typeof i?.protocol=="string"?i.protocol:typeof a?.protocol=="string"?a.protocol:null,remoteAddress:typeof a?.address=="string"?a.address:typeof a?.ip=="string"?a.ip:null,remotePort:typeof a?.port=="number"?a.port:null}}function Yi(s,e){let t=r=>{r&&typeof r=="object"&&e(r)};if(s instanceof Map)for(let[r,n]of s.entries()){if(!n||typeof n!="object")continue;let i=n;e(typeof i.id=="string"?i:{...i,id:r})}else(Array.isArray(s)||s&&typeof s.forEach=="function")&&s.forEach(t)}async function Hi(s){let e=Md();if(typeof s.getStats!="function")return e;let t;try{t=await s.getStats()}catch{return e}return Yi(t,n=>{if(n.type==="inbound-rtp"){let i=typeof n.bytesReceived=="number"?n.bytesReceived:0,a=typeof n.packetsReceived=="number"?n.packetsReceived:0;e.total+=i+a,typeof n.framesDecoded=="number"&&(e.framesDecoded=(e.framesDecoded??0)+n.framesDecoded),typeof n.jitter=="number"&&(e.jitter=e.jitter===null?n.jitter:Math.max(e.jitter,n.jitter));for(let o of Ki)typeof n[o]=="number"&&(e[o]=Ld.has(o)?e[o]===null?n[o]:Math.max(e[o],n[o]):(e[o]??0)+n[o])}}),e}function jd(s){if(!s||typeof s!="object")return;let e=s.epoch,t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:void 0}var Ji=require("y-websocket"),Ts=require("y-protocols/awareness"),ks=1;function Xi(s){let e=new URL(s);return`${e.protocol}//${e.host}/doc`}var Fd=2500,qd=3e4,$d=1e4,Ud=3;function Zi(s){let e=s.WebSocketPolyfill??globalThis.WebSocket;if(!e)throw new Error("[urun] no WebSocket implementation available for the yjs doc provider (browser global missing and no WebSocketPolyfill passed)");return(t,r,n)=>{let i=`${s.sessionId}/${t}`,a=typeof s.token=="function"?s.token:null,o=typeof s.token=="string"?s.token:void 0,c=s.maxBackoffTimeMs??Fd,l=s.dialTimeoutMs??qd,d=new Ji.WebsocketProvider(s.serverUrl,i,r,{awareness:n,params:{dsv:String(ks),...o?{token:o}:{}},WebSocketPolyfill:e,disableBc:!0,maxBackoffTime:c,resyncInterval:$d,connect:a===null}),p=!1,u=0,h=!1,m=L=>{h||(h=!0,console.error(`[urun] doc token refresh failed for room ${i} (redialing with previous token):`,L))},f=()=>{if(!a)return;let L=++u;try{let U=a();if(typeof U=="string"){d.params.token=U,h=!1;return}if(U&&typeof U.then=="function")return U.then(Me=>{L===u&&typeof Me=="string"&&(d.params.token=Me,h=!1)},Me=>{m(Me)})}catch(U){m(U)}},g={connected:!1,consecutiveFailures:0,lastCloseCode:null,lastCloseReason:null},_=new Set,v=!1,T=()=>{let L={...g};for(let U of[..._])U(L)},P=null,x=()=>{P!==null&&(clearTimeout(P),P=null)},D=()=>{x(),P=setTimeout(()=>{if(P=null,!p&&d.wsconnecting&&d.ws)try{d.ws.close()}catch{}},l)},$=null,V=()=>{$!==null&&(clearTimeout($),$=null)},te=()=>{V(),$=setTimeout(()=>{if($=null,!p&&d.shouldConnect&&!d.wsconnected&&!d.wsconnecting&&d.ws===null)try{d.connect()}catch(L){v||(v=!0,console.error(`[urun] doc connection redial threw for room ${i} (still retrying):`,L)),te()}},c+500)},ae=({status:L})=>{if(L==="connecting"){V(),D();return}if(L==="connected"){x(),V(),g={...g,connected:!0},T();return}g.connected&&(g={...g,connected:!1},T())},Ns=L=>{L&&(v&&(console.info(`[urun] doc connection recovered for room ${i}`),v=!1),g.consecutiveFailures!==0&&(g={...g,consecutiveFailures:0},T()))},js=L=>{x(),g={connected:!1,consecutiveFailures:g.consecutiveFailures+1,lastCloseCode:L?L.code:null,lastCloseReason:L&&L.reason?L.reason:null},!v&&g.consecutiveFailures>=Ud&&(v=!0,console.error(`[urun] doc connection failing for room ${i}: ${g.consecutiveFailures} consecutive failures (last close ${g.lastCloseCode===null?"by provider liveness reap":`code ${g.lastCloseCode}`}${g.lastCloseReason?`, reason "${g.lastCloseReason}"`:""}). Still retrying \u2014 the doc provider never gives up.`)),T(),f(),te()};d.on("status",ae),d.on("sync",Ns),d.on("connection-close",js),d.wsconnecting?D():d.wsconnected&&(g={...g,connected:!0});let Et=!1,Re=null;if(a!==null){let L=f();if(L){Et=!0;let U=()=>{Et&&(Et=!1,Re!==null&&(clearTimeout(Re),Re=null),p||d.connect())};Re=setTimeout(U,l),L.then(U)}else d.connect()}return{get awareness(){return d.awareness},get synced(){return d.synced},onSync(L){let U=Me=>L(Me);return d.on("sync",U),()=>d.off("sync",U)},onConnectionState(L){return _.add(L),L({...g}),()=>_.delete(L)},ensureConnected(){!d.wsconnected&&!Et&&d.connect()},destroy(){p=!0,Re!==null&&(clearTimeout(Re),Re=null),x(),V(),d.off("status",ae),d.off("sync",Ns),d.off("connection-close",js),_.clear(),d.destroy()}}}}var Cs=class{constructor(e,t,r){this._name=e;this._doc=t;this.awareness=r}_name;_doc;awareness;_inner=null;_innerUnsub=null;_innerStateUnsub=null;_syncHandlers=new Set;_stateHandlers=new Set;_lastState={connected:!1,consecutiveFailures:0,lastCloseCode:null,lastCloseReason:null};_destroyed=!1;get synced(){return this._inner?.synced??!1}get destroyed(){return this._destroyed}onSync(e){return this._syncHandlers.add(e),()=>this._syncHandlers.delete(e)}onConnectionState(e){return this._stateHandlers.add(e),e({...this._lastState}),()=>this._stateHandlers.delete(e)}attach(e){if(!this._destroyed){if(this._inner&&(this._innerUnsub?.(),this._innerUnsub=null,this._innerStateUnsub?.(),this._innerStateUnsub=null,this._inner.destroy(),this._inner=null),this._inner=e(this._name,this._doc,this.awareness),this._innerUnsub=this._inner.onSync(t=>{for(let r of[...this._syncHandlers])r(t)}),this._inner.onConnectionState)this._innerStateUnsub=this._inner.onConnectionState(t=>{this._lastState=t;for(let r of[...this._stateHandlers])r(t)});else{this._innerStateUnsub=null,this._lastState={connected:!0,consecutiveFailures:0,lastCloseCode:null,lastCloseReason:null};for(let t of[...this._stateHandlers])t({...this._lastState})}if(this._inner.synced)for(let t of[...this._syncHandlers])t(!0)}}ensureConnected(){this._inner?.ensureConnected?.()}destroy(){this._destroyed=!0,this._innerUnsub?.(),this._innerUnsub=null,this._innerStateUnsub?.(),this._innerStateUnsub=null,this._inner?.destroy(),this._inner=null,this._syncHandlers.clear(),this._stateHandlers.clear()}},yr=class{_target=null;_bridges=[];connect=(e,t,r)=>{let n=new Cs(e,t,r);return this._bridges.push(n),this._target&&n.attach(this._target),n};get connected(){return this._target!==null}setTarget(e){if(this._target!==e){this._target=e,this._bridges=this._bridges.filter(t=>!t.destroyed);for(let t of this._bridges)t.attach(e)}}};var Tt=kr(require("yjs"));function kt(s){if(s===null||typeof s!="object"||Array.isArray(s))return!1;let e=Object.getPrototypeOf(s);return e===Object.prototype||e===null}var br="$bytes";function Bd(s){return s instanceof Uint8Array||s instanceof ArrayBuffer}function zd(s){if(!kt(s))return!1;let e=Object.keys(s);return e.length===1&&e[0]===br&&typeof s[br]=="string"}function Wd(s){return s instanceof ArrayBuffer?new Uint8Array(s):s}function Hd(s){if(typeof Buffer<"u")return Buffer.from(s).toString("base64");let e="";for(let t=0;t<s.length;t++)e+=String.fromCharCode(s[t]);return btoa(e)}function Vd(s){if(typeof Buffer<"u")return new Uint8Array(Buffer.from(s,"base64"));let e=atob(s),t=new Uint8Array(e.length);for(let r=0;r<e.length;r++)t[r]=e.charCodeAt(r);return t}function Es(s){if(Bd(s))return{[br]:Hd(Wd(s))};if(Array.isArray(s))return s.map(Es);if(kt(s)){let e={};for(let[t,r]of Object.entries(s))e[t]=Es(r);return e}return s}function Ct(s){if(zd(s))return Vd(s[br]);if(Array.isArray(s))return s.map(Ct);if(kt(s)){let e={};for(let[t,r]of Object.entries(s))e[t]=Ct(r);return e}return s}var ea=Symbol("urun:doc:path-absent");function Gd(s,e){let t=e.split("."),r=s;for(let n of t){if(r===null||typeof r!="object"||!(n in r))return ea;r=r[n]}return r}function Kd(s,e){return s===e?!0:JSON.stringify(s)===JSON.stringify(e)}function Ps(s,e){for(let[t,r]of Object.entries(e))if(kt(r)){let n=s.get(t);if(!(n instanceof Tt.Map)){let i=n;n=new Tt.Map,s.set(t,n),kt(i)&&Ps(n,i)}Ps(n,r)}else{if(Kd(s.get(t),r))continue;s.set(t,r)}}var Qd=Symbol("urun:doc:local"),Sr=class{_doc=new Tt.Doc;_root=this._doc.getMap("session");_awareness=new Ts.Awareness(this._doc);_listeners=new Set;_key;_sessionId;_connection=null;_connUnsub=null;_synced;_syncWaiters=new Set;_texts=new Map;_observer=()=>this.notify();constructor(e,t,r){this._key=e,this._sessionId=t,this._root.observeDeep(this._observer),r?(this._connection=r(e,this._doc,this._awareness),this._synced=this._connection.synced,this._connUnsub=this._connection.onSync(n=>{n&&this._markSynced()}),this._synced&&this._markSynced()):this._synced=!0}get awareness(){return this._awareness}setSessionId(e){this._sessionId=e}get synced(){return this._synced}ensureConnected(){this._connection?.ensureConnected?.()}onConnectionState(e){return this._connection?.onConnectionState?this._connection.onConnectionState(e):(e({connected:!0,consecutiveFailures:0,lastCloseCode:null,lastCloseReason:null}),()=>{})}onSynced(e){return this._synced?(e(),()=>{}):(this._syncWaiters.add(e),()=>this._syncWaiters.delete(e))}set(e){e=Es(e),this.applyPatch(e)}get(e,t){let r=this.snapshot();if(!e)return Ct(r);let n=Gd(r,e);return n===ea?t:Ct(n)}on(e,t){return this._listeners.add(t),()=>this._listeners.delete(t)}text(e){let t=this._texts.get(e);return t||(t=new xs(this._doc.getText(`text:${e}`)),this._texts.set(e,t)),t}dispose(){this._root.unobserveDeep(this._observer),this._connUnsub?.(),this._connUnsub=null,this._connection?.destroy(),this._connection=null,this._listeners.clear(),this._syncWaiters.clear();for(let e of this._texts.values())e.dispose();this._texts.clear(),this._awareness.destroy(),this._doc.destroy()}_markSynced(){let e=[...this._syncWaiters];this._synced=!0,this._syncWaiters.clear();for(let t of e)t()}applyPatch(e){this._doc.transact(()=>{Ps(this._root,e)},Qd)}snapshot(){return this._root.toJSON()}notify(){let e=Ct(this.snapshot());for(let t of this._listeners)t(e)}},xs=class{constructor(e){this._ytext=e;this._observer=t=>{for(let r of t.delta)if(typeof r.insert=="string"&&r.insert.length>0){let n=r.insert;for(let i of this._delta)i(n)}},this._ytext.observe(this._observer)}_ytext;_delta=new Set;_observer;append(e){e.length!==0&&this._ytext.insert(this._ytext.length,e)}toString(){return this._ytext.toString()}get length(){return this._ytext.length}on(e,t){return this._delta.add(t),()=>this._delta.delete(t)}dispose(){this._ytext.unobserve(this._observer),this._delta.clear()}};function ta(s){return{get clientId(){return s.clientID},set(e){s.setLocalState(e)},setField(e,t){s.setLocalStateField(e,t)},getLocal(){return s.getLocalState()??null},getStates(){return s.getStates()},on(e,t){let r=()=>t(s.getStates());return s.on("change",r),r(),()=>s.off("change",r)}}}var Ds=500,Is=15e3,Ls=6;function Ms(s,e=Math.random){if(!Number.isFinite(s)||s<0)throw new Error(`[urun] computeBackoffDelay: attempt must be a non-negative number, got ${s}`);let t=Math.min(Is,Ds*2**s);return Math.round(e()*t)}function ra(s){if(s instanceof ue){let e=s.httpStatus;return e===408||e===429||e!==void 0&&e>=500}return s instanceof Error?s.name==="TypeError"||s.name==="TimeoutError"||s.name==="AbortError":!1}var sa=10,Yd=.5,Rr=sa;function na(){return Rr<1?!1:(Rr-=1,!0)}function ia(){Rr=Math.min(sa,Rr+Yd)}var Jd="session-api.prod.cloud.urun.sh",Xd=["https://session-api.use2.prod.cloud.urun.sh","https://session-api.usw2.prod.cloud.urun.sh"];function Cr(s){return s.trim().replace(/\/+$/,"")}function Zd(s,e){let t=[],r=n=>{if(!n)return;let i=Cr(n);i&&!t.includes(i)&&t.push(i)};r(s);for(let n of e??[])r(n);for(let n of Rl(s))r(n);return t}function el(s){if(typeof s!="string"||s.length===0)return null;let e=new Date(s);return Number.isFinite(e.getTime())?e:null}var tl=120,rl=1e3,sl=20,nl=5,il=500,fa=1e4,al=new Set([502,503,504]),ol=3,cl=50,aa=1e4;async function oa(s,e){let t=Date.now()+aa;for(;;){await Tr(cl);let r=await As(s);if(r)return r;if(Date.now()>=t)throw new ue(`[urun] session allocation at ${e} never got an access token: the wired getAccessToken resolved nothing within ${Math.round(aa/1e3)}s (no unauthenticated request was sent)`)}}function dl(s,e){if(!s)return null;try{let t=new URL(s),r=e?new URL(Cr(e)):null,n=t.pathname==="/api/sessions/create"||t.pathname==="/api/sessions/create/";return t.protocol!=="https:"||!n||!ll(t,r)?null:Cr(t.origin)}catch{return null}}function ll(s,e){return ca(s.hostname)&&(!e||ca(e.hostname))}function ca(s){let e=s.toLowerCase();return e==="urun.sh"||e.endsWith(".urun.sh")}async function ma(s){let e=Zd(s.baseUrl,s.fallbackUrls),t=null,r=e.length>1;for(let n=0;n<Ls;n++){for(let i of e)try{let a=await pl(i,s,{pollAttempts:tl,retryAfterLimitMs:r?rl:void 0});return ia(),a}catch(a){if(t=a instanceof Error?a:new Error(String(a)),t instanceof Se||t instanceof Le)throw t}if(!ra(t))break;if(n+1<Ls){if(!na())break;await Tr(Ms(n))}}throw t??new Error("[urun] session allocation failed")}async function pl(s,e,t){let r,n,i,a=s,o=0,c=new Set,l=Date.now()+t.pollAttempts*fa;for(let d=0;d<t.pollAttempts;d++){n=i??await As(e),i=void 0,e.getAccessToken&&!n&&(n=await oa(e,a));let p=!!r,u=Date.now(),h;if(r){let v=0;for(;;){let T=l-Date.now();if(T<=0)throw Os(a,!0);let P=Math.max(1,Math.min(sl,Math.floor(T/1e3)));u=Date.now();try{h=await fetch(`${a}/api/session-requests/${encodeURIComponent(r)}?wait_s=${P}`,{headers:da(e,n),signal:wl((P+nl)*1e3)})}catch(V){throw new Le(`[urun] session allocation poll failed at ${a}`,{cause:V})}if(!al.has(h.status))break;try{await h.body?.cancel()}catch(V){throw new Le(`[urun] session allocation poll response cleanup failed at ${a}`,{cause:V})}let x=Math.min(Is,Ds*2**v),D=Math.max(Math.ceil(x/2),Ms(v));v+=1;let $=Math.min(Math.max(ua(h,{},t.retryAfterLimitMs),D),Math.max(0,l-Date.now()));if($<=0)throw Os(a,!0);await Tr($)}}else h=await fetch(`${a}/api/sessions/create`,{method:"POST",redirect:"manual",headers:{...da(e,n),"Content-Type":"application/json","Idempotency-Key":e.idempotencyKey},body:JSON.stringify(ul(e))});if(!r&&(h.status===307||h.status===308)){let v=dl(h.headers.get("location"),a);if(v&&v!==a&&o<ol){o+=1,a=v;continue}throw new ue(`[urun] session create redirected from ${a} without a usable target`,{httpStatus:h.status})}let m=await hl(h);if(m.request_id)try{e.onRequest?.({requestId:m.request_id,baseUrl:a})}catch{}if(h.ok&&(m.status==="allocated"||!m.status&&!!m.session_id)&&!!m.session_id){let v=m.session_id,T=yl(m.ws_url,a,v,"gateway allocated session");return{baseUrl:a,sessionId:v,wsUrl:T,endsAt:el(m.ends_at),response:m}}if(h.status===202||m.status==="pending"||m.status==="queued"||m.queued){if(r=m.request_id||r,!r)throw new Error("[urun] gateway queued session without request_id");if(e.onAdmission)try{e.onAdmission(vl(m,r))}catch{}let v=Date.now()-u<il;p&&v&&await Tr(ua(h,m,t.retryAfterLimitMs));continue}if((h.status===401||h.status===403)&&e.getAccessToken){let v=n??"";c.add(v);let T=await As(e,{forceRefresh:!0,reason:"unauthorized"});if(T&&!c.has(T)){i=T;continue}if(T===void 0){let P=await oa(e,a);if(!c.has(P)){i=P;continue}}}let g=m.error_message||m.error_code||`HTTP ${h.status}`,_=p?Le:ue;throw new _(`[urun] session allocation failed at ${a}: ${g}`,{httpStatus:h.status})}throw Os(a,!!r)}function Os(s,e=!1){let t=e?Le:ue;return new t(`[urun] timed out waiting for session allocation at ${s}`)}function da(s,e){let t={"X-Tenant-Id":s.orgId,"X-Auth-Provider":s.authProvider||"default","X-User-Id":"anonymous"};return e&&(t.Authorization=`Bearer ${e}`),t}async function As(s,e){return s.getAccessToken?await s.getAccessToken(e)??void 0:s.jwt}function ul(s){let e=s.priority==="preempt";return{app:s.app,function:s.functionName,gpus:1,idempotency_key:s.idempotencyKey,...s.sessionKey&&!e?{logical_id:s.sessionKey}:{},...e?{priority:"preempt"}:{}}}async function hl(s){try{let e=await s.json();return e&&typeof e=="object"?e:{}}catch{return{}}}var fl=new Set(["capture-attested","no-portable-golden","portable-golden-release-mismatch","portable-golden-attestation-invalid"]);function ga(s){return typeof s=="object"&&s!==null&&!Array.isArray(s)}function la(s){return typeof s=="string"&&s.trim().length>0}function pa(s){return typeof s=="number"&&Number.isSafeInteger(s)&&s>0}function ml(s){return typeof s=="number"&&Number.isSafeInteger(s)&&s>=0}function gl(s){if(ga(s)&&!(!la(s.snapshot_id)||!la(s.snapshot_compat_key)||!pa(s.artifact_size_bytes)||!pa(s.durable_arena_bytes)||s.volatile_arena_bytes!==0||!ml(s.uncovered_weight_bytes)))return{snapshotId:s.snapshot_id,snapshotCompatKey:s.snapshot_compat_key,artifactSizeBytes:s.artifact_size_bytes,durableArenaBytes:s.durable_arena_bytes,volatileArenaBytes:0,uncoveredWeightBytes:s.uncovered_weight_bytes}}function _l(s){if(!ga(s)||s.schema!=="urun.runtime.wake.v1"||s.portability!=="portable"&&s.portability!=="none"||s.expected_wake_path!=="portable-golden-restore"&&s.expected_wake_path!=="cold-boot"||typeof s.reason_code!="string"||!fl.has(s.reason_code)||s.expectation_basis!=="snapshot-registry"||s.restore_observation!=="not-observed")return;let e=s.reason_code;if(s.portability==="portable"&&s.expected_wake_path==="portable-golden-restore"&&e==="capture-attested"){let t=gl(s.golden);return t?{schema:"urun.runtime.wake.v1",portability:"portable",expectedWakePath:"portable-golden-restore",reasonCode:e,expectationBasis:"snapshot-registry",restoreObservation:"not-observed",golden:t}:void 0}if(s.portability==="none"&&s.expected_wake_path==="cold-boot"&&e!=="capture-attested"&&s.golden===void 0)return{schema:"urun.runtime.wake.v1",portability:"none",expectedWakePath:"cold-boot",reasonCode:e,expectationBasis:"snapshot-registry",restoreObservation:"not-observed"}}function vl(s,e){let t={status:s.status==="queued"||s.queued?"queued":"pending",requestId:e};typeof s.queue_position=="number"&&typeof s.queue_depth=="number"&&(t.queue={position:s.queue_position,depth:s.queue_depth});let r=s.runtime_state;if(r==="unavailable"||r==="starting"||r==="busy"){t.runtime={state:r},typeof s.runtime_reason=="string"&&s.runtime_reason.length>0&&(t.runtime.reason=s.runtime_reason);let n=_l(s.runtime_wake);n&&(t.runtime.wake=n)}return t}function ua(s,e,t){let r=Number(s.headers.get("Retry-After")||""),n=Number(e.retry_after_seconds??r),i=t??fa;return Number.isFinite(n)&&n>0?Math.min(n*1e3,i):1e3}function Tr(s){return new Promise(e=>setTimeout(e,s))}function wl(s){let e=typeof AbortSignal<"u"?AbortSignal:void 0;return typeof e?.timeout=="function"?e.timeout(s):void 0}var Se=class extends Error{},Le=class extends ue{};function yl(s,e,t,r){if(!s)throw new Se(`[urun] ${r} ${t} without ws_url`);let n,i;try{n=new URL(s)}catch{throw new Se(r==="viewer-connect"?`[urun] viewer-connect returned no usable ws_url for ${t}`:`[urun] ${r} ${t} with non-absolute ws_url`)}try{i=new URL(Cr(e))}catch{throw new Se(`[urun] ${r} ${t} has invalid gateway base URL`)}let a=bl(i.hostname)&&i.protocol==="http:";if(!(a&&n.protocol==="ws:"||n.protocol==="wss:"))throw new Se(`[urun] ${r} ${t} with insecure ws_url`);if(!Sl(n,i,a))throw new Se(`[urun] ${r} ${t} with cross-origin ws_url`);return n.toString()}function bl(s){return s==="localhost"||s==="127.0.0.1"||s==="::1"||s.endsWith(".localhost")}function Sl(s,e,t){return!!(t||s.hostname===e.hostname&&s.port===e.port||ha(s.hostname)&&ha(e.hostname))}function ha(s){return s==="urun.sh"||s.endsWith(".urun.sh")}function Rl(s){try{return new URL(s).hostname!==Jd?[]:Xd}catch{return[]}}
3
+ `}});var ge=P(le=>{"use strict";var Pe=Mn(),Yo=On(),Jo=Wt();le.grammar=Jo;le.write=Yo;le.parse=Pe.parse;le.parseParams=Pe.parseParams;le.parseFmtpConfig=Pe.parseFmtpConfig;le.parsePayloads=Pe.parsePayloads;le.parseRemoteCandidates=Pe.parseRemoteCandidates;le.parseImageAttributes=Pe.parseImageAttributes;le.parseSimulcastStreamList=Pe.parseSimulcastStreamList});var xe=P(Jr=>{"use strict";Object.defineProperty(Jr,"__esModule",{value:!0});Jr.parse=Zo;var Xo=new RegExp("^[LS]([1-9]\\d{0,1})T([1-9]\\d{0,1})");function Zo(s){let e=Xo.exec(s??"");return e?{spatialLayers:Number(e[1]),temporalLayers:Number(e[2])}:{spatialLayers:1,temporalLayers:1}}});var Fn=P(ye=>{"use strict";Object.defineProperty(ye,"__esModule",{value:!0});ye.OfferMediaSection=ye.AnswerMediaSection=ye.MediaSection=void 0;var ec=ge(),Nn=Te(),lt=class{_mediaObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r}){if(this._mediaObject={type:"",port:0,protocol:"",payloads:"",rtp:[],fmtp:[]},e&&this.setIceParameters(e),t){this._mediaObject.candidates=[];for(let n of t){let i={foundation:n.foundation,component:1,ip:n.address??n.ip,port:n.port,priority:n.priority,transport:n.protocol,type:n.type};n.tcpType&&(i.tcptype=n.tcpType),this._mediaObject.candidates.push(i)}this._mediaObject.endOfCandidates="end-of-candidates",this._mediaObject.iceOptions="renomination"}r&&this.setDtlsRole(r.role)}get mid(){return String(this._mediaObject.mid)}get closed(){return this._mediaObject.port===0}getObject(){return this._mediaObject}setIceParameters(e){this._mediaObject.iceUfrag=e.usernameFragment,this._mediaObject.icePwd=e.password}pause(){this._mediaObject.direction="inactive"}disable(){this.pause()}close(){this.disable(),this._mediaObject.port=0,delete this._mediaObject.candidates,delete this._mediaObject.endOfCandidates,delete this._mediaObject.iceUfrag,delete this._mediaObject.icePwd,delete this._mediaObject.iceOptions,this._mediaObject.rtp=[],this._mediaObject.fmtp=[],delete this._mediaObject.rtcp,delete this._mediaObject.rtcpFb,delete this._mediaObject.ssrcs,delete this._mediaObject.ssrcGroups,delete this._mediaObject.simulcast,delete this._mediaObject.simulcast_03,delete this._mediaObject.rids,delete this._mediaObject.extmapAllowMixed}};ye.MediaSection=lt;var Xr=class extends lt{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:n,plainRtpParameters:i,offerMediaObject:a,offerRtpParameters:o,answerRtpParameters:c,codecOptions:l}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r}),this._mediaObject.mid=String(a.mid),this._mediaObject.type=a.type,this._mediaObject.protocol=a.protocol,i?(this._mediaObject.connection={ip:i.ip,version:i.ipVersion},this._mediaObject.port=i.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},this._mediaObject.port=7),a.type){case"audio":case"video":{this._mediaObject.direction="recvonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[];for(let d of c.codecs){let p={payload:d.payloadType,codec:jn(d),rate:d.clockRate};d.channels>1&&(p.encoding=d.channels),this._mediaObject.rtp.push(p);let u=Nn.clone(d.parameters)??{},h=Nn.clone(d.rtcpFeedback)??[];if(l){let{opusStereo:f,opusFec:g,opusDtx:_,opusMaxPlaybackRate:v,opusMaxAverageBitrate:S,opusPtime:x,opusNack:k,videoGoogleStartBitrate:D,videoGoogleMaxBitrate:j,videoGoogleMinBitrate:V}=l,G=o.codecs.find(ae=>ae.payloadType===d.payloadType);switch(d.mimeType.toLowerCase()){case"audio/opus":case"audio/multiopus":{f!==void 0&&(G.parameters["sprop-stereo"]=f?1:0,u.stereo=f?1:0),g!==void 0&&(G.parameters.useinbandfec=g?1:0,u.useinbandfec=g?1:0),_!==void 0&&(G.parameters.usedtx=_?1:0,u.usedtx=_?1:0),v!==void 0&&(u.maxplaybackrate=v),S!==void 0&&(u.maxaveragebitrate=S),x!==void 0&&(G.parameters.ptime=x,u.ptime=x),k||(G.rtcpFeedback=G.rtcpFeedback.filter(ae=>ae.type!=="nack"||ae.parameter),h=h.filter(ae=>ae.type!=="nack"||ae.parameter));break}case"video/vp8":case"video/vp9":case"video/h264":case"video/h265":case"video/av1":{D!==void 0&&(u["x-google-start-bitrate"]=D),j!==void 0&&(u["x-google-max-bitrate"]=j),V!==void 0&&(u["x-google-min-bitrate"]=V);break}}}let m={payload:d.payloadType,config:""};for(let f of Object.keys(u))m.config&&(m.config+=";"),m.config+=`${f}=${u[f]}`;m.config&&this._mediaObject.fmtp.push(m);for(let f of h)this._mediaObject.rtcpFb.push({payload:d.payloadType,type:f.type,subtype:f.parameter})}this._mediaObject.payloads=c.codecs.map(d=>d.payloadType).join(" "),this._mediaObject.ext=[];for(let d of c.headerExtensions)(a.ext??[]).some(u=>u.uri===d.uri)&&this._mediaObject.ext.push({uri:d.uri,value:d.id});if(a.extmapAllowMixed==="extmap-allow-mixed"&&(this._mediaObject.extmapAllowMixed="extmap-allow-mixed"),a.simulcast){this._mediaObject.simulcast={dir1:"recv",list1:a.simulcast.list1},this._mediaObject.rids=[];for(let d of a.rids??[])d.direction==="send"&&this._mediaObject.rids.push({id:d.id,direction:"recv"})}else if(a.simulcast_03){this._mediaObject.simulcast_03={value:a.simulcast_03.value.replace(/send/g,"recv")},this._mediaObject.rids=[];for(let d of a.rids??[])d.direction==="send"&&this._mediaObject.rids.push({id:d.id,direction:"recv"})}this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";break}case"application":{typeof a.sctpPort=="number"?(this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=n.port,this._mediaObject.maxMessageSize=n.maxMessageSize):a.sctpmap&&(this._mediaObject.payloads=String(n.port),this._mediaObject.sctpmap={app:"webrtc-datachannel",sctpmapNumber:n.port,maxMessageSize:n.maxMessageSize});break}}}setDtlsRole(e){switch(e){case"client":{this._mediaObject.setup="active";break}case"server":{this._mediaObject.setup="passive";break}case"auto":{this._mediaObject.setup="actpass";break}}}resume(){this._mediaObject.direction="recvonly"}muxSimulcastStreams(e){if(!this._mediaObject.simulcast?.list1)return;let t={};for(let i of e)i.rid&&(t[i.rid]=i);let r=this._mediaObject.simulcast.list1,n=ec.parseSimulcastStreamList(r);for(let i of n)for(let a of i)a.paused=!t[a.scid]?.active;this._mediaObject.simulcast.list1=n.map(i=>i.map(a=>`${a.paused?"~":""}${a.scid}`).join(",")).join(";")}};ye.AnswerMediaSection=Xr;var Zr=class extends lt{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:n,plainRtpParameters:i,mid:a,kind:o,offerRtpParameters:c,streamId:l,trackId:d}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r}),this._mediaObject.mid=String(a),this._mediaObject.type=o,i?(this._mediaObject.connection={ip:i.ip,version:i.ipVersion},this._mediaObject.protocol="RTP/AVP",this._mediaObject.port=i.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},n?this._mediaObject.protocol="UDP/DTLS/SCTP":this._mediaObject.protocol="UDP/TLS/RTP/SAVPF",this._mediaObject.port=7),this._mediaObject.extmapAllowMixed="extmap-allow-mixed",o){case"audio":case"video":{this._mediaObject.direction="sendonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[],this._mediaObject.msid=[{id:l,appdata:d}];for(let m of c.codecs){let f={payload:m.payloadType,codec:jn(m),rate:m.clockRate};m.channels>1&&(f.encoding=m.channels),this._mediaObject.rtp.push(f);let g={payload:m.payloadType,config:""};for(let _ of Object.keys(m.parameters??{}))g.config&&(g.config+=";"),g.config+=`${_}=${m.parameters[_]}`;g.config&&this._mediaObject.fmtp.push(g);for(let _ of m.rtcpFeedback)this._mediaObject.rtcpFb.push({payload:m.payloadType,type:_.type,subtype:_.parameter})}this._mediaObject.payloads=c.codecs.map(m=>m.payloadType).join(" "),this._mediaObject.ext=[];for(let m of c.headerExtensions)this._mediaObject.ext.push({uri:m.uri,value:m.id});this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";let p=c.encodings[0],u=p.ssrc,h=p.rtx?.ssrc;this._mediaObject.ssrcs=[],this._mediaObject.ssrcGroups=[],u&&c.rtcp.cname&&this._mediaObject.ssrcs.push({id:u,attribute:"cname",value:c.rtcp.cname}),h&&(c.rtcp.cname&&this._mediaObject.ssrcs.push({id:h,attribute:"cname",value:c.rtcp.cname}),u&&this._mediaObject.ssrcGroups.push({semantics:"FID",ssrcs:`${u} ${h}`}));break}case"application":{this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=n.port,this._mediaObject.maxMessageSize=n.maxMessageSize;break}}}setDtlsRole(e){this._mediaObject.setup="actpass"}resume(){this._mediaObject.direction="sendonly"}};ye.OfferMediaSection=Zr;function jn(s){let t=new RegExp("^(audio|video)/(.+)","i").exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");return t[2]}});var Ye=P(Gt=>{"use strict";Object.defineProperty(Gt,"__esModule",{value:!0});Gt.RemoteSdp=void 0;var tc=ge(),rc=B(),Ht=Fn(),sc=ts(),nc=["av1","h264"],Vt=new rc.Logger("RemoteSdp"),es=class{_iceParameters;_iceCandidates;_dtlsParameters;_sctpParameters;_plainRtpParameters;_mediaSections=[];_midToIndex=new Map;_firstMid;_sdpObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:n,plainRtpParameters:i}){if(this._iceParameters=e,this._iceCandidates=t,this._dtlsParameters=r,this._sctpParameters=n,this._plainRtpParameters=i,this._sdpObject={version:0,origin:{address:"0.0.0.0",ipVer:4,netType:"IN",sessionId:"10000",sessionVersion:0,username:`media-client-v${sc.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:""}]}i&&(this._sdpObject.origin.address=i.ip,this._sdpObject.origin.ipVer=i.ipVersion)}updateIceParameters(e){Vt.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){Vt.debug("updateDtlsRole() [role:%s]",e),this._dtlsParameters.role=e;for(let t of this._mediaSections)t.setDtlsRole(e)}setSessionExtmapAllowMixed(){Vt.debug("setSessionExtmapAllowMixed()"),this._sdpObject.extmapAllowMixed="extmap-allow-mixed"}getNextMediaSectionIdx(){for(let e=0;e<this._mediaSections.length;++e){let t=this._mediaSections[e];if(t.closed)return{idx:e,reuseMid:t.mid}}return{idx:this._mediaSections.length}}send({offerMediaObject:e,reuseMid:t,offerRtpParameters:r,answerRtpParameters:n,codecOptions:i}){let a=new Ht.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,offerMediaObject:e,offerRtpParameters:r,answerRtpParameters:n,codecOptions:i}),o=a.getObject();o.rtp.find(l=>nc.includes(l.codec.toLowerCase()))||(o.ext=o.ext?.filter(l=>l.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:n,trackId:i}){this.setSessionExtmapAllowMixed();let a=new Ht.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,mid:e,kind:t,offerRtpParameters:r,streamId:n,trackId:i}),o=this._mediaSections.find(c=>c.closed&&c.getObject().type===t);o?this.replaceMediaSection(a,o.mid):this.addMediaSection(a)}pauseMediaSection(e){this.findMediaSection(e).pause()}resumeSendingMediaSection(e){this.findMediaSection(e).resume()}resumeReceivingMediaSection(e){this.findMediaSection(e).resume()}disableMediaSection(e){this.findMediaSection(e).disable()}closeMediaSection(e){let t=this.findMediaSection(e);return e===this._firstMid?(Vt.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 Ht.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 Ht.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++,tc.write(this._sdpObject)}addMediaSection(e){this._firstMid||(this._firstMid=e.mid),this._mediaSections.push(e),this._midToIndex.set(e.mid,this._mediaSections.length-1),this._sdpObject.media.push(e.getObject()),this.regenerateBundleMids()}replaceMediaSection(e,t){if(typeof t=="string"){let r=this._midToIndex.get(t);if(r===void 0)throw new Error(`no media section found for reuseMid '${t}'`);let n=this._mediaSections[r];this._mediaSections[r]=e,this._midToIndex.delete(n.mid),this._midToIndex.set(e.mid,r),this._sdpObject.media[r]=e.getObject(),this.regenerateBundleMids()}else{let r=this._midToIndex.get(e.mid);if(r===void 0)throw new Error(`no media section found with mid '${e.mid}'`);this._mediaSections[r]=e,this._sdpObject.media[r]=e.getObject()}}findMediaSection(e){let t=this._midToIndex.get(e);if(t===void 0)throw new Error(`no media section found with mid '${e}'`);return this._mediaSections[t]}regenerateBundleMids(){this._dtlsParameters&&(this._sdpObject.groups[0].mids=this._mediaSections.filter(e=>!e.closed).map(e=>e.mid).join(" "))}};Gt.RemoteSdp=es});var Je=P(De=>{"use strict";Object.defineProperty(De,"__esModule",{value:!0});De.extractRtpCapabilities=ic;De.extractDtlsParameters=ac;De.getCname=oc;De.applyCodecParameters=cc;De.addHeaderExtension=dc;var $n=ge();function ic({sdpObject:s}){let e=new Map,t=new Map;for(let n of s.media){let i=n.type;switch(i){case"audio":case"video":break;default:continue}for(let a of n.rtp){let o={kind:i,mimeType:`${i}/${a.codec}`,preferredPayloadType:a.payload,clockRate:a.rate,channels:a.encoding,parameters:{},rtcpFeedback:[]};e.set(o.preferredPayloadType,o)}for(let a of n.fmtp??[]){let o=$n.parseParams(a.config),c=e.get(a.payload);c&&(o?.hasOwnProperty("profile-level-id")&&(o["profile-level-id"]=String(o["profile-level-id"])),c.parameters=o)}for(let a of n.rtcpFb??[]){let o={type:a.type,parameter:a.subtype};if(o.parameter||delete o.parameter,a.payload!=="*"){let c=e.get(Number(a.payload));if(!c)continue;c.rtcpFeedback.push(o)}else for(let c of e.values())c.kind===i&&!/.+\/rtx$/i.test(c.mimeType)&&c.rtcpFeedback.push(o)}for(let a of n.ext??[]){if(a["encrypt-uri"])continue;let o={kind:i,uri:a.uri,preferredId:a.value};t.set(o.preferredId,o)}}return{codecs:Array.from(e.values()),headerExtensions:Array.from(t.values())}}function ac({sdpObject:s}){let e=s.setup,t=s.fingerprint;if(!e||!t){let i=(s.media??[]).find(a=>a.port!==0);i&&(e=e??i.setup,t=t??i.fingerprint)}if(e){if(!t)throw new Error("no a=fingerprint found at SDP session or media level")}else throw new Error("no a=setup found at SDP session or media level");let 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 oc({offerMediaObject:s}){let e=(s.ssrcs??[]).find(t=>t.attribute==="cname");return e?e.value:""}function cc({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 i=e.fmtp.find(o=>o.payload===t.payloadType);i||(i={payload:t.payloadType,config:""},e.fmtp.push(i));let a=$n.parseParams(i.config);if(r==="audio/opus"){let o=t.parameters?.["sprop-stereo"];o!==void 0&&(a.stereo=Number(o)?1:0)}i.config="";for(let o of Object.keys(a))i.config&&(i.config+=";"),i.config+=`${o}=${a[o]}`}}function dc({offerMediaObject:s,headerExtensionUri:e,headerExtensionId:t}){s.ext||(s.ext=[]),s.ext.push({uri:e,value:t})}});var Xe=P(Kt=>{"use strict";Object.defineProperty(Kt,"__esModule",{value:!0});Kt.getRtpEncodings=lc;Kt.addLegacySimulcast=pc;function lc({offerMediaObject:s,codecs:e}){let t=new Set;for(let i of s.ssrcs??[]){let a=i.id;a&&t.add(a)}if(t.size===0)throw new Error("no a=ssrc lines found");let r=new Map;for(let i of s.ssrcGroups??[]){if(i.semantics!=="FID")continue;let a=i.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 i of t)r.set(i,void 0);let n=[];for(let[i,a]of r){let o={ssrc:i};a&&e.length>1&&(o.rtx={ssrc:a}),n.push(o)}return n}function pc({offerMediaObject:s,numStreams:e}){if(e<=1)throw new TypeError("numStreams must be greater than 1");let t=(s.ssrcs??[]).find(p=>p.attribute==="msid");if(!t)throw new Error("a=ssrc line with msid information not found");let[r,n]=t.value.split(" "),i=Number(t.id),a;(s.ssrcGroups??[]).some(p=>{if(p.semantics!=="FID")return!1;let u=p.ssrcs.split(/\s+/);return Number(u[0])===i?(a=Number(u[1]),!0):!1});let o=(s.ssrcs??[]).find(p=>p.attribute==="cname");if(!o)throw new Error("a=ssrc line with cname information not found");let c=o.value,l=[],d=[];for(let p=0;p<e;++p)l.push(i+p),a&&d.push(a+p);s.ssrcGroups=[],s.ssrcs=[],s.ssrcGroups.push({semantics:"SIM",ssrcs:l.join(" ")});for(let p of l)s.ssrcs.push({id:p,attribute:"cname",value:c}),s.ssrcs.push({id:p,attribute:"msid",value:`${r} ${n}`});for(let p=0;p<d.length;++p){let u=l[p],h=d[p];s.ssrcs.push({id:h,attribute:"cname",value:c}),s.ssrcs.push({id:h,attribute:"msid",value:`${r} ${n}`}),s.ssrcGroups.push({semantics:"FID",ssrcs:`${u} ${h}`})}}});var Ze=P(pt=>{"use strict";Object.defineProperty(pt,"__esModule",{value:!0});pt.addNackSupportForOpus=uc;pt.addHeaderExtensionSupport=hc;pt.getMsidStreamIdAndTrackId=fc;function uc(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 hc(s,e){let t,r=s.headerExtensions?.find(i=>i.uri===e.uri);if(r){if(r.kind===e.kind)return;t=r.preferredId}if(s.headerExtensions||(s.headerExtensions=[]),t===void 0){t=1;let i=new Set(s.headerExtensions.map(a=>a.preferredId));for(;i.has(t);)++t}let n={kind:e.kind,uri:e.uri,preferredId:t,preferredEncrypt:!1,direction:e.direction};s.headerExtensions.push(n)}function fc(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 zn=P(Qt=>{"use strict";Object.defineProperty(Qt,"__esModule",{value:!0});Qt.Chrome111=void 0;var pe=ge(),mc=Q(),gc=B(),ut=oe(),_c=X(),vc=xe(),wc=Ye(),ht=Je(),qn=Xe(),rs=Ze(),T=new gc.Logger("Chrome111"),Un="Chrome111",Bn={OS:65535,MIS:65535},ss=class s extends mc.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Un,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{T.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e,sendEncodings:[{scalabilityMode:"L3T3"}]});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let n=pe.parse(r.sdp);return s.getLocalRtpCapabilities(n)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(T.debug("getNativeSctpCapabilities()"),{numStreams:Bn})}}static getLocalRtpCapabilities(e,t=[]){let r=ht.extractRtpCapabilities({sdpObject:e});ut.validateAndNormalizeRtpCapabilities(r),rs.addNackSupportForOpus(r);for(let n of t)rs.addHeaderExtensionSupport(r,n);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:l}){super(),T.debug("constructor()"),this._direction=e,this._remoteSdp=new wc.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=l,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(T.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Un}close(){if(T.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),T.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),T.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});T.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();T.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:n,headerExtensionOptions:i,codec:a,onRtpSender:o}){if(this.assertNotClosed(),this.assertSendDirection(),T.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1){let x=1;for(let k of r){let D=k.scalabilityMode?(0,vc.parse)(k.scalabilityMode).temporalLayers:3;D>x&&(x=D)}r.forEach((k,D)=>{k.rid=`r${D}`,k.scalabilityMode=`L1T${x}`})}let c=this._remoteSdp.getNextMediaSectionIdx(),l=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});o&&o(l.sender);let d=await this._pc.createOffer(),p=pe.parse(d.sdp);p.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 h=s.getLocalRtpCapabilities(p,u),m=this._getSendExtendedRtpCapabilities(h),f=ut.getSendingRtpParameters(e.kind,m);f.codecs=ut.reduceCodecs(f.codecs,a);let g=ut.getSendingRemoteRtpParameters(e.kind,m);if(g.codecs=ut.reduceCodecs(g.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:p}),i?.absCaptureTime){let x=p.media[c.idx];ht.addHeaderExtension({offerMediaObject:x,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(k=>k.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:pe.write(p)}}T.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let _=l.mid;f.mid=_,p=pe.parse(this._pc.localDescription.sdp);let v=p.media[c.idx];if(f.rtcp.cname=ht.getCname({offerMediaObject:v}),f.msid=`${t??this._sendStream.id} ${e.id}`,!r)f.encodings=qn.getRtpEncodings({offerMediaObject:v,codecs:f.codecs});else if(r.length===1){let x=qn.getRtpEncodings({offerMediaObject:v,codecs:f.codecs});Object.assign(x[0],r[0]),f.encodings=x}else f.encodings=r;this._remoteSdp.send({offerMediaObject:v,reuseMid:c.reuseMid,offerRtpParameters:f,answerRtpParameters:g,codecOptions:n});let S={type:"answer",sdp:this._remoteSdp.getSdp()};return T.debug("send() | calling pc.setRemoteDescription() [answer:%o]",S),await this._pc.setRemoteDescription(S),this._mapMidTransceiver.set(_,l),{localId:_,rtpParameters:f,rtpSender:l.sender}}async stopSending(e){if(this.assertSendDirection(),T.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let n=await this._pc.createOffer();T.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),T.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();T.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),T.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();T.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?T.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):T.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),T.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();T.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let 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 n=r.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();T.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let 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%Bn.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),a=pe.parse(i.sdp),o=a.media.find(l=>l.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),T.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:l,rtpParameters:d,streamId:p}=o;T.debug("receive() [trackId:%s, kind:%s]",c,l);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:h}=rs.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:l,offerRtpParameters:d,streamId:p??h??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let o of e){let{trackId:c,onRtpReceiver:l}=o;if(l){let d=r.get(c),p=this._pc.getTransceivers().find(u=>u.mid===d);if(!p)throw new Error("transceiver not found");l(p.receiver)}}let i=await this._pc.createAnswer(),a=pe.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:l}=o,d=r.get(c),p=a.media.find(u=>String(u.mid)===d);ht.applyCodecParameters({offerRtpParameters:l,answerMediaObject:p})}i={type:"answer",sdp:pe.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),T.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let o of e){let{trackId:c}=o,l=r.get(c),d=this._pc.getTransceivers().find(p=>p.mid===l);if(d)this._mapMidTransceiver.set(l,d),t.push({localId:l,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){T.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();T.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){T.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();T.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){T.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();T.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,l={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};T.debug("receiveDataChannel() [options:%o]",l);let d=this._pc.createDataChannel(r,l);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let p={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",p),await this._pc.setRemoteDescription(p);let u=await this._pc.createAnswer(),h=pe.parse(u.sdp),m=h.media.find(f=>f.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:h}),u={type:"answer",sdp:pe.write(h)},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=pe.parse(this._pc.localDescription.sdp));let r=ht.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:r},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new _c.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')}};Qt.Chrome111=ss});var Vn=P(Yt=>{"use strict";Object.defineProperty(Yt,"__esModule",{value:!0});Yt.Chrome74=void 0;var Z=ge(),yc=B(),bc=Q(),ft=oe(),Sc=X(),Rc=xe(),Cc=Ye(),mt=Je(),ns=Xe(),is=Ze(),R=new yc.Logger("Chrome74"),Wn="Chrome74",Hn={OS:1024,MIS:1024},as=class s extends bc.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Wn,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{R.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let n=Z.parse(r.sdp);return s.getLocalRtpCapabilities(n)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(R.debug("getNativeSctpCapabilities()"),{numStreams:Hn})}}static getLocalRtpCapabilities(e,t=[]){let r=mt.extractRtpCapabilities({sdpObject:e});ft.validateAndNormalizeRtpCapabilities(r),is.addNackSupportForOpus(r);for(let n of t)is.addHeaderExtensionSupport(r,n);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:l}){super(),R.debug("constructor()"),this._direction=e,this._remoteSdp=new Cc.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=l,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(R.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Wn}close(){if(R.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),R.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),R.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});R.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:n,headerExtensionOptions:i,codec:a}){this.assertNotClosed(),this.assertSendDirection(),R.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((k,D)=>{k.rid=`r${D}`});let o=this._remoteSdp.getNextMediaSectionIdx(),c=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r}),l=await this._pc.createOffer(),d=Z.parse(l.sdp);d.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let p=[];p.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let u=s.getLocalRtpCapabilities(d,p),h=this._getSendExtendedRtpCapabilities(u),m=ft.getSendingRtpParameters(e.kind,h);m.codecs=ft.reduceCodecs(m.codecs,a);let f=ft.getSendingRemoteRtpParameters(e.kind,h);f.codecs=ft.reduceCodecs(f.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:d});let g=!1,_=(0,Rc.parse)((r??[{}])[0].scalabilityMode),v;r?.length===1&&_.spatialLayers>1&&m.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(R.debug("send() | enabling legacy simulcast for VP9 SVC"),g=!0,d=Z.parse(l.sdp),v=d.media[o.idx],ns.addLegacySimulcast({offerMediaObject:v,numStreams:_.spatialLayers}),l={type:"offer",sdp:Z.write(d)}),R.debug("send() | calling pc.setLocalDescription() [offer:%o]",l),i?.absCaptureTime&&(v=d.media[o.idx],mt.addHeaderExtension({offerMediaObject:v,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:f.headerExtensions.find(k=>k.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),l={type:"offer",sdp:Z.write(d)}),await this._pc.setLocalDescription(l);let S=c.mid;if(m.mid=S,d=Z.parse(this._pc.localDescription.sdp),v=d.media[o.idx],m.rtcp.cname=mt.getCname({offerMediaObject:v}),m.msid=`${t??this._sendStream.id} ${e.id}`,!r)m.encodings=ns.getRtpEncodings({offerMediaObject:v,codecs:m.codecs});else if(r.length===1){let k=ns.getRtpEncodings({offerMediaObject:v,codecs:m.codecs});Object.assign(k[0],r[0]),g&&(k=[k[0]]),m.encodings=k}else m.encodings=r;if(m.encodings.length>1&&(m.codecs[0].mimeType.toLowerCase()==="video/vp8"||m.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let k of m.encodings)k.scalabilityMode?k.scalabilityMode=`L1T${_.temporalLayers}`:k.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:v,reuseMid:o.reuseMid,offerRtpParameters:m,answerRtpParameters:f,codecOptions:n});let x={type:"answer",sdp:this._remoteSdp.getSdp()};return R.debug("send() | calling pc.setRemoteDescription() [answer:%o]",x),await this._pc.setRemoteDescription(x),this._mapMidTransceiver.set(S,c),{localId:S,rtpParameters:m,rtpSender:c.sender}}async stopSending(e){if(this.assertSendDirection(),R.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let n=await this._pc.createOffer();R.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),R.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();R.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),R.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();R.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?R.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):R.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),R.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();R.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let 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 n=r.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();R.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let 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%Hn.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),a=Z.parse(i.sdp),o=a.media.find(l=>l.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),R.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:l,rtpParameters:d,streamId:p}=o;R.debug("receive() [trackId:%s, kind:%s]",c,l);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:h}=is.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:l,offerRtpParameters:d,streamId:p??h??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);let i=await this._pc.createAnswer(),a=Z.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:l}=o,d=r.get(c),p=a.media.find(u=>String(u.mid)===d);mt.applyCodecParameters({offerRtpParameters:l,answerMediaObject:p})}i={type:"answer",sdp:Z.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),R.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let o of e){let{trackId:c}=o,l=r.get(c),d=this._pc.getTransceivers().find(p=>p.mid===l);if(d)this._mapMidTransceiver.set(l,d),t.push({localId:l,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){R.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){R.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){R.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,l={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};R.debug("receiveDataChannel() [options:%o]",l);let d=this._pc.createDataChannel(r,l);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let p={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",p),await this._pc.setRemoteDescription(p);let u=await this._pc.createAnswer(),h=Z.parse(u.sdp),m=h.media.find(f=>f.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:h}),u={type:"answer",sdp:Z.write(h)},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=Z.parse(this._pc.localDescription.sdp));let r=mt.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:r},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Sc.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')}};Yt.Chrome74=as});var Jn=P(Xt=>{"use strict";Object.defineProperty(Xt,"__esModule",{value:!0});Xt.Firefox120=void 0;var _e=ge(),Tc=Q(),kc=B(),Gn=X(),gt=oe(),Ec=xe(),Pc=Ye(),Jt=Je(),Kn=Xe(),xc=Ze(),E=new kc.Logger("Firefox120"),Qn="Firefox120",Yn={OS:16,MIS:2048},os=class s extends Tc.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Qn,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{E.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"}),r=document.createElement("canvas");r.getContext("2d");let i=r.captureStream().getVideoTracks()[0];try{t.addTransceiver("audio",{direction:e}),t.addTransceiver(i,{direction:e,sendEncodings:[{rid:"r0",maxBitrate:1e5},{rid:"r1",maxBitrate:5e5}]});let a=await t.createOffer();try{r.remove()}catch{}try{i.stop()}catch{}try{t.close()}catch{}t=void 0;let o=_e.parse(a.sdp);return s.getLocalRtpCapabilities(o)}catch(a){try{r.remove()}catch{}try{i.stop()}catch{}try{t?.close()}catch{}throw t=void 0,a}},getNativeSctpCapabilities:async()=>(E.debug("getNativeSctpCapabilities()"),{numStreams:Yn})}}static getLocalRtpCapabilities(e){let t=Jt.extractRtpCapabilities({sdpObject:e});return gt.validateAndNormalizeRtpCapabilities(t),t}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:l}){super(),E.debug("constructor()"),this._direction=e,this._remoteSdp=new Pc.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=l,this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(E.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Qn}close(){if(E.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){throw this.assertNotClosed(),new Gn.UnsupportedError("not supported")}async restartIce(e){if(this.assertNotClosed(),E.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});E.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();E.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:n,codec:i,onRtpSender:a}){this.assertNotClosed(),this.assertSendDirection(),E.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((v,S)=>{v.rid=`r${S}`});let o=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});a&&a(o.sender);let c=await this._pc.createOffer(),l=_e.parse(c.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let d=s.getLocalRtpCapabilities(l),p=this._getSendExtendedRtpCapabilities(d),u=gt.getSendingRtpParameters(e.kind,p);u.codecs=gt.reduceCodecs(u.codecs,i);let h=gt.getSendingRemoteRtpParameters(e.kind,p);h.codecs=gt.reduceCodecs(h.codecs,i),this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:l});let m=(0,Ec.parse)((r??[{}])[0].scalabilityMode);E.debug("send() | calling pc.setLocalDescription() [offer:%o]",c),await this._pc.setLocalDescription(c);let f=o.mid;u.mid=f,l=_e.parse(this._pc.localDescription.sdp);let g=l.media[l.media.length-1];if(u.rtcp.cname=Jt.getCname({offerMediaObject:g}),u.msid=`${t??this._sendStream.id} ${e.id}`,!r)u.encodings=Kn.getRtpEncodings({offerMediaObject:g,codecs:u.codecs});else if(r.length===1){let v=Kn.getRtpEncodings({offerMediaObject:g,codecs:u.codecs});Object.assign(v[0],r[0]),u.encodings=v}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 v of u.encodings)v.scalabilityMode?v.scalabilityMode=`L1T${m.temporalLayers}`:v.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:g,offerRtpParameters:u,answerRtpParameters:h,codecOptions:n});let _={type:"answer",sdp:this._remoteSdp.getSdp()};return E.debug("send() | calling pc.setRemoteDescription() [answer:%o]",_),await this._pc.setRemoteDescription(_),this._mapMidTransceiver.set(f,o),{localId:f,rtpParameters:u,rtpSender:o.sender}}async stopSending(e){if(this.assertSendDirection(),E.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated transceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.disableMediaSection(t.mid);let r=await this._pc.createOffer();E.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),E.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();E.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),E.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let r=await this._pc.createOffer();E.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?E.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):E.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),E.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated transceiver not found");let n=r.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();E.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),E.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();E.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};E.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Yn.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),a=_e.parse(i.sdp),o=a.media.find(l=>l.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:a}),E.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:l,rtpParameters:d,streamId:p}=o;E.debug("receive() [trackId:%s, kind:%s]",c,l);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:h}=xc.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:l,offerRtpParameters:d,streamId:p??h??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let o of e){let{trackId:c,onRtpReceiver:l}=o;if(l){let d=r.get(c),p=this._pc.getTransceivers().find(u=>u.mid===d);if(!p)throw new Error("transceiver not found");l(p.receiver)}}let i=await this._pc.createAnswer(),a=_e.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:l}=o,d=r.get(c),p=a.media.find(u=>String(u.mid)===d);Jt.applyCodecParameters({offerRtpParameters:l,answerMediaObject:p}),i={type:"answer",sdp:_e.write(a)}}this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:a}),E.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let o of e){let{trackId:c}=o,l=r.get(c),d=this._pc.getTransceivers().find(p=>p.mid===l);if(!d)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(l,d),t.push({localId:l,track:d.receiver.track,rtpReceiver:d.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){E.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();E.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){E.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();E.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){E.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();E.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,l={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};E.debug("receiveDataChannel() [options:%o]",l);let d=this._pc.createDataChannel(r,l);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let p={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",p),await this._pc.setRemoteDescription(p);let u=await this._pc.createAnswer(),h=_e.parse(u.sdp),m=h.media.find(f=>f.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:h}),u={type:"answer",sdp:_e.write(h)},E.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=_e.parse(this._pc.localDescription.sdp));let r=Jt.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:r},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Gn.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')}};Xt.Firefox120=os});var ti=P(Zt=>{"use strict";Object.defineProperty(Zt,"__esModule",{value:!0});Zt.Safari12=void 0;var ee=ge(),Dc=Q(),Ic=B(),_t=oe(),Lc=X(),Mc=xe(),Ac=Ye(),vt=Je(),Xn=Xe(),cs=Ze(),C=new Ic.Logger("Safari12"),Zn="Safari12",ei={OS:65535,MIS:65535},ds=class s extends Dc.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Zn,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{C.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let n=ee.parse(r.sdp);return s.getLocalRtpCapabilities(n)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(C.debug("getNativeSctpCapabilities()"),{numStreams:ei})}}static getLocalRtpCapabilities(e,t=[]){let r=vt.extractRtpCapabilities({sdpObject:e});_t.validateAndNormalizeRtpCapabilities(r),cs.addNackSupportForOpus(r);for(let n of t)cs.addHeaderExtensionSupport(r,n);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:l}){super(),C.debug("constructor()"),this._direction=e,this._remoteSdp=new Ac.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=l,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)}),this._pc.addEventListener("icecandidateerror",d=>{this.emit("@icecandidateerror",d)}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(C.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Zn}close(){if(C.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),C.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),C.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});C.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:n,headerExtensionOptions:i,codec:a,onRtpSender:o}){this.assertNotClosed(),this.assertSendDirection(),C.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t);let c=this._remoteSdp.getNextMediaSectionIdx(),l=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream]});o&&o(l.sender);let d=await this._pc.createOffer(),p=ee.parse(d.sdp);p.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 h=s.getLocalRtpCapabilities(p,u),m=this._getSendExtendedRtpCapabilities(h),f=_t.getSendingRtpParameters(e.kind,m);f.codecs=_t.reduceCodecs(f.codecs,a);let g=_t.getSendingRemoteRtpParameters(e.kind,m);g.codecs=_t.reduceCodecs(g.codecs,a);let _;this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:p});let v=(0,Mc.parse)((r??[{}])[0].scalabilityMode);r&&r.length>1&&(C.debug("send() | enabling legacy simulcast"),p=ee.parse(d.sdp),_=p.media[c.idx],Xn.addLegacySimulcast({offerMediaObject:_,numStreams:r.length}),d={type:"offer",sdp:ee.write(p)}),i?.absCaptureTime&&(_=p.media[c.idx],vt.addHeaderExtension({offerMediaObject:_,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(k=>k.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:ee.write(p)}),C.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let S=l.mid;if(f.mid=S,p=ee.parse(this._pc.localDescription.sdp),_=p.media[c.idx],f.rtcp.cname=vt.getCname({offerMediaObject:_}),f.msid=`${t??this._sendStream.id} ${e.id}`,f.encodings=Xn.getRtpEncodings({offerMediaObject:_,codecs:f.codecs}),r)for(let k=0;k<f.encodings.length;++k)r[k]&&Object.assign(f.encodings[k],r[k]);if(f.encodings.length>1&&(f.codecs[0].mimeType.toLowerCase()==="video/vp8"||f.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let k of f.encodings)k.scalabilityMode?k.scalabilityMode=`L1T${v.temporalLayers}`:k.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:_,reuseMid:c.reuseMid,offerRtpParameters:f,answerRtpParameters:g,codecOptions:n});let x={type:"answer",sdp:this._remoteSdp.getSdp()};return C.debug("send() | calling pc.setRemoteDescription() [answer:%o]",x),await this._pc.setRemoteDescription(x),this._mapMidTransceiver.set(S,l),{localId:S,rtpParameters:f,rtpSender:l.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;C.debug("stopSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let n=await this._pc.createOffer();C.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),C.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();C.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),C.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let r=await this._pc.createOffer();C.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let n={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?C.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):C.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),C.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();C.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),C.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let n=r.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();C.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};C.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};C.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%ei.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),a=ee.parse(i.sdp),o=a.media.find(l=>l.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),C.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:l,rtpParameters:d,streamId:p}=o;C.debug("receive() [trackId:%s, kind:%s]",c,l);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:h}=cs.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:l,offerRtpParameters:d,streamId:p??h??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let o of e){let{trackId:c,onRtpReceiver:l}=o;if(l){let d=r.get(c),p=this._pc.getTransceivers().find(u=>u.mid===d);if(!p)throw new Error("transceiver not found");l(p.receiver)}}let i=await this._pc.createAnswer(),a=ee.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:l}=o,d=r.get(c),p=a.media.find(u=>String(u.mid)===d);vt.applyCodecParameters({offerRtpParameters:l,answerMediaObject:p})}i={type:"answer",sdp:ee.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),C.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let o of e){let{trackId:c}=o,l=r.get(c),d=this._pc.getTransceivers().find(p=>p.mid===l);if(!d)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(l,d),t.push({localId:l,track:d.receiver.track,rtpReceiver:d.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){C.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){C.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){C.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,l={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};C.debug("receiveDataChannel() [options:%o]",l);let d=this._pc.createDataChannel(r,l);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let p={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",p),await this._pc.setRemoteDescription(p);let u=await this._pc.createAnswer(),h=ee.parse(u.sdp),m=h.media.find(f=>f.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:h}),u={type:"answer",sdp:ee.write(h)},C.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=ee.parse(this._pc.localDescription.sdp));let r=vt.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:r},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Lc.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')}};Zt.Safari12=ds});var ni=P(er=>{"use strict";Object.defineProperty(er,"__esModule",{value:!0});er.ReactNative106=void 0;var te=ge(),Oc=Q(),Nc=B(),wt=oe(),jc=X(),Fc=xe(),$c=Ye(),yt=Je(),ls=Xe(),ps=Ze(),b=new Nc.Logger("ReactNative106"),ri="ReactNative106",si={OS:65535,MIS:65535},us=class s extends Oc.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:ri,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{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 n=te.parse(r.sdp);return s.getLocalRtpCapabilities(n)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(b.debug("getNativeSctpCapabilities()"),{numStreams:si})}}static getLocalRtpCapabilities(e,t=[]){let r=yt.extractRtpCapabilities({sdpObject:e});wt.validateAndNormalizeRtpCapabilities(r),ps.addNackSupportForOpus(r);for(let n of t)ps.addHeaderExtensionSupport(r,n);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:l}){super(),b.debug("constructor()"),this._direction=e,this._remoteSdp=new $c.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=l,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(b.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return ri}close(){if(b.debug("close()"),!this._closed){this._closed=!0,this._sendStream.release(!1);try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),b.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),b.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});b.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:n,headerExtensionOptions:i,codec:a,onRtpSender:o}){this.assertNotClosed(),this.assertSendDirection(),b.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((D,j)=>{D.rid=`r${j}`});let c=this._remoteSdp.getNextMediaSectionIdx(),l=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});o&&o(l.sender);let d=await this._pc.createOffer(),p=te.parse(d.sdp);p.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 h=s.getLocalRtpCapabilities(p,u),m=this._getSendExtendedRtpCapabilities(h),f=wt.getSendingRtpParameters(e.kind,m);f.codecs=wt.reduceCodecs(f.codecs,a);let g=wt.getSendingRemoteRtpParameters(e.kind,m);g.codecs=wt.reduceCodecs(g.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:p});let _=!1,v=(0,Fc.parse)((r??[{}])[0].scalabilityMode),S;r?.length===1&&v.spatialLayers>1&&f.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(b.debug("send() | enabling legacy simulcast for VP9 SVC"),_=!0,p=te.parse(d.sdp),S=p.media[c.idx],ls.addLegacySimulcast({offerMediaObject:S,numStreams:v.spatialLayers}),d={type:"offer",sdp:te.write(p)}),i?.absCaptureTime&&(S=p.media[c.idx],yt.addHeaderExtension({offerMediaObject:S,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(D=>D.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:te.write(p)}),b.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let x=l.mid??void 0;if(x||b.warn("send() | missing transceiver.mid (bug in react-native-webrtc, using a workaround"),f.mid=x,p=te.parse(this._pc.localDescription.sdp),S=p.media[c.idx],f.rtcp.cname=yt.getCname({offerMediaObject:S}),f.msid=`${t??this._sendStream.id} ${e.id}`,!r)f.encodings=ls.getRtpEncodings({offerMediaObject:S,codecs:f.codecs});else if(r.length===1){let D=ls.getRtpEncodings({offerMediaObject:S,codecs:f.codecs});Object.assign(D[0],r[0]),_&&(D=[D[0]]),f.encodings=D}else f.encodings=r;if(f.encodings.length>1&&(f.codecs[0].mimeType.toLowerCase()==="video/vp8"||f.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let D of f.encodings)D.scalabilityMode?D.scalabilityMode=`L1T${v.temporalLayers}`:D.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:S,reuseMid:c.reuseMid,offerRtpParameters:f,answerRtpParameters:g,codecOptions:n});let k={type:"answer",sdp:this._remoteSdp.getSdp()};return b.debug("send() | calling pc.setRemoteDescription() [answer:%o]",k),await this._pc.setRemoteDescription(k),x||(x=l.mid,f.mid=x),this._mapMidTransceiver.set(x,l),{localId:x,rtpParameters:f,rtpSender:l.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;b.debug("stopSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let n=await this._pc.createOffer();b.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),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 n={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}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 n={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}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 n=r.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();b.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);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 n=r.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await r.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();b.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);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 i=await this._pc.createOffer(),a=te.parse(i.sdp),o=a.media.find(l=>l.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),b.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:l,rtpParameters:d,streamId:p}=o;b.debug("receive() [trackId:%s, kind:%s]",c,l);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:h}=ps.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:l,offerRtpParameters:d,streamId:p??h??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let o of e){let{trackId:c,onRtpReceiver:l}=o;if(l){let d=r.get(c),p=this._pc.getTransceivers().find(u=>u.mid===d);if(!p)throw new Error("transceiver not found");l(p.receiver)}}let i=await this._pc.createAnswer(),a=te.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:l}=o,d=r.get(c),p=a.media.find(u=>String(u.mid)===d);yt.applyCodecParameters({offerRtpParameters:l,answerMediaObject:p})}i={type:"answer",sdp:te.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),b.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let o of e){let{trackId:c}=o,l=r.get(c),d=this._pc.getTransceivers().find(p=>p.mid===l);if(d)this._mapMidTransceiver.set(l,d),t.push({localId:l,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){b.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};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 n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){b.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};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 n of e){b.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};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:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,l={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};b.debug("receiveDataChannel() [options:%o]",l);let d=this._pc.createDataChannel(r,l);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let p={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",p),await this._pc.setRemoteDescription(p);let u=await this._pc.createAnswer(),h=te.parse(u.sdp),m=h.media.find(f=>f.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:h}),u={type:"answer",sdp:te.write(h)},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=te.parse(this._pc.localDescription.sdp));let r=yt.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:r},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new jc.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')}};er.ReactNative106=us});var ci=P(et=>{"use strict";Object.defineProperty(et,"__esModule",{value:!0});et.Device=void 0;et.detectDevice=ii;et.detectDeviceAsync=ai;var qc=B(),Uc=Q(),be=X(),tr=Te(),Y=oe(),Bc=Pn(),zc=zn(),Wc=Vn(),Hc=Jn(),Vc=ti(),Gc=ni(),y=new qc.Logger("Device");function ii(s,e){return y.debug("detectDevice()"),!s&&typeof navigator=="object"&&(s=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),oi(s,e)}async function ai(s,e){return y.debug("detectDeviceAsync()"),!s&&typeof navigator=="object"&&(s=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),oi(s,e)}var hs=class s{_handlerFactory;_handlerName;_loaded=!1;_getSendExtendedRtpCapabilities;_recvRtpCapabilities;_sendRtpCapabilities;_canProduceByKind={audio:!1,video:!1};_sctpCapabilities;_observer=new Uc.EnhancedEventEmitter;static async factory({handlerName:e,handlerFactory:t}={}){if(y.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 be.UnsupportedError("device not supported");return new s({handlerName:e,handlerFactory:t})}constructor({handlerName:e,handlerFactory:t}={}){if(y.debug("constructor()"),e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(t)this._handlerFactory=t;else{if(e)y.debug("constructor() | handler given: %s",e);else if(e=ii(),e)y.debug("constructor() | detected handler: %s",e);else throw new be.UnsupportedError("device not supported");switch(e){case"Chrome111":{this._handlerFactory=zc.Chrome111.createFactory();break}case"Chrome74":{this._handlerFactory=Wc.Chrome74.createFactory();break}case"Firefox120":{this._handlerFactory=Hc.Firefox120.createFactory();break}case"Safari12":{this._handlerFactory=Vc.Safari12.createFactory();break}case"ReactNative106":{this._handlerFactory=Gc.ReactNative106.createFactory();break}default:throw new TypeError(`unknown handlerName "${e}"`)}}this._handlerName=this._handlerFactory.name}get handlerName(){return this._handlerName}get loaded(){return this._loaded}get rtpCapabilities(){return this.recvRtpCapabilities}get recvRtpCapabilities(){if(!this._loaded)throw new be.InvalidStateError("not loaded");return this._recvRtpCapabilities}get sendRtpCapabilities(){if(!this._loaded)throw new be.InvalidStateError("not loaded");return this._sendRtpCapabilities}get sctpCapabilities(){if(!this._loaded)throw new be.InvalidStateError("not loaded");return this._sctpCapabilities}get observer(){return this._observer}async load({routerRtpCapabilities:e,preferLocalCodecsOrder:t=!1}){if(y.debug("load() [routerRtpCapabilities:%o]",e),this._loaded)throw new be.InvalidStateError("already loaded");let r=tr.clone(e);Y.validateAndNormalizeRtpCapabilities(r);let{getNativeRtpCapabilities:n,getNativeSctpCapabilities:i}=this._handlerFactory,a=tr.clone(await n({direction:"recvonly"}));y.debug("load() | got native receiving RTP capabilities:%o",a),Y.validateAndNormalizeRtpCapabilities(a);let o=tr.clone(await n({direction:"sendonly"}));y.debug("load() | got native sending RTP capabilities:%o",o),Y.validateAndNormalizeRtpCapabilities(o),this._getSendExtendedRtpCapabilities=d=>tr.clone(Y.getExtendedRtpCapabilities(d,r,t));let c=Y.getExtendedRtpCapabilities(a,r,!1);this._recvRtpCapabilities=Y.getRecvRtpCapabilities(c),y.debug("load() | got receiving RTP capabilities:%o",this._recvRtpCapabilities),Y.validateAndNormalizeRtpCapabilities(this._recvRtpCapabilities);let l=Y.getExtendedRtpCapabilities(o,r,t);this._sendRtpCapabilities=Y.getSendRtpCapabilities(l),y.debug("load() | got sending RTP capabilities:%o",this._sendRtpCapabilities),Y.validateAndNormalizeRtpCapabilities(this._sendRtpCapabilities),this._canProduceByKind.audio=Y.canSend("audio",this._sendRtpCapabilities),this._canProduceByKind.video=Y.canSend("video",this._sendRtpCapabilities),this._sctpCapabilities=await i(),Y.validateSctpCapabilities(this._sctpCapabilities),y.debug("load() | got native SCTP capabilities:%o",this._sctpCapabilities),y.debug("load() succeeded"),this._loaded=!0}canProduce(e){if(this._loaded){if(e!=="audio"&&e!=="video")throw new TypeError(`invalid kind "${e}"`)}else throw new be.InvalidStateError("not loaded");return this._canProduceByKind[e]}createSendTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:l}){return y.debug("createSendTransport()"),this.createTransport({direction:"send",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:l})}createRecvTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:l}){return y.debug("createRecvTransport()"),this.createTransport({direction:"recv",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:l})}createTransport({direction:e,id:t,iceParameters:r,iceCandidates:n,dtlsParameters:i,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:l,appData:d}){if(this._loaded){if(typeof t!="string")throw new TypeError("missing id");if(typeof r!="object")throw new TypeError("missing iceParameters");if(Array.isArray(n)){if(typeof i!="object")throw new TypeError("missing dtlsParameters");if(a&&typeof a!="object")throw new TypeError("wrong sctpParameters");if(d&&typeof d!="object")throw new TypeError("if given, appData must be an object")}else throw new TypeError("missing iceCandidates")}else throw new be.InvalidStateError("not loaded");let p=new Bc.Transport({direction:e,id:t,iceParameters:r,iceCandidates:n,dtlsParameters:i,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:l,appData:d,handlerFactory:this._handlerFactory,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities,recvRtpCapabilities:this._recvRtpCapabilities,canProduceByKind:this._canProduceByKind});return this._observer.safeEmit("newtransport",p),p}};et.Device=hs;function oi(s,e){y.debug('detectDeviceImpl() [userAgent:"%s", userAgentData:%o]',s,e);let t=Kc(s,e);if(t){if(t>=111)return y.debug("detectDeviceImpl() | using Chrome111 handler"),"Chrome111";if(t>=74)return y.debug("detectDeviceImpl() | using Chrome74 handler"),"Chrome74";y.warn("detectDeviceImpl() | unsupported Chromium based browser/version");return}let r=Qc(s);if(r){if(r>=120)return y.debug("detectDeviceImpl() | using Firefox120 handler"),"Firefox120";y.warn("detectDeviceImpl() | unsupported Firefox browser/version");return}let n=Yc(s);if(n){if(n>=605)return y.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";y.warn("detectDeviceImpl() | unsupported desktop Safari browser/version");return}let i=Jc(s);if(i){if(i>=605)return y.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";y.warn("detectDeviceImpl() | unsupported iOS Safari based browser/version");return}if(bt()){if(typeof RTCPeerConnection<"u"&&typeof RTCRtpTransceiver<"u")return y.debug("detectDeviceImpl() | using ReactNative106 handler"),"ReactNative106";y.warn("detectDeviceImpl() | unsupported react-native-webrtc version without RTCPeerConnection or RTCRtpTransceiver, forgot to call registerGlobals() on it?");return}y.warn('detectDeviceImpl() | device not supported [userAgent:"%s", userAgentData:%o]',s,e)}function Kc(s,e){if(y.debug("getChromiumMajorVersion()"),rr(s,e)){y.debug("getChromiumMajorVersion() | this is iOS => undefined");return}if(bt()){y.debug("getChromiumMajorVersion() | this is React-Native => undefined");return}if(e){let n=(Array.isArray(e.brands)?e.brands:[]).find(i=>i.brand==="Chromium");if(n){let i=Number(n.version);return y.debug(`getChromiumMajorVersion() | Chromium major version based on NavigatorUAData => ${i}`),i}}let t=s?.match(/\b(?:Chrome|Chromium)\/(\w+)/i);if(t?.[1]){let r=Number(t[1]);return y.debug(`getChromiumMajorVersion() | Chromium major version based on User-Agent => ${r}`),r}y.debug("getChromiumMajorVersion() | this is not Chromium => undefined")}function Qc(s){if(y.debug("getFirefoxMajorVersion()"),rr(s)){y.debug("getFirefoxMajorVersion() | this is iOS => undefined");return}if(bt()){y.debug("getFirefoxMajorVersion() | this is React-Native => undefined");return}let e=s?.match(/\bFirefox\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return y.debug(`getFirefoxMajorVersion() | Firefox major version based on User-Agent => ${t}`),t}y.debug("getFirefoxMajorVersion() | this is not Firefox => undefined")}function Yc(s){if(y.debug("getMacOSWebKitMajorVersion()"),rr(s)){y.debug("getMacOSWebKitMajorVersion() | this is iOS => undefined");return}if(bt()){y.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))){y.debug("getMacOSWebKitMajorVersion() | this is not Safari => undefined");return}let t=s.match(/AppleWebKit\/(\w+)/i);if(t?.[1]){let r=Number(t[1]);return y.debug(`getMacOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${r}`),r}y.debug("getMacOSWebKitMajorVersion() | this is not WebKit => undefined")}function Jc(s){if(y.debug("getIOSWebKitMajorVersion()"),!rr(s)){y.debug("getIOSWebKitMajorVersion() | this is not iOS => undefined");return}if(bt()){y.debug("getIOSWebKitMajorVersion() | this is React-Native => undefined");return}let e=s?.match(/AppleWebKit\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return y.debug(`getIOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${t}`),t}y.debug("getIOSWebKitMajorVersion() | this is not WebKit => undefined")}function rr(s,e){return y.debug("isIOS()"),e?.platform==="iOS"?(y.debug("isIOS() | this is iOS based on NavigatorUAData.platform => true"),!0):e?.platform?(y.debug("isIOS() | this is not iOS based on NavigatorUAData.platform => false"),!1):s&&/iPad|iPhone|iPod/.test(s)?(y.debug("isIOS() | this is iOS based on User-Agent => true"),!0):typeof navigator=="object"&&navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1?(y.debug("isIOS() | this is iPadOS 13+ based on User-Agent => true"),!0):(y.debug("isIOS() | this is not iOS => false"),!1)}function bt(){return y.debug("isReactNative()"),typeof navigator=="object"&&navigator.product==="ReactNative"?(y.debug("isReactNative() | this is React-Native based on navigator.product"),!0):(y.debug("isReactNative() | this is not React-Native => false"),!1)}});var li=P(di=>{"use strict";var Ie=256,nr=[],sr;for(;Ie--;)nr[Ie]=(Ie+256).toString(16).substring(1);function Xc(){var s=0,e,t="";if(!sr||Ie+16>256){for(sr=Array(s=256);s--;)sr[s]=256*Math.random()|0;s=Ie=0}for(;s<16;s++)e=sr[Ie+s],s==6?t+=nr[e&15|64]:s==8?t+=nr[e&63|128]:t+=nr[e],s&1&&s>1&&s<11&&(t+="-");return Ie++,t}di.v4=Xc});var pi=P(ir=>{"use strict";Object.defineProperty(ir,"__esModule",{value:!0});ir.FakeEventTarget=void 0;var fs=class{listeners={};addEventListener(e,t,r){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof r=="object"&&r.once===!0}))}removeEventListener(e,t,r){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(n=>n.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new Error("invalid event object");let t=this.listeners[e.type];if(!t)return!0;for(let r of[...t]){try{r.callback.call(this,e)}catch(n){setTimeout(()=>{throw n},0)}r.once&&this.removeEventListener(e.type,r.callback)}return!e.defaultPrevented}};ir.FakeEventTarget=fs});var ui=P(ar=>{"use strict";Object.defineProperty(ar,"__esModule",{value:!0});ar.FakeEvent=void 0;var ms=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){}};ar.FakeEvent=ms});var hi=P(gs=>{"use strict";Object.defineProperty(gs,"__esModule",{value:!0});gs.clone=Zc;function Zc(s){if(s!==void 0)return Number.isNaN(s)?NaN:typeof structuredClone=="function"?structuredClone(s):JSON.parse(JSON.stringify(s))}});var mi=P(cr=>{"use strict";Object.defineProperty(cr,"__esModule",{value:!0});cr.FakeMediaStreamTrack=void 0;var fi=li(),ed=pi(),tt=ui(),or=hi(),_s=class s extends ed.FakeEventTarget{#m;#p;#u;#e;#r;#t;#s;#h;#n;#f;#i;#a=null;#o=null;#c=null;#d=null;#l=null;constructor({kind:e,id:t,label:r,contentHint:n,enabled:i,muted:a,readyState:o,capabilities:c,constraints:l,settings:d,data:p}){super(),this.#m=t??(0,fi.v4)(),this.#p=e,this.#u=r??"",this.#s=n??"",this.#r=i??!0,this.#t=a??!1,this.#e=o??"live",this.#h=c??{},this.#n=l??{},this.#f=d??{},this.#i=p??{}}get id(){return this.#m}get kind(){return this.#p}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 tt.FakeEvent("enabledchange"))}get muted(){return this.#t}get readyState(){return this.#e}get data(){return this.#i}set data(e){this.#i=e}get onmute(){return this.#a}set onmute(e){this.#a&&this.removeEventListener("mute",this.#a),this.#a=e,e&&this.addEventListener("mute",e)}get onunmute(){return this.#o}set onunmute(e){this.#o&&this.removeEventListener("unmute",this.#o),this.#o=e,e&&this.addEventListener("unmute",e)}get onended(){return this.#c}set onended(e){this.#c&&this.removeEventListener("ended",this.#c),this.#c=e,e&&this.addEventListener("ended",e)}get onenabledchange(){return this.#d}set onenabledchange(e){this.#d&&this.removeEventListener("enabledchange",this.#d),this.#d=e,e&&this.addEventListener("enabledchange",e)}get onstopped(){return this.#l}set onstopped(e){this.#l&&this.removeEventListener("stopped",this.#l),this.#l=e,e&&this.addEventListener("stopped",e)}addEventListener(e,t,r){super.addEventListener(e,t,r)}removeEventListener(e,t,r){super.removeEventListener(e,t,r)}stop(){this.#e!=="ended"&&(this.#e="ended",this.dispatchEvent(new tt.FakeEvent("stopped")))}clone({id:e,data:t}={}){return new s({id:e??(0,fi.v4)(),kind:this.#p,label:this.#u,contentHint:this.#s,enabled:this.#r,muted:this.#t,readyState:this.#e,capabilities:(0,or.clone)(this.#h),constraints:(0,or.clone)(this.#n),settings:(0,or.clone)(this.#f),data:t??(0,or.clone)(this.#i)})}getCapabilities(){return this.#h}getConstraints(){return this.#n}async applyConstraints(e={}){return this.#n=e,Promise.resolve()}getSettings(){return this.#f}remoteStop(){this.#e!=="ended"&&(this.#e="ended",this.dispatchEvent(new tt.FakeEvent("stopped")),this.dispatchEvent(new tt.FakeEvent("ended")))}remoteMute(){this.#t||(this.#t=!0,this.dispatchEvent(new tt.FakeEvent("mute")))}remoteUnmute(){this.#t&&(this.#t=!1,this.dispatchEvent(new tt.FakeEvent("unmute")))}};cr.FakeMediaStreamTrack=_s});var gi=P(dr=>{"use strict";Object.defineProperty(dr,"__esModule",{value:!0});dr.FakeEventTarget=void 0;var vs=class{listeners={};addEventListener(e,t,r){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof r=="object"&&r.once===!0}))}removeEventListener(e,t,r){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(n=>n.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new Error("invalid event object");let t=this.listeners[e.type];if(!t)return!0;for(let r of[...t]){try{r.callback.call(this,e)}catch(n){setTimeout(()=>{throw n},0)}r.once&&this.removeEventListener(e.type,r.callback)}return!e.defaultPrevented}};dr.FakeEventTarget=vs});var wi=P(pr=>{"use strict";Object.defineProperty(pr,"__esModule",{value:!0});pr.FakeHandler=void 0;var td=mi(),rd=Q(),sd=B(),rt=Te(),ws=oe(),vi=X(),nd=gi(),$=new sd.Logger("FakeHandler"),_i="FakeHandler",ys=class s extends rd.EnhancedEventEmitter{_closed=!1;_fakeParameters;_getSendExtendedRtpCapabilities;_cname=`CNAME-${rt.generateRandomNumber()}`;_defaultSendStreamId=`${rt.generateRandomNumber()}`;_transportReady=!1;_nextLocalId=1;_tracks=new Map;_nextSctpStreamId=0;static createFactory(e){return{name:_i,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 ws.validateAndNormalizeRtpCapabilities(t),t}constructor({getSendExtendedRtpCapabilities:e},t){super(),$.debug("constructor()"),this._getSendExtendedRtpCapabilities=e,this._fakeParameters=t}get name(){return _i}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:n,codec:i}){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=ws.getSendingRtpParameters(e.kind,o);c.codecs=ws.reduceCodecs(c.codecs,i);let l=c.codecs.some(p=>/.+\/rtx$/i.test(p.mimeType));c.mid=`mid-${rt.generateRandomNumber()}`,c.msid=`${t??"-"} ${e.id}`,r||(r=[{}]);for(let p of r)p.ssrc=rt.generateRandomNumber(),l&&(p.rtx={ssrc:rt.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 lr({id:this._nextSctpStreamId++,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:e.label,protocol:e.protocol}),r={streamId:this._nextSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits};return{dataChannel:t,sctpStreamParameters:r}}async receive(e){this.assertNotClosed();let t=[];for(let r of e){let{trackId:n,kind:i}=r;this._transportReady||await this.setupTransport({localDtlsRole:"client"}),$.debug("receive() [trackId:%s, kind:%s]",n,i);let a=this._nextLocalId++,o=new td.FakeMediaStreamTrack({kind:i});this._tracks.set(a,o),t.push({localId:String(a),track:o})}return t}async stopReceiving(e){if(!this._closed)for(let t of e)$.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 lr({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=rt.clone(this._fakeParameters.generateLocalDtlsParameters());e&&(r.role=e),this.emit("@connectionstatechange","connecting"),await new Promise((n,i)=>this.emit("@connect",{dtlsParameters:r},n,i)),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new vi.InvalidStateError("method called in a closed handler")}};pr.FakeHandler=ys;var lr=class extends nd.FakeEventTarget{_id;_negotiated=!0;_ordered;_maxPacketLifeTime;_maxRetransmits;_label;_protocol;_readyState="connecting";_bufferedAmount=0;_bufferedAmountLowThreshold=0;_binaryType="arraybuffer";_onopen=null;_onclosing=null;_onclose=null;_onmessage=null;_onbufferedamountlow=null;_onerror=null;constructor({id:e,ordered:t=!0,maxPacketLifeTime:r=null,maxRetransmits:n=null,label:i="",protocol:a=""}){super(),$.debug(`constructor() [id:${e}, ordered:${t}, maxPacketLifeTime:${r}, maxRetransmits:${n}, label:${i}, protocol:${a}`),this._id=e,this._ordered=t,this._maxPacketLifeTime=r,this._maxRetransmits=n,this._label=i,this._protocol=a}get id(){return this._id}get negotiated(){return this._negotiated}get ordered(){return this._ordered}get maxPacketLifeTime(){return this._maxPacketLifeTime}get maxRetransmits(){return this._maxRetransmits}get label(){return this._label}get protocol(){return this._protocol}get readyState(){return this._readyState}get bufferedAmount(){return this._bufferedAmount}get bufferedAmountLowThreshold(){return this._bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._bufferedAmountLowThreshold=e}get binaryType(){return this._binaryType}set binaryType(e){this._binaryType=e}get onopen(){return this._onopen}set onopen(e){this._onopen&&this.removeEventListener("open",this._onopen),this._onopen=e,e&&this.addEventListener("open",e)}get onclosing(){return this._onclosing}set onclosing(e){this._onclosing&&this.removeEventListener("closing",this._onclosing),this._onclosing=e,e&&this.addEventListener("closing",e)}get onclose(){return this._onclose}set onclose(e){this._onclose&&this.removeEventListener("close",this._onclose),this._onclose=e,e&&this.addEventListener("close",e)}get onmessage(){return this._onmessage}set onmessage(e){this._onmessage&&this.removeEventListener("message",this._onmessage),this._onmessage=e,e&&this.addEventListener("message",e)}get onbufferedamountlow(){return this._onbufferedamountlow}set onbufferedamountlow(e){this._onbufferedamountlow&&this.removeEventListener("bufferedamountlow",this._onbufferedamountlow),this._onbufferedamountlow=e,e&&this.addEventListener("bufferedamountlow",e)}get onerror(){return this._onerror}set onerror(e){this._onerror&&this.removeEventListener("error",this._onerror),this._onerror=e,e&&this.addEventListener("error",e)}addEventListener(e,t,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 vi.InvalidStateError("not open")}}});var yi=P(ie=>{"use strict";Object.defineProperty(ie,"__esModule",{value:!0});ie.generateRouterRtpCapabilities=id;ie.generateNativeRtpCapabilities=ad;ie.generateNativeSctpCapabilities=od;ie.generateLocalDtlsParameters=cd;ie.generateTransportRemoteParameters=dd;ie.generateProducerRemoteParameters=ld;ie.generateConsumerRemoteParameters=pd;ie.generateDataProducerRemoteParameters=ud;ie.generateDataConsumerRemoteParameters=hd;var W=Te();function J(){return String(W.generateRandomNumber())}function id(){return W.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 ad(){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 od(){return W.deepFreeze({numStreams:{OS:2048,MIS:2048}})}function cd(){return W.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 dd(){return{id:J(),iceParameters:W.deepFreeze({iceLite:!0,password:"yku5ej8nvfaor28lvtrabcx0wkrpkztz",usernameFragment:"h3hk1iz6qqlnqlne"}),iceCandidates:W.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:W.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:W.deepFreeze({port:5e3,OS:2048,MIS:2048,maxMessageSize:2e6})}}function ld(){return W.deepFreeze({id:J()})}function pd({id:s,codecMimeType:e}={}){switch(e){case"audio/opus":return{id:s??J(),producerId:J(),kind:"audio",rtpParameters:W.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??J(),producerId:J(),kind:"audio",rtpParameters:W.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??J(),producerId:J(),kind:"video",rtpParameters:W.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??J(),producerId:J(),kind:"video",rtpParameters:W.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 ud(){return W.deepFreeze({id:J()})}function hd({id:s}={}){return{id:s??J(),dataProducerId:J(),sctpStreamParameters:W.deepFreeze({streamId:666,maxPacketLifeTime:5e3,maxRetransmits:void 0})}}});var ts=P(A=>{"use strict";Object.defineProperty(A,"__esModule",{value:!0});A.debug=A.testFakeParameters=A.FakeHandler=A.enhancedEvents=A.ortc=A.parseScalabilityMode=A.detectDeviceAsync=A.detectDevice=A.Device=A.version=A.types=void 0;var fd=at();A.debug=fd.default;A.types=Ws();A.version="3.20.0";var bs=ci();Object.defineProperty(A,"Device",{enumerable:!0,get:function(){return bs.Device}});Object.defineProperty(A,"detectDevice",{enumerable:!0,get:function(){return bs.detectDevice}});Object.defineProperty(A,"detectDeviceAsync",{enumerable:!0,get:function(){return bs.detectDeviceAsync}});var md=xe();Object.defineProperty(A,"parseScalabilityMode",{enumerable:!0,get:function(){return md.parse}});A.ortc=oe();A.enhancedEvents=Q();var gd=wi();Object.defineProperty(A,"FakeHandler",{enumerable:!0,get:function(){return gd.FakeHandler}});A.testFakeParameters=yi()});var Si=P((vp,Ss)=>{"use strict";var _d=Object.prototype.hasOwnProperty,H="~";function St(){}Object.create&&(St.prototype=Object.create(null),new St().__proto__||(H=!1));function vd(s,e,t){this.fn=s,this.context=e,this.once=t||!1}function bi(s,e,t,r,n){if(typeof t!="function")throw new TypeError("The listener must be a function");var i=new vd(t,r||s,n),a=H?H+e:e;return s._events[a]?s._events[a].fn?s._events[a]=[s._events[a],i]:s._events[a].push(i):(s._events[a]=i,s._eventsCount++),s}function ur(s,e){--s._eventsCount===0?s._events=new St:delete s._events[e]}function q(){this._events=new St,this._eventsCount=0}q.prototype.eventNames=function(){var e=[],t,r;if(this._eventsCount===0)return e;for(r in t=this._events)_d.call(t,r)&&e.push(H?r.slice(1):r);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};q.prototype.listeners=function(e){var t=H?H+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var n=0,i=r.length,a=new Array(i);n<i;n++)a[n]=r[n].fn;return a};q.prototype.listenerCount=function(e){var t=H?H+e:e,r=this._events[t];return r?r.fn?1:r.length:0};q.prototype.emit=function(e,t,r,n,i,a){var o=H?H+e:e;if(!this._events[o])return!1;var c=this._events[o],l=arguments.length,d,p;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),l){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,r),!0;case 4:return c.fn.call(c.context,t,r,n),!0;case 5:return c.fn.call(c.context,t,r,n,i),!0;case 6:return c.fn.call(c.context,t,r,n,i,a),!0}for(p=1,d=new Array(l-1);p<l;p++)d[p-1]=arguments[p];c.fn.apply(c.context,d)}else{var u=c.length,h;for(p=0;p<u;p++)switch(c[p].once&&this.removeListener(e,c[p].fn,void 0,!0),l){case 1:c[p].fn.call(c[p].context);break;case 2:c[p].fn.call(c[p].context,t);break;case 3:c[p].fn.call(c[p].context,t,r);break;case 4:c[p].fn.call(c[p].context,t,r,n);break;default:if(!d)for(h=1,d=new Array(l-1);h<l;h++)d[h-1]=arguments[h];c[p].fn.apply(c[p].context,d)}}return!0};q.prototype.on=function(e,t,r){return bi(this,e,t,r,!1)};q.prototype.once=function(e,t,r){return bi(this,e,t,r,!0)};q.prototype.removeListener=function(e,t,r,n){var i=H?H+e:e;if(!this._events[i])return this;if(!t)return ur(this,i),this;var a=this._events[i];if(a.fn)a.fn===t&&(!n||a.once)&&(!r||a.context===r)&&ur(this,i);else{for(var o=0,c=[],l=a.length;o<l;o++)(a[o].fn!==t||n&&!a[o].once||r&&a[o].context!==r)&&c.push(a[o]);c.length?this._events[i]=c.length===1?c[0]:c:ur(this,i)}return this};q.prototype.removeAllListeners=function(e){var t;return e?(t=H?H+e:e,this._events[t]&&ur(this,t)):(this._events=new St,this._eventsCount=0),this};q.prototype.off=q.prototype.removeListener;q.prototype.addListener=q.prototype.on;q.prefixed=H;q.EventEmitter=q;typeof Ss<"u"&&(Ss.exports=q)});var Tl={};Sa(Tl,{ChannelMultiplexer:()=>st,DOC_SYNC_WIRE_CONTRACT_VERSION:()=>Ps,DeferredChannelMultiplexer:()=>hr,DeferredDocConnector:()=>br,LoopbackStreamData:()=>_r,SessionDocumentImpl:()=>Rr,TransportSession:()=>yr,allocateSession:()=>ma,createPresence:()=>ta,createWebsocketDocConnector:()=>Zi,deriveYjsServerUrl:()=>Xi,ensureNodeWebRTC:()=>gr,isNodeRuntime:()=>nt,nodeMediasoupHandlerName:()=>fr,nodeWebRTCUnavailableReason:()=>mr,streamDataLabel:()=>Gi,transportStreamData:()=>Di});module.exports=Ra(Tl);var Vi=Pr(ts());var Rs=Pr(Si(),1);var st=class{_handlers=new Map;_ws;_onMessage;_onOpen;_listeningForOpen=!1;_pendingSends=[];_disposed=!1;constructor(e){this._ws=e,this._onMessage=t=>{if(typeof t.data!="string")return;let r;try{r=JSON.parse(t.data)}catch{console.warn("[ChannelMultiplexer] Failed to parse WebSocket message as JSON");return}if(!r.channel)return;let n=this._handlers.get(r.channel);if(n)for(let i of n)i(r)},this._ws.addEventListener("message",this._onMessage),this._onOpen=()=>{this.flushPendingSends()}}on(e,t){let r=this._handlers.get(e);return r||(r=new Set,this._handlers.set(e,r)),r.add(t),()=>{r.delete(t),r.size===0&&this._handlers.delete(e)}}emit(e,t){if(this._disposed)return;let r=JSON.stringify({channel:e,...t});if(this._ws.readyState===WebSocket.OPEN){this._ws.send(r);return}this._ws.readyState===WebSocket.CONNECTING&&(this._pendingSends.push(r),this.listenForOpen())}dispose(){this._disposed=!0,this._pendingSends=[],this._handlers.clear(),this._ws.removeEventListener("message",this._onMessage),this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1}flushPendingSends(){if(this._disposed||this._ws.readyState!==WebSocket.OPEN)return;this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1;let e=this._pendingSends;this._pendingSends=[];for(let t of e)this._ws.send(t)}listenForOpen(){this._listeningForOpen||(this._listeningForOpen=!0,this._ws.addEventListener("open",this._onOpen))}},hr=class{_handlers=new Map;_pendingSends=[];_target=null;_targetUnsubscribes=[];_disposed=!1;setTarget(e){if(this._disposed)return;this.detachTarget(),this._target=e;for(let[r,n]of this._handlers)for(let i of n)this._targetUnsubscribes.push(e.on(r,i));let t=this._pendingSends;this._pendingSends=[];for(let r of t)e.emit(r.channel,r.data)}rewriteSessionChannels(e,t){if(e===t)return;let r=`session:${e}:`,n=`session:${t}:`,i=new Map;for(let[a,o]of this._handlers)i.set(a.startsWith(r)?n+a.slice(r.length):a,o);this._handlers=i,this._pendingSends=this._pendingSends.map(a=>({...a,channel:a.channel.startsWith(r)?n+a.channel.slice(r.length):a.channel}))}on(e,t){if(this._disposed)return()=>{};let r=this._handlers.get(e);r||(r=new Set,this._handlers.set(e,r)),r.add(t);let n=this._target?.on(e,t);return n&&this._targetUnsubscribes.push(n),()=>{r?.delete(t),r?.size===0&&this._handlers.delete(e),n?.(),n&&(this._targetUnsubscribes=this._targetUnsubscribes.filter(i=>i!==n))}}emit(e,t){if(!this._disposed){if(this._target){this._target.emit(e,t);return}this._pendingSends.push({channel:e,data:t})}}dispose(){this._disposed=!0,this._pendingSends=[],this._handlers.clear(),this.detachTarget()}detachTarget(){for(let e of this._targetUnsubscribes)e();this._targetUnsubscribes=[],this._target=null}};function nt(){return typeof window>"u"&&typeof process<"u"&&process.versions!=null&&process.versions.node!=null}function fr(){return nt()?"Chrome111":void 0}function mr(){return typeof globalThis.RTCPeerConnection<"u"?null:"the WebRTC peer globals (RTCPeerConnection) are not installed in this runtime"}function gr(){if(!nt())return Promise.resolve();throw new Error("[urun-sh/core] Node WebRTC transport is not available in the browser build. The browser uses native WebRTC/WebSocket globals; import the Node build to use the werift-backed transport.")}var Ri="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";function wd(s){let e=globalThis.crypto,t=new Uint8Array(s);if(e?.getRandomValues)return e.getRandomValues(t),t;for(let r=0;r<s;r++)t[r]=Math.floor(Math.random()*256);return t}function Ci(s=16){let e=wd(s),t="";for(let r=0;r<s;r++)t+=Ri[e[r]%Ri.length];return t}function Ti(s){return`stream:${s}`}var ki="urun-stream-v1";var Cs=1,ve={BINARY:0,TEXT:1,JSON:2,END:3},Ei=Symbol("urun:stream:end");function Pi(s){if(s===Ei)return Uint8Array.from([Cs,ve.END]);let e,t;s instanceof Uint8Array?(e=ve.BINARY,t=s):s instanceof ArrayBuffer?(e=ve.BINARY,t=new Uint8Array(s)):typeof s=="string"?(e=ve.TEXT,t=new TextEncoder().encode(s)):(e=ve.JSON,t=new TextEncoder().encode(JSON.stringify(s)));let r=new Uint8Array(2+t.length);return r[0]=Cs,r[1]=e,r.set(t,2),r}function xi(s){let e=s instanceof Uint8Array?s:new Uint8Array(s);if(e.length<2||e[0]!==Cs)throw new Error(`[urun] bad stream envelope (version=${e[0]}, len=${e.length})`);let t=e[1],r=e.subarray(2);switch(t){case ve.BINARY:return r.slice();case ve.TEXT:return new TextDecoder().decode(r);case ve.JSON:return JSON.parse(new TextDecoder().decode(r));case ve.END:return Ei;default:throw new Error(`[urun] unknown stream envelope KIND 0x${t.toString(16)}`)}}var _r=class{consumerId;_handlers=new Map;constructor(e="loopback"){this.consumerId=e}onData(e,t){let r=this._handlers.get(e);return r||(r=new Set,this._handlers.set(e,r)),r.add(t),()=>r.delete(t)}sendData(e,t,r={}){r.to&&(r.to,this.consumerId);for(let n of this._handlers.get(e)??[])n(t);return Promise.resolve()}};function Di(s){return{get consumerId(){return s.consumerId},onData(e,t){return s.onStreamData(e,t)},sendData(e,t,r){return s.sendStreamData(e,t,r)}}}var wr=15e3,vr=class extends Error{kind;stream;timeoutMs;constructor(e,t){let r=t?.timeoutMs??wr,n=t?.stream??e,i=n!==e?` "${n}"`:"";super(`[urun] SFU did not ack producer ${e}${i} within ${Math.round(r/1e3)}s \u2014 the server never replied to 'produce'. The runtime's inbound port for this stream is likely unadvertised (a cold or capacity-queued runtime), so the SFU has nothing to forward the track to; the published track never reached the runtime.`),this.name="ProduceAckTimeout",this.kind=e,this.stream=n,this.timeoutMs=r,Object.setPrototypeOf(this,new.target.prototype)}};var Rt=class extends Error{code="transport_session_mismatch";connectedSessionId;requestedSessionId;constructor(e,t){super(`[urun] cannot retarget a connected transport to a different session: this leg is live on ${e??"(unknown)"} but setConnection() asked for ${t} \u2014 disconnect() this leg first (or use a fresh session handle)`),this.name="TransportSessionMismatchError",this.connectedSessionId=e,this.requestedSessionId=t,Object.setPrototypeOf(this,new.target.prototype)}},ue=class extends Error{httpStatus;constructor(e,t){super(e),this.name="SessionAllocationError",this.httpStatus=t?.httpStatus,t?.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}};function Ii(s){if(!s)return!1;let e=typeof s=="string"?s:s.name;return e==="queued"||e==="unavailable"||e==="provisioning"}var Li=[1e3,2e3,4e3,8e3,3e4],Mi=5,yd=15e3,Ai=15e3,Oi=15e3,bd=2e3,Sd=6e3,Rd=2e3,Cd=300,Ni=4e3,Td=2,kd=750,Ed=3,ji=[1e3,2e3,4e3],Pd=15e3;function Gi(s){return`stream:${s}`}var Ts="--",xd=["video","audio"];function Fi(s){let e=s.lastIndexOf(Ts);if(e<=0)return;let t=s.slice(e+Ts.length);return xd.includes(t)?t:void 0}var Dd={queued:"queued",pending:"provisioning",allocating:"provisioning",provisioning:"provisioning",allocated:"connecting",connecting:"connecting",live:"live",running:"live",error:"error",failed:"error",rejected:"error",expired:"expired",cancelled:"ended",canceled:"ended",closed:"ended"};function it(s){return s==="error"||s==="ended"||s==="expired"}var $i=3,qi=4e3,Ui=[{urls:"stun:stun.l.google.com:19302"},{urls:"stun:stun1.l.google.com:19302"}];function Bi(s){if(!s)return;let e=/\/(?:ws\/)?rtc\/([^/?#]+)/.exec(s);if(e)try{return decodeURIComponent(e[1])}catch{return e[1]}}var yr=class{_state="disconnected";_sessionId=null;_tracks=new Map;_tracksByName=new Map;_options;_emitter=new Rs.default;_ws=null;_connectedUrl=null;_device=null;_mediaUnavailableReason=null;_mediaVerdictResolve;_mediaVerdict=new Promise(e=>{this._mediaVerdictResolve=e});_recvTransport=null;_sendTransport=null;_consumers=new Map;_audioProducer=null;_videoProducer=null;_publishedAudio=null;_publishedVideo=null;_pendingProduce=null;_multiplexer=null;_reconnectAttempts=0;_intentionalDisconnect=!1;_reconnectTimer=null;_cancelPendingDial=null;_stableResetTimer=null;_generation=0;_lastStartOptions;_resolveConnection=null;_recvIceRestartAttempts=0;_recvIceRestartTimer=null;_sendIceRestartAttempts=0;_sendIceRestartTimer=null;_phase={name:"idle"};_requestId;_liveReached=!1;_lastServerStatus;_endsAt=null;_forceResolveOnNextConnect=!1;_connectStartedAt;_wakingSince;_mediaProbeTimer=null;_statsTimer=null;_statsSampleInFlight=!1;_joinProbes=new Map;_decodeDeathHandled=!1;_selectedCandidatePair=Qi();_candidatePairDiagnosticEmitted=!1;_diagnosticSinkFailed=!1;_currentEpoch=0;_consumerId=null;_streamDataHandlers=new Map;_streamDataLane="sctp";_dataProducers=new Map;_dataProducerPromises=new Map;_dataConsumers=new Map;_pendingDataProduce=new Map;_sendTransportWaiters=[];get consumerId(){return this._consumerId===null&&(this._consumerId=Id()),this._consumerId}get state(){return this._state}get currentIncarnation(){return this._currentEpoch}get phase(){return this._phase}get isProducingMedia(){let e=t=>t!==null&&!t.closed&&!t.paused;return e(this._audioProducer)||e(this._videoProducer)}get endsAt(){return this._endsAt}setEndsAt(e){this._endsAt=e}_pastDeadline(){return this._endsAt!==null&&Date.now()>=this._endsAt.getTime()}get status(){let e={phase:this._phase.name,transportState:this._state};return this._sessionId&&(e.sessionId=this._sessionId),this._requestId&&(e.requestId=this._requestId),this._lastServerStatus!==void 0&&(e.lastServerStatus=this._lastServerStatus),this._connectStartedAt!==void 0&&(e.elapsedMs=Date.now()-this._connectStartedAt),this._endsAt!==null&&(e.endsAt=this._endsAt),this._phase.queue&&(e.queue=this._phase.queue),this._phase.runtime&&(e.runtime=this._phase.runtime),this._phase.wakingSince!==void 0&&(e.wakingSince=this._phase.wakingSince),this._phase.error&&(e.error=this._phase.error),e}get sessionId(){return this._sessionId}get tracks(){return this._tracks}get multiplexer(){return this._multiplexer}get isOpen(){return this._ws!==null&&this._ws.readyState===WebSocket.OPEN}get connectedUrl(){return this._connectedUrl}getTrackByName(e){if(Fi(e)!==void 0)return;let t=this._tracksByName.get(e);if(t&&t.readyState!=="ended")return t;for(let r of this._tracks.values())if(!(r.kind!==e||r.readyState==="ended")&&this._streamNameOf(r)===void 0)return r;return t}_streamNameOf(e){for(let[t,r]of this._tracksByName)if(r===e)return t}setAuth(e){this._options={...this._options,...e},this.isOpen&&this._send({type:"auth",orgId:this._options.orgId,jwt:this._options.jwt,authProvider:this._options.authProvider})}constructor(e){this._options=e??{url:""},e?.sessionId&&(this._sessionId=e.sessionId)}setConnection(e){if(this.isOpen){let t=Bi(e.url);if(e.sessionId!==void 0&&e.sessionId!==this._sessionId)throw new Rt(this._sessionId,e.sessionId);if(t!==void 0&&t!==this._sessionId)throw new Rt(this._sessionId,t);this._options={...this._options,...e};return}this._options={...this._options,...e},e.sessionId&&(this._sessionId=e.sessionId)}setConnectionResolver(e){this._resolveConnection=e}applyControlDocState(e){let t=e&&typeof e=="object"?e.session:void 0,r=jd(t);if(r!==void 0&&this.setIncarnation(r),!t||typeof t!="object")return;let n=t,i=typeof n.status=="string"?n.status:void 0;if(i&&!it(this._phase.name)&&!this.isStaleClosedMarker(n))if(i==="error"){let a=n.error_reason??n.errorReason,o=typeof a=="string"&&a?a:"session failed";this._setPhase("error",{error:{reason:o,code:"runtime-failed",kind:"runtime-failed"}})}else(i==="closed"||i==="ended")&&(this._pastDeadline()?this._setPhase("expired",{error:{reason:"session reached its maximum length",code:i,kind:"expired"}}):this._setPhase("ended"))}setIncarnation(e){if(!Number.isFinite(e)||e<=this._currentEpoch)return;let t=this._currentEpoch>0,r=this._state==="connected";this._currentEpoch=e,t&&r&&!this._intentionalDisconnect&&this._renegotiate()}isStaleIncarnation(e){return Number.isFinite(e)?e<this._currentEpoch:!1}isStaleClosedMarker(e){if(!e)return!1;let t=typeof e.status=="string"?e.status:void 0;if(t!=="closed"&&t!=="ended"&&t!=="error")return!1;let r=e.status_epoch??e.statusEpoch,n=typeof r=="number"?r:Number(r);return Number.isFinite(n)?n<this._currentEpoch:!1}async connect(e){if(this.isOpen&&this._state==="connected"&&!this._intentionalDisconnect){e!==void 0&&(this._lastStartOptions=e);return}this._lastStartOptions=e,this._intentionalDisconnect=!1,it(this._phase.name)&&(this._phase={name:"idle"}),this._connectStartedAt??=Date.now(),this._cancelPendingDial?.(new Error("TransportSession: connect superseded by a newer connect()"));let t=++this._generation,r=this._state==="reconnecting"||this._state==="renegotiating";r||this._setState("connecting");let n=null,i=()=>t!==this._generation||this._intentionalDisconnect,a=()=>{if(i())throw new Error("TransportSession: connect cancelled")},o=async()=>{for(let p of this._connectUrls()){a();try{return await this._connectOnce(p,t,e),!0}catch(u){n=u instanceof Error?u:new Error(String(u)),i()||this._cleanupSocket()}}return!1},c=this._forceResolveOnNextConnect&&this._resolveConnection!==null;this._forceResolveOnNextConnect=!1;let l=c?0:this._resolveConnection?Td:1;for(let p=0;p<l;p++)if(p>0&&(await zi(kd),a()),await o())return;if(this._resolveConnection)for(let p=0;p<Ed;p++){this._setState("reconnecting"),await zi(ji[Math.min(p,ji.length-1)]),a();try{let u=await this._resolveConnection();a(),this.setAuth({jwt:u.jwt??this._options.jwt,authProvider:this._options.authProvider,orgId:this._options.orgId}),this.setConnection({url:u.url,sessionId:u.sessionId,iceServers:u.iceServers??this._options.iceServers}),u.endsAt!==void 0&&(this._endsAt=u.endsAt)}catch(u){if(i())throw new Error("TransportSession: connect cancelled");n=u instanceof Error?u:new Error(String(u));continue}if(await o())return}if(i())throw n??new Error("TransportSession: connect cancelled");this._setState("failed");let d=n??new Error("TransportSession: connect failed");throw r||this._emitError(d),d}leaveLeg(){if(!this.isOpen)return!1;this._intentionalDisconnect=!0,this._stopMediaProbe(),this._stopStatsSampler(),this._clearRecvIceRestart(),this._clearSendIceRestart(),this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null);try{this._send({type:"leave"})}catch{}try{this._ws?.close()}catch{}return!0}disconnect(){this._generation+=1,this._intentionalDisconnect=!0,this._cancelPendingDial?.(new Error("TransportSession: connect cancelled by disconnect()")),this._stopMediaProbe(),this._stopStatsSampler(),this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null),this._clearReconnectBudgetReset(),this._reconnectAttempts=0;try{this._publishedAudio?.track.stop()}catch{}try{this._publishedVideo?.track.stop()}catch{}if(this._publishedAudio=null,this._publishedVideo=null,this._audioProducer){this._send({type:"stopAudio"});try{this._audioProducer.track?.stop()}catch{}try{this._audioProducer.close()}catch{}this._audioProducer=null}if(this._videoProducer){this._send({type:"stopVideo"});try{this._videoProducer.track?.stop()}catch{}try{this._videoProducer.close()}catch{}this._videoProducer=null}for(let e of this._consumers.values())try{e.close()}catch{}if(this._consumers.clear(),this._cleanupDataChannels(),this._settleSendTransportWaiters(null,new Error("[urun] sendStreamData: transport disconnected before the send transport arrived")),this._sendTransport){try{this._sendTransport.close()}catch{}this._sendTransport=null}if(this._recvTransport){try{this._recvTransport.close()}catch{}this._recvTransport=null}this._pendingProduce&&(clearTimeout(this._pendingProduce.timeoutId),this._pendingProduce.reject(new Error("TransportSession: disconnected")),this._pendingProduce=null),this._device=null,this._multiplexer&&(this._multiplexer.dispose(),this._multiplexer=null),this._cleanupSocket(),this._tracks.clear(),this._tracksByName.clear(),this._setState("disconnected"),this._liveReached=!1,this._setPhase("ended"),this._emitter.emit("disconnected")}on(e,t){return this._emitter.on(e,t),()=>{this._emitter.off(e,t)}}_emitDiagnostic(e){let t=this._options.diagnosticSink;if(t)try{t(e)}catch(r){this._diagnosticSinkFailed||(this._diagnosticSinkFailed=!0,console.warn(`[urun] diagnosticSink threw (${String(r instanceof Error?r.message:r)}) \u2014 further diagnostics ride only the structured 'diagnostic' event`))}else e.level==="debug"?console.debug(`[urun] ${e.message}`,e.detail??{}):console.warn(`[urun] ${e.message}`,e.detail??{});this._emitter.emit("diagnostic",e)}sendInput(e,t){this._send({type:"input",data:e,sequence:t})}sendSignal(e){this._send(e)}onSignal(e){return this.on("signal",e)}onStreamData(e,t){let r=this._streamDataHandlers.get(e);return r||(r=new Set,this._streamDataHandlers.set(e,r)),r.add(t),()=>{let n=this._streamDataHandlers.get(e);n?.delete(t),n&&n.size===0&&this._streamDataHandlers.delete(e)}}sendStreamData(e,t,r){try{this._requireMediaSupport("sendStreamData")}catch(n){return Promise.reject(n)}return this._ensureDataProducer(e).then(n=>{n.send(Pi(t))})}_awaitSendTransport(){return this._sendTransport?Promise.resolve(this._sendTransport):new Promise((e,t)=>{let r={resolve:i=>{clearTimeout(n),e(i)},reject:i=>{clearTimeout(n),t(i)}},n=setTimeout(()=>{let i=this._sendTransportWaiters.indexOf(r);i>=0&&this._sendTransportWaiters.splice(i,1),t(new Error(`[urun] sendStreamData: no send transport after ${Ai}ms (the server never offered createSendTransport \u2014 data-up produce is impossible on this leg)`))},Ai);this._sendTransportWaiters.push(r)})}_settleSendTransportWaiters(e,t){let r=this._sendTransportWaiters;this._sendTransportWaiters=[];for(let n of r)e?n.resolve(e):n.reject(t??new Error("TransportSession: disconnected"))}_ensureDataProducer(e){let t=this._dataProducers.get(e);if(t&&!t.closed)return Promise.resolve(t);let r=this._dataProducerPromises.get(e);if(r)return r;let n=this._awaitSendTransport().then(i=>i.produceData({label:Ti(e),protocol:ki,ordered:!0})).then(i=>this._awaitDataChannelOpen(i)).then(i=>(this._dataProducers.set(e,i),this._dataProducerPromises.delete(e),i)).catch(i=>{throw this._dataProducerPromises.delete(e),i});return this._dataProducerPromises.set(e,n),n}_awaitDataChannelOpen(e){if(e.closed)return Promise.reject(new Error("[urun] sendStreamData: DataProducer closed before its DataChannel opened"));let t=e.readyState;return t==="open"?Promise.resolve(e):t==="closing"||t==="closed"?Promise.reject(new Error(`[urun] sendStreamData: DataChannel is ${t} \u2014 cannot deliver data-up payloads`)):new Promise((r,n)=>{let i=()=>{l(),r(e)},a=p=>{d(new Error(`[urun] sendStreamData: DataChannel error before open: ${p.message}`))},o=()=>{l(),n(new Error("[urun] sendStreamData: DataProducer closed before its DataChannel opened"))},c=setTimeout(()=>{d(new Error(`[urun] sendStreamData: DataChannel not open after ${Oi}ms (the SCTP handshake never completed \u2014 data-up produce is impossible on this channel)`))},Oi),l=()=>{clearTimeout(c),e.off("open",i),e.off("error",a),e.observer.off("close",o)},d=p=>{l();try{e.close()}catch{}n(p)};e.on("open",i),e.on("error",a),e.observer.on("close",o)})}_dispatchStreamData(e,t){for(let r of this._streamDataHandlers.get(e)??[])r(t)}markStreamDataLaneQuic(){this._streamDataLane="quic"}dispatchQuicStreamData(e,t){this._dispatchStreamData(e,t)}raiseQuicStreamDataError(e){console.error(e.message),this._emitter.emit("error",e)}quicStreamDataLaneLost(e){if(this._streamDataLane!=="quic")return;this._streamDataLane="sctp";let t=[...this._streamDataHandlers.keys()];if(t.length===0)return;let r=new Error(`[urun] QUIC data lane lost mid-stream (${e}) \u2014 active named streams [${t.join(", ")}] resume over SCTP on the failover leg from now; envelopes in flight on the dead lane are gone (mid-stream-join semantics)`);console.error(r.message),this._emitter.emit("error",r)}_streamNameFromLabel(e){if(e)return e.startsWith("stream:")?e.slice(7):void 0}mediaUnavailableReason(){return this._mediaUnavailableReason}mediaAvailability(){return this._mediaVerdict}_requireMediaSupport(e){if(this._mediaUnavailableReason)throw new Error(`[urun-sh/core] ${e}: realtime media is unavailable in this process \u2014 ${this._mediaUnavailableReason}. This session joined in doc/KV-only mode (the media device was skipped); install the optional "werift" dependency to enable realtime media.`)}async addTrack(e,t){this._requireMediaSupport("addTrack"),await this._publishTrack(e,t)}async _publishTrack(e,t){let r=e.kind==="video",n=r?this._videoProducer:this._audioProducer;if(n&&!n.closed){if(n.track===e)return;await n.replaceTrack({track:e}),this._rememberPublishIntent(r,e,t);return}if(!this._sendTransport)throw new Error("TransportSession: send transport not ready");let i=await this._sendTransport.produce({track:e,...r?{}:{codecOptions:{opusStereo:!1,opusDtx:!1,opusFec:!1}},stopTracks:!1,...t?{appData:{name:t}}:{}});r?this._videoProducer=i:this._audioProducer=i,this._rememberPublishIntent(r,e,t)}_rememberPublishIntent(e,t,r){let n={track:t,...r!==void 0?{name:r}:{}};e?this._publishedVideo=n:this._publishedAudio=n}removeTrack(){if(this._publishedAudio=null,this._audioProducer){this._send({type:"stopAudio"});try{this._audioProducer.track?.stop()}catch{}this._audioProducer.close(),this._audioProducer=null}}async addVideoTrack(e,t){this._requireMediaSupport("addVideoTrack"),await this._publishTrack(e,t)}stopVideo(){if(this._publishedVideo=null,this._videoProducer){this._send({type:"stopVideo"});try{this._videoProducer.track?.stop()}catch{}this._videoProducer.close(),this._videoProducer=null}}requestDiagnostics(){this._send({type:"diagnostics"})}seekStream(e,t){this._send({type:"stream.seek",stream:e,target:t})}async _handleMessage(e){switch(e.type){case"routerRtpCapabilities":await this._onRouterCapabilities(e.rtpCapabilities);break;case"createWebRtcTransport":await this._onCreateRecvTransport(e);break;case"createSendTransport":await this._onCreateSendTransport(e);break;case"consume":await this._onConsume(e);break;case"consumerClosed":this._closeConsumer(e.consumerId);break;case"producerClosed":this._closeConsumersByProducer(e.producerId);break;case"consumerPaused":this._consumers.get(e.consumerId)?.pause();break;case"consumerResumed":this._consumers.get(e.consumerId)?.resume();break;case"iceRestarted":this._onIceRestarted(e);break;case"produced":if(this._pendingProduce){let t=this._pendingProduce;this._pendingProduce=null,clearTimeout(t.timeoutId),t.resolve(e.id)}break;case"dataProduced":{let t=e.label,r=t?this._pendingDataProduce.get(t):void 0;r&&t&&(this._pendingDataProduce.delete(t),r.resolve(e.id));break}case"consumeData":await this._onConsumeData(e);break;case"started":this._emitter.emit("started");break;case"status":this._onStatus(e);break;case"stream.seeked":this._onStreamSeeked(e);break;case"error":this._onServerError(e);break;default:this._emitter.emit("signal",e);break}}_onServerError(e){let t=typeof e.message=="string"?e.message:"signaling error",r=typeof e.code=="string"?e.code:void 0;if(/connect\(\) already called/i.test(t)){if(this._resolveConnection){this._generation++;let n=this._ws;this._ws=null;try{n?.close()}catch{}this._cleanupMedia(),this._forceResolveOnNextConnect=!0,this._renegotiate();return}this._setPhase("error",{error:{reason:t,code:"transport-consumed",kind:"transport-failed"}}),this._emitter.emit("error",new Error(t));return}if(r==="TRANSPORT_BIND_FAILED"){this._emitError(new Error(t),r);return}console.warn("[urun] signaling error from server:",t)}_onStreamSeeked(e){let t=typeof e.stream=="string"?e.stream:void 0;if(!t)return;let r=e.target,n=r==="live"?"live":typeof r=="number"?r:Number(r);this._emitter.emit("seeked",t,n)}_onStatus(e){let t=e.request_id??e.requestId;t&&(this._requestId=t);let r=typeof e.status=="string"?e.status:void 0,n=(r?Dd[r]:void 0)??"provisioning",i=it(n);if(this._liveReached&&!i||it(this._phase.name))return;r!==void 0&&(this._lastServerStatus=r);let a=e.queue_position??e.queuePosition,o=e.queue_depth??e.queueDepth,c=typeof a=="number"&&typeof o=="number";if(n==="expired"){let l=typeof e.reason=="string"&&e.reason?e.reason:this._endsAt!==null?"session reached its maximum length":"session expired";this._setPhase("expired",{error:{reason:l,code:r,kind:"expired"}});return}if(n==="error"){let l=typeof e.reason=="string"&&e.reason?e.reason:r??"admission failed";this._setPhase("error",{error:{reason:l,code:r,kind:r==="error"?"runtime-failed":"create-failed"}});return}if(n==="ended"){this._pastDeadline()?this._setPhase("expired",{error:{reason:"session reached its maximum length",code:r,kind:"expired"}}):this._setPhase("ended");return}if(n==="queued"){this._setPhase("queued",c?{queue:{position:a,depth:o}}:void 0);return}if(n==="connecting"){this._setPhase("connecting");return}this._setPhase("provisioning")}async _onRouterCapabilities(e){nt()&&await gr();let t=mr();if(t){this._mediaUnavailableReason=t,this._mediaVerdictResolve(t);return}this._mediaVerdictResolve(null);let r=fr(),n=new Vi.Device(r?{handlerName:r}:void 0);await n.load({routerRtpCapabilities:e}),this._device=n,this._send({type:"rtpCapabilities",rtpCapabilities:n.rtpCapabilities})}async _onCreateRecvTransport(e){this._device&&this._buildRecvTransport(e)}_buildRecvTransport(e){if(!this._device)return;let t=e.iceCandidates,r=this._device.createRecvTransport({id:e.id,iceParameters:e.iceParameters,iceCandidates:t,dtlsParameters:e.dtlsParameters,...e.sctpParameters?{sctpParameters:e.sctpParameters}:{},iceServers:this._options.iceServers??Ui});this._recvIceRestartAttempts=0,this._clearRecvIceRestart();let n=this._generation;r.on("connect",({dtlsParameters:i},a,o)=>{try{this._send({type:"connectTransport",transportId:r.id,dtlsParameters:i}),a()}catch(c){o(c)}}),r.on("connectionstatechange",i=>{if(n===this._generation){if(i==="connected"){this._clearRecvIceRestart(),this._recvIceRestartAttempts=0,this._reportSelectedCandidatePair(r);return}if(!(this._intentionalDisconnect&&i==="closed")&&(i==="failed"||i==="disconnected")){if(this._tryRestartRecvIce())return;i==="failed"&&this._emitError(new Error(`media transport ${i}`),i),this._renegotiate()}}}),this._recvTransport=r}async _reportSelectedCandidatePair(e){let t=null;if(typeof e.getStats=="function")try{t=await e.getStats()}catch{}if(this._recvTransport!==e||(this._selectedCandidatePair=Nd(t),this._candidatePairDiagnosticEmitted))return;let r=Object.values(this._selectedCandidatePair).some(n=>n!==null);r&&(this._candidatePairDiagnosticEmitted=!0),this._emitDiagnostic({level:r?"info":"debug",kind:"ice-candidate-pair",message:`selected ICE candidate pair: local=${this._selectedCandidatePair.localType??"unknown"} remote=${this._selectedCandidatePair.remoteType??"unknown"} protocol=${this._selectedCandidatePair.protocol??"unknown"} remote=${this._selectedCandidatePair.remoteAddress??"unknown"}:${this._selectedCandidatePair.remotePort??"unknown"}`,detail:{sessionId:this._options.sessionId,...this._selectedCandidatePair}})}_tryRestartRecvIce(){let e=this._recvTransport;return!e||e.closed?!1:this._recvIceRestartTimer?!0:this._recvIceRestartAttempts>=$i?!1:(this._recvIceRestartAttempts++,this._armRecvIceRestartWatchdog(),this._requestIceRestart(e.id),!0)}_trySendIceRestart(){let e=this._sendTransport;return!e||e.closed?!1:this._sendIceRestartTimer?!0:this._sendIceRestartAttempts>=$i?!1:(this._sendIceRestartAttempts++,this._armSendIceRestartWatchdog(),this._requestIceRestart(e.id),!0)}_requestIceRestart(e){this._send({type:"restartIce",transportId:e})}_onIceRestarted(e){let t=e.transportId??e.id,r=e.iceParameters;if(!r)return;let n=!!this._recvTransport&&this._recvTransport.id===t,i=!n&&!!this._sendTransport&&this._sendTransport.id===t,a=n?this._recvTransport:i?this._sendTransport:null;a&&(Promise.resolve(a.restartIce({iceParameters:r})).catch(o=>{this._emitter.emit("error",o instanceof Error?o:new Error(String(o)))}),n&&this._recvIceRestartTimer?this._armRecvIceRestartWatchdog():i&&this._sendIceRestartTimer&&this._armSendIceRestartWatchdog())}_armRecvIceRestartWatchdog(){this._clearRecvIceRestart();let e=this._generation;this._recvIceRestartTimer=setTimeout(()=>{this._recvIceRestartTimer=null,!(e!==this._generation||this._intentionalDisconnect)&&this._recvTransport?.connectionState!=="connected"&&(this._emitError(new Error("media transport failed (ice restart timeout)"),"failed"),this._renegotiate())},qi)}_armSendIceRestartWatchdog(){this._clearSendIceRestart();let e=this._generation;this._sendIceRestartTimer=setTimeout(()=>{this._sendIceRestartTimer=null,!(e!==this._generation||this._intentionalDisconnect)&&this._sendTransport?.connectionState!=="connected"&&this._emitError(new Error("media send transport failed (ice restart timeout)"),"failed")},qi)}_clearRecvIceRestart(){this._recvIceRestartTimer&&(clearTimeout(this._recvIceRestartTimer),this._recvIceRestartTimer=null)}_clearSendIceRestart(){this._sendIceRestartTimer&&(clearTimeout(this._sendIceRestartTimer),this._sendIceRestartTimer=null)}async _onCreateSendTransport(e){if(!this._device)return;let t=this._device.createSendTransport({id:e.id,iceParameters:e.iceParameters,iceCandidates:e.iceCandidates,dtlsParameters:e.dtlsParameters,...e.sctpParameters?{sctpParameters:e.sctpParameters}:{},iceServers:this._options.iceServers??Ui});this._sendIceRestartAttempts=0,this._clearSendIceRestart();let r=this._generation;t.on("connect",({dtlsParameters:n},i,a)=>{try{this._send({type:"connectSendTransport",transportId:t.id,dtlsParameters:n}),i()}catch(o){a(o)}}),t.on("produce",({kind:n,rtpParameters:i,appData:a},o,c)=>{if(this._pendingProduce){c(new Error("produce already pending"));return}let l=a&&typeof a.name=="string"?a.name:void 0,d=setTimeout(()=>{let p=this._pendingProduce;if(!p||p.timeoutId!==d)return;this._pendingProduce=null;let u=new vr(n,{stream:l,timeoutMs:wr});this._setPhase("error",{error:{reason:u.message,code:"produce-ack-timeout",kind:"produce-timeout"}}),this._emitter.emit("error",u),p.reject(u)},wr);this._pendingProduce={timeoutId:d,resolve:p=>{o({id:p})},reject:c};try{this._send(l?{type:"produce",kind:n,name:l,rtpParameters:i}:{type:"produce",kind:n,rtpParameters:i})}catch(p){this._pendingProduce?.timeoutId===d&&(this._pendingProduce=null,clearTimeout(d)),c(p)}}),t.on("producedata",({sctpStreamParameters:n,label:i,protocol:a},o,c)=>{try{i&&this._pendingDataProduce.set(i,{resolve:l=>o({id:l}),reject:c}),this._send({type:"produceData",sctpStreamParameters:n,label:i,protocol:a})}catch(l){i&&this._pendingDataProduce.delete(i),c(l)}}),t.on("connectionstatechange",n=>{if(r===this._generation){if(n==="connected"){this._clearSendIceRestart(),this._sendIceRestartAttempts=0;return}this._intentionalDisconnect&&n==="closed"||(n==="failed"||n==="disconnected")&&this._trySendIceRestart()||(n==="failed"||n==="closed")&&this._emitError(new Error(`media send transport ${n}`),n)}}),this._sendTransport=t,this._settleSendTransportWaiters(t),this._emitter.emit("audioTransportReady"),this._republishPublishedTracks()}async _republishPublishedTracks(){let e=this._publishedAudio;if(e&&e.track.readyState!=="ended"&&(!this._audioProducer||this._audioProducer.closed))try{await this.addTrack(e.track,e.name)}catch(r){console.warn("[urun] republish: mic re-produce after reconnect failed",r)}else e&&e.track.readyState==="ended"&&console.warn("[urun] republish: published mic track is ended \u2014 not republishing (device re-acquisition is the app/page-recovery pass)");let t=this._publishedVideo;if(t&&t.track.readyState!=="ended"&&(!this._videoProducer||this._videoProducer.closed))try{await this.addVideoTrack(t.track,t.name)}catch(r){console.warn("[urun] republish: camera re-produce after reconnect failed",r)}else t&&t.track.readyState==="ended"&&console.warn("[urun] republish: published camera track is ended \u2014 not republishing (device re-acquisition is the app/page-recovery pass)")}async _onConsumeData(e){if(this._streamDataLane==="quic"){this.raiseQuicStreamDataError(new Error(`[urun] consumeData (label=${String(e.label)}) pushed on a leg whose data lane is QUIC \u2014 refusing (one canonical data path per leg, contract urun-infra#1605)`));return}if(!this._recvTransport)return;let t=e.label,r=this._streamNameFromLabel(t);if(!r)return;let n=await this._recvTransport.consumeData({id:e.id,dataProducerId:e.dataProducerId,sctpStreamParameters:e.sctpStreamParameters,label:t,protocol:e.protocol});this._dataConsumers.set(r,n),n.on("message",o=>{try{let c=typeof o=="string"?new TextEncoder().encode(o):new Uint8Array(o);this._dispatchStreamData(r,xi(c))}catch(c){this._emitter.emit("error",c instanceof Error?c:new Error(String(c)))}});let i=!1,a=()=>{i||n.closed||(i=!0,this._send({type:"dataConsumerReady",id:e.id}))};n.readyState==="open"?a():n.on("open",a)}async _onConsume(e){if(!this._recvTransport)return;let t=this._generation,r=await this._recvTransport.consume({id:e.id,producerId:e.producerId,kind:e.kind,rtpParameters:e.rtpParameters});this._consumers.set(r.id,r),this._tracks.set(r.track.id,r.track),this._capJitterBuffer(r,r.kind==="video"?"video":"audio");let n=e.streamName??e.label;n&&this._tracksByName.set(n,r.track),r.track.addEventListener?.("unmute",()=>{t!==this._generation||this._intentionalDisconnect||this._isTerminalPhase()||this._liveReached||this._setPhase("live")},{once:!0}),this._emitter.emit("track",r.track);let i=r.id;r.track.addEventListener("ended",()=>{t!==this._generation||this._intentionalDisconnect||this._closeConsumer(i)},{once:!0}),this._send({type:"resumeConsumer",consumerId:r.id}),this._startMediaProbe(),this._startStatsSampler()}_jitterBufferTargetMs(e){if(e==="audio"){let t=this._options.audioPlayout?.jitterBufferTargetMs;return t===void 0?Cd:t}return this._options.videoPlayout?.jitterBufferTargetMs}_capJitterBuffer(e,t){let r=this._jitterBufferTargetMs(t);if(r===void 0)return;let n=t==="video"?"videoPlayout":"audioPlayout",i={mediaKind:t,transportId:this._recvTransport?.id??null};if(!Number.isFinite(r)){this._emitDiagnostic({level:"warning",kind:`${t}-jitter-buffer-invalid`,message:`${n}.jitterBufferTargetMs must be a finite number of milliseconds; got ${String(r)}. No jitter-buffer cap applied.`,detail:{consumerId:e.id,targetMs:String(r),...i}});return}if(r<=0)return;if(r>Ni){this._emitDiagnostic({level:"warning",kind:`${t}-jitter-buffer-invalid`,message:`${n}.jitterBufferTargetMs must be within the W3C jitterBufferTarget range 0-${Ni}ms; got ${r}. No jitter-buffer cap applied.`,detail:{consumerId:e.id,targetMs:r,...i}});return}let a=e.rtpReceiver;if(!a){this._emitDiagnostic({level:"debug",kind:`${t}-jitter-buffer-unsupported`,message:`${t} consumer exposes no RTCRtpReceiver (node/werift leg); no jitter-buffer cap applied.`,detail:{consumerId:e.id,targetMs:r,reason:"no-receiver",...i}});return}let o=[];if("jitterBufferTarget"in a&&(a.jitterBufferTarget=r,o.push("jitterBufferTarget")),"playoutDelayHint"in a&&(a.playoutDelayHint=r/1e3,o.push("playoutDelayHint")),o.length===0){this._emitDiagnostic({level:"debug",kind:`${t}-jitter-buffer-unsupported`,message:`${t==="audio"?"Audio":"Video"} receiver exposes neither jitterBufferTarget nor playoutDelayHint; standing ${t} playout delay is unbounded on this engine.`,detail:{consumerId:e.id,targetMs:r,...i}});return}this._emitDiagnostic({level:"debug",kind:`${t}-jitter-buffer-capped`,message:`${t==="audio"?"Audio":"Video"} receiver jitter buffer capped at ${r}ms.`,detail:{consumerId:e.id,targetMs:r,applied:o,...i}})}_closeConsumer(e){let t=this._consumers.get(e);if(!t)return;this._consumers.delete(e);let r=t.track;try{t.close()}catch{}if(r){this._tracks.delete(r.id);for(let[n,i]of this._tracksByName)i===r&&this._tracksByName.delete(n)}}_closeConsumersByProducer(e){for(let[t,r]of this._consumers)r.producerId===e&&this._closeConsumer(t)}_mediaPollMs(){let e=this._options.mediaLiveness?.pollMs;return e===void 0?bd:e}_firstFrameWindowMs(){let e=this._options.mediaLiveness?.stallTimeoutMs;return e===void 0?Sd:e}_startMediaProbe(){let e=this._mediaPollMs();if(e<=0||this._mediaProbeTimer)return;let t=this._generation;this._mediaProbeTimer=setInterval(()=>{t!==this._generation||this._intentionalDisconnect||this._isTerminalPhase()||this._sampleMediaArrival(t)},e)}_stopMediaProbe(){this._mediaProbeTimer&&(clearInterval(this._mediaProbeTimer),this._mediaProbeTimer=null)}_statsPollMs(){let e=this._options.sessionStats;if(!e)return 0;let t=e.pollMs;return t===void 0?Rd:Number.isFinite(t)&&t>0?t:0}_startStatsSampler(){let e=this._statsPollMs();if(e<=0||this._statsTimer)return;let t=this._generation;this._statsTimer=setInterval(()=>{t!==this._generation||this._intentionalDisconnect||this._isTerminalPhase()||this._statsSampleInFlight||(this._statsSampleInFlight=!0,this._sampleSessionStats(t).catch(r=>{try{this._emitter.emit("error",r instanceof Error?r:new Error(String(r)))}catch{}}).finally(()=>{this._statsSampleInFlight=!1}))},e)}_stopStatsSampler(){this._statsTimer&&(clearInterval(this._statsTimer),this._statsTimer=null),this._statsSampleInFlight=!1}_lanePairKey(e){let t=e.track,r=t?this._streamNameOf(t):void 0;if(r===void 0)return null;let n=Fi(r);return n===void 0?r:r.slice(0,r.length-Ts.length-n.length)}async _sampleSessionStats(e){if(this._consumers.size===0)return;let t=Array.from(this._consumers.values()),r=await Promise.all(t.map(async u=>({consumerId:u.id,kind:u.kind==="video"?"video":"audio",pairKey:this._lanePairKey(u),sample:await Hi(u)})));if(e!==this._generation||this._intentionalDisconnect||this._isTerminalPhase())return;let n=r.filter(u=>u.pairKey===null),i=r.filter(u=>u.pairKey!==null),a=null,o=r;if(i.length>0){let u=new Map;for(let f of i){let g=f.pairKey,_=u.get(g);_?_.push(f):u.set(g,[f])}let h=-1,m=-1;for(let[f,g]of u){let _=new Set(g.map(S=>S.kind)).size>=2?1:0,v=g.reduce((S,x)=>S+x.sample.total,0);(_>h||_===h&&v>m)&&(h=_,m=v,a=f,o=[...g,...n])}}let c=u=>{let h=null,m=-1;for(let{consumerId:f,kind:g,sample:_}of o)g===u&&_.total>m&&(m=_.total,h={consumerId:f,..._});return h},l=c("audio"),d=c("video"),p=d?.estimatedPlayoutTimestamp!=null&&l?.estimatedPlayoutTimestamp!=null?d.estimatedPlayoutTimestamp-l.estimatedPlayoutTimestamp:null;this._emitter.emit("stats",{timestamp:Date.now(),stream:a,avSyncMs:p,audio:l,video:d})}_resetJoinProbes(){this._joinProbes.clear(),this._decodeDeathHandled=!1}async _sampleMediaArrival(e){if(this._consumers.size===0)return;let t=Array.from(this._consumers.entries()),r=await Promise.all(t.map(async([o,c])=>[o,await Hi(c)]));if(e!==this._generation||this._intentionalDisconnect||this._isTerminalPhase())return;for(let o of this._joinProbes.keys())this._consumers.has(o)||this._joinProbes.delete(o);let n=Date.now();!this._liveReached&&r.some(([,o])=>o.total>0)&&this._setPhase("live");let i=null,a=!1;for(let[o,c]of r){if(c.total<=0){a=!0;continue}let l=this._joinProbes.get(o);if(l||(l={firstBytesAt:n,startSample:c,settled:!1},this._joinProbes.set(o,l)),!l.settled){if(c.framesDecoded===null){l.settled=!0;continue}if(c.framesDecoded>0){l.settled=!0;continue}if(n-l.firstBytesAt>=this._firstFrameWindowMs()){i??={id:o,probe:l,sample:c};continue}a=!0}}if(i&&!this._decodeDeathHandled){this._decodeDeathHandled=!0;let o=this._firstFrameWindowMs(),c=Od(i.probe.startSample,i.sample),l=c.lossPct!==null&&c.lossPct>=5?" \u2014 consistent with network packet loss between the SFU and this browser":"";this._emitDiagnostic({level:"warning",kind:"decode-wall",message:`video is arriving but the decoder never produced its first frame within ${o/1e3}s of join (framesDecoded still 0) \u2014 no keyframe to start from${l}; re-consuming the stream`,detail:{sessionId:this._options.sessionId,consumerId:i.id,firstFrameWindowMs:o,inboundTotal:i.sample.total,framesDecoded:i.sample.framesDecoded,...Ad(i.sample),...c,likelyCause:c.lossPct!==null&&c.lossPct>=5?"network-packet-loss":null,...this._selectedCandidatePair}}),this._renegotiate();return}!a&&!i&&this._stopMediaProbe()}_renegotiate(){this._intentionalDisconnect||this._isTerminalPhase()||this._reconnectTimer||(this._stopMediaProbe(),this._stopStatsSampler(),this._setState("renegotiating"),this._attemptReconnect())}recover(){if(this._intentionalDisconnect||this._isTerminalPhase()||this._connectStartedAt===void 0||this._cancelPendingDial)return;if(!this.isOpen){this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null),this._reconnectAttempts=0,this._attemptReconnect(void 0,!0);return}let e=this._recvTransport?.connectionState;(e==="disconnected"||e==="failed")&&(this._recvIceRestartTimer||(this._recvIceRestartAttempts=0),this._tryRestartRecvIce()||this._renegotiate());let t=this._sendTransport?.connectionState;(t==="disconnected"||t==="failed")&&(this._sendIceRestartTimer||(this._sendIceRestartAttempts=0),this._trySendIceRestart())}_attemptReconnect(e,t=!1){if(this._intentionalDisconnect||this._isTerminalPhase()||this._reconnectTimer)return;if(this._reconnectAttempts>=Mi){this._setState("failed"),this._emitError(new Error(`Failed after ${Mi} attempts`));return}let r=t?0:Li[Math.min(this._reconnectAttempts,Li.length-1)];this._reconnectAttempts++,this._state!=="renegotiating"&&this._setState("reconnecting"),this._reconnectTimer=setTimeout(async()=>{this._reconnectTimer=null,this._replaceCurrentLegForReconnect();try{await this.connect(e??this._lastStartOptions)}catch(n){if(n instanceof Error&&n.message==="TransportSession: connect cancelled")return;this._attemptReconnect(e)}},r)}_connectUrls(){let e=[],t=r=>{if(!r)return;let n=Bi(r)!==void 0,i=this._sessionId&&!n?`${r}${r.includes("?")?"&":"?"}sessionId=${encodeURIComponent(this._sessionId)}`:r;e.includes(i)||e.push(i)};t(this._options.url);for(let r of this._options.fallbackUrls??[])t(r);return e}_connectOnce(e,t,r){return new Promise((n,i)=>{let a=!1,o=!1,c=null,l=new WebSocket(e);this._ws=l;let d=()=>this._ws!==l||t!==this._generation,p=h=>{o||(o=!0,c&&clearTimeout(c),this._cancelPendingDial===u&&(this._cancelPendingDial=null),i(h))},u=h=>{try{l.close()}catch{}p(h)};this._cancelPendingDial=u,c=setTimeout(()=>{try{l.close()}catch{}p(new Error("TransportSession: connect timed out"))},yd),l.onopen=()=>{if(!o){if(d()){try{l.close()}catch{}p(new Error("TransportSession: connect superseded during dial"));return}a=!0,c&&clearTimeout(c),this._connectedUrl=e,this._multiplexer=new st(l),l.send(JSON.stringify(this._startMessage(r))),this._scheduleReconnectBudgetReset(),this._setState("connected"),this._liveReached||this._setPhase("connecting"),this._emitter.emit("connected"),o=!0,this._cancelPendingDial===u&&(this._cancelPendingDial=null),n()}},l.onerror=()=>{a||p(new Error("WebSocket connection error"))},l.onclose=()=>{if(!a){p(new Error("WebSocket closed before connecting"));return}if(!d()&&(this._clearReconnectBudgetReset(),c&&clearTimeout(c),this._setState("disconnected"),!this._intentionalDisconnect)){if(this._pastDeadline()&&!it(this._phase.name)){this._setPhase("expired",{error:{reason:"session reached its maximum length",kind:"expired"}}),this._emitter.emit("disconnected");return}this._emitter.emit("disconnected"),!this._isTerminalPhase()&&this._attemptReconnect(r)}},l.onmessage=h=>{if(!(this._ws!==l||t!==this._generation)&&typeof h.data=="string")try{this._handleMessage(JSON.parse(h.data)).catch(m=>{this._emitter.emit("error",m instanceof Error?m:new Error(String(m)))})}catch(m){this._emitter.emit("error",m instanceof Error?m:new Error(String(m)))}}})}_startMessage(e){let t={type:"start",video:e?.video??{width:854,height:480,frameRate:16}};return e?.prompt&&(t.prompt=e.prompt),e?.cameraControl&&(t.camera_control=e.cameraControl),e?.args&&(t.args=e.args),e?.app&&(t.app=e.app),e?.functionName&&(t.function=e.functionName),e?.role&&(t.role=e.role),this._options.orgId&&(t.orgId=this._options.orgId),this._options.jwt&&(t.jwt=this._options.jwt),this._options.authProvider&&(t.authProvider=this._options.authProvider),t}_cleanupSocket(){if(this._clearReconnectBudgetReset(),!this._ws)return;let e=this._ws;this._ws=null,e.onopen=null,e.onmessage=null,e.onerror=null,e.onclose=null;try{e.close()}catch{}}_replaceCurrentLegForReconnect(){this._cleanupSocket(),this._cancelPendingDial?.(new Error("TransportSession: reconnect replacing current dial")),this._cleanupMedia()}_scheduleReconnectBudgetReset(){this._clearReconnectBudgetReset(),this._reconnectAttempts!==0&&(this._stableResetTimer=setTimeout(()=>{this._stableResetTimer=null,this._reconnectAttempts=0},Pd))}_clearReconnectBudgetReset(){this._stableResetTimer&&(clearTimeout(this._stableResetTimer),this._stableResetTimer=null)}_cleanupDataChannels(){for(let e of this._dataProducers.values())try{e.close()}catch{}this._dataProducers.clear(),this._dataProducerPromises.clear();for(let e of this._dataConsumers.values())try{e.close()}catch{}this._dataConsumers.clear();for(let e of this._pendingDataProduce.values())try{e.reject(new Error("TransportSession: disconnected"))}catch{}this._pendingDataProduce.clear()}_cleanupMedia(){this._stopMediaProbe(),this._stopStatsSampler(),this._resetJoinProbes();for(let e of this._consumers.values())try{e.close()}catch{}if(this._consumers.clear(),this._cleanupDataChannels(),this._audioProducer){try{this._audioProducer.close()}catch{}this._audioProducer=null}if(this._videoProducer){try{this._videoProducer.close()}catch{}this._videoProducer=null}if(this._clearRecvIceRestart(),this._clearSendIceRestart(),this._recvTransport){try{this._recvTransport.close()}catch{}this._recvTransport=null}if(this._sendTransport){try{this._sendTransport.close()}catch{}this._sendTransport=null}this._pendingProduce&&(clearTimeout(this._pendingProduce.timeoutId),this._pendingProduce=null),this._device=null,this._tracks.clear(),this._tracksByName.clear(),this._multiplexer&&(this._multiplexer.dispose(),this._multiplexer=null)}_send(e){!this._ws||this._ws.readyState!==WebSocket.OPEN||this._ws.send(JSON.stringify(e))}_setState(e){this._state!==e&&(this._state=e,this._emitter.emit("stateChange",e))}_isTerminalPhase(){return this._phase.name==="ended"||this._phase.name==="expired"?!0:this._phase.name!=="error"?!1:this._phase.error?.kind!=="transport-failed"}_setPhase(e,t){e==="live"&&(this._liveReached=!0);let r={name:e};t?.queue&&(r.queue=t.queue),t?.runtime&&(r.runtime=t.runtime),Ii(e)?(this._wakingSince??=Date.now(),r.wakingSince=this._wakingSince):this._wakingSince=void 0,this._requestId&&(r.requestId=this._requestId),this._sessionId&&(r.sessionId=this._sessionId),this._endsAt!==null&&(r.endsAt=this._endsAt),t?.error&&(r.error=t.error),this._phase=r,this._isTerminalPhase()&&(this._stopMediaProbe(),this._stopStatsSampler(),this._clearRecvIceRestart(),this._clearSendIceRestart(),this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null)),this._emitter.emit("phase",r)}reportAdmission(e){if(e.requestId&&(this._requestId=e.requestId),this._lastServerStatus=e.status,this._liveReached||it(this._phase.name))return;let{runtime:t,queue:r}=e;if(t?.state==="unavailable"){this._setPhase("unavailable",{runtime:t});return}if(t?.state==="starting"){this._setPhase("provisioning",{runtime:t});return}if(t?.state==="busy"||e.status==="queued"){this._setPhase("queued",{queue:r,runtime:t});return}this._setPhase("provisioning")}_emitError(e,t){this._setPhase("error",{error:{reason:e.message,code:t,kind:"transport-failed"}}),this._emitter.emit("error",e)}reportAllocationFailure(e,t){this._setPhase("error",{error:{reason:e.message,code:"allocation-failed",kind:"create-failed",httpStatus:t}}),this._emitter.emit("error",e)}};function zi(s){return new Promise(e=>setTimeout(e,s))}function Id(){return Ci()}var Ki=["packetsReceived","packetsLost","nackCount","pliCount","firCount","keyFramesDecoded","framesReceived","framesDropped","retransmittedPacketsReceived","retransmittedBytesReceived","jitterBufferDelay","jitterBufferEmittedCount","estimatedPlayoutTimestamp","jitterBufferTargetDelay","jitterBufferMinimumDelay","concealedSamples","insertedSamplesForDeceleration"],Ld=new Set(["estimatedPlayoutTimestamp"]);function Md(){return{total:0,framesDecoded:null,packetsReceived:null,packetsLost:null,nackCount:null,jitter:null,pliCount:null,firCount:null,keyFramesDecoded:null,framesReceived:null,framesDropped:null,retransmittedPacketsReceived:null,retransmittedBytesReceived:null,jitterBufferDelay:null,jitterBufferEmittedCount:null,estimatedPlayoutTimestamp:null,jitterBufferTargetDelay:null,jitterBufferMinimumDelay:null,concealedSamples:null,insertedSamplesForDeceleration:null}}function Ad(s){return Object.fromEntries(Ki.map(e=>[e,s[e]]))}function Wi(s,e){return s===null||e===null||e<s?null:e-s}function Od(s,e){let t=s.packetsLost!==null&&e.packetsLost!==null?e.packetsLost-s.packetsLost:null,r=Wi(s.packetsReceived,e.packetsReceived),n=Wi(s.nackCount,e.nackCount),i=t===null?null:Math.max(0,t),a=i!==null&&r!==null?i+r:0;return{packetsLostWindow:t,packetsReceivedWindow:r,nackCountWindow:n,jitterSec:e.jitter,lossPct:a>0&&i!==null?i/a*100:null}}function Qi(){return{localType:null,remoteType:null,protocol:null,remoteAddress:null,remotePort:null}}function Nd(s){let e=new Map;Yi(s,o=>{let c=typeof o.id=="string"?o.id:null;c&&e.set(c,o)});let t=Array.from(e.values()).find(o=>o.type==="transport"),r=typeof t?.selectedCandidatePairId=="string"?t.selectedCandidatePairId:null,n=(r?e.get(r):void 0)??Array.from(e.values()).find(o=>o.type==="candidate-pair"&&o.selected===!0)??Array.from(e.values()).find(o=>o.type==="candidate-pair"&&o.nominated===!0);if(!n)return Qi();let i=typeof n.localCandidateId=="string"?e.get(n.localCandidateId):void 0,a=typeof n.remoteCandidateId=="string"?e.get(n.remoteCandidateId):void 0;return{localType:typeof i?.candidateType=="string"?i.candidateType:null,remoteType:typeof a?.candidateType=="string"?a.candidateType:null,protocol:typeof i?.protocol=="string"?i.protocol:typeof a?.protocol=="string"?a.protocol:null,remoteAddress:typeof a?.address=="string"?a.address:typeof a?.ip=="string"?a.ip:null,remotePort:typeof a?.port=="number"?a.port:null}}function Yi(s,e){let t=r=>{r&&typeof r=="object"&&e(r)};if(s instanceof Map)for(let[r,n]of s.entries()){if(!n||typeof n!="object")continue;let i=n;e(typeof i.id=="string"?i:{...i,id:r})}else(Array.isArray(s)||s&&typeof s.forEach=="function")&&s.forEach(t)}async function Hi(s){let e=Md();if(typeof s.getStats!="function")return e;let t;try{t=await s.getStats()}catch{return e}return Yi(t,n=>{if(n.type==="inbound-rtp"){let i=typeof n.bytesReceived=="number"?n.bytesReceived:0,a=typeof n.packetsReceived=="number"?n.packetsReceived:0;e.total+=i+a,typeof n.framesDecoded=="number"&&(e.framesDecoded=(e.framesDecoded??0)+n.framesDecoded),typeof n.jitter=="number"&&(e.jitter=e.jitter===null?n.jitter:Math.max(e.jitter,n.jitter));for(let o of Ki)typeof n[o]=="number"&&(e[o]=Ld.has(o)?e[o]===null?n[o]:Math.max(e[o],n[o]):(e[o]??0)+n[o])}}),e}function jd(s){if(!s||typeof s!="object")return;let e=s.epoch,t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:void 0}var Ji=require("y-websocket"),Es=require("y-protocols/awareness"),Ps=1;function Xi(s){let e=new URL(s);return`${e.protocol}//${e.host}/doc`}var Fd=2500,$d=3e4,qd=1e4,Ud=3;function Zi(s){let e=s.WebSocketPolyfill??globalThis.WebSocket;if(!e)throw new Error("[urun] no WebSocket implementation available for the yjs doc provider (browser global missing and no WebSocketPolyfill passed)");return(t,r,n)=>{let i=`${s.sessionId}/${t}`,a=typeof s.token=="function"?s.token:null,o=typeof s.token=="string"?s.token:void 0,c=s.maxBackoffTimeMs??Fd,l=s.dialTimeoutMs??$d,d=new Ji.WebsocketProvider(s.serverUrl,i,r,{awareness:n,params:{dsv:String(Ps),...o?{token:o}:{}},WebSocketPolyfill:e,disableBc:!0,maxBackoffTime:c,resyncInterval:qd,connect:a===null}),p=!1,u=0,h=!1,m=L=>{h||(h=!0,console.error(`[urun] doc token refresh failed for room ${i} (redialing with previous token):`,L))},f=()=>{if(!a)return;let L=++u;try{let U=a();if(typeof U=="string"){d.params.token=U,h=!1;return}if(U&&typeof U.then=="function")return U.then(Me=>{L===u&&typeof Me=="string"&&(d.params.token=Me,h=!1)},Me=>{m(Me)})}catch(U){m(U)}},g={connected:!1,consecutiveFailures:0,lastCloseCode:null,lastCloseReason:null},_=new Set,v=!1,S=()=>{let L={...g};for(let U of[..._])U(L)},x=null,k=()=>{x!==null&&(clearTimeout(x),x=null)},D=()=>{k(),x=setTimeout(()=>{if(x=null,!p&&d.wsconnecting&&d.ws)try{d.ws.close()}catch{}},l)},j=null,V=()=>{j!==null&&(clearTimeout(j),j=null)},G=()=>{V(),j=setTimeout(()=>{if(j=null,!p&&d.shouldConnect&&!d.wsconnected&&!d.wsconnecting&&d.ws===null)try{d.connect()}catch(L){v||(v=!0,console.error(`[urun] doc connection redial threw for room ${i} (still retrying):`,L)),G()}},c+500)},ae=({status:L})=>{if(L==="connecting"){V(),D();return}if(L==="connected"){k(),V(),g={...g,connected:!0},S();return}g.connected&&(g={...g,connected:!1},S())},Ns=L=>{L&&(v&&(console.info(`[urun] doc connection recovered for room ${i}`),v=!1),g.consecutiveFailures!==0&&(g={...g,consecutiveFailures:0},S()))},js=L=>{k(),g={connected:!1,consecutiveFailures:g.consecutiveFailures+1,lastCloseCode:L?L.code:null,lastCloseReason:L&&L.reason?L.reason:null},!v&&g.consecutiveFailures>=Ud&&(v=!0,console.error(`[urun] doc connection failing for room ${i}: ${g.consecutiveFailures} consecutive failures (last close ${g.lastCloseCode===null?"by provider liveness reap":`code ${g.lastCloseCode}`}${g.lastCloseReason?`, reason "${g.lastCloseReason}"`:""}). Still retrying \u2014 the doc provider never gives up.`)),S(),f(),G()};d.on("status",ae),d.on("sync",Ns),d.on("connection-close",js),d.wsconnecting?D():d.wsconnected&&(g={...g,connected:!0});let Pt=!1,Re=null;if(a!==null){let L=f();if(L){Pt=!0;let U=()=>{Pt&&(Pt=!1,Re!==null&&(clearTimeout(Re),Re=null),p||d.connect())};Re=setTimeout(U,l),L.then(U)}else d.connect()}return{get awareness(){return d.awareness},get synced(){return d.synced},onSync(L){let U=Me=>L(Me);return d.on("sync",U),()=>d.off("sync",U)},onConnectionState(L){return _.add(L),L({...g}),()=>_.delete(L)},ensureConnected(){!d.wsconnected&&!Pt&&d.connect()},destroy(){p=!0,Re!==null&&(clearTimeout(Re),Re=null),k(),V(),d.off("status",ae),d.off("sync",Ns),d.off("connection-close",js),_.clear(),d.destroy()}}}}var ks=class{constructor(e,t,r){this._name=e;this._doc=t;this.awareness=r}_name;_doc;awareness;_inner=null;_innerUnsub=null;_innerStateUnsub=null;_syncHandlers=new Set;_stateHandlers=new Set;_lastState={connected:!1,consecutiveFailures:0,lastCloseCode:null,lastCloseReason:null};_destroyed=!1;get synced(){return this._inner?.synced??!1}get destroyed(){return this._destroyed}onSync(e){return this._syncHandlers.add(e),()=>this._syncHandlers.delete(e)}onConnectionState(e){return this._stateHandlers.add(e),e({...this._lastState}),()=>this._stateHandlers.delete(e)}attach(e){if(!this._destroyed){if(this._inner&&(this._innerUnsub?.(),this._innerUnsub=null,this._innerStateUnsub?.(),this._innerStateUnsub=null,this._inner.destroy(),this._inner=null),this._inner=e(this._name,this._doc,this.awareness),this._innerUnsub=this._inner.onSync(t=>{for(let r of[...this._syncHandlers])r(t)}),this._inner.onConnectionState)this._innerStateUnsub=this._inner.onConnectionState(t=>{this._lastState=t;for(let r of[...this._stateHandlers])r(t)});else{this._innerStateUnsub=null,this._lastState={connected:!0,consecutiveFailures:0,lastCloseCode:null,lastCloseReason:null};for(let t of[...this._stateHandlers])t({...this._lastState})}if(this._inner.synced)for(let t of[...this._syncHandlers])t(!0)}}ensureConnected(){this._inner?.ensureConnected?.()}destroy(){this._destroyed=!0,this._innerUnsub?.(),this._innerUnsub=null,this._innerStateUnsub?.(),this._innerStateUnsub=null,this._inner?.destroy(),this._inner=null,this._syncHandlers.clear(),this._stateHandlers.clear()}},br=class{_target=null;_bridges=[];connect=(e,t,r)=>{let n=new ks(e,t,r);return this._bridges.push(n),this._target&&n.attach(this._target),n};get connected(){return this._target!==null}setTarget(e){if(this._target!==e){this._target=e,this._bridges=this._bridges.filter(t=>!t.destroyed);for(let t of this._bridges)t.attach(e)}}};var Tt=Pr(require("yjs"));function kt(s){if(s===null||typeof s!="object"||Array.isArray(s))return!1;let e=Object.getPrototypeOf(s);return e===Object.prototype||e===null}var Sr="$bytes";function Bd(s){return s instanceof Uint8Array||s instanceof ArrayBuffer}function zd(s){if(!kt(s))return!1;let e=Object.keys(s);return e.length===1&&e[0]===Sr&&typeof s[Sr]=="string"}function Wd(s){return s instanceof ArrayBuffer?new Uint8Array(s):s}function Hd(s){if(typeof Buffer<"u")return Buffer.from(s).toString("base64");let e="";for(let t=0;t<s.length;t++)e+=String.fromCharCode(s[t]);return btoa(e)}function Vd(s){if(typeof Buffer<"u")return new Uint8Array(Buffer.from(s,"base64"));let e=atob(s),t=new Uint8Array(e.length);for(let r=0;r<e.length;r++)t[r]=e.charCodeAt(r);return t}function xs(s){if(Bd(s))return{[Sr]:Hd(Wd(s))};if(Array.isArray(s))return s.map(xs);if(kt(s)){let e={};for(let[t,r]of Object.entries(s))e[t]=xs(r);return e}return s}function Ct(s){if(zd(s))return Vd(s[Sr]);if(Array.isArray(s))return s.map(Ct);if(kt(s)){let e={};for(let[t,r]of Object.entries(s))e[t]=Ct(r);return e}return s}var ea=Symbol("urun:doc:path-absent");function Gd(s,e){let t=e.split("."),r=s;for(let n of t){if(r===null||typeof r!="object"||!(n in r))return ea;r=r[n]}return r}function Kd(s,e){return s===e?!0:JSON.stringify(s)===JSON.stringify(e)}function Ds(s,e){for(let[t,r]of Object.entries(e))if(kt(r)){let n=s.get(t);if(!(n instanceof Tt.Map)){let i=n;n=new Tt.Map,s.set(t,n),kt(i)&&Ds(n,i)}Ds(n,r)}else{if(Kd(s.get(t),r))continue;s.set(t,r)}}var Qd=Symbol("urun:doc:local"),Rr=class{_doc=new Tt.Doc;_root=this._doc.getMap("session");_awareness=new Es.Awareness(this._doc);_listeners=new Set;_key;_sessionId;_connection=null;_connUnsub=null;_synced;_syncWaiters=new Set;_texts=new Map;_observer=()=>this.notify();constructor(e,t,r){this._key=e,this._sessionId=t,this._root.observeDeep(this._observer),r?(this._connection=r(e,this._doc,this._awareness),this._synced=this._connection.synced,this._connUnsub=this._connection.onSync(n=>{n&&this._markSynced()}),this._synced&&this._markSynced()):this._synced=!0}get awareness(){return this._awareness}setSessionId(e){this._sessionId=e}get synced(){return this._synced}ensureConnected(){this._connection?.ensureConnected?.()}onConnectionState(e){return this._connection?.onConnectionState?this._connection.onConnectionState(e):(e({connected:!0,consecutiveFailures:0,lastCloseCode:null,lastCloseReason:null}),()=>{})}onSynced(e){return this._synced?(e(),()=>{}):(this._syncWaiters.add(e),()=>this._syncWaiters.delete(e))}set(e){e=xs(e),this.applyPatch(e)}get(e,t){let r=this.snapshot();if(!e)return Ct(r);let n=Gd(r,e);return n===ea?t:Ct(n)}on(e,t){return this._listeners.add(t),()=>this._listeners.delete(t)}text(e){let t=this._texts.get(e);return t||(t=new Is(this._doc.getText(`text:${e}`)),this._texts.set(e,t)),t}dispose(){this._root.unobserveDeep(this._observer),this._connUnsub?.(),this._connUnsub=null,this._connection?.destroy(),this._connection=null,this._listeners.clear(),this._syncWaiters.clear();for(let e of this._texts.values())e.dispose();this._texts.clear(),this._awareness.destroy(),this._doc.destroy()}_markSynced(){let e=[...this._syncWaiters];this._synced=!0,this._syncWaiters.clear();for(let t of e)t()}applyPatch(e){this._doc.transact(()=>{Ds(this._root,e)},Qd)}snapshot(){return this._root.toJSON()}notify(){let e=Ct(this.snapshot());for(let t of this._listeners)t(e)}},Is=class{constructor(e){this._ytext=e;this._observer=t=>{for(let r of t.delta)if(typeof r.insert=="string"&&r.insert.length>0){let n=r.insert;for(let i of this._delta)i(n)}},this._ytext.observe(this._observer)}_ytext;_delta=new Set;_observer;append(e){e.length!==0&&this._ytext.insert(this._ytext.length,e)}toString(){return this._ytext.toString()}get length(){return this._ytext.length}on(e,t){return this._delta.add(t),()=>this._delta.delete(t)}dispose(){this._ytext.unobserve(this._observer),this._delta.clear()}};function ta(s){return{get clientId(){return s.clientID},set(e){s.setLocalState(e)},setField(e,t){s.setLocalStateField(e,t)},getLocal(){return s.getLocalState()??null},getStates(){return s.getStates()},on(e,t){let r=()=>t(s.getStates());return s.on("change",r),r(),()=>s.off("change",r)}}}var Ls=500,Ms=15e3,Tr=6;function As(s,e=Math.random){if(!Number.isFinite(s)||s<0)throw new Error(`[urun] computeBackoffDelay: attempt must be a non-negative number, got ${s}`);let t=Math.min(Ms,Ls*2**s);return Math.round(e()*t)}function ra(s){if(s instanceof ue){let e=s.httpStatus;return e===408||e===429||e!==void 0&&e>=500}return s instanceof Error?s.name==="TypeError"||s.name==="TimeoutError"||s.name==="AbortError":!1}var sa=10,Yd=.5,Cr=sa;function na(){return Cr<1?!1:(Cr-=1,!0)}function ia(){Cr=Math.min(sa,Cr+Yd)}var Jd="session-api.prod.cloud.urun.sh",Xd=["https://session-api.use2.prod.cloud.urun.sh","https://session-api.usw2.prod.cloud.urun.sh"];function Er(s){return s.trim().replace(/\/+$/,"")}function Zd(s,e){let t=[],r=n=>{if(!n)return;let i=Er(n);i&&!t.includes(i)&&t.push(i)};r(s);for(let n of e??[])r(n);for(let n of Cl(s))r(n);return t}function el(s){if(typeof s!="string"||s.length===0)return null;let e=new Date(s);return Number.isFinite(e.getTime())?e:null}var tl=120,rl=1e3,sl=20,nl=5,il=500,fa=1e4,al=new Set([502,503,504]),ol=Tr,cl=3,dl=50,aa=1e4;async function oa(s,e){let t=Date.now()+aa;for(;;){await Et(dl);let r=await Os(s);if(r)return r;if(Date.now()>=t)throw new ue(`[urun] session allocation at ${e} never got an access token: the wired getAccessToken resolved nothing within ${Math.round(aa/1e3)}s (no unauthenticated request was sent)`)}}function ll(s,e){if(!s)return null;try{let t=new URL(s),r=e?new URL(Er(e)):null,n=t.pathname==="/api/sessions/create"||t.pathname==="/api/sessions/create/";return t.protocol!=="https:"||!n||!pl(t,r)?null:Er(t.origin)}catch{return null}}function pl(s,e){return ca(s.hostname)&&(!e||ca(e.hostname))}function ca(s){let e=s.toLowerCase();return e==="urun.sh"||e.endsWith(".urun.sh")}async function ma(s){let e=Zd(s.baseUrl,s.fallbackUrls),t=null,r=e.length>1;for(let n=0;n<Tr;n++){for(let i of e)try{let a=await ul(i,s,{pollAttempts:tl,retryAfterLimitMs:r?rl:void 0});return ia(),a}catch(a){if(t=a instanceof Error?a:new Error(String(a)),t instanceof Se||t instanceof Le)throw t}if(!ra(t))break;if(n+1<Tr){if(!na())break;await Et(As(n))}}throw t??new Error("[urun] session allocation failed")}async function ul(s,e,t){let r,n,i,a=s,o=0,c=new Set,l=Date.now()+t.pollAttempts*fa;for(let d=0;d<t.pollAttempts;d++){n=i??await Os(e),i=void 0,e.getAccessToken&&!n&&(n=await oa(e,a));let p=!!r,u=Date.now(),h;if(r){let v=0,S=0,x=k=>{let D=Math.min(Ms,Ls*2**v),j=Math.max(Math.ceil(D/2),As(v));return v+=1,Math.min(Math.max(k,j),Math.max(0,l-Date.now()))};for(;;){let k=l-Date.now();if(k<=0)throw kr(a,!0);let D=Math.max(1,Math.min(sl,Math.floor(k/1e3)));u=Date.now();try{h=await fetch(`${a}/api/session-requests/${encodeURIComponent(r)}?wait_s=${D}`,{headers:da(e,n),signal:yl((D+nl)*1e3)})}catch(V){if(S+=1,S>=ol)throw new Le(`[urun] session allocation poll failed at ${a} after ${S} consecutive transport failures`,{cause:V});let G=x(0);if(G<=0)throw kr(a,!0);await Et(G);continue}if(S=0,!al.has(h.status))break;try{await h.body?.cancel()}catch(V){throw new Le(`[urun] session allocation poll response cleanup failed at ${a}`,{cause:V})}let j=x(ua(h,{},t.retryAfterLimitMs));if(j<=0)throw kr(a,!0);await Et(j)}}else h=await fetch(`${a}/api/sessions/create`,{method:"POST",redirect:"manual",headers:{...da(e,n),"Content-Type":"application/json","Idempotency-Key":e.idempotencyKey},body:JSON.stringify(hl(e))});if(!r&&(h.status===307||h.status===308)){let v=ll(h.headers.get("location"),a);if(v&&v!==a&&o<cl){o+=1,a=v;continue}throw new ue(`[urun] session create redirected from ${a} without a usable target`,{httpStatus:h.status})}let m=await fl(h);if(m.request_id)try{e.onRequest?.({requestId:m.request_id,baseUrl:a})}catch{}if(h.ok&&(m.status==="allocated"||!m.status&&!!m.session_id)&&!!m.session_id){let v=m.session_id,S=bl(m.ws_url,a,v,"gateway allocated session");return{baseUrl:a,sessionId:v,wsUrl:S,endsAt:el(m.ends_at),response:m}}if(h.status===202||m.status==="pending"||m.status==="queued"||m.queued){if(r=m.request_id||r,!r)throw new Error("[urun] gateway queued session without request_id");if(e.onAdmission)try{e.onAdmission(wl(m,r))}catch{}let v=Date.now()-u<il;p&&v&&await Et(ua(h,m,t.retryAfterLimitMs));continue}if((h.status===401||h.status===403)&&e.getAccessToken){let v=n??"";c.add(v);let S=await Os(e,{forceRefresh:!0,reason:"unauthorized"});if(S&&!c.has(S)){i=S;continue}if(S===void 0){let x=await oa(e,a);if(!c.has(x)){i=x;continue}}}let g=m.error_message||m.error_code||`HTTP ${h.status}`,_=p?Le:ue;throw new _(`[urun] session allocation failed at ${a}: ${g}`,{httpStatus:h.status})}throw kr(a,!!r)}function kr(s,e=!1){let t=e?Le:ue;return new t(`[urun] timed out waiting for session allocation at ${s}`)}function da(s,e){let t={"X-Tenant-Id":s.orgId,"X-Auth-Provider":s.authProvider||"default","X-User-Id":"anonymous"};return e&&(t.Authorization=`Bearer ${e}`),t}async function Os(s,e){return s.getAccessToken?await s.getAccessToken(e)??void 0:s.jwt}function hl(s){let e=s.priority==="preempt";return{app:s.app,function:s.functionName,gpus:1,idempotency_key:s.idempotencyKey,...s.sessionKey&&!e?{logical_id:s.sessionKey}:{},...e?{priority:"preempt"}:{}}}async function fl(s){try{let e=await s.json();return e&&typeof e=="object"?e:{}}catch{return{}}}var ml=new Set(["capture-attested","no-portable-golden","portable-golden-release-mismatch","portable-golden-attestation-invalid"]);function ga(s){return typeof s=="object"&&s!==null&&!Array.isArray(s)}function la(s){return typeof s=="string"&&s.trim().length>0}function pa(s){return typeof s=="number"&&Number.isSafeInteger(s)&&s>0}function gl(s){return typeof s=="number"&&Number.isSafeInteger(s)&&s>=0}function _l(s){if(ga(s)&&!(!la(s.snapshot_id)||!la(s.snapshot_compat_key)||!pa(s.artifact_size_bytes)||!pa(s.durable_arena_bytes)||s.volatile_arena_bytes!==0||!gl(s.uncovered_weight_bytes)))return{snapshotId:s.snapshot_id,snapshotCompatKey:s.snapshot_compat_key,artifactSizeBytes:s.artifact_size_bytes,durableArenaBytes:s.durable_arena_bytes,volatileArenaBytes:0,uncoveredWeightBytes:s.uncovered_weight_bytes}}function vl(s){if(!ga(s)||s.schema!=="urun.runtime.wake.v1"||s.portability!=="portable"&&s.portability!=="none"||s.expected_wake_path!=="portable-golden-restore"&&s.expected_wake_path!=="cold-boot"||typeof s.reason_code!="string"||!ml.has(s.reason_code)||s.expectation_basis!=="snapshot-registry"||s.restore_observation!=="not-observed")return;let e=s.reason_code;if(s.portability==="portable"&&s.expected_wake_path==="portable-golden-restore"&&e==="capture-attested"){let t=_l(s.golden);return t?{schema:"urun.runtime.wake.v1",portability:"portable",expectedWakePath:"portable-golden-restore",reasonCode:e,expectationBasis:"snapshot-registry",restoreObservation:"not-observed",golden:t}:void 0}if(s.portability==="none"&&s.expected_wake_path==="cold-boot"&&e!=="capture-attested"&&s.golden===void 0)return{schema:"urun.runtime.wake.v1",portability:"none",expectedWakePath:"cold-boot",reasonCode:e,expectationBasis:"snapshot-registry",restoreObservation:"not-observed"}}function wl(s,e){let t={status:s.status==="queued"||s.queued?"queued":"pending",requestId:e};typeof s.queue_position=="number"&&typeof s.queue_depth=="number"&&(t.queue={position:s.queue_position,depth:s.queue_depth});let r=s.runtime_state;if(r==="unavailable"||r==="starting"||r==="busy"){t.runtime={state:r},typeof s.runtime_reason=="string"&&s.runtime_reason.length>0&&(t.runtime.reason=s.runtime_reason);let n=vl(s.runtime_wake);n&&(t.runtime.wake=n)}return t}function ua(s,e,t){let r=Number(s.headers.get("Retry-After")||""),n=Number(e.retry_after_seconds??r),i=t??fa;return Number.isFinite(n)&&n>0?Math.min(n*1e3,i):1e3}function Et(s){return new Promise(e=>setTimeout(e,s))}function yl(s){let e=typeof AbortSignal<"u"?AbortSignal:void 0;return typeof e?.timeout=="function"?e.timeout(s):void 0}var Se=class extends Error{},Le=class extends ue{};function bl(s,e,t,r){if(!s)throw new Se(`[urun] ${r} ${t} without ws_url`);let n,i;try{n=new URL(s)}catch{throw new Se(r==="viewer-connect"?`[urun] viewer-connect returned no usable ws_url for ${t}`:`[urun] ${r} ${t} with non-absolute ws_url`)}try{i=new URL(Er(e))}catch{throw new Se(`[urun] ${r} ${t} has invalid gateway base URL`)}let a=Sl(i.hostname)&&i.protocol==="http:";if(!(a&&n.protocol==="ws:"||n.protocol==="wss:"))throw new Se(`[urun] ${r} ${t} with insecure ws_url`);if(!Rl(n,i,a))throw new Se(`[urun] ${r} ${t} with cross-origin ws_url`);return n.toString()}function Sl(s){return s==="localhost"||s==="127.0.0.1"||s==="::1"||s.endsWith(".localhost")}function Rl(s,e,t){return!!(t||s.hostname===e.hostname&&s.port===e.port||ha(s.hostname)&&ha(e.hostname))}function ha(s){return s==="urun.sh"||s.endsWith(".urun.sh")}function Cl(s){try{return new URL(s).hostname!==Jd?[]:Xd}catch{return[]}}