@urun-sh/core 0.6.7 → 0.6.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapter/index.js +7 -7
- package/dist/adapter/index.mjs +1 -1
- package/dist/{app-C3YETP2X.mjs → app-LY3NOZJN.mjs} +1 -1
- package/dist/{chunk-WJRMA2FH.mjs → chunk-2DW5QEXW.mjs} +5 -5
- package/dist/{chunk-GRC3SSMU.mjs → chunk-5NWSWSLE.mjs} +2 -2
- package/dist/{chunk-PPGI7LGI.mjs → chunk-C436O3X6.mjs} +1 -1
- package/dist/index.browser.d.mts +1 -3
- package/dist/index.browser.d.ts +1 -3
- package/dist/index.browser.js +3 -3
- package/dist/index.browser.mjs +1 -1
- package/dist/index.d.mts +1 -3
- package/dist/index.d.ts +1 -3
- package/dist/index.js +6 -6
- package/dist/index.mjs +1 -1
- package/dist/internal.browser.js +2 -2
- package/dist/internal.browser.mjs +1 -1
- package/dist/internal.js +3 -3
- package/dist/internal.mjs +1 -1
- package/package.json +1 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var Vo=Object.create;var Zs=Object.defineProperty;var Go=Object.getOwnPropertyDescriptor;var Ko=Object.getOwnPropertyNames;var Qo=Object.getPrototypeOf,Jo=Object.prototype.hasOwnProperty;var P=(r,e)=>()=>{try{return e||r((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}};var Yo=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Ko(e))!Jo.call(r,n)&&n!==t&&Zs(r,n,{get:()=>e[n],enumerable:!(s=Go(e,n))||s.enumerable});return r};var en=(r,e,t)=>(t=r!=null?Vo(Qo(r)):{},Yo(e||!r||!r.__esModule?Zs(t,"default",{value:r,enumerable:!0}):t,r));var On=P((Bu,An)=>{"use strict";var Ve=1e3,Ge=Ve*60,Ke=Ge*60,Le=Ke*24,Fa=Le*7,$a=Le*365.25;An.exports=function(r,e){e=e||{};var t=typeof r;if(t==="string"&&r.length>0)return Ua(r);if(t==="number"&&isFinite(r))return e.long?Ba(r):qa(r);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(r))};function Ua(r){if(r=String(r),!(r.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(r);if(e){var t=parseFloat(e[1]),s=(e[2]||"ms").toLowerCase();switch(s){case"years":case"year":case"yrs":case"yr":case"y":return t*$a;case"weeks":case"week":case"w":return t*Fa;case"days":case"day":case"d":return t*Le;case"hours":case"hour":case"hrs":case"hr":case"h":return t*Ke;case"minutes":case"minute":case"mins":case"min":case"m":return t*Ge;case"seconds":case"second":case"secs":case"sec":case"s":return t*Ve;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:return}}}}function qa(r){var e=Math.abs(r);return e>=Le?Math.round(r/Le)+"d":e>=Ke?Math.round(r/Ke)+"h":e>=Ge?Math.round(r/Ge)+"m":e>=Ve?Math.round(r/Ve)+"s":r+"ms"}function Ba(r){var e=Math.abs(r);return e>=Le?Xt(r,e,Le,"day"):e>=Ke?Xt(r,e,Ke,"hour"):e>=Ge?Xt(r,e,Ge,"minute"):e>=Ve?Xt(r,e,Ve,"second"):r+" ms"}function Xt(r,e,t,s){var n=e>=t*1.5;return Math.round(r/t)+" "+s+(n?"s":"")}});var jn=P((Wu,Nn)=>{"use strict";function Wa(r){t.debug=t,t.default=t,t.coerce=c,t.disable=o,t.enable=n,t.enabled=a,t.humanize=On(),t.destroy=l,Object.keys(r).forEach(d=>{t[d]=r[d]}),t.names=[],t.skips=[],t.formatters={};function e(d){let u=0;for(let p=0;p<d.length;p++)u=(u<<5)-u+d.charCodeAt(p),u|=0;return t.colors[Math.abs(u)%t.colors.length]}t.selectColor=e;function t(d){let u,p=null,m,f;function h(...g){if(!h.enabled)return;let v=h,_=Number(new Date),x=_-(u||_);v.diff=x,v.prev=u,v.curr=_,u=_,g[0]=t.coerce(g[0]),typeof g[0]!="string"&&g.unshift("%O");let S=0;g[0]=g[0].replace(/%([a-zA-Z%])/g,(D,F)=>{if(D==="%%")return"%";S++;let z=t.formatters[F];if(typeof z=="function"){let N=g[S];D=z.call(v,N),g.splice(S,1),S--}return D}),t.formatArgs.call(v,g),(v.log||t.log).apply(v,g)}return h.namespace=d,h.useColors=t.useColors(),h.color=t.selectColor(d),h.extend=s,h.destroy=t.destroy,Object.defineProperty(h,"enabled",{enumerable:!0,configurable:!1,get:()=>p!==null?p:(m!==t.namespaces&&(m=t.namespaces,f=t.enabled(d)),f),set:g=>{p=g}}),typeof t.init=="function"&&t.init(h),h}function s(d,u){let p=t(this.namespace+(typeof u>"u"?":":u)+d);return p.log=this.log,p}function n(d){t.save(d),t.namespaces=d,t.names=[],t.skips=[];let u=(typeof d=="string"?d:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let p of u)p[0]==="-"?t.skips.push(p.slice(1)):t.names.push(p)}function i(d,u){let p=0,m=0,f=-1,h=0;for(;p<d.length;)if(m<u.length&&(u[m]===d[p]||u[m]==="*"))u[m]==="*"?(f=m,h=p,m++):(p++,m++);else if(f!==-1)m=f+1,h++,p=h;else return!1;for(;m<u.length&&u[m]==="*";)m++;return m===u.length}function o(){let d=[...t.names,...t.skips.map(u=>"-"+u)].join(",");return t.enable(""),d}function a(d){for(let u of t.skips)if(i(d,u))return!1;for(let u of t.names)if(i(d,u))return!0;return!1}function c(d){return d instanceof Error?d.stack||d.message:d}function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.enable(t.load()),t}Nn.exports=Wa});var vt=P((X,Zt)=>{"use strict";X.formatArgs=Ha;X.save=Va;X.load=Ga;X.useColors=za;X.storage=Ka();X.destroy=(()=>{let r=!1;return()=>{r||(r=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();X.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 za(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let r;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(r=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(r[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function Ha(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+Zt.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;r.splice(1,0,e,"color: inherit");let t=0,s=0;r[0].replace(/%[a-zA-Z%]/g,n=>{n!=="%%"&&(t++,n==="%c"&&(s=t))}),r.splice(s,0,e)}X.log=console.debug||console.log||(()=>{});function Va(r){try{r?X.storage.setItem("debug",r):X.storage.removeItem("debug")}catch{}}function Ga(){let r;try{r=X.storage.getItem("debug")||X.storage.getItem("DEBUG")}catch{}return!r&&typeof process<"u"&&"env"in process&&(r=process.env.DEBUG),r}function Ka(){try{return localStorage}catch{}}Zt.exports=jn()(X);var{formatters:Qa}=Zt.exports;Qa.j=function(r){try{return JSON.stringify(r)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var $n=P(Fn=>{"use strict";Object.defineProperty(Fn,"__esModule",{value:!0})});var V=P(er=>{"use strict";Object.defineProperty(er,"__esModule",{value:!0});er.Logger=void 0;var Qe=vt(),Je="media-client",Jr=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,Qe.default)(`${Je}:${e}`),this._warn=(0,Qe.default)(`${Je}:WARN:${e}`),this._error=(0,Qe.default)(`${Je}:ERROR:${e}`)):(this._debug=(0,Qe.default)(Je),this._warn=(0,Qe.default)(`${Je}:WARN`),this._error=(0,Qe.default)(`${Je}: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}};er.Logger=Jr});var Jn=P((Vu,Yr)=>{"use strict";var Ye=typeof Reflect=="object"?Reflect:null,Un=Ye&&typeof Ye.apply=="function"?Ye.apply:function(e,t,s){return Function.prototype.apply.call(e,t,s)},tr;Ye&&typeof Ye.ownKeys=="function"?tr=Ye.ownKeys:Object.getOwnPropertySymbols?tr=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:tr=function(e){return Object.getOwnPropertyNames(e)};function Ja(r){console&&console.warn&&console.warn(r)}var Bn=Number.isNaN||function(e){return e!==e};function L(){L.init.call(this)}Yr.exports=L;Yr.exports.once=ec;L.EventEmitter=L;L.prototype._events=void 0;L.prototype._eventsCount=0;L.prototype._maxListeners=void 0;var qn=10;function rr(r){if(typeof r!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof r)}Object.defineProperty(L,"defaultMaxListeners",{enumerable:!0,get:function(){return qn},set:function(r){if(typeof r!="number"||r<0||Bn(r))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+r+".");qn=r}});L.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};L.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||Bn(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 Wn(r){return r._maxListeners===void 0?L.defaultMaxListeners:r._maxListeners}L.prototype.getMaxListeners=function(){return Wn(this)};L.prototype.emit=function(e){for(var t=[],s=1;s<arguments.length;s++)t.push(arguments[s]);var n=e==="error",i=this._events;if(i!==void 0)n=n&&i.error===void 0;else if(!n)return!1;if(n){var o;if(t.length>0&&(o=t[0]),o instanceof Error)throw o;var a=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw a.context=o,a}var c=i[e];if(c===void 0)return!1;if(typeof c=="function")Un(c,this,t);else for(var l=c.length,d=Kn(c,l),s=0;s<l;++s)Un(d[s],this,t);return!0};function zn(r,e,t,s){var n,i,o;if(rr(t),i=r._events,i===void 0?(i=r._events=Object.create(null),r._eventsCount=0):(i.newListener!==void 0&&(r.emit("newListener",e,t.listener?t.listener:t),i=r._events),o=i[e]),o===void 0)o=i[e]=t,++r._eventsCount;else if(typeof o=="function"?o=i[e]=s?[t,o]:[o,t]:s?o.unshift(t):o.push(t),n=Wn(r),n>0&&o.length>n&&!o.warned){o.warned=!0;var a=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");a.name="MaxListenersExceededWarning",a.emitter=r,a.type=e,a.count=o.length,Ja(a)}return r}L.prototype.addListener=function(e,t){return zn(this,e,t,!1)};L.prototype.on=L.prototype.addListener;L.prototype.prependListener=function(e,t){return zn(this,e,t,!0)};function Ya(){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 Hn(r,e,t){var s={fired:!1,wrapFn:void 0,target:r,type:e,listener:t},n=Ya.bind(s);return n.listener=t,s.wrapFn=n,n}L.prototype.once=function(e,t){return rr(t),this.on(e,Hn(this,e,t)),this};L.prototype.prependOnceListener=function(e,t){return rr(t),this.prependListener(e,Hn(this,e,t)),this};L.prototype.removeListener=function(e,t){var s,n,i,o,a;if(rr(t),n=this._events,n===void 0)return this;if(s=n[e],s===void 0)return this;if(s===t||s.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete n[e],n.removeListener&&this.emit("removeListener",e,s.listener||t));else if(typeof s!="function"){for(i=-1,o=s.length-1;o>=0;o--)if(s[o]===t||s[o].listener===t){a=s[o].listener,i=o;break}if(i<0)return this;i===0?s.shift():Xa(s,i),s.length===1&&(n[e]=s[0]),n.removeListener!==void 0&&this.emit("removeListener",e,a||t)}return this};L.prototype.off=L.prototype.removeListener;L.prototype.removeAllListeners=function(e){var t,s,n;if(s=this._events,s===void 0)return this;if(s.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):s[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete s[e]),this;if(arguments.length===0){var i=Object.keys(s),o;for(n=0;n<i.length;++n)o=i[n],o!=="removeListener"&&this.removeAllListeners(o);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(t=s[e],typeof t=="function")this.removeListener(e,t);else if(t!==void 0)for(n=t.length-1;n>=0;n--)this.removeListener(e,t[n]);return this};function Vn(r,e,t){var s=r._events;if(s===void 0)return[];var n=s[e];return n===void 0?[]:typeof n=="function"?t?[n.listener||n]:[n]:t?Za(n):Kn(n,n.length)}L.prototype.listeners=function(e){return Vn(this,e,!0)};L.prototype.rawListeners=function(e){return Vn(this,e,!1)};L.listenerCount=function(r,e){return typeof r.listenerCount=="function"?r.listenerCount(e):Gn.call(r,e)};L.prototype.listenerCount=Gn;function Gn(r){var e=this._events;if(e!==void 0){var t=e[r];if(typeof t=="function")return 1;if(t!==void 0)return t.length}return 0}L.prototype.eventNames=function(){return this._eventsCount>0?tr(this._events):[]};function Kn(r,e){for(var t=new Array(e),s=0;s<e;++s)t[s]=r[s];return t}function Xa(r,e){for(;e+1<r.length;e++)r[e]=r[e+1];r.pop()}function Za(r){for(var e=new Array(r.length),t=0;t<e.length;++t)e[t]=r[t].listener||r[t];return e}function ec(r,e){return new Promise(function(t,s){function n(o){r.removeListener(e,i),s(o)}function i(){typeof r.removeListener=="function"&&r.removeListener("error",n),t([].slice.call(arguments))}Qn(r,e,i,{once:!0}),e!=="error"&&tc(r,n,{once:!0})})}function tc(r,e,t){typeof r.on=="function"&&Qn(r,"error",e,t)}function Qn(r,e,t,s){if(typeof r.on=="function")s.once?r.once(e,t):r.on(e,t);else if(typeof r.addEventListener=="function")r.addEventListener(e,function n(i){s.once&&r.removeEventListener(e,n),t(i)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof r)}});var Z=P(sr=>{"use strict";Object.defineProperty(sr,"__esModule",{value:!0});sr.EnhancedEventEmitter=void 0;var rc=Jn(),sc=V(),nc=new sc.Logger("EnhancedEventEmitter"),Xr=class extends rc.EventEmitter{constructor(){super(),this.setMaxListeners(1/0)}close(){super.removeAllListeners()}emit(e,...t){return super.emit(e,...t)}safeEmit(e,...t){try{return super.emit(e,...t)}catch(s){nc.error("safeEmit() | event listener threw an error [eventName:%s]:%o",e,s);try{super.emit("listenererror",e,s)}catch{}return!!super.listenerCount(e)}}on(e,t){return super.on(e,t),this}off(e,t){return super.off(e,t),this}addListener(e,t){return super.on(e,t),this}prependListener(e,t){return super.prependListener(e,t),this}once(e,t){return super.once(e,t),this}prependOnceListener(e,t){return super.prependOnceListener(e,t),this}removeListener(e,t){return super.off(e,t),this}removeAllListeners(e){return super.removeAllListeners(e),this}listenerCount(e){return super.listenerCount(e)}listeners(e){return super.listeners(e)}rawListeners(e){return super.rawListeners(e)}};sr.EnhancedEventEmitter=Xr});var re=P(Xe=>{"use strict";Object.defineProperty(Xe,"__esModule",{value:!0});Xe.InvalidStateError=Xe.UnsupportedError=void 0;var Zr=class r extends Error{constructor(e){super(e),this.name="UnsupportedError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,r):this.stack=new Error(e).stack}};Xe.UnsupportedError=Zr;var es=class r extends Error{constructor(e){super(e),this.name="InvalidStateError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,r):this.stack=new Error(e).stack}};Xe.InvalidStateError=es});var Me=P(wt=>{"use strict";Object.defineProperty(wt,"__esModule",{value:!0});wt.clone=ic;wt.generateRandomNumber=oc;wt.deepFreeze=Yn;function ic(r){if(r!==void 0)return Number.isNaN(r)?NaN:typeof structuredClone=="function"?structuredClone(r):JSON.parse(JSON.stringify(r))}function oc(){return Math.round(Math.random()*1e7)}function Yn(r){let e=Reflect.ownKeys(r);for(let t of e){let s=r[t];(s&&typeof s=="object"||typeof s=="function")&&Yn(s)}return Object.freeze(r)}});var Xn=P(nr=>{"use strict";Object.defineProperty(nr,"__esModule",{value:!0});nr.Logger=void 0;var Ze=vt(),et="h264-profile-level-id",ts=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,Ze.default)(`${et}:${e}`),this._warn=(0,Ze.default)(`${et}:WARN:${e}`),this._error=(0,Ze.default)(`${et}:ERROR:${e}`)):(this._debug=(0,Ze.default)(et),this._warn=(0,Ze.default)(`${et}:WARN`),this._error=(0,Ze.default)(`${et}: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}};nr.Logger=ts});var ni=P($=>{"use strict";Object.defineProperty($,"__esModule",{value:!0});$.ProfileLevelId=$.Level=$.Profile=void 0;$.parseProfileLevelId=ri;$.profileLevelIdToString=si;$.profileToString=lc;$.levelToString=uc;$.parseSdpProfileLevelId=Ae;$.isSameProfile=pc;$.isSameProfileAndLevel=hc;$.generateProfileLevelIdStringForAnswer=fc;$.supportedLevel=mc;var ac=Xn(),pe=new ac.Logger,M;(function(r){r[r.ConstrainedBaseline=1]="ConstrainedBaseline",r[r.Baseline=2]="Baseline",r[r.Main=3]="Main",r[r.ConstrainedHigh=4]="ConstrainedHigh",r[r.High=5]="High",r[r.PredictiveHigh444=6]="PredictiveHigh444"})(M||($.Profile=M={}));var y;(function(r){r[r.L1_b=0]="L1_b",r[r.L1=10]="L1",r[r.L1_1=11]="L1_1",r[r.L1_2=12]="L1_2",r[r.L1_3=13]="L1_3",r[r.L2=20]="L2",r[r.L2_1=21]="L2_1",r[r.L2_2=22]="L2_2",r[r.L3=30]="L3",r[r.L3_1=31]="L3_1",r[r.L3_2=32]="L3_2",r[r.L4=40]="L4",r[r.L4_1=41]="L4_1",r[r.L4_2=42]="L4_2",r[r.L5=50]="L5",r[r.L5_1=51]="L5_1",r[r.L5_2=52]="L5_2"})(y||($.Level=y={}));var tt=class{profile;level;constructor(e,t){this.profile=e,this.level=t}};$.ProfileLevelId=tt;var cc=new tt(M.ConstrainedBaseline,y.L3_1),le=class{mask;masked_value;constructor(e){this.mask=~ei("x",e),this.masked_value=ei("1",e)}isMatch(e){return this.masked_value===(e&this.mask)}},ue=class{profile_idc;profile_iop;profile;constructor(e,t,s){this.profile_idc=e,this.profile_iop=t,this.profile=s}},dc=[new ue(66,new le("x1xx0000"),M.ConstrainedBaseline),new ue(77,new le("1xxx0000"),M.ConstrainedBaseline),new ue(88,new le("11xx0000"),M.ConstrainedBaseline),new ue(66,new le("x0xx0000"),M.Baseline),new ue(88,new le("10xx0000"),M.Baseline),new ue(77,new le("0x0x0000"),M.Main),new ue(100,new le("00000000"),M.High),new ue(100,new le("00001100"),M.ConstrainedHigh),new ue(244,new le("00000000"),M.PredictiveHigh444)],Zn=[{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:y.L1},{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:y.L1_b},{max_macroblocks_per_second:3e3,max_macroblock_frame_size:396,level:y.L1_1},{max_macroblocks_per_second:6e3,max_macroblock_frame_size:396,level:y.L1_2},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:y.L1_3},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:y.L2},{max_macroblocks_per_second:19800,max_macroblock_frame_size:792,level:y.L2_1},{max_macroblocks_per_second:20250,max_macroblock_frame_size:1620,level:y.L2_2},{max_macroblocks_per_second:40500,max_macroblock_frame_size:1620,level:y.L3},{max_macroblocks_per_second:108e3,max_macroblock_frame_size:3600,level:y.L3_1},{max_macroblocks_per_second:216e3,max_macroblock_frame_size:5120,level:y.L3_2},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:y.L4},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:y.L4_1},{max_macroblocks_per_second:522240,max_macroblock_frame_size:8704,level:y.L4_2},{max_macroblocks_per_second:589824,max_macroblock_frame_size:22080,level:y.L5},{max_macroblocks_per_second:983040,max_macroblock_frame_size:36864,level:y.L5_1},{max_macroblocks_per_second:2073600,max_macroblock_frame_size:36864,level:y.L5_2}];function ri(r){if(typeof r!="string"||r.length!==6)return;let t=parseInt(r,16);if(t===0)return;let s=t&255,n=t>>8&255,i=t>>16&255,o;switch(s){case y.L1_1:{o=(n&16)!==0?y.L1_b:y.L1_1;break}case y.L1:case y.L1_2:case y.L1_3:case y.L2:case y.L2_1:case y.L2_2:case y.L3:case y.L3_1:case y.L3_2:case y.L4:case y.L4_1:case y.L4_2:case y.L5:case y.L5_1:case y.L5_2:{o=s;break}default:{pe.warn(`parseProfileLevelId() | unrecognized level_idc [str:${r}, level_idc:${s}]`);return}}for(let a of dc)if(i===a.profile_idc&&a.profile_iop.isMatch(n))return pe.debug(`parseProfileLevelId() | result [str:${r}, profile:${a.profile}, level:${o}]`),new tt(a.profile,o);pe.warn(`parseProfileLevelId() | unrecognized profile_idc/profile_iop combination [str:${r}, profile_idc:${i}, profile_iop:${n}]`)}function si(r){if(r.level==y.L1_b)switch(r.profile){case M.ConstrainedBaseline:return"42f00b";case M.Baseline:return"42100b";case M.Main:return"4d100b";default:{pe.warn(`profileLevelIdToString() | Level 1_b not is allowed for profile ${r.profile}`);return}}let e;switch(r.profile){case M.ConstrainedBaseline:{e="42e0";break}case M.Baseline:{e="4200";break}case M.Main:{e="4d00";break}case M.ConstrainedHigh:{e="640c";break}case M.High:{e="6400";break}case M.PredictiveHigh444:{e="f400";break}default:{pe.warn(`profileLevelIdToString() | unrecognized profile ${r.profile}`);return}}let t=r.level.toString(16);return t.length===1&&(t=`0${t}`),`${e}${t}`}function lc(r){switch(r){case M.ConstrainedBaseline:return"ConstrainedBaseline";case M.Baseline:return"Baseline";case M.Main:return"Main";case M.ConstrainedHigh:return"ConstrainedHigh";case M.High:return"High";case M.PredictiveHigh444:return"PredictiveHigh444";default:{pe.warn(`profileToString() | unrecognized profile ${r}`);return}}}function uc(r){switch(r){case y.L1_b:return"1b";case y.L1:return"1";case y.L1_1:return"1.1";case y.L1_2:return"1.2";case y.L1_3:return"1.3";case y.L2:return"2";case y.L2_1:return"2.1";case y.L2_2:return"2.2";case y.L3:return"3";case y.L3_1:return"3.1";case y.L3_2:return"3.2";case y.L4:return"4";case y.L4_1:return"4.1";case y.L4_2:return"4.2";case y.L5:return"5";case y.L5_1:return"5.1";case y.L5_2:return"5.2";default:{pe.warn(`levelToString() | unrecognized level ${r}`);return}}}function Ae(r={}){let e=r["profile-level-id"];return e?ri(e):cc}function pc(r={},e={}){let t=Ae(r),s=Ae(e);return!!(t&&s&&t.profile===s.profile)}function hc(r={},e={}){let t=Ae(r),s=Ae(e);return!!(t&&s&&t.profile===s.profile&&t.level==s.level)}function fc(r={},e={}){if(!r["profile-level-id"]&&!e["profile-level-id"]){pe.warn("generateProfileLevelIdStringForAnswer() | profile-level-id missing in local and remote params");return}let t=Ae(r),s=Ae(e);if(!t)throw new TypeError("invalid local_profile_level_id");if(!s)throw new TypeError("invalid remote_profile_level_id");if(t.profile!==s.profile)throw new TypeError("H264 Profile mismatch");let n=ti(r)&&ti(e),i=t.level,o=s.level,a=_c(i,o),c=n?i:a;return pe.debug(`generateProfileLevelIdStringForAnswer() | result [profile:${t.profile}, level:${c}]`),si(new tt(t.profile,c))}function mc(r,e){for(let s=Zn.length-1;s>=0;--s){let n=Zn[s];if(n.max_macroblock_frame_size*256<=r&&n.max_macroblocks_per_second<=e*n.max_macroblock_frame_size)return pe.debug(`supportedLevel() | result [max_frame_pixel_count:${r}, max_fps:${e}, level:${n.level}]`),n.level}pe.warn(`supportedLevel() | no level supported [max_frame_pixel_count:${r}, max_fps:${e}]`)}function ei(r,e){return+(e[0]===r)<<7|+(e[1]===r)<<6|+(e[2]===r)<<5|+(e[3]===r)<<4|+(e[4]===r)<<3|+(e[5]===r)<<2|+(e[6]===r)<<1|+(e[7]===r)<<0}function gc(r,e){return r===y.L1_b?e!==y.L1&&e!==y.L1_b:e===y.L1_b?r!==y.L1:r<e}function _c(r,e){return gc(r,e)?r:e}function ti(r={}){let e=r["level-asymmetry-allowed"];return e===!0||e===1||e==="1"}});var ge=P(G=>{"use strict";Object.defineProperty(G,"__esModule",{value:!0});G.validateAndNormalizeRtpCapabilities=Sc;G.validateAndNormalizeRtpParameters=ss;G.validateAndNormalizeSctpStreamParameters=Rc;G.validateSctpCapabilities=Cc;G.getExtendedRtpCapabilities=Tc;G.getRecvRtpCapabilities=kc;G.getSendRtpCapabilities=Ec;G.getSendingRtpParameters=Pc;G.getSendingRemoteRtpParameters=xc;G.reduceCodecs=Dc;G.generateProbatorRtpParameters=Ic;G.canSend=Lc;G.canReceive=Mc;var ii=ni(),vc=Me(),wc="probator",yc=1234,bc=127;function Sc(r){if(typeof r!="object")throw new TypeError("caps is not an object");if(r.codecs&&!Array.isArray(r.codecs))throw new TypeError("caps.codecs is not an array");r.codecs||(r.codecs=[]);for(let e of r.codecs)Ac(e);if(r.headerExtensions&&!Array.isArray(r.headerExtensions))throw new TypeError("caps.headerExtensions is not an array");r.headerExtensions||(r.headerExtensions=[]);for(let e of r.headerExtensions)Oc(e)}function ss(r){if(typeof r!="object")throw new TypeError("params is not an object");if(r.mid&&typeof r.mid!="string")throw new TypeError("params.mid is not a string");if(!Array.isArray(r.codecs))throw new TypeError("missing params.codecs");for(let e of r.codecs)Nc(e);if(r.headerExtensions&&!Array.isArray(r.headerExtensions))throw new TypeError("params.headerExtensions is not an array");r.headerExtensions||(r.headerExtensions=[]);for(let e of r.headerExtensions)jc(e);if(r.encodings&&!Array.isArray(r.encodings))throw new TypeError("params.encodings is not an array");r.encodings||(r.encodings=[]);for(let e of r.encodings)Fc(e);if(r.rtcp&&typeof r.rtcp!="object")throw new TypeError("params.rtcp is not an object");r.rtcp||(r.rtcp={}),$c(r.rtcp)}function Rc(r){if(typeof r!="object")throw new TypeError("params is not an object");if(typeof r.streamId!="number")throw new TypeError("missing params.streamId");let e=!1;if(typeof r.ordered=="boolean"?e=!0:r.ordered=!0,r.maxPacketLifeTime&&typeof r.maxPacketLifeTime!="number")throw new TypeError("invalid params.maxPacketLifeTime");if(r.maxRetransmits&&typeof r.maxRetransmits!="number")throw new TypeError("invalid params.maxRetransmits");if(r.maxPacketLifeTime&&r.maxRetransmits)throw new TypeError("cannot provide both maxPacketLifeTime and maxRetransmits");if(e&&r.ordered&&(r.maxPacketLifeTime||r.maxRetransmits))throw new TypeError("cannot be ordered with maxPacketLifeTime or maxRetransmits");if(!e&&(r.maxPacketLifeTime||r.maxRetransmits)&&(r.ordered=!1),r.label&&typeof r.label!="string")throw new TypeError("invalid params.label");if(r.protocol&&typeof r.protocol!="string")throw new TypeError("invalid params.protocol")}function Cc(r){if(typeof r!="object")throw new TypeError("caps is not an object");if(!r.numStreams||typeof r.numStreams!="object")throw new TypeError("missing caps.numStreams");Uc(r.numStreams)}function Tc(r,e,t){let s={codecs:[],headerExtensions:[]};if(t)for(let n of r.codecs??[]){if(rt(n))continue;let i=(e.codecs??[]).find(a=>rs(a,n,{strict:!0,modify:!0}));if(!i)continue;let o={kind:n.kind,mimeType:n.mimeType,clockRate:n.clockRate,channels:n.channels,localPayloadType:n.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:i.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:n.parameters??{},remoteParameters:i.parameters??{},rtcpFeedback:oi(n,i)};s.codecs.push(o)}else for(let n of e.codecs??[]){if(rt(n))continue;let i=(r.codecs??[]).find(a=>rs(a,n,{strict:!0,modify:!0}));if(!i)continue;let o={kind:i.kind,mimeType:i.mimeType,clockRate:i.clockRate,channels:i.channels,localPayloadType:i.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:n.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:i.parameters??{},remoteParameters:n.parameters??{},rtcpFeedback:oi(i,n)};s.codecs.push(o)}for(let n of s.codecs){let i=r.codecs.find(a=>rt(a)&&a.parameters?.apt===n.localPayloadType),o=e.codecs.find(a=>rt(a)&&a.parameters?.apt===n.remotePayloadType);i&&o&&(n.localRtxPayloadType=i.preferredPayloadType,n.remoteRtxPayloadType=o.preferredPayloadType)}for(let n of e.headerExtensions){let i=r.headerExtensions.find(a=>qc(a,n));if(!i)continue;let o={kind:n.kind,uri:n.uri,sendId:i.preferredId,recvId:n.preferredId,encrypt:i.preferredEncrypt??!1,direction:"sendrecv"};switch(n.direction){case"sendrecv":{o.direction="sendrecv";break}case"recvonly":{o.direction="sendonly";break}case"sendonly":{o.direction="recvonly";break}case"inactive":{o.direction="inactive";break}}s.headerExtensions.push(o)}return s}function kc(r){return ci({direction:"recvonly",extendedRtpCapabilities:r})}function Ec(r){return ci({direction:"sendonly",extendedRtpCapabilities:r})}function Pc(r,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let s of e.codecs){if(s.kind!==r)continue;let n={mimeType:s.mimeType,payloadType:s.localPayloadType,clockRate:s.clockRate,channels:s.channels,parameters:s.localParameters,rtcpFeedback:s.rtcpFeedback};if(t.codecs.push(n),s.localRtxPayloadType){let i={mimeType:`${s.kind}/rtx`,payloadType:s.localRtxPayloadType,clockRate:s.clockRate,parameters:{apt:s.localPayloadType},rtcpFeedback:[]};t.codecs.push(i)}}for(let s of e.headerExtensions){if(s.kind&&s.kind!==r||s.direction!=="sendrecv"&&s.direction!=="sendonly")continue;let n={uri:s.uri,id:s.sendId,encrypt:s.encrypt,parameters:{}};t.headerExtensions.push(n)}return t}function xc(r,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let s of e.codecs){if(s.kind!==r)continue;let n={mimeType:s.mimeType,payloadType:s.localPayloadType,clockRate:s.clockRate,channels:s.channels,parameters:s.remoteParameters,rtcpFeedback:s.rtcpFeedback};if(t.codecs.push(n),s.localRtxPayloadType){let i={mimeType:`${s.kind}/rtx`,payloadType:s.localRtxPayloadType,clockRate:s.clockRate,parameters:{apt:s.localPayloadType},rtcpFeedback:[]};t.codecs.push(i)}}for(let s of e.headerExtensions){if(s.kind&&s.kind!==r||s.direction!=="sendrecv"&&s.direction!=="sendonly")continue;let n={uri:s.uri,id:s.sendId,encrypt:s.encrypt,parameters:{}};t.headerExtensions.push(n)}if(t.headerExtensions.some(s=>s.uri==="http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"))for(let s of t.codecs)s.rtcpFeedback=(s.rtcpFeedback??[]).filter(n=>n.type!=="goog-remb");else if(t.headerExtensions.some(s=>s.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"))for(let s of t.codecs)s.rtcpFeedback=(s.rtcpFeedback??[]).filter(n=>n.type!=="transport-cc");else for(let s of t.codecs)s.rtcpFeedback=(s.rtcpFeedback??[]).filter(n=>n.type!=="transport-cc"&&n.type!=="goog-remb");return t}function Dc(r,e){let t=[];if(!e)t.push(r[0]),rt(r[1])&&t.push(r[1]);else{for(let s=0;s<r.length;++s)if(rs(r[s],e,{strict:!0})){t.push(r[s]),rt(r[s+1])&&t.push(r[s+1]);break}if(t.length===0)throw new TypeError("no matching codec found")}return t}function Ic(r){r=vc.clone(r),ss(r);let e={mid:wc,codecs:[],headerExtensions:[],encodings:[{ssrc:yc}],rtcp:{cname:"probator"}};return e.codecs.push(r.codecs[0]),e.codecs[0].payloadType=bc,e.headerExtensions=r.headerExtensions,e}function Lc(r,e){return(e.codecs??[]).some(t=>t.kind===r)}function Mc(r,e){if(ss(r),r.codecs.length===0)return!1;let t=r.codecs[0];return(e.codecs??[]).some(s=>s.preferredPayloadType===t.payloadType)}function Ac(r){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof r!="object")throw new TypeError("codec is not an object");if(!r.mimeType||typeof r.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(r.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(r.kind=t[1].toLowerCase(),typeof r.preferredPayloadType!="number")throw new TypeError("missing codec.preferredPayloadType");if(typeof r.clockRate!="number")throw new TypeError("missing codec.clockRate");r.kind==="audio"?typeof r.channels!="number"&&(r.channels=1):delete r.channels,(!r.parameters||typeof r.parameters!="object")&&(r.parameters={});for(let s of Object.keys(r.parameters)){let n=r.parameters[s];if(n===void 0&&(r.parameters[s]="",n=""),typeof n!="string"&&typeof n!="number")throw new TypeError(`invalid codec parameter [key:${s}s, value:${n}]`);if(s==="apt"&&typeof n!="number")throw new TypeError("invalid codec apt parameter")}(!r.rtcpFeedback||!Array.isArray(r.rtcpFeedback))&&(r.rtcpFeedback=[]);for(let s of r.rtcpFeedback)ai(s)}function ai(r){if(typeof r!="object")throw new TypeError("fb is not an object");if(!r.type||typeof r.type!="string")throw new TypeError("missing fb.type");(!r.parameter||typeof r.parameter!="string")&&(r.parameter="")}function Oc(r){if(typeof r!="object")throw new TypeError("ext is not an object");if(r.kind!=="audio"&&r.kind!=="video")throw new TypeError("invalid ext.kind");if(!r.uri||typeof r.uri!="string")throw new TypeError("missing ext.uri");if(typeof r.preferredId!="number")throw new TypeError("missing ext.preferredId");if(r.preferredEncrypt&&typeof r.preferredEncrypt!="boolean")throw new TypeError("invalid ext.preferredEncrypt");if(r.preferredEncrypt||(r.preferredEncrypt=!1),r.direction&&typeof r.direction!="string")throw new TypeError("invalid ext.direction");r.direction||(r.direction="sendrecv")}function Nc(r){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof r!="object")throw new TypeError("codec is not an object");if(!r.mimeType||typeof r.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(r.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(typeof r.payloadType!="number")throw new TypeError("missing codec.payloadType");if(typeof r.clockRate!="number")throw new TypeError("missing codec.clockRate");t[1].toLowerCase()==="audio"?typeof r.channels!="number"&&(r.channels=1):delete r.channels,(!r.parameters||typeof r.parameters!="object")&&(r.parameters={});for(let n of Object.keys(r.parameters)){let i=r.parameters[n];if(i===void 0&&(r.parameters[n]="",i=""),typeof i!="string"&&typeof i!="number")throw new TypeError(`invalid codec parameter [key:${n}s, value:${i}]`);if(n==="apt"&&typeof i!="number")throw new TypeError("invalid codec apt parameter")}(!r.rtcpFeedback||!Array.isArray(r.rtcpFeedback))&&(r.rtcpFeedback=[]);for(let n of r.rtcpFeedback)ai(n)}function jc(r){if(typeof r!="object")throw new TypeError("ext is not an object");if(!r.uri||typeof r.uri!="string")throw new TypeError("missing ext.uri");if(typeof r.id!="number")throw new TypeError("missing ext.id");if(r.encrypt&&typeof r.encrypt!="boolean")throw new TypeError("invalid ext.encrypt");r.encrypt||(r.encrypt=!1),(!r.parameters||typeof r.parameters!="object")&&(r.parameters={});for(let e of Object.keys(r.parameters)){let t=r.parameters[e];if(t===void 0&&(r.parameters[e]="",t=""),typeof t!="string"&&typeof t!="number")throw new TypeError("invalid header extension parameter")}}function Fc(r){if(typeof r!="object")throw new TypeError("encoding is not an object");if(r.ssrc&&typeof r.ssrc!="number")throw new TypeError("invalid encoding.ssrc");if(r.rid&&typeof r.rid!="string")throw new TypeError("invalid encoding.rid");if(r.rtx&&typeof r.rtx!="object")throw new TypeError("invalid encoding.rtx");if(r.rtx&&typeof r.rtx.ssrc!="number")throw new TypeError("missing encoding.rtx.ssrc");if((!r.dtx||typeof r.dtx!="boolean")&&(r.dtx=!1),r.scalabilityMode&&typeof r.scalabilityMode!="string")throw new TypeError("invalid encoding.scalabilityMode")}function $c(r){if(typeof r!="object")throw new TypeError("rtcp is not an object");if(r.cname&&typeof r.cname!="string")throw new TypeError("invalid rtcp.cname");(!r.reducedSize||typeof r.reducedSize!="boolean")&&(r.reducedSize=!0)}function Uc(r){if(typeof r!="object")throw new TypeError("numStreams is not an object");if(typeof r.OS!="number")throw new TypeError("missing numStreams.OS");if(typeof r.MIS!="number")throw new TypeError("missing numStreams.MIS")}function ci({direction:r,extendedRtpCapabilities:e}){let t={codecs:[],headerExtensions:[]};for(let s of e.codecs){let n={kind:s.kind,mimeType:s.mimeType,preferredPayloadType:s.remotePayloadType,clockRate:s.clockRate,channels:s.channels,parameters:s.localParameters,rtcpFeedback:s.rtcpFeedback};if(t.codecs.push(n),!s.remoteRtxPayloadType)continue;let i={kind:s.kind,mimeType:`${s.kind}/rtx`,preferredPayloadType:s.remoteRtxPayloadType,clockRate:s.clockRate,parameters:{apt:s.remotePayloadType},rtcpFeedback:[]};t.codecs.push(i)}for(let s of e.headerExtensions){if(s.direction!=="sendrecv"&&s.direction!==r)continue;let n={kind:s.kind,uri:s.uri,preferredId:s.recvId,preferredEncrypt:s.encrypt??!1,direction:s.direction};t.headerExtensions.push(n)}return t}function rt(r){return r?/.+\/rtx$/i.test(r.mimeType):!1}function rs(r,e,{strict:t=!1,modify:s=!1}={}){let n=r.mimeType.toLowerCase(),i=e.mimeType.toLowerCase();if(n!==i||r.clockRate!==e.clockRate||r.channels!==e.channels)return!1;switch(n){case"video/h264":{if(t){let o=r.parameters["packetization-mode"]??0,a=e.parameters["packetization-mode"]??0;if(o!==a||!ii.isSameProfile(r.parameters,e.parameters))return!1;let c;try{c=ii.generateProfileLevelIdStringForAnswer(r.parameters,e.parameters)}catch{return!1}s&&(c?(r.parameters["profile-level-id"]=c,e.parameters["profile-level-id"]=c):(delete r.parameters["profile-level-id"],delete e.parameters["profile-level-id"]))}break}case"video/vp9":{if(t){let o=r.parameters["profile-id"]??0,a=e.parameters["profile-id"]??0;if(o!==a)return!1}break}}return!0}function qc(r,e){return!(r.kind&&e.kind&&r.kind!==e.kind||r.uri!==e.uri)}function oi(r,e){let t=[];for(let s of r.rtcpFeedback??[]){let n=(e.rtcpFeedback??[]).find(i=>i.type===s.type&&(i.parameter===s.parameter||!i.parameter&&!s.parameter));n&&t.push(n)}return t}});var di=P(ir=>{"use strict";Object.defineProperty(ir,"__esModule",{value:!0});ir.Logger=void 0;var st=vt(),nt="awaitqueue",ns=class{_debug;_warn;_error;constructor(e){e?(this._debug=st(`${nt}:${e}`),this._warn=st(`${nt}:WARN:${e}`),this._error=st(`${nt}:ERROR:${e}`)):(this._debug=st(nt),this._warn=st(`${nt}:WARN`),this._error=st(`${nt}: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}};ir.Logger=ns});var as=P(it=>{"use strict";Object.defineProperty(it,"__esModule",{value:!0});it.AwaitQueueRemovedTaskError=it.AwaitQueueStoppedError=void 0;var is=class r extends Error{constructor(e){super(e??"queue stopped"),this.name="AwaitQueueStoppedError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,r)}};it.AwaitQueueStoppedError=is;var os=class r extends Error{constructor(e){super(e??"queue task removed"),this.name="AwaitQueueRemovedTaskError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,r)}};it.AwaitQueueRemovedTaskError=os});var li=P(or=>{"use strict";Object.defineProperty(or,"__esModule",{value:!0});or.AwaitQueue=void 0;var Bc=di(),cs=as(),be=new Bc.Logger("AwaitQueue"),ds=class{pendingTasks=new Map;nextTaskId=0;constructor(){be.debug("constructor()")}get size(){return this.pendingTasks.size}async push(e,t,s){if(t=t??e.name,be.debug(`push() [name:${t}, options:%o]`,s),typeof e!="function")throw new TypeError("given task is not a function");if(t)try{Object.defineProperty(e,"name",{value:t})}catch{}return new Promise((n,i)=>{if(t&&s?.removeOngoingTasksWithSameName)for(let a of this.pendingTasks.values())a.name===t&&a.reject(new cs.AwaitQueueRemovedTaskError,{canExecuteNextTask:!1});let o={id:this.nextTaskId++,task:e,name:t,enqueuedAt:Date.now(),executedAt:void 0,completed:!1,resolve:a=>{if(o.completed)return;o.completed=!0,this.pendingTasks.delete(o.id),be.debug(`resolving task [name:${o.name}]`),n(a);let[c]=this.pendingTasks.values();c&&!c.executedAt&&this.execute(c)},reject:(a,{canExecuteNextTask:c})=>{if(!o.completed&&(o.completed=!0,this.pendingTasks.delete(o.id),be.debug(`rejecting task [name:${o.name}]: %s`,String(a)),i(a),c)){let[l]=this.pendingTasks.values();l&&!l.executedAt&&this.execute(l)}}};this.pendingTasks.set(o.id,o),this.pendingTasks.size===1&&this.execute(o)})}stop(){be.debug("stop()");for(let e of this.pendingTasks.values())be.debug(`stop() | stopping task [name:${e.name}]`),e.reject(new cs.AwaitQueueStoppedError,{canExecuteNextTask:!1})}remove(e){be.debug(`remove() [taskIdx:${e}]`);let t=Array.from(this.pendingTasks.values())[e];if(!t){be.debug(`stop() | no task with given idx [taskIdx:${e}]`);return}t.reject(new cs.AwaitQueueRemovedTaskError,{canExecuteNextTask:!0})}dump(){let e=Date.now(),t=0;return Array.from(this.pendingTasks.values()).map(s=>({idx:t++,task:s.task,name:s.name,enqueuedTime:s.executedAt?s.executedAt-s.enqueuedAt:e-s.enqueuedAt,executionTime:s.executedAt?e-s.executedAt:0}))}async execute(e){if(be.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})}}};or.AwaitQueue=ds});var pi=P(Ee=>{"use strict";Object.defineProperty(Ee,"__esModule",{value:!0});Ee.AwaitQueueRemovedTaskError=Ee.AwaitQueueStoppedError=Ee.AwaitQueue=void 0;var Wc=li();Object.defineProperty(Ee,"AwaitQueue",{enumerable:!0,get:function(){return Wc.AwaitQueue}});var ui=as();Object.defineProperty(Ee,"AwaitQueueStoppedError",{enumerable:!0,get:function(){return ui.AwaitQueueStoppedError}});Object.defineProperty(Ee,"AwaitQueueRemovedTaskError",{enumerable:!0,get:function(){return ui.AwaitQueueRemovedTaskError}})});var fi=P(ar=>{"use strict";Object.defineProperty(ar,"__esModule",{value:!0});ar.Producer=void 0;var zc=V(),hi=Z(),ot=re(),_e=new zc.Logger("Producer"),ls=class extends hi.EnhancedEventEmitter{_id;_localId;_closed=!1;_rtpSender;_track;_kind;_rtpParameters;_paused;_maxSpatialLayer;_stopTracks;_disableTrackOnPause;_zeroRtpOnPause;_appData;_observer=new hi.EnhancedEventEmitter;constructor({id:e,localId:t,rtpSender:s,track:n,rtpParameters:i,stopTracks:o,disableTrackOnPause:a,zeroRtpOnPause:c,appData:l}){super(),_e.debug("constructor()"),this._id=e,this._localId=t,this._rtpSender=s,this._track=n,this._kind=n.kind,this._rtpParameters=i,this._paused=a?!n.enabled:!1,this._maxSpatialLayer=void 0,this._stopTracks=o,this._disableTrackOnPause=a,this._zeroRtpOnPause=c,this._appData=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||(_e.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(_e.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new ot.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(_e.debug("pause()"),this._closed){_e.error("pause() | Producer closed");return}this._paused=!0,this._track&&this._disableTrackOnPause&&(this._track.enabled=!1),this._zeroRtpOnPause&&new Promise((e,t)=>{this.safeEmit("@pause",e,t)}).catch(()=>{}),this._observer.safeEmit("pause")}resume(){if(_e.debug("resume()"),this._closed){_e.error("resume() | Producer closed");return}this._paused=!1,this._track&&this._disableTrackOnPause&&(this._track.enabled=!0),this._zeroRtpOnPause&&new Promise((e,t)=>{this.safeEmit("@resume",e,t)}).catch(()=>{}),this._observer.safeEmit("resume")}async replaceTrack({track:e}){if(_e.debug("replaceTrack() [track:%o]",e),this._closed){if(e&&this._stopTracks)try{e.stop()}catch{}throw new ot.InvalidStateError("closed")}else if(e?.readyState==="ended")throw new ot.InvalidStateError("track ended");if(e===this._track){_e.debug("replaceTrack() | same track, ignored");return}await new Promise((t,s)=>{this.safeEmit("@replacetrack",e,t,s)}),this.destroyTrack(),this._track=e,this._track&&this._disableTrackOnPause&&(this._paused?this._paused&&(this._track.enabled=!1):this._track.enabled=!0),this.handleTrack()}async setMaxSpatialLayer(e){if(this._closed)throw new ot.InvalidStateError("closed");if(this._kind!=="video")throw new ot.UnsupportedError("not a video Producer");if(typeof e!="number")throw new TypeError("invalid spatialLayer");e!==this._maxSpatialLayer&&(await new Promise((t,s)=>{this.safeEmit("@setmaxspatiallayer",e,t,s)}).catch(()=>{}),this._maxSpatialLayer=e)}async setRtpEncodingParameters(e){if(this._closed)throw new ot.InvalidStateError("closed");if(typeof e!="object")throw new TypeError("invalid params");await new Promise((t,s)=>{this.safeEmit("@setrtpencodingparameters",e,t,s)})}onTrackEnded(){_e.debug('track "ended" event'),this.safeEmit("trackended"),this._observer.safeEmit("trackended")}handleTrack(){this._track&&this._track.addEventListener("ended",this.onTrackEnded)}destroyTrack(){if(this._track)try{this._track.removeEventListener("ended",this.onTrackEnded),this._stopTracks&&this._track.stop()}catch{}}};ar.Producer=ls});var gi=P(cr=>{"use strict";Object.defineProperty(cr,"__esModule",{value:!0});cr.Consumer=void 0;var Hc=V(),mi=Z(),Vc=re(),ve=new Hc.Logger("Consumer"),us=class extends mi.EnhancedEventEmitter{_id;_localId;_producerId;_closed=!1;_rtpReceiver;_track;_rtpParameters;_paused;_appData;_observer=new mi.EnhancedEventEmitter;constructor({id:e,localId:t,producerId:s,rtpReceiver:n,track:i,rtpParameters:o,appData:a}){super(),ve.debug("constructor()"),this._id=e,this._localId=t,this._producerId=s,this._rtpReceiver=n,this._track=i,this._rtpParameters=o,this._paused=!i.enabled,this._appData=a??{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get producerId(){return this._producerId}get closed(){return this._closed}get kind(){return this._track.kind}get rtpReceiver(){return this._rtpReceiver}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(ve.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(ve.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new Vc.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(ve.debug("pause()"),this._closed){ve.error("pause() | Consumer closed");return}if(this._paused){ve.debug("pause() | Consumer is already paused");return}this._paused=!0,this._track.enabled=!1,this.emit("@pause"),this._observer.safeEmit("pause")}resume(){if(ve.debug("resume()"),this._closed){ve.error("resume() | Consumer closed");return}if(!this._paused){ve.debug("resume() | Consumer is already resumed");return}this._paused=!1,this._track.enabled=!0,this.emit("@resume"),this._observer.safeEmit("resume")}onTrackEnded(){ve.debug('track "ended" event'),this.safeEmit("trackended"),this._observer.safeEmit("trackended")}handleTrack(){this._track.addEventListener("ended",this.onTrackEnded)}destroyTrack(){try{this._track.removeEventListener("ended",this.onTrackEnded),this._track.stop()}catch{}}};cr.Consumer=us});var vi=P(dr=>{"use strict";Object.defineProperty(dr,"__esModule",{value:!0});dr.DataProducer=void 0;var Gc=V(),_i=Z(),Kc=re(),Se=new Gc.Logger("DataProducer"),ps=class extends _i.EnhancedEventEmitter{_id;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new _i.EnhancedEventEmitter;constructor({id:e,dataChannel:t,sctpStreamParameters:s,appData:n}){super(),Se.debug("constructor()"),this._id=e,this._dataChannel=t,this._sctpStreamParameters=s,this._appData=n??{},this.handleDataChannel()}get id(){return this._id}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get bufferedAmount(){return this._dataChannel.bufferedAmount}get bufferedAmountLowThreshold(){return this._dataChannel.bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._dataChannel.bufferedAmountLowThreshold=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(Se.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(Se.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}send(e){if(Se.debug("send()"),this._closed)throw new Kc.InvalidStateError("closed");this._dataChannel.send(e)}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(Se.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"?Se.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):Se.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(Se.warn('DataChannel "close" event'),this._closed=!0,this.emit("@close"),this.safeEmit("close"),this._observer.safeEmit("close"))}),this._dataChannel.addEventListener("message",()=>{this._closed||Se.warn('DataChannel "message" event in a DataProducer, message discarded')}),this._dataChannel.addEventListener("bufferedamountlow",()=>{this._closed||this.safeEmit("bufferedamountlow")})}};dr.DataProducer=ps});var yi=P(lr=>{"use strict";Object.defineProperty(lr,"__esModule",{value:!0});lr.DataConsumer=void 0;var Qc=V(),wi=Z(),Oe=new Qc.Logger("DataConsumer"),hs=class extends wi.EnhancedEventEmitter{_id;_dataProducerId;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new wi.EnhancedEventEmitter;constructor({id:e,dataProducerId:t,dataChannel:s,sctpStreamParameters:n,appData:i}){super(),Oe.debug("constructor()"),this._id=e,this._dataProducerId=t,this._dataChannel=s,this._sctpStreamParameters=n,this._appData=i??{},this.handleDataChannel()}get id(){return this._id}get dataProducerId(){return this._dataProducerId}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get binaryType(){return this._dataChannel.binaryType}set binaryType(e){this._dataChannel.binaryType=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(Oe.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(Oe.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(Oe.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"?Oe.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):Oe.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(Oe.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)})}};lr.DataConsumer=hs});var Si=P(ur=>{"use strict";Object.defineProperty(ur,"__esModule",{value:!0});ur.Transport=void 0;var Jc=pi(),Yc=V(),bi=Z(),j=re(),fs=Me(),yt=ge(),Xc=fi(),Zc=gi(),ed=vi(),td=yi(),O=new Yc.Logger("Transport"),ms=class{consumerOptions;promise;resolve;reject;constructor(e){this.consumerOptions=e,this.promise=new Promise((t,s)=>{this.resolve=t,this.reject=s})}},gs=class extends bi.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 Jc.AwaitQueue;_pendingConsumerTasks=[];_consumerCreationInProgress=!1;_pendingPauseConsumers=new Map;_consumerPauseInProgress=!1;_pendingResumeConsumers=new Map;_consumerResumeInProgress=!1;_pendingCloseConsumers=new Map;_consumerCloseInProgress=!1;_observer=new bi.EnhancedEventEmitter;constructor({direction:e,id:t,iceParameters:s,iceCandidates:n,dtlsParameters:i,sctpParameters:o,iceServers:a,iceTransportPolicy:c,additionalSettings:l,appData:d,handlerFactory:u,getSendExtendedRtpCapabilities:p,recvRtpCapabilities:m,canProduceByKind:f}){super(),O.debug("constructor() [id:%s, direction:%s]",t,e),this._id=t,this._direction=e,this._getSendExtendedRtpCapabilities=p,this._recvRtpCapabilities=m,this._canProduceByKind=f,this._maxSctpMessageSize=o?.maxMessageSize;let h=fs.clone(l)??{};delete h.iceServers,delete h.iceTransportPolicy,delete h.bundlePolicy,delete h.rtcpMuxPolicy,this._handler=u.factory({direction:e,iceParameters:s,iceCandidates:n,dtlsParameters:i,sctpParameters:o,iceServers:a,iceTransportPolicy:c,additionalSettings:h,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities}),this._appData=d??{},this.handleHandler()}get id(){return this._id}get closed(){return this._closed}get direction(){return this._direction}get handler(){return this._handler}get iceGatheringState(){return this._iceGatheringState}get connectionState(){return this._connectionState}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){if(!this._closed){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 j.InvalidStateError("closed");return this._handler.getTransportStats()}async restartIce({iceParameters:e}){if(O.debug("restartIce()"),this._closed)throw new j.InvalidStateError("closed");if(!e)throw new TypeError("missing iceParameters");return this._awaitQueue.push(async()=>await this._handler.restartIce(e),"transport.restartIce()")}async updateIceServers({iceServers:e}={}){if(O.debug("updateIceServers()"),this._closed)throw new j.InvalidStateError("closed");if(!Array.isArray(e))throw new TypeError("missing iceServers");return this._awaitQueue.push(async()=>this._handler.updateIceServers(e),"transport.updateIceServers()")}async produce({track:e,streamId:t,encodings:s,codecOptions:n,headerExtensionOptions:i,codec:o,stopTracks:a=!0,disableTrackOnPause:c=!0,zeroRtpOnPause:l=!1,onRtpSender:d,appData:u={}}={}){if(O.debug("produce() [track:%o]",e),this._closed)throw new j.InvalidStateError("closed");if(e){if(this._direction!=="send")throw new j.UnsupportedError("not a sending Transport");if(this._canProduceByKind[e.kind]){if(e.readyState==="ended")throw new j.InvalidStateError("track ended");if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(this.listenerCount("produce")===0)throw new TypeError('no "produce" listener set into this transport');if(u&&typeof u!="object")throw new TypeError("if given, appData must be an object")}else throw new j.UnsupportedError(`cannot produce ${e.kind}`)}else throw new TypeError("missing track");return this._awaitQueue.push(async()=>{let p;if(s&&!Array.isArray(s))throw TypeError("encodings must be an array");s?.length===0?p=void 0:s&&(p=s.map(g=>{let v={active:!0};return g.active===!1&&(v.active=!1),typeof g.dtx=="boolean"&&(v.dtx=g.dtx),typeof g.scalabilityMode=="string"&&(v.scalabilityMode=g.scalabilityMode),typeof g.scaleResolutionDownBy=="number"&&(v.scaleResolutionDownBy=g.scaleResolutionDownBy),typeof g.maxBitrate=="number"&&(v.maxBitrate=g.maxBitrate),typeof g.maxFramerate=="number"&&(v.maxFramerate=g.maxFramerate),typeof g.adaptivePtime=="boolean"&&(v.adaptivePtime=g.adaptivePtime),typeof g.priority=="string"&&(v.priority=g.priority),typeof g.networkPriority=="string"&&(v.networkPriority=g.networkPriority),v}));let{localId:m,rtpParameters:f,rtpSender:h}=await this._handler.send({track:e,streamId:t,encodings:p,codecOptions:n,headerExtensionOptions:i,codec:o,onRtpSender:d});try{yt.validateAndNormalizeRtpParameters(f);let{id:g}=await new Promise((_,x)=>{this.safeEmit("produce",{kind:e.kind,rtpParameters:f,appData:u},_,x)}),v=new Xc.Producer({id:g,localId:m,rtpSender:h,track:e,rtpParameters:f,stopTracks:a,disableTrackOnPause:c,zeroRtpOnPause:l,appData:u});return this._producers.set(v.id,v),this.handleProducer(v),this._observer.safeEmit("newproducer",v),v}catch(g){throw this._handler.stopSending(m).catch(()=>{}),g}},"transport.produce()").catch(p=>{if(a)try{e.stop()}catch{}throw p})}async consume({id:e,producerId:t,kind:s,rtpParameters:n,streamId:i,onRtpReceiver:o,appData:a={}}){if(O.debug("consume()"),this._closed)throw new j.InvalidStateError("closed");if(this._direction!=="recv")throw new j.UnsupportedError("not a receiving Transport");if(typeof e!="string")throw new TypeError("missing id");if(typeof t!="string")throw new TypeError("missing producerId");if(s!=="audio"&&s!=="video")throw new TypeError(`invalid kind '${s}'`);if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(a&&typeof a!="object")throw new TypeError("if given, appData must be an object");let c=fs.clone(n);if(!yt.canReceive(c,this._recvRtpCapabilities))throw new j.UnsupportedError("cannot consume this Producer");let d=new ms({id:e,producerId:t,kind:s,rtpParameters:c,streamId:i,onRtpReceiver:o,appData:a});return this._pendingConsumerTasks.push(d),queueMicrotask(()=>{this._closed||this._consumerCreationInProgress===!1&&this.createPendingConsumers()}),d.promise}async produceData({ordered:e=!0,maxPacketLifeTime:t,maxRetransmits:s,label:n="",protocol:i="",appData:o={}}={}){if(O.debug("produceData()"),this._closed)throw new j.InvalidStateError("closed");if(this._direction!=="send")throw new j.UnsupportedError("not a sending Transport");if(this._maxSctpMessageSize){if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(this.listenerCount("producedata")===0)throw new TypeError('no "producedata" listener set into this transport');if(o&&typeof o!="object")throw new TypeError("if given, appData must be an object")}else throw new j.UnsupportedError("SCTP not enabled by remote Transport");return(t||s)&&(e=!1),this._awaitQueue.push(async()=>{let{dataChannel:a,sctpStreamParameters:c}=await this._handler.sendDataChannel({sctpStreamParameters:{ordered:e,maxPacketLifeTime:t,maxRetransmits:s,label:n,protocol:i}});yt.validateAndNormalizeSctpStreamParameters(c);let{id:l}=await new Promise((u,p)=>{this.safeEmit("producedata",{sctpStreamParameters:c,label:n,protocol:i,appData:o},u,p)}),d=new ed.DataProducer({id:l,dataChannel:a,sctpStreamParameters:c,appData:o});return this._dataProducers.set(d.id,d),this.handleDataProducer(d),this._observer.safeEmit("newdataproducer",d),d},"transport.produceData()")}async consumeData({id:e,dataProducerId:t,sctpStreamParameters:s,label:n="",protocol:i="",appData:o={}}){if(O.debug("consumeData()"),this._closed)throw new j.InvalidStateError("closed");if(this._direction!=="recv")throw new j.UnsupportedError("not a receiving Transport");if(this._maxSctpMessageSize){if(typeof e!="string")throw new TypeError("missing id");if(typeof t!="string")throw new TypeError("missing dataProducerId");if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(o&&typeof o!="object")throw new TypeError("if given, appData must be an object")}else throw new j.UnsupportedError("SCTP not enabled by remote Transport");let a=fs.clone(s);return yt.validateAndNormalizeSctpStreamParameters(a),this._awaitQueue.push(async()=>{let{dataChannel:c}=await this._handler.receiveDataChannel({maxMessageSize:this._maxSctpMessageSize,sctpStreamParameters:a,label:n,protocol:i}),l=new td.DataConsumer({id:e,dataProducerId:t,dataChannel:c,sctpStreamParameters:a,appData:o});return this._dataConsumers.set(l.id,l),this.handleDataConsumer(l),this._observer.safeEmit("newdataconsumer",l),l},"transport.consumeData()")}getDataChannelMaxMessageSize(){return this._handler.getDataChannelMaxMessageSize()}createPendingConsumers(){this._consumerCreationInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingConsumerTasks.length===0){O.debug("createPendingConsumers() | there is no Consumer to be created");return}let e=[...this._pendingConsumerTasks];this._pendingConsumerTasks=[];let t,s=[];for(let n of e){let{id:i,kind:o,rtpParameters:a,streamId:c,onRtpReceiver:l}=n.consumerOptions;s.push({trackId:i,kind:o,rtpParameters:a,streamId:c,onRtpReceiver:l})}try{let n=await this._handler.receive(s);for(let i=0;i<n.length;++i){let o=e[i],a=n[i],{id:c,producerId:l,kind:d,rtpParameters:u,appData:p}=o.consumerOptions,{localId:m,rtpReceiver:f,track:h}=a,g=new Zc.Consumer({id:c,localId:m,producerId:l,rtpReceiver:f,track:h,rtpParameters:u,appData:p});this._consumers.set(g.id,g),this.handleConsumer(g),!this._probatorConsumerCreated&&!t&&d==="video"&&(t=g),this._observer.safeEmit("newconsumer",g),o.resolve(g)}}catch(n){for(let i of e)i.reject(n)}if(t)try{let n=yt.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(s=>s.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(s=>s.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},s,n)=>{if(this._closed){n(new j.InvalidStateError("closed"));return}this.safeEmit("connect",{dtlsParameters:t},s,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,s)=>{this._awaitQueue.push(async()=>await this._handler.pauseSending(e.localId),"producer @pause event").then(t).catch(s)}),e.on("@resume",(t,s)=>{this._awaitQueue.push(async()=>await this._handler.resumeSending(e.localId),"producer @resume event").then(t).catch(s)}),e.on("@replacetrack",(t,s,n)=>{this._awaitQueue.push(async()=>await this._handler.replaceTrack(e.localId,t),"producer @replacetrack event").then(s).catch(n)}),e.on("@setmaxspatiallayer",(t,s,n)=>{this._awaitQueue.push(async()=>await this._handler.setMaxSpatialLayer(e.localId,t),"producer @setmaxspatiallayer event").then(s).catch(n)}),e.on("@setrtpencodingparameters",(t,s,n)=>{this._awaitQueue.push(async()=>await this._handler.setRtpEncodingParameters(e.localId,t),"producer @setrtpencodingparameters event").then(s).catch(n)}),e.on("@getstats",(t,s)=>{if(this._closed)return s(new j.InvalidStateError("closed"));this._handler.getSenderStats(e.localId).then(t).catch(s)})}handleConsumer(e){e.on("@close",()=>{this._consumers.delete(e.id),this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.delete(e.id),!this._closed&&(this._pendingCloseConsumers.set(e.id,e),this._consumerCloseInProgress===!1&&this.closePendingConsumers())}),e.on("@pause",()=>{this._pendingResumeConsumers.has(e.id)&&this._pendingResumeConsumers.delete(e.id),this._pendingPauseConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerPauseInProgress===!1&&this.pausePendingConsumers()})}),e.on("@resume",()=>{this._pendingPauseConsumers.has(e.id)&&this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerResumeInProgress===!1&&this.resumePendingConsumers()})}),e.on("@getstats",(t,s)=>{if(this._closed)return s(new j.InvalidStateError("closed"));this._handler.getReceiverStats(e.localId).then(t).catch(s)})}handleDataProducer(e){e.on("@close",()=>{this._dataProducers.delete(e.id)})}handleDataConsumer(e){e.on("@close",()=>{this._dataConsumers.delete(e.id)})}};ur.Transport=gs});var pr=P((cp,Ci)=>{"use strict";var Ri=Ci.exports={v:[{name:"version",reg:/^(\d*)$/}],o:[{name:"origin",reg:/^(\S*) (\d*) (\d*) (\S*) IP(\d) (\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\d*) (\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\d) (\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\w*) (\d*) ([\w/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\d*) ([\w\-.]*)(?:\s*\/(\d*)(?:\s*\/(\S*))?)?/,names:["payload","codec","rate","encoding"],format:function(r){return r.encoding?"rtpmap:%d %s/%s/%s":r.rate?"rtpmap:%d %s/%s":"rtpmap:%d %s"}},{push:"fmtp",reg:/^fmtp:(\d*) ([\S| ]*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\d*)(?: (\S*) IP(\d) (\S*))?/,names:["port","netType","ipVer","address"],format:function(r){return r.address!=null?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\*|\d*) trr-int (\d*)/,names:["payload","value"],format:"rtcp-fb:%s trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,names:["payload","type","subtype"],format:function(r){return r.subtype!=null?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:(\d+)(?:\/(\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\S*)(?: (\S*))?/,names:["value","direction","encrypt-uri","uri","config"],format:function(r){return"extmap:%d"+(r.direction?"/%s":"%v")+(r["encrypt-uri"]?" %s":"%v")+" %s"+(r.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(r){return r.sessionConfig!=null?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\w*)/,format:"setup:%s"},{name:"connectionType",reg:/^connection:(new|existing)/,format:"connection:%s"},{name:"mid",reg:/^mid:([^\s]*)/,format:"mid:%s"},{push:"msid",reg:/^msid:([\w-]+)(?: ([\w-]+))?/,names:["id","appdata"],format:"msid:%s %s"},{name:"ptime",reg:/^ptime:(\d*(?:\.\d*)*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\d*(?:\.\d*)*)/,format:"maxptime:%d"},{name:"direction",reg:/^(sendrecv|recvonly|sendonly|inactive)/},{name:"icelite",reg:/^(ice-lite)/},{name:"iceUfrag",reg:/^ice-ufrag:(\S*)/,format:"ice-ufrag:%s"},{name:"icePwd",reg:/^ice-pwd:(\S*)/,format:"ice-pwd:%s"},{name:"fingerprint",reg:/^fingerprint:(\S*) (\S*)/,names:["type","hash"],format:"fingerprint:%s %s"},{push:"candidates",reg:/^candidate:(\S*) (\d*) (\S*) (\d*) (\S*) (\d*) typ (\S*)(?: raddr (\S*) rport (\d*))?(?: tcptype (\S*))?(?: generation (\d*))?(?: network-id (\d*))?(?: network-cost (\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","tcptype","generation","network-id","network-cost"],format:function(r){var e="candidate:%s %d %s %d %s %d typ %s";return e+=r.raddr!=null?" raddr %s rport %d":"%v%v",e+=r.tcptype!=null?" tcptype %s":"%v",r.generation!=null&&(e+=" generation %d"),e+=r["network-id"]!=null?" network-id %d":"%v",e+=r["network-cost"]!=null?" network-cost %d":"%v",e}},{name:"endOfCandidates",reg:/^(end-of-candidates)/},{name:"remoteCandidates",reg:/^remote-candidates:(.*)/,format:"remote-candidates:%s"},{name:"iceOptions",reg:/^ice-options:(\S*)/,format:"ice-options:%s"},{push:"ssrcs",reg:/^ssrc:(\d*) ([\w_-]*)(?::(.*))?/,names:["id","attribute","value"],format:function(r){var e="ssrc:%d";return r.attribute!=null&&(e+=" %s",r.value!=null&&(e+=":%s")),e}},{push:"ssrcGroups",reg:/^ssrc-group:([\x21\x23\x24\x25\x26\x27\x2A\x2B\x2D\x2E\w]*) (.*)/,names:["semantics","ssrcs"],format:"ssrc-group:%s %s"},{name:"msidSemantic",reg:/^msid-semantic:\s?(\w*) (\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{name:"rtcpRsize",reg:/^(rtcp-rsize)/},{name:"sctpmap",reg:/^sctpmap:([\w_/]*) (\S*)(?: (\S*))?/,names:["sctpmapNumber","app","maxMessageSize"],format:function(r){return r.maxMessageSize!=null?"sctpmap:%s %s %s":"sctpmap:%s %s"}},{name:"xGoogleFlag",reg:/^x-google-flag:([^\s]*)/,format:"x-google-flag:%s"},{push:"rids",reg:/^rid:([\d\w]+) (\w+)(?: ([\S| ]*))?/,names:["id","direction","params"],format:function(r){return r.params?"rid:%s %s %s":"rid:%s %s"}},{push:"imageattrs",reg:new RegExp("^imageattr:(\\d+|\\*)[\\s\\t]+(send|recv)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*)(?:[\\s\\t]+(recv|send)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*))?"),names:["pt","dir1","attrs1","dir2","attrs2"],format:function(r){return"imageattr:%s %s %s"+(r.dir2?" %s %s":"")}},{name:"simulcast",reg:new RegExp("^simulcast:(send|recv) ([a-zA-Z0-9\\-_~;,]+)(?:\\s?(send|recv) ([a-zA-Z0-9\\-_~;,]+))?$"),names:["dir1","list1","dir2","list2"],format:function(r){return"simulcast:%s %s"+(r.dir2?" %s %s":"")}},{name:"simulcast_03",reg:/^simulcast:[\s\t]+([\S+\s\t]+)$/,names:["value"],format:"simulcast: %s"},{name:"framerate",reg:/^framerate:(\d+(?:$|\.\d+))/,format:"framerate:%s"},{name:"sourceFilter",reg:/^source-filter: *(excl|incl) (\S*) (IP4|IP6|\*) (\S*) (.*)/,names:["filterMode","netType","addressTypes","destAddress","srcList"],format:"source-filter: %s %s %s %s %s"},{name:"bundleOnly",reg:/^(bundle-only)/},{name:"label",reg:/^label:(.+)/,format:"label:%s"},{name:"sctpPort",reg:/^sctp-port:(\d+)$/,format:"sctp-port:%s"},{name:"maxMessageSize",reg:/^max-message-size:(\d+)$/,format:"max-message-size:%s"},{push:"tsRefClocks",reg:/^ts-refclk:([^\s=]*)(?:=(\S*))?/,names:["clksrc","clksrcExt"],format:function(r){return"ts-refclk:%s"+(r.clksrcExt!=null?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(r){var e="mediaclk:";return e+=r.id!=null?"id=%s %s":"%v%s",e+=r.mediaClockValue!=null?"=%s":"",e+=r.rateNumerator!=null?" rate=%s":"",e+=r.rateDenominator!=null?"/%s":"",e}},{name:"keywords",reg:/^keywds:(.+)$/,format:"keywds:%s"},{name:"content",reg:/^content:(.+)/,format:"content:%s"},{name:"bfcpFloorCtrl",reg:/^floorctrl:(c-only|s-only|c-s)/,format:"floorctrl:%s"},{name:"bfcpConfId",reg:/^confid:(\d+)/,format:"confid:%s"},{name:"bfcpUserId",reg:/^userid:(\d+)/,format:"userid:%s"},{name:"bfcpFloorId",reg:/^floorid:(.+) (?:m-stream|mstrm):(.+)/,names:["id","mStream"],format:"floorid:%s mstrm:%s"},{push:"invalid",names:["value"]}]};Object.keys(Ri).forEach(function(r){var e=Ri[r];e.forEach(function(t){t.reg||(t.reg=/(.*)/),t.format||(t.format="%s")})})});var Ei=P(Re=>{"use strict";var at=function(r){return String(Number(r))===r?Number(r):r},rd=function(r,e,t,s){if(s&&!t)e[s]=at(r[1]);else for(var n=0;n<t.length;n+=1)r[n+1]!=null&&(e[t[n]]=at(r[n+1]))},sd=function(r,e,t){var s=r.name&&r.names;r.push&&!e[r.push]?e[r.push]=[]:s&&!e[r.name]&&(e[r.name]={});var n=r.push?{}:s?e[r.name]:e;rd(t.match(r.reg),n,r.names,r.name),r.push&&e[r.push].push(n)},Ti=pr(),nd=RegExp.prototype.test.bind(/^([a-z])=(.*)/);Re.parse=function(r){var e={},t=[],s=e;return r.split(/(\r\n|\r|\n)/).filter(nd).forEach(function(n){var i=n[0],o=n.slice(2);i==="m"&&(t.push({rtp:[],fmtp:[]}),s=t[t.length-1]);for(var a=0;a<(Ti[i]||[]).length;a+=1){var c=Ti[i][a];if(c.reg.test(o))return sd(c,s,o)}}),e.media=t,e};var ki=function(r,e){var t=e.split(/=(.+)/,2);return t.length===2?r[t[0]]=at(t[1]):t.length===1&&e.length>1&&(r[t[0]]=void 0),r};Re.parseParams=function(r){return r.split(/;\s?/).reduce(ki,{})};Re.parseFmtpConfig=Re.parseParams;Re.parsePayloads=function(r){return r.toString().split(" ").map(Number)};Re.parseRemoteCandidates=function(r){for(var e=[],t=r.split(" ").map(at),s=0;s<t.length;s+=3)e.push({component:t[s],ip:t[s+1],port:t[s+2]});return e};Re.parseImageAttributes=function(r){return r.split(" ").map(function(e){return e.substring(1,e.length-1).split(",").reduce(ki,{})})};Re.parseSimulcastStreamList=function(r){return r.split(";").map(function(e){return e.split(",").map(function(t){var s,n=!1;return t[0]!=="~"?s=at(t):(s=at(t.substring(1,t.length)),n=!0),{scid:s,paused:n}})})}});var xi=P((lp,Pi)=>{"use strict";var _s=pr(),id=/%[sdv%]/g,od=function(r){var e=1,t=arguments,s=t.length;return r.replace(id,function(n){if(e>=s)return n;var i=t[e];switch(e+=1,n){case"%%":return"%";case"%s":return String(i);case"%d":return Number(i);case"%v":return""}})},bt=function(r,e,t){var s=e.format instanceof Function?e.format(e.push?t:t[e.name]):e.format,n=[r+"="+s];if(e.names)for(var i=0;i<e.names.length;i+=1){var o=e.names[i];e.name?n.push(t[e.name][o]):n.push(t[e.names[i]])}else n.push(t[e.name]);return od.apply(null,n)},ad=["v","o","s","i","u","e","p","c","b","t","r","z","a"],cd=["i","c","b","a"];Pi.exports=function(r,e){e=e||{},r.version==null&&(r.version=0),r.name==null&&(r.name=" "),r.media.forEach(function(i){i.payloads==null&&(i.payloads="")});var t=e.outerOrder||ad,s=e.innerOrder||cd,n=[];return t.forEach(function(i){_s[i].forEach(function(o){o.name in r&&r[o.name]!=null?n.push(bt(i,o,r)):o.push in r&&r[o.push]!=null&&r[o.push].forEach(function(a){n.push(bt(i,o,a))})})}),r.media.forEach(function(i){n.push(bt("m",_s.m[0],i)),s.forEach(function(o){_s[o].forEach(function(a){a.name in i&&i[a.name]!=null?n.push(bt(o,a,i)):a.push in i&&i[a.push]!=null&&i[a.push].forEach(function(c){n.push(bt(o,a,c))})})})}),n.join(`\r
|
|
1
|
+
var Ha=Object.create;var en=Object.defineProperty;var Va=Object.getOwnPropertyDescriptor;var Ga=Object.getOwnPropertyNames;var Ka=Object.getPrototypeOf,Qa=Object.prototype.hasOwnProperty;var P=(r,e)=>()=>{try{return e||r((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}};var Ja=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Ga(e))!Qa.call(r,n)&&n!==t&&en(r,n,{get:()=>e[n],enumerable:!(s=Va(e,n))||s.enumerable});return r};var tn=(r,e,t)=>(t=r!=null?Ha(Ka(r)):{},Ja(e||!r||!r.__esModule?en(t,"default",{value:r,enumerable:!0}):t,r));var On=P(($u,An)=>{"use strict";var Ve=1e3,Ge=Ve*60,Ke=Ge*60,Le=Ke*24,No=Le*7,jo=Le*365.25;An.exports=function(r,e){e=e||{};var t=typeof r;if(t==="string"&&r.length>0)return Fo(r);if(t==="number"&&isFinite(r))return e.long?Uo(r):$o(r);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(r))};function Fo(r){if(r=String(r),!(r.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(r);if(e){var t=parseFloat(e[1]),s=(e[2]||"ms").toLowerCase();switch(s){case"years":case"year":case"yrs":case"yr":case"y":return t*jo;case"weeks":case"week":case"w":return t*No;case"days":case"day":case"d":return t*Le;case"hours":case"hour":case"hrs":case"hr":case"h":return t*Ke;case"minutes":case"minute":case"mins":case"min":case"m":return t*Ge;case"seconds":case"second":case"secs":case"sec":case"s":return t*Ve;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:return}}}}function $o(r){var e=Math.abs(r);return e>=Le?Math.round(r/Le)+"d":e>=Ke?Math.round(r/Ke)+"h":e>=Ge?Math.round(r/Ge)+"m":e>=Ve?Math.round(r/Ve)+"s":r+"ms"}function Uo(r){var e=Math.abs(r);return e>=Le?Zt(r,e,Le,"day"):e>=Ke?Zt(r,e,Ke,"hour"):e>=Ge?Zt(r,e,Ge,"minute"):e>=Ve?Zt(r,e,Ve,"second"):r+" ms"}function Zt(r,e,t,s){var n=e>=t*1.5;return Math.round(r/t)+" "+s+(n?"s":"")}});var jn=P((Uu,Nn)=>{"use strict";function qo(r){t.debug=t,t.default=t,t.coerce=c,t.disable=a,t.enable=n,t.enabled=o,t.humanize=On(),t.destroy=l,Object.keys(r).forEach(d=>{t[d]=r[d]}),t.names=[],t.skips=[],t.formatters={};function e(d){let u=0;for(let p=0;p<d.length;p++)u=(u<<5)-u+d.charCodeAt(p),u|=0;return t.colors[Math.abs(u)%t.colors.length]}t.selectColor=e;function t(d){let u,p=null,m,f;function h(...g){if(!h.enabled)return;let w=h,R=Number(new Date),x=R-(u||R);w.diff=x,w.prev=u,w.curr=R,u=R,g[0]=t.coerce(g[0]),typeof g[0]!="string"&&g.unshift("%O");let _=0;g[0]=g[0].replace(/%([a-zA-Z%])/g,(D,F)=>{if(D==="%%")return"%";_++;let z=t.formatters[F];if(typeof z=="function"){let N=g[_];D=z.call(w,N),g.splice(_,1),_--}return D}),t.formatArgs.call(w,g),(w.log||t.log).apply(w,g)}return h.namespace=d,h.useColors=t.useColors(),h.color=t.selectColor(d),h.extend=s,h.destroy=t.destroy,Object.defineProperty(h,"enabled",{enumerable:!0,configurable:!1,get:()=>p!==null?p:(m!==t.namespaces&&(m=t.namespaces,f=t.enabled(d)),f),set:g=>{p=g}}),typeof t.init=="function"&&t.init(h),h}function s(d,u){let p=t(this.namespace+(typeof u>"u"?":":u)+d);return p.log=this.log,p}function n(d){t.save(d),t.namespaces=d,t.names=[],t.skips=[];let u=(typeof d=="string"?d:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let p of u)p[0]==="-"?t.skips.push(p.slice(1)):t.names.push(p)}function i(d,u){let p=0,m=0,f=-1,h=0;for(;p<d.length;)if(m<u.length&&(u[m]===d[p]||u[m]==="*"))u[m]==="*"?(f=m,h=p,m++):(p++,m++);else if(f!==-1)m=f+1,h++,p=h;else return!1;for(;m<u.length&&u[m]==="*";)m++;return m===u.length}function a(){let d=[...t.names,...t.skips.map(u=>"-"+u)].join(",");return t.enable(""),d}function o(d){for(let u of t.skips)if(i(d,u))return!1;for(let u of t.names)if(i(d,u))return!0;return!1}function c(d){return d instanceof Error?d.stack||d.message:d}function l(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.enable(t.load()),t}Nn.exports=qo});var vt=P((X,er)=>{"use strict";X.formatArgs=Wo;X.save=zo;X.load=Ho;X.useColors=Bo;X.storage=Vo();X.destroy=(()=>{let r=!1;return()=>{r||(r=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();X.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 Bo(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let r;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(r=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(r[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function Wo(r){if(r[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+r[0]+(this.useColors?"%c ":" ")+"+"+er.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;r.splice(1,0,e,"color: inherit");let t=0,s=0;r[0].replace(/%[a-zA-Z%]/g,n=>{n!=="%%"&&(t++,n==="%c"&&(s=t))}),r.splice(s,0,e)}X.log=console.debug||console.log||(()=>{});function zo(r){try{r?X.storage.setItem("debug",r):X.storage.removeItem("debug")}catch{}}function Ho(){let r;try{r=X.storage.getItem("debug")||X.storage.getItem("DEBUG")}catch{}return!r&&typeof process<"u"&&"env"in process&&(r=process.env.DEBUG),r}function Vo(){try{return localStorage}catch{}}er.exports=jn()(X);var{formatters:Go}=er.exports;Go.j=function(r){try{return JSON.stringify(r)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var $n=P(Fn=>{"use strict";Object.defineProperty(Fn,"__esModule",{value:!0})});var V=P(tr=>{"use strict";Object.defineProperty(tr,"__esModule",{value:!0});tr.Logger=void 0;var Qe=vt(),Je="media-client",Yr=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,Qe.default)(`${Je}:${e}`),this._warn=(0,Qe.default)(`${Je}:WARN:${e}`),this._error=(0,Qe.default)(`${Je}:ERROR:${e}`)):(this._debug=(0,Qe.default)(Je),this._warn=(0,Qe.default)(`${Je}:WARN`),this._error=(0,Qe.default)(`${Je}: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}};tr.Logger=Yr});var Jn=P((Wu,Xr)=>{"use strict";var Ye=typeof Reflect=="object"?Reflect:null,Un=Ye&&typeof Ye.apply=="function"?Ye.apply:function(e,t,s){return Function.prototype.apply.call(e,t,s)},rr;Ye&&typeof Ye.ownKeys=="function"?rr=Ye.ownKeys:Object.getOwnPropertySymbols?rr=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:rr=function(e){return Object.getOwnPropertyNames(e)};function Ko(r){console&&console.warn&&console.warn(r)}var Bn=Number.isNaN||function(e){return e!==e};function L(){L.init.call(this)}Xr.exports=L;Xr.exports.once=Xo;L.EventEmitter=L;L.prototype._events=void 0;L.prototype._eventsCount=0;L.prototype._maxListeners=void 0;var qn=10;function sr(r){if(typeof r!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof r)}Object.defineProperty(L,"defaultMaxListeners",{enumerable:!0,get:function(){return qn},set:function(r){if(typeof r!="number"||r<0||Bn(r))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+r+".");qn=r}});L.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};L.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||Bn(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 Wn(r){return r._maxListeners===void 0?L.defaultMaxListeners:r._maxListeners}L.prototype.getMaxListeners=function(){return Wn(this)};L.prototype.emit=function(e){for(var t=[],s=1;s<arguments.length;s++)t.push(arguments[s]);var n=e==="error",i=this._events;if(i!==void 0)n=n&&i.error===void 0;else if(!n)return!1;if(n){var a;if(t.length>0&&(a=t[0]),a instanceof Error)throw a;var o=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw o.context=a,o}var c=i[e];if(c===void 0)return!1;if(typeof c=="function")Un(c,this,t);else for(var l=c.length,d=Kn(c,l),s=0;s<l;++s)Un(d[s],this,t);return!0};function zn(r,e,t,s){var n,i,a;if(sr(t),i=r._events,i===void 0?(i=r._events=Object.create(null),r._eventsCount=0):(i.newListener!==void 0&&(r.emit("newListener",e,t.listener?t.listener:t),i=r._events),a=i[e]),a===void 0)a=i[e]=t,++r._eventsCount;else if(typeof a=="function"?a=i[e]=s?[t,a]:[a,t]:s?a.unshift(t):a.push(t),n=Wn(r),n>0&&a.length>n&&!a.warned){a.warned=!0;var o=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");o.name="MaxListenersExceededWarning",o.emitter=r,o.type=e,o.count=a.length,Ko(o)}return r}L.prototype.addListener=function(e,t){return zn(this,e,t,!1)};L.prototype.on=L.prototype.addListener;L.prototype.prependListener=function(e,t){return zn(this,e,t,!0)};function Qo(){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 Hn(r,e,t){var s={fired:!1,wrapFn:void 0,target:r,type:e,listener:t},n=Qo.bind(s);return n.listener=t,s.wrapFn=n,n}L.prototype.once=function(e,t){return sr(t),this.on(e,Hn(this,e,t)),this};L.prototype.prependOnceListener=function(e,t){return sr(t),this.prependListener(e,Hn(this,e,t)),this};L.prototype.removeListener=function(e,t){var s,n,i,a,o;if(sr(t),n=this._events,n===void 0)return this;if(s=n[e],s===void 0)return this;if(s===t||s.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete n[e],n.removeListener&&this.emit("removeListener",e,s.listener||t));else if(typeof s!="function"){for(i=-1,a=s.length-1;a>=0;a--)if(s[a]===t||s[a].listener===t){o=s[a].listener,i=a;break}if(i<0)return this;i===0?s.shift():Jo(s,i),s.length===1&&(n[e]=s[0]),n.removeListener!==void 0&&this.emit("removeListener",e,o||t)}return this};L.prototype.off=L.prototype.removeListener;L.prototype.removeAllListeners=function(e){var t,s,n;if(s=this._events,s===void 0)return this;if(s.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):s[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete s[e]),this;if(arguments.length===0){var i=Object.keys(s),a;for(n=0;n<i.length;++n)a=i[n],a!=="removeListener"&&this.removeAllListeners(a);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(t=s[e],typeof t=="function")this.removeListener(e,t);else if(t!==void 0)for(n=t.length-1;n>=0;n--)this.removeListener(e,t[n]);return this};function Vn(r,e,t){var s=r._events;if(s===void 0)return[];var n=s[e];return n===void 0?[]:typeof n=="function"?t?[n.listener||n]:[n]:t?Yo(n):Kn(n,n.length)}L.prototype.listeners=function(e){return Vn(this,e,!0)};L.prototype.rawListeners=function(e){return Vn(this,e,!1)};L.listenerCount=function(r,e){return typeof r.listenerCount=="function"?r.listenerCount(e):Gn.call(r,e)};L.prototype.listenerCount=Gn;function Gn(r){var e=this._events;if(e!==void 0){var t=e[r];if(typeof t=="function")return 1;if(t!==void 0)return t.length}return 0}L.prototype.eventNames=function(){return this._eventsCount>0?rr(this._events):[]};function Kn(r,e){for(var t=new Array(e),s=0;s<e;++s)t[s]=r[s];return t}function Jo(r,e){for(;e+1<r.length;e++)r[e]=r[e+1];r.pop()}function Yo(r){for(var e=new Array(r.length),t=0;t<e.length;++t)e[t]=r[t].listener||r[t];return e}function Xo(r,e){return new Promise(function(t,s){function n(a){r.removeListener(e,i),s(a)}function i(){typeof r.removeListener=="function"&&r.removeListener("error",n),t([].slice.call(arguments))}Qn(r,e,i,{once:!0}),e!=="error"&&Zo(r,n,{once:!0})})}function Zo(r,e,t){typeof r.on=="function"&&Qn(r,"error",e,t)}function Qn(r,e,t,s){if(typeof r.on=="function")s.once?r.once(e,t):r.on(e,t);else if(typeof r.addEventListener=="function")r.addEventListener(e,function n(i){s.once&&r.removeEventListener(e,n),t(i)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof r)}});var Z=P(nr=>{"use strict";Object.defineProperty(nr,"__esModule",{value:!0});nr.EnhancedEventEmitter=void 0;var ec=Jn(),tc=V(),rc=new tc.Logger("EnhancedEventEmitter"),Zr=class extends ec.EventEmitter{constructor(){super(),this.setMaxListeners(1/0)}close(){super.removeAllListeners()}emit(e,...t){return super.emit(e,...t)}safeEmit(e,...t){try{return super.emit(e,...t)}catch(s){rc.error("safeEmit() | event listener threw an error [eventName:%s]:%o",e,s);try{super.emit("listenererror",e,s)}catch{}return!!super.listenerCount(e)}}on(e,t){return super.on(e,t),this}off(e,t){return super.off(e,t),this}addListener(e,t){return super.on(e,t),this}prependListener(e,t){return super.prependListener(e,t),this}once(e,t){return super.once(e,t),this}prependOnceListener(e,t){return super.prependOnceListener(e,t),this}removeListener(e,t){return super.off(e,t),this}removeAllListeners(e){return super.removeAllListeners(e),this}listenerCount(e){return super.listenerCount(e)}listeners(e){return super.listeners(e)}rawListeners(e){return super.rawListeners(e)}};nr.EnhancedEventEmitter=Zr});var re=P(Xe=>{"use strict";Object.defineProperty(Xe,"__esModule",{value:!0});Xe.InvalidStateError=Xe.UnsupportedError=void 0;var es=class r extends Error{constructor(e){super(e),this.name="UnsupportedError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,r):this.stack=new Error(e).stack}};Xe.UnsupportedError=es;var ts=class r extends Error{constructor(e){super(e),this.name="InvalidStateError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,r):this.stack=new Error(e).stack}};Xe.InvalidStateError=ts});var Me=P(wt=>{"use strict";Object.defineProperty(wt,"__esModule",{value:!0});wt.clone=sc;wt.generateRandomNumber=nc;wt.deepFreeze=Yn;function sc(r){if(r!==void 0)return Number.isNaN(r)?NaN:typeof structuredClone=="function"?structuredClone(r):JSON.parse(JSON.stringify(r))}function nc(){return Math.round(Math.random()*1e7)}function Yn(r){let e=Reflect.ownKeys(r);for(let t of e){let s=r[t];(s&&typeof s=="object"||typeof s=="function")&&Yn(s)}return Object.freeze(r)}});var Xn=P(ir=>{"use strict";Object.defineProperty(ir,"__esModule",{value:!0});ir.Logger=void 0;var Ze=vt(),et="h264-profile-level-id",rs=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,Ze.default)(`${et}:${e}`),this._warn=(0,Ze.default)(`${et}:WARN:${e}`),this._error=(0,Ze.default)(`${et}:ERROR:${e}`)):(this._debug=(0,Ze.default)(et),this._warn=(0,Ze.default)(`${et}:WARN`),this._error=(0,Ze.default)(`${et}: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}};ir.Logger=rs});var ni=P($=>{"use strict";Object.defineProperty($,"__esModule",{value:!0});$.ProfileLevelId=$.Level=$.Profile=void 0;$.parseProfileLevelId=ri;$.profileLevelIdToString=si;$.profileToString=cc;$.levelToString=dc;$.parseSdpProfileLevelId=Ae;$.isSameProfile=lc;$.isSameProfileAndLevel=uc;$.generateProfileLevelIdStringForAnswer=pc;$.supportedLevel=hc;var ic=Xn(),pe=new ic.Logger,M;(function(r){r[r.ConstrainedBaseline=1]="ConstrainedBaseline",r[r.Baseline=2]="Baseline",r[r.Main=3]="Main",r[r.ConstrainedHigh=4]="ConstrainedHigh",r[r.High=5]="High",r[r.PredictiveHigh444=6]="PredictiveHigh444"})(M||($.Profile=M={}));var y;(function(r){r[r.L1_b=0]="L1_b",r[r.L1=10]="L1",r[r.L1_1=11]="L1_1",r[r.L1_2=12]="L1_2",r[r.L1_3=13]="L1_3",r[r.L2=20]="L2",r[r.L2_1=21]="L2_1",r[r.L2_2=22]="L2_2",r[r.L3=30]="L3",r[r.L3_1=31]="L3_1",r[r.L3_2=32]="L3_2",r[r.L4=40]="L4",r[r.L4_1=41]="L4_1",r[r.L4_2=42]="L4_2",r[r.L5=50]="L5",r[r.L5_1=51]="L5_1",r[r.L5_2=52]="L5_2"})(y||($.Level=y={}));var tt=class{profile;level;constructor(e,t){this.profile=e,this.level=t}};$.ProfileLevelId=tt;var ac=new tt(M.ConstrainedBaseline,y.L3_1),le=class{mask;masked_value;constructor(e){this.mask=~ei("x",e),this.masked_value=ei("1",e)}isMatch(e){return this.masked_value===(e&this.mask)}},ue=class{profile_idc;profile_iop;profile;constructor(e,t,s){this.profile_idc=e,this.profile_iop=t,this.profile=s}},oc=[new ue(66,new le("x1xx0000"),M.ConstrainedBaseline),new ue(77,new le("1xxx0000"),M.ConstrainedBaseline),new ue(88,new le("11xx0000"),M.ConstrainedBaseline),new ue(66,new le("x0xx0000"),M.Baseline),new ue(88,new le("10xx0000"),M.Baseline),new ue(77,new le("0x0x0000"),M.Main),new ue(100,new le("00000000"),M.High),new ue(100,new le("00001100"),M.ConstrainedHigh),new ue(244,new le("00000000"),M.PredictiveHigh444)],Zn=[{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:y.L1},{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:y.L1_b},{max_macroblocks_per_second:3e3,max_macroblock_frame_size:396,level:y.L1_1},{max_macroblocks_per_second:6e3,max_macroblock_frame_size:396,level:y.L1_2},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:y.L1_3},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:y.L2},{max_macroblocks_per_second:19800,max_macroblock_frame_size:792,level:y.L2_1},{max_macroblocks_per_second:20250,max_macroblock_frame_size:1620,level:y.L2_2},{max_macroblocks_per_second:40500,max_macroblock_frame_size:1620,level:y.L3},{max_macroblocks_per_second:108e3,max_macroblock_frame_size:3600,level:y.L3_1},{max_macroblocks_per_second:216e3,max_macroblock_frame_size:5120,level:y.L3_2},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:y.L4},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:y.L4_1},{max_macroblocks_per_second:522240,max_macroblock_frame_size:8704,level:y.L4_2},{max_macroblocks_per_second:589824,max_macroblock_frame_size:22080,level:y.L5},{max_macroblocks_per_second:983040,max_macroblock_frame_size:36864,level:y.L5_1},{max_macroblocks_per_second:2073600,max_macroblock_frame_size:36864,level:y.L5_2}];function ri(r){if(typeof r!="string"||r.length!==6)return;let t=parseInt(r,16);if(t===0)return;let s=t&255,n=t>>8&255,i=t>>16&255,a;switch(s){case y.L1_1:{a=(n&16)!==0?y.L1_b:y.L1_1;break}case y.L1:case y.L1_2:case y.L1_3:case y.L2:case y.L2_1:case y.L2_2:case y.L3:case y.L3_1:case y.L3_2:case y.L4:case y.L4_1:case y.L4_2:case y.L5:case y.L5_1:case y.L5_2:{a=s;break}default:{pe.warn(`parseProfileLevelId() | unrecognized level_idc [str:${r}, level_idc:${s}]`);return}}for(let o of oc)if(i===o.profile_idc&&o.profile_iop.isMatch(n))return pe.debug(`parseProfileLevelId() | result [str:${r}, profile:${o.profile}, level:${a}]`),new tt(o.profile,a);pe.warn(`parseProfileLevelId() | unrecognized profile_idc/profile_iop combination [str:${r}, profile_idc:${i}, profile_iop:${n}]`)}function si(r){if(r.level==y.L1_b)switch(r.profile){case M.ConstrainedBaseline:return"42f00b";case M.Baseline:return"42100b";case M.Main:return"4d100b";default:{pe.warn(`profileLevelIdToString() | Level 1_b not is allowed for profile ${r.profile}`);return}}let e;switch(r.profile){case M.ConstrainedBaseline:{e="42e0";break}case M.Baseline:{e="4200";break}case M.Main:{e="4d00";break}case M.ConstrainedHigh:{e="640c";break}case M.High:{e="6400";break}case M.PredictiveHigh444:{e="f400";break}default:{pe.warn(`profileLevelIdToString() | unrecognized profile ${r.profile}`);return}}let t=r.level.toString(16);return t.length===1&&(t=`0${t}`),`${e}${t}`}function cc(r){switch(r){case M.ConstrainedBaseline:return"ConstrainedBaseline";case M.Baseline:return"Baseline";case M.Main:return"Main";case M.ConstrainedHigh:return"ConstrainedHigh";case M.High:return"High";case M.PredictiveHigh444:return"PredictiveHigh444";default:{pe.warn(`profileToString() | unrecognized profile ${r}`);return}}}function dc(r){switch(r){case y.L1_b:return"1b";case y.L1:return"1";case y.L1_1:return"1.1";case y.L1_2:return"1.2";case y.L1_3:return"1.3";case y.L2:return"2";case y.L2_1:return"2.1";case y.L2_2:return"2.2";case y.L3:return"3";case y.L3_1:return"3.1";case y.L3_2:return"3.2";case y.L4:return"4";case y.L4_1:return"4.1";case y.L4_2:return"4.2";case y.L5:return"5";case y.L5_1:return"5.1";case y.L5_2:return"5.2";default:{pe.warn(`levelToString() | unrecognized level ${r}`);return}}}function Ae(r={}){let e=r["profile-level-id"];return e?ri(e):ac}function lc(r={},e={}){let t=Ae(r),s=Ae(e);return!!(t&&s&&t.profile===s.profile)}function uc(r={},e={}){let t=Ae(r),s=Ae(e);return!!(t&&s&&t.profile===s.profile&&t.level==s.level)}function pc(r={},e={}){if(!r["profile-level-id"]&&!e["profile-level-id"]){pe.warn("generateProfileLevelIdStringForAnswer() | profile-level-id missing in local and remote params");return}let t=Ae(r),s=Ae(e);if(!t)throw new TypeError("invalid local_profile_level_id");if(!s)throw new TypeError("invalid remote_profile_level_id");if(t.profile!==s.profile)throw new TypeError("H264 Profile mismatch");let n=ti(r)&&ti(e),i=t.level,a=s.level,o=mc(i,a),c=n?i:o;return pe.debug(`generateProfileLevelIdStringForAnswer() | result [profile:${t.profile}, level:${c}]`),si(new tt(t.profile,c))}function hc(r,e){for(let s=Zn.length-1;s>=0;--s){let n=Zn[s];if(n.max_macroblock_frame_size*256<=r&&n.max_macroblocks_per_second<=e*n.max_macroblock_frame_size)return pe.debug(`supportedLevel() | result [max_frame_pixel_count:${r}, max_fps:${e}, level:${n.level}]`),n.level}pe.warn(`supportedLevel() | no level supported [max_frame_pixel_count:${r}, max_fps:${e}]`)}function ei(r,e){return+(e[0]===r)<<7|+(e[1]===r)<<6|+(e[2]===r)<<5|+(e[3]===r)<<4|+(e[4]===r)<<3|+(e[5]===r)<<2|+(e[6]===r)<<1|+(e[7]===r)<<0}function fc(r,e){return r===y.L1_b?e!==y.L1&&e!==y.L1_b:e===y.L1_b?r!==y.L1:r<e}function mc(r,e){return fc(r,e)?r:e}function ti(r={}){let e=r["level-asymmetry-allowed"];return e===!0||e===1||e==="1"}});var me=P(G=>{"use strict";Object.defineProperty(G,"__esModule",{value:!0});G.validateAndNormalizeRtpCapabilities=yc;G.validateAndNormalizeRtpParameters=ns;G.validateAndNormalizeSctpStreamParameters=bc;G.validateSctpCapabilities=Sc;G.getExtendedRtpCapabilities=Rc;G.getRecvRtpCapabilities=Cc;G.getSendRtpCapabilities=Tc;G.getSendingRtpParameters=kc;G.getSendingRemoteRtpParameters=Ec;G.reduceCodecs=Pc;G.generateProbatorRtpParameters=xc;G.canSend=Dc;G.canReceive=Ic;var ii=ni(),gc=Me(),_c="probator",vc=1234,wc=127;function yc(r){if(typeof r!="object")throw new TypeError("caps is not an object");if(r.codecs&&!Array.isArray(r.codecs))throw new TypeError("caps.codecs is not an array");r.codecs||(r.codecs=[]);for(let e of r.codecs)Lc(e);if(r.headerExtensions&&!Array.isArray(r.headerExtensions))throw new TypeError("caps.headerExtensions is not an array");r.headerExtensions||(r.headerExtensions=[]);for(let e of r.headerExtensions)Mc(e)}function ns(r){if(typeof r!="object")throw new TypeError("params is not an object");if(r.mid&&typeof r.mid!="string")throw new TypeError("params.mid is not a string");if(!Array.isArray(r.codecs))throw new TypeError("missing params.codecs");for(let e of r.codecs)Ac(e);if(r.headerExtensions&&!Array.isArray(r.headerExtensions))throw new TypeError("params.headerExtensions is not an array");r.headerExtensions||(r.headerExtensions=[]);for(let e of r.headerExtensions)Oc(e);if(r.encodings&&!Array.isArray(r.encodings))throw new TypeError("params.encodings is not an array");r.encodings||(r.encodings=[]);for(let e of r.encodings)Nc(e);if(r.rtcp&&typeof r.rtcp!="object")throw new TypeError("params.rtcp is not an object");r.rtcp||(r.rtcp={}),jc(r.rtcp)}function bc(r){if(typeof r!="object")throw new TypeError("params is not an object");if(typeof r.streamId!="number")throw new TypeError("missing params.streamId");let e=!1;if(typeof r.ordered=="boolean"?e=!0:r.ordered=!0,r.maxPacketLifeTime&&typeof r.maxPacketLifeTime!="number")throw new TypeError("invalid params.maxPacketLifeTime");if(r.maxRetransmits&&typeof r.maxRetransmits!="number")throw new TypeError("invalid params.maxRetransmits");if(r.maxPacketLifeTime&&r.maxRetransmits)throw new TypeError("cannot provide both maxPacketLifeTime and maxRetransmits");if(e&&r.ordered&&(r.maxPacketLifeTime||r.maxRetransmits))throw new TypeError("cannot be ordered with maxPacketLifeTime or maxRetransmits");if(!e&&(r.maxPacketLifeTime||r.maxRetransmits)&&(r.ordered=!1),r.label&&typeof r.label!="string")throw new TypeError("invalid params.label");if(r.protocol&&typeof r.protocol!="string")throw new TypeError("invalid params.protocol")}function Sc(r){if(typeof r!="object")throw new TypeError("caps is not an object");if(!r.numStreams||typeof r.numStreams!="object")throw new TypeError("missing caps.numStreams");Fc(r.numStreams)}function Rc(r,e,t){let s={codecs:[],headerExtensions:[]};if(t)for(let n of r.codecs??[]){if(rt(n))continue;let i=(e.codecs??[]).find(o=>ss(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:ai(n,i)};s.codecs.push(a)}else for(let n of e.codecs??[]){if(rt(n))continue;let i=(r.codecs??[]).find(o=>ss(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:ai(i,n)};s.codecs.push(a)}for(let n of s.codecs){let i=r.codecs.find(o=>rt(o)&&o.parameters?.apt===n.localPayloadType),a=e.codecs.find(o=>rt(o)&&o.parameters?.apt===n.remotePayloadType);i&&a&&(n.localRtxPayloadType=i.preferredPayloadType,n.remoteRtxPayloadType=a.preferredPayloadType)}for(let n of e.headerExtensions){let i=r.headerExtensions.find(o=>$c(o,n));if(!i)continue;let a={kind:n.kind,uri:n.uri,sendId:i.preferredId,recvId:n.preferredId,encrypt:i.preferredEncrypt??!1,direction:"sendrecv"};switch(n.direction){case"sendrecv":{a.direction="sendrecv";break}case"recvonly":{a.direction="sendonly";break}case"sendonly":{a.direction="recvonly";break}case"inactive":{a.direction="inactive";break}}s.headerExtensions.push(a)}return s}function Cc(r){return ci({direction:"recvonly",extendedRtpCapabilities:r})}function Tc(r){return ci({direction:"sendonly",extendedRtpCapabilities:r})}function kc(r,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let s of e.codecs){if(s.kind!==r)continue;let n={mimeType:s.mimeType,payloadType:s.localPayloadType,clockRate:s.clockRate,channels:s.channels,parameters:s.localParameters,rtcpFeedback:s.rtcpFeedback};if(t.codecs.push(n),s.localRtxPayloadType){let i={mimeType:`${s.kind}/rtx`,payloadType:s.localRtxPayloadType,clockRate:s.clockRate,parameters:{apt:s.localPayloadType},rtcpFeedback:[]};t.codecs.push(i)}}for(let s of e.headerExtensions){if(s.kind&&s.kind!==r||s.direction!=="sendrecv"&&s.direction!=="sendonly")continue;let n={uri:s.uri,id:s.sendId,encrypt:s.encrypt,parameters:{}};t.headerExtensions.push(n)}return t}function Ec(r,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let s of e.codecs){if(s.kind!==r)continue;let n={mimeType:s.mimeType,payloadType:s.localPayloadType,clockRate:s.clockRate,channels:s.channels,parameters:s.remoteParameters,rtcpFeedback:s.rtcpFeedback};if(t.codecs.push(n),s.localRtxPayloadType){let i={mimeType:`${s.kind}/rtx`,payloadType:s.localRtxPayloadType,clockRate:s.clockRate,parameters:{apt:s.localPayloadType},rtcpFeedback:[]};t.codecs.push(i)}}for(let s of e.headerExtensions){if(s.kind&&s.kind!==r||s.direction!=="sendrecv"&&s.direction!=="sendonly")continue;let n={uri:s.uri,id:s.sendId,encrypt:s.encrypt,parameters:{}};t.headerExtensions.push(n)}if(t.headerExtensions.some(s=>s.uri==="http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"))for(let s of t.codecs)s.rtcpFeedback=(s.rtcpFeedback??[]).filter(n=>n.type!=="goog-remb");else if(t.headerExtensions.some(s=>s.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"))for(let s of t.codecs)s.rtcpFeedback=(s.rtcpFeedback??[]).filter(n=>n.type!=="transport-cc");else for(let s of t.codecs)s.rtcpFeedback=(s.rtcpFeedback??[]).filter(n=>n.type!=="transport-cc"&&n.type!=="goog-remb");return t}function Pc(r,e){let t=[];if(!e)t.push(r[0]),rt(r[1])&&t.push(r[1]);else{for(let s=0;s<r.length;++s)if(ss(r[s],e,{strict:!0})){t.push(r[s]),rt(r[s+1])&&t.push(r[s+1]);break}if(t.length===0)throw new TypeError("no matching codec found")}return t}function xc(r){r=gc.clone(r),ns(r);let e={mid:_c,codecs:[],headerExtensions:[],encodings:[{ssrc:vc}],rtcp:{cname:"probator"}};return e.codecs.push(r.codecs[0]),e.codecs[0].payloadType=wc,e.headerExtensions=r.headerExtensions,e}function Dc(r,e){return(e.codecs??[]).some(t=>t.kind===r)}function Ic(r,e){if(ns(r),r.codecs.length===0)return!1;let t=r.codecs[0];return(e.codecs??[]).some(s=>s.preferredPayloadType===t.payloadType)}function Lc(r){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof r!="object")throw new TypeError("codec is not an object");if(!r.mimeType||typeof r.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(r.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(r.kind=t[1].toLowerCase(),typeof r.preferredPayloadType!="number")throw new TypeError("missing codec.preferredPayloadType");if(typeof r.clockRate!="number")throw new TypeError("missing codec.clockRate");r.kind==="audio"?typeof r.channels!="number"&&(r.channels=1):delete r.channels,(!r.parameters||typeof r.parameters!="object")&&(r.parameters={});for(let s of Object.keys(r.parameters)){let n=r.parameters[s];if(n===void 0&&(r.parameters[s]="",n=""),typeof n!="string"&&typeof n!="number")throw new TypeError(`invalid codec parameter [key:${s}s, value:${n}]`);if(s==="apt"&&typeof n!="number")throw new TypeError("invalid codec apt parameter")}(!r.rtcpFeedback||!Array.isArray(r.rtcpFeedback))&&(r.rtcpFeedback=[]);for(let s of r.rtcpFeedback)oi(s)}function oi(r){if(typeof r!="object")throw new TypeError("fb is not an object");if(!r.type||typeof r.type!="string")throw new TypeError("missing fb.type");(!r.parameter||typeof r.parameter!="string")&&(r.parameter="")}function Mc(r){if(typeof r!="object")throw new TypeError("ext is not an object");if(r.kind!=="audio"&&r.kind!=="video")throw new TypeError("invalid ext.kind");if(!r.uri||typeof r.uri!="string")throw new TypeError("missing ext.uri");if(typeof r.preferredId!="number")throw new TypeError("missing ext.preferredId");if(r.preferredEncrypt&&typeof r.preferredEncrypt!="boolean")throw new TypeError("invalid ext.preferredEncrypt");if(r.preferredEncrypt||(r.preferredEncrypt=!1),r.direction&&typeof r.direction!="string")throw new TypeError("invalid ext.direction");r.direction||(r.direction="sendrecv")}function Ac(r){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof r!="object")throw new TypeError("codec is not an object");if(!r.mimeType||typeof r.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(r.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(typeof r.payloadType!="number")throw new TypeError("missing codec.payloadType");if(typeof r.clockRate!="number")throw new TypeError("missing codec.clockRate");t[1].toLowerCase()==="audio"?typeof r.channels!="number"&&(r.channels=1):delete r.channels,(!r.parameters||typeof r.parameters!="object")&&(r.parameters={});for(let n of Object.keys(r.parameters)){let i=r.parameters[n];if(i===void 0&&(r.parameters[n]="",i=""),typeof i!="string"&&typeof i!="number")throw new TypeError(`invalid codec parameter [key:${n}s, value:${i}]`);if(n==="apt"&&typeof i!="number")throw new TypeError("invalid codec apt parameter")}(!r.rtcpFeedback||!Array.isArray(r.rtcpFeedback))&&(r.rtcpFeedback=[]);for(let n of r.rtcpFeedback)oi(n)}function Oc(r){if(typeof r!="object")throw new TypeError("ext is not an object");if(!r.uri||typeof r.uri!="string")throw new TypeError("missing ext.uri");if(typeof r.id!="number")throw new TypeError("missing ext.id");if(r.encrypt&&typeof r.encrypt!="boolean")throw new TypeError("invalid ext.encrypt");r.encrypt||(r.encrypt=!1),(!r.parameters||typeof r.parameters!="object")&&(r.parameters={});for(let e of Object.keys(r.parameters)){let t=r.parameters[e];if(t===void 0&&(r.parameters[e]="",t=""),typeof t!="string"&&typeof t!="number")throw new TypeError("invalid header extension parameter")}}function Nc(r){if(typeof r!="object")throw new TypeError("encoding is not an object");if(r.ssrc&&typeof r.ssrc!="number")throw new TypeError("invalid encoding.ssrc");if(r.rid&&typeof r.rid!="string")throw new TypeError("invalid encoding.rid");if(r.rtx&&typeof r.rtx!="object")throw new TypeError("invalid encoding.rtx");if(r.rtx&&typeof r.rtx.ssrc!="number")throw new TypeError("missing encoding.rtx.ssrc");if((!r.dtx||typeof r.dtx!="boolean")&&(r.dtx=!1),r.scalabilityMode&&typeof r.scalabilityMode!="string")throw new TypeError("invalid encoding.scalabilityMode")}function jc(r){if(typeof r!="object")throw new TypeError("rtcp is not an object");if(r.cname&&typeof r.cname!="string")throw new TypeError("invalid rtcp.cname");(!r.reducedSize||typeof r.reducedSize!="boolean")&&(r.reducedSize=!0)}function Fc(r){if(typeof r!="object")throw new TypeError("numStreams is not an object");if(typeof r.OS!="number")throw new TypeError("missing numStreams.OS");if(typeof r.MIS!="number")throw new TypeError("missing numStreams.MIS")}function ci({direction:r,extendedRtpCapabilities:e}){let t={codecs:[],headerExtensions:[]};for(let s of e.codecs){let n={kind:s.kind,mimeType:s.mimeType,preferredPayloadType:s.remotePayloadType,clockRate:s.clockRate,channels:s.channels,parameters:s.localParameters,rtcpFeedback:s.rtcpFeedback};if(t.codecs.push(n),!s.remoteRtxPayloadType)continue;let i={kind:s.kind,mimeType:`${s.kind}/rtx`,preferredPayloadType:s.remoteRtxPayloadType,clockRate:s.clockRate,parameters:{apt:s.remotePayloadType},rtcpFeedback:[]};t.codecs.push(i)}for(let s of e.headerExtensions){if(s.direction!=="sendrecv"&&s.direction!==r)continue;let n={kind:s.kind,uri:s.uri,preferredId:s.recvId,preferredEncrypt:s.encrypt??!1,direction:s.direction};t.headerExtensions.push(n)}return t}function rt(r){return r?/.+\/rtx$/i.test(r.mimeType):!1}function ss(r,e,{strict:t=!1,modify:s=!1}={}){let n=r.mimeType.toLowerCase(),i=e.mimeType.toLowerCase();if(n!==i||r.clockRate!==e.clockRate||r.channels!==e.channels)return!1;switch(n){case"video/h264":{if(t){let a=r.parameters["packetization-mode"]??0,o=e.parameters["packetization-mode"]??0;if(a!==o||!ii.isSameProfile(r.parameters,e.parameters))return!1;let c;try{c=ii.generateProfileLevelIdStringForAnswer(r.parameters,e.parameters)}catch{return!1}s&&(c?(r.parameters["profile-level-id"]=c,e.parameters["profile-level-id"]=c):(delete r.parameters["profile-level-id"],delete e.parameters["profile-level-id"]))}break}case"video/vp9":{if(t){let a=r.parameters["profile-id"]??0,o=e.parameters["profile-id"]??0;if(a!==o)return!1}break}}return!0}function $c(r,e){return!(r.kind&&e.kind&&r.kind!==e.kind||r.uri!==e.uri)}function ai(r,e){let t=[];for(let s of r.rtcpFeedback??[]){let n=(e.rtcpFeedback??[]).find(i=>i.type===s.type&&(i.parameter===s.parameter||!i.parameter&&!s.parameter));n&&t.push(n)}return t}});var di=P(ar=>{"use strict";Object.defineProperty(ar,"__esModule",{value:!0});ar.Logger=void 0;var st=vt(),nt="awaitqueue",is=class{_debug;_warn;_error;constructor(e){e?(this._debug=st(`${nt}:${e}`),this._warn=st(`${nt}:WARN:${e}`),this._error=st(`${nt}:ERROR:${e}`)):(this._debug=st(nt),this._warn=st(`${nt}:WARN`),this._error=st(`${nt}: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}};ar.Logger=is});var cs=P(it=>{"use strict";Object.defineProperty(it,"__esModule",{value:!0});it.AwaitQueueRemovedTaskError=it.AwaitQueueStoppedError=void 0;var as=class r extends Error{constructor(e){super(e??"queue stopped"),this.name="AwaitQueueStoppedError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,r)}};it.AwaitQueueStoppedError=as;var os=class r extends Error{constructor(e){super(e??"queue task removed"),this.name="AwaitQueueRemovedTaskError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,r)}};it.AwaitQueueRemovedTaskError=os});var li=P(or=>{"use strict";Object.defineProperty(or,"__esModule",{value:!0});or.AwaitQueue=void 0;var Uc=di(),ds=cs(),ye=new Uc.Logger("AwaitQueue"),ls=class{pendingTasks=new Map;nextTaskId=0;constructor(){ye.debug("constructor()")}get size(){return this.pendingTasks.size}async push(e,t,s){if(t=t??e.name,ye.debug(`push() [name:${t}, options:%o]`,s),typeof e!="function")throw new TypeError("given task is not a function");if(t)try{Object.defineProperty(e,"name",{value:t})}catch{}return new Promise((n,i)=>{if(t&&s?.removeOngoingTasksWithSameName)for(let o of this.pendingTasks.values())o.name===t&&o.reject(new ds.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),ye.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),ye.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(){ye.debug("stop()");for(let e of this.pendingTasks.values())ye.debug(`stop() | stopping task [name:${e.name}]`),e.reject(new ds.AwaitQueueStoppedError,{canExecuteNextTask:!1})}remove(e){ye.debug(`remove() [taskIdx:${e}]`);let t=Array.from(this.pendingTasks.values())[e];if(!t){ye.debug(`stop() | no task with given idx [taskIdx:${e}]`);return}t.reject(new ds.AwaitQueueRemovedTaskError,{canExecuteNextTask:!0})}dump(){let e=Date.now(),t=0;return Array.from(this.pendingTasks.values()).map(s=>({idx:t++,task:s.task,name:s.name,enqueuedTime:s.executedAt?s.executedAt-s.enqueuedAt:e-s.enqueuedAt,executionTime:s.executedAt?e-s.executedAt:0}))}async execute(e){if(ye.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})}}};or.AwaitQueue=ls});var pi=P(Ee=>{"use strict";Object.defineProperty(Ee,"__esModule",{value:!0});Ee.AwaitQueueRemovedTaskError=Ee.AwaitQueueStoppedError=Ee.AwaitQueue=void 0;var qc=li();Object.defineProperty(Ee,"AwaitQueue",{enumerable:!0,get:function(){return qc.AwaitQueue}});var ui=cs();Object.defineProperty(Ee,"AwaitQueueStoppedError",{enumerable:!0,get:function(){return ui.AwaitQueueStoppedError}});Object.defineProperty(Ee,"AwaitQueueRemovedTaskError",{enumerable:!0,get:function(){return ui.AwaitQueueRemovedTaskError}})});var fi=P(cr=>{"use strict";Object.defineProperty(cr,"__esModule",{value:!0});cr.Producer=void 0;var Bc=V(),hi=Z(),at=re(),ge=new Bc.Logger("Producer"),us=class extends hi.EnhancedEventEmitter{_id;_localId;_closed=!1;_rtpSender;_track;_kind;_rtpParameters;_paused;_maxSpatialLayer;_stopTracks;_disableTrackOnPause;_zeroRtpOnPause;_appData;_observer=new hi.EnhancedEventEmitter;constructor({id:e,localId:t,rtpSender:s,track:n,rtpParameters:i,stopTracks:a,disableTrackOnPause:o,zeroRtpOnPause:c,appData:l}){super(),ge.debug("constructor()"),this._id=e,this._localId=t,this._rtpSender=s,this._track=n,this._kind=n.kind,this._rtpParameters=i,this._paused=o?!n.enabled:!1,this._maxSpatialLayer=void 0,this._stopTracks=a,this._disableTrackOnPause=o,this._zeroRtpOnPause=c,this._appData=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||(ge.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(ge.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new at.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(ge.debug("pause()"),this._closed){ge.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(ge.debug("resume()"),this._closed){ge.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(ge.debug("replaceTrack() [track:%o]",e),this._closed){if(e&&this._stopTracks)try{e.stop()}catch{}throw new at.InvalidStateError("closed")}else if(e?.readyState==="ended")throw new at.InvalidStateError("track ended");if(e===this._track){ge.debug("replaceTrack() | same track, ignored");return}await new Promise((t,s)=>{this.safeEmit("@replacetrack",e,t,s)}),this.destroyTrack(),this._track=e,this._track&&this._disableTrackOnPause&&(this._paused?this._paused&&(this._track.enabled=!1):this._track.enabled=!0),this.handleTrack()}async setMaxSpatialLayer(e){if(this._closed)throw new at.InvalidStateError("closed");if(this._kind!=="video")throw new at.UnsupportedError("not a video Producer");if(typeof e!="number")throw new TypeError("invalid spatialLayer");e!==this._maxSpatialLayer&&(await new Promise((t,s)=>{this.safeEmit("@setmaxspatiallayer",e,t,s)}).catch(()=>{}),this._maxSpatialLayer=e)}async setRtpEncodingParameters(e){if(this._closed)throw new at.InvalidStateError("closed");if(typeof e!="object")throw new TypeError("invalid params");await new Promise((t,s)=>{this.safeEmit("@setrtpencodingparameters",e,t,s)})}onTrackEnded(){ge.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{}}};cr.Producer=us});var gi=P(dr=>{"use strict";Object.defineProperty(dr,"__esModule",{value:!0});dr.Consumer=void 0;var Wc=V(),mi=Z(),zc=re(),_e=new Wc.Logger("Consumer"),ps=class extends mi.EnhancedEventEmitter{_id;_localId;_producerId;_closed=!1;_rtpReceiver;_track;_rtpParameters;_paused;_appData;_observer=new mi.EnhancedEventEmitter;constructor({id:e,localId:t,producerId:s,rtpReceiver:n,track:i,rtpParameters:a,appData:o}){super(),_e.debug("constructor()"),this._id=e,this._localId=t,this._producerId=s,this._rtpReceiver=n,this._track=i,this._rtpParameters=a,this._paused=!i.enabled,this._appData=o??{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get producerId(){return this._producerId}get closed(){return this._closed}get kind(){return this._track.kind}get rtpReceiver(){return this._rtpReceiver}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(_e.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(_e.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new zc.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(_e.debug("pause()"),this._closed){_e.error("pause() | Consumer closed");return}if(this._paused){_e.debug("pause() | Consumer is already paused");return}this._paused=!0,this._track.enabled=!1,this.emit("@pause"),this._observer.safeEmit("pause")}resume(){if(_e.debug("resume()"),this._closed){_e.error("resume() | Consumer closed");return}if(!this._paused){_e.debug("resume() | Consumer is already resumed");return}this._paused=!1,this._track.enabled=!0,this.emit("@resume"),this._observer.safeEmit("resume")}onTrackEnded(){_e.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{}}};dr.Consumer=ps});var vi=P(lr=>{"use strict";Object.defineProperty(lr,"__esModule",{value:!0});lr.DataProducer=void 0;var Hc=V(),_i=Z(),Vc=re(),be=new Hc.Logger("DataProducer"),hs=class extends _i.EnhancedEventEmitter{_id;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new _i.EnhancedEventEmitter;constructor({id:e,dataChannel:t,sctpStreamParameters:s,appData:n}){super(),be.debug("constructor()"),this._id=e,this._dataChannel=t,this._sctpStreamParameters=s,this._appData=n??{},this.handleDataChannel()}get id(){return this._id}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get bufferedAmount(){return this._dataChannel.bufferedAmount}get bufferedAmountLowThreshold(){return this._dataChannel.bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._dataChannel.bufferedAmountLowThreshold=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(be.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(be.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}send(e){if(be.debug("send()"),this._closed)throw new Vc.InvalidStateError("closed");this._dataChannel.send(e)}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(be.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"?be.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):be.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(be.warn('DataChannel "close" event'),this._closed=!0,this.emit("@close"),this.safeEmit("close"),this._observer.safeEmit("close"))}),this._dataChannel.addEventListener("message",()=>{this._closed||be.warn('DataChannel "message" event in a DataProducer, message discarded')}),this._dataChannel.addEventListener("bufferedamountlow",()=>{this._closed||this.safeEmit("bufferedamountlow")})}};lr.DataProducer=hs});var yi=P(ur=>{"use strict";Object.defineProperty(ur,"__esModule",{value:!0});ur.DataConsumer=void 0;var Gc=V(),wi=Z(),Oe=new Gc.Logger("DataConsumer"),fs=class extends wi.EnhancedEventEmitter{_id;_dataProducerId;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new wi.EnhancedEventEmitter;constructor({id:e,dataProducerId:t,dataChannel:s,sctpStreamParameters:n,appData:i}){super(),Oe.debug("constructor()"),this._id=e,this._dataProducerId=t,this._dataChannel=s,this._sctpStreamParameters=n,this._appData=i??{},this.handleDataChannel()}get id(){return this._id}get dataProducerId(){return this._dataProducerId}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get binaryType(){return this._dataChannel.binaryType}set binaryType(e){this._dataChannel.binaryType=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(Oe.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(Oe.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(Oe.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"?Oe.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):Oe.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(Oe.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)})}};ur.DataConsumer=fs});var Si=P(pr=>{"use strict";Object.defineProperty(pr,"__esModule",{value:!0});pr.Transport=void 0;var Kc=pi(),Qc=V(),bi=Z(),j=re(),ms=Me(),yt=me(),Jc=fi(),Yc=gi(),Xc=vi(),Zc=yi(),O=new Qc.Logger("Transport"),gs=class{consumerOptions;promise;resolve;reject;constructor(e){this.consumerOptions=e,this.promise=new Promise((t,s)=>{this.resolve=t,this.reject=s})}},_s=class extends bi.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 Kc.AwaitQueue;_pendingConsumerTasks=[];_consumerCreationInProgress=!1;_pendingPauseConsumers=new Map;_consumerPauseInProgress=!1;_pendingResumeConsumers=new Map;_consumerResumeInProgress=!1;_pendingCloseConsumers=new Map;_consumerCloseInProgress=!1;_observer=new bi.EnhancedEventEmitter;constructor({direction:e,id:t,iceParameters:s,iceCandidates:n,dtlsParameters:i,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:l,appData:d,handlerFactory:u,getSendExtendedRtpCapabilities:p,recvRtpCapabilities:m,canProduceByKind:f}){super(),O.debug("constructor() [id:%s, direction:%s]",t,e),this._id=t,this._direction=e,this._getSendExtendedRtpCapabilities=p,this._recvRtpCapabilities=m,this._canProduceByKind=f,this._maxSctpMessageSize=a?.maxMessageSize;let h=ms.clone(l)??{};delete h.iceServers,delete h.iceTransportPolicy,delete h.bundlePolicy,delete h.rtcpMuxPolicy,this._handler=u.factory({direction:e,iceParameters:s,iceCandidates:n,dtlsParameters:i,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:h,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities}),this._appData=d??{},this.handleHandler()}get id(){return this._id}get closed(){return this._closed}get direction(){return this._direction}get handler(){return this._handler}get iceGatheringState(){return this._iceGatheringState}get connectionState(){return this._connectionState}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){if(!this._closed){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 j.InvalidStateError("closed");return this._handler.getTransportStats()}async restartIce({iceParameters:e}){if(O.debug("restartIce()"),this._closed)throw new j.InvalidStateError("closed");if(!e)throw new TypeError("missing iceParameters");return this._awaitQueue.push(async()=>await this._handler.restartIce(e),"transport.restartIce()")}async updateIceServers({iceServers:e}={}){if(O.debug("updateIceServers()"),this._closed)throw new j.InvalidStateError("closed");if(!Array.isArray(e))throw new TypeError("missing iceServers");return this._awaitQueue.push(async()=>this._handler.updateIceServers(e),"transport.updateIceServers()")}async produce({track:e,streamId:t,encodings:s,codecOptions:n,headerExtensionOptions:i,codec:a,stopTracks:o=!0,disableTrackOnPause:c=!0,zeroRtpOnPause:l=!1,onRtpSender:d,appData:u={}}={}){if(O.debug("produce() [track:%o]",e),this._closed)throw new j.InvalidStateError("closed");if(e){if(this._direction!=="send")throw new j.UnsupportedError("not a sending Transport");if(this._canProduceByKind[e.kind]){if(e.readyState==="ended")throw new j.InvalidStateError("track ended");if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(this.listenerCount("produce")===0)throw new TypeError('no "produce" listener set into this transport');if(u&&typeof u!="object")throw new TypeError("if given, appData must be an object")}else throw new j.UnsupportedError(`cannot produce ${e.kind}`)}else throw new TypeError("missing track");return this._awaitQueue.push(async()=>{let p;if(s&&!Array.isArray(s))throw TypeError("encodings must be an array");s?.length===0?p=void 0:s&&(p=s.map(g=>{let w={active:!0};return g.active===!1&&(w.active=!1),typeof g.dtx=="boolean"&&(w.dtx=g.dtx),typeof g.scalabilityMode=="string"&&(w.scalabilityMode=g.scalabilityMode),typeof g.scaleResolutionDownBy=="number"&&(w.scaleResolutionDownBy=g.scaleResolutionDownBy),typeof g.maxBitrate=="number"&&(w.maxBitrate=g.maxBitrate),typeof g.maxFramerate=="number"&&(w.maxFramerate=g.maxFramerate),typeof g.adaptivePtime=="boolean"&&(w.adaptivePtime=g.adaptivePtime),typeof g.priority=="string"&&(w.priority=g.priority),typeof g.networkPriority=="string"&&(w.networkPriority=g.networkPriority),w}));let{localId:m,rtpParameters:f,rtpSender:h}=await this._handler.send({track:e,streamId:t,encodings:p,codecOptions:n,headerExtensionOptions:i,codec:a,onRtpSender:d});try{yt.validateAndNormalizeRtpParameters(f);let{id:g}=await new Promise((R,x)=>{this.safeEmit("produce",{kind:e.kind,rtpParameters:f,appData:u},R,x)}),w=new Jc.Producer({id:g,localId:m,rtpSender:h,track:e,rtpParameters:f,stopTracks:o,disableTrackOnPause:c,zeroRtpOnPause:l,appData:u});return this._producers.set(w.id,w),this.handleProducer(w),this._observer.safeEmit("newproducer",w),w}catch(g){throw this._handler.stopSending(m).catch(()=>{}),g}},"transport.produce()").catch(p=>{if(o)try{e.stop()}catch{}throw p})}async consume({id:e,producerId:t,kind:s,rtpParameters:n,streamId:i,onRtpReceiver:a,appData:o={}}){if(O.debug("consume()"),this._closed)throw new j.InvalidStateError("closed");if(this._direction!=="recv")throw new j.UnsupportedError("not a receiving Transport");if(typeof e!="string")throw new TypeError("missing id");if(typeof t!="string")throw new TypeError("missing producerId");if(s!=="audio"&&s!=="video")throw new TypeError(`invalid kind '${s}'`);if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(o&&typeof o!="object")throw new TypeError("if given, appData must be an object");let c=ms.clone(n);if(!yt.canReceive(c,this._recvRtpCapabilities))throw new j.UnsupportedError("cannot consume this Producer");let d=new gs({id:e,producerId:t,kind:s,rtpParameters:c,streamId:i,onRtpReceiver:a,appData:o});return this._pendingConsumerTasks.push(d),queueMicrotask(()=>{this._closed||this._consumerCreationInProgress===!1&&this.createPendingConsumers()}),d.promise}async produceData({ordered:e=!0,maxPacketLifeTime:t,maxRetransmits:s,label:n="",protocol:i="",appData:a={}}={}){if(O.debug("produceData()"),this._closed)throw new j.InvalidStateError("closed");if(this._direction!=="send")throw new j.UnsupportedError("not a sending Transport");if(this._maxSctpMessageSize){if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(this.listenerCount("producedata")===0)throw new TypeError('no "producedata" listener set into this transport');if(a&&typeof a!="object")throw new TypeError("if given, appData must be an object")}else throw new j.UnsupportedError("SCTP not enabled by remote Transport");return(t||s)&&(e=!1),this._awaitQueue.push(async()=>{let{dataChannel:o,sctpStreamParameters:c}=await this._handler.sendDataChannel({sctpStreamParameters:{ordered:e,maxPacketLifeTime:t,maxRetransmits:s,label:n,protocol:i}});yt.validateAndNormalizeSctpStreamParameters(c);let{id:l}=await new Promise((u,p)=>{this.safeEmit("producedata",{sctpStreamParameters:c,label:n,protocol:i,appData:a},u,p)}),d=new Xc.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:s,label:n="",protocol:i="",appData:a={}}){if(O.debug("consumeData()"),this._closed)throw new j.InvalidStateError("closed");if(this._direction!=="recv")throw new j.UnsupportedError("not a receiving Transport");if(this._maxSctpMessageSize){if(typeof e!="string")throw new TypeError("missing id");if(typeof t!="string")throw new TypeError("missing dataProducerId");if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(a&&typeof a!="object")throw new TypeError("if given, appData must be an object")}else throw new j.UnsupportedError("SCTP not enabled by remote Transport");let o=ms.clone(s);return yt.validateAndNormalizeSctpStreamParameters(o),this._awaitQueue.push(async()=>{let{dataChannel:c}=await this._handler.receiveDataChannel({maxMessageSize:this._maxSctpMessageSize,sctpStreamParameters:o,label:n,protocol:i}),l=new Zc.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,s=[];for(let n of e){let{id:i,kind:a,rtpParameters:o,streamId:c,onRtpReceiver:l}=n.consumerOptions;s.push({trackId:i,kind:a,rtpParameters:o,streamId:c,onRtpReceiver:l})}try{let n=await this._handler.receive(s);for(let i=0;i<n.length;++i){let a=e[i],o=n[i],{id:c,producerId:l,kind:d,rtpParameters:u,appData:p}=a.consumerOptions,{localId:m,rtpReceiver:f,track:h}=o,g=new Yc.Consumer({id:c,localId:m,producerId:l,rtpReceiver:f,track:h,rtpParameters:u,appData:p});this._consumers.set(g.id,g),this.handleConsumer(g),!this._probatorConsumerCreated&&!t&&d==="video"&&(t=g),this._observer.safeEmit("newconsumer",g),a.resolve(g)}}catch(n){for(let i of e)i.reject(n)}if(t)try{let n=yt.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(s=>s.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(s=>s.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},s,n)=>{if(this._closed){n(new j.InvalidStateError("closed"));return}this.safeEmit("connect",{dtlsParameters:t},s,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,s)=>{this._awaitQueue.push(async()=>await this._handler.pauseSending(e.localId),"producer @pause event").then(t).catch(s)}),e.on("@resume",(t,s)=>{this._awaitQueue.push(async()=>await this._handler.resumeSending(e.localId),"producer @resume event").then(t).catch(s)}),e.on("@replacetrack",(t,s,n)=>{this._awaitQueue.push(async()=>await this._handler.replaceTrack(e.localId,t),"producer @replacetrack event").then(s).catch(n)}),e.on("@setmaxspatiallayer",(t,s,n)=>{this._awaitQueue.push(async()=>await this._handler.setMaxSpatialLayer(e.localId,t),"producer @setmaxspatiallayer event").then(s).catch(n)}),e.on("@setrtpencodingparameters",(t,s,n)=>{this._awaitQueue.push(async()=>await this._handler.setRtpEncodingParameters(e.localId,t),"producer @setrtpencodingparameters event").then(s).catch(n)}),e.on("@getstats",(t,s)=>{if(this._closed)return s(new j.InvalidStateError("closed"));this._handler.getSenderStats(e.localId).then(t).catch(s)})}handleConsumer(e){e.on("@close",()=>{this._consumers.delete(e.id),this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.delete(e.id),!this._closed&&(this._pendingCloseConsumers.set(e.id,e),this._consumerCloseInProgress===!1&&this.closePendingConsumers())}),e.on("@pause",()=>{this._pendingResumeConsumers.has(e.id)&&this._pendingResumeConsumers.delete(e.id),this._pendingPauseConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerPauseInProgress===!1&&this.pausePendingConsumers()})}),e.on("@resume",()=>{this._pendingPauseConsumers.has(e.id)&&this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerResumeInProgress===!1&&this.resumePendingConsumers()})}),e.on("@getstats",(t,s)=>{if(this._closed)return s(new j.InvalidStateError("closed"));this._handler.getReceiverStats(e.localId).then(t).catch(s)})}handleDataProducer(e){e.on("@close",()=>{this._dataProducers.delete(e.id)})}handleDataConsumer(e){e.on("@close",()=>{this._dataConsumers.delete(e.id)})}};pr.Transport=_s});var hr=P((ip,Ci)=>{"use strict";var Ri=Ci.exports={v:[{name:"version",reg:/^(\d*)$/}],o:[{name:"origin",reg:/^(\S*) (\d*) (\d*) (\S*) IP(\d) (\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\d*) (\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\d) (\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\w*) (\d*) ([\w/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\d*) ([\w\-.]*)(?:\s*\/(\d*)(?:\s*\/(\S*))?)?/,names:["payload","codec","rate","encoding"],format:function(r){return r.encoding?"rtpmap:%d %s/%s/%s":r.rate?"rtpmap:%d %s/%s":"rtpmap:%d %s"}},{push:"fmtp",reg:/^fmtp:(\d*) ([\S| ]*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\d*)(?: (\S*) IP(\d) (\S*))?/,names:["port","netType","ipVer","address"],format:function(r){return r.address!=null?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\*|\d*) trr-int (\d*)/,names:["payload","value"],format:"rtcp-fb:%s trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,names:["payload","type","subtype"],format:function(r){return r.subtype!=null?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:(\d+)(?:\/(\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\S*)(?: (\S*))?/,names:["value","direction","encrypt-uri","uri","config"],format:function(r){return"extmap:%d"+(r.direction?"/%s":"%v")+(r["encrypt-uri"]?" %s":"%v")+" %s"+(r.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(r){return r.sessionConfig!=null?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\w*)/,format:"setup:%s"},{name:"connectionType",reg:/^connection:(new|existing)/,format:"connection:%s"},{name:"mid",reg:/^mid:([^\s]*)/,format:"mid:%s"},{push:"msid",reg:/^msid:([\w-]+)(?: ([\w-]+))?/,names:["id","appdata"],format:"msid:%s %s"},{name:"ptime",reg:/^ptime:(\d*(?:\.\d*)*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\d*(?:\.\d*)*)/,format:"maxptime:%d"},{name:"direction",reg:/^(sendrecv|recvonly|sendonly|inactive)/},{name:"icelite",reg:/^(ice-lite)/},{name:"iceUfrag",reg:/^ice-ufrag:(\S*)/,format:"ice-ufrag:%s"},{name:"icePwd",reg:/^ice-pwd:(\S*)/,format:"ice-pwd:%s"},{name:"fingerprint",reg:/^fingerprint:(\S*) (\S*)/,names:["type","hash"],format:"fingerprint:%s %s"},{push:"candidates",reg:/^candidate:(\S*) (\d*) (\S*) (\d*) (\S*) (\d*) typ (\S*)(?: raddr (\S*) rport (\d*))?(?: tcptype (\S*))?(?: generation (\d*))?(?: network-id (\d*))?(?: network-cost (\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","tcptype","generation","network-id","network-cost"],format:function(r){var e="candidate:%s %d %s %d %s %d typ %s";return e+=r.raddr!=null?" raddr %s rport %d":"%v%v",e+=r.tcptype!=null?" tcptype %s":"%v",r.generation!=null&&(e+=" generation %d"),e+=r["network-id"]!=null?" network-id %d":"%v",e+=r["network-cost"]!=null?" network-cost %d":"%v",e}},{name:"endOfCandidates",reg:/^(end-of-candidates)/},{name:"remoteCandidates",reg:/^remote-candidates:(.*)/,format:"remote-candidates:%s"},{name:"iceOptions",reg:/^ice-options:(\S*)/,format:"ice-options:%s"},{push:"ssrcs",reg:/^ssrc:(\d*) ([\w_-]*)(?::(.*))?/,names:["id","attribute","value"],format:function(r){var e="ssrc:%d";return r.attribute!=null&&(e+=" %s",r.value!=null&&(e+=":%s")),e}},{push:"ssrcGroups",reg:/^ssrc-group:([\x21\x23\x24\x25\x26\x27\x2A\x2B\x2D\x2E\w]*) (.*)/,names:["semantics","ssrcs"],format:"ssrc-group:%s %s"},{name:"msidSemantic",reg:/^msid-semantic:\s?(\w*) (\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{name:"rtcpRsize",reg:/^(rtcp-rsize)/},{name:"sctpmap",reg:/^sctpmap:([\w_/]*) (\S*)(?: (\S*))?/,names:["sctpmapNumber","app","maxMessageSize"],format:function(r){return r.maxMessageSize!=null?"sctpmap:%s %s %s":"sctpmap:%s %s"}},{name:"xGoogleFlag",reg:/^x-google-flag:([^\s]*)/,format:"x-google-flag:%s"},{push:"rids",reg:/^rid:([\d\w]+) (\w+)(?: ([\S| ]*))?/,names:["id","direction","params"],format:function(r){return r.params?"rid:%s %s %s":"rid:%s %s"}},{push:"imageattrs",reg:new RegExp("^imageattr:(\\d+|\\*)[\\s\\t]+(send|recv)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*)(?:[\\s\\t]+(recv|send)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*))?"),names:["pt","dir1","attrs1","dir2","attrs2"],format:function(r){return"imageattr:%s %s %s"+(r.dir2?" %s %s":"")}},{name:"simulcast",reg:new RegExp("^simulcast:(send|recv) ([a-zA-Z0-9\\-_~;,]+)(?:\\s?(send|recv) ([a-zA-Z0-9\\-_~;,]+))?$"),names:["dir1","list1","dir2","list2"],format:function(r){return"simulcast:%s %s"+(r.dir2?" %s %s":"")}},{name:"simulcast_03",reg:/^simulcast:[\s\t]+([\S+\s\t]+)$/,names:["value"],format:"simulcast: %s"},{name:"framerate",reg:/^framerate:(\d+(?:$|\.\d+))/,format:"framerate:%s"},{name:"sourceFilter",reg:/^source-filter: *(excl|incl) (\S*) (IP4|IP6|\*) (\S*) (.*)/,names:["filterMode","netType","addressTypes","destAddress","srcList"],format:"source-filter: %s %s %s %s %s"},{name:"bundleOnly",reg:/^(bundle-only)/},{name:"label",reg:/^label:(.+)/,format:"label:%s"},{name:"sctpPort",reg:/^sctp-port:(\d+)$/,format:"sctp-port:%s"},{name:"maxMessageSize",reg:/^max-message-size:(\d+)$/,format:"max-message-size:%s"},{push:"tsRefClocks",reg:/^ts-refclk:([^\s=]*)(?:=(\S*))?/,names:["clksrc","clksrcExt"],format:function(r){return"ts-refclk:%s"+(r.clksrcExt!=null?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(r){var e="mediaclk:";return e+=r.id!=null?"id=%s %s":"%v%s",e+=r.mediaClockValue!=null?"=%s":"",e+=r.rateNumerator!=null?" rate=%s":"",e+=r.rateDenominator!=null?"/%s":"",e}},{name:"keywords",reg:/^keywds:(.+)$/,format:"keywds:%s"},{name:"content",reg:/^content:(.+)/,format:"content:%s"},{name:"bfcpFloorCtrl",reg:/^floorctrl:(c-only|s-only|c-s)/,format:"floorctrl:%s"},{name:"bfcpConfId",reg:/^confid:(\d+)/,format:"confid:%s"},{name:"bfcpUserId",reg:/^userid:(\d+)/,format:"userid:%s"},{name:"bfcpFloorId",reg:/^floorid:(.+) (?:m-stream|mstrm):(.+)/,names:["id","mStream"],format:"floorid:%s mstrm:%s"},{push:"invalid",names:["value"]}]};Object.keys(Ri).forEach(function(r){var e=Ri[r];e.forEach(function(t){t.reg||(t.reg=/(.*)/),t.format||(t.format="%s")})})});var Ei=P(Se=>{"use strict";var ot=function(r){return String(Number(r))===r?Number(r):r},ed=function(r,e,t,s){if(s&&!t)e[s]=ot(r[1]);else for(var n=0;n<t.length;n+=1)r[n+1]!=null&&(e[t[n]]=ot(r[n+1]))},td=function(r,e,t){var s=r.name&&r.names;r.push&&!e[r.push]?e[r.push]=[]:s&&!e[r.name]&&(e[r.name]={});var n=r.push?{}:s?e[r.name]:e;ed(t.match(r.reg),n,r.names,r.name),r.push&&e[r.push].push(n)},Ti=hr(),rd=RegExp.prototype.test.bind(/^([a-z])=(.*)/);Se.parse=function(r){var e={},t=[],s=e;return r.split(/(\r\n|\r|\n)/).filter(rd).forEach(function(n){var i=n[0],a=n.slice(2);i==="m"&&(t.push({rtp:[],fmtp:[]}),s=t[t.length-1]);for(var o=0;o<(Ti[i]||[]).length;o+=1){var c=Ti[i][o];if(c.reg.test(a))return td(c,s,a)}}),e.media=t,e};var ki=function(r,e){var t=e.split(/=(.+)/,2);return t.length===2?r[t[0]]=ot(t[1]):t.length===1&&e.length>1&&(r[t[0]]=void 0),r};Se.parseParams=function(r){return r.split(/;\s?/).reduce(ki,{})};Se.parseFmtpConfig=Se.parseParams;Se.parsePayloads=function(r){return r.toString().split(" ").map(Number)};Se.parseRemoteCandidates=function(r){for(var e=[],t=r.split(" ").map(ot),s=0;s<t.length;s+=3)e.push({component:t[s],ip:t[s+1],port:t[s+2]});return e};Se.parseImageAttributes=function(r){return r.split(" ").map(function(e){return e.substring(1,e.length-1).split(",").reduce(ki,{})})};Se.parseSimulcastStreamList=function(r){return r.split(";").map(function(e){return e.split(",").map(function(t){var s,n=!1;return t[0]!=="~"?s=ot(t):(s=ot(t.substring(1,t.length)),n=!0),{scid:s,paused:n}})})}});var xi=P((op,Pi)=>{"use strict";var vs=hr(),sd=/%[sdv%]/g,nd=function(r){var e=1,t=arguments,s=t.length;return r.replace(sd,function(n){if(e>=s)return n;var i=t[e];switch(e+=1,n){case"%%":return"%";case"%s":return String(i);case"%d":return Number(i);case"%v":return""}})},bt=function(r,e,t){var s=e.format instanceof Function?e.format(e.push?t:t[e.name]):e.format,n=[r+"="+s];if(e.names)for(var i=0;i<e.names.length;i+=1){var a=e.names[i];e.name?n.push(t[e.name][a]):n.push(t[e.names[i]])}else n.push(t[e.name]);return nd.apply(null,n)},id=["v","o","s","i","u","e","p","c","b","t","r","z","a"],ad=["i","c","b","a"];Pi.exports=function(r,e){e=e||{},r.version==null&&(r.version=0),r.name==null&&(r.name=" "),r.media.forEach(function(i){i.payloads==null&&(i.payloads="")});var t=e.outerOrder||id,s=e.innerOrder||ad,n=[];return t.forEach(function(i){vs[i].forEach(function(a){a.name in r&&r[a.name]!=null?n.push(bt(i,a,r)):a.push in r&&r[a.push]!=null&&r[a.push].forEach(function(o){n.push(bt(i,a,o))})})}),r.media.forEach(function(i){n.push(bt("m",vs.m[0],i)),s.forEach(function(a){vs[a].forEach(function(o){o.name in i&&i[o.name]!=null?n.push(bt(a,o,i)):o.push in i&&i[o.push]!=null&&i[o.push].forEach(function(c){n.push(bt(a,o,c))})})})}),n.join(`\r
|
|
2
2
|
`)+`\r
|
|
3
|
-
`}});var Ce=P(we=>{"use strict";var Ne=Ei(),dd=xi(),ld=pr();we.grammar=ld;we.write=dd;we.parse=Ne.parse;we.parseParams=Ne.parseParams;we.parseFmtpConfig=Ne.parseFmtpConfig;we.parsePayloads=Ne.parsePayloads;we.parseRemoteCandidates=Ne.parseRemoteCandidates;we.parseImageAttributes=Ne.parseImageAttributes;we.parseSimulcastStreamList=Ne.parseSimulcastStreamList});var je=P(vs=>{"use strict";Object.defineProperty(vs,"__esModule",{value:!0});vs.parse=pd;var ud=new RegExp("^[LS]([1-9]\\d{0,1})T([1-9]\\d{0,1})");function pd(r){let e=ud.exec(r??"");return e?{spatialLayers:Number(e[1]),temporalLayers:Number(e[2])}:{spatialLayers:1,temporalLayers:1}}});var Li=P(Pe=>{"use strict";Object.defineProperty(Pe,"__esModule",{value:!0});Pe.OfferMediaSection=Pe.AnswerMediaSection=Pe.MediaSection=void 0;var hd=Ce(),Di=Me(),St=class{_mediaObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:s}){if(this._mediaObject={type:"",port:0,protocol:"",payloads:"",rtp:[],fmtp:[]},e&&this.setIceParameters(e),t){this._mediaObject.candidates=[];for(let n of t){let i={foundation:n.foundation,component:1,ip:n.address??n.ip,port:n.port,priority:n.priority,transport:n.protocol,type:n.type};n.tcpType&&(i.tcptype=n.tcpType),this._mediaObject.candidates.push(i)}this._mediaObject.endOfCandidates="end-of-candidates",this._mediaObject.iceOptions="renomination"}s&&this.setDtlsRole(s.role)}get mid(){return String(this._mediaObject.mid)}get closed(){return this._mediaObject.port===0}getObject(){return this._mediaObject}setIceParameters(e){this._mediaObject.iceUfrag=e.usernameFragment,this._mediaObject.icePwd=e.password}pause(){this._mediaObject.direction="inactive"}disable(){this.pause()}close(){this.disable(),this._mediaObject.port=0,delete this._mediaObject.candidates,delete this._mediaObject.endOfCandidates,delete this._mediaObject.iceUfrag,delete this._mediaObject.icePwd,delete this._mediaObject.iceOptions,this._mediaObject.rtp=[],this._mediaObject.fmtp=[],delete this._mediaObject.rtcp,delete this._mediaObject.rtcpFb,delete this._mediaObject.ssrcs,delete this._mediaObject.ssrcGroups,delete this._mediaObject.simulcast,delete this._mediaObject.simulcast_03,delete this._mediaObject.rids,delete this._mediaObject.extmapAllowMixed}};Pe.MediaSection=St;var ws=class extends St{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:s,sctpParameters:n,plainRtpParameters:i,offerMediaObject:o,offerRtpParameters:a,answerRtpParameters:c,codecOptions:l}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:s}),this._mediaObject.mid=String(o.mid),this._mediaObject.type=o.type,this._mediaObject.protocol=o.protocol,i?(this._mediaObject.connection={ip:i.ip,version:i.ipVersion},this._mediaObject.port=i.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},this._mediaObject.port=7),o.type){case"audio":case"video":{this._mediaObject.direction="recvonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[];for(let d of c.codecs){let u={payload:d.payloadType,codec:Ii(d),rate:d.clockRate};d.channels>1&&(u.encoding=d.channels),this._mediaObject.rtp.push(u);let p=Di.clone(d.parameters)??{},m=Di.clone(d.rtcpFeedback)??[];if(l){let{opusStereo:h,opusFec:g,opusDtx:v,opusMaxPlaybackRate:_,opusMaxAverageBitrate:x,opusPtime:S,opusNack:w,videoGoogleStartBitrate:D,videoGoogleMaxBitrate:F,videoGoogleMinBitrate:z}=l,N=a.codecs.find(q=>q.payloadType===d.payloadType);switch(d.mimeType.toLowerCase()){case"audio/opus":case"audio/multiopus":{h!==void 0&&(N.parameters["sprop-stereo"]=h?1:0,p.stereo=h?1:0),g!==void 0&&(N.parameters.useinbandfec=g?1:0,p.useinbandfec=g?1:0),v!==void 0&&(N.parameters.usedtx=v?1:0,p.usedtx=v?1:0),_!==void 0&&(p.maxplaybackrate=_),x!==void 0&&(p.maxaveragebitrate=x),S!==void 0&&(N.parameters.ptime=S,p.ptime=S),w||(N.rtcpFeedback=N.rtcpFeedback.filter(q=>q.type!=="nack"||q.parameter),m=m.filter(q=>q.type!=="nack"||q.parameter));break}case"video/vp8":case"video/vp9":case"video/h264":case"video/h265":case"video/av1":{D!==void 0&&(p["x-google-start-bitrate"]=D),F!==void 0&&(p["x-google-max-bitrate"]=F),z!==void 0&&(p["x-google-min-bitrate"]=z);break}}}let f={payload:d.payloadType,config:""};for(let h of Object.keys(p))f.config&&(f.config+=";"),f.config+=`${h}=${p[h]}`;f.config&&this._mediaObject.fmtp.push(f);for(let h of m)this._mediaObject.rtcpFb.push({payload:d.payloadType,type:h.type,subtype:h.parameter})}this._mediaObject.payloads=c.codecs.map(d=>d.payloadType).join(" "),this._mediaObject.ext=[];for(let d of c.headerExtensions)(o.ext??[]).some(p=>p.uri===d.uri)&&this._mediaObject.ext.push({uri:d.uri,value:d.id});if(o.extmapAllowMixed==="extmap-allow-mixed"&&(this._mediaObject.extmapAllowMixed="extmap-allow-mixed"),o.simulcast){this._mediaObject.simulcast={dir1:"recv",list1:o.simulcast.list1},this._mediaObject.rids=[];for(let d of o.rids??[])d.direction==="send"&&this._mediaObject.rids.push({id:d.id,direction:"recv"})}else if(o.simulcast_03){this._mediaObject.simulcast_03={value:o.simulcast_03.value.replace(/send/g,"recv")},this._mediaObject.rids=[];for(let d of o.rids??[])d.direction==="send"&&this._mediaObject.rids.push({id:d.id,direction:"recv"})}this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";break}case"application":{typeof o.sctpPort=="number"?(this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=n.port,this._mediaObject.maxMessageSize=n.maxMessageSize):o.sctpmap&&(this._mediaObject.payloads=String(n.port),this._mediaObject.sctpmap={app:"webrtc-datachannel",sctpmapNumber:n.port,maxMessageSize:n.maxMessageSize});break}}}setDtlsRole(e){switch(e){case"client":{this._mediaObject.setup="active";break}case"server":{this._mediaObject.setup="passive";break}case"auto":{this._mediaObject.setup="actpass";break}}}resume(){this._mediaObject.direction="recvonly"}muxSimulcastStreams(e){if(!this._mediaObject.simulcast?.list1)return;let t={};for(let i of e)i.rid&&(t[i.rid]=i);let s=this._mediaObject.simulcast.list1,n=hd.parseSimulcastStreamList(s);for(let i of n)for(let o of i)o.paused=!t[o.scid]?.active;this._mediaObject.simulcast.list1=n.map(i=>i.map(o=>`${o.paused?"~":""}${o.scid}`).join(",")).join(";")}};Pe.AnswerMediaSection=ws;var ys=class extends St{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:s,sctpParameters:n,plainRtpParameters:i,mid:o,kind:a,offerRtpParameters:c,streamId:l,trackId:d}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:s}),this._mediaObject.mid=String(o),this._mediaObject.type=a,i?(this._mediaObject.connection={ip:i.ip,version:i.ipVersion},this._mediaObject.protocol="RTP/AVP",this._mediaObject.port=i.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},n?this._mediaObject.protocol="UDP/DTLS/SCTP":this._mediaObject.protocol="UDP/TLS/RTP/SAVPF",this._mediaObject.port=7),this._mediaObject.extmapAllowMixed="extmap-allow-mixed",a){case"audio":case"video":{this._mediaObject.direction="sendonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[],this._mediaObject.msid=[{id:l,appdata:d}];for(let f of c.codecs){let h={payload:f.payloadType,codec:Ii(f),rate:f.clockRate};f.channels>1&&(h.encoding=f.channels),this._mediaObject.rtp.push(h);let g={payload:f.payloadType,config:""};for(let v of Object.keys(f.parameters??{}))g.config&&(g.config+=";"),g.config+=`${v}=${f.parameters[v]}`;g.config&&this._mediaObject.fmtp.push(g);for(let v of f.rtcpFeedback)this._mediaObject.rtcpFb.push({payload:f.payloadType,type:v.type,subtype:v.parameter})}this._mediaObject.payloads=c.codecs.map(f=>f.payloadType).join(" "),this._mediaObject.ext=[];for(let f of c.headerExtensions)this._mediaObject.ext.push({uri:f.uri,value:f.id});this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";let u=c.encodings[0],p=u.ssrc,m=u.rtx?.ssrc;this._mediaObject.ssrcs=[],this._mediaObject.ssrcGroups=[],p&&c.rtcp.cname&&this._mediaObject.ssrcs.push({id:p,attribute:"cname",value:c.rtcp.cname}),m&&(c.rtcp.cname&&this._mediaObject.ssrcs.push({id:m,attribute:"cname",value:c.rtcp.cname}),p&&this._mediaObject.ssrcGroups.push({semantics:"FID",ssrcs:`${p} ${m}`}));break}case"application":{this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=n.port,this._mediaObject.maxMessageSize=n.maxMessageSize;break}}}setDtlsRole(e){this._mediaObject.setup="actpass"}resume(){this._mediaObject.direction="sendonly"}};Pe.OfferMediaSection=ys;function Ii(r){let t=new RegExp("^(audio|video)/(.+)","i").exec(r.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");return t[2]}});var ct=P(mr=>{"use strict";Object.defineProperty(mr,"__esModule",{value:!0});mr.RemoteSdp=void 0;var fd=Ce(),md=V(),hr=Li(),gd=Ss(),_d=["av1","h264"],fr=new md.Logger("RemoteSdp"),bs=class{_iceParameters;_iceCandidates;_dtlsParameters;_sctpParameters;_plainRtpParameters;_mediaSections=[];_midToIndex=new Map;_firstMid;_sdpObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:s,sctpParameters:n,plainRtpParameters:i}){if(this._iceParameters=e,this._iceCandidates=t,this._dtlsParameters=s,this._sctpParameters=n,this._plainRtpParameters=i,this._sdpObject={version:0,origin:{address:"0.0.0.0",ipVer:4,netType:"IN",sessionId:"10000",sessionVersion:0,username:`media-client-v${gd.version}`},name:"-",timing:{start:0,stop:0},media:[]},this._sdpObject.iceOptions="ice2",e?.iceLite&&(this._sdpObject.icelite="ice-lite"),s){this._sdpObject.msidSemantic={semantic:"WMS",token:"*"};let o=this._dtlsParameters.fingerprints.length;this._sdpObject.fingerprint={type:s.fingerprints[o-1].algorithm,hash:s.fingerprints[o-1].value},this._sdpObject.groups=[{type:"BUNDLE",mids:""}]}i&&(this._sdpObject.origin.address=i.ip,this._sdpObject.origin.ipVer=i.ipVersion)}updateIceParameters(e){fr.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){fr.debug("updateDtlsRole() [role:%s]",e),this._dtlsParameters.role=e;for(let t of this._mediaSections)t.setDtlsRole(e)}setSessionExtmapAllowMixed(){fr.debug("setSessionExtmapAllowMixed()"),this._sdpObject.extmapAllowMixed="extmap-allow-mixed"}getNextMediaSectionIdx(){for(let e=0;e<this._mediaSections.length;++e){let t=this._mediaSections[e];if(t.closed)return{idx:e,reuseMid:t.mid}}return{idx:this._mediaSections.length}}send({offerMediaObject:e,reuseMid:t,offerRtpParameters:s,answerRtpParameters:n,codecOptions:i}){let o=new hr.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,offerMediaObject:e,offerRtpParameters:s,answerRtpParameters:n,codecOptions:i}),a=o.getObject();a.rtp.find(l=>_d.includes(l.codec.toLowerCase()))||(a.ext=a.ext?.filter(l=>l.uri!=="https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension")),t?this.replaceMediaSection(o,t):this._midToIndex.has(o.mid)?this.replaceMediaSection(o):this.addMediaSection(o)}receive({mid:e,kind:t,offerRtpParameters:s,streamId:n,trackId:i}){this.setSessionExtmapAllowMixed();let o=new hr.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,mid:e,kind:t,offerRtpParameters:s,streamId:n,trackId:i}),a=this._mediaSections.find(c=>c.closed&&c.getObject().type===t);a?this.replaceMediaSection(o,a.mid):this.addMediaSection(o)}pauseMediaSection(e){this.findMediaSection(e).pause()}resumeSendingMediaSection(e){this.findMediaSection(e).resume()}resumeReceivingMediaSection(e){this.findMediaSection(e).resume()}disableMediaSection(e){this.findMediaSection(e).disable()}closeMediaSection(e){let t=this.findMediaSection(e);return e===this._firstMid?(fr.debug("closeMediaSection() | cannot close first media section, disabling it instead [mid:%s]",e),this.disableMediaSection(e),!1):(t.close(),this.regenerateBundleMids(),!0)}muxMediaSectionSimulcast(e,t){let s=this.findMediaSection(e);s.muxSimulcastStreams(t),this.replaceMediaSection(s)}sendSctpAssociation({offerMediaObject:e}){let t=new hr.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 hr.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++,fd.write(this._sdpObject)}addMediaSection(e){this._firstMid||(this._firstMid=e.mid),this._mediaSections.push(e),this._midToIndex.set(e.mid,this._mediaSections.length-1),this._sdpObject.media.push(e.getObject()),this.regenerateBundleMids()}replaceMediaSection(e,t){if(typeof t=="string"){let s=this._midToIndex.get(t);if(s===void 0)throw new Error(`no media section found for reuseMid '${t}'`);let n=this._mediaSections[s];this._mediaSections[s]=e,this._midToIndex.delete(n.mid),this._midToIndex.set(e.mid,s),this._sdpObject.media[s]=e.getObject(),this.regenerateBundleMids()}else{let s=this._midToIndex.get(e.mid);if(s===void 0)throw new Error(`no media section found with mid '${e.mid}'`);this._mediaSections[s]=e,this._sdpObject.media[s]=e.getObject()}}findMediaSection(e){let t=this._midToIndex.get(e);if(t===void 0)throw new Error(`no media section found with mid '${e}'`);return this._mediaSections[t]}regenerateBundleMids(){this._dtlsParameters&&(this._sdpObject.groups[0].mids=this._mediaSections.filter(e=>!e.closed).map(e=>e.mid).join(" "))}};mr.RemoteSdp=bs});var dt=P(Fe=>{"use strict";Object.defineProperty(Fe,"__esModule",{value:!0});Fe.extractRtpCapabilities=vd;Fe.extractDtlsParameters=wd;Fe.getCname=yd;Fe.applyCodecParameters=bd;Fe.addHeaderExtension=Sd;var Mi=Ce();function vd({sdpObject:r}){let e=new Map,t=new Map;for(let n of r.media){let i=n.type;switch(i){case"audio":case"video":break;default:continue}for(let o of n.rtp){let a={kind:i,mimeType:`${i}/${o.codec}`,preferredPayloadType:o.payload,clockRate:o.rate,channels:o.encoding,parameters:{},rtcpFeedback:[]};e.set(a.preferredPayloadType,a)}for(let o of n.fmtp??[]){let a=Mi.parseParams(o.config),c=e.get(o.payload);c&&(a?.hasOwnProperty("profile-level-id")&&(a["profile-level-id"]=String(a["profile-level-id"])),c.parameters=a)}for(let o of n.rtcpFb??[]){let a={type:o.type,parameter:o.subtype};if(a.parameter||delete a.parameter,o.payload!=="*"){let c=e.get(Number(o.payload));if(!c)continue;c.rtcpFeedback.push(a)}else for(let c of e.values())c.kind===i&&!/.+\/rtx$/i.test(c.mimeType)&&c.rtcpFeedback.push(a)}for(let o of n.ext??[]){if(o["encrypt-uri"])continue;let a={kind:i,uri:o.uri,preferredId:o.value};t.set(a.preferredId,a)}}return{codecs:Array.from(e.values()),headerExtensions:Array.from(t.values())}}function wd({sdpObject:r}){let e=r.setup,t=r.fingerprint;if(!e||!t){let i=(r.media??[]).find(o=>o.port!==0);i&&(e=e??i.setup,t=t??i.fingerprint)}if(e){if(!t)throw new Error("no a=fingerprint found at SDP session or media level")}else throw new Error("no a=setup found at SDP session or media level");let s;switch(e){case"active":{s="client";break}case"passive":{s="server";break}case"actpass":{s="auto";break}}return{role:s,fingerprints:[{algorithm:t.type,value:t.hash}]}}function yd({offerMediaObject:r}){let e=(r.ssrcs??[]).find(t=>t.attribute==="cname");return e?e.value:""}function bd({offerRtpParameters:r,answerMediaObject:e}){for(let t of r.codecs){let s=t.mimeType.toLowerCase();if(s!=="audio/opus"||!(e.rtp??[]).find(a=>a.payload===t.payloadType))continue;e.fmtp=e.fmtp??[];let i=e.fmtp.find(a=>a.payload===t.payloadType);i||(i={payload:t.payloadType,config:""},e.fmtp.push(i));let o=Mi.parseParams(i.config);if(s==="audio/opus"){let a=t.parameters?.["sprop-stereo"];a!==void 0&&(o.stereo=Number(a)?1:0)}i.config="";for(let a of Object.keys(o))i.config&&(i.config+=";"),i.config+=`${a}=${o[a]}`}}function Sd({offerMediaObject:r,headerExtensionUri:e,headerExtensionId:t}){r.ext||(r.ext=[]),r.ext.push({uri:e,value:t})}});var lt=P(gr=>{"use strict";Object.defineProperty(gr,"__esModule",{value:!0});gr.getRtpEncodings=Rd;gr.addLegacySimulcast=Cd;function Rd({offerMediaObject:r,codecs:e}){let t=new Set;for(let i of r.ssrcs??[]){let o=i.id;o&&t.add(o)}if(t.size===0)throw new Error("no a=ssrc lines found");let s=new Map;for(let i of r.ssrcGroups??[]){if(i.semantics!=="FID")continue;let o=i.ssrcs.split(/\s+/),a=Number(o[0]),c=Number(o[1]);t.has(a)&&(t.delete(a),t.delete(c),s.set(a,c))}for(let i of t)s.set(i,void 0);let n=[];for(let[i,o]of s){let a={ssrc:i};o&&e.length>1&&(a.rtx={ssrc:o}),n.push(a)}return n}function Cd({offerMediaObject:r,numStreams:e}){if(e<=1)throw new TypeError("numStreams must be greater than 1");let t=(r.ssrcs??[]).find(u=>u.attribute==="msid");if(!t)throw new Error("a=ssrc line with msid information not found");let[s,n]=t.value.split(" "),i=Number(t.id),o;(r.ssrcGroups??[]).some(u=>{if(u.semantics!=="FID")return!1;let p=u.ssrcs.split(/\s+/);return Number(p[0])===i?(o=Number(p[1]),!0):!1});let a=(r.ssrcs??[]).find(u=>u.attribute==="cname");if(!a)throw new Error("a=ssrc line with cname information not found");let c=a.value,l=[],d=[];for(let u=0;u<e;++u)l.push(i+u),o&&d.push(o+u);r.ssrcGroups=[],r.ssrcs=[],r.ssrcGroups.push({semantics:"SIM",ssrcs:l.join(" ")});for(let u of l)r.ssrcs.push({id:u,attribute:"cname",value:c}),r.ssrcs.push({id:u,attribute:"msid",value:`${s} ${n}`});for(let u=0;u<d.length;++u){let p=l[u],m=d[u];r.ssrcs.push({id:m,attribute:"cname",value:c}),r.ssrcs.push({id:m,attribute:"msid",value:`${s} ${n}`}),r.ssrcGroups.push({semantics:"FID",ssrcs:`${p} ${m}`})}}});var ut=P(Rt=>{"use strict";Object.defineProperty(Rt,"__esModule",{value:!0});Rt.addNackSupportForOpus=Td;Rt.addHeaderExtensionSupport=kd;Rt.getMsidStreamIdAndTrackId=Ed;function Td(r){for(let e of r.codecs??[])(e.mimeType.toLowerCase()==="audio/opus"||e.mimeType.toLowerCase()==="audio/multiopus")&&!e.rtcpFeedback?.some(t=>t.type==="nack"&&!t.parameter)&&(e.rtcpFeedback||(e.rtcpFeedback=[]),e.rtcpFeedback.push({type:"nack"}))}function kd(r,e){let t,s=r.headerExtensions?.find(i=>i.uri===e.uri);if(s){if(s.kind===e.kind)return;t=s.preferredId}if(r.headerExtensions||(r.headerExtensions=[]),t===void 0){t=1;let i=new Set(r.headerExtensions.map(o=>o.preferredId));for(;i.has(t);)++t}let n={kind:e.kind,uri:e.uri,preferredId:t,preferredEncrypt:!1,direction:e.direction};r.headerExtensions.push(n)}function Ed(r){if(!r||typeof r!="string")return{msidStreamId:void 0,msidTrackId:void 0};let[e,t]=r.trim().split(/\s+/);return e?{msidStreamId:e,msidTrackId:t}:{msidStreamId:void 0,msidTrackId:void 0}}});var ji=P(_r=>{"use strict";Object.defineProperty(_r,"__esModule",{value:!0});_r.Chrome111=void 0;var ye=Ce(),Pd=Z(),xd=V(),Ct=ge(),Dd=re(),Id=je(),Ld=ct(),Tt=dt(),Ai=lt(),Rs=ut(),k=new xd.Logger("Chrome111"),Oi="Chrome111",Ni={OS:65535,MIS:65535},Cs=class r extends Pd.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Oi,factory:e=>new r(e),getNativeRtpCapabilities:async({direction:e})=>{k.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e,sendEncodings:[{scalabilityMode:"L3T3"}]});let s=await t.createOffer();try{t.close()}catch{}t=void 0;let n=ye.parse(s.sdp);return r.getLocalRtpCapabilities(n)}catch(s){try{t?.close()}catch{}throw t=void 0,s}},getNativeSctpCapabilities:async()=>(k.debug("getNativeSctpCapabilities()"),{numStreams:Ni})}}static getLocalRtpCapabilities(e,t=[]){let s=Tt.extractRtpCapabilities({sdpObject:e});Ct.validateAndNormalizeRtpCapabilities(s),Rs.addNackSupportForOpus(s);for(let n of t)Rs.addHeaderExtensionSupport(s,n);return s}constructor({direction:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,getSendExtendedRtpCapabilities:l}){super(),k.debug("constructor()"),this._direction=e,this._remoteSdp=new Ld.RemoteSdp({iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=l,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:o??[],iceTransportPolicy:a??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(k.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Oi}close(){if(k.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),k.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),k.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});k.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let s={type:"answer",sdp:this._remoteSdp.getSdp()};k.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};k.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();k.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:s,codecOptions:n,headerExtensionOptions:i,codec:o,onRtpSender:a}){if(this.assertNotClosed(),this.assertSendDirection(),k.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),s&&s.length>1){let S=1;for(let w of s){let D=w.scalabilityMode?(0,Id.parse)(w.scalabilityMode).temporalLayers:3;D>S&&(S=D)}s.forEach((w,D)=>{w.rid=`r${D}`,w.scalabilityMode=`L1T${S}`})}let c=this._remoteSdp.getNextMediaSectionIdx(),l=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:s});a&&a(l.sender);let d=await this._pc.createOffer(),u=ye.parse(d.sdp);u.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let p=[];p.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let m=r.getLocalRtpCapabilities(u,p),f=this._getSendExtendedRtpCapabilities(m),h=Ct.getSendingRtpParameters(e.kind,f);h.codecs=Ct.reduceCodecs(h.codecs,o);let g=Ct.getSendingRemoteRtpParameters(e.kind,f);if(g.codecs=Ct.reduceCodecs(g.codecs,o),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:u}),i?.absCaptureTime){let S=u.media[c.idx];Tt.addHeaderExtension({offerMediaObject:S,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(w=>w.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:ye.write(u)}}k.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let v=l.mid;h.mid=v,u=ye.parse(this._pc.localDescription.sdp);let _=u.media[c.idx];if(h.rtcp.cname=Tt.getCname({offerMediaObject:_}),h.msid=`${t??this._sendStream.id} ${e.id}`,!s)h.encodings=Ai.getRtpEncodings({offerMediaObject:_,codecs:h.codecs});else if(s.length===1){let S=Ai.getRtpEncodings({offerMediaObject:_,codecs:h.codecs});Object.assign(S[0],s[0]),h.encodings=S}else h.encodings=s;this._remoteSdp.send({offerMediaObject:_,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:g,codecOptions:n});let x={type:"answer",sdp:this._remoteSdp.getSdp()};return k.debug("send() | calling pc.setRemoteDescription() [answer:%o]",x),await this._pc.setRemoteDescription(x),this._mapMidTransceiver.set(v,l),{localId:v,rtpParameters:h,rtpSender:l.sender}}async stopSending(e){if(this.assertSendDirection(),k.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let n=await this._pc.createOffer();k.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};k.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),k.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let s=await this._pc.createOffer();k.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);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(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let s=await this._pc.createOffer();k.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);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 s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");await s.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),k.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((a,c)=>{c<=t?a.active=!0:a.active=!1}),await s.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 o={type:"answer",sdp:this._remoteSdp.getSdp()};k.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),k.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((a,c)=>{n.encodings[c]={...a,...t}}),await s.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 o={type:"answer",sdp:this._remoteSdp.getSdp()};k.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};k.debug("sendDataChannel() [options:%o]",t);let s=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Ni.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),o=ye.parse(i.sdp),a=o.media.find(l=>l.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),k.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:a});let c={type:"answer",sdp:this._remoteSdp.getSdp()};k.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:s,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],s=new Map;for(let a of e){let{trackId:c,kind:l,rtpParameters:d,streamId:u}=a;k.debug("receive() [trackId:%s, kind:%s]",c,l);let p=d.mid??String(this._mapMidTransceiver.size);s.set(c,p);let{msidStreamId:m}=Rs.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:p,kind:l,offerRtpParameters:d,streamId:u??m??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 a of e){let{trackId:c,onRtpReceiver:l}=a;if(l){let d=s.get(c),u=this._pc.getTransceivers().find(p=>p.mid===d);if(!u)throw new Error("transceiver not found");l(u.receiver)}}let i=await this._pc.createAnswer(),o=ye.parse(i.sdp);for(let a of e){let{trackId:c,rtpParameters:l}=a,d=s.get(c),u=o.media.find(p=>String(p.mid)===d);Tt.applyCodecParameters({offerRtpParameters:l,answerMediaObject:u})}i={type:"answer",sdp:ye.write(o)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),k.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let a of e){let{trackId:c}=a,l=s.get(c),d=this._pc.getTransceivers().find(u=>u.mid===l);if(d)this._mapMidTransceiver.set(l,d),t.push({localId:l,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let 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 s=await this._pc.createAnswer();k.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){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 s=await this._pc.createAnswer();k.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){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 s=await this._pc.createAnswer();k.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:s,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c}=t,l={negotiated:!0,id:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c,protocol:n};k.debug("receiveDataChannel() [options:%o]",l);let d=this._pc.createDataChannel(s,l);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let u={type:"offer",sdp:this._remoteSdp.getSdp()};k.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",u),await this._pc.setRemoteDescription(u);let p=await this._pc.createAnswer(),m=ye.parse(p.sdp),f=m.media.find(h=>h.type==="application");f.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),p={type:"answer",sdp:ye.write(m)},k.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",p),await this._pc.setLocalDescription(p),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=ye.parse(this._pc.localDescription.sdp));let s=Tt.extractDtlsParameters({sdpObject:t});s.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:s},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Dd.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};_r.Chrome111=Cs});var Ui=P(vr=>{"use strict";Object.defineProperty(vr,"__esModule",{value:!0});vr.Chrome74=void 0;var se=Ce(),Md=V(),Ad=Z(),kt=ge(),Od=re(),Nd=je(),jd=ct(),Et=dt(),Ts=lt(),ks=ut(),C=new Md.Logger("Chrome74"),Fi="Chrome74",$i={OS:1024,MIS:1024},Es=class r extends Ad.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Fi,factory:e=>new r(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 s=await t.createOffer();try{t.close()}catch{}t=void 0;let n=se.parse(s.sdp);return r.getLocalRtpCapabilities(n)}catch(s){try{t?.close()}catch{}throw t=void 0,s}},getNativeSctpCapabilities:async()=>(C.debug("getNativeSctpCapabilities()"),{numStreams:$i})}}static getLocalRtpCapabilities(e,t=[]){let s=Et.extractRtpCapabilities({sdpObject:e});kt.validateAndNormalizeRtpCapabilities(s),ks.addNackSupportForOpus(s);for(let n of t)ks.addHeaderExtensionSupport(s,n);return s}constructor({direction:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,getSendExtendedRtpCapabilities:l}){super(),C.debug("constructor()"),this._direction=e,this._remoteSdp=new jd.RemoteSdp({iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=l,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:o??[],iceTransportPolicy:a??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(C.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Fi}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 s={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();C.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:s,codecOptions:n,headerExtensionOptions:i,codec:o}){this.assertNotClosed(),this.assertSendDirection(),C.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),s&&s.length>1&&s.forEach((w,D)=>{w.rid=`r${D}`});let a=this._remoteSdp.getNextMediaSectionIdx(),c=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:s}),l=await this._pc.createOffer(),d=se.parse(l.sdp);d.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let u=[];u.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let p=r.getLocalRtpCapabilities(d,u),m=this._getSendExtendedRtpCapabilities(p),f=kt.getSendingRtpParameters(e.kind,m);f.codecs=kt.reduceCodecs(f.codecs,o);let h=kt.getSendingRemoteRtpParameters(e.kind,m);h.codecs=kt.reduceCodecs(h.codecs,o),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:d});let g=!1,v=(0,Nd.parse)((s??[{}])[0].scalabilityMode),_;s?.length===1&&v.spatialLayers>1&&f.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(C.debug("send() | enabling legacy simulcast for VP9 SVC"),g=!0,d=se.parse(l.sdp),_=d.media[a.idx],Ts.addLegacySimulcast({offerMediaObject:_,numStreams:v.spatialLayers}),l={type:"offer",sdp:se.write(d)}),C.debug("send() | calling pc.setLocalDescription() [offer:%o]",l),i?.absCaptureTime&&(_=d.media[a.idx],Et.addHeaderExtension({offerMediaObject:_,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:h.headerExtensions.find(w=>w.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),l={type:"offer",sdp:se.write(d)}),await this._pc.setLocalDescription(l);let x=c.mid;if(f.mid=x,d=se.parse(this._pc.localDescription.sdp),_=d.media[a.idx],f.rtcp.cname=Et.getCname({offerMediaObject:_}),f.msid=`${t??this._sendStream.id} ${e.id}`,!s)f.encodings=Ts.getRtpEncodings({offerMediaObject:_,codecs:f.codecs});else if(s.length===1){let w=Ts.getRtpEncodings({offerMediaObject:_,codecs:f.codecs});Object.assign(w[0],s[0]),g&&(w=[w[0]]),f.encodings=w}else f.encodings=s;if(f.encodings.length>1&&(f.codecs[0].mimeType.toLowerCase()==="video/vp8"||f.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let w of f.encodings)w.scalabilityMode?w.scalabilityMode=`L1T${v.temporalLayers}`:w.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:_,reuseMid:a.reuseMid,offerRtpParameters:f,answerRtpParameters:h,codecOptions:n});let S={type:"answer",sdp:this._remoteSdp.getSdp()};return C.debug("send() | calling pc.setRemoteDescription() [answer:%o]",S),await this._pc.setRemoteDescription(S),this._mapMidTransceiver.set(x,c),{localId:x,rtpParameters:f,rtpSender:c.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 s=await this._pc.createOffer();C.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);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 s=await this._pc.createOffer();C.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);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 s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");await s.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),C.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((a,c)=>{c<=t?a.active=!0:a.active=!1}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();C.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),C.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((a,c)=>{n.encodings[c]={...a,...t}}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();C.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};C.debug("sendDataChannel() [options:%o]",t);let s=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%$i.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),o=se.parse(i.sdp),a=o.media.find(l=>l.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),C.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:a});let c={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:s,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],s=new Map;for(let a of e){let{trackId:c,kind:l,rtpParameters:d,streamId:u}=a;C.debug("receive() [trackId:%s, kind:%s]",c,l);let p=d.mid??String(this._mapMidTransceiver.size);s.set(c,p);let{msidStreamId:m}=ks.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:p,kind:l,offerRtpParameters:d,streamId:u??m??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);let i=await this._pc.createAnswer(),o=se.parse(i.sdp);for(let a of e){let{trackId:c,rtpParameters:l}=a,d=s.get(c),u=o.media.find(p=>String(p.mid)===d);Et.applyCodecParameters({offerRtpParameters:l,answerMediaObject:u})}i={type:"answer",sdp:se.write(o)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),C.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let a of e){let{trackId:c}=a,l=s.get(c),d=this._pc.getTransceivers().find(u=>u.mid===l);if(d)this._mapMidTransceiver.set(l,d),t.push({localId:l,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let 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 s=await this._pc.createAnswer();C.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){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 s=await this._pc.createAnswer();C.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){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 s=await this._pc.createAnswer();C.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:s,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c}=t,l={negotiated:!0,id:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c,protocol:n};C.debug("receiveDataChannel() [options:%o]",l);let d=this._pc.createDataChannel(s,l);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let u={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",u),await this._pc.setRemoteDescription(u);let p=await this._pc.createAnswer(),m=se.parse(p.sdp),f=m.media.find(h=>h.type==="application");f.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),p={type:"answer",sdp:se.write(m)},C.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",p),await this._pc.setLocalDescription(p),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=se.parse(this._pc.localDescription.sdp));let s=Et.extractDtlsParameters({sdpObject:t});s.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:s},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Od.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')}};vr.Chrome74=Es});var Hi=P(yr=>{"use strict";Object.defineProperty(yr,"__esModule",{value:!0});yr.Firefox120=void 0;var Te=Ce(),Fd=Z(),$d=V(),qi=re(),Pt=ge(),Ud=je(),qd=ct(),wr=dt(),Bi=lt(),Bd=ut(),E=new $d.Logger("Firefox120"),Wi="Firefox120",zi={OS:16,MIS:2048},Ps=class r extends Fd.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Wi,factory:e=>new r(e),getNativeRtpCapabilities:async({direction:e})=>{E.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"}),s=document.createElement("canvas");s.getContext("2d");let i=s.captureStream().getVideoTracks()[0];try{t.addTransceiver("audio",{direction:e}),t.addTransceiver(i,{direction:e,sendEncodings:[{rid:"r0",maxBitrate:1e5},{rid:"r1",maxBitrate:5e5}]});let o=await t.createOffer();try{s.remove()}catch{}try{i.stop()}catch{}try{t.close()}catch{}t=void 0;let a=Te.parse(o.sdp);return r.getLocalRtpCapabilities(a)}catch(o){try{s.remove()}catch{}try{i.stop()}catch{}try{t?.close()}catch{}throw t=void 0,o}},getNativeSctpCapabilities:async()=>(E.debug("getNativeSctpCapabilities()"),{numStreams:zi})}}static getLocalRtpCapabilities(e){let t=wr.extractRtpCapabilities({sdpObject:e});return Pt.validateAndNormalizeRtpCapabilities(t),t}constructor({direction:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,getSendExtendedRtpCapabilities:l}){super(),E.debug("constructor()"),this._direction=e,this._remoteSdp=new qd.RemoteSdp({iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=l,this._pc=new RTCPeerConnection({iceServers:o??[],iceTransportPolicy:a??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(E.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Wi}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 qi.UnsupportedError("not supported")}async restartIce(e){if(this.assertNotClosed(),E.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});E.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let s={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();E.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:s,codecOptions:n,codec:i,onRtpSender:o}){this.assertNotClosed(),this.assertSendDirection(),E.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),s&&s.length>1&&s.forEach((_,x)=>{_.rid=`r${x}`});let a=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:s});o&&o(a.sender);let c=await this._pc.createOffer(),l=Te.parse(c.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let d=r.getLocalRtpCapabilities(l),u=this._getSendExtendedRtpCapabilities(d),p=Pt.getSendingRtpParameters(e.kind,u);p.codecs=Pt.reduceCodecs(p.codecs,i);let m=Pt.getSendingRemoteRtpParameters(e.kind,u);m.codecs=Pt.reduceCodecs(m.codecs,i),this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:l});let f=(0,Ud.parse)((s??[{}])[0].scalabilityMode);E.debug("send() | calling pc.setLocalDescription() [offer:%o]",c),await this._pc.setLocalDescription(c);let h=a.mid;p.mid=h,l=Te.parse(this._pc.localDescription.sdp);let g=l.media[l.media.length-1];if(p.rtcp.cname=wr.getCname({offerMediaObject:g}),p.msid=`${t??this._sendStream.id} ${e.id}`,!s)p.encodings=Bi.getRtpEncodings({offerMediaObject:g,codecs:p.codecs});else if(s.length===1){let _=Bi.getRtpEncodings({offerMediaObject:g,codecs:p.codecs});Object.assign(_[0],s[0]),p.encodings=_}else p.encodings=s;if(p.encodings.length>1&&(p.codecs[0].mimeType.toLowerCase()==="video/vp8"||p.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let _ of p.encodings)_.scalabilityMode?_.scalabilityMode=`L1T${f.temporalLayers}`:_.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:g,offerRtpParameters:p,answerRtpParameters:m,codecOptions:n});let v={type:"answer",sdp:this._remoteSdp.getSdp()};return E.debug("send() | calling pc.setRemoteDescription() [answer:%o]",v),await this._pc.setRemoteDescription(v),this._mapMidTransceiver.set(h,a),{localId:h,rtpParameters:p,rtpSender:a.sender}}async stopSending(e){if(this.assertSendDirection(),E.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated transceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.disableMediaSection(t.mid);let s=await this._pc.createOffer();E.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),E.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let s=await this._pc.createOffer();E.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),E.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let s=await this._pc.createOffer();E.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?E.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):E.debug("replaceTrack() [localId:%s, no track]",e);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");await s.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),E.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated transceiver not found");let n=s.sender.getParameters();n.encodings.forEach((a,c)=>{c<=t?a.active=!0:a.active=!1}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();E.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),E.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((a,c)=>{n.encodings[c]={...a,...t}}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();E.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};E.debug("sendDataChannel() [options:%o]",t);let s=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%zi.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),o=Te.parse(i.sdp),a=o.media.find(l=>l.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:o}),E.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:a});let c={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:s,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],s=new Map;for(let a of e){let{trackId:c,kind:l,rtpParameters:d,streamId:u}=a;E.debug("receive() [trackId:%s, kind:%s]",c,l);let p=d.mid??String(this._mapMidTransceiver.size);s.set(c,p);let{msidStreamId:m}=Bd.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:p,kind:l,offerRtpParameters:d,streamId:u??m??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let a of e){let{trackId:c,onRtpReceiver:l}=a;if(l){let d=s.get(c),u=this._pc.getTransceivers().find(p=>p.mid===d);if(!u)throw new Error("transceiver not found");l(u.receiver)}}let i=await this._pc.createAnswer(),o=Te.parse(i.sdp);for(let a of e){let{trackId:c,rtpParameters:l}=a,d=s.get(c),u=o.media.find(p=>String(p.mid)===d);wr.applyCodecParameters({offerRtpParameters:l,answerMediaObject:u}),i={type:"answer",sdp:Te.write(o)}}this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:o}),E.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let a of e){let{trackId:c}=a,l=s.get(c),d=this._pc.getTransceivers().find(u=>u.mid===l);if(!d)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(l,d),t.push({localId:l,track:d.receiver.track,rtpReceiver:d.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){E.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();E.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){E.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();E.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){E.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();E.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async getReceiverStats(e){this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:s,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c}=t,l={negotiated:!0,id:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c,protocol:n};E.debug("receiveDataChannel() [options:%o]",l);let d=this._pc.createDataChannel(s,l);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let u={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",u),await this._pc.setRemoteDescription(u);let p=await this._pc.createAnswer(),m=Te.parse(p.sdp),f=m.media.find(h=>h.type==="application");f.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:m}),p={type:"answer",sdp:Te.write(m)},E.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",p),await this._pc.setLocalDescription(p),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=Te.parse(this._pc.localDescription.sdp));let s=wr.extractDtlsParameters({sdpObject:t});s.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:s},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new qi.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')}};yr.Firefox120=Ps});var Qi=P(br=>{"use strict";Object.defineProperty(br,"__esModule",{value:!0});br.Safari12=void 0;var ne=Ce(),Wd=Z(),zd=V(),xt=ge(),Hd=re(),Vd=je(),Gd=ct(),Dt=dt(),Vi=lt(),xs=ut(),T=new zd.Logger("Safari12"),Gi="Safari12",Ki={OS:65535,MIS:65535},Ds=class r extends Wd.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Gi,factory:e=>new r(e),getNativeRtpCapabilities:async({direction:e})=>{T.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let s=await t.createOffer();try{t.close()}catch{}t=void 0;let n=ne.parse(s.sdp);return r.getLocalRtpCapabilities(n)}catch(s){try{t?.close()}catch{}throw t=void 0,s}},getNativeSctpCapabilities:async()=>(T.debug("getNativeSctpCapabilities()"),{numStreams:Ki})}}static getLocalRtpCapabilities(e,t=[]){let s=Dt.extractRtpCapabilities({sdpObject:e});xt.validateAndNormalizeRtpCapabilities(s),xs.addNackSupportForOpus(s);for(let n of t)xs.addHeaderExtensionSupport(s,n);return s}constructor({direction:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,getSendExtendedRtpCapabilities:l}){super(),T.debug("constructor()"),this._direction=e,this._remoteSdp=new Gd.RemoteSdp({iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=l,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:o??[],iceTransportPolicy:a??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)}),this._pc.addEventListener("icecandidateerror",d=>{this.emit("@icecandidateerror",d)}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(T.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Gi}close(){if(T.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),T.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),T.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});T.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let s={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();T.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:s,codecOptions:n,headerExtensionOptions:i,codec:o,onRtpSender:a}){this.assertNotClosed(),this.assertSendDirection(),T.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t);let c=this._remoteSdp.getNextMediaSectionIdx(),l=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream]});a&&a(l.sender);let d=await this._pc.createOffer(),u=ne.parse(d.sdp);u.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let p=[];p.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let m=r.getLocalRtpCapabilities(u,p),f=this._getSendExtendedRtpCapabilities(m),h=xt.getSendingRtpParameters(e.kind,f);h.codecs=xt.reduceCodecs(h.codecs,o);let g=xt.getSendingRemoteRtpParameters(e.kind,f);g.codecs=xt.reduceCodecs(g.codecs,o);let v;this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:u});let _=(0,Vd.parse)((s??[{}])[0].scalabilityMode);s&&s.length>1&&(T.debug("send() | enabling legacy simulcast"),u=ne.parse(d.sdp),v=u.media[c.idx],Vi.addLegacySimulcast({offerMediaObject:v,numStreams:s.length}),d={type:"offer",sdp:ne.write(u)}),i?.absCaptureTime&&(v=u.media[c.idx],Dt.addHeaderExtension({offerMediaObject:v,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(w=>w.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:ne.write(u)}),T.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let x=l.mid;if(h.mid=x,u=ne.parse(this._pc.localDescription.sdp),v=u.media[c.idx],h.rtcp.cname=Dt.getCname({offerMediaObject:v}),h.msid=`${t??this._sendStream.id} ${e.id}`,h.encodings=Vi.getRtpEncodings({offerMediaObject:v,codecs:h.codecs}),s)for(let w=0;w<h.encodings.length;++w)s[w]&&Object.assign(h.encodings[w],s[w]);if(h.encodings.length>1&&(h.codecs[0].mimeType.toLowerCase()==="video/vp8"||h.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let w of h.encodings)w.scalabilityMode?w.scalabilityMode=`L1T${_.temporalLayers}`:w.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:v,reuseMid:c.reuseMid,offerRtpParameters:h,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(x,l),{localId:x,rtpParameters:h,rtpSender:l.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;T.debug("stopSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let n=await this._pc.createOffer();T.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),T.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let s=await this._pc.createOffer();T.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),T.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let s=await this._pc.createOffer();T.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?T.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):T.debug("replaceTrack() [localId:%s, no track]",e);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");await s.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),T.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((a,c)=>{c<=t?a.active=!0:a.active=!1}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();T.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),T.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((a,c)=>{n.encodings[c]={...a,...t}}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();T.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};T.debug("sendDataChannel() [options:%o]",t);let s=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Ki.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),o=ne.parse(i.sdp),a=o.media.find(l=>l.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),T.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:a});let c={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:s,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],s=new Map;for(let a of e){let{trackId:c,kind:l,rtpParameters:d,streamId:u}=a;T.debug("receive() [trackId:%s, kind:%s]",c,l);let p=d.mid??String(this._mapMidTransceiver.size);s.set(c,p);let{msidStreamId:m}=xs.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:p,kind:l,offerRtpParameters:d,streamId:u??m??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let a of e){let{trackId:c,onRtpReceiver:l}=a;if(l){let d=s.get(c),u=this._pc.getTransceivers().find(p=>p.mid===d);if(!u)throw new Error("transceiver not found");l(u.receiver)}}let i=await this._pc.createAnswer(),o=ne.parse(i.sdp);for(let a of e){let{trackId:c,rtpParameters:l}=a,d=s.get(c),u=o.media.find(p=>String(p.mid)===d);Dt.applyCodecParameters({offerRtpParameters:l,answerMediaObject:u})}i={type:"answer",sdp:ne.write(o)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),T.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let a of e){let{trackId:c}=a,l=s.get(c),d=this._pc.getTransceivers().find(u=>u.mid===l);if(!d)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(l,d),t.push({localId:l,track:d.receiver.track,rtpReceiver:d.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){T.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();T.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){T.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();T.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){T.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();T.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:s,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c}=t,l={negotiated:!0,id:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c,protocol:n};T.debug("receiveDataChannel() [options:%o]",l);let d=this._pc.createDataChannel(s,l);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let u={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",u),await this._pc.setRemoteDescription(u);let p=await this._pc.createAnswer(),m=ne.parse(p.sdp),f=m.media.find(h=>h.type==="application");f.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),p={type:"answer",sdp:ne.write(m)},T.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",p),await this._pc.setLocalDescription(p),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=ne.parse(this._pc.localDescription.sdp));let s=Dt.extractDtlsParameters({sdpObject:t});s.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:s},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Hd.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')}};br.Safari12=Ds});var Xi=P(Sr=>{"use strict";Object.defineProperty(Sr,"__esModule",{value:!0});Sr.ReactNative106=void 0;var ie=Ce(),Kd=Z(),Qd=V(),It=ge(),Jd=re(),Yd=je(),Xd=ct(),Lt=dt(),Is=lt(),Ls=ut(),R=new Qd.Logger("ReactNative106"),Ji="ReactNative106",Yi={OS:65535,MIS:65535},Ms=class r extends Kd.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Ji,factory:e=>new r(e),getNativeRtpCapabilities:async({direction:e})=>{R.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let s=await t.createOffer();try{t.close()}catch{}t=void 0;let n=ie.parse(s.sdp);return r.getLocalRtpCapabilities(n)}catch(s){try{t?.close()}catch{}throw t=void 0,s}},getNativeSctpCapabilities:async()=>(R.debug("getNativeSctpCapabilities()"),{numStreams:Yi})}}static getLocalRtpCapabilities(e,t=[]){let s=Lt.extractRtpCapabilities({sdpObject:e});It.validateAndNormalizeRtpCapabilities(s),Ls.addNackSupportForOpus(s);for(let n of t)Ls.addHeaderExtensionSupport(s,n);return s}constructor({direction:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,getSendExtendedRtpCapabilities:l}){super(),R.debug("constructor()"),this._direction=e,this._remoteSdp=new Xd.RemoteSdp({iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i}),this._getSendExtendedRtpCapabilities=l,n.role&&n.role!=="auto"&&(this._forcedLocalDtlsRole=n.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:o??[],iceTransportPolicy:a??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(R.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Ji}close(){if(R.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(),R.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),R.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});R.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let s={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();R.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:s,codecOptions:n,headerExtensionOptions:i,codec:o,onRtpSender:a}){this.assertNotClosed(),this.assertSendDirection(),R.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),s&&s.length>1&&s.forEach((D,F)=>{D.rid=`r${F}`});let c=this._remoteSdp.getNextMediaSectionIdx(),l=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:s});a&&a(l.sender);let d=await this._pc.createOffer(),u=ie.parse(d.sdp);u.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let p=[];p.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let m=r.getLocalRtpCapabilities(u,p),f=this._getSendExtendedRtpCapabilities(m),h=It.getSendingRtpParameters(e.kind,f);h.codecs=It.reduceCodecs(h.codecs,o);let g=It.getSendingRemoteRtpParameters(e.kind,f);g.codecs=It.reduceCodecs(g.codecs,o),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:u});let v=!1,_=(0,Yd.parse)((s??[{}])[0].scalabilityMode),x;s?.length===1&&_.spatialLayers>1&&h.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(R.debug("send() | enabling legacy simulcast for VP9 SVC"),v=!0,u=ie.parse(d.sdp),x=u.media[c.idx],Is.addLegacySimulcast({offerMediaObject:x,numStreams:_.spatialLayers}),d={type:"offer",sdp:ie.write(u)}),i?.absCaptureTime&&(x=u.media[c.idx],Lt.addHeaderExtension({offerMediaObject:x,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:ie.write(u)}),R.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let S=l.mid??void 0;if(S||R.warn("send() | missing transceiver.mid (bug in react-native-webrtc, using a workaround"),h.mid=S,u=ie.parse(this._pc.localDescription.sdp),x=u.media[c.idx],h.rtcp.cname=Lt.getCname({offerMediaObject:x}),h.msid=`${t??this._sendStream.id} ${e.id}`,!s)h.encodings=Is.getRtpEncodings({offerMediaObject:x,codecs:h.codecs});else if(s.length===1){let D=Is.getRtpEncodings({offerMediaObject:x,codecs:h.codecs});Object.assign(D[0],s[0]),v&&(D=[D[0]]),h.encodings=D}else h.encodings=s;if(h.encodings.length>1&&(h.codecs[0].mimeType.toLowerCase()==="video/vp8"||h.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let D of h.encodings)D.scalabilityMode?D.scalabilityMode=`L1T${_.temporalLayers}`:D.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:x,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:g,codecOptions:n});let w={type:"answer",sdp:this._remoteSdp.getSdp()};return R.debug("send() | calling pc.setRemoteDescription() [answer:%o]",w),await this._pc.setRemoteDescription(w),S||(S=l.mid,h.mid=S),this._mapMidTransceiver.set(S,l),{localId:S,rtpParameters:h,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 s=await this._pc.createOffer();R.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),R.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let s=await this._pc.createOffer();R.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?R.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):R.debug("replaceTrack() [localId:%s, no track]",e);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");await s.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),R.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((a,c)=>{c<=t?a.active=!0:a.active=!1}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();R.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),R.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((a,c)=>{n.encodings[c]={...a,...t}}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();R.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let o={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",o),await this._pc.setRemoteDescription(o)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};R.debug("sendDataChannel() [options:%o]",t);let s=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Yi.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),o=ie.parse(i.sdp),a=o.media.find(l=>l.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),R.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i),this._remoteSdp.sendSctpAssociation({offerMediaObject:a});let c={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let n={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:s,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],s=new Map;for(let a of e){let{trackId:c,kind:l,rtpParameters:d,streamId:u}=a;R.debug("receive() [trackId:%s, kind:%s]",c,l);let p=d.mid??String(this._mapMidTransceiver.size);s.set(c,p);let{msidStreamId:m}=Ls.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:p,kind:l,offerRtpParameters:d,streamId:u??m??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let a of e){let{trackId:c,onRtpReceiver:l}=a;if(l){let d=s.get(c),u=this._pc.getTransceivers().find(p=>p.mid===d);if(!u)throw new Error("transceiver not found");l(u.receiver)}}let i=await this._pc.createAnswer(),o=ie.parse(i.sdp);for(let a of e){let{trackId:c,rtpParameters:l}=a,d=s.get(c),u=o.media.find(p=>String(p.mid)===d);Lt.applyCodecParameters({offerRtpParameters:l,answerMediaObject:u})}i={type:"answer",sdp:ie.write(o)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:o}),R.debug("receive() | calling pc.setLocalDescription() [answer:%o]",i),await this._pc.setLocalDescription(i);for(let a of e){let{trackId:c}=a,l=s.get(c),d=this._pc.getTransceivers().find(u=>u.mid===l);if(d)this._mapMidTransceiver.set(l,d),t.push({localId:l,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){R.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();R.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){R.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();R.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){R.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();R.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:s,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c}=t,l={negotiated:!0,id:i,ordered:o,maxPacketLifeTime:a,maxRetransmits:c,protocol:n};R.debug("receiveDataChannel() [options:%o]",l);let d=this._pc.createDataChannel(s,l);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let u={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",u),await this._pc.setRemoteDescription(u);let p=await this._pc.createAnswer(),m=ie.parse(p.sdp),f=m.media.find(h=>h.type==="application");f.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),p={type:"answer",sdp:ie.write(m)},R.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",p),await this._pc.setLocalDescription(p),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=ie.parse(this._pc.localDescription.sdp));let s=Lt.extractDtlsParameters({sdpObject:t});s.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:s},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Jd.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')}};Sr.ReactNative106=Ms});var ro=P(pt=>{"use strict";Object.defineProperty(pt,"__esModule",{value:!0});pt.Device=void 0;pt.detectDevice=Zi;pt.detectDeviceAsync=eo;var Zd=V(),el=Z(),xe=re(),Rr=Me(),ee=ge(),tl=Si(),rl=ji(),sl=Ui(),nl=Hi(),il=Qi(),ol=Xi(),b=new Zd.Logger("Device");function Zi(r,e){return b.debug("detectDevice()"),!r&&typeof navigator=="object"&&(r=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),to(r,e)}async function eo(r,e){return b.debug("detectDeviceAsync()"),!r&&typeof navigator=="object"&&(r=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),to(r,e)}var As=class r{_handlerFactory;_handlerName;_loaded=!1;_getSendExtendedRtpCapabilities;_recvRtpCapabilities;_sendRtpCapabilities;_canProduceByKind={audio:!1,video:!1};_sctpCapabilities;_observer=new el.EnhancedEventEmitter;static async factory({handlerName:e,handlerFactory:t}={}){if(b.debug("factory()"),e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(!e&&!t&&(e=await eo(),!e))throw new xe.UnsupportedError("device not supported");return new r({handlerName:e,handlerFactory:t})}constructor({handlerName:e,handlerFactory:t}={}){if(b.debug("constructor()"),e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(t)this._handlerFactory=t;else{if(e)b.debug("constructor() | handler given: %s",e);else if(e=Zi(),e)b.debug("constructor() | detected handler: %s",e);else throw new xe.UnsupportedError("device not supported");switch(e){case"Chrome111":{this._handlerFactory=rl.Chrome111.createFactory();break}case"Chrome74":{this._handlerFactory=sl.Chrome74.createFactory();break}case"Firefox120":{this._handlerFactory=nl.Firefox120.createFactory();break}case"Safari12":{this._handlerFactory=il.Safari12.createFactory();break}case"ReactNative106":{this._handlerFactory=ol.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 xe.InvalidStateError("not loaded");return this._recvRtpCapabilities}get sendRtpCapabilities(){if(!this._loaded)throw new xe.InvalidStateError("not loaded");return this._sendRtpCapabilities}get sctpCapabilities(){if(!this._loaded)throw new xe.InvalidStateError("not loaded");return this._sctpCapabilities}get observer(){return this._observer}async load({routerRtpCapabilities:e,preferLocalCodecsOrder:t=!1}){if(b.debug("load() [routerRtpCapabilities:%o]",e),this._loaded)throw new xe.InvalidStateError("already loaded");let s=Rr.clone(e);ee.validateAndNormalizeRtpCapabilities(s);let{getNativeRtpCapabilities:n,getNativeSctpCapabilities:i}=this._handlerFactory,o=Rr.clone(await n({direction:"recvonly"}));b.debug("load() | got native receiving RTP capabilities:%o",o),ee.validateAndNormalizeRtpCapabilities(o);let a=Rr.clone(await n({direction:"sendonly"}));b.debug("load() | got native sending RTP capabilities:%o",a),ee.validateAndNormalizeRtpCapabilities(a),this._getSendExtendedRtpCapabilities=d=>Rr.clone(ee.getExtendedRtpCapabilities(d,s,t));let c=ee.getExtendedRtpCapabilities(o,s,!1);this._recvRtpCapabilities=ee.getRecvRtpCapabilities(c),b.debug("load() | got receiving RTP capabilities:%o",this._recvRtpCapabilities),ee.validateAndNormalizeRtpCapabilities(this._recvRtpCapabilities);let l=ee.getExtendedRtpCapabilities(a,s,t);this._sendRtpCapabilities=ee.getSendRtpCapabilities(l),b.debug("load() | got sending RTP capabilities:%o",this._sendRtpCapabilities),ee.validateAndNormalizeRtpCapabilities(this._sendRtpCapabilities),this._canProduceByKind.audio=ee.canSend("audio",this._sendRtpCapabilities),this._canProduceByKind.video=ee.canSend("video",this._sendRtpCapabilities),this._sctpCapabilities=await i(),ee.validateSctpCapabilities(this._sctpCapabilities),b.debug("load() | got native SCTP capabilities:%o",this._sctpCapabilities),b.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 xe.InvalidStateError("not loaded");return this._canProduceByKind[e]}createSendTransport({id:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,appData:l}){return b.debug("createSendTransport()"),this.createTransport({direction:"send",id:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,appData:l})}createRecvTransport({id:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,appData:l}){return b.debug("createRecvTransport()"),this.createTransport({direction:"recv",id:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:o,iceTransportPolicy:a,additionalSettings:c,appData:l})}createTransport({direction:e,id:t,iceParameters:s,iceCandidates:n,dtlsParameters:i,sctpParameters:o,iceServers:a,iceTransportPolicy:c,additionalSettings:l,appData:d}){if(this._loaded){if(typeof t!="string")throw new TypeError("missing id");if(typeof s!="object")throw new TypeError("missing iceParameters");if(Array.isArray(n)){if(typeof i!="object")throw new TypeError("missing dtlsParameters");if(o&&typeof o!="object")throw new TypeError("wrong sctpParameters");if(d&&typeof d!="object")throw new TypeError("if given, appData must be an object")}else throw new TypeError("missing iceCandidates")}else throw new xe.InvalidStateError("not loaded");let u=new tl.Transport({direction:e,id:t,iceParameters:s,iceCandidates:n,dtlsParameters:i,sctpParameters:o,iceServers:a,iceTransportPolicy:c,additionalSettings:l,appData:d,handlerFactory:this._handlerFactory,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities,recvRtpCapabilities:this._recvRtpCapabilities,canProduceByKind:this._canProduceByKind});return this._observer.safeEmit("newtransport",u),u}};pt.Device=As;function to(r,e){b.debug('detectDeviceImpl() [userAgent:"%s", userAgentData:%o]',r,e);let t=al(r,e);if(t){if(t>=111)return b.debug("detectDeviceImpl() | using Chrome111 handler"),"Chrome111";if(t>=74)return b.debug("detectDeviceImpl() | using Chrome74 handler"),"Chrome74";b.warn("detectDeviceImpl() | unsupported Chromium based browser/version");return}let s=cl(r);if(s){if(s>=120)return b.debug("detectDeviceImpl() | using Firefox120 handler"),"Firefox120";b.warn("detectDeviceImpl() | unsupported Firefox browser/version");return}let n=dl(r);if(n){if(n>=605)return b.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";b.warn("detectDeviceImpl() | unsupported desktop Safari browser/version");return}let i=ll(r);if(i){if(i>=605)return b.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";b.warn("detectDeviceImpl() | unsupported iOS Safari based browser/version");return}if(Mt()){if(typeof RTCPeerConnection<"u"&&typeof RTCRtpTransceiver<"u")return b.debug("detectDeviceImpl() | using ReactNative106 handler"),"ReactNative106";b.warn("detectDeviceImpl() | unsupported react-native-webrtc version without RTCPeerConnection or RTCRtpTransceiver, forgot to call registerGlobals() on it?");return}b.warn('detectDeviceImpl() | device not supported [userAgent:"%s", userAgentData:%o]',r,e)}function al(r,e){if(b.debug("getChromiumMajorVersion()"),Cr(r,e)){b.debug("getChromiumMajorVersion() | this is iOS => undefined");return}if(Mt()){b.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 b.debug(`getChromiumMajorVersion() | Chromium major version based on NavigatorUAData => ${i}`),i}}let t=r?.match(/\b(?:Chrome|Chromium)\/(\w+)/i);if(t?.[1]){let s=Number(t[1]);return b.debug(`getChromiumMajorVersion() | Chromium major version based on User-Agent => ${s}`),s}b.debug("getChromiumMajorVersion() | this is not Chromium => undefined")}function cl(r){if(b.debug("getFirefoxMajorVersion()"),Cr(r)){b.debug("getFirefoxMajorVersion() | this is iOS => undefined");return}if(Mt()){b.debug("getFirefoxMajorVersion() | this is React-Native => undefined");return}let e=r?.match(/\bFirefox\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return b.debug(`getFirefoxMajorVersion() | Firefox major version based on User-Agent => ${t}`),t}b.debug("getFirefoxMajorVersion() | this is not Firefox => undefined")}function dl(r){if(b.debug("getMacOSWebKitMajorVersion()"),Cr(r)){b.debug("getMacOSWebKitMajorVersion() | this is iOS => undefined");return}if(Mt()){b.debug("getMacOSWebKitMajorVersion() | this is React-Native => undefined");return}if(!(r&&/\bSafari\b/i.test(r)&&!/\bChrome\b/i.test(r)&&!/\bChromium\b/i.test(r)&&!/\bFirefox\b/i.test(r))){b.debug("getMacOSWebKitMajorVersion() | this is not Safari => undefined");return}let t=r.match(/AppleWebKit\/(\w+)/i);if(t?.[1]){let s=Number(t[1]);return b.debug(`getMacOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${s}`),s}b.debug("getMacOSWebKitMajorVersion() | this is not WebKit => undefined")}function ll(r){if(b.debug("getIOSWebKitMajorVersion()"),!Cr(r)){b.debug("getIOSWebKitMajorVersion() | this is not iOS => undefined");return}if(Mt()){b.debug("getIOSWebKitMajorVersion() | this is React-Native => undefined");return}let e=r?.match(/AppleWebKit\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return b.debug(`getIOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${t}`),t}b.debug("getIOSWebKitMajorVersion() | this is not WebKit => undefined")}function Cr(r,e){return b.debug("isIOS()"),e?.platform==="iOS"?(b.debug("isIOS() | this is iOS based on NavigatorUAData.platform => true"),!0):e?.platform?(b.debug("isIOS() | this is not iOS based on NavigatorUAData.platform => false"),!1):r&&/iPad|iPhone|iPod/.test(r)?(b.debug("isIOS() | this is iOS based on User-Agent => true"),!0):typeof navigator=="object"&&navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1?(b.debug("isIOS() | this is iPadOS 13+ based on User-Agent => true"),!0):(b.debug("isIOS() | this is not iOS => false"),!1)}function Mt(){return b.debug("isReactNative()"),typeof navigator=="object"&&navigator.product==="ReactNative"?(b.debug("isReactNative() | this is React-Native based on navigator.product"),!0):(b.debug("isReactNative() | this is not React-Native => false"),!1)}});var no=P(so=>{"use strict";var $e=256,kr=[],Tr;for(;$e--;)kr[$e]=($e+256).toString(16).substring(1);function ul(){var r=0,e,t="";if(!Tr||$e+16>256){for(Tr=Array(r=256);r--;)Tr[r]=256*Math.random()|0;r=$e=0}for(;r<16;r++)e=Tr[$e+r],r==6?t+=kr[e&15|64]:r==8?t+=kr[e&63|128]:t+=kr[e],r&1&&r>1&&r<11&&(t+="-");return $e++,t}so.v4=ul});var io=P(Er=>{"use strict";Object.defineProperty(Er,"__esModule",{value:!0});Er.FakeEventTarget=void 0;var Os=class{listeners={};addEventListener(e,t,s){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof s=="object"&&s.once===!0}))}removeEventListener(e,t,s){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(n=>n.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new Error("invalid event object");let t=this.listeners[e.type];if(!t)return!0;for(let s of[...t]){try{s.callback.call(this,e)}catch(n){setTimeout(()=>{throw n},0)}s.once&&this.removeEventListener(e.type,s.callback)}return!e.defaultPrevented}};Er.FakeEventTarget=Os});var oo=P(Pr=>{"use strict";Object.defineProperty(Pr,"__esModule",{value:!0});Pr.FakeEvent=void 0;var Ns=class{NONE=0;CAPTURING_PHASE=1;AT_TARGET=2;BUBBLING_PHASE=3;type;bubbles;cancelable;defaultPrevented=!1;composed=!1;currentTarget=null;eventPhase=this.NONE;isTrusted=!0;target=null;timeStamp=0;cancelBubble=!1;returnValue=!0;srcElement=null;constructor(e,t={}){this.type=e,this.bubbles=t.bubbles??!1,this.cancelable=t.cancelable??!1}preventDefault(){this.cancelable&&(this.defaultPrevented=!0)}stopPropagation(){}stopImmediatePropagation(){}composedPath(){return[]}initEvent(e,t,s){}};Pr.FakeEvent=Ns});var ao=P(js=>{"use strict";Object.defineProperty(js,"__esModule",{value:!0});js.clone=pl;function pl(r){if(r!==void 0)return Number.isNaN(r)?NaN:typeof structuredClone=="function"?structuredClone(r):JSON.parse(JSON.stringify(r))}});var lo=P(Dr=>{"use strict";Object.defineProperty(Dr,"__esModule",{value:!0});Dr.FakeMediaStreamTrack=void 0;var co=no(),hl=io(),ht=oo(),xr=ao(),Fs=class r extends hl.FakeEventTarget{#m;#u;#p;#e;#r;#t;#s;#h;#n;#f;#i;#o=null;#a=null;#c=null;#d=null;#l=null;constructor({kind:e,id:t,label:s,contentHint:n,enabled:i,muted:o,readyState:a,capabilities:c,constraints:l,settings:d,data:u}){super(),this.#m=t??(0,co.v4)(),this.#u=e,this.#p=s??"",this.#s=n??"",this.#r=i??!0,this.#t=o??!1,this.#e=a??"live",this.#h=c??{},this.#n=l??{},this.#f=d??{},this.#i=u??{}}get id(){return this.#m}get kind(){return this.#u}get label(){return this.#p}get contentHint(){return this.#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 ht.FakeEvent("enabledchange"))}get muted(){return this.#t}get readyState(){return this.#e}get data(){return this.#i}set data(e){this.#i=e}get onmute(){return this.#o}set onmute(e){this.#o&&this.removeEventListener("mute",this.#o),this.#o=e,e&&this.addEventListener("mute",e)}get onunmute(){return this.#a}set onunmute(e){this.#a&&this.removeEventListener("unmute",this.#a),this.#a=e,e&&this.addEventListener("unmute",e)}get onended(){return this.#c}set onended(e){this.#c&&this.removeEventListener("ended",this.#c),this.#c=e,e&&this.addEventListener("ended",e)}get onenabledchange(){return this.#d}set onenabledchange(e){this.#d&&this.removeEventListener("enabledchange",this.#d),this.#d=e,e&&this.addEventListener("enabledchange",e)}get onstopped(){return this.#l}set onstopped(e){this.#l&&this.removeEventListener("stopped",this.#l),this.#l=e,e&&this.addEventListener("stopped",e)}addEventListener(e,t,s){super.addEventListener(e,t,s)}removeEventListener(e,t,s){super.removeEventListener(e,t,s)}stop(){this.#e!=="ended"&&(this.#e="ended",this.dispatchEvent(new ht.FakeEvent("stopped")))}clone({id:e,data:t}={}){return new r({id:e??(0,co.v4)(),kind:this.#u,label:this.#p,contentHint:this.#s,enabled:this.#r,muted:this.#t,readyState:this.#e,capabilities:(0,xr.clone)(this.#h),constraints:(0,xr.clone)(this.#n),settings:(0,xr.clone)(this.#f),data:t??(0,xr.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 ht.FakeEvent("stopped")),this.dispatchEvent(new ht.FakeEvent("ended")))}remoteMute(){this.#t||(this.#t=!0,this.dispatchEvent(new ht.FakeEvent("mute")))}remoteUnmute(){this.#t&&(this.#t=!1,this.dispatchEvent(new ht.FakeEvent("unmute")))}};Dr.FakeMediaStreamTrack=Fs});var uo=P(Ir=>{"use strict";Object.defineProperty(Ir,"__esModule",{value:!0});Ir.FakeEventTarget=void 0;var $s=class{listeners={};addEventListener(e,t,s){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof s=="object"&&s.once===!0}))}removeEventListener(e,t,s){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(n=>n.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new Error("invalid event object");let t=this.listeners[e.type];if(!t)return!0;for(let s of[...t]){try{s.callback.call(this,e)}catch(n){setTimeout(()=>{throw n},0)}s.once&&this.removeEventListener(e.type,s.callback)}return!e.defaultPrevented}};Ir.FakeEventTarget=$s});var fo=P(Mr=>{"use strict";Object.defineProperty(Mr,"__esModule",{value:!0});Mr.FakeHandler=void 0;var fl=lo(),ml=Z(),gl=V(),ft=Me(),Us=ge(),ho=re(),_l=uo(),U=new gl.Logger("FakeHandler"),po="FakeHandler",qs=class r extends ml.EnhancedEventEmitter{_closed=!1;_fakeParameters;_getSendExtendedRtpCapabilities;_cname=`CNAME-${ft.generateRandomNumber()}`;_defaultSendStreamId=`${ft.generateRandomNumber()}`;_transportReady=!1;_nextLocalId=1;_tracks=new Map;_nextSctpStreamId=0;static createFactory(e){return{name:po,factory:t=>new r(t,e),getNativeRtpCapabilities:async({direction:t})=>(U.debug("getNativeRtpCapabilities() [direction:%o]",t),r.getLocalRtpCapabilities(e)),getNativeSctpCapabilities:async()=>(U.debug("getNativeSctpCapabilities()"),e.generateNativeSctpCapabilities())}}static getLocalRtpCapabilities(e){let t=e.generateNativeRtpCapabilities();return Us.validateAndNormalizeRtpCapabilities(t),t}constructor({getSendExtendedRtpCapabilities:e},t){super(),U.debug("constructor()"),this._getSendExtendedRtpCapabilities=e,this._fakeParameters=t}get name(){return po}close(){U.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(),U.debug("updateIceServers()")}async restartIce(e){this.assertNotClosed(),U.debug("restartIce()")}async getTransportStats(){return this.assertNotClosed(),new Map}async send({track:e,streamId:t,encodings:s,codecOptions:n,codec:i}){this.assertNotClosed(),U.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),this._transportReady||await this.setupTransport({localDtlsRole:"server"});let o=r.getLocalRtpCapabilities(this._fakeParameters),a=this._getSendExtendedRtpCapabilities(o),c=Us.getSendingRtpParameters(e.kind,a);c.codecs=Us.reduceCodecs(c.codecs,i);let l=c.codecs.some(u=>/.+\/rtx$/i.test(u.mimeType));c.mid=`mid-${ft.generateRandomNumber()}`,c.msid=`${t??"-"} ${e.id}`,s||(s=[{}]);for(let u of s)u.ssrc=ft.generateRandomNumber(),l&&(u.rtx={ssrc:ft.generateRandomNumber()});c.encodings=s,c.rtcp={cname:this._cname,reducedSize:!0,mux:!0},c.msid=`${t??this._defaultSendStreamId} ${e.id}`;let d=this._nextLocalId++;return this._tracks.set(d,e),{localId:String(d),rtpParameters:c}}async stopSending(e){if(U.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?U.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):U.debug("replaceTrack() [localId:%s, no track]",e),this._tracks.delete(Number(e)),this._tracks.set(Number(e),t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),U.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),U.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"}),U.debug("sendDataChannel()");let t=new Lr({id:this._nextSctpStreamId++,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:e.label,protocol:e.protocol}),s={streamId:this._nextSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits};return{dataChannel:t,sctpStreamParameters:s}}async receive(e){this.assertNotClosed();let t=[];for(let s of e){let{trackId:n,kind:i}=s;this._transportReady||await this.setupTransport({localDtlsRole:"client"}),U.debug("receive() [trackId:%s, kind:%s]",n,i);let o=this._nextLocalId++,a=new fl.FakeMediaStreamTrack({kind:i});this._tracks.set(o,a),t.push({localId:String(o),track:a})}return t}async stopReceiving(e){if(!this._closed)for(let t of e)U.debug("stopReceiving() [localId:%s]",t),this._tracks.delete(Number(t))}async pauseReceiving(e){this.assertNotClosed()}async resumeReceiving(e){this.assertNotClosed()}async getReceiverStats(e){return this.assertNotClosed(),new Map}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:s}){return this.assertNotClosed(),this._transportReady||await this.setupTransport({localDtlsRole:"client"}),U.debug("receiveDataChannel()"),{dataChannel:new Lr({id:e.streamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:t,protocol:s})}}getDataChannelMaxMessageSize(){return 5e5}async setupTransport({localDtlsRole:e,localSdpObject:t}){let s=ft.clone(this._fakeParameters.generateLocalDtlsParameters());e&&(s.role=e),this.emit("@connectionstatechange","connecting"),await new Promise((n,i)=>this.emit("@connect",{dtlsParameters:s},n,i)),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new ho.InvalidStateError("method called in a closed handler")}};Mr.FakeHandler=qs;var Lr=class extends _l.FakeEventTarget{_id;_negotiated=!0;_ordered;_maxPacketLifeTime;_maxRetransmits;_label;_protocol;_readyState="connecting";_bufferedAmount=0;_bufferedAmountLowThreshold=0;_binaryType="arraybuffer";_onopen=null;_onclosing=null;_onclose=null;_onmessage=null;_onbufferedamountlow=null;_onerror=null;constructor({id:e,ordered:t=!0,maxPacketLifeTime:s=null,maxRetransmits:n=null,label:i="",protocol:o=""}){super(),U.debug(`constructor() [id:${e}, ordered:${t}, maxPacketLifeTime:${s}, maxRetransmits:${n}, label:${i}, protocol:${o}`),this._id=e,this._ordered=t,this._maxPacketLifeTime=s,this._maxRetransmits=n,this._label=i,this._protocol=o}get id(){return this._id}get negotiated(){return this._negotiated}get ordered(){return this._ordered}get maxPacketLifeTime(){return this._maxPacketLifeTime}get maxRetransmits(){return this._maxRetransmits}get label(){return this._label}get protocol(){return this._protocol}get readyState(){return this._readyState}get bufferedAmount(){return this._bufferedAmount}get bufferedAmountLowThreshold(){return this._bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._bufferedAmountLowThreshold=e}get binaryType(){return this._binaryType}set binaryType(e){this._binaryType=e}get onopen(){return this._onopen}set onopen(e){this._onopen&&this.removeEventListener("open",this._onopen),this._onopen=e,e&&this.addEventListener("open",e)}get onclosing(){return this._onclosing}set onclosing(e){this._onclosing&&this.removeEventListener("closing",this._onclosing),this._onclosing=e,e&&this.addEventListener("closing",e)}get onclose(){return this._onclose}set onclose(e){this._onclose&&this.removeEventListener("close",this._onclose),this._onclose=e,e&&this.addEventListener("close",e)}get onmessage(){return this._onmessage}set onmessage(e){this._onmessage&&this.removeEventListener("message",this._onmessage),this._onmessage=e,e&&this.addEventListener("message",e)}get onbufferedamountlow(){return this._onbufferedamountlow}set onbufferedamountlow(e){this._onbufferedamountlow&&this.removeEventListener("bufferedamountlow",this._onbufferedamountlow),this._onbufferedamountlow=e,e&&this.addEventListener("bufferedamountlow",e)}get onerror(){return this._onerror}set onerror(e){this._onerror&&this.removeEventListener("error",this._onerror),this._onerror=e,e&&this.addEventListener("error",e)}addEventListener(e,t,s){super.addEventListener(e,t,s)}removeEventListener(e,t,s){super.removeEventListener(e,t,s)}close(){["closing","closed"].includes(this._readyState)||(this._readyState="closed")}send(e){if(this._readyState!=="open")throw new ho.InvalidStateError("not open")}}});var mo=P(he=>{"use strict";Object.defineProperty(he,"__esModule",{value:!0});he.generateRouterRtpCapabilities=vl;he.generateNativeRtpCapabilities=wl;he.generateNativeSctpCapabilities=yl;he.generateLocalDtlsParameters=bl;he.generateTransportRemoteParameters=Sl;he.generateProducerRemoteParameters=Rl;he.generateConsumerRemoteParameters=Cl;he.generateDataProducerRemoteParameters=Tl;he.generateDataConsumerRemoteParameters=kl;var K=Me();function te(){return String(K.generateRandomNumber())}function vl(){return K.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 wl(){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 yl(){return K.deepFreeze({numStreams:{OS:2048,MIS:2048}})}function bl(){return K.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 Sl(){return{id:te(),iceParameters:K.deepFreeze({iceLite:!0,password:"yku5ej8nvfaor28lvtrabcx0wkrpkztz",usernameFragment:"h3hk1iz6qqlnqlne"}),iceCandidates:K.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:K.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:K.deepFreeze({port:5e3,OS:2048,MIS:2048,maxMessageSize:2e6})}}function Rl(){return K.deepFreeze({id:te()})}function Cl({id:r,codecMimeType:e}={}){switch(e){case"audio/opus":return{id:r??te(),producerId:te(),kind:"audio",rtpParameters:K.deepFreeze({codecs:[{mimeType:"audio/opus",payloadType:100,clockRate:48e3,channels:2,rtcpFeedback:[{type:"transport-cc"}],parameters:{useinbandfec:1,foo:"bar"}}],encodings:[{ssrc:46687003}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:ietf:params:rtp-hdrext:ssrc-audio-level",id:10}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"audio/ISAC":return{id:r??te(),producerId:te(),kind:"audio",rtpParameters:K.deepFreeze({codecs:[{mimeType:"audio/ISAC",payloadType:111,clockRate:16e3,channels:1,rtcpFeedback:[{type:"transport-cc"}],parameters:{}}],encodings:[{ssrc:46687004}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"video/VP8":return{id:r??te(),producerId:te(),kind:"video",rtpParameters:K.deepFreeze({codecs:[{mimeType:"video/VP8",payloadType:101,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"x-google-start-bitrate":1500}},{mimeType:"video/rtx",payloadType:102,clockRate:9e4,rtcpFeedback:[],parameters:{apt:101}}],encodings:[{ssrc:99991111,rtx:{ssrc:99991112}}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",id:4},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:3gpp:video-orientation",id:11},{uri:"urn:ietf:params:rtp-hdrext:toffset",id:12}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"video/H264":return{id:r??te(),producerId:te(),kind:"video",rtpParameters:K.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 Tl(){return K.deepFreeze({id:te()})}function kl({id:r}={}){return{id:r??te(),dataProducerId:te(),sctpStreamParameters:K.deepFreeze({streamId:666,maxPacketLifeTime:5e3,maxRetransmits:void 0})}}});var Ss=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 El=vt();A.debug=El.default;A.types=$n();A.version="3.20.0";var Bs=ro();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 Pl=je();Object.defineProperty(A,"parseScalabilityMode",{enumerable:!0,get:function(){return Pl.parse}});A.ortc=ge();A.enhancedEvents=Z();var xl=fo();Object.defineProperty(A,"FakeHandler",{enumerable:!0,get:function(){return xl.FakeHandler}});A.testFakeParameters=mo()});var _o=P((Mp,Ws)=>{"use strict";var Dl=Object.prototype.hasOwnProperty,Q="~";function At(){}Object.create&&(At.prototype=Object.create(null),new At().__proto__||(Q=!1));function Il(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function go(r,e,t,s,n){if(typeof t!="function")throw new TypeError("The listener must be a function");var i=new Il(t,s||r,n),o=Q?Q+e:e;return r._events[o]?r._events[o].fn?r._events[o]=[r._events[o],i]:r._events[o].push(i):(r._events[o]=i,r._eventsCount++),r}function Ar(r,e){--r._eventsCount===0?r._events=new At:delete r._events[e]}function W(){this._events=new At,this._eventsCount=0}W.prototype.eventNames=function(){var e=[],t,s;if(this._eventsCount===0)return e;for(s in t=this._events)Dl.call(t,s)&&e.push(Q?s.slice(1):s);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};W.prototype.listeners=function(e){var t=Q?Q+e:e,s=this._events[t];if(!s)return[];if(s.fn)return[s.fn];for(var n=0,i=s.length,o=new Array(i);n<i;n++)o[n]=s[n].fn;return o};W.prototype.listenerCount=function(e){var t=Q?Q+e:e,s=this._events[t];return s?s.fn?1:s.length:0};W.prototype.emit=function(e,t,s,n,i,o){var a=Q?Q+e:e;if(!this._events[a])return!1;var c=this._events[a],l=arguments.length,d,u;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),l){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,s),!0;case 4:return c.fn.call(c.context,t,s,n),!0;case 5:return c.fn.call(c.context,t,s,n,i),!0;case 6:return c.fn.call(c.context,t,s,n,i,o),!0}for(u=1,d=new Array(l-1);u<l;u++)d[u-1]=arguments[u];c.fn.apply(c.context,d)}else{var p=c.length,m;for(u=0;u<p;u++)switch(c[u].once&&this.removeListener(e,c[u].fn,void 0,!0),l){case 1:c[u].fn.call(c[u].context);break;case 2:c[u].fn.call(c[u].context,t);break;case 3:c[u].fn.call(c[u].context,t,s);break;case 4:c[u].fn.call(c[u].context,t,s,n);break;default:if(!d)for(m=1,d=new Array(l-1);m<l;m++)d[m-1]=arguments[m];c[u].fn.apply(c[u].context,d)}}return!0};W.prototype.on=function(e,t,s){return go(this,e,t,s,!1)};W.prototype.once=function(e,t,s){return go(this,e,t,s,!0)};W.prototype.removeListener=function(e,t,s,n){var i=Q?Q+e:e;if(!this._events[i])return this;if(!t)return Ar(this,i),this;var o=this._events[i];if(o.fn)o.fn===t&&(!n||o.once)&&(!s||o.context===s)&&Ar(this,i);else{for(var a=0,c=[],l=o.length;a<l;a++)(o[a].fn!==t||n&&!o[a].once||s&&o[a].context!==s)&&c.push(o[a]);c.length?this._events[i]=c.length===1?c[0]:c:Ar(this,i)}return this};W.prototype.removeAllListeners=function(e){var t;return e?(t=Q?Q+e:e,this._events[t]&&Ar(this,t)):(this._events=new At,this._eventsCount=0),this};W.prototype.off=W.prototype.removeListener;W.prototype.addListener=W.prototype.on;W.prefixed=Q;W.EventEmitter=W;typeof Ws<"u"&&(Ws.exports=W)});var $t=class{_handlers=new Map;_ws;_onMessage;_onOpen;_listeningForOpen=!1;_pendingSends=[];_disposed=!1;constructor(e){this._ws=e,this._onMessage=t=>{if(typeof t.data!="string")return;let s;try{s=JSON.parse(t.data)}catch{console.warn("[ChannelMultiplexer] Failed to parse WebSocket message as JSON");return}if(!s.channel)return;let n=this._handlers.get(s.channel);if(n)for(let i of n)i(s)},this._ws.addEventListener("message",this._onMessage),this._onOpen=()=>{this.flushPendingSends()}}on(e,t){let s=this._handlers.get(e);return s||(s=new Set,this._handlers.set(e,s)),s.add(t),()=>{s.delete(t),s.size===0&&this._handlers.delete(e)}}emit(e,t){if(this._disposed)return;let s=JSON.stringify({channel:e,...t});if(this._ws.readyState===WebSocket.OPEN){this._ws.send(s);return}this._ws.readyState===WebSocket.CONNECTING&&(this._pendingSends.push(s),this.listenForOpen())}dispose(){this._disposed=!0,this._pendingSends=[],this._handlers.clear(),this._ws.removeEventListener("message",this._onMessage),this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1}flushPendingSends(){if(this._disposed||this._ws.readyState!==WebSocket.OPEN)return;this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1;let e=this._pendingSends;this._pendingSends=[];for(let t of e)this._ws.send(t)}listenForOpen(){this._listeningForOpen||(this._listeningForOpen=!0,this._ws.addEventListener("open",this._onOpen))}},tn=class{_handlers=new Map;_pendingSends=[];_target=null;_targetUnsubscribes=[];_disposed=!1;setTarget(e){if(this._disposed)return;this.detachTarget(),this._target=e;for(let[s,n]of this._handlers)for(let i of n)this._targetUnsubscribes.push(e.on(s,i));let t=this._pendingSends;this._pendingSends=[];for(let s of t)e.emit(s.channel,s.data)}rewriteSessionChannels(e,t){if(e===t)return;let s=`session:${e}:`,n=`session:${t}:`,i=new Map;for(let[o,a]of this._handlers)i.set(o.startsWith(s)?n+o.slice(s.length):o,a);this._handlers=i,this._pendingSends=this._pendingSends.map(o=>({...o,channel:o.channel.startsWith(s)?n+o.channel.slice(s.length):o.channel}))}on(e,t){if(this._disposed)return()=>{};let s=this._handlers.get(e);s||(s=new Set,this._handlers.set(e,s)),s.add(t);let n=this._target?.on(e,t);return n&&this._targetUnsubscribes.push(n),()=>{s?.delete(t),s?.size===0&&this._handlers.delete(e),n?.(),n&&(this._targetUnsubscribes=this._targetUnsubscribes.filter(i=>i!==n))}}emit(e,t){if(!this._disposed){if(this._target){this._target.emit(e,t);return}this._pendingSends.push({channel:e,data:t})}}dispose(){this._disposed=!0,this._pendingSends=[],this._handlers.clear(),this.detachTarget()}detachTarget(){for(let e of this._targetUnsubscribes)e();this._targetUnsubscribes=[],this._target=null}};var rn=class extends Error{code="session_end_unavailable";constructor(e="[urun] this session handle cannot terminally end the session; disconnect the viewer instead",t){super(e),this.name="SessionEndUnavailableError",t?.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}},ae=class extends Error{code;httpStatus;requestId;sessionId;constructor(e,t){super(e),this.name="SessionEndError",this.code=t.code??"session_end_failed",this.httpStatus=t.httpStatus,this.requestId=t.requestId,this.sessionId=t.sessionId,t.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}},De=class extends Error{code;httpStatus;constructor(e,t){super(e),this.name="SessionDirectoryError",this.code=t?.code??"session_directory_failed",this.httpStatus=t?.httpStatus,t?.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}},qe=class extends Error{requestId;code;constructor(e,t){super(e),this.name="RequestError",this.requestId=t?.requestId,this.code=t?.code,t?.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}},sn=class extends qe{timeoutMs;constructor(e,t){super(`[urun] request timed out after ${e}ms`,{requestId:t}),this.name="RequestTimeoutError",this.timeoutMs=e,Object.setPrototypeOf(this,new.target.prototype)}},nn=class extends qe{timeoutMs;constructor(e,t){super(`[urun] request doc-sync did not establish within ${e}ms \u2014 the request was never delivered to the runtime (the session doc never synced with the session-server; check the doc-sync transport / connection)`,{requestId:t}),this.name="RequestDocSyncError",this.timeoutMs=e,Object.setPrototypeOf(this,new.target.prototype)}},on=class extends Error{stream;owner;attempted;constructor(e,t,s){super(`[urun] stream "${e}" is already produced by the ${t}; this (${s}) peer cannot also produce it \u2014 a named stream has exactly one producer (consume it instead, or use a distinct name for the reverse direction)`),this.name="StreamDirectionConflict",this.stream=e,this.owner=t,this.attempted=s,Object.setPrototypeOf(this,new.target.prototype)}},qt=15e3,Ut=class extends Error{kind;stream;timeoutMs;constructor(e,t){let s=t?.timeoutMs??qt,n=t?.stream??e,i=n!==e?` "${n}"`:"";super(`[urun] SFU did not ack producer ${e}${i} within ${Math.round(s/1e3)}s \u2014 the server never replied to 'produce'. The runtime's inbound port for this stream is likely unadvertised (a cold or capacity-queued runtime), so the SFU has nothing to forward the track to; the published track never reached the runtime.`),this.name="ProduceAckTimeout",this.kind=e,this.stream=n,this.timeoutMs=s,Object.setPrototypeOf(this,new.target.prototype)}},an=class extends qe{constructor(e){super("[urun] request aborted",{requestId:e}),this.name="RequestAbortError",Object.setPrototypeOf(this,new.target.prototype)}},cn=class extends qe{constructor(e){super("[urun] request cancelled: session disconnected",{requestId:e}),this.name="RequestCancelledError",Object.setPrototypeOf(this,new.target.prototype)}},Xo=/^\[urun\] (?:timed out waiting for session allocation at|session allocation wait expired at|session allocation poll failed at|session allocation failed at|session allocation at|session create at) \S+(?::[ \t]+|[ \t]+|$)/;function Zo(r){return r.replace(/\bhttps?:\/\/[^\s)]+/g,"the session gateway")}function dn(r){let e=r.replace(Xo,"");return Zo(e||r.replace(/^\[urun\] /,""))}function ln(r){let e=r.error?.httpStatus;if(e===401||e===403)return"The backend rejected this client \u2014 sign in again or check the auth token / org access.";if(r.error?.code==="session_archived")return"This session is archived \u2014 call directory.unarchive(sessionId) (the session directory's un-archive verb), then reconnect with the same id.";let t=r.error?.retryAfterSeconds,s=t!==void 0?` It asked for ${Math.round(t)}s.`:"";return e===429?`The backend is shedding load \u2014 its admission queue is full, so this is capacity, not your request.${s} The SDK already retried with backoff; try again in a moment.`:e===408?`The request timed out before the backend answered \u2014 that is a timeout, not a verdict on your request.${s} The SDK already retried with backoff; try again in a moment.`:e!==void 0&&e>=500?"The backend is having an outage (nothing is wrong with your request) \u2014 the SDK already retried with backoff, so try again shortly and report the status above if it persists.":"The backend could not create a session \u2014 check the app/function name and auth, then retry."}function Fr(r,e){let t=e.error?.reason,s=e.elapsedMs!==void 0?Math.round(e.elapsedMs/1e3):void 0;switch(r){case"create-failed":{let n=e.error?.httpStatus!==void 0?` (HTTP ${e.error.httpStatus})`:"",i=e.error?.code;return i==="queue_ttl_expired"||i==="stale_poll_expired"?{message:`[urun] the queued session REQUEST timed out while waiting${n} (${i}) \u2014 the session itself is untouched`,hint:"Nothing was lost and nothing needs replacing: connect again with the same session and the control plane re-admits the request (a poll that arrives in time re-drives it on its own)."}:i==="session_archived"?{message:`[urun] this session is archived${n} \u2014 un-archive it before resuming`+(t?`: ${dn(t)}`:""),hint:ln(e)}:{message:`[urun] session create failed${n}${t?`: ${dn(t)}`:""}`,hint:ln(e)}}case"never-live":{let n=s!==void 0?` after ${s}s`:"",i=` (last server status: ${e.lastServerStatus??"none"})`;return e.error?.code==="expired"?{message:`[urun] session${e.sessionId?` ${e.sessionId}`:""} expired before media connected${n} \u2014 the control plane reclaims sessions whose media transport never establishes (~80s after create)`,hint:"Retry to mint a fresh session, and connect promptly after start (a backgrounded tab or paused debugger can miss the window)."}:e.sessionId?{message:`[urun] session ${e.sessionId} was created but never went live${n}${i} \u2014 the backend is busy or wedged (no runtime picked the session up)`,hint:"The backend is at capacity or stuck. Retry in a moment; if it persists, the session id above is what to report."}:{message:`[urun] no session went live${n} (phase=${e.phase}${e.lastServerStatus?`, last server status: ${e.lastServerStatus}`:""})`,hint:"The session never got past admission. Retry; if it persists, check the backend deployment."}}case"transport-failed":return e.error?.code==="transport-consumed"?{message:`[urun] the retry reused a session whose media transport was already connected${e.sessionId?` (id ${e.sessionId})`:""} \u2014 the session was consumed by an earlier attempt`,hint:"Start a fresh session (reload the page) \u2014 this session leg cannot be connected again."}:{message:`[urun] media/transport connection failed${t?`: ${t}`:""} (transport state: ${e.transportState})`,hint:"The network is likely blocking the media connection (WebRTC/WebSocket) \u2014 try a different network or disable VPN/proxy, then retry."};case"media-permission":return{message:`[urun] microphone/camera unavailable${t?`: ${t}`:""}`,hint:e.error?.code==="NotFoundError"||e.error?.code==="OverconstrainedError"?"No matching input device was found \u2014 connect or select a microphone/camera and retry.":"Allow microphone/camera access for this site (browser permission \u2014 or, when embedded, the parent page's permissions policy), then retry."};case"runtime-failed":return{message:`[urun] session${e.sessionId?` ${e.sessionId}`:""} failed at runtime${t?`: ${t}`:""}`,hint:"The session function crashed on the backend \u2014 check the app logs. The session itself is parked, not gone: attach to it again once the app is fixed."};case"produce-timeout":return{message:`[urun] publishing a track timed out${t?`: ${t}`:""} \u2014 the SFU never acked the produce (the runtime\u2019s inbound port for the stream was not advertised in time)`,hint:"The runtime was still cold or the backend was at capacity when the track was published. Retry in a moment; if it persists, the backend never opened the stream to receive it."};case"insufficient-credits":return{message:`[urun] session create refused${e.error?.httpStatus!==void 0?` (HTTP ${e.error.httpStatus})`:""} \u2014 the org has insufficient credits${t?`: ${t}`:""}`,hint:"Out of credits \u2014 add credits to keep running sessions."}}}var ke=class extends Error{kind;status;hint;constructor(e,t,s){let{message:n,hint:i}=Fr(e,t);super(n),this.name="SessionFailedError",this.kind=e,this.status=t,this.hint=i,s?.cause!==void 0&&(this.cause=s.cause),Object.setPrototypeOf(this,new.target.prototype)}};function gu(r,e){if(r instanceof ke)return r;let t=r instanceof Error?r:new Error(String(r)),s={phase:e?.phase??"idle",transportState:e?.transportState??"disconnected",...e,error:{reason:t.message,code:t.name,kind:"media-permission"}};return new ke("media-permission",s,{cause:r})}var _t=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)}},B=class extends Error{httpStatus;code;balanceCredits;platformStatus;retryAfterSeconds;constructor(e,t){super(e),this.name="SessionAllocationError",this.httpStatus=t?.httpStatus,this.code=t?.code,this.balanceCredits=t?.balanceCredits,this.platformStatus=t?.platformStatus,this.retryAfterSeconds=t?.retryAfterSeconds,t?.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}};function fe(){return typeof process<"u"&&process.stdout!=null&&typeof process.stdout.write=="function"}function Bt(){return typeof window>"u"&&typeof process<"u"&&process.versions!=null&&process.versions.node!=null}function un(){return Bt()?"Chrome111":void 0}function pn(){return typeof globalThis.RTCPeerConnection<"u"?null:"the WebRTC peer globals (RTCPeerConnection) are not installed in this runtime"}function hn(){if(!Bt())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.")}function mn(r){if(!r)return!1;let e=typeof r=="string"?r:r.name;return e==="queued"||e==="unavailable"||e==="provisioning"||e==="waiting_for_capacity"}function bu(r){return r?(typeof r=="string"?r:r.name)==="paused":!1}var ea=2e3;function ta(r){let e=r.end;if(typeof e!="function")return Promise.resolve();let t=Promise.resolve().then(()=>e.call(r)).then(()=>{},s=>{fe()?console.warn("[urun] whenLive give-up park failed (advisory, ignored):",s):console.debug?.("[urun] whenLive give-up park failed (advisory, ignored):",s)});return new Promise(s=>{let n,i=()=>{n!==void 0&&clearTimeout(n),s()};n=setTimeout(i,ea),t.then(i)})}var ra=45e3,fn=6e5;function Su(r,e={}){let{timeout:t=ra,signal:s}=e;return new Promise((n,i)=>{if(s?.aborted){i(s.reason instanceof Error?s.reason:new Error("whenLive aborted"));return}if(r.phase?.name==="live"){n();return}if(r.phase?.name==="error"){let _=r.phase,x=r.status??{phase:_.name,transportState:"disconnected",sessionId:_.sessionId,requestId:_.requestId,queue:_.queue,error:_.error,region:_.region};i(new ke(_.error?.kind??"transport-failed",x));return}let a,c,l=!1,d=_=>{l||(l=!0,c!==void 0&&clearTimeout(c),s?.removeEventListener("abort",u),a?.(),_?i(_):n())},u=()=>{d(s?.reason instanceof Error?s.reason:new Error("whenLive aborted"))};s?.addEventListener("abort",u,{once:!0});let p=()=>{let _=r.phase;return r.status??{phase:_?.name??"idle",transportState:"disconnected",sessionId:_?.sessionId,requestId:_?.requestId,queue:_?.queue,error:_?.error,region:_?.region}},m=_=>d(new ke(_,p())),f=Date.now(),h=t,g=()=>{if(h<=0)return;c!==void 0&&clearTimeout(c);let _=f+h-Date.now();c=setTimeout(()=>{let x=p();x.elapsedMs===void 0&&(x.elapsedMs=h),c=void 0,s?.removeEventListener("abort",u),a?.(),a=void 0,ta(r).then(()=>{d(new ke("never-live",x))})},Math.max(0,_))},v=_=>{l||h<=0||_?.runtime?.wake?.expectedWakePath==="cold-boot"&&(fn<=h||(h=fn,g()))};g(),a=r.onPhase(_=>{_?.name==="live"?d():_?.name==="error"?m(_.error?.kind??"transport-failed"):v(_)}),l||v(r.phase),l&&a()})}function Ru(r){switch(r.name){case"idle":return"Initializing\u2026";case"unavailable":return"Starting the app\u2026";case"queued":return r.queue?`Waiting in queue (position ${r.queue.position} of ${r.queue.depth})\u2026`:r.runtime?.state==="busy"?"All runtimes are busy \u2014 waiting for capacity\u2026":"Waiting for capacity\u2026";case"provisioning":return r.runtime?.state==="starting"?"Starting model\u2026":"Provisioning\u2026";case"waiting_for_capacity":return r.queue?`Waiting for GPU capacity (position ${r.queue.position} of ${r.queue.depth})\u2026`:"Waiting for GPU capacity";case"connecting":return"Connecting\u2026";case"live":return"Live";case"paused":return sa(r.reason);case"error":{if(r.error?.kind==="insufficient-credits")return"Out of credits \u2014 add credits to keep running sessions.";let e=r.error?.kind;if(e){let{message:t,hint:s}=Fr(e,{phase:r.name,transportState:"disconnected",sessionId:r.sessionId,requestId:r.requestId,queue:r.queue,error:r.error});return`${t.replace(/^\[urun\] /,"")} \u2014 ${s}`}return r.error?.reason?`Session failed \u2014 ${r.error.reason}`:"Session failed"}case"unknown":return r.reason?`Session in an unrecognized state ("${r.reason}") \u2014 the client SDK may be out of date`:"Session in an unrecognized state \u2014 the client SDK may be out of date"}}function sa(r){switch(r){case"client_ended":return"Paused \u2014 you hung up. Resume any time.";case"client_paused":return"Paused \u2014 you paused it. Resume any time.";case"client_detached":return"Paused \u2014 this device let go. Resume any time.";case"client_gone":return"Paused \u2014 every device disconnected. Resume any time.";case"session_ended":case"ended":case"closed":return"Paused \u2014 the compute was released. Resume any time.";case"idle_timeout":return"Paused \u2014 idle. Resume any time.";case"max_session_age":return"Paused \u2014 reached its maximum length. Resume any time.";case"credits_exhausted":return"Paused \u2014 out of credits. Add credits, then resume.";case"capacity_pressure":return"Paused \u2014 the GPU was reclaimed while the platform was under load. Resume any time.";case"control_plane_release":return"Paused \u2014 the platform reclaimed the compute. Resume any time.";case"superseded":return"Paused \u2014 another client attached. Resume any time.";case"superseded_by_redial":return"Paused \u2014 a newer connection from this session took over. Resume any time.";case"connect_deadline":return"Paused \u2014 the runtime never finished connecting in time. Resume to try again.";case"adoption_expired":return"Paused \u2014 the runtime was assigned but never picked the session up. Resume to try again.";case"media_lane_bind_failed":return"Paused \u2014 the audio/video lane could not be set up. Resume to try again.";case"lease_lost":return"Paused \u2014 the runtime stopped renewing its lease. Resume any time.";case"presence_unconfirmed":return"Paused \u2014 the platform could not confirm anyone was still attached. Resume any time.";case"runtime_inert":case"assignment_unconfirmable":return"Paused \u2014 the runtime never acknowledged its assignment. Resume to try again.";case"runtime_unreachable":return"Paused \u2014 the platform could not reach the runtime. Resume to try again.";case"runtime_silent":return"Paused \u2014 the runtime stopped sending audio/video. Resume to try again.";case"assignment_undelivered":return"Paused \u2014 the assignment never reached a runtime. Resume to try again.";case"dispatch_released":return"Paused \u2014 the worker finished and gave its GPU seat back. Resume any time.";case"dispatch_parked":return"Paused \u2014 the worker finished and parked the session. Resume any time.";case"runtime_swap_exhausted":return"Paused \u2014 the platform ran out of runtimes to try. Resume any time.";case"dispatch_failed":return"Paused \u2014 handing the session to a worker did not succeed. Resume to try again.";default:return r?`Paused \u2014 ${r}. Resume any time.`:"Paused \u2014 resume any time."}}var $r=500,zt=15e3,Be=6;function Ht(r,e=Math.random){if(!Number.isFinite(r)||r<0)throw new Error(`[urun] computeBackoffDelay: attempt must be a non-negative number, got ${r}`);let t=Math.min(zt,$r*2**r);return Math.round(e()*t)}function Ur(r){if(r instanceof B){let e=r.httpStatus;return e===408||e===429||e!==void 0&&e>=500}return r instanceof Error?r.name==="TypeError"||r.name==="TimeoutError"||r.name==="AbortError":!1}var gn=10,na=.5,Wt=gn;function qr(){return Wt<1?!1:(Wt-=1,!0)}function Br(){Wt=Math.min(gn,Wt+na)}var ia="session-api.prod.cloud.urun.sh",oa=["https://session-api.use2.prod.cloud.urun.sh","https://session-api.usw2.prod.cloud.urun.sh"];function Y(r){return r.trim().replace(/\/+$/,"")}function zr(r,e){let t=[],s=n=>{if(!n)return;let i=Y(n);i&&!t.includes(i)&&t.push(i)};s(r);for(let n of e??[])s(n);for(let n of Na(r))s(n);return t}function Du(r){try{if(typeof fetch!="function")return;let e=Y(r.baseUrl),t=r.sessionId?`${e}/api/sessions/${encodeURIComponent(r.sessionId)}/end`:`${e}/api/session-requests/${encodeURIComponent(r.requestId)}/cancel`;fetch(t,{method:"POST",headers:r.reason!==void 0?{...de(r,r.jwt),"Content-Type":"application/json"}:de(r,r.jwt),...r.reason!==void 0?{body:JSON.stringify({reason:r.reason})}:{},keepalive:!0}).catch(()=>{})}catch{}}async function Iu(r){try{let e=`${Y(r.baseUrl)}/api/session-requests/${encodeURIComponent(r.requestId)}/cancel`,t=await me(r);if(r.getAccessToken&&!t)throw new ae("[urun] session request cancel refused: getAccessToken resolved no token (an unauthenticated cancel is never sent)",{requestId:r.requestId,code:"no_access_token"});let s=await fetch(e,{method:"POST",headers:de(r,t),keepalive:!0});if((s.status===401||s.status===403)&&r.getAccessToken){let o=await me(r,{forceRefresh:!0,reason:"unauthorized"});o&&o!==t&&(s=await fetch(e,{method:"POST",headers:de(r,o),keepalive:!0}))}let n=await ze(s);if(!s.ok)throw new ae(`[urun] session request cancel failed: ${Kt(n,s.status)}`,{requestId:r.requestId,code:n.error_code,httpStatus:s.status});let i=String(n.status??"");if(i==="cancelled"||i==="canceled"||i==="closed")return{status:"canceled",requestId:r.requestId};if(i==="failed"||i==="rejected"||i==="expired")return{status:"canceled",requestId:r.requestId,platformStatus:i};throw new ae(`[urun] session request cancel returned an unrecognized request status ${JSON.stringify(i)} (recognized: cancelled/canceled, closed, failed, rejected, expired)`,{requestId:r.requestId,code:"invalid_release_response",httpStatus:s.status})}catch(e){throw e instanceof ae?e:new ae("[urun] session request cancel failed",{requestId:r.requestId,cause:e})}}async function aa(r){let e;try{e=await Hr(r,`/api/sessions/${encodeURIComponent(r.sessionId)}/end`,{method:"POST",keepalive:!0},"session end")}catch(n){if(n instanceof ae)throw n;let i=n;throw new ae(i?.message??"[urun] session end request failed",{sessionId:r.sessionId,...i?.code!==void 0?{code:i.code}:{},...i?.httpStatus!==void 0?{httpStatus:i.httpStatus}:{},cause:n})}let t=String(e.status??""),s=e.pause_reason;if(t==="paused")return{status:"paused",sessionId:String(e.logical_id??e.id??r.sessionId),reason:typeof s=="string"&&s.length>0?s:"client_ended"};throw new ae(`[urun] session end returned ${JSON.stringify(t)} for session ${r.sessionId} \u2014 an end PARKS the session, so the only contract-valid answer is "paused" (a terminal word on this route would be a session-plane terminal write, which is forbidden)`,{sessionId:r.sessionId,code:"invalid_end_response"})}function Sn(r){if(typeof r!="string"||r.length===0)return null;let e=new Date(r);return Number.isFinite(e.getTime())?e:null}var ca=120,da=1e3,la=20,ua=5,pa=500,Rn=1e4,ha=new Set([502,503,504]),fa=Be,ma=2,ga=50,_n=1e4;async function vn(r,e){let t=Date.now()+_n;for(;;){await We(ga);let s=await me(r);if(s)return s;if(Date.now()>=t)throw new B(`[urun] session allocation at ${e} never got an access token: the wired getAccessToken resolved nothing within ${Math.round(_n/1e3)}s (no unauthenticated request was sent)`)}}function _a(r,e){if(!r)return null;try{let t=new URL(r),s=e?new URL(Y(e)):null,n=t.pathname==="/api/sessions/create"||t.pathname==="/api/sessions/create/";return t.protocol!=="https:"||!n||!ba(t,s)?null:Y(t.origin)}catch{return null}}function va(r,e){if(!r||!r.trim())return{outcome:"absent"};if(!wa(e))return{outcome:"bootstrap-only"};let t=r.includes("://")?r:`https://${r}`,s;try{s=new URL(t)}catch{return{outcome:"rejected",reason:"not a parseable URL or host"}}return s.protocol!=="https:"?{outcome:"rejected",reason:`scheme ${s.protocol} is not https:`}:s.pathname!=="/"&&s.pathname!==""?{outcome:"rejected",reason:`expected a bare origin, got path ${s.pathname}`}:Gt(s.hostname)?{outcome:"pinned",base:Y(s.origin)}:{outcome:"rejected",reason:`host ${s.hostname} is outside the urun.sh trust set`}}function wa(r){if(!r)return!1;try{let e=new URL(Y(r));return e.protocol==="https:"&&Gt(e.hostname)}catch{return!1}}function ya(r){let e=Y(r);try{return Y(new URL(e).origin)}catch{return e}}function ba(r,e){return Gt(r.hostname)&&(!e||Gt(e.hostname))}function Gt(r){let e=r.toLowerCase();return e==="urun.sh"||e.endsWith(".urun.sh")}function Sa(r){let e=r instanceof B?r.retryAfterSeconds:void 0;return e===void 0||!Number.isFinite(e)||e<=0?0:Math.min(e*1e3,zt)}function Cn(r,e){let t=Sa(e);return t>0?Math.max(r,Date.now()+t):r}async function Lu(r){let e=zr(r.baseUrl,r.fallbackUrls),t=null,s=0,n=e.length>1;for(let i=0;i<Be;i++){for(let o of e)try{let a=await Ra(o,r,{pollAttempts:ca,retryAfterLimitMs:n?da:void 0});return Br(),a}catch(a){if(t=a instanceof Error?a:new Error(String(a)),s=Cn(s,t),t instanceof ce||t instanceof Ie||ka(t))throw t}if(!Ur(t))break;if(i+1<Be){if(!qr())break;await We(Math.max(Ht(i),s-Date.now()))}}throw t??new Error("[urun] session allocation failed")}async function Ra(r,e,t){let s,n,i,o,a=ya(r),c=0,l=new Set,d=Date.now()+t.pollAttempts*Rn;for(let u=0;u<t.pollAttempts;u++){n=i??await me(e),i=void 0,e.getAccessToken&&!n&&(n=await vn(e,a));let p=!!s,m=Date.now(),f;if(s){let S=0,w=0,D=F=>{let z=Math.min(zt,$r*2**S),N=Math.max(Math.ceil(z/2),Ht(S));return S+=1,Math.min(Math.max(F,N),Math.max(0,d-Date.now()))};for(;;){let F=d-Date.now();if(F<=0)throw Vt(a,!0,o);let z=Math.max(1,Math.min(la,Math.floor(F/1e3)));m=Date.now();try{f=await fetch(`${a}/api/session-requests/${encodeURIComponent(s)}?wait_s=${z}`,{headers:de(e,n),redirect:"manual",signal:Ma((z+ua)*1e3)})}catch(q){if(w+=1,w>=fa)throw new Ie(`[urun] session allocation poll failed at ${a} after ${w} consecutive transport failures`,{cause:q});let mt=D(0);if(mt<=0)throw Vt(a,!0,o);await We(mt);continue}if(w=0,o=`HTTP ${f.status}`,!ha.has(f.status))break;try{await f.body?.cancel()}catch(q){throw new Ie(`[urun] session allocation poll response cleanup failed at ${a}`,{cause:q})}let N=D(yn(f,{},t.retryAfterLimitMs));if(N<=0)throw Vt(a,!0,o);await We(N)}}else f=await fetch(`${a}/api/sessions/create`,{method:"POST",redirect:"manual",headers:{...de(e,n),"Content-Type":"application/json","Idempotency-Key":e.idempotencyKey},body:JSON.stringify(Ca(e))});if(f.type==="opaqueredirect"||f.status>=300&&f.status<400){try{await f.body?.cancel()}catch{}throw new ce(`[urun] ${p?"session poll":"session create"} at ${a} answered an HTTP redirect (status ${f.status}) \u2014 browsers cannot follow a cross-origin redirect with credentials; the control plane must emit the JSON redirect envelope ({status:"redirect", location})`)}let h=await ze(f);if(o=typeof h.status=="string"&&h.status?h.status:`HTTP ${f.status}`,!s&&h.status==="redirect"){let S=_a(h.location,a);if(!S)throw new B(`[urun] session create at ${a} answered a redirect envelope without a usable location (${JSON.stringify(h.location??null)}) \u2014 refusing to re-issue an authenticated create to an untrusted target`);if(S===a)throw new B(`[urun] session create at ${a} redirected to ITSELF \u2014 control-plane region apex map misconfiguration`);if(c>=ma)throw new B(`[urun] session create followed ${c} region redirects and was redirected AGAIN (${a} -> ${S}) \u2014 region forward loop, giving up loudly`);c+=1,a=S;continue}if(h.request_id)try{e.onRequest?.({requestId:h.request_id,baseUrl:a,...h.session_id?{sessionId:h.session_id}:{}})}catch{}if(f.ok&&(h.status==="allocated"||!h.status&&!!h.session_id)&&!!h.session_id){let S=h.session_id,w=va(h.session_api_base,a);if(w.outcome==="rejected")throw new ce(`[urun] gateway allocated session ${h.session_id} with an unusable session_api_base (${JSON.stringify(h.session_api_base)}): ${w.reason} \u2014 refusing to pin the session to a region it may not belong to`);if(w.outcome==="pinned"&&w.base!==a&&(a=w.base,h.request_id))try{e.onRequest?.({requestId:h.request_id,baseUrl:a,...h.session_id?{sessionId:h.session_id}:{}})}catch{}let D=kn(h.ws_url,a,S,"gateway allocated session");return{baseUrl:a,sessionId:S,wsUrl:D,endsAt:Sn(h.ends_at),response:h}}if(f.status===202||h.status==="pending"||h.status==="queued"||h.queued){if(s=h.request_id||s,!s)throw new Error("[urun] gateway queued session without request_id");if(e.onAdmission)try{e.onAdmission(La(h,s))}catch{}let S=Date.now()-m<pa;p&&S&&await We(yn(f,h,t.retryAfterLimitMs));continue}if((f.status===401||f.status===403)&&e.getAccessToken&&h.error_code!=="session_name_not_yours"){let S=n??"";l.add(S);let w=await me(e,{forceRefresh:!0,reason:"unauthorized"});if(w&&!l.has(w)){i=w;continue}if(w===void 0){let D=await vn(e,a);if(!l.has(D)){i=D;continue}}}let v=Kt(h,f.status),_=h.error_code??(f.status===402?"insufficient_credits":void 0),x=p?Ie:B;throw new x(`[urun] session allocation failed at ${a}: ${v}`,{httpStatus:f.status,code:_,balanceCredits:typeof h.balance_credits=="number"?h.balance_credits:void 0,platformStatus:h.status,retryAfterSeconds:Vr(f,h)})}throw Vt(a,!!s,o)}function Vt(r,e=!1,t){let s=e?Ie:B;return new s(`[urun] session allocation wait expired at ${r} \u2014 the CLIENT-side wait budget elapsed (last server status: ${t??"none received"}; the gateway reported no failure)`)}function de(r,e){let t={"X-Tenant-Id":r.orgId,"X-Auth-Provider":r.authProvider||"default","X-User-Id":"anonymous"};return e&&(t.Authorization=`Bearer ${e}`),t}async function me(r,e){return r.getAccessToken?await r.getAccessToken(e)??void 0:r.jwt}function Ca(r){let e=r.priority==="preempt";return{app:r.app,function:r.functionName,gpus:1,idempotency_key:r.idempotencyKey,...r.sessionKey&&!e?{logical_id:r.sessionKey}:{},...r.label&&!r.sessionKey?{label:r.label}:{},...e?{priority:"preempt"}:{},...r.sharedApp?{shared_app:!0}:{}}}async function Hr(r,e,t,s){let n=await me(r);if(r.getAccessToken&&!n)throw new De(`[urun] ${s} refused: getAccessToken resolved no token (an unauthenticated request is never sent)`,{code:"no_access_token"});let i=zr(r.baseUrl,r.fallbackUrls),o;for(let a of i){let c=`${Y(a)}${e}`,l=p=>fetch(c,{method:t.method,headers:t.body!==void 0?{...de(r,p),"Content-Type":"application/json"}:de(r,p),...t.body!==void 0?{body:JSON.stringify(t.body)}:{},...t.keepalive?{keepalive:!0}:{}}),d;try{if(d=await l(n),(d.status===401||d.status===403)&&r.getAccessToken){let p=await me(r,{forceRefresh:!0,reason:"unauthorized"});p&&p!==n&&(d=await l(p))}}catch(p){o=p;continue}let u=await ze(d);if(!d.ok)throw new De(`[urun] ${s} failed: ${Kt(u,d.status)}`,{code:u.error_code,httpStatus:d.status});return u}throw new De(`[urun] ${s} request failed`,{cause:o})}async function Mu(r){let e=new URLSearchParams;r.app&&e.set("app",r.app),r.functionName&&e.set("function",r.functionName),r.includeArchived&&e.set("include_archived","true"),r.limit!==void 0&&e.set("limit",String(r.limit)),r.cursor&&e.set("cursor",r.cursor);let t=e.toString(),s=await Hr(r,`/api/sessions${t?`?${t}`:""}`,{method:"GET"},"session list");if(!Array.isArray(s?.sessions))throw new De("[urun] session list returned no `sessions` array \u2014 the control plane and this SDK disagree on the response shape",{code:"invalid_list_response"});return{rows:s.sessions,nextCursor:s.next_cursor??null}}async function Au(r){let e=r.archived?"archive":"unarchive";await Hr(r,`/api/sessions/${encodeURIComponent(r.sessionId)}/${e}`,{method:"POST"},`session ${e}`)}async function Ou(r){await aa(r)}async function Nu(r){let e=zr(r.baseUrl,r.fallbackUrls),t=null,s=0;for(let n=0;n<Be;n++){for(let i of e)try{let o={baseUrl:i,app:"",functionName:"",orgId:r.orgId,jwt:r.jwt,getAccessToken:r.getAccessToken,authProvider:r.authProvider,idempotencyKey:""},a=`${Y(i)}/api/sessions/${encodeURIComponent(r.sessionId)}/viewer-connect`,c=await me(o);if(r.getAccessToken&&!c)throw new B(`[urun] viewer-connect for ${r.sessionId} refused: getAccessToken resolved no token (an unauthenticated viewer-connect is never sent)`);let l=await fetch(a,{headers:de(o,c)});if((l.status===401||l.status===403)&&r.getAccessToken){let p=await me(o,{forceRefresh:!0,reason:"unauthorized"});p&&p!==c&&(l=await fetch(a,{headers:de(o,p)}))}if(!l.ok){let p=await ze(l);throw new B(`[urun] viewer-connect for ${r.sessionId} failed: `+Kt(p,l.status),{httpStatus:l.status,retryAfterSeconds:Vr(l,p)})}let d=await ze(l),u=kn(d.ws_url,i,r.sessionId,"viewer-connect");return Br(),{baseUrl:Y(i),sessionId:r.sessionId,wsUrl:u,endsAt:Sn(d.ends_at),response:d}}catch(o){if(t=o instanceof Error?o:new Error(String(o)),s=Cn(s,t),t instanceof ce)throw t}if(!Ur(t))break;if(n+1<Be){if(!qr())break;await We(Math.max(Ht(n),s-Date.now()))}}throw t??new Error("[urun] viewer-connect failed")}async function ju(r){try{let e=Y(r.baseUrl),t=await me(r);if(r.getAccessToken&&!t)return{status:"unavailable"};let s=await fetch(`${e}/api/sessions/prewake`,{method:"POST",headers:{...de(r,t),"Content-Type":"application/json"},body:JSON.stringify({app:r.app,function:r.functionName})});if(s.status===404)return{status:"unknown-app"};if(!s.ok)return{status:"unavailable"};let n=await ze(s),i={status:n.status==="prebound"?"prebound":"warming"};return typeof n.expires_at=="string"&&(i.expiresAt=n.expires_at),typeof n.warm_capable=="boolean"&&(i.warmCapable=n.warm_capable),i}catch(e){return fe()?console.warn("[urun] prewake failed (advisory, ignored):",e):console.debug?.("[urun] prewake failed (advisory, ignored):",e),{status:"unavailable"}}}async function ze(r){try{let e=await r.json();return e&&typeof e=="object"?e:{}}catch{return{}}}function Kt(r,e){let t=r.error_code,s=r.error_message||r.message||r.error,n=t&&s&&s!==t?`${t}: ${s}`:s||t;return n?`${n} (HTTP ${e})`:`HTTP ${e}`}var Ta=new Set([400,402,409]);function ka(r){return r instanceof B&&r.httpStatus!==void 0&&Ta.has(r.httpStatus)}var Ea=new Set(["capture-attested","no-portable-golden","portable-golden-release-mismatch","portable-golden-attestation-invalid"]);function Tn(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function Wr(r){return typeof r=="string"&&r.trim().length>0}function wn(r){return typeof r=="number"&&Number.isSafeInteger(r)&&r>0}function Pa(r){return typeof r=="number"&&Number.isSafeInteger(r)&&r>=0}function xa(r){if(Tn(r)&&!(!Wr(r.snapshot_id)||!Wr(r.snapshot_compat_key)||!wn(r.artifact_size_bytes)||!wn(r.durable_arena_bytes)||r.volatile_arena_bytes!==0||!Pa(r.uncovered_weight_bytes)))return{snapshotId:r.snapshot_id,snapshotCompatKey:r.snapshot_compat_key,artifactSizeBytes:r.artifact_size_bytes,durableArenaBytes:r.durable_arena_bytes,volatileArenaBytes:0,uncoveredWeightBytes:r.uncovered_weight_bytes}}function Da(r){if(!Tn(r)||r.schema!=="urun.runtime.wake.v1"||r.portability!=="portable"&&r.portability!=="none"||r.expected_wake_path!=="portable-golden-restore"&&r.expected_wake_path!=="cold-boot"||typeof r.reason_code!="string"||!Ea.has(r.reason_code)||r.expectation_basis!=="snapshot-registry"||r.restore_observation!=="not-observed")return;let e=r.reason_code;if(r.portability==="portable"&&r.expected_wake_path==="portable-golden-restore"&&e==="capture-attested"){let t=xa(r.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(r.portability==="none"&&r.expected_wake_path==="cold-boot"&&e!=="capture-attested"&&r.golden===void 0)return{schema:"urun.runtime.wake.v1",portability:"none",expectedWakePath:"cold-boot",reasonCode:e,expectationBasis:"snapshot-registry",restoreObservation:"not-observed"}}function Ia(r){if("serving_region"in r)return typeof r.serving_region=="string"&&r.serving_region.length>0?r.serving_region:null}function La(r,e){let s={status:typeof r.status=="string"&&r.status.length>0?r.status:r.queued?"queued":"pending",requestId:e};Wr(r.session_id)&&(s.sessionId=r.session_id);let n=Ia(r);n!==void 0&&(s.region=n),typeof r.reason=="string"&&r.reason.length>0&&(s.reason=r.reason),typeof r.decision_reason=="string"&&r.decision_reason.length>0&&(s.decisionReason=r.decision_reason),typeof r.provisioning_refusal_source=="string"&&r.provisioning_refusal_source.length>0&&(s.refusalSource=r.provisioning_refusal_source),typeof r.provisioning_refusal_message=="string"&&r.provisioning_refusal_message.length>0&&(s.refusalMessage=r.provisioning_refusal_message),typeof r.queue_position=="number"&&typeof r.queue_depth=="number"&&(s.queue={position:r.queue_position,depth:r.queue_depth});let i=r.runtime_state;if(i==="unavailable"||i==="starting"||i==="busy"){s.runtime={state:i},typeof r.runtime_reason=="string"&&r.runtime_reason.length>0&&(s.runtime.reason=r.runtime_reason);let o=Da(r.runtime_wake);o&&(s.runtime.wake=o)}return s}function Vr(r,e){let t=Number(r.headers.get("Retry-After")||""),s=Number(e.retry_after_seconds??t);return Number.isFinite(s)&&s>0?s:void 0}function yn(r,e,t){let s=Vr(r,e),n=t??Rn;return s!==void 0?Math.min(s*1e3,n):1e3}function We(r){return new Promise(e=>setTimeout(e,r))}function Ma(r){let e=typeof AbortSignal<"u"?AbortSignal:void 0;return typeof e?.timeout=="function"?e.timeout(r):void 0}var ce=class extends Error{},Ie=class extends B{};function kn(r,e,t,s){if(!r)throw new ce(`[urun] ${s} ${t} without ws_url`);let n,i;try{n=new URL(r)}catch{throw new ce(s==="viewer-connect"?`[urun] viewer-connect returned no usable ws_url for ${t}`:`[urun] ${s} ${t} with non-absolute ws_url`)}try{i=new URL(Y(e))}catch{throw new ce(`[urun] ${s} ${t} has invalid gateway base URL`)}let o=Aa(i.hostname)&&i.protocol==="http:";if(!(o&&n.protocol==="ws:"||n.protocol==="wss:"))throw new ce(`[urun] ${s} ${t} with insecure ws_url`);if(!Oa(n,i,o))throw new ce(`[urun] ${s} ${t} with cross-origin ws_url`);return n.toString()}function Aa(r){return r==="localhost"||r==="127.0.0.1"||r==="::1"||r.endsWith(".localhost")}function Oa(r,e,t){return!!(t||r.hostname===e.hostname&&r.port===e.port||bn(r.hostname)&&bn(e.hostname))}function bn(r){return r==="urun.sh"||r.endsWith(".urun.sh")}function Na(r){try{return new URL(r).hostname!==ia?[]:oa}catch{return[]}}function xn(r){return`stream:${r}`}var Dn="urun-stream-v1";var Gr=1,H={BINARY:0,TEXT:1,JSON:2,END:3,CHUNK:4},He=2,En=253952,ja=[H.BINARY,H.TEXT,H.JSON],Kr=Symbol("urun:stream:end");function Qr(r){if(r===Kr)return Uint8Array.from([Gr,H.END]);let{kind:e,body:t}=In(r);return Qt(e,t)}function In(r){return r instanceof Uint8Array?{kind:H.BINARY,body:r}:r instanceof ArrayBuffer?{kind:H.BINARY,body:new Uint8Array(r)}:typeof r=="string"?{kind:H.TEXT,body:new TextEncoder().encode(r)}:{kind:H.JSON,body:new TextEncoder().encode(JSON.stringify(r))}}function Qt(r,e){let t=new Uint8Array(He+e.length);return t[0]=Gr,t[1]=r,t.set(e,He),t}function Ln(r){if(r===Kr)return[Qr(r)];let{kind:e,body:t}=In(r);if(t.length+He<=En)return[Qt(e,t)];let s=En-He,n=[],i=0;for(;t.length-i>s;)n.push(Qt(H.CHUNK,t.subarray(i,i+s))),i+=s;return n.push(Qt(e,t.subarray(i))),n}function $u(r){let{kind:e,body:t}=Mn(r);if(e===H.CHUNK)throw new Error("[urun] CHUNK envelope requires StreamFragmentReassembler (oversized payload)");return Jt(e,t)}function Mn(r){let e=r instanceof Uint8Array?r:new Uint8Array(r);if(e.length<He||e[0]!==Gr)throw new Error(`[urun] bad stream envelope (version=${e[0]}, len=${e.length})`);return{kind:e[1],body:e.subarray(He)}}function Jt(r,e){switch(r){case H.BINARY:return e.slice();case H.TEXT:return new TextDecoder().decode(e);case H.JSON:return JSON.parse(new TextDecoder().decode(e));case H.END:return Kr;default:throw new Error(`[urun] unknown stream envelope KIND 0x${r.toString(16)}`)}}var Yt=class{_chunks=[];_bufferedLength=0;feed(e){let{kind:t,body:s}=Mn(e);if(t===H.CHUNK){this._chunks.push(s.slice()),this._bufferedLength+=s.length;return}if(ja.includes(t)){if(this._chunks.length===0)return Jt(t,s);let n=new Uint8Array(this._bufferedLength+s.length),i=0;for(let o of this._chunks)n.set(o,i),i+=o.length;return n.set(s,i),this._chunks=[],this._bufferedLength=0,Jt(t,n)}if(this._chunks.length>0)throw this._chunks=[],this._bufferedLength=0,new Error(`[urun] stream envelope KIND 0x${t.toString(16)} arrived mid-fragment-sequence; discarding partial payload`);return Jt(t,s)}},Pn=class{consumerId;_handlers=new Map;constructor(e="loopback"){this.consumerId=e}onData(e,t){let s=this._handlers.get(e);return s||(s=new Set,this._handlers.set(e,s)),s.add(t),()=>s.delete(t)}sendData(e,t,s={}){s.to&&(s.to,this.consumerId);for(let n of this._handlers.get(e)??[])n(t);return Promise.resolve()}};function Uu(r){return{get consumerId(){return r.consumerId},onData(e,t){return r.onStreamData(e,t)},sendData(e,t,s){return r.sendStreamData(e,t,s)}}}var Fo=en(Ss());var zs=en(_o(),1);var vo="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";function Ll(r){let e=globalThis.crypto,t=new Uint8Array(r);if(e?.getRandomValues)return e.getRandomValues(t),t;for(let s=0;s<r;s++)t[s]=Math.floor(Math.random()*256);return t}function wo(r=16){let e=Ll(r),t="";for(let s=0;s<r;s++)t+=vo[e[s]%vo.length];return t}var yo=[1e3,2e3,4e3,8e3,3e4],bo=5,Ml=15e3,Al=15e3,So=15e3,Ro=15e3,Ol=2e3,Nl=6e3,jl=2e3,Fl=300,Co=4e3,$l=2,Ul=750,ql=3,To=[1e3,2e3,4e3],Bl=15e3;function Wp(r){return`stream:${r}`}var Or="--",Wl=["video","audio"];function ko(r){let e=r.lastIndexOf(Or);if(e<=0)return;let t=r.slice(e+Or.length);return Wl.includes(t)?t:void 0}function zp(r,e){return`${r}${Or}${e}`}var zl="v1";function Hl(r,e){return r.name!==e.name||r.reason!==e.reason||r.sessionId!==e.sessionId||r.requestId!==e.requestId||r.wakingSince!==e.wakingSince||r.region!==e.region||(r.endsAt?.getTime()??null)!==(e.endsAt?.getTime()??null)||r.queue?.position!==e.queue?.position||r.queue?.depth!==e.queue?.depth||r.runtime?.state!==e.runtime?.state||r.runtime?.reason!==e.runtime?.reason||r.runtime?.wake!==e.runtime?.wake?!1:r.error?.reason===e.error?.reason&&r.error?.code===e.error?.code&&r.error?.kind===e.error?.kind&&r.error?.httpStatus===e.error?.httpStatus&&r.error?.retryAfterSeconds===e.error?.retryAfterSeconds}var Eo={requested:"provisioning",queued:"queued",pending:"provisioning",allocating:"provisioning",provisioning:"provisioning",waking:"provisioning",waiting_for_capacity:"waiting_for_capacity",allocated:"connecting",connecting:"connecting",establishing:"connecting",live:"live",running:"live",paused:"paused",error:"error",failed:"error",rejected:"error",expired:"paused",cancelled:"paused",canceled:"paused",closed:"paused",releasing:"paused",released:"paused",reaped:"paused",superseded:"paused"};function Po(r){return Object.prototype.hasOwnProperty.call(Eo,r)?{phase:Eo[r],unknown:!1}:{phase:"unknown",unknown:!0}}function Vl(r){return r==="queued"||r==="pending"}function xo(r){return r==="credits_exhausted"}var Do=3,Io=4e3,Lo=[{urls:"stun:stun.l.google.com:19302"},{urls:"stun:stun1.l.google.com:19302"}];function Mo(r){if(!r)return;let e=/\/(?:ws\/)?rtc\/([^/?#]+)/.exec(r);if(e)try{return decodeURIComponent(e[1])}catch{return e[1]}}var Ao=class{_state="disconnected";_sessionId=null;_tracks=new Map;_tracksByName=new Map;_options;_emitter=new zs.default;_ws=null;_connectedUrl=null;_device=null;_mediaUnavailableReason=null;_mediaVerdictResolve;_mediaVerdict=new Promise(e=>{this._mediaVerdictResolve=e});_recvTransport=null;_pendingConsumeData=[];_sendTransport=null;_consumers=new Map;_audioProducer=null;_videoProducer=null;_publishedAudio=null;_publishedVideo=null;_wtMicUplink=null;_wtCamUplink=null;_wtDataUpSender=null;_pendingProduce=null;_multiplexer=null;_reconnectAttempts=0;_reconnectExhaustedWarned=!1;_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=Uo();_reportedCandidatePairKey=null;_candidatePairRefreshSeq=0;_diagnosticSinkFailed=!1;_currentEpoch=0;_selfEpochAdoptUntil=0;_pausedIncarnation=null;_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=Gl()),this._consumerId}get state(){return this._state}get currentIncarnation(){return this._currentEpoch}get phase(){return this._phase}get isProducingMedia(){let e=s=>s!==null&&!s.closed&&!s.paused,t=(s,n)=>s!==null&&n!==null&&n.track.readyState!=="ended"&&s.deliveredDatagrams()>0;return e(this._audioProducer)||e(this._videoProducer)||t(this._wtMicUplink,this._publishedAudio)||t(this._wtCamUplink,this._publishedVideo)}get endsAt(){return this._endsAt}setEndsAt(e){this._endsAt=e}seedRegion(e){e!==void 0&&this._setPhase(this._phase.name,{reason:this._phase.reason,queue:this._phase.queue,runtime:this._phase.runtime,error:this._phase.error,region: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),this._phase.region!==void 0&&(e.region=this._phase.region),e}get region(){return this._phase.region}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}signalingOpen(){return this.isOpen}onWtOnlyLegDeath(e){return this._wtOnlyLegDeath=e,()=>{this._wtOnlyLegDeath===e&&(this._wtOnlyLegDeath=null)}}_wtOnlyLegDeath=null;get connectedUrl(){return this._connectedUrl}get intentionalDisconnect(){return this._intentionalDisconnect}getTrackByName(e){if(ko(e)!==void 0)return;let t=this._tracksByName.get(e);if(t&&t.readyState!=="ended")return t;for(let s of this._tracks.values())if(!(s.kind!==e||s.readyState==="ended")&&this._streamNameOf(s)===void 0)return s;return t}_streamNameOf(e){for(let[t,s]of this._tracksByName)if(s===e)return t}setAuth(e){this._options={...this._options,...e},this.isOpen&&this._send({type:"auth",orgId:this._options.orgId,jwt:this._options.jwt,authProvider:this._options.authProvider})}constructor(e){this._options=e??{url:""},e?.sessionId&&(this._sessionId=e.sessionId)}setConnection(e){if(this.isOpen){let t=Mo(e.url);if(e.sessionId!==void 0&&e.sessionId!==this._sessionId)throw new _t(this._sessionId,e.sessionId);if(t!==void 0&&t!==this._sessionId)throw new _t(this._sessionId,t);this._options={...this._options,...e};return}this._options={...this._options,...e},e.sessionId&&(this._sessionId=e.sessionId)}setConnectionResolver(e){this._resolveConnection=e}applyControlDocState(e){let t=e&&typeof e=="object"?e.session:void 0,s=Zl(t);if(s!==void 0&&this.setIncarnation(s),!t||typeof t!="object")return;let n=t,i=typeof n.status=="string"?n.status:void 0;if(i&&!this.isStaleClosedMarker(n)){if(i==="error"){let o=n.error_reason??n.errorReason,a=typeof o=="string"&&o?o:"session failed";this._setPhase("error",{error:{reason:a,code:"runtime-failed",kind:"runtime-failed"}})}else if(i==="closed"||i==="ended"||i==="paused"){let o=n.close_reason??n.closeReason??n.pause_reason??n.pauseReason;if(xo(o)){this._setPhase("paused",{reason:"credits_exhausted"});return}if(this._pastDeadline()){this._setPhase("paused",{reason:"max_session_age"});return}this._setPhase("paused",{reason:typeof o=="string"&&o?o:i})}}}setIncarnation(e){if(!Number.isFinite(e)||e<=this._currentEpoch)return;let t=this._currentEpoch>0,s=this._state==="connected";this._currentEpoch=e;let i=this._selfEpochAdoptUntil>0&&Date.now()<=this._selfEpochAdoptUntil;this._selfEpochAdoptUntil=0,!i&&t&&s&&!this._intentionalDisconnect&&this._renegotiate()}isStaleIncarnation(e){return Number.isFinite(e)?e<this._currentEpoch:!1}isStaleClosedMarker(e){if(!e)return!1;let t=typeof e.status=="string"?e.status:void 0;if(t!=="closed"&&t!=="ended"&&t!=="paused"&&t!=="error")return!1;let s=e.status_epoch??e.statusEpoch,n=typeof s=="number"?s:Number(s);return Number.isFinite(n)?n<this._currentEpoch:!1}_isStaleLivenessEvidence(){return this._phase.name!=="paused"||this._pausedIncarnation===null?!1:this._currentEpoch<=this._pausedIncarnation}async connect(e){if(this.isOpen&&this._state==="connected"&&!this._intentionalDisconnect){e!==void 0&&(this._lastStartOptions=e);return}this._lastStartOptions=e,this._intentionalDisconnect=!1,this._pausedIncarnation=null,this._connectStartedAt??=Date.now(),this._cancelPendingDial?.(new Error("TransportSession: connect superseded by a newer connect()"));let t=++this._generation,s=this._state==="reconnecting"||this._state==="renegotiating";s||this._setState("connecting");let n=null,i=()=>t!==this._generation||this._intentionalDisconnect,o=()=>{if(i())throw new Error("TransportSession: connect cancelled")},a=async()=>{for(let u of this._connectUrls()){o();try{return await this._connectOnce(u,t,e),!0}catch(p){n=p instanceof Error?p:new Error(String(p)),i()||this._cleanupSocket()}}return!1},c=this._forceResolveOnNextConnect&&this._resolveConnection!==null;this._forceResolveOnNextConnect=!1;let l=c?0:this._resolveConnection?$l:1;for(let u=0;u<l;u++)if(u>0&&(await Oo(Ul),o()),await a())return;if(this._resolveConnection)for(let u=0;u<ql;u++){this._setState("reconnecting"),await Oo(To[Math.min(u,To.length-1)]),o();try{let p=await this._resolveConnection();o(),this.setAuth({jwt:p.jwt??this._options.jwt,authProvider:this._options.authProvider,orgId:this._options.orgId}),this.setConnection({url:p.url,sessionId:p.sessionId,iceServers:p.iceServers??this._options.iceServers}),p.endsAt!==void 0&&(this._endsAt=p.endsAt)}catch(p){if(i())throw new Error("TransportSession: connect cancelled");n=p instanceof Error?p:new Error(String(p));continue}if(await a())return}if(i())throw n??new Error("TransportSession: connect cancelled");this._setState("failed");let d=n??new Error("TransportSession: connect failed");throw s||this._emitError(d),d}leaveLeg(){if(!this.isOpen)return!1;this._intentionalDisconnect=!0,this._selfEpochAdoptUntil=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(e="client_detached"){this._generation+=1,this._intentionalDisconnect=!0,this._selfEpochAdoptUntil=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 t of this._consumers.values())try{t.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._pendingConsumeData=[],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("paused",{reason:e}),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(s){this._diagnosticSinkFailed||(this._diagnosticSinkFailed=!0,console.warn(`[urun] diagnosticSink threw (${String(s instanceof Error?s.message:s)}) \u2014 further diagnostics ride only the structured 'diagnostic' event`))}else e.level==="debug"?fe()?console.warn(`[urun] ${e.message}`,e.detail??{}):console.debug(`[urun] ${e.message}`,e.detail??{}):e.level==="error"?console.error(`[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){return this._send(e)}onSignal(e){return this.on("signal",e)}emitDiagnostic(e){this._emitDiagnostic(e)}onStreamData(e,t){let s=this._streamDataHandlers.get(e);return s||(s=new Set,this._streamDataHandlers.set(e,s)),s.add(t),()=>{let n=this._streamDataHandlers.get(e);n?.delete(t),n&&n.size===0&&this._streamDataHandlers.delete(e)}}sendStreamData(e,t,s){try{this._requireMediaSupport("sendStreamData")}catch(n){return Promise.reject(n)}return this._wtDataUpSender?this._wtDataUpSender.send(e,Qr(t)):this._ensureDataProducer(e).then(n=>{for(let i of Ln(t))n.send(i)})}get wtDataUplinkSeam(){return{onUplink:e=>{this._wtDataUpSender=e},onUplinkLost:e=>{if(this._wtDataUpSender){if(this._wtDataUpSender=null,!this._sendTransport){console.warn(`[urun-sh/core] WT data uplink lost (${e}) with NO WebRTC send transport \u2014 there is no SCTP to revert to; failing the WT leg so the re-dial ladder re-establishes it`),this._wtOnlyLegDeath?.(e);return}console.warn(`[urun-sh/core] WT data uplink lost (${e}) \u2014 data-up reverts to SCTP for this leg`)}}}}_awaitSendTransport(){return this._sendTransport?Promise.resolve(this._sendTransport):new Promise((e,t)=>{let s={resolve:i=>{clearTimeout(n),e(i)},reject:i=>{clearTimeout(n),t(i)}},n=setTimeout(()=>{let i=this._sendTransportWaiters.indexOf(s);i>=0&&this._sendTransportWaiters.splice(i,1),t(new Error(`[urun] no send transport after ${So}ms (the server never offered createSendTransport \u2014 media/data produce is impossible on this leg)`))},So);this._sendTransportWaiters.push(s)})}_settleSendTransportWaiters(e,t){let s=this._sendTransportWaiters;this._sendTransportWaiters=[];for(let n of s)e?n.resolve(e):n.reject(t??new Error("TransportSession: disconnected"))}_ensureDataProducer(e){let t=this._dataProducers.get(e);if(t&&!t.closed)return Promise.resolve(t);let s=this._dataProducerPromises.get(e);if(s)return s;let n=this._awaitSendTransport().then(i=>i.produceData({label:xn(e),protocol:Dn,ordered:!0})).then(i=>this._awaitDataChannelOpen(i)).then(i=>(this._dataProducers.set(e,i),this._dataProducerPromises.delete(e),i)).catch(i=>{throw this._dataProducerPromises.delete(e),i});return this._dataProducerPromises.set(e,n),n}_awaitDataChannelOpen(e){if(e.closed)return Promise.reject(new Error("[urun] sendStreamData: DataProducer closed before its DataChannel opened"));let t=e.readyState;return t==="open"?Promise.resolve(e):t==="closing"||t==="closed"?Promise.reject(new Error(`[urun] sendStreamData: DataChannel is ${t} \u2014 cannot deliver data-up payloads`)):new Promise((s,n)=>{let i=()=>{l(),s(e)},o=u=>{d(new Error(`[urun] sendStreamData: DataChannel error before open: ${u.message}`))},a=()=>{l(),n(new Error("[urun] sendStreamData: DataProducer closed before its DataChannel opened"))},c=setTimeout(()=>{d(new Error(`[urun] sendStreamData: DataChannel not open after ${Ro}ms (the SCTP handshake never completed \u2014 data-up produce is impossible on this channel)`))},Ro),l=()=>{clearTimeout(c),e.off("open",i),e.off("error",o),e.observer.off("close",a)},d=u=>{l();try{e.close()}catch{}n(u)};e.on("open",i),e.on("error",o),e.observer.on("close",a)})}_dispatchStreamData(e,t){for(let s of this._streamDataHandlers.get(e)??[])s(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 s=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(s.message),this._emitter.emit("error",s)}_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 s=e.kind==="video";if(!s&&this._wtMicUplink){this._wtMicUplink.setSource(e),this._rememberPublishIntent(!1,e,t);return}if(s&&this._wtCamUplink){this._wtCamUplink.setSource(e),this._rememberPublishIntent(!0,e,t);return}let n=s?this._videoProducer:this._audioProducer;if(n&&!n.closed){if(n.track===e)return;await n.replaceTrack({track:e}),this._rememberPublishIntent(s,e,t);return}let o=await(await this._awaitSendTransport()).produce({track:e,...s?{}:{codecOptions:{opusStereo:!1,opusDtx:!1,opusFec:!1}},stopTracks:!1,...t?{appData:{name:t}}:{}});s?this._videoProducer=o:this._audioProducer=o,this._rememberPublishIntent(s,e,t)}_rememberPublishIntent(e,t,s){let n={track:t,...s!==void 0?{name:s}:{}};e?this._publishedVideo=n:this._publishedAudio=n}removeTrack(){let e=this._publishedAudio;if(this._publishedAudio=null,this._wtMicUplink){this._wtMicUplink.setSource(null);try{e?.track.stop()}catch{}}if(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(){let e=this._publishedVideo;if(this._publishedVideo=null,this._wtCamUplink){this._wtCamUplink.setSource(null);try{e?.track.stop()}catch{}}if(this._videoProducer){this._send({type:"stopVideo"});try{this._videoProducer.track?.stop()}catch{}this._videoProducer.close(),this._videoProducer=null}}requestDiagnostics(){this._send({type:"diagnostics"})}seekStream(e,t){this._send({type:"stream.seek",stream:e,target:t})}async _handleMessage(e){switch(e.type){case"routerRtpCapabilities":await this._onRouterCapabilities(e.rtpCapabilities);break;case"createWebRtcTransport":await this._onCreateRecvTransport(e);break;case"createSendTransport":await this._onCreateSendTransport(e);break;case"consume":await this._onConsume(e);break;case"consumerClosed":this._closeConsumer(e.consumerId);break;case"producerClosed":this._closeConsumersByProducer(e.producerId);break;case"consumerPaused":this._consumers.get(e.consumerId)?.pause();break;case"consumerResumed":this._consumers.get(e.consumerId)?.resume();break;case"iceRestarted":this._onIceRestarted(e);break;case"produced":if(this._pendingProduce){let t=this._pendingProduce;this._pendingProduce=null,clearTimeout(t.timeoutId),t.resolve(e.id)}break;case"dataProduced":{let t=e.label,s=t?this._pendingDataProduce.get(t):void 0;s&&t&&(this._pendingDataProduce.delete(t),s.resolve(e.id));break}case"consumeData":await this._onConsumeData(e);break;case"started":this._emitter.emit("started");break;case"status":this._onStatus(e);break;case"stream.seeked":this._onStreamSeeked(e);break;case"error":this._onServerError(e);break;default:this._emitter.emit("signal",e);break}}_onServerError(e){let t=typeof e.message=="string"?e.message:"signaling error",s=typeof e.code=="string"?e.code:void 0;if(/connect\(\) already called/i.test(t)){if(this._resolveConnection){this._generation++;let n=this._ws;this._ws=null;try{n?.close()}catch{}this._cleanupMedia(),this._forceResolveOnNextConnect=!0,this._renegotiate();return}this._setPhase("error",{error:{reason:t,code:"transport-consumed",kind:"transport-failed"}}),this._emitter.emit("error",new Error(t));return}if(s==="TRANSPORT_BIND_FAILED"){this._emitError(new Error(t),s);return}if(s==="PROTOCOL_VERSION_UNSUPPORTED"){this._setPhase("error",{error:{reason:t,code:s,kind:"create-failed"},reason:t}),this._emitter.emit("error",new Error(t));return}console.warn("[urun] signaling error from server:",t)}_onStreamSeeked(e){let t=typeof e.stream=="string"?e.stream:void 0;if(!t)return;let s=e.target,n=s==="live"?"live":typeof s=="number"?s:Number(s);this._emitter.emit("seeked",t,n)}_reportUnknownServerStatus(e,t,s="signaling",n){let o=`server reported unrecognized ${s==="admission"?"admission response":"session status"} status ${JSON.stringify(e)}`+(t?` (reason: ${JSON.stringify(t)})`:"")+' \u2014 this @urun-sh/core build does not know this word; refusing to render it as "provisioning". The SDK may be out of date for this server.';this._emitDiagnostic({level:"error",kind:"unknown-server-status",message:o,detail:{status:e,origin:s,...t?{reason:t}:{}}}),!this._liveReached&&(this._lastServerStatus=e,this._setPhase("unknown",{reason:e,region:n}))}_onStatus(e){let t=e.request_id??e.requestId;t&&(this._requestId=t);let s=typeof e.status=="string"?e.status:void 0,n=typeof e.reason=="string"&&e.reason?e.reason:void 0,i="region"in e?typeof e.region=="string"&&e.region.length>0?e.region:null:void 0,o=s!==void 0?Po(s):void 0;if(s!==void 0&&o?.unknown){this._reportUnknownServerStatus(s,n,"signaling",i);return}let a=o?.phase??"provisioning";if(this._liveReached&&a!=="paused"&&a!=="error"){a==="live"&&i!==void 0&&i!==this._phase.region&&this._setPhase("live",{reason:n,region:i});return}if(this._isStaleLivenessEvidence()&&a!=="live"&&a!=="paused"&&a!=="error")return;s!==void 0&&(this._lastServerStatus=s);let c=e.queue_position??e.queuePosition,l=e.queue_depth??e.queueDepth,d=typeof c=="number"&&typeof l=="number";if(a==="paused"){let u=e.reason??e.close_reason??e.closeReason??e.pause_reason??e.pauseReason,p=typeof u=="string"&&u?u:void 0,m=xo(u)?"credits_exhausted":this._pastDeadline()?"max_session_age":n??p??s??"paused";this._setPhase("paused",{reason:m,region:i??null}),this._stopMediaProbe();return}if(a==="error"){let u=n??s??"admission failed";this._setPhase("error",{error:{reason:u,code:s,kind:s==="error"?"runtime-failed":"create-failed"},reason:u,region:i});return}if(a==="queued"){this._setPhase("queued",{...d?{queue:{position:c,depth:l}}:{},reason:n,region:i});return}if(a==="waiting_for_capacity"){this._setPhase("waiting_for_capacity",{...d?{queue:{position:c,depth:l}}:{},reason:n,region:i});return}if(a==="connecting"){this._setPhase("connecting",{reason:n,region:i});return}if(a==="live"){this._setPhase("live",{reason:n,region:i});return}this._setPhase("provisioning",{reason:n,region:i})}_webRtcDialHeld=!1;_heldRouterCaps=null;holdWebRtcDial(){return this._webRtcDialHeld=!0,{proceed:e=>{if(!this._webRtcDialHeld)return;this._webRtcDialHeld=!1;let t=this._heldRouterCaps;this._heldRouterCaps=null,t&&(fe()?console.warn(`[urun-sh/core] running the deferred WebRTC dial (${e})`):console.info(`[urun-sh/core] running the deferred WebRTC dial (${e})`),this._onRouterCapabilities(t).catch(s=>{console.error("[urun-sh/core] deferred WebRTC dial failed:",s)}))},skip:e=>{fe()?console.warn(`[urun-sh/core] WebRTC dial SKIPPED (${e}) \u2014 WT-only leg, no RTCPeerConnection`):console.info(`[urun-sh/core] WebRTC dial SKIPPED (${e}) \u2014 WT-only leg, no RTCPeerConnection`)}}}async _onRouterCapabilities(e){if(this._webRtcDialHeld){this._heldRouterCaps=e;return}Bt()&&await hn();let t=pn();if(t){this._mediaUnavailableReason=t,this._mediaVerdictResolve(t);return}this._mediaVerdictResolve(null);let s=un(),n=new Fo.Device(s?{handlerName:s}: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,s=this._device.createRecvTransport({id:e.id,iceParameters:e.iceParameters,iceCandidates:t,dtlsParameters:e.dtlsParameters,...e.sctpParameters?{sctpParameters:e.sctpParameters}:{},iceServers:this._options.iceServers??Lo});this._recvIceRestartAttempts=0,this._clearRecvIceRestart();let n=this._generation;s.on("connect",({dtlsParameters:o},a,c)=>{try{this._send({type:"connectTransport",transportId:s.id,dtlsParameters:o}),a()}catch(l){c(l)}}),s.on("connectionstatechange",o=>{if(n===this._generation){if(o==="connected"){this._clearRecvIceRestart(),this._recvIceRestartAttempts=0,this._reportSelectedCandidatePair(s);return}if(!(this._intentionalDisconnect&&o==="closed")&&(o==="failed"||o==="disconnected")){if(this._tryRestartRecvIce())return;o==="failed"&&this._emitError(new Error(`media transport ${o}`),o),this._renegotiate()}}}),this._recvTransport=s;let i=this._pendingConsumeData.splice(0,this._pendingConsumeData.length);for(let o of i)this._onConsumeData(o).catch(()=>{})}async _reportSelectedCandidatePair(e){let t=++this._candidatePairRefreshSeq,s=null;if(typeof e.getStats=="function")try{s=await e.getStats()}catch{}if(this._recvTransport!==e||t!==this._candidatePairRefreshSeq)return;let n=Xl(s);if(n.localType===null&&n.remoteType===null&&n.protocol===null&&n.remoteAddress===null&&n.remotePort===null&&this._reportedCandidatePairKey!==null)return;this._selectedCandidatePair=n;let o=JSON.stringify(n);if(this._reportedCandidatePairKey===o)return;this._reportedCandidatePairKey=o;let a=Object.values(this._selectedCandidatePair).some(c=>c!==null);this._emitDiagnostic({level:a?"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>=Do?!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>=Do?!1:(this._sendIceRestartAttempts++,this._armSendIceRestartWatchdog(),this._requestIceRestart(e.id),!0)}_requestIceRestart(e){this._send({type:"restartIce",transportId:e})}_onIceRestarted(e){let t=e.transportId??e.id,s=e.iceParameters;if(!s)return;let n=!!this._recvTransport&&this._recvTransport.id===t,i=!n&&!!this._sendTransport&&this._sendTransport.id===t,o=n?this._recvTransport:i?this._sendTransport:null;o&&(Promise.resolve(o.restartIce({iceParameters:s})).catch(a=>{this._emitter.emit("error",a instanceof Error?a:new Error(String(a)))}),n&&this._recvIceRestartTimer?this._armRecvIceRestartWatchdog():i&&this._sendIceRestartTimer&&this._armSendIceRestartWatchdog())}_armRecvIceRestartWatchdog(){this._clearRecvIceRestart();let e=this._generation;this._recvIceRestartTimer=setTimeout(()=>{this._recvIceRestartTimer=null,!(e!==this._generation||this._intentionalDisconnect)&&this._recvTransport?.connectionState!=="connected"&&(this._emitError(new Error("media transport failed (ice restart timeout)"),"failed"),this._renegotiate())},Io)}_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")},Io)}_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??Lo});this._sendIceRestartAttempts=0,this._clearSendIceRestart();let s=this._generation;t.on("connect",({dtlsParameters:n},i,o)=>{try{this._send({type:"connectSendTransport",transportId:t.id,dtlsParameters:n}),i()}catch(a){o(a)}}),t.on("produce",({kind:n,rtpParameters:i,appData:o},a,c)=>{if(this._pendingProduce){c(new Error("produce already pending"));return}let l=o&&typeof o.name=="string"?o.name:void 0,d=setTimeout(()=>{let u=this._pendingProduce;if(!u||u.timeoutId!==d)return;this._pendingProduce=null;let p=new Ut(n,{stream:l,timeoutMs:qt});this._setPhase("error",{error:{reason:p.message,code:"produce-ack-timeout",kind:"produce-timeout"}}),this._emitter.emit("error",p),u.reject(p)},qt);this._pendingProduce={timeoutId:d,resolve:u=>{a({id:u})},reject:c};try{this._send(l?{type:"produce",kind:n,name:l,rtpParameters:i}:{type:"produce",kind:n,rtpParameters:i})}catch(u){this._pendingProduce?.timeoutId===d&&(this._pendingProduce=null,clearTimeout(d)),c(u)}}),t.on("producedata",({sctpStreamParameters:n,label:i,protocol:o},a,c)=>{try{i&&this._pendingDataProduce.set(i,{resolve:l=>a({id:l}),reject:c}),this._send({type:"produceData",sctpStreamParameters:n,label:i,protocol:o})}catch(l){i&&this._pendingDataProduce.delete(i),c(l)}}),t.on("connectionstatechange",n=>{if(s===this._generation){if(n==="connected"){this._clearSendIceRestart(),this._sendIceRestartAttempts=0;return}this._intentionalDisconnect&&n==="closed"||(n==="failed"||n==="disconnected")&&this._trySendIceRestart()||(n==="failed"||n==="closed")&&this._emitError(new Error(`media send transport ${n}`),n)}}),this._sendTransport=t,this._settleSendTransportWaiters(t),this._emitter.emit("audioTransportReady"),this._republishPublishedTracks()}async _republishPublishedTracks(){let e=this._publishedAudio;if(e&&e.track.readyState!=="ended"&&(!this._audioProducer||this._audioProducer.closed))try{await this.addTrack(e.track,e.name)}catch(s){console.warn("[urun] republish: mic re-produce after reconnect failed",s)}else e&&e.track.readyState==="ended"&&console.warn("[urun] republish: published mic track is ended \u2014 not republishing (device re-acquisition is the app/page-recovery pass)");let t=this._publishedVideo;if(t&&t.track.readyState!=="ended"&&(!this._videoProducer||this._videoProducer.closed))try{await this.addVideoTrack(t.track,t.name)}catch(s){console.warn("[urun] republish: camera re-produce after reconnect failed",s)}else t&&t.track.readyState==="ended"&&console.warn("[urun] republish: published camera track is ended \u2014 not republishing (device re-acquisition is the app/page-recovery pass)")}async _onConsumeData(e){if(this._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}let t=this._recvTransport;if(!t){this._pendingConsumeData.push(e);return}let s=e.label,n=this._streamNameFromLabel(s);if(!n){console.error(`[urun] consumeData pushed with an unparseable label ${JSON.stringify(s??null)} \u2014 no DataConsumer will be attached and no ack sent; the server egress will strand envelopes for this stream (expected label form: "stream:<name>")`),this._emitter.emit("error",new Error(`[urun] consumeData pushed with unparseable label ${JSON.stringify(s??null)}`));return}let i=this._generation,o;try{o=await t.consumeData({id:e.id,dataProducerId:e.dataProducerId,sctpStreamParameters:e.sctpStreamParameters,label:s,protocol:e.protocol})}catch(u){console.error(`[urun] consumeData for named stream "${n}" failed \u2014 no channel will open and no dataConsumerReady ack will be sent; the server egress will strand envelopes on this lane:`,u),this._emitter.emit("error",u instanceof Error?u:new Error(String(u)));return}if(i!==this._generation||this._recvTransport!==t||t.closed||this._intentionalDisconnect){try{o.close()}catch{}return}this._dataConsumers.set(n,o);let a=new Yt;o.on("message",u=>{try{let p=typeof u=="string"?new TextEncoder().encode(u):new Uint8Array(u),m=a.feed(p);m!==void 0&&this._dispatchStreamData(n,m)}catch(p){this._emitter.emit("error",p instanceof Error?p:new Error(String(p)))}});let c=!1,l=setTimeout(()=>{if(c||o.closed||o.readyState==="open")return;let u=new Error(`[urun] data channel for named stream "${n}" did not open within 10s (consumeData resolved at creation; the SCTP association never established) \u2014 no dataConsumerReady ack was sent and the server egress will strand envelopes on this lane`);console.error(u.message),this._emitter.emit("error",u)},1e4),d=()=>{c||o.closed||(c=!0,clearTimeout(l),this._send({type:"dataConsumerReady",id:e.id}))};o.readyState==="open"?d():o.on("open",d),o.once?.("close",()=>clearTimeout(l))}async _onConsume(e){let t=this._recvTransport;if(!t)return;let s=this._generation,n=await t.consume({id:e.id,producerId:e.producerId,kind:e.kind,rtpParameters:e.rtpParameters});if(s!==this._generation||this._recvTransport!==t||t.closed||this._intentionalDisconnect){try{n.close()}catch{}return}this._consumers.set(n.id,n),this._tracks.set(n.track.id,n.track),this._capJitterBuffer(n,n.kind==="video"?"video":"audio");let i=e.streamName??e.label;i&&this._tracksByName.set(i,n.track),n.track.addEventListener?.("unmute",()=>{s!==this._generation||this._intentionalDisconnect||this._phase.name==="error"&&this._isParkedPhase()||this._isStaleLivenessEvidence()||this._liveReached||this._setPhase("live")},{once:!0}),this._emitter.emit("track",n.track);let o=n.id;n.track.addEventListener("ended",()=>{s!==this._generation||this._intentionalDisconnect||this._closeConsumer(o)},{once:!0}),this._send({type:"resumeConsumer",consumerId:n.id}),this._startMediaProbe(),this._startStatsSampler()}get audioPlayoutOptions(){return this._options.audioPlayout}get wtMicUplinkSeam(){return{onUplink:e=>{this._wtMicUplink=e;let t=this._publishedAudio;if(this._audioProducer&&!this._audioProducer.closed){console.warn("[urun-sh/core] WT mic uplink engaged \u2014 moving the mic from WebRTC produce to the QUIC lane"),this._send({type:"stopAudio"});try{this._audioProducer.close()}catch{}this._audioProducer=null}t&&t.track.readyState!=="ended"&&e.setSource(t.track)},onUplinkLost:e=>{if(!this._wtMicUplink)return;this._wtMicUplink=null;let t=this._publishedAudio;if(!(!t||t.track.readyState==="ended")){if(console.warn(`[urun-sh/core] WT mic uplink lost (${e}) \u2014 republishing the mic over WebRTC`),!this._sendTransport){this._emitDiagnostic({level:"error",kind:"wt-mic-uplink-dead",message:`WT mic uplink lost (${e}) with NO WebRTC send transport \u2014 the republish above cannot run. If a reconnect is in flight this self-heals; on a WT-only leg (no RTCPeerConnection was dialled) the mic is now DEAD until the WT uplink re-engages.`,detail:{reason:e}});return}this._publishTrack(t.track,t.name).catch(s=>{console.error("[urun-sh/core] mic republish over WebRTC failed:",s)})}}}}get wtCamUplinkSeam(){return{onUplink:e=>{this._wtCamUplink=e;let t=this._publishedVideo;if(this._videoProducer&&!this._videoProducer.closed){console.warn("[urun-sh/core] WT video uplink engaged \u2014 moving the camera from WebRTC produce to the QUIC lane"),this._send({type:"stopVideo"});try{this._videoProducer.close()}catch{}this._videoProducer=null}t&&t.track.readyState!=="ended"&&e.setSource(t.track)},onUplinkLost:e=>{if(!this._wtCamUplink)return;this._wtCamUplink=null;let t=this._publishedVideo;if(!(!t||t.track.readyState==="ended")){if(console.warn(`[urun-sh/core] WT video uplink lost (${e}) \u2014 republishing the camera over WebRTC`),!this._sendTransport){this._emitDiagnostic({level:"error",kind:"wt-cam-uplink-dead",message:`WT camera uplink lost (${e}) with NO WebRTC send transport \u2014 the republish above cannot run. If a reconnect is in flight this self-heals; on a WT-only leg (no RTCPeerConnection was dialled) the camera is now DEAD until the WT uplink re-engages.`,detail:{reason:e}});return}this._publishTrack(t.track,t.name).catch(s=>{console.error("[urun-sh/core] camera republish over WebRTC failed:",s)})}}}}_jitterBufferTargetMs(e){if(e==="audio"){let t=this._options.audioPlayout?.jitterBufferTargetMs;return t===void 0?Fl:t}return this._options.videoPlayout?.jitterBufferTargetMs}_capJitterBuffer(e,t){let s=this._jitterBufferTargetMs(t);if(s===void 0)return;let n=t==="video"?"videoPlayout":"audioPlayout",i={mediaKind:t,transportId:this._recvTransport?.id??null};if(!Number.isFinite(s)){this._emitDiagnostic({level:"warning",kind:`${t}-jitter-buffer-invalid`,message:`${n}.jitterBufferTargetMs must be a finite number of milliseconds; got ${String(s)}. No jitter-buffer cap applied.`,detail:{consumerId:e.id,targetMs:String(s),...i}});return}if(s<=0)return;if(s>Co){this._emitDiagnostic({level:"warning",kind:`${t}-jitter-buffer-invalid`,message:`${n}.jitterBufferTargetMs must be within the W3C jitterBufferTarget range 0-${Co}ms; got ${s}. No jitter-buffer cap applied.`,detail:{consumerId:e.id,targetMs:s,...i}});return}let o=e.rtpReceiver;if(!o){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:s,reason:"no-receiver",...i}});return}let a=[];if("jitterBufferTarget"in o&&(o.jitterBufferTarget=s,a.push("jitterBufferTarget")),"playoutDelayHint"in o&&(o.playoutDelayHint=s/1e3,a.push("playoutDelayHint")),a.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:s,...i}});return}this._emitDiagnostic({level:"debug",kind:`${t}-jitter-buffer-capped`,message:`${t==="audio"?"Audio":"Video"} receiver jitter buffer capped at ${s}ms.`,detail:{consumerId:e.id,targetMs:s,applied:a,...i}})}_closeConsumer(e){let t=this._consumers.get(e);if(!t)return;this._consumers.delete(e);let s=t.track;try{t.close()}catch{}if(s){this._tracks.delete(s.id);for(let[n,i]of this._tracksByName)i===s&&this._tracksByName.delete(n)}}_closeConsumersByProducer(e){for(let[t,s]of this._consumers)s.producerId===e&&this._closeConsumer(t)}_mediaPollMs(){let e=this._options.mediaLiveness?.pollMs;return e===void 0?Ol:e}_firstFrameWindowMs(){let e=this._options.mediaLiveness?.stallTimeoutMs;return e===void 0?Nl: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._phase.name==="error"&&this._isParkedPhase()||this._isStaleLivenessEvidence()||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?jl: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._isParkedPhase()||this._statsSampleInFlight||(this._statsSampleInFlight=!0,this._sampleSessionStats(t).catch(s=>{try{this._emitter.emit("error",s instanceof Error?s:new Error(String(s)))}catch{}}).finally(()=>{this._statsSampleInFlight=!1}))},e)}_stopStatsSampler(){this._statsTimer&&(clearInterval(this._statsTimer),this._statsTimer=null),this._statsSampleInFlight=!1}_lanePairKey(e){let t=e.track,s=t?this._streamNameOf(t):void 0;if(s===void 0)return null;let n=ko(s);return n===void 0?s:s.slice(0,s.length-Or.length-n.length)}async _sampleSessionStats(e){if(this._consumers.size===0)return;let t=Array.from(this._consumers.values()),s=await Promise.all(t.map(async p=>({consumerId:p.id,kind:p.kind==="video"?"video":"audio",pairKey:this._lanePairKey(p),sample:await jo(p)})));if(e!==this._generation||this._intentionalDisconnect||this._isParkedPhase())return;let n=s.filter(p=>p.pairKey===null),i=s.filter(p=>p.pairKey!==null),o=null,a=s;if(i.length>0){let p=new Map;for(let h of i){let g=h.pairKey,v=p.get(g);v?v.push(h):p.set(g,[h])}let m=-1,f=-1;for(let[h,g]of p){let v=new Set(g.map(x=>x.kind)).size>=2?1:0,_=g.reduce((x,S)=>x+S.sample.total,0);(v>m||v===m&&_>f)&&(m=v,f=_,o=h,a=[...g,...n])}}let c=p=>{let m=null,f=-1;for(let{consumerId:h,kind:g,sample:v}of a)g===p&&v.total>f&&(f=v.total,m={consumerId:h,...v});return m},l=c("audio"),d=c("video"),u=d?.estimatedPlayoutTimestamp!=null&&l?.estimatedPlayoutTimestamp!=null?d.estimatedPlayoutTimestamp-l.estimatedPlayoutTimestamp:null;this._emitter.emit("stats",{timestamp:Date.now(),stream:o,avSyncMs:u,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()),s=await Promise.all(t.map(async([a,c])=>[a,await jo(c)]));if(e!==this._generation||this._intentionalDisconnect||this._phase.name==="error"&&this._isParkedPhase()||this._isStaleLivenessEvidence())return;for(let a of this._joinProbes.keys())this._consumers.has(a)||this._joinProbes.delete(a);let n=Date.now();!this._liveReached&&s.some(([,a])=>a.total>0)&&this._setPhase("live");let i=null,o=!1;for(let[a,c]of s){if(c.total<=0){o=!0;continue}let l=this._joinProbes.get(a);if(l||(l={firstBytesAt:n,startSample:c,settled:!1},this._joinProbes.set(a,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:a,probe:l,sample:c};continue}o=!0}}if(i&&!this._decodeDeathHandled){this._decodeDeathHandled=!0;let a=this._firstFrameWindowMs(),c=Yl(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 ${a/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:a,inboundTotal:i.sample.total,framesDecoded:i.sample.framesDecoded,...Jl(i.sample),...c,likelyCause:c.lossPct!==null&&c.lossPct>=5?"network-packet-loss":null,...this._selectedCandidatePair}}),this._renegotiate();return}!o&&!i&&this._stopMediaProbe()}_renegotiate(){this._intentionalDisconnect||this._isExplicitEndPhase()||this._reconnectTimer||(this._stopMediaProbe(),this._stopStatsSampler(),this._setState("renegotiating"),this._attemptReconnect())}recover(){if(this._intentionalDisconnect||this._isExplicitEndPhase()||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._isExplicitEndPhase()||this._reconnectTimer)return;this._reconnectAttempts>=bo&&(this._reconnectExhaustedWarned||(this._reconnectExhaustedWarned=!0,this._emitDiagnostic({level:"warning",kind:"signaling-reconnect-forever",message:`signaling reconnect budget spent (${bo} attempts) \u2014 retrying forever with capped backoff while the session lives`})));let s=t?0:yo[Math.min(this._reconnectAttempts,yo.length-1)];this._reconnectAttempts++,this._state!=="renegotiating"&&this._setState("reconnecting"),this._reconnectTimer=setTimeout(async()=>{this._reconnectTimer=null,this._replaceCurrentLegForReconnect();try{await this.connect(e??this._lastStartOptions)}catch(n){if(n instanceof Error&&n.message==="TransportSession: connect cancelled")return;this._attemptReconnect(e)}},s)}_connectUrls(){let e=[],t=s=>{if(!s)return;let n=Mo(s)!==void 0,i=this._sessionId&&!n?`${s}${s.includes("?")?"&":"?"}sessionId=${encodeURIComponent(this._sessionId)}`:s;e.includes(i)||e.push(i)};t(this._options.url);for(let s of this._options.fallbackUrls??[])t(s);return e}_connectOnce(e,t,s){return new Promise((n,i)=>{let o=!1,a=!1,c=null,l=new WebSocket(e);this._ws=l;let d=()=>this._ws!==l||t!==this._generation,u=m=>{a||(a=!0,c&&clearTimeout(c),this._cancelPendingDial===p&&(this._cancelPendingDial=null),i(m))},p=m=>{try{l.close()}catch{}u(m)};this._cancelPendingDial=p,c=setTimeout(()=>{try{l.close()}catch{}u(new Error("TransportSession: connect timed out"))},Ml),l.onopen=()=>{if(!a){if(d()){try{l.close()}catch{}u(new Error("TransportSession: connect superseded during dial"));return}o=!0,c&&clearTimeout(c),this._connectedUrl=e,this._multiplexer=new $t(l),l.send(JSON.stringify(this._startMessage(s))),this._scheduleReconnectBudgetReset(),this._selfEpochAdoptUntil=Date.now()+Al,this._setState("connected"),this._liveReached||this._setPhase("connecting"),this._emitter.emit("connected"),a=!0,this._cancelPendingDial===p&&(this._cancelPendingDial=null),n()}},l.onerror=()=>{o||u(new Error("WebSocket connection error"))},l.onclose=()=>{if(!o){u(new Error("WebSocket closed before connecting"));return}if(!d()&&(this._clearReconnectBudgetReset(),c&&clearTimeout(c),this._setState("disconnected"),!this._intentionalDisconnect)){if(this._pastDeadline()&&this._phase.name!=="paused"){this._setPhase("paused",{reason:"max_session_age"}),this._emitter.emit("disconnected");return}this._emitter.emit("disconnected"),!this._isExplicitEndPhase()&&this._attemptReconnect(s)}},l.onmessage=m=>{if(!(this._ws!==l||t!==this._generation)&&typeof m.data=="string")try{this._handleMessage(JSON.parse(m.data)).catch(f=>{this._emitter.emit("error",f instanceof Error?f:new Error(String(f)))})}catch(f){this._emitter.emit("error",f instanceof Error?f:new Error(String(f)))}}})}_startMessage(e){let t={type:"start",version:zl,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,this._reconnectExhaustedWarned=!1},Bl))}_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._pendingConsumeData=[],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){return!this._ws||this._ws.readyState!==WebSocket.OPEN?!1:(this._ws.send(JSON.stringify(e)),!0)}_setState(e){this._state!==e&&(this._state=e,this._emitter.emit("stateChange",e))}_isParkedPhase(){return this._phase.name==="paused"?!0:this._phase.name!=="error"?!1:this._phase.error?.kind!=="transport-failed"}_isExplicitEndPhase(){if(this._phase.name==="paused"&&!this._isComputeReleasedPark())return!1;if(this._phase.name!=="error")return this._isComputeReleasedPark();let e=this._phase.error?.kind;return e!==void 0&&e!=="transport-failed"}_isComputeReleasedPark(){if(this._phase.name!=="paused")return!1;let e=this._phase.reason;return e==="closed"||e==="released"||e==="releasing"||e==="reaped"||e==="expired"||e==="superseded"||e==="cancelled"||e==="canceled"||e==="max_session_age"}_setPhase(e,t){e==="live"?this._liveReached=!0:(e==="paused"||e==="error")&&(this._liveReached=!1);let s={name:e};t?.queue&&(s.queue=t.queue),t?.runtime&&(s.runtime=t.runtime),t?.reason&&(s.reason=t.reason),s.region=t?.region!==void 0?t.region:this._phase.region,mn(e)?(this._wakingSince??=Date.now(),s.wakingSince=this._wakingSince):this._wakingSince=void 0,this._requestId&&(s.requestId=this._requestId),this._sessionId&&(s.sessionId=this._sessionId),this._endsAt!==null&&(s.endsAt=this._endsAt),t?.error&&(s.error=t.error),!Hl(this._phase,s)&&(this._phase=s,this._pausedIncarnation=e==="paused"?this._currentEpoch:null,this._isParkedPhase()&&(this._stopMediaProbe(),this._stopStatsSampler(),this._clearRecvIceRestart(),this._clearSendIceRestart()),this._emitter.emit("phase",s))}reportAdmission(e){e.requestId&&(this._requestId=e.requestId),this._lastServerStatus=e.status;let t=Po(e.status);if(t.unknown){this._reportUnknownServerStatus(e.status,e.reason,"admission",e.region);return}if(this._liveReached)return;e.sessionId&&!this._sessionId&&(this._sessionId=e.sessionId);let{runtime:s,queue:n}=e,i=e.decisionReason==="provisioning_refused"?e.refusalMessage??e.decisionReason:e.reason,o={runtime:s,queue:n,...i?{reason:i}:{},...e.region!==void 0?{region:e.region}:{}};if(Vl(e.status)){if(s?.state==="unavailable"){this._setPhase("unavailable",o);return}if(s?.state==="starting"){this._setPhase("provisioning",o);return}if(s?.state==="busy"||e.status==="queued"){this._setPhase("queued",o);return}this._setPhase("provisioning",o);return}this._setPhase(t.phase,t.phase==="paused"?{...o,region:o.region??null}:o)}_emitError(e,t){this._setPhase("error",{error:{reason:e.message,code:t,kind:"transport-failed"}}),this._emitter.emit("error",e)}reportAllocationFailure(e,t,s,n){s==="insufficient_credits"?this._setPhase("error",{error:{reason:e.message,code:s,kind:"insufficient-credits",httpStatus:t}}):this._setPhase("error",{error:{reason:e.message,code:s??"allocation-failed",kind:"create-failed",httpStatus:t,retryAfterSeconds:n}}),this._emitter.emit("error",e)}};function Oo(r){return new Promise(e=>setTimeout(e,r))}function Gl(){return wo()}var $o=["packetsReceived","packetsLost","nackCount","pliCount","firCount","keyFramesDecoded","framesReceived","framesDropped","retransmittedPacketsReceived","retransmittedBytesReceived","jitterBufferDelay","jitterBufferEmittedCount","estimatedPlayoutTimestamp","jitterBufferTargetDelay","jitterBufferMinimumDelay","concealedSamples","insertedSamplesForDeceleration"],Kl=new Set(["estimatedPlayoutTimestamp"]);function Ql(){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 Jl(r){return Object.fromEntries($o.map(e=>[e,r[e]]))}function No(r,e){return r===null||e===null||e<r?null:e-r}function Yl(r,e){let t=r.packetsLost!==null&&e.packetsLost!==null?e.packetsLost-r.packetsLost:null,s=No(r.packetsReceived,e.packetsReceived),n=No(r.nackCount,e.nackCount),i=t===null?null:Math.max(0,t),o=i!==null&&s!==null?i+s:0;return{packetsLostWindow:t,packetsReceivedWindow:s,nackCountWindow:n,jitterSec:e.jitter,lossPct:o>0&&i!==null?i/o*100:null}}function Uo(){return{localType:null,remoteType:null,protocol:null,remoteAddress:null,remotePort:null}}function Xl(r){let e=new Map;qo(r,a=>{let c=typeof a.id=="string"?a.id:null;c&&e.set(c,a)});let t=Array.from(e.values()).find(a=>a.type==="transport"),s=typeof t?.selectedCandidatePairId=="string"?t.selectedCandidatePairId:null,n=(s?e.get(s):void 0)??Array.from(e.values()).find(a=>a.type==="candidate-pair"&&a.selected===!0)??Array.from(e.values()).find(a=>a.type==="candidate-pair"&&a.nominated===!0);if(!n)return Uo();let i=typeof n.localCandidateId=="string"?e.get(n.localCandidateId):void 0,o=typeof n.remoteCandidateId=="string"?e.get(n.remoteCandidateId):void 0;return{localType:typeof i?.candidateType=="string"?i.candidateType:null,remoteType:typeof o?.candidateType=="string"?o.candidateType:null,protocol:typeof i?.protocol=="string"?i.protocol:typeof o?.protocol=="string"?o.protocol:null,remoteAddress:typeof o?.address=="string"?o.address:typeof o?.ip=="string"?o.ip:null,remotePort:typeof o?.port=="number"?o.port:null}}function qo(r,e){let t=s=>{s&&typeof s=="object"&&e(s)};if(r instanceof Map)for(let[s,n]of r.entries()){if(!n||typeof n!="object")continue;let i=n;e(typeof i.id=="string"?i:{...i,id:s})}else(Array.isArray(r)||r&&typeof r.forEach=="function")&&r.forEach(t)}async function jo(r){let e=Ql();if(typeof r.getStats!="function")return e;let t;try{t=await r.getStats()}catch{return e}return qo(t,n=>{if(n.type==="inbound-rtp"){let i=typeof n.bytesReceived=="number"?n.bytesReceived:0,o=typeof n.packetsReceived=="number"?n.packetsReceived:0;e.total+=i+o,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 a of $o)typeof n[a]=="number"&&(e[a]=Kl.has(a)?e[a]===null?n[a]:Math.max(e[a],n[a]):(e[a]??0)+n[a])}}),e}function Zl(r){if(!r||typeof r!="object")return;let e=r.epoch,t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:void 0}import{WebsocketProvider as eu}from"y-websocket";import{Awareness as Wo}from"y-protocols/awareness";var tu=1;function Qp(r){let e=new URL(r);return`${e.protocol}//${e.host}/doc`}var ru=2500,su=3e4,nu=1e4,iu=3;function Jp(r){let e=r.WebSocketPolyfill??globalThis.WebSocket;if(!e)throw new Error("[urun] no WebSocket implementation available for the yjs doc provider (browser global missing and no WebSocketPolyfill passed)");return(t,s,n)=>{let i=`${r.sessionId}/${t}`,o=typeof r.token=="function"?r.token:null,a=typeof r.token=="string"?r.token:void 0,c=r.maxBackoffTimeMs??ru,l=r.dialTimeoutMs??su,d=new eu(r.serverUrl,i,s,{awareness:n,params:{dsv:String(tu),...a?{token:a}:{}},WebSocketPolyfill:e,disableBc:!0,maxBackoffTime:c,resyncInterval:nu,connect:o===null}),u=!1,p,m=!1,f=I=>{m||(m=!0,console.error(`[urun] doc token refresh failed for room ${i} (redialing with previous token):`,I))},h=()=>{if(o){if(p)return p;try{let I=o();if(typeof I=="string"){d.params.token=I,m=!1;return}if(I&&typeof I.then=="function"){let J=I.then(Ue=>{typeof Ue=="string"&&(d.params.token=Ue,m=!1)},Ue=>{f(Ue)}).finally(()=>{p===J&&(p=void 0)});return p=J,J}}catch(I){f(I)}}},g=r.resolveServerUrl,v=0,_=!1,x=I=>{if(typeof I!="string"||I==="")return;let oe=I.replace(/\/+$/,"");oe!==d.serverUrl&&(d.serverUrl=oe,_=!1)},S=()=>{if(!g)return;let I=++v,oe=J=>{_||(_=!0,console.error(`[urun] doc endpoint re-resolve failed for room ${i} (redialing previous host):`,J))};try{let J=g();if(J&&typeof J.then=="function")return J.then(Ue=>{I===v&&x(Ue)},oe);x(J)}catch(J){oe(J)}},w={connected:!1,consecutiveFailures:0,lastCloseCode:null,lastCloseReason:null},D=new Set,F=!1,z=()=>{let I={...w};for(let oe of[...D])oe(I)},N=null,q=()=>{N!==null&&(clearTimeout(N),N=null)},mt=()=>{q(),N=setTimeout(()=>{if(N=null,!u&&d.wsconnecting&&d.ws)try{d.ws.close()}catch{}},l)},gt=null,Ft=()=>{gt!==null&&(clearTimeout(gt),gt=null)},Qs=()=>{Ft(),gt=setTimeout(()=>{if(gt=null,!u&&d.shouldConnect&&!d.wsconnected&&!d.wsconnecting&&d.ws===null)try{d.connect()}catch(I){F||(F=!0,console.error(`[urun] doc connection redial threw for room ${i} (still retrying):`,I)),Qs()}},c+500)},Js=({status:I})=>{if(I==="connecting"){Ft(),mt();return}if(I==="connected"){q(),Ft(),w={...w,connected:!0},z();return}w.connected&&(w={...w,connected:!1},z())},Ys=I=>{I&&(F&&(fe()?console.warn(`[urun] doc connection recovered for room ${i}`):console.info(`[urun] doc connection recovered for room ${i}`),F=!1),w.consecutiveFailures!==0&&(w={...w,consecutiveFailures:0},z()))},Xs=I=>{q(),w={connected:!1,consecutiveFailures:w.consecutiveFailures+1,lastCloseCode:I?I.code:null,lastCloseReason:I&&I.reason?I.reason:null},!F&&w.consecutiveFailures>=iu&&(F=!0,console.error(`[urun] doc connection failing for room ${i}: ${w.consecutiveFailures} consecutive failures (last close ${w.lastCloseCode===null?"by provider liveness reap":`code ${w.lastCloseCode}`}${w.lastCloseReason?`, reason "${w.lastCloseReason}"`:""}). Still retrying \u2014 the doc provider never gives up.`)),z(),h(),S(),Qs()};d.on("status",Js),d.on("sync",Ys),d.on("connection-close",Xs),d.wsconnecting?mt():d.wsconnected&&(w={...w,connected:!0});let jr=!1;return o!==null&&h(),jr||d.connect(),{get awareness(){return d.awareness},get synced(){return d.synced},onSync(I){let oe=J=>I(J);return d.on("sync",oe),()=>d.off("sync",oe)},onConnectionState(I){return D.add(I),I({...w}),()=>D.delete(I)},ensureConnected(){jr=!1,d.wsconnected||d.connect()},disconnect(){jr=!0,d.disconnect()},destroy(){u=!0,q(),Ft(),d.off("status",Js),d.off("sync",Ys),d.off("connection-close",Xs),D.clear(),d.destroy()}}}}var Hs=class{constructor(e,t,s){this._name=e;this._doc=t;this.awareness=s}_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;_suspended=!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 s of[...this._syncHandlers])s(t)}),this._inner.onConnectionState)this._innerStateUnsub=this._inner.onConnectionState(t=>{this._lastState=t;for(let s of[...this._stateHandlers])s(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._suspended&&this._inner.disconnect?.(),this._inner.synced)for(let t of[...this._syncHandlers])t(!0)}}ensureConnected(){this._suspended=!1,this._inner?.ensureConnected?.()}get disconnect(){return this._inner?.disconnect?()=>{this._suspended=!0,this._inner.disconnect()}:void 0}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()}},Bo=class{_target=null;_bridges=[];connect=(e,t,s)=>{let n=new Hs(e,t,s);return this._bridges.push(n),this._target&&n.attach(this._target),n};get connected(){return this._target!==null}setTarget(e){if(this._target!==e){this._target=e,this._bridges=this._bridges.filter(t=>!t.destroyed);for(let t of this._bridges)t.attach(e)}}};import*as Nt from"yjs";function jt(r){if(r===null||typeof r!="object"||Array.isArray(r))return!1;let e=Object.getPrototypeOf(r);return e===Object.prototype||e===null}var Nr="$bytes";function ou(r){return r instanceof Uint8Array||r instanceof ArrayBuffer}function au(r){if(!jt(r))return!1;let e=Object.keys(r);return e.length===1&&e[0]===Nr&&typeof r[Nr]=="string"}function cu(r){return r instanceof ArrayBuffer?new Uint8Array(r):r}function du(r){if(typeof Buffer<"u")return Buffer.from(r).toString("base64");let e="";for(let t=0;t<r.length;t++)e+=String.fromCharCode(r[t]);return btoa(e)}function lu(r){if(typeof Buffer<"u")return new Uint8Array(Buffer.from(r,"base64"));let e=atob(r),t=new Uint8Array(e.length);for(let s=0;s<e.length;s++)t[s]=e.charCodeAt(s);return t}function Vs(r){if(ou(r))return{[Nr]:du(cu(r))};if(Array.isArray(r))return r.map(Vs);if(jt(r)){let e={};for(let[t,s]of Object.entries(r))e[t]=Vs(s);return e}return r}function Ot(r){if(au(r))return lu(r[Nr]);if(Array.isArray(r))return r.map(Ot);if(jt(r)){let e={};for(let[t,s]of Object.entries(r))e[t]=Ot(s);return e}return r}var Ho=Symbol("urun:doc:path-absent");function uu(r,e){let t=e.split("."),s=r;for(let n of t){if(s===null||typeof s!="object"||!(n in s))return Ho;s=s[n]}return s}function pu(r,e){return r===e?!0:JSON.stringify(r)===JSON.stringify(e)}function Gs(r,e){for(let[t,s]of Object.entries(e))if(jt(s)){let n=r.get(t);if(!(n instanceof Nt.Map)){let i=n;n=new Nt.Map,r.set(t,n),jt(i)&&Gs(n,i)}Gs(n,s)}else{if(pu(r.get(t),s))continue;r.set(t,s)}}var hu=Symbol("urun:doc:local"),zo=class{_doc=new Nt.Doc;_root=this._doc.getMap("session");_awareness=new Wo(this._doc);_listeners=new Set;_key;_sessionId;_connection=null;_connUnsub=null;_synced;_syncWaiters=new Set;_texts=new Map;_observer=()=>this.notify();constructor(e,t,s){this._key=e,this._sessionId=t,this._root.observeDeep(this._observer),s?(this._connection=s(e,this._doc,this._awareness),this._synced=this._connection.synced,this._connUnsub=this._connection.onSync(n=>{n&&this._markSynced()}),this._synced&&this._markSynced()):this._synced=!0}get awareness(){return this._awareness}setSessionId(e){this._sessionId=e}get synced(){return this._synced}ensureConnected(){this._connection?.ensureConnected?.()}reconnect(){this.ensureConnected()}disconnect(){let e=this._connection;if(!e?.disconnect)throw new Error(`[urun-sh/core] doc('${this._key}').disconnect(): no disconnect-capable connection to sever (a local-only doc, or a connector with no live socket) \u2014 there is nothing to disconnect`);e.disconnect()}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=Vs(e),this.applyPatch(e)}get(e,t){let s=this.snapshot();if(!e)return Ot(s);let n=uu(s,e);return n===Ho?t:Ot(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 Ks(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(()=>{Gs(this._root,e)},hu)}snapshot(){return this._root.toJSON()}notify(){let e=Ot(this.snapshot());for(let t of this._listeners)t(e)}},Ks=class{constructor(e){this._ytext=e;this._observer=t=>{for(let s of t.delta)if(typeof s.insert=="string"&&s.insert.length>0){let n=s.insert;for(let i of this._delta)i(n)}},this._ytext.observe(this._observer)}_ytext;_delta=new Set;_observer;append(e){e.length!==0&&this._ytext.insert(this._ytext.length,e)}toString(){return this._ytext.toString()}get length(){return this._ytext.length}on(e,t){return this._delta.add(t),()=>this._delta.delete(t)}dispose(){this._ytext.unobserve(this._observer),this._delta.clear()}};function eh(r){return{get clientId(){return r.clientID},set(e){r.setLocalState(e)},setField(e,t){r.setLocalStateField(e,t)},getLocal(){return r.getLocalState()??null},getStates(){return r.getStates()},on(e,t){let s=()=>t(r.getStates());return r.on("change",s),s(),()=>r.off("change",s)}}}export{$t as a,tn as b,rn as c,ae as d,De as e,qe as f,sn as g,nn as h,on as i,qt as j,Ut as k,an as l,cn as m,Fr as n,ke as o,gu as p,_t as q,B as r,Bt as s,un as t,pn as u,hn as v,mn as w,bu as x,ra as y,fn as z,Su as A,Ru as B,$r as C,zt as D,Be as E,Ht as F,Ur as G,Y as H,zr as I,Du as J,Iu as K,aa as L,Lu as M,Mu as N,Au as O,Ou as P,Nu as Q,ju as R,Ia as S,wo as T,Kr as U,Qr as V,$u as W,Pn as X,Uu as Y,Wp as Z,Or as _,ko as $,zp as aa,zl as ba,Ao as ca,tu as da,Qp as ea,Jp as fa,Bo as ga,zo as ha,eh as ia};
|
|
3
|
+
`}});var Re=P(ve=>{"use strict";var Ne=Ei(),od=xi(),cd=hr();ve.grammar=cd;ve.write=od;ve.parse=Ne.parse;ve.parseParams=Ne.parseParams;ve.parseFmtpConfig=Ne.parseFmtpConfig;ve.parsePayloads=Ne.parsePayloads;ve.parseRemoteCandidates=Ne.parseRemoteCandidates;ve.parseImageAttributes=Ne.parseImageAttributes;ve.parseSimulcastStreamList=Ne.parseSimulcastStreamList});var je=P(ws=>{"use strict";Object.defineProperty(ws,"__esModule",{value:!0});ws.parse=ld;var dd=new RegExp("^[LS]([1-9]\\d{0,1})T([1-9]\\d{0,1})");function ld(r){let e=dd.exec(r??"");return e?{spatialLayers:Number(e[1]),temporalLayers:Number(e[2])}:{spatialLayers:1,temporalLayers:1}}});var Li=P(Pe=>{"use strict";Object.defineProperty(Pe,"__esModule",{value:!0});Pe.OfferMediaSection=Pe.AnswerMediaSection=Pe.MediaSection=void 0;var ud=Re(),Di=Me(),St=class{_mediaObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:s}){if(this._mediaObject={type:"",port:0,protocol:"",payloads:"",rtp:[],fmtp:[]},e&&this.setIceParameters(e),t){this._mediaObject.candidates=[];for(let n of t){let i={foundation:n.foundation,component:1,ip:n.address??n.ip,port:n.port,priority:n.priority,transport:n.protocol,type:n.type};n.tcpType&&(i.tcptype=n.tcpType),this._mediaObject.candidates.push(i)}this._mediaObject.endOfCandidates="end-of-candidates",this._mediaObject.iceOptions="renomination"}s&&this.setDtlsRole(s.role)}get mid(){return String(this._mediaObject.mid)}get closed(){return this._mediaObject.port===0}getObject(){return this._mediaObject}setIceParameters(e){this._mediaObject.iceUfrag=e.usernameFragment,this._mediaObject.icePwd=e.password}pause(){this._mediaObject.direction="inactive"}disable(){this.pause()}close(){this.disable(),this._mediaObject.port=0,delete this._mediaObject.candidates,delete this._mediaObject.endOfCandidates,delete this._mediaObject.iceUfrag,delete this._mediaObject.icePwd,delete this._mediaObject.iceOptions,this._mediaObject.rtp=[],this._mediaObject.fmtp=[],delete this._mediaObject.rtcp,delete this._mediaObject.rtcpFb,delete this._mediaObject.ssrcs,delete this._mediaObject.ssrcGroups,delete this._mediaObject.simulcast,delete this._mediaObject.simulcast_03,delete this._mediaObject.rids,delete this._mediaObject.extmapAllowMixed}};Pe.MediaSection=St;var ys=class extends St{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:s,sctpParameters:n,plainRtpParameters:i,offerMediaObject:a,offerRtpParameters:o,answerRtpParameters:c,codecOptions:l}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:s}),this._mediaObject.mid=String(a.mid),this._mediaObject.type=a.type,this._mediaObject.protocol=a.protocol,i?(this._mediaObject.connection={ip:i.ip,version:i.ipVersion},this._mediaObject.port=i.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},this._mediaObject.port=7),a.type){case"audio":case"video":{this._mediaObject.direction="recvonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[];for(let d of c.codecs){let u={payload:d.payloadType,codec:Ii(d),rate:d.clockRate};d.channels>1&&(u.encoding=d.channels),this._mediaObject.rtp.push(u);let p=Di.clone(d.parameters)??{},m=Di.clone(d.rtcpFeedback)??[];if(l){let{opusStereo:h,opusFec:g,opusDtx:w,opusMaxPlaybackRate:R,opusMaxAverageBitrate:x,opusPtime:_,opusNack:v,videoGoogleStartBitrate:D,videoGoogleMaxBitrate:F,videoGoogleMinBitrate:z}=l,N=o.codecs.find(q=>q.payloadType===d.payloadType);switch(d.mimeType.toLowerCase()){case"audio/opus":case"audio/multiopus":{h!==void 0&&(N.parameters["sprop-stereo"]=h?1:0,p.stereo=h?1:0),g!==void 0&&(N.parameters.useinbandfec=g?1:0,p.useinbandfec=g?1:0),w!==void 0&&(N.parameters.usedtx=w?1:0,p.usedtx=w?1:0),R!==void 0&&(p.maxplaybackrate=R),x!==void 0&&(p.maxaveragebitrate=x),_!==void 0&&(N.parameters.ptime=_,p.ptime=_),v||(N.rtcpFeedback=N.rtcpFeedback.filter(q=>q.type!=="nack"||q.parameter),m=m.filter(q=>q.type!=="nack"||q.parameter));break}case"video/vp8":case"video/vp9":case"video/h264":case"video/h265":case"video/av1":{D!==void 0&&(p["x-google-start-bitrate"]=D),F!==void 0&&(p["x-google-max-bitrate"]=F),z!==void 0&&(p["x-google-min-bitrate"]=z);break}}}let f={payload:d.payloadType,config:""};for(let h of Object.keys(p))f.config&&(f.config+=";"),f.config+=`${h}=${p[h]}`;f.config&&this._mediaObject.fmtp.push(f);for(let h of m)this._mediaObject.rtcpFb.push({payload:d.payloadType,type:h.type,subtype:h.parameter})}this._mediaObject.payloads=c.codecs.map(d=>d.payloadType).join(" "),this._mediaObject.ext=[];for(let d of c.headerExtensions)(a.ext??[]).some(p=>p.uri===d.uri)&&this._mediaObject.ext.push({uri:d.uri,value:d.id});if(a.extmapAllowMixed==="extmap-allow-mixed"&&(this._mediaObject.extmapAllowMixed="extmap-allow-mixed"),a.simulcast){this._mediaObject.simulcast={dir1:"recv",list1:a.simulcast.list1},this._mediaObject.rids=[];for(let d of a.rids??[])d.direction==="send"&&this._mediaObject.rids.push({id:d.id,direction:"recv"})}else if(a.simulcast_03){this._mediaObject.simulcast_03={value:a.simulcast_03.value.replace(/send/g,"recv")},this._mediaObject.rids=[];for(let d of a.rids??[])d.direction==="send"&&this._mediaObject.rids.push({id:d.id,direction:"recv"})}this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";break}case"application":{typeof a.sctpPort=="number"?(this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=n.port,this._mediaObject.maxMessageSize=n.maxMessageSize):a.sctpmap&&(this._mediaObject.payloads=String(n.port),this._mediaObject.sctpmap={app:"webrtc-datachannel",sctpmapNumber:n.port,maxMessageSize:n.maxMessageSize});break}}}setDtlsRole(e){switch(e){case"client":{this._mediaObject.setup="active";break}case"server":{this._mediaObject.setup="passive";break}case"auto":{this._mediaObject.setup="actpass";break}}}resume(){this._mediaObject.direction="recvonly"}muxSimulcastStreams(e){if(!this._mediaObject.simulcast?.list1)return;let t={};for(let i of e)i.rid&&(t[i.rid]=i);let s=this._mediaObject.simulcast.list1,n=ud.parseSimulcastStreamList(s);for(let i of n)for(let a of i)a.paused=!t[a.scid]?.active;this._mediaObject.simulcast.list1=n.map(i=>i.map(a=>`${a.paused?"~":""}${a.scid}`).join(",")).join(";")}};Pe.AnswerMediaSection=ys;var bs=class extends St{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:s,sctpParameters:n,plainRtpParameters:i,mid:a,kind:o,offerRtpParameters:c,streamId:l,trackId:d}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:s}),this._mediaObject.mid=String(a),this._mediaObject.type=o,i?(this._mediaObject.connection={ip:i.ip,version:i.ipVersion},this._mediaObject.protocol="RTP/AVP",this._mediaObject.port=i.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},n?this._mediaObject.protocol="UDP/DTLS/SCTP":this._mediaObject.protocol="UDP/TLS/RTP/SAVPF",this._mediaObject.port=7),this._mediaObject.extmapAllowMixed="extmap-allow-mixed",o){case"audio":case"video":{this._mediaObject.direction="sendonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[],this._mediaObject.msid=[{id:l,appdata:d}];for(let f of c.codecs){let h={payload:f.payloadType,codec:Ii(f),rate:f.clockRate};f.channels>1&&(h.encoding=f.channels),this._mediaObject.rtp.push(h);let g={payload:f.payloadType,config:""};for(let w of Object.keys(f.parameters??{}))g.config&&(g.config+=";"),g.config+=`${w}=${f.parameters[w]}`;g.config&&this._mediaObject.fmtp.push(g);for(let w of f.rtcpFeedback)this._mediaObject.rtcpFb.push({payload:f.payloadType,type:w.type,subtype:w.parameter})}this._mediaObject.payloads=c.codecs.map(f=>f.payloadType).join(" "),this._mediaObject.ext=[];for(let f of c.headerExtensions)this._mediaObject.ext.push({uri:f.uri,value:f.id});this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";let u=c.encodings[0],p=u.ssrc,m=u.rtx?.ssrc;this._mediaObject.ssrcs=[],this._mediaObject.ssrcGroups=[],p&&c.rtcp.cname&&this._mediaObject.ssrcs.push({id:p,attribute:"cname",value:c.rtcp.cname}),m&&(c.rtcp.cname&&this._mediaObject.ssrcs.push({id:m,attribute:"cname",value:c.rtcp.cname}),p&&this._mediaObject.ssrcGroups.push({semantics:"FID",ssrcs:`${p} ${m}`}));break}case"application":{this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=n.port,this._mediaObject.maxMessageSize=n.maxMessageSize;break}}}setDtlsRole(e){this._mediaObject.setup="actpass"}resume(){this._mediaObject.direction="sendonly"}};Pe.OfferMediaSection=bs;function Ii(r){let t=new RegExp("^(audio|video)/(.+)","i").exec(r.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");return t[2]}});var ct=P(gr=>{"use strict";Object.defineProperty(gr,"__esModule",{value:!0});gr.RemoteSdp=void 0;var pd=Re(),hd=V(),fr=Li(),fd=Rs(),md=["av1","h264"],mr=new hd.Logger("RemoteSdp"),Ss=class{_iceParameters;_iceCandidates;_dtlsParameters;_sctpParameters;_plainRtpParameters;_mediaSections=[];_midToIndex=new Map;_firstMid;_sdpObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:s,sctpParameters:n,plainRtpParameters:i}){if(this._iceParameters=e,this._iceCandidates=t,this._dtlsParameters=s,this._sctpParameters=n,this._plainRtpParameters=i,this._sdpObject={version:0,origin:{address:"0.0.0.0",ipVer:4,netType:"IN",sessionId:"10000",sessionVersion:0,username:`media-client-v${fd.version}`},name:"-",timing:{start:0,stop:0},media:[]},this._sdpObject.iceOptions="ice2",e?.iceLite&&(this._sdpObject.icelite="ice-lite"),s){this._sdpObject.msidSemantic={semantic:"WMS",token:"*"};let a=this._dtlsParameters.fingerprints.length;this._sdpObject.fingerprint={type:s.fingerprints[a-1].algorithm,hash:s.fingerprints[a-1].value},this._sdpObject.groups=[{type:"BUNDLE",mids:""}]}i&&(this._sdpObject.origin.address=i.ip,this._sdpObject.origin.ipVer=i.ipVersion)}updateIceParameters(e){mr.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){mr.debug("updateDtlsRole() [role:%s]",e),this._dtlsParameters.role=e;for(let t of this._mediaSections)t.setDtlsRole(e)}setSessionExtmapAllowMixed(){mr.debug("setSessionExtmapAllowMixed()"),this._sdpObject.extmapAllowMixed="extmap-allow-mixed"}getNextMediaSectionIdx(){for(let e=0;e<this._mediaSections.length;++e){let t=this._mediaSections[e];if(t.closed)return{idx:e,reuseMid:t.mid}}return{idx:this._mediaSections.length}}send({offerMediaObject:e,reuseMid:t,offerRtpParameters:s,answerRtpParameters:n,codecOptions:i}){let a=new fr.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,offerMediaObject:e,offerRtpParameters:s,answerRtpParameters:n,codecOptions:i}),o=a.getObject();o.rtp.find(l=>md.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:s,streamId:n,trackId:i}){this.setSessionExtmapAllowMixed();let a=new fr.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,mid:e,kind:t,offerRtpParameters:s,streamId:n,trackId:i}),o=this._mediaSections.find(c=>c.closed&&c.getObject().type===t);o?this.replaceMediaSection(a,o.mid):this.addMediaSection(a)}pauseMediaSection(e){this.findMediaSection(e).pause()}resumeSendingMediaSection(e){this.findMediaSection(e).resume()}resumeReceivingMediaSection(e){this.findMediaSection(e).resume()}disableMediaSection(e){this.findMediaSection(e).disable()}closeMediaSection(e){let t=this.findMediaSection(e);return e===this._firstMid?(mr.debug("closeMediaSection() | cannot close first media section, disabling it instead [mid:%s]",e),this.disableMediaSection(e),!1):(t.close(),this.regenerateBundleMids(),!0)}muxMediaSectionSimulcast(e,t){let s=this.findMediaSection(e);s.muxSimulcastStreams(t),this.replaceMediaSection(s)}sendSctpAssociation({offerMediaObject:e}){let t=new fr.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 fr.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++,pd.write(this._sdpObject)}addMediaSection(e){this._firstMid||(this._firstMid=e.mid),this._mediaSections.push(e),this._midToIndex.set(e.mid,this._mediaSections.length-1),this._sdpObject.media.push(e.getObject()),this.regenerateBundleMids()}replaceMediaSection(e,t){if(typeof t=="string"){let s=this._midToIndex.get(t);if(s===void 0)throw new Error(`no media section found for reuseMid '${t}'`);let n=this._mediaSections[s];this._mediaSections[s]=e,this._midToIndex.delete(n.mid),this._midToIndex.set(e.mid,s),this._sdpObject.media[s]=e.getObject(),this.regenerateBundleMids()}else{let s=this._midToIndex.get(e.mid);if(s===void 0)throw new Error(`no media section found with mid '${e.mid}'`);this._mediaSections[s]=e,this._sdpObject.media[s]=e.getObject()}}findMediaSection(e){let t=this._midToIndex.get(e);if(t===void 0)throw new Error(`no media section found with mid '${e}'`);return this._mediaSections[t]}regenerateBundleMids(){this._dtlsParameters&&(this._sdpObject.groups[0].mids=this._mediaSections.filter(e=>!e.closed).map(e=>e.mid).join(" "))}};gr.RemoteSdp=Ss});var dt=P(Fe=>{"use strict";Object.defineProperty(Fe,"__esModule",{value:!0});Fe.extractRtpCapabilities=gd;Fe.extractDtlsParameters=_d;Fe.getCname=vd;Fe.applyCodecParameters=wd;Fe.addHeaderExtension=yd;var Mi=Re();function gd({sdpObject:r}){let e=new Map,t=new Map;for(let n of r.media){let i=n.type;switch(i){case"audio":case"video":break;default:continue}for(let a of n.rtp){let o={kind:i,mimeType:`${i}/${a.codec}`,preferredPayloadType:a.payload,clockRate:a.rate,channels:a.encoding,parameters:{},rtcpFeedback:[]};e.set(o.preferredPayloadType,o)}for(let a of n.fmtp??[]){let o=Mi.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 _d({sdpObject:r}){let e=r.setup,t=r.fingerprint;if(!e||!t){let i=(r.media??[]).find(a=>a.port!==0);i&&(e=e??i.setup,t=t??i.fingerprint)}if(e){if(!t)throw new Error("no a=fingerprint found at SDP session or media level")}else throw new Error("no a=setup found at SDP session or media level");let s;switch(e){case"active":{s="client";break}case"passive":{s="server";break}case"actpass":{s="auto";break}}return{role:s,fingerprints:[{algorithm:t.type,value:t.hash}]}}function vd({offerMediaObject:r}){let e=(r.ssrcs??[]).find(t=>t.attribute==="cname");return e?e.value:""}function wd({offerRtpParameters:r,answerMediaObject:e}){for(let t of r.codecs){let s=t.mimeType.toLowerCase();if(s!=="audio/opus"||!(e.rtp??[]).find(o=>o.payload===t.payloadType))continue;e.fmtp=e.fmtp??[];let i=e.fmtp.find(o=>o.payload===t.payloadType);i||(i={payload:t.payloadType,config:""},e.fmtp.push(i));let a=Mi.parseParams(i.config);if(s==="audio/opus"){let o=t.parameters?.["sprop-stereo"];o!==void 0&&(a.stereo=Number(o)?1:0)}i.config="";for(let o of Object.keys(a))i.config&&(i.config+=";"),i.config+=`${o}=${a[o]}`}}function yd({offerMediaObject:r,headerExtensionUri:e,headerExtensionId:t}){r.ext||(r.ext=[]),r.ext.push({uri:e,value:t})}});var lt=P(_r=>{"use strict";Object.defineProperty(_r,"__esModule",{value:!0});_r.getRtpEncodings=bd;_r.addLegacySimulcast=Sd;function bd({offerMediaObject:r,codecs:e}){let t=new Set;for(let i of r.ssrcs??[]){let a=i.id;a&&t.add(a)}if(t.size===0)throw new Error("no a=ssrc lines found");let s=new Map;for(let i of r.ssrcGroups??[]){if(i.semantics!=="FID")continue;let a=i.ssrcs.split(/\s+/),o=Number(a[0]),c=Number(a[1]);t.has(o)&&(t.delete(o),t.delete(c),s.set(o,c))}for(let i of t)s.set(i,void 0);let n=[];for(let[i,a]of s){let o={ssrc:i};a&&e.length>1&&(o.rtx={ssrc:a}),n.push(o)}return n}function Sd({offerMediaObject:r,numStreams:e}){if(e<=1)throw new TypeError("numStreams must be greater than 1");let t=(r.ssrcs??[]).find(u=>u.attribute==="msid");if(!t)throw new Error("a=ssrc line with msid information not found");let[s,n]=t.value.split(" "),i=Number(t.id),a;(r.ssrcGroups??[]).some(u=>{if(u.semantics!=="FID")return!1;let p=u.ssrcs.split(/\s+/);return Number(p[0])===i?(a=Number(p[1]),!0):!1});let o=(r.ssrcs??[]).find(u=>u.attribute==="cname");if(!o)throw new Error("a=ssrc line with cname information not found");let c=o.value,l=[],d=[];for(let u=0;u<e;++u)l.push(i+u),a&&d.push(a+u);r.ssrcGroups=[],r.ssrcs=[],r.ssrcGroups.push({semantics:"SIM",ssrcs:l.join(" ")});for(let u of l)r.ssrcs.push({id:u,attribute:"cname",value:c}),r.ssrcs.push({id:u,attribute:"msid",value:`${s} ${n}`});for(let u=0;u<d.length;++u){let p=l[u],m=d[u];r.ssrcs.push({id:m,attribute:"cname",value:c}),r.ssrcs.push({id:m,attribute:"msid",value:`${s} ${n}`}),r.ssrcGroups.push({semantics:"FID",ssrcs:`${p} ${m}`})}}});var ut=P(Rt=>{"use strict";Object.defineProperty(Rt,"__esModule",{value:!0});Rt.addNackSupportForOpus=Rd;Rt.addHeaderExtensionSupport=Cd;Rt.getMsidStreamIdAndTrackId=Td;function Rd(r){for(let e of r.codecs??[])(e.mimeType.toLowerCase()==="audio/opus"||e.mimeType.toLowerCase()==="audio/multiopus")&&!e.rtcpFeedback?.some(t=>t.type==="nack"&&!t.parameter)&&(e.rtcpFeedback||(e.rtcpFeedback=[]),e.rtcpFeedback.push({type:"nack"}))}function Cd(r,e){let t,s=r.headerExtensions?.find(i=>i.uri===e.uri);if(s){if(s.kind===e.kind)return;t=s.preferredId}if(r.headerExtensions||(r.headerExtensions=[]),t===void 0){t=1;let i=new Set(r.headerExtensions.map(a=>a.preferredId));for(;i.has(t);)++t}let n={kind:e.kind,uri:e.uri,preferredId:t,preferredEncrypt:!1,direction:e.direction};r.headerExtensions.push(n)}function Td(r){if(!r||typeof r!="string")return{msidStreamId:void 0,msidTrackId:void 0};let[e,t]=r.trim().split(/\s+/);return e?{msidStreamId:e,msidTrackId:t}:{msidStreamId:void 0,msidTrackId:void 0}}});var ji=P(vr=>{"use strict";Object.defineProperty(vr,"__esModule",{value:!0});vr.Chrome111=void 0;var we=Re(),kd=Z(),Ed=V(),Ct=me(),Pd=re(),xd=je(),Dd=ct(),Tt=dt(),Ai=lt(),Cs=ut(),k=new Ed.Logger("Chrome111"),Oi="Chrome111",Ni={OS:65535,MIS:65535},Ts=class r extends kd.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Oi,factory:e=>new r(e),getNativeRtpCapabilities:async({direction:e})=>{k.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e,sendEncodings:[{scalabilityMode:"L3T3"}]});let s=await t.createOffer();try{t.close()}catch{}t=void 0;let n=we.parse(s.sdp);return r.getLocalRtpCapabilities(n)}catch(s){try{t?.close()}catch{}throw t=void 0,s}},getNativeSctpCapabilities:async()=>(k.debug("getNativeSctpCapabilities()"),{numStreams:Ni})}}static getLocalRtpCapabilities(e,t=[]){let s=Tt.extractRtpCapabilities({sdpObject:e});Ct.validateAndNormalizeRtpCapabilities(s),Cs.addNackSupportForOpus(s);for(let n of t)Cs.addHeaderExtensionSupport(s,n);return s}constructor({direction:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:l}){super(),k.debug("constructor()"),this._direction=e,this._remoteSdp=new Dd.RemoteSdp({iceParameters:t,iceCandidates:s,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):(k.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Oi}close(){if(k.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),k.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),k.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});k.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let s={type:"answer",sdp:this._remoteSdp.getSdp()};k.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};k.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();k.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:s,codecOptions:n,headerExtensionOptions:i,codec:a,onRtpSender:o}){if(this.assertNotClosed(),this.assertSendDirection(),k.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),s&&s.length>1){let _=1;for(let v of s){let D=v.scalabilityMode?(0,xd.parse)(v.scalabilityMode).temporalLayers:3;D>_&&(_=D)}s.forEach((v,D)=>{v.rid=`r${D}`,v.scalabilityMode=`L1T${_}`})}let c=this._remoteSdp.getNextMediaSectionIdx(),l=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:s});o&&o(l.sender);let d=await this._pc.createOffer(),u=we.parse(d.sdp);u.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let p=[];p.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let m=r.getLocalRtpCapabilities(u,p),f=this._getSendExtendedRtpCapabilities(m),h=Ct.getSendingRtpParameters(e.kind,f);h.codecs=Ct.reduceCodecs(h.codecs,a);let g=Ct.getSendingRemoteRtpParameters(e.kind,f);if(g.codecs=Ct.reduceCodecs(g.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:u}),i?.absCaptureTime){let _=u.media[c.idx];Tt.addHeaderExtension({offerMediaObject:_,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(v=>v.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:we.write(u)}}k.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let w=l.mid;h.mid=w,u=we.parse(this._pc.localDescription.sdp);let R=u.media[c.idx];if(h.rtcp.cname=Tt.getCname({offerMediaObject:R}),h.msid=`${t??this._sendStream.id} ${e.id}`,!s)h.encodings=Ai.getRtpEncodings({offerMediaObject:R,codecs:h.codecs});else if(s.length===1){let _=Ai.getRtpEncodings({offerMediaObject:R,codecs:h.codecs});Object.assign(_[0],s[0]),h.encodings=_}else h.encodings=s;this._remoteSdp.send({offerMediaObject:R,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:g,codecOptions:n});let x={type:"answer",sdp:this._remoteSdp.getSdp()};return k.debug("send() | calling pc.setRemoteDescription() [answer:%o]",x),await this._pc.setRemoteDescription(x),this._mapMidTransceiver.set(w,l),{localId:w,rtpParameters:h,rtpSender:l.sender}}async stopSending(e){if(this.assertSendDirection(),k.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let n=await this._pc.createOffer();k.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};k.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),k.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let s=await this._pc.createOffer();k.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);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(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let s=await this._pc.createOffer();k.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);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 s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");await s.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),k.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();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 s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();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 s=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Ni.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),a=we.parse(i.sdp),o=a.media.find(l=>l.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"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:s,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],s=new Map;for(let o of e){let{trackId:c,kind:l,rtpParameters:d,streamId:u}=o;k.debug("receive() [trackId:%s, kind:%s]",c,l);let p=d.mid??String(this._mapMidTransceiver.size);s.set(c,p);let{msidStreamId:m}=Cs.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:p,kind:l,offerRtpParameters:d,streamId:u??m??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=s.get(c),u=this._pc.getTransceivers().find(p=>p.mid===d);if(!u)throw new Error("transceiver not found");l(u.receiver)}}let i=await this._pc.createAnswer(),a=we.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:l}=o,d=s.get(c),u=a.media.find(p=>String(p.mid)===d);Tt.applyCodecParameters({offerRtpParameters:l,answerMediaObject:u})}i={type:"answer",sdp:we.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"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=s.get(c),d=this._pc.getTransceivers().find(u=>u.mid===l);if(d)this._mapMidTransceiver.set(l,d),t.push({localId:l,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let 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 s=await this._pc.createAnswer();k.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){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 s=await this._pc.createAnswer();k.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){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 s=await this._pc.createAnswer();k.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:s,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,l={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};k.debug("receiveDataChannel() [options:%o]",l);let d=this._pc.createDataChannel(s,l);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let u={type:"offer",sdp:this._remoteSdp.getSdp()};k.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",u),await this._pc.setRemoteDescription(u);let p=await this._pc.createAnswer(),m=we.parse(p.sdp),f=m.media.find(h=>h.type==="application");f.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),p={type:"answer",sdp:we.write(m)},k.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",p),await this._pc.setLocalDescription(p),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=we.parse(this._pc.localDescription.sdp));let s=Tt.extractDtlsParameters({sdpObject:t});s.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:s},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Pd.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')}};vr.Chrome111=Ts});var Ui=P(wr=>{"use strict";Object.defineProperty(wr,"__esModule",{value:!0});wr.Chrome74=void 0;var se=Re(),Id=V(),Ld=Z(),kt=me(),Md=re(),Ad=je(),Od=ct(),Et=dt(),ks=lt(),Es=ut(),C=new Id.Logger("Chrome74"),Fi="Chrome74",$i={OS:1024,MIS:1024},Ps=class r extends Ld.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Fi,factory:e=>new r(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 s=await t.createOffer();try{t.close()}catch{}t=void 0;let n=se.parse(s.sdp);return r.getLocalRtpCapabilities(n)}catch(s){try{t?.close()}catch{}throw t=void 0,s}},getNativeSctpCapabilities:async()=>(C.debug("getNativeSctpCapabilities()"),{numStreams:$i})}}static getLocalRtpCapabilities(e,t=[]){let s=Et.extractRtpCapabilities({sdpObject:e});kt.validateAndNormalizeRtpCapabilities(s),Es.addNackSupportForOpus(s);for(let n of t)Es.addHeaderExtensionSupport(s,n);return s}constructor({direction:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:l}){super(),C.debug("constructor()"),this._direction=e,this._remoteSdp=new Od.RemoteSdp({iceParameters:t,iceCandidates:s,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 Fi}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 s={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();C.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:s,codecOptions:n,headerExtensionOptions:i,codec:a}){this.assertNotClosed(),this.assertSendDirection(),C.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),s&&s.length>1&&s.forEach((v,D)=>{v.rid=`r${D}`});let o=this._remoteSdp.getNextMediaSectionIdx(),c=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:s}),l=await this._pc.createOffer(),d=se.parse(l.sdp);d.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let u=[];u.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let p=r.getLocalRtpCapabilities(d,u),m=this._getSendExtendedRtpCapabilities(p),f=kt.getSendingRtpParameters(e.kind,m);f.codecs=kt.reduceCodecs(f.codecs,a);let h=kt.getSendingRemoteRtpParameters(e.kind,m);h.codecs=kt.reduceCodecs(h.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:d});let g=!1,w=(0,Ad.parse)((s??[{}])[0].scalabilityMode),R;s?.length===1&&w.spatialLayers>1&&f.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(C.debug("send() | enabling legacy simulcast for VP9 SVC"),g=!0,d=se.parse(l.sdp),R=d.media[o.idx],ks.addLegacySimulcast({offerMediaObject:R,numStreams:w.spatialLayers}),l={type:"offer",sdp:se.write(d)}),C.debug("send() | calling pc.setLocalDescription() [offer:%o]",l),i?.absCaptureTime&&(R=d.media[o.idx],Et.addHeaderExtension({offerMediaObject:R,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:h.headerExtensions.find(v=>v.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),l={type:"offer",sdp:se.write(d)}),await this._pc.setLocalDescription(l);let x=c.mid;if(f.mid=x,d=se.parse(this._pc.localDescription.sdp),R=d.media[o.idx],f.rtcp.cname=Et.getCname({offerMediaObject:R}),f.msid=`${t??this._sendStream.id} ${e.id}`,!s)f.encodings=ks.getRtpEncodings({offerMediaObject:R,codecs:f.codecs});else if(s.length===1){let v=ks.getRtpEncodings({offerMediaObject:R,codecs:f.codecs});Object.assign(v[0],s[0]),g&&(v=[v[0]]),f.encodings=v}else f.encodings=s;if(f.encodings.length>1&&(f.codecs[0].mimeType.toLowerCase()==="video/vp8"||f.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let v of f.encodings)v.scalabilityMode?v.scalabilityMode=`L1T${w.temporalLayers}`:v.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:R,reuseMid:o.reuseMid,offerRtpParameters:f,answerRtpParameters:h,codecOptions:n});let _={type:"answer",sdp:this._remoteSdp.getSdp()};return C.debug("send() | calling pc.setRemoteDescription() [answer:%o]",_),await this._pc.setRemoteDescription(_),this._mapMidTransceiver.set(x,c),{localId:x,rtpParameters:f,rtpSender:c.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 s=await this._pc.createOffer();C.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);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 s=await this._pc.createOffer();C.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);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 s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");await s.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),C.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();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 s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();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 s=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%$i.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),a=se.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:s,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],s=new Map;for(let o of e){let{trackId:c,kind:l,rtpParameters:d,streamId:u}=o;C.debug("receive() [trackId:%s, kind:%s]",c,l);let p=d.mid??String(this._mapMidTransceiver.size);s.set(c,p);let{msidStreamId:m}=Es.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:p,kind:l,offerRtpParameters:d,streamId:u??m??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);let i=await this._pc.createAnswer(),a=se.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:l}=o,d=s.get(c),u=a.media.find(p=>String(p.mid)===d);Et.applyCodecParameters({offerRtpParameters:l,answerMediaObject:u})}i={type:"answer",sdp:se.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=s.get(c),d=this._pc.getTransceivers().find(u=>u.mid===l);if(d)this._mapMidTransceiver.set(l,d),t.push({localId:l,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let 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 s=await this._pc.createAnswer();C.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){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 s=await this._pc.createAnswer();C.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){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 s=await this._pc.createAnswer();C.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:s,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,l={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};C.debug("receiveDataChannel() [options:%o]",l);let d=this._pc.createDataChannel(s,l);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let u={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",u),await this._pc.setRemoteDescription(u);let p=await this._pc.createAnswer(),m=se.parse(p.sdp),f=m.media.find(h=>h.type==="application");f.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),p={type:"answer",sdp:se.write(m)},C.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",p),await this._pc.setLocalDescription(p),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=se.parse(this._pc.localDescription.sdp));let s=Et.extractDtlsParameters({sdpObject:t});s.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:s},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Md.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')}};wr.Chrome74=Ps});var Hi=P(br=>{"use strict";Object.defineProperty(br,"__esModule",{value:!0});br.Firefox120=void 0;var Ce=Re(),Nd=Z(),jd=V(),qi=re(),Pt=me(),Fd=je(),$d=ct(),yr=dt(),Bi=lt(),Ud=ut(),E=new jd.Logger("Firefox120"),Wi="Firefox120",zi={OS:16,MIS:2048},xs=class r extends Nd.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Wi,factory:e=>new r(e),getNativeRtpCapabilities:async({direction:e})=>{E.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"}),s=document.createElement("canvas");s.getContext("2d");let i=s.captureStream().getVideoTracks()[0];try{t.addTransceiver("audio",{direction:e}),t.addTransceiver(i,{direction:e,sendEncodings:[{rid:"r0",maxBitrate:1e5},{rid:"r1",maxBitrate:5e5}]});let a=await t.createOffer();try{s.remove()}catch{}try{i.stop()}catch{}try{t.close()}catch{}t=void 0;let o=Ce.parse(a.sdp);return r.getLocalRtpCapabilities(o)}catch(a){try{s.remove()}catch{}try{i.stop()}catch{}try{t?.close()}catch{}throw t=void 0,a}},getNativeSctpCapabilities:async()=>(E.debug("getNativeSctpCapabilities()"),{numStreams:zi})}}static getLocalRtpCapabilities(e){let t=yr.extractRtpCapabilities({sdpObject:e});return Pt.validateAndNormalizeRtpCapabilities(t),t}constructor({direction:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:l}){super(),E.debug("constructor()"),this._direction=e,this._remoteSdp=new $d.RemoteSdp({iceParameters:t,iceCandidates:s,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 Wi}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 qi.UnsupportedError("not supported")}async restartIce(e){if(this.assertNotClosed(),E.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});E.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let s={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();E.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:s,codecOptions:n,codec:i,onRtpSender:a}){this.assertNotClosed(),this.assertSendDirection(),E.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),s&&s.length>1&&s.forEach((R,x)=>{R.rid=`r${x}`});let o=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:s});a&&a(o.sender);let c=await this._pc.createOffer(),l=Ce.parse(c.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let d=r.getLocalRtpCapabilities(l),u=this._getSendExtendedRtpCapabilities(d),p=Pt.getSendingRtpParameters(e.kind,u);p.codecs=Pt.reduceCodecs(p.codecs,i);let m=Pt.getSendingRemoteRtpParameters(e.kind,u);m.codecs=Pt.reduceCodecs(m.codecs,i),this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:l});let f=(0,Fd.parse)((s??[{}])[0].scalabilityMode);E.debug("send() | calling pc.setLocalDescription() [offer:%o]",c),await this._pc.setLocalDescription(c);let h=o.mid;p.mid=h,l=Ce.parse(this._pc.localDescription.sdp);let g=l.media[l.media.length-1];if(p.rtcp.cname=yr.getCname({offerMediaObject:g}),p.msid=`${t??this._sendStream.id} ${e.id}`,!s)p.encodings=Bi.getRtpEncodings({offerMediaObject:g,codecs:p.codecs});else if(s.length===1){let R=Bi.getRtpEncodings({offerMediaObject:g,codecs:p.codecs});Object.assign(R[0],s[0]),p.encodings=R}else p.encodings=s;if(p.encodings.length>1&&(p.codecs[0].mimeType.toLowerCase()==="video/vp8"||p.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let R of p.encodings)R.scalabilityMode?R.scalabilityMode=`L1T${f.temporalLayers}`:R.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:g,offerRtpParameters:p,answerRtpParameters:m,codecOptions:n});let w={type:"answer",sdp:this._remoteSdp.getSdp()};return E.debug("send() | calling pc.setRemoteDescription() [answer:%o]",w),await this._pc.setRemoteDescription(w),this._mapMidTransceiver.set(h,o),{localId:h,rtpParameters:p,rtpSender:o.sender}}async stopSending(e){if(this.assertSendDirection(),E.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated transceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.disableMediaSection(t.mid);let s=await this._pc.createOffer();E.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),E.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let s=await this._pc.createOffer();E.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),E.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let s=await this._pc.createOffer();E.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?E.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):E.debug("replaceTrack() [localId:%s, no track]",e);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");await s.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),E.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated transceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();E.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),E.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();E.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};E.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};E.debug("sendDataChannel() [options:%o]",t);let s=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%zi.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),a=Ce.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:s,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],s=new Map;for(let o of e){let{trackId:c,kind:l,rtpParameters:d,streamId:u}=o;E.debug("receive() [trackId:%s, kind:%s]",c,l);let p=d.mid??String(this._mapMidTransceiver.size);s.set(c,p);let{msidStreamId:m}=Ud.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:p,kind:l,offerRtpParameters:d,streamId:u??m??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let o of e){let{trackId:c,onRtpReceiver:l}=o;if(l){let d=s.get(c),u=this._pc.getTransceivers().find(p=>p.mid===d);if(!u)throw new Error("transceiver not found");l(u.receiver)}}let i=await this._pc.createAnswer(),a=Ce.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:l}=o,d=s.get(c),u=a.media.find(p=>String(p.mid)===d);yr.applyCodecParameters({offerRtpParameters:l,answerMediaObject:u}),i={type:"answer",sdp:Ce.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=s.get(c),d=this._pc.getTransceivers().find(u=>u.mid===l);if(!d)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(l,d),t.push({localId:l,track:d.receiver.track,rtpReceiver:d.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){E.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();E.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){E.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();E.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){E.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();E.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async getReceiverStats(e){this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:s,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,l={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};E.debug("receiveDataChannel() [options:%o]",l);let d=this._pc.createDataChannel(s,l);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let u={type:"offer",sdp:this._remoteSdp.getSdp()};E.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",u),await this._pc.setRemoteDescription(u);let p=await this._pc.createAnswer(),m=Ce.parse(p.sdp),f=m.media.find(h=>h.type==="application");f.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:m}),p={type:"answer",sdp:Ce.write(m)},E.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",p),await this._pc.setLocalDescription(p),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=Ce.parse(this._pc.localDescription.sdp));let s=yr.extractDtlsParameters({sdpObject:t});s.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:s},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new qi.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')}};br.Firefox120=xs});var Qi=P(Sr=>{"use strict";Object.defineProperty(Sr,"__esModule",{value:!0});Sr.Safari12=void 0;var ne=Re(),qd=Z(),Bd=V(),xt=me(),Wd=re(),zd=je(),Hd=ct(),Dt=dt(),Vi=lt(),Ds=ut(),T=new Bd.Logger("Safari12"),Gi="Safari12",Ki={OS:65535,MIS:65535},Is=class r extends qd.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Gi,factory:e=>new r(e),getNativeRtpCapabilities:async({direction:e})=>{T.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let s=await t.createOffer();try{t.close()}catch{}t=void 0;let n=ne.parse(s.sdp);return r.getLocalRtpCapabilities(n)}catch(s){try{t?.close()}catch{}throw t=void 0,s}},getNativeSctpCapabilities:async()=>(T.debug("getNativeSctpCapabilities()"),{numStreams:Ki})}}static getLocalRtpCapabilities(e,t=[]){let s=Dt.extractRtpCapabilities({sdpObject:e});xt.validateAndNormalizeRtpCapabilities(s),Ds.addNackSupportForOpus(s);for(let n of t)Ds.addHeaderExtensionSupport(s,n);return s}constructor({direction:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:l}){super(),T.debug("constructor()"),this._direction=e,this._remoteSdp=new Hd.RemoteSdp({iceParameters:t,iceCandidates:s,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):(T.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Gi}close(){if(T.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),T.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),T.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});T.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let s={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();T.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:s,codecOptions:n,headerExtensionOptions:i,codec:a,onRtpSender:o}){this.assertNotClosed(),this.assertSendDirection(),T.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(),u=ne.parse(d.sdp);u.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let p=[];p.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let m=r.getLocalRtpCapabilities(u,p),f=this._getSendExtendedRtpCapabilities(m),h=xt.getSendingRtpParameters(e.kind,f);h.codecs=xt.reduceCodecs(h.codecs,a);let g=xt.getSendingRemoteRtpParameters(e.kind,f);g.codecs=xt.reduceCodecs(g.codecs,a);let w;this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:u});let R=(0,zd.parse)((s??[{}])[0].scalabilityMode);s&&s.length>1&&(T.debug("send() | enabling legacy simulcast"),u=ne.parse(d.sdp),w=u.media[c.idx],Vi.addLegacySimulcast({offerMediaObject:w,numStreams:s.length}),d={type:"offer",sdp:ne.write(u)}),i?.absCaptureTime&&(w=u.media[c.idx],Dt.addHeaderExtension({offerMediaObject:w,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(v=>v.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:ne.write(u)}),T.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let x=l.mid;if(h.mid=x,u=ne.parse(this._pc.localDescription.sdp),w=u.media[c.idx],h.rtcp.cname=Dt.getCname({offerMediaObject:w}),h.msid=`${t??this._sendStream.id} ${e.id}`,h.encodings=Vi.getRtpEncodings({offerMediaObject:w,codecs:h.codecs}),s)for(let v=0;v<h.encodings.length;++v)s[v]&&Object.assign(h.encodings[v],s[v]);if(h.encodings.length>1&&(h.codecs[0].mimeType.toLowerCase()==="video/vp8"||h.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let v of h.encodings)v.scalabilityMode?v.scalabilityMode=`L1T${R.temporalLayers}`:v.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:w,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:g,codecOptions:n});let _={type:"answer",sdp:this._remoteSdp.getSdp()};return T.debug("send() | calling pc.setRemoteDescription() [answer:%o]",_),await this._pc.setRemoteDescription(_),this._mapMidTransceiver.set(x,l),{localId:x,rtpParameters:h,rtpSender:l.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;T.debug("stopSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let n=await this._pc.createOffer();T.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),T.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let s=await this._pc.createOffer();T.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),T.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let s=await this._pc.createOffer();T.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?T.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):T.debug("replaceTrack() [localId:%s, no track]",e);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");await s.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),T.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();T.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),T.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();T.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};T.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};T.debug("sendDataChannel() [options:%o]",t);let s=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Ki.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),a=ne.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:s,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],s=new Map;for(let o of e){let{trackId:c,kind:l,rtpParameters:d,streamId:u}=o;T.debug("receive() [trackId:%s, kind:%s]",c,l);let p=d.mid??String(this._mapMidTransceiver.size);s.set(c,p);let{msidStreamId:m}=Ds.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:p,kind:l,offerRtpParameters:d,streamId:u??m??d.rtcp?.cname??"-",trackId:c})}let 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=s.get(c),u=this._pc.getTransceivers().find(p=>p.mid===d);if(!u)throw new Error("transceiver not found");l(u.receiver)}}let i=await this._pc.createAnswer(),a=ne.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:l}=o,d=s.get(c),u=a.media.find(p=>String(p.mid)===d);Dt.applyCodecParameters({offerRtpParameters:l,answerMediaObject:u})}i={type:"answer",sdp:ne.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=s.get(c),d=this._pc.getTransceivers().find(u=>u.mid===l);if(!d)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(l,d),t.push({localId:l,track:d.receiver.track,rtpReceiver:d.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){T.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();T.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){T.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();T.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){T.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();T.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:s,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,l={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};T.debug("receiveDataChannel() [options:%o]",l);let d=this._pc.createDataChannel(s,l);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let u={type:"offer",sdp:this._remoteSdp.getSdp()};T.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",u),await this._pc.setRemoteDescription(u);let p=await this._pc.createAnswer(),m=ne.parse(p.sdp),f=m.media.find(h=>h.type==="application");f.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),p={type:"answer",sdp:ne.write(m)},T.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",p),await this._pc.setLocalDescription(p),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=ne.parse(this._pc.localDescription.sdp));let s=Dt.extractDtlsParameters({sdpObject:t});s.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:s},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Wd.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')}};Sr.Safari12=Is});var Xi=P(Rr=>{"use strict";Object.defineProperty(Rr,"__esModule",{value:!0});Rr.ReactNative106=void 0;var ie=Re(),Vd=Z(),Gd=V(),It=me(),Kd=re(),Qd=je(),Jd=ct(),Lt=dt(),Ls=lt(),Ms=ut(),S=new Gd.Logger("ReactNative106"),Ji="ReactNative106",Yi={OS:65535,MIS:65535},As=class r extends Vd.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Ji,factory:e=>new r(e),getNativeRtpCapabilities:async({direction:e})=>{S.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let s=await t.createOffer();try{t.close()}catch{}t=void 0;let n=ie.parse(s.sdp);return r.getLocalRtpCapabilities(n)}catch(s){try{t?.close()}catch{}throw t=void 0,s}},getNativeSctpCapabilities:async()=>(S.debug("getNativeSctpCapabilities()"),{numStreams:Yi})}}static getLocalRtpCapabilities(e,t=[]){let s=Lt.extractRtpCapabilities({sdpObject:e});It.validateAndNormalizeRtpCapabilities(s),Ms.addNackSupportForOpus(s);for(let n of t)Ms.addHeaderExtensionSupport(s,n);return s}constructor({direction:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:l}){super(),S.debug("constructor()"),this._direction=e,this._remoteSdp=new Jd.RemoteSdp({iceParameters:t,iceCandidates:s,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 Ji}close(){if(S.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(),S.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),S.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});S.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let s={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",s),await this._pc.setRemoteDescription(s)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();S.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:s,codecOptions:n,headerExtensionOptions:i,codec:a,onRtpSender:o}){this.assertNotClosed(),this.assertSendDirection(),S.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),s&&s.length>1&&s.forEach((D,F)=>{D.rid=`r${F}`});let c=this._remoteSdp.getNextMediaSectionIdx(),l=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:s});o&&o(l.sender);let d=await this._pc.createOffer(),u=ie.parse(d.sdp);u.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let p=[];p.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let m=r.getLocalRtpCapabilities(u,p),f=this._getSendExtendedRtpCapabilities(m),h=It.getSendingRtpParameters(e.kind,f);h.codecs=It.reduceCodecs(h.codecs,a);let g=It.getSendingRemoteRtpParameters(e.kind,f);g.codecs=It.reduceCodecs(g.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:u});let w=!1,R=(0,Qd.parse)((s??[{}])[0].scalabilityMode),x;s?.length===1&&R.spatialLayers>1&&h.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(S.debug("send() | enabling legacy simulcast for VP9 SVC"),w=!0,u=ie.parse(d.sdp),x=u.media[c.idx],Ls.addLegacySimulcast({offerMediaObject:x,numStreams:R.spatialLayers}),d={type:"offer",sdp:ie.write(u)}),i?.absCaptureTime&&(x=u.media[c.idx],Lt.addHeaderExtension({offerMediaObject:x,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:ie.write(u)}),S.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let _=l.mid??void 0;if(_||S.warn("send() | missing transceiver.mid (bug in react-native-webrtc, using a workaround"),h.mid=_,u=ie.parse(this._pc.localDescription.sdp),x=u.media[c.idx],h.rtcp.cname=Lt.getCname({offerMediaObject:x}),h.msid=`${t??this._sendStream.id} ${e.id}`,!s)h.encodings=Ls.getRtpEncodings({offerMediaObject:x,codecs:h.codecs});else if(s.length===1){let D=Ls.getRtpEncodings({offerMediaObject:x,codecs:h.codecs});Object.assign(D[0],s[0]),w&&(D=[D[0]]),h.encodings=D}else h.encodings=s;if(h.encodings.length>1&&(h.codecs[0].mimeType.toLowerCase()==="video/vp8"||h.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let D of h.encodings)D.scalabilityMode?D.scalabilityMode=`L1T${R.temporalLayers}`:D.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:x,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:g,codecOptions:n});let v={type:"answer",sdp:this._remoteSdp.getSdp()};return S.debug("send() | calling pc.setRemoteDescription() [answer:%o]",v),await this._pc.setRemoteDescription(v),_||(_=l.mid,h.mid=_),this._mapMidTransceiver.set(_,l),{localId:_,rtpParameters:h,rtpSender:l.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;S.debug("stopSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let n=await this._pc.createOffer();S.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let i={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),S.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let s=await this._pc.createOffer();S.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),S.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let s=await this._pc.createOffer();S.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",s),await this._pc.setLocalDescription(s);let n={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?S.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):S.debug("replaceTrack() [localId:%s, no track]",e);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");await s.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),S.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();S.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),S.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let s=this._mapMidTransceiver.get(e);if(!s)throw new Error("associated RTCRtpTransceiver not found");let n=s.sender.getParameters();n.encodings.forEach((o,c)=>{n.encodings[c]={...o,...t}}),await s.sender.setParameters(n),this._remoteSdp.muxMediaSectionSimulcast(e,n.encodings);let i=await this._pc.createOffer();S.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let a={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};S.debug("sendDataChannel() [options:%o]",t);let s=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Yi.MIS,!this._hasDataChannelMediaSection){let i=await this._pc.createOffer(),a=ie.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:s,sctpStreamParameters:n}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],s=new Map;for(let o of e){let{trackId:c,kind:l,rtpParameters:d,streamId:u}=o;S.debug("receive() [trackId:%s, kind:%s]",c,l);let p=d.mid??String(this._mapMidTransceiver.size);s.set(c,p);let{msidStreamId:m}=Ms.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:p,kind:l,offerRtpParameters:d,streamId:u??m??d.rtcp?.cname??"-",trackId:c})}let n={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",n),await this._pc.setRemoteDescription(n);for(let o of e){let{trackId:c,onRtpReceiver:l}=o;if(l){let d=s.get(c),u=this._pc.getTransceivers().find(p=>p.mid===d);if(!u)throw new Error("transceiver not found");l(u.receiver)}}let i=await this._pc.createAnswer(),a=ie.parse(i.sdp);for(let o of e){let{trackId:c,rtpParameters:l}=o,d=s.get(c),u=a.media.find(p=>String(p.mid)===d);Lt.applyCodecParameters({offerRtpParameters:l,answerMediaObject:u})}i={type:"answer",sdp:ie.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=s.get(c),d=this._pc.getTransceivers().find(u=>u.mid===l);if(d)this._mapMidTransceiver.set(l,d),t.push({localId:l,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let n of e){S.debug("stopReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(i.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();S.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s);for(let n of e)this._mapMidTransceiver.delete(n)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){S.debug("pauseReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="inactive",this._remoteSdp.pauseMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();S.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let n of e){S.debug("resumeReceiving() [localId:%s]",n);let i=this._mapMidTransceiver.get(n);if(!i)throw new Error("associated RTCRtpTransceiver not found");i.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(n)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let s=await this._pc.createAnswer();S.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",s),await this._pc.setLocalDescription(s)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:s,protocol:n}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,l={negotiated:!0,id:i,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:n};S.debug("receiveDataChannel() [options:%o]",l);let d=this._pc.createDataChannel(s,l);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let u={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",u),await this._pc.setRemoteDescription(u);let p=await this._pc.createAnswer(),m=ie.parse(p.sdp),f=m.media.find(h=>h.type==="application");f.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:m}),p={type:"answer",sdp:ie.write(m)},S.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",p),await this._pc.setLocalDescription(p),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=ie.parse(this._pc.localDescription.sdp));let s=Lt.extractDtlsParameters({sdpObject:t});s.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((n,i)=>{this.safeEmit("@connect",{dtlsParameters:s},n,i)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Kd.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')}};Rr.ReactNative106=As});var ra=P(pt=>{"use strict";Object.defineProperty(pt,"__esModule",{value:!0});pt.Device=void 0;pt.detectDevice=Zi;pt.detectDeviceAsync=ea;var Yd=V(),Xd=Z(),xe=re(),Cr=Me(),ee=me(),Zd=Si(),el=ji(),tl=Ui(),rl=Hi(),sl=Qi(),nl=Xi(),b=new Yd.Logger("Device");function Zi(r,e){return b.debug("detectDevice()"),!r&&typeof navigator=="object"&&(r=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),ta(r,e)}async function ea(r,e){return b.debug("detectDeviceAsync()"),!r&&typeof navigator=="object"&&(r=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),ta(r,e)}var Os=class r{_handlerFactory;_handlerName;_loaded=!1;_getSendExtendedRtpCapabilities;_recvRtpCapabilities;_sendRtpCapabilities;_canProduceByKind={audio:!1,video:!1};_sctpCapabilities;_observer=new Xd.EnhancedEventEmitter;static async factory({handlerName:e,handlerFactory:t}={}){if(b.debug("factory()"),e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(!e&&!t&&(e=await ea(),!e))throw new xe.UnsupportedError("device not supported");return new r({handlerName:e,handlerFactory:t})}constructor({handlerName:e,handlerFactory:t}={}){if(b.debug("constructor()"),e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(t)this._handlerFactory=t;else{if(e)b.debug("constructor() | handler given: %s",e);else if(e=Zi(),e)b.debug("constructor() | detected handler: %s",e);else throw new xe.UnsupportedError("device not supported");switch(e){case"Chrome111":{this._handlerFactory=el.Chrome111.createFactory();break}case"Chrome74":{this._handlerFactory=tl.Chrome74.createFactory();break}case"Firefox120":{this._handlerFactory=rl.Firefox120.createFactory();break}case"Safari12":{this._handlerFactory=sl.Safari12.createFactory();break}case"ReactNative106":{this._handlerFactory=nl.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 xe.InvalidStateError("not loaded");return this._recvRtpCapabilities}get sendRtpCapabilities(){if(!this._loaded)throw new xe.InvalidStateError("not loaded");return this._sendRtpCapabilities}get sctpCapabilities(){if(!this._loaded)throw new xe.InvalidStateError("not loaded");return this._sctpCapabilities}get observer(){return this._observer}async load({routerRtpCapabilities:e,preferLocalCodecsOrder:t=!1}){if(b.debug("load() [routerRtpCapabilities:%o]",e),this._loaded)throw new xe.InvalidStateError("already loaded");let s=Cr.clone(e);ee.validateAndNormalizeRtpCapabilities(s);let{getNativeRtpCapabilities:n,getNativeSctpCapabilities:i}=this._handlerFactory,a=Cr.clone(await n({direction:"recvonly"}));b.debug("load() | got native receiving RTP capabilities:%o",a),ee.validateAndNormalizeRtpCapabilities(a);let o=Cr.clone(await n({direction:"sendonly"}));b.debug("load() | got native sending RTP capabilities:%o",o),ee.validateAndNormalizeRtpCapabilities(o),this._getSendExtendedRtpCapabilities=d=>Cr.clone(ee.getExtendedRtpCapabilities(d,s,t));let c=ee.getExtendedRtpCapabilities(a,s,!1);this._recvRtpCapabilities=ee.getRecvRtpCapabilities(c),b.debug("load() | got receiving RTP capabilities:%o",this._recvRtpCapabilities),ee.validateAndNormalizeRtpCapabilities(this._recvRtpCapabilities);let l=ee.getExtendedRtpCapabilities(o,s,t);this._sendRtpCapabilities=ee.getSendRtpCapabilities(l),b.debug("load() | got sending RTP capabilities:%o",this._sendRtpCapabilities),ee.validateAndNormalizeRtpCapabilities(this._sendRtpCapabilities),this._canProduceByKind.audio=ee.canSend("audio",this._sendRtpCapabilities),this._canProduceByKind.video=ee.canSend("video",this._sendRtpCapabilities),this._sctpCapabilities=await i(),ee.validateSctpCapabilities(this._sctpCapabilities),b.debug("load() | got native SCTP capabilities:%o",this._sctpCapabilities),b.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 xe.InvalidStateError("not loaded");return this._canProduceByKind[e]}createSendTransport({id:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:l}){return b.debug("createSendTransport()"),this.createTransport({direction:"send",id:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:l})}createRecvTransport({id:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:l}){return b.debug("createRecvTransport()"),this.createTransport({direction:"recv",id:e,iceParameters:t,iceCandidates:s,dtlsParameters:n,sctpParameters:i,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:l})}createTransport({direction:e,id:t,iceParameters:s,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 s!="object")throw new TypeError("missing iceParameters");if(Array.isArray(n)){if(typeof i!="object")throw new TypeError("missing dtlsParameters");if(a&&typeof a!="object")throw new TypeError("wrong sctpParameters");if(d&&typeof d!="object")throw new TypeError("if given, appData must be an object")}else throw new TypeError("missing iceCandidates")}else throw new xe.InvalidStateError("not loaded");let u=new Zd.Transport({direction:e,id:t,iceParameters:s,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",u),u}};pt.Device=Os;function ta(r,e){b.debug('detectDeviceImpl() [userAgent:"%s", userAgentData:%o]',r,e);let t=il(r,e);if(t){if(t>=111)return b.debug("detectDeviceImpl() | using Chrome111 handler"),"Chrome111";if(t>=74)return b.debug("detectDeviceImpl() | using Chrome74 handler"),"Chrome74";b.warn("detectDeviceImpl() | unsupported Chromium based browser/version");return}let s=al(r);if(s){if(s>=120)return b.debug("detectDeviceImpl() | using Firefox120 handler"),"Firefox120";b.warn("detectDeviceImpl() | unsupported Firefox browser/version");return}let n=ol(r);if(n){if(n>=605)return b.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";b.warn("detectDeviceImpl() | unsupported desktop Safari browser/version");return}let i=cl(r);if(i){if(i>=605)return b.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";b.warn("detectDeviceImpl() | unsupported iOS Safari based browser/version");return}if(Mt()){if(typeof RTCPeerConnection<"u"&&typeof RTCRtpTransceiver<"u")return b.debug("detectDeviceImpl() | using ReactNative106 handler"),"ReactNative106";b.warn("detectDeviceImpl() | unsupported react-native-webrtc version without RTCPeerConnection or RTCRtpTransceiver, forgot to call registerGlobals() on it?");return}b.warn('detectDeviceImpl() | device not supported [userAgent:"%s", userAgentData:%o]',r,e)}function il(r,e){if(b.debug("getChromiumMajorVersion()"),Tr(r,e)){b.debug("getChromiumMajorVersion() | this is iOS => undefined");return}if(Mt()){b.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 b.debug(`getChromiumMajorVersion() | Chromium major version based on NavigatorUAData => ${i}`),i}}let t=r?.match(/\b(?:Chrome|Chromium)\/(\w+)/i);if(t?.[1]){let s=Number(t[1]);return b.debug(`getChromiumMajorVersion() | Chromium major version based on User-Agent => ${s}`),s}b.debug("getChromiumMajorVersion() | this is not Chromium => undefined")}function al(r){if(b.debug("getFirefoxMajorVersion()"),Tr(r)){b.debug("getFirefoxMajorVersion() | this is iOS => undefined");return}if(Mt()){b.debug("getFirefoxMajorVersion() | this is React-Native => undefined");return}let e=r?.match(/\bFirefox\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return b.debug(`getFirefoxMajorVersion() | Firefox major version based on User-Agent => ${t}`),t}b.debug("getFirefoxMajorVersion() | this is not Firefox => undefined")}function ol(r){if(b.debug("getMacOSWebKitMajorVersion()"),Tr(r)){b.debug("getMacOSWebKitMajorVersion() | this is iOS => undefined");return}if(Mt()){b.debug("getMacOSWebKitMajorVersion() | this is React-Native => undefined");return}if(!(r&&/\bSafari\b/i.test(r)&&!/\bChrome\b/i.test(r)&&!/\bChromium\b/i.test(r)&&!/\bFirefox\b/i.test(r))){b.debug("getMacOSWebKitMajorVersion() | this is not Safari => undefined");return}let t=r.match(/AppleWebKit\/(\w+)/i);if(t?.[1]){let s=Number(t[1]);return b.debug(`getMacOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${s}`),s}b.debug("getMacOSWebKitMajorVersion() | this is not WebKit => undefined")}function cl(r){if(b.debug("getIOSWebKitMajorVersion()"),!Tr(r)){b.debug("getIOSWebKitMajorVersion() | this is not iOS => undefined");return}if(Mt()){b.debug("getIOSWebKitMajorVersion() | this is React-Native => undefined");return}let e=r?.match(/AppleWebKit\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return b.debug(`getIOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${t}`),t}b.debug("getIOSWebKitMajorVersion() | this is not WebKit => undefined")}function Tr(r,e){return b.debug("isIOS()"),e?.platform==="iOS"?(b.debug("isIOS() | this is iOS based on NavigatorUAData.platform => true"),!0):e?.platform?(b.debug("isIOS() | this is not iOS based on NavigatorUAData.platform => false"),!1):r&&/iPad|iPhone|iPod/.test(r)?(b.debug("isIOS() | this is iOS based on User-Agent => true"),!0):typeof navigator=="object"&&navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1?(b.debug("isIOS() | this is iPadOS 13+ based on User-Agent => true"),!0):(b.debug("isIOS() | this is not iOS => false"),!1)}function Mt(){return b.debug("isReactNative()"),typeof navigator=="object"&&navigator.product==="ReactNative"?(b.debug("isReactNative() | this is React-Native based on navigator.product"),!0):(b.debug("isReactNative() | this is not React-Native => false"),!1)}});var na=P(sa=>{"use strict";var $e=256,Er=[],kr;for(;$e--;)Er[$e]=($e+256).toString(16).substring(1);function dl(){var r=0,e,t="";if(!kr||$e+16>256){for(kr=Array(r=256);r--;)kr[r]=256*Math.random()|0;r=$e=0}for(;r<16;r++)e=kr[$e+r],r==6?t+=Er[e&15|64]:r==8?t+=Er[e&63|128]:t+=Er[e],r&1&&r>1&&r<11&&(t+="-");return $e++,t}sa.v4=dl});var ia=P(Pr=>{"use strict";Object.defineProperty(Pr,"__esModule",{value:!0});Pr.FakeEventTarget=void 0;var Ns=class{listeners={};addEventListener(e,t,s){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof s=="object"&&s.once===!0}))}removeEventListener(e,t,s){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(n=>n.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new Error("invalid event object");let t=this.listeners[e.type];if(!t)return!0;for(let s of[...t]){try{s.callback.call(this,e)}catch(n){setTimeout(()=>{throw n},0)}s.once&&this.removeEventListener(e.type,s.callback)}return!e.defaultPrevented}};Pr.FakeEventTarget=Ns});var aa=P(xr=>{"use strict";Object.defineProperty(xr,"__esModule",{value:!0});xr.FakeEvent=void 0;var js=class{NONE=0;CAPTURING_PHASE=1;AT_TARGET=2;BUBBLING_PHASE=3;type;bubbles;cancelable;defaultPrevented=!1;composed=!1;currentTarget=null;eventPhase=this.NONE;isTrusted=!0;target=null;timeStamp=0;cancelBubble=!1;returnValue=!0;srcElement=null;constructor(e,t={}){this.type=e,this.bubbles=t.bubbles??!1,this.cancelable=t.cancelable??!1}preventDefault(){this.cancelable&&(this.defaultPrevented=!0)}stopPropagation(){}stopImmediatePropagation(){}composedPath(){return[]}initEvent(e,t,s){}};xr.FakeEvent=js});var oa=P(Fs=>{"use strict";Object.defineProperty(Fs,"__esModule",{value:!0});Fs.clone=ll;function ll(r){if(r!==void 0)return Number.isNaN(r)?NaN:typeof structuredClone=="function"?structuredClone(r):JSON.parse(JSON.stringify(r))}});var da=P(Ir=>{"use strict";Object.defineProperty(Ir,"__esModule",{value:!0});Ir.FakeMediaStreamTrack=void 0;var ca=na(),ul=ia(),ht=aa(),Dr=oa(),$s=class r extends ul.FakeEventTarget{#m;#u;#p;#e;#r;#t;#s;#h;#n;#f;#i;#a=null;#o=null;#c=null;#d=null;#l=null;constructor({kind:e,id:t,label:s,contentHint:n,enabled:i,muted:a,readyState:o,capabilities:c,constraints:l,settings:d,data:u}){super(),this.#m=t??(0,ca.v4)(),this.#u=e,this.#p=s??"",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=u??{}}get id(){return this.#m}get kind(){return this.#u}get label(){return this.#p}get contentHint(){return this.#s}set contentHint(e){this.#s=e}get enabled(){return this.#r}set enabled(e){let t=this.#r!==e;this.#r=e,t&&this.dispatchEvent(new ht.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,s){super.addEventListener(e,t,s)}removeEventListener(e,t,s){super.removeEventListener(e,t,s)}stop(){this.#e!=="ended"&&(this.#e="ended",this.dispatchEvent(new ht.FakeEvent("stopped")))}clone({id:e,data:t}={}){return new r({id:e??(0,ca.v4)(),kind:this.#u,label:this.#p,contentHint:this.#s,enabled:this.#r,muted:this.#t,readyState:this.#e,capabilities:(0,Dr.clone)(this.#h),constraints:(0,Dr.clone)(this.#n),settings:(0,Dr.clone)(this.#f),data:t??(0,Dr.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 ht.FakeEvent("stopped")),this.dispatchEvent(new ht.FakeEvent("ended")))}remoteMute(){this.#t||(this.#t=!0,this.dispatchEvent(new ht.FakeEvent("mute")))}remoteUnmute(){this.#t&&(this.#t=!1,this.dispatchEvent(new ht.FakeEvent("unmute")))}};Ir.FakeMediaStreamTrack=$s});var la=P(Lr=>{"use strict";Object.defineProperty(Lr,"__esModule",{value:!0});Lr.FakeEventTarget=void 0;var Us=class{listeners={};addEventListener(e,t,s){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof s=="object"&&s.once===!0}))}removeEventListener(e,t,s){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(n=>n.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new Error("invalid event object");let t=this.listeners[e.type];if(!t)return!0;for(let s of[...t]){try{s.callback.call(this,e)}catch(n){setTimeout(()=>{throw n},0)}s.once&&this.removeEventListener(e.type,s.callback)}return!e.defaultPrevented}};Lr.FakeEventTarget=Us});var ha=P(Ar=>{"use strict";Object.defineProperty(Ar,"__esModule",{value:!0});Ar.FakeHandler=void 0;var pl=da(),hl=Z(),fl=V(),ft=Me(),qs=me(),pa=re(),ml=la(),U=new fl.Logger("FakeHandler"),ua="FakeHandler",Bs=class r extends hl.EnhancedEventEmitter{_closed=!1;_fakeParameters;_getSendExtendedRtpCapabilities;_cname=`CNAME-${ft.generateRandomNumber()}`;_defaultSendStreamId=`${ft.generateRandomNumber()}`;_transportReady=!1;_nextLocalId=1;_tracks=new Map;_nextSctpStreamId=0;static createFactory(e){return{name:ua,factory:t=>new r(t,e),getNativeRtpCapabilities:async({direction:t})=>(U.debug("getNativeRtpCapabilities() [direction:%o]",t),r.getLocalRtpCapabilities(e)),getNativeSctpCapabilities:async()=>(U.debug("getNativeSctpCapabilities()"),e.generateNativeSctpCapabilities())}}static getLocalRtpCapabilities(e){let t=e.generateNativeRtpCapabilities();return qs.validateAndNormalizeRtpCapabilities(t),t}constructor({getSendExtendedRtpCapabilities:e},t){super(),U.debug("constructor()"),this._getSendExtendedRtpCapabilities=e,this._fakeParameters=t}get name(){return ua}close(){U.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(),U.debug("updateIceServers()")}async restartIce(e){this.assertNotClosed(),U.debug("restartIce()")}async getTransportStats(){return this.assertNotClosed(),new Map}async send({track:e,streamId:t,encodings:s,codecOptions:n,codec:i}){this.assertNotClosed(),U.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),this._transportReady||await this.setupTransport({localDtlsRole:"server"});let a=r.getLocalRtpCapabilities(this._fakeParameters),o=this._getSendExtendedRtpCapabilities(a),c=qs.getSendingRtpParameters(e.kind,o);c.codecs=qs.reduceCodecs(c.codecs,i);let l=c.codecs.some(u=>/.+\/rtx$/i.test(u.mimeType));c.mid=`mid-${ft.generateRandomNumber()}`,c.msid=`${t??"-"} ${e.id}`,s||(s=[{}]);for(let u of s)u.ssrc=ft.generateRandomNumber(),l&&(u.rtx={ssrc:ft.generateRandomNumber()});c.encodings=s,c.rtcp={cname:this._cname,reducedSize:!0,mux:!0},c.msid=`${t??this._defaultSendStreamId} ${e.id}`;let d=this._nextLocalId++;return this._tracks.set(d,e),{localId:String(d),rtpParameters:c}}async stopSending(e){if(U.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?U.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):U.debug("replaceTrack() [localId:%s, no track]",e),this._tracks.delete(Number(e)),this._tracks.set(Number(e),t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),U.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),U.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"}),U.debug("sendDataChannel()");let t=new Mr({id:this._nextSctpStreamId++,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:e.label,protocol:e.protocol}),s={streamId:this._nextSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits};return{dataChannel:t,sctpStreamParameters:s}}async receive(e){this.assertNotClosed();let t=[];for(let s of e){let{trackId:n,kind:i}=s;this._transportReady||await this.setupTransport({localDtlsRole:"client"}),U.debug("receive() [trackId:%s, kind:%s]",n,i);let a=this._nextLocalId++,o=new pl.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)U.debug("stopReceiving() [localId:%s]",t),this._tracks.delete(Number(t))}async pauseReceiving(e){this.assertNotClosed()}async resumeReceiving(e){this.assertNotClosed()}async getReceiverStats(e){return this.assertNotClosed(),new Map}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:s}){return this.assertNotClosed(),this._transportReady||await this.setupTransport({localDtlsRole:"client"}),U.debug("receiveDataChannel()"),{dataChannel:new Mr({id:e.streamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:t,protocol:s})}}getDataChannelMaxMessageSize(){return 5e5}async setupTransport({localDtlsRole:e,localSdpObject:t}){let s=ft.clone(this._fakeParameters.generateLocalDtlsParameters());e&&(s.role=e),this.emit("@connectionstatechange","connecting"),await new Promise((n,i)=>this.emit("@connect",{dtlsParameters:s},n,i)),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new pa.InvalidStateError("method called in a closed handler")}};Ar.FakeHandler=Bs;var Mr=class extends ml.FakeEventTarget{_id;_negotiated=!0;_ordered;_maxPacketLifeTime;_maxRetransmits;_label;_protocol;_readyState="connecting";_bufferedAmount=0;_bufferedAmountLowThreshold=0;_binaryType="arraybuffer";_onopen=null;_onclosing=null;_onclose=null;_onmessage=null;_onbufferedamountlow=null;_onerror=null;constructor({id:e,ordered:t=!0,maxPacketLifeTime:s=null,maxRetransmits:n=null,label:i="",protocol:a=""}){super(),U.debug(`constructor() [id:${e}, ordered:${t}, maxPacketLifeTime:${s}, maxRetransmits:${n}, label:${i}, protocol:${a}`),this._id=e,this._ordered=t,this._maxPacketLifeTime=s,this._maxRetransmits=n,this._label=i,this._protocol=a}get id(){return this._id}get negotiated(){return this._negotiated}get ordered(){return this._ordered}get maxPacketLifeTime(){return this._maxPacketLifeTime}get maxRetransmits(){return this._maxRetransmits}get label(){return this._label}get protocol(){return this._protocol}get readyState(){return this._readyState}get bufferedAmount(){return this._bufferedAmount}get bufferedAmountLowThreshold(){return this._bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._bufferedAmountLowThreshold=e}get binaryType(){return this._binaryType}set binaryType(e){this._binaryType=e}get onopen(){return this._onopen}set onopen(e){this._onopen&&this.removeEventListener("open",this._onopen),this._onopen=e,e&&this.addEventListener("open",e)}get onclosing(){return this._onclosing}set onclosing(e){this._onclosing&&this.removeEventListener("closing",this._onclosing),this._onclosing=e,e&&this.addEventListener("closing",e)}get onclose(){return this._onclose}set onclose(e){this._onclose&&this.removeEventListener("close",this._onclose),this._onclose=e,e&&this.addEventListener("close",e)}get onmessage(){return this._onmessage}set onmessage(e){this._onmessage&&this.removeEventListener("message",this._onmessage),this._onmessage=e,e&&this.addEventListener("message",e)}get onbufferedamountlow(){return this._onbufferedamountlow}set onbufferedamountlow(e){this._onbufferedamountlow&&this.removeEventListener("bufferedamountlow",this._onbufferedamountlow),this._onbufferedamountlow=e,e&&this.addEventListener("bufferedamountlow",e)}get onerror(){return this._onerror}set onerror(e){this._onerror&&this.removeEventListener("error",this._onerror),this._onerror=e,e&&this.addEventListener("error",e)}addEventListener(e,t,s){super.addEventListener(e,t,s)}removeEventListener(e,t,s){super.removeEventListener(e,t,s)}close(){["closing","closed"].includes(this._readyState)||(this._readyState="closed")}send(e){if(this._readyState!=="open")throw new pa.InvalidStateError("not open")}}});var fa=P(he=>{"use strict";Object.defineProperty(he,"__esModule",{value:!0});he.generateRouterRtpCapabilities=gl;he.generateNativeRtpCapabilities=_l;he.generateNativeSctpCapabilities=vl;he.generateLocalDtlsParameters=wl;he.generateTransportRemoteParameters=yl;he.generateProducerRemoteParameters=bl;he.generateConsumerRemoteParameters=Sl;he.generateDataProducerRemoteParameters=Rl;he.generateDataConsumerRemoteParameters=Cl;var K=Me();function te(){return String(K.generateRandomNumber())}function gl(){return K.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 _l(){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 vl(){return K.deepFreeze({numStreams:{OS:2048,MIS:2048}})}function wl(){return K.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 yl(){return{id:te(),iceParameters:K.deepFreeze({iceLite:!0,password:"yku5ej8nvfaor28lvtrabcx0wkrpkztz",usernameFragment:"h3hk1iz6qqlnqlne"}),iceCandidates:K.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:K.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:K.deepFreeze({port:5e3,OS:2048,MIS:2048,maxMessageSize:2e6})}}function bl(){return K.deepFreeze({id:te()})}function Sl({id:r,codecMimeType:e}={}){switch(e){case"audio/opus":return{id:r??te(),producerId:te(),kind:"audio",rtpParameters:K.deepFreeze({codecs:[{mimeType:"audio/opus",payloadType:100,clockRate:48e3,channels:2,rtcpFeedback:[{type:"transport-cc"}],parameters:{useinbandfec:1,foo:"bar"}}],encodings:[{ssrc:46687003}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:ietf:params:rtp-hdrext:ssrc-audio-level",id:10}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"audio/ISAC":return{id:r??te(),producerId:te(),kind:"audio",rtpParameters:K.deepFreeze({codecs:[{mimeType:"audio/ISAC",payloadType:111,clockRate:16e3,channels:1,rtcpFeedback:[{type:"transport-cc"}],parameters:{}}],encodings:[{ssrc:46687004}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"video/VP8":return{id:r??te(),producerId:te(),kind:"video",rtpParameters:K.deepFreeze({codecs:[{mimeType:"video/VP8",payloadType:101,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"x-google-start-bitrate":1500}},{mimeType:"video/rtx",payloadType:102,clockRate:9e4,rtcpFeedback:[],parameters:{apt:101}}],encodings:[{ssrc:99991111,rtx:{ssrc:99991112}}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",id:4},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:3gpp:video-orientation",id:11},{uri:"urn:ietf:params:rtp-hdrext:toffset",id:12}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"video/H264":return{id:r??te(),producerId:te(),kind:"video",rtpParameters:K.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 Rl(){return K.deepFreeze({id:te()})}function Cl({id:r}={}){return{id:r??te(),dataProducerId:te(),sctpStreamParameters:K.deepFreeze({streamId:666,maxPacketLifeTime:5e3,maxRetransmits:void 0})}}});var Rs=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 Tl=vt();A.debug=Tl.default;A.types=$n();A.version="3.20.0";var Ws=ra();Object.defineProperty(A,"Device",{enumerable:!0,get:function(){return Ws.Device}});Object.defineProperty(A,"detectDevice",{enumerable:!0,get:function(){return Ws.detectDevice}});Object.defineProperty(A,"detectDeviceAsync",{enumerable:!0,get:function(){return Ws.detectDeviceAsync}});var kl=je();Object.defineProperty(A,"parseScalabilityMode",{enumerable:!0,get:function(){return kl.parse}});A.ortc=me();A.enhancedEvents=Z();var El=ha();Object.defineProperty(A,"FakeHandler",{enumerable:!0,get:function(){return El.FakeHandler}});A.testFakeParameters=fa()});var ga=P((Dp,zs)=>{"use strict";var Pl=Object.prototype.hasOwnProperty,Q="~";function At(){}Object.create&&(At.prototype=Object.create(null),new At().__proto__||(Q=!1));function xl(r,e,t){this.fn=r,this.context=e,this.once=t||!1}function ma(r,e,t,s,n){if(typeof t!="function")throw new TypeError("The listener must be a function");var i=new xl(t,s||r,n),a=Q?Q+e:e;return r._events[a]?r._events[a].fn?r._events[a]=[r._events[a],i]:r._events[a].push(i):(r._events[a]=i,r._eventsCount++),r}function Or(r,e){--r._eventsCount===0?r._events=new At:delete r._events[e]}function W(){this._events=new At,this._eventsCount=0}W.prototype.eventNames=function(){var e=[],t,s;if(this._eventsCount===0)return e;for(s in t=this._events)Pl.call(t,s)&&e.push(Q?s.slice(1):s);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};W.prototype.listeners=function(e){var t=Q?Q+e:e,s=this._events[t];if(!s)return[];if(s.fn)return[s.fn];for(var n=0,i=s.length,a=new Array(i);n<i;n++)a[n]=s[n].fn;return a};W.prototype.listenerCount=function(e){var t=Q?Q+e:e,s=this._events[t];return s?s.fn?1:s.length:0};W.prototype.emit=function(e,t,s,n,i,a){var o=Q?Q+e:e;if(!this._events[o])return!1;var c=this._events[o],l=arguments.length,d,u;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),l){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,s),!0;case 4:return c.fn.call(c.context,t,s,n),!0;case 5:return c.fn.call(c.context,t,s,n,i),!0;case 6:return c.fn.call(c.context,t,s,n,i,a),!0}for(u=1,d=new Array(l-1);u<l;u++)d[u-1]=arguments[u];c.fn.apply(c.context,d)}else{var p=c.length,m;for(u=0;u<p;u++)switch(c[u].once&&this.removeListener(e,c[u].fn,void 0,!0),l){case 1:c[u].fn.call(c[u].context);break;case 2:c[u].fn.call(c[u].context,t);break;case 3:c[u].fn.call(c[u].context,t,s);break;case 4:c[u].fn.call(c[u].context,t,s,n);break;default:if(!d)for(m=1,d=new Array(l-1);m<l;m++)d[m-1]=arguments[m];c[u].fn.apply(c[u].context,d)}}return!0};W.prototype.on=function(e,t,s){return ma(this,e,t,s,!1)};W.prototype.once=function(e,t,s){return ma(this,e,t,s,!0)};W.prototype.removeListener=function(e,t,s,n){var i=Q?Q+e:e;if(!this._events[i])return this;if(!t)return Or(this,i),this;var a=this._events[i];if(a.fn)a.fn===t&&(!n||a.once)&&(!s||a.context===s)&&Or(this,i);else{for(var o=0,c=[],l=a.length;o<l;o++)(a[o].fn!==t||n&&!a[o].once||s&&a[o].context!==s)&&c.push(a[o]);c.length?this._events[i]=c.length===1?c[0]:c:Or(this,i)}return this};W.prototype.removeAllListeners=function(e){var t;return e?(t=Q?Q+e:e,this._events[t]&&Or(this,t)):(this._events=new At,this._eventsCount=0),this};W.prototype.off=W.prototype.removeListener;W.prototype.addListener=W.prototype.on;W.prefixed=Q;W.EventEmitter=W;typeof zs<"u"&&(zs.exports=W)});var $t=class{_handlers=new Map;_ws;_onMessage;_onOpen;_listeningForOpen=!1;_pendingSends=[];_disposed=!1;constructor(e){this._ws=e,this._onMessage=t=>{if(typeof t.data!="string")return;let s;try{s=JSON.parse(t.data)}catch{console.warn("[ChannelMultiplexer] Failed to parse WebSocket message as JSON");return}if(!s.channel)return;let n=this._handlers.get(s.channel);if(n)for(let i of n)i(s)},this._ws.addEventListener("message",this._onMessage),this._onOpen=()=>{this.flushPendingSends()}}on(e,t){let s=this._handlers.get(e);return s||(s=new Set,this._handlers.set(e,s)),s.add(t),()=>{s.delete(t),s.size===0&&this._handlers.delete(e)}}emit(e,t){if(this._disposed)return;let s=JSON.stringify({channel:e,...t});if(this._ws.readyState===WebSocket.OPEN){this._ws.send(s);return}this._ws.readyState===WebSocket.CONNECTING&&(this._pendingSends.push(s),this.listenForOpen())}dispose(){this._disposed=!0,this._pendingSends=[],this._handlers.clear(),this._ws.removeEventListener("message",this._onMessage),this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1}flushPendingSends(){if(this._disposed||this._ws.readyState!==WebSocket.OPEN)return;this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1;let e=this._pendingSends;this._pendingSends=[];for(let t of e)this._ws.send(t)}listenForOpen(){this._listeningForOpen||(this._listeningForOpen=!0,this._ws.addEventListener("open",this._onOpen))}},rn=class{_handlers=new Map;_pendingSends=[];_target=null;_targetUnsubscribes=[];_disposed=!1;setTarget(e){if(this._disposed)return;this.detachTarget(),this._target=e;for(let[s,n]of this._handlers)for(let i of n)this._targetUnsubscribes.push(e.on(s,i));let t=this._pendingSends;this._pendingSends=[];for(let s of t)e.emit(s.channel,s.data)}rewriteSessionChannels(e,t){if(e===t)return;let s=`session:${e}:`,n=`session:${t}:`,i=new Map;for(let[a,o]of this._handlers)i.set(a.startsWith(s)?n+a.slice(s.length):a,o);this._handlers=i,this._pendingSends=this._pendingSends.map(a=>({...a,channel:a.channel.startsWith(s)?n+a.channel.slice(s.length):a.channel}))}on(e,t){if(this._disposed)return()=>{};let s=this._handlers.get(e);s||(s=new Set,this._handlers.set(e,s)),s.add(t);let n=this._target?.on(e,t);return n&&this._targetUnsubscribes.push(n),()=>{s?.delete(t),s?.size===0&&this._handlers.delete(e),n?.(),n&&(this._targetUnsubscribes=this._targetUnsubscribes.filter(i=>i!==n))}}emit(e,t){if(!this._disposed){if(this._target){this._target.emit(e,t);return}this._pendingSends.push({channel:e,data:t})}}dispose(){this._disposed=!0,this._pendingSends=[],this._handlers.clear(),this.detachTarget()}detachTarget(){for(let e of this._targetUnsubscribes)e();this._targetUnsubscribes=[],this._target=null}};var sn=class extends Error{code="session_end_unavailable";constructor(e="[urun] this session handle cannot terminally end the session; disconnect the viewer instead",t){super(e),this.name="SessionEndUnavailableError",t?.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}},oe=class extends Error{code;httpStatus;requestId;sessionId;constructor(e,t){super(e),this.name="SessionEndError",this.code=t.code??"session_end_failed",this.httpStatus=t.httpStatus,this.requestId=t.requestId,this.sessionId=t.sessionId,t.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}},De=class extends Error{code;httpStatus;constructor(e,t){super(e),this.name="SessionDirectoryError",this.code=t?.code??"session_directory_failed",this.httpStatus=t?.httpStatus,t?.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}},qe=class extends Error{requestId;code;constructor(e,t){super(e),this.name="RequestError",this.requestId=t?.requestId,this.code=t?.code,t?.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}},nn=class extends qe{timeoutMs;constructor(e,t){super(`[urun] request timed out after ${e}ms`,{requestId:t}),this.name="RequestTimeoutError",this.timeoutMs=e,Object.setPrototypeOf(this,new.target.prototype)}},an=class extends qe{timeoutMs;constructor(e,t){super(`[urun] request doc-sync did not establish within ${e}ms \u2014 the request was never delivered to the runtime (the session doc never synced with the session-server; check the doc-sync transport / connection)`,{requestId:t}),this.name="RequestDocSyncError",this.timeoutMs=e,Object.setPrototypeOf(this,new.target.prototype)}},on=class extends Error{stream;owner;attempted;constructor(e,t,s){super(`[urun] stream "${e}" is already produced by the ${t}; this (${s}) peer cannot also produce it \u2014 a named stream has exactly one producer (consume it instead, or use a distinct name for the reverse direction)`),this.name="StreamDirectionConflict",this.stream=e,this.owner=t,this.attempted=s,Object.setPrototypeOf(this,new.target.prototype)}},qt=15e3,Ut=class extends Error{kind;stream;timeoutMs;constructor(e,t){let s=t?.timeoutMs??qt,n=t?.stream??e,i=n!==e?` "${n}"`:"";super(`[urun] SFU did not ack producer ${e}${i} within ${Math.round(s/1e3)}s \u2014 the server never replied to 'produce'. The runtime's inbound port for this stream is likely unadvertised (a cold or capacity-queued runtime), so the SFU has nothing to forward the track to; the published track never reached the runtime.`),this.name="ProduceAckTimeout",this.kind=e,this.stream=n,this.timeoutMs=s,Object.setPrototypeOf(this,new.target.prototype)}},cn=class extends qe{constructor(e){super("[urun] request aborted",{requestId:e}),this.name="RequestAbortError",Object.setPrototypeOf(this,new.target.prototype)}},dn=class extends qe{constructor(e){super("[urun] request cancelled: session disconnected",{requestId:e}),this.name="RequestCancelledError",Object.setPrototypeOf(this,new.target.prototype)}},Ya=/^\[urun\] (?:timed out waiting for session allocation at|session allocation wait expired at|session allocation poll failed at|session allocation failed at|session allocation at|session create at) \S+(?::[ \t]+|[ \t]+|$)/;function Xa(r){return r.replace(/\bhttps?:\/\/[^\s)]+/g,"the session gateway")}function ln(r){let e=r.replace(Ya,"");return Xa(e||r.replace(/^\[urun\] /,""))}function un(r){let e=r.error?.httpStatus;if(e===401||e===403)return"The backend rejected this client \u2014 sign in again or check the auth token / org access.";if(r.error?.code==="session_archived")return"This session is archived \u2014 call directory.unarchive(sessionId) (the session directory's un-archive verb), then reconnect with the same id.";let t=r.error?.retryAfterSeconds,s=t!==void 0?` It asked for ${Math.round(t)}s.`:"";return e===429?`The backend is shedding load \u2014 its admission queue is full, so this is capacity, not your request.${s} The SDK already retried with backoff; try again in a moment.`:e===408?`The request timed out before the backend answered \u2014 that is a timeout, not a verdict on your request.${s} The SDK already retried with backoff; try again in a moment.`:e!==void 0&&e>=500?"The backend is having an outage (nothing is wrong with your request) \u2014 the SDK already retried with backoff, so try again shortly and report the status above if it persists.":"The backend could not create a session \u2014 check the app/function name and auth, then retry."}function $r(r,e){let t=e.error?.reason,s=e.elapsedMs!==void 0?Math.round(e.elapsedMs/1e3):void 0;switch(r){case"create-failed":{let n=e.error?.httpStatus!==void 0?` (HTTP ${e.error.httpStatus})`:"",i=e.error?.code;return i==="queue_ttl_expired"||i==="stale_poll_expired"?{message:`[urun] the queued session REQUEST timed out while waiting${n} (${i}) \u2014 the session itself is untouched`,hint:"Nothing was lost and nothing needs replacing: connect again with the same session and the control plane re-admits the request (a poll that arrives in time re-drives it on its own)."}:i==="session_archived"?{message:`[urun] this session is archived${n} \u2014 un-archive it before resuming`+(t?`: ${ln(t)}`:""),hint:un(e)}:i==="client_release"?{message:`[urun] the session's admission request was closed (client_release)${n} \u2014 this dial cannot attach through it`,hint:"The request row is terminal; retrying the same dial only repeats the 410. Create a fresh session (a new dial). The SDK itself never closes a request \u2014 a whenLive timeout only rejects."}:{message:`[urun] session create failed${n}${t?`: ${ln(t)}`:""}`,hint:un(e)}}case"never-live":{let n=s!==void 0?` after ${s}s`:"",i=` (last server status: ${e.lastServerStatus??"none"})`;return e.error?.code==="expired"?{message:`[urun] session${e.sessionId?` ${e.sessionId}`:""} expired before media connected${n} \u2014 the control plane reclaims sessions whose media transport never establishes (~80s after create)`,hint:"Retry to mint a fresh session, and connect promptly after start (a backgrounded tab or paused debugger can miss the window)."}:e.sessionId?{message:`[urun] session ${e.sessionId} was created but never went live${n}${i} \u2014 the backend is busy or wedged (no runtime picked the session up)`,hint:"The backend is at capacity or stuck. Retry in a moment; if it persists, the session id above is what to report."}:{message:`[urun] no session went live${n} (phase=${e.phase}${e.lastServerStatus?`, last server status: ${e.lastServerStatus}`:""})`,hint:"The session never got past admission. Retry; if it persists, check the backend deployment."}}case"transport-failed":return e.error?.code==="transport-consumed"?{message:`[urun] the retry reused a session whose media transport was already connected${e.sessionId?` (id ${e.sessionId})`:""} \u2014 the session was consumed by an earlier attempt`,hint:"Start a fresh session (reload the page) \u2014 this session leg cannot be connected again."}:{message:`[urun] media/transport connection failed${t?`: ${t}`:""} (transport state: ${e.transportState})`,hint:"The network is likely blocking the media connection (WebRTC/WebSocket) \u2014 try a different network or disable VPN/proxy, then retry."};case"media-permission":return{message:`[urun] microphone/camera unavailable${t?`: ${t}`:""}`,hint:e.error?.code==="NotFoundError"||e.error?.code==="OverconstrainedError"?"No matching input device was found \u2014 connect or select a microphone/camera and retry.":"Allow microphone/camera access for this site (browser permission \u2014 or, when embedded, the parent page's permissions policy), then retry."};case"runtime-failed":return{message:`[urun] session${e.sessionId?` ${e.sessionId}`:""} failed at runtime${t?`: ${t}`:""}`,hint:"The session function crashed on the backend \u2014 check the app logs. The session itself is parked, not gone: attach to it again once the app is fixed."};case"produce-timeout":return{message:`[urun] publishing a track timed out${t?`: ${t}`:""} \u2014 the SFU never acked the produce (the runtime\u2019s inbound port for the stream was not advertised in time)`,hint:"The runtime was still cold or the backend was at capacity when the track was published. Retry in a moment; if it persists, the backend never opened the stream to receive it."};case"insufficient-credits":return{message:`[urun] session create refused${e.error?.httpStatus!==void 0?` (HTTP ${e.error.httpStatus})`:""} \u2014 the org has insufficient credits${t?`: ${t}`:""}`,hint:"Out of credits \u2014 add credits to keep running sessions."}}}var Te=class extends Error{kind;status;hint;constructor(e,t,s){let{message:n,hint:i}=$r(e,t);super(n),this.name="SessionFailedError",this.kind=e,this.status=t,this.hint=i,s?.cause!==void 0&&(this.cause=s.cause),Object.setPrototypeOf(this,new.target.prototype)}};function fu(r,e){if(r instanceof Te)return r;let t=r instanceof Error?r:new Error(String(r)),s={phase:e?.phase??"idle",transportState:e?.transportState??"disconnected",...e,error:{reason:t.message,code:t.name,kind:"media-permission"}};return new Te("media-permission",s,{cause:r})}var _t=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)}},B=class extends Error{httpStatus;code;balanceCredits;platformStatus;retryAfterSeconds;constructor(e,t){super(e),this.name="SessionAllocationError",this.httpStatus=t?.httpStatus,this.code=t?.code,this.balanceCredits=t?.balanceCredits,this.platformStatus=t?.platformStatus,this.retryAfterSeconds=t?.retryAfterSeconds,t?.cause!==void 0&&(this.cause=t.cause),Object.setPrototypeOf(this,new.target.prototype)}};function Bt(r){if(!r)return!1;let e=typeof r=="string"?r:r.name;return e==="queued"||e==="unavailable"||e==="provisioning"||e==="waiting_for_capacity"}function _u(r){return r?(typeof r=="string"?r:r.name)==="paused":!1}var Za=45e3,pn=6e5;function vu(r,e={}){let{signal:t}=e;return new Promise((s,n)=>{if(t?.aborted){n(t.reason instanceof Error?t.reason:new Error("whenLive aborted"));return}if(r.phase?.name==="live"){s();return}if(r.phase?.name==="error"){let _=r.phase,v=r.status??{phase:_.name,transportState:"disconnected",sessionId:_.sessionId,requestId:_.requestId,queue:_.queue,error:_.error,region:_.region};n(new Te(_.error?.kind??"transport-failed",v));return}let a,o,c=!1,l=_=>{c||(c=!0,o!==void 0&&clearTimeout(o),t?.removeEventListener("abort",d),a?.(),_?n(_):s())},d=()=>{l(t?.reason instanceof Error?t.reason:new Error("whenLive aborted"))};t?.addEventListener("abort",d,{once:!0});let u=()=>{let _=r.phase;return r.status??{phase:_?.name??"idle",transportState:"disconnected",sessionId:_?.sessionId,requestId:_?.requestId,queue:_?.queue,error:_?.error,region:_?.region}},p=_=>l(new Te(_,u())),m=e.timeout!==void 0,f=Date.now(),h=m?e.timeout:Za,g=()=>{o!==void 0&&(clearTimeout(o),o=void 0)},w=()=>{if(c||h<=0)return;clearTimeout(o);let _=f+h-Date.now();o=setTimeout(()=>{if(!m&&Bt(r.phase?.name)){o=void 0;return}let v=u();v.elapsedMs===void 0&&(v.elapsedMs=h),o=void 0,t?.removeEventListener("abort",d),a?.(),a=void 0,l(new Te("never-live",v))},Math.max(0,_))},R=_=>{!m||c||h<=0||_?.runtime?.wake?.expectedWakePath==="cold-boot"&&(pn<=h||(h=pn,w()))},x=_=>{if(!c){if(!m&&Bt(_?.name)){g();return}if(m){R(_),o===void 0&&h>0&&w();return}o===void 0&&(f=Date.now(),w())}};a=r.onPhase(_=>{_?.name==="live"?l():_?.name==="error"?p(_.error?.kind??"transport-failed"):x(_)}),c||x(r.phase),c&&a()})}function wu(r){switch(r.name){case"idle":return"Initializing\u2026";case"unavailable":return"Starting the app\u2026";case"queued":return r.queue?`Waiting in queue (position ${r.queue.position} of ${r.queue.depth})\u2026`:r.runtime?.state==="busy"?"All runtimes are busy \u2014 waiting for capacity\u2026":"Waiting for capacity\u2026";case"provisioning":return r.runtime?.state==="starting"?"Starting model\u2026":"Provisioning\u2026";case"waiting_for_capacity":return r.queue?`Waiting for GPU capacity (position ${r.queue.position} of ${r.queue.depth})\u2026`:"Waiting for GPU capacity";case"connecting":return"Connecting\u2026";case"live":return"Live";case"paused":return eo(r.reason);case"error":{if(r.error?.kind==="insufficient-credits")return"Out of credits \u2014 add credits to keep running sessions.";let e=r.error?.kind;if(e){let{message:t,hint:s}=$r(e,{phase:r.name,transportState:"disconnected",sessionId:r.sessionId,requestId:r.requestId,queue:r.queue,error:r.error});return`${t.replace(/^\[urun\] /,"")} \u2014 ${s}`}return r.error?.reason?`Session failed \u2014 ${r.error.reason}`:"Session failed"}case"unknown":return r.reason?`Session in an unrecognized state ("${r.reason}") \u2014 the client SDK may be out of date`:"Session in an unrecognized state \u2014 the client SDK may be out of date"}}function eo(r){switch(r){case"client_ended":return"Paused \u2014 you hung up. Resume any time.";case"client_paused":return"Paused \u2014 you paused it. Resume any time.";case"client_detached":return"Paused \u2014 this device let go. Resume any time.";case"client_gone":return"Paused \u2014 every device disconnected. Resume any time.";case"session_ended":case"ended":case"closed":return"Paused \u2014 the compute was released. Resume any time.";case"idle_timeout":return"Paused \u2014 idle. Resume any time.";case"max_session_age":return"Paused \u2014 reached its maximum length. Resume any time.";case"credits_exhausted":return"Paused \u2014 out of credits. Add credits, then resume.";case"capacity_pressure":return"Paused \u2014 the GPU was reclaimed while the platform was under load. Resume any time.";case"control_plane_release":return"Paused \u2014 the platform reclaimed the compute. Resume any time.";case"superseded":return"Paused \u2014 another client attached. Resume any time.";case"superseded_by_redial":return"Paused \u2014 a newer connection from this session took over. Resume any time.";case"connect_deadline":return"Paused \u2014 the runtime never finished connecting in time. Resume to try again.";case"adoption_expired":return"Paused \u2014 the runtime was assigned but never picked the session up. Resume to try again.";case"media_lane_bind_failed":return"Paused \u2014 the audio/video lane could not be set up. Resume to try again.";case"lease_lost":return"Paused \u2014 the runtime stopped renewing its lease. Resume any time.";case"presence_unconfirmed":return"Paused \u2014 the platform could not confirm anyone was still attached. Resume any time.";case"runtime_inert":case"assignment_unconfirmable":return"Paused \u2014 the runtime never acknowledged its assignment. Resume to try again.";case"runtime_unreachable":return"Paused \u2014 the platform could not reach the runtime. Resume to try again.";case"runtime_silent":return"Paused \u2014 the runtime stopped sending audio/video. Resume to try again.";case"assignment_undelivered":return"Paused \u2014 the assignment never reached a runtime. Resume to try again.";case"dispatch_released":return"Paused \u2014 the worker finished and gave its GPU seat back. Resume any time.";case"dispatch_parked":return"Paused \u2014 the worker finished and parked the session. Resume any time.";case"runtime_swap_exhausted":return"Paused \u2014 the platform ran out of runtimes to try. Resume any time.";case"dispatch_failed":return"Paused \u2014 handing the session to a worker did not succeed. Resume to try again.";default:return r?`Paused \u2014 ${r}. Resume any time.`:"Paused \u2014 resume any time."}}function ke(){return typeof process<"u"&&process.stdout!=null&&typeof process.stdout.write=="function"}function Wt(){return typeof window>"u"&&typeof process<"u"&&process.versions!=null&&process.versions.node!=null}function hn(){return Wt()?"Chrome111":void 0}function fn(){return typeof globalThis.RTCPeerConnection<"u"?null:"the WebRTC peer globals (RTCPeerConnection) are not installed in this runtime"}function mn(){if(!Wt())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 Ur=500,Ht=15e3,Be=6;function Vt(r,e=Math.random){if(!Number.isFinite(r)||r<0)throw new Error(`[urun] computeBackoffDelay: attempt must be a non-negative number, got ${r}`);let t=Math.min(Ht,Ur*2**r);return Math.round(e()*t)}function qr(r){if(r instanceof B){let e=r.httpStatus;return e===408||e===429||e!==void 0&&e>=500}return r instanceof Error?r.name==="TypeError"||r.name==="TimeoutError"||r.name==="AbortError":!1}var gn=10,to=.5,zt=gn;function Br(){return zt<1?!1:(zt-=1,!0)}function Wr(){zt=Math.min(gn,zt+to)}var ro="session-api.prod.cloud.urun.sh",so=["https://session-api.use2.prod.cloud.urun.sh","https://session-api.usw2.prod.cloud.urun.sh"];function Y(r){return r.trim().replace(/\/+$/,"")}function Hr(r,e){let t=[],s=n=>{if(!n)return;let i=Y(n);i&&!t.includes(i)&&t.push(i)};s(r);for(let n of e??[])s(n);for(let n of Ao(r))s(n);return t}function Eu(r){try{if(typeof fetch!="function")return;let e=Y(r.baseUrl),t=r.sessionId?`${e}/api/sessions/${encodeURIComponent(r.sessionId)}/end`:`${e}/api/session-requests/${encodeURIComponent(r.requestId)}/cancel`;fetch(t,{method:"POST",headers:r.reason!==void 0?{...de(r,r.jwt),"Content-Type":"application/json"}:de(r,r.jwt),...r.reason!==void 0?{body:JSON.stringify({reason:r.reason})}:{},keepalive:!0}).catch(()=>{})}catch{}}async function Pu(r){try{let e=`${Y(r.baseUrl)}/api/session-requests/${encodeURIComponent(r.requestId)}/cancel`,t=await fe(r);if(r.getAccessToken&&!t)throw new oe("[urun] session request cancel refused: getAccessToken resolved no token (an unauthenticated cancel is never sent)",{requestId:r.requestId,code:"no_access_token"});let s=await fetch(e,{method:"POST",headers:de(r,t),keepalive:!0});if((s.status===401||s.status===403)&&r.getAccessToken){let a=await fe(r,{forceRefresh:!0,reason:"unauthorized"});a&&a!==t&&(s=await fetch(e,{method:"POST",headers:de(r,a),keepalive:!0}))}let n=await ze(s);if(!s.ok)throw new oe(`[urun] session request cancel failed: ${Qt(n,s.status)}`,{requestId:r.requestId,code:n.error_code,httpStatus:s.status});let i=String(n.status??"");if(i==="cancelled"||i==="canceled"||i==="closed")return{status:"canceled",requestId:r.requestId};if(i==="failed"||i==="rejected"||i==="expired")return{status:"canceled",requestId:r.requestId,platformStatus:i};throw new oe(`[urun] session request cancel returned an unrecognized request status ${JSON.stringify(i)} (recognized: cancelled/canceled, closed, failed, rejected, expired)`,{requestId:r.requestId,code:"invalid_release_response",httpStatus:s.status})}catch(e){throw e instanceof oe?e:new oe("[urun] session request cancel failed",{requestId:r.requestId,cause:e})}}async function no(r){let e;try{e=await Vr(r,`/api/sessions/${encodeURIComponent(r.sessionId)}/end`,{method:"POST",keepalive:!0},"session end")}catch(n){if(n instanceof oe)throw n;let i=n;throw new oe(i?.message??"[urun] session end request failed",{sessionId:r.sessionId,...i?.code!==void 0?{code:i.code}:{},...i?.httpStatus!==void 0?{httpStatus:i.httpStatus}:{},cause:n})}let t=String(e.status??""),s=e.pause_reason;if(t==="paused")return{status:"paused",sessionId:String(e.logical_id??e.id??r.sessionId),reason:typeof s=="string"&&s.length>0?s:"client_ended"};throw new oe(`[urun] session end returned ${JSON.stringify(t)} for session ${r.sessionId} \u2014 an end PARKS the session, so the only contract-valid answer is "paused" (a terminal word on this route would be a session-plane terminal write, which is forbidden)`,{sessionId:r.sessionId,code:"invalid_end_response"})}function Sn(r){if(typeof r!="string"||r.length===0)return null;let e=new Date(r);return Number.isFinite(e.getTime())?e:null}var io=120,ao=1e3,oo=20,co=5,lo=500,Rn=1e4,uo=new Set([502,503,504]),po=Be,ho=2,fo=50,_n=1e4;async function vn(r,e){let t=Date.now()+_n;for(;;){await We(fo);let s=await fe(r);if(s)return s;if(Date.now()>=t)throw new B(`[urun] session allocation at ${e} never got an access token: the wired getAccessToken resolved nothing within ${Math.round(_n/1e3)}s (no unauthenticated request was sent)`)}}function mo(r,e){if(!r)return null;try{let t=new URL(r),s=e?new URL(Y(e)):null,n=t.pathname==="/api/sessions/create"||t.pathname==="/api/sessions/create/";return t.protocol!=="https:"||!n||!wo(t,s)?null:Y(t.origin)}catch{return null}}function go(r,e){if(!r||!r.trim())return{outcome:"absent"};if(!_o(e))return{outcome:"bootstrap-only"};let t=r.includes("://")?r:`https://${r}`,s;try{s=new URL(t)}catch{return{outcome:"rejected",reason:"not a parseable URL or host"}}return s.protocol!=="https:"?{outcome:"rejected",reason:`scheme ${s.protocol} is not https:`}:s.pathname!=="/"&&s.pathname!==""?{outcome:"rejected",reason:`expected a bare origin, got path ${s.pathname}`}:Kt(s.hostname)?{outcome:"pinned",base:Y(s.origin)}:{outcome:"rejected",reason:`host ${s.hostname} is outside the urun.sh trust set`}}function _o(r){if(!r)return!1;try{let e=new URL(Y(r));return e.protocol==="https:"&&Kt(e.hostname)}catch{return!1}}function vo(r){let e=Y(r);try{return Y(new URL(e).origin)}catch{return e}}function wo(r,e){return Kt(r.hostname)&&(!e||Kt(e.hostname))}function Kt(r){let e=r.toLowerCase();return e==="urun.sh"||e.endsWith(".urun.sh")}function yo(r){let e=r instanceof B?r.retryAfterSeconds:void 0;return e===void 0||!Number.isFinite(e)||e<=0?0:Math.min(e*1e3,Ht)}function Cn(r,e){let t=yo(e);return t>0?Math.max(r,Date.now()+t):r}async function xu(r){let e=Hr(r.baseUrl,r.fallbackUrls),t=null,s=0,n=e.length>1;for(let i=0;i<Be;i++){for(let a of e)try{let o=await bo(a,r,{pollAttempts:io,retryAfterLimitMs:n?ao:void 0});return Wr(),o}catch(o){if(t=o instanceof Error?o:new Error(String(o)),s=Cn(s,t),t instanceof ce||t instanceof Ie||Co(t))throw t}if(!qr(t))break;if(i+1<Be){if(!Br())break;await We(Math.max(Vt(i),s-Date.now()))}}throw t??new Error("[urun] session allocation failed")}async function bo(r,e,t){let s,n,i,a,o=vo(r),c=0,l=new Set,d=Date.now()+t.pollAttempts*Rn;for(let u=0;u<t.pollAttempts;u++){n=i??await fe(e),i=void 0,e.getAccessToken&&!n&&(n=await vn(e,o));let p=!!s,m=Date.now(),f;if(s){let _=0,v=0,D=F=>{let z=Math.min(Ht,Ur*2**_),N=Math.max(Math.ceil(z/2),Vt(_));return _+=1,Math.min(Math.max(F,N),Math.max(0,d-Date.now()))};for(;;){let F=d-Date.now();if(F<=0)throw Gt(o,!0,a);let z=Math.max(1,Math.min(oo,Math.floor(F/1e3)));m=Date.now();try{f=await fetch(`${o}/api/session-requests/${encodeURIComponent(s)}?wait_s=${z}`,{headers:de(e,n),redirect:"manual",signal:Io((z+co)*1e3)})}catch(q){if(v+=1,v>=po)throw new Ie(`[urun] session allocation poll failed at ${o} after ${v} consecutive transport failures`,{cause:q});let mt=D(0);if(mt<=0)throw Gt(o,!0,a);await We(mt);continue}if(v=0,a=`HTTP ${f.status}`,!uo.has(f.status))break;try{await f.body?.cancel()}catch(q){throw new Ie(`[urun] session allocation poll response cleanup failed at ${o}`,{cause:q})}let N=D(yn(f,{},t.retryAfterLimitMs));if(N<=0)throw Gt(o,!0,a);await We(N)}}else f=await fetch(`${o}/api/sessions/create`,{method:"POST",redirect:"manual",headers:{...de(e,n),"Content-Type":"application/json","Idempotency-Key":e.idempotencyKey},body:JSON.stringify(So(e))});if(f.type==="opaqueredirect"||f.status>=300&&f.status<400){try{await f.body?.cancel()}catch{}throw new ce(`[urun] ${p?"session poll":"session create"} at ${o} answered an HTTP redirect (status ${f.status}) \u2014 browsers cannot follow a cross-origin redirect with credentials; the control plane must emit the JSON redirect envelope ({status:"redirect", location})`)}let h=await ze(f);if(a=typeof h.status=="string"&&h.status?h.status:`HTTP ${f.status}`,!s&&h.status==="redirect"){let _=mo(h.location,o);if(!_)throw new B(`[urun] session create at ${o} answered a redirect envelope without a usable location (${JSON.stringify(h.location??null)}) \u2014 refusing to re-issue an authenticated create to an untrusted target`);if(_===o)throw new B(`[urun] session create at ${o} redirected to ITSELF \u2014 control-plane region apex map misconfiguration`);if(c>=ho)throw new B(`[urun] session create followed ${c} region redirects and was redirected AGAIN (${o} -> ${_}) \u2014 region forward loop, giving up loudly`);c+=1,o=_;continue}if(h.request_id)try{e.onRequest?.({requestId:h.request_id,baseUrl:o,...h.session_id?{sessionId:h.session_id}:{}})}catch{}if(f.ok&&(h.status==="allocated"||!h.status&&!!h.session_id)&&!!h.session_id){let _=h.session_id,v=go(h.session_api_base,o);if(v.outcome==="rejected")throw new ce(`[urun] gateway allocated session ${h.session_id} with an unusable session_api_base (${JSON.stringify(h.session_api_base)}): ${v.reason} \u2014 refusing to pin the session to a region it may not belong to`);if(v.outcome==="pinned"&&v.base!==o&&(o=v.base,h.request_id))try{e.onRequest?.({requestId:h.request_id,baseUrl:o,...h.session_id?{sessionId:h.session_id}:{}})}catch{}let D=kn(h.ws_url,o,_,"gateway allocated session");return{baseUrl:o,sessionId:_,wsUrl:D,endsAt:Sn(h.ends_at),response:h}}if(f.status===202||h.status==="pending"||h.status==="queued"||h.queued){if(s=h.request_id||s,!s)throw new Error("[urun] gateway queued session without request_id");if(e.onAdmission)try{e.onAdmission(Do(h,s))}catch{}let _=Date.now()-m<lo;p&&_&&await We(yn(f,h,t.retryAfterLimitMs));continue}if((f.status===401||f.status===403)&&e.getAccessToken&&h.error_code!=="session_name_not_yours"){let _=n??"";l.add(_);let v=await fe(e,{forceRefresh:!0,reason:"unauthorized"});if(v&&!l.has(v)){i=v;continue}if(v===void 0){let D=await vn(e,o);if(!l.has(D)){i=D;continue}}}let w=Qt(h,f.status),R=h.error_code??(f.status===402?"insufficient_credits":void 0),x=p?Ie:B;throw new x(`[urun] session allocation failed at ${o}: ${w}`,{httpStatus:f.status,code:R,balanceCredits:typeof h.balance_credits=="number"?h.balance_credits:void 0,platformStatus:h.status,retryAfterSeconds:Gr(f,h)})}throw Gt(o,!!s,a)}function Gt(r,e=!1,t){let s=e?Ie:B;return new s(`[urun] session allocation wait expired at ${r} \u2014 the CLIENT-side wait budget elapsed (last server status: ${t??"none received"}; the gateway reported no failure)`)}function de(r,e){let t={"X-Tenant-Id":r.orgId,"X-Auth-Provider":r.authProvider||"default","X-User-Id":"anonymous"};return e&&(t.Authorization=`Bearer ${e}`),t}async function fe(r,e){return r.getAccessToken?await r.getAccessToken(e)??void 0:r.jwt}function So(r){let e=r.priority==="preempt";return{app:r.app,function:r.functionName,gpus:1,idempotency_key:r.idempotencyKey,...r.sessionKey&&!e?{logical_id:r.sessionKey}:{},...r.label&&!r.sessionKey?{label:r.label}:{},...e?{priority:"preempt"}:{},...r.sharedApp?{shared_app:!0}:{}}}async function Vr(r,e,t,s){let n=await fe(r);if(r.getAccessToken&&!n)throw new De(`[urun] ${s} refused: getAccessToken resolved no token (an unauthenticated request is never sent)`,{code:"no_access_token"});let i=Hr(r.baseUrl,r.fallbackUrls),a;for(let o of i){let c=`${Y(o)}${e}`,l=p=>fetch(c,{method:t.method,headers:t.body!==void 0?{...de(r,p),"Content-Type":"application/json"}:de(r,p),...t.body!==void 0?{body:JSON.stringify(t.body)}:{},...t.keepalive?{keepalive:!0}:{}}),d;try{if(d=await l(n),(d.status===401||d.status===403)&&r.getAccessToken){let p=await fe(r,{forceRefresh:!0,reason:"unauthorized"});p&&p!==n&&(d=await l(p))}}catch(p){a=p;continue}let u=await ze(d);if(!d.ok)throw new De(`[urun] ${s} failed: ${Qt(u,d.status)}`,{code:u.error_code,httpStatus:d.status});return u}throw new De(`[urun] ${s} request failed`,{cause:a})}async function Du(r){let e=new URLSearchParams;r.app&&e.set("app",r.app),r.functionName&&e.set("function",r.functionName),r.includeArchived&&e.set("include_archived","true"),r.limit!==void 0&&e.set("limit",String(r.limit)),r.cursor&&e.set("cursor",r.cursor);let t=e.toString(),s=await Vr(r,`/api/sessions${t?`?${t}`:""}`,{method:"GET"},"session list");if(!Array.isArray(s?.sessions))throw new De("[urun] session list returned no `sessions` array \u2014 the control plane and this SDK disagree on the response shape",{code:"invalid_list_response"});return{rows:s.sessions,nextCursor:s.next_cursor??null}}async function Iu(r){let e=r.archived?"archive":"unarchive";await Vr(r,`/api/sessions/${encodeURIComponent(r.sessionId)}/${e}`,{method:"POST"},`session ${e}`)}async function Lu(r){await no(r)}async function Mu(r){let e=Hr(r.baseUrl,r.fallbackUrls),t=null,s=0;for(let n=0;n<Be;n++){for(let i of e)try{let a={baseUrl:i,app:"",functionName:"",orgId:r.orgId,jwt:r.jwt,getAccessToken:r.getAccessToken,authProvider:r.authProvider,idempotencyKey:""},o=`${Y(i)}/api/sessions/${encodeURIComponent(r.sessionId)}/viewer-connect`,c=await fe(a);if(r.getAccessToken&&!c)throw new B(`[urun] viewer-connect for ${r.sessionId} refused: getAccessToken resolved no token (an unauthenticated viewer-connect is never sent)`);let l=await fetch(o,{headers:de(a,c)});if((l.status===401||l.status===403)&&r.getAccessToken){let p=await fe(a,{forceRefresh:!0,reason:"unauthorized"});p&&p!==c&&(l=await fetch(o,{headers:de(a,p)}))}if(!l.ok){let p=await ze(l);throw new B(`[urun] viewer-connect for ${r.sessionId} failed: `+Qt(p,l.status),{httpStatus:l.status,retryAfterSeconds:Gr(l,p)})}let d=await ze(l),u=kn(d.ws_url,i,r.sessionId,"viewer-connect");return Wr(),{baseUrl:Y(i),sessionId:r.sessionId,wsUrl:u,endsAt:Sn(d.ends_at),response:d}}catch(a){if(t=a instanceof Error?a:new Error(String(a)),s=Cn(s,t),t instanceof ce)throw t}if(!qr(t))break;if(n+1<Be){if(!Br())break;await We(Math.max(Vt(n),s-Date.now()))}}throw t??new Error("[urun] viewer-connect failed")}async function Au(r){try{let e=Y(r.baseUrl),t=await fe(r);if(r.getAccessToken&&!t)return{status:"unavailable"};let s=await fetch(`${e}/api/sessions/prewake`,{method:"POST",headers:{...de(r,t),"Content-Type":"application/json"},body:JSON.stringify({app:r.app,function:r.functionName})});if(s.status===404)return{status:"unknown-app"};if(!s.ok)return{status:"unavailable"};let n=await ze(s),i={status:n.status==="prebound"?"prebound":"warming"};return typeof n.expires_at=="string"&&(i.expiresAt=n.expires_at),typeof n.warm_capable=="boolean"&&(i.warmCapable=n.warm_capable),i}catch(e){return ke()?console.warn("[urun] prewake failed (advisory, ignored):",e):console.debug?.("[urun] prewake failed (advisory, ignored):",e),{status:"unavailable"}}}async function ze(r){try{let e=await r.json();return e&&typeof e=="object"?e:{}}catch{return{}}}function Qt(r,e){let t=r.error_code,s=r.error_message||r.message||r.error,n=t&&s&&s!==t?`${t}: ${s}`:s||t;return n?`${n} (HTTP ${e})`:`HTTP ${e}`}var Ro=new Set([400,402,409]);function Co(r){return r instanceof B&&r.httpStatus!==void 0&&Ro.has(r.httpStatus)}var To=new Set(["capture-attested","no-portable-golden","portable-golden-release-mismatch","portable-golden-attestation-invalid"]);function Tn(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function zr(r){return typeof r=="string"&&r.trim().length>0}function wn(r){return typeof r=="number"&&Number.isSafeInteger(r)&&r>0}function ko(r){return typeof r=="number"&&Number.isSafeInteger(r)&&r>=0}function Eo(r){if(Tn(r)&&!(!zr(r.snapshot_id)||!zr(r.snapshot_compat_key)||!wn(r.artifact_size_bytes)||!wn(r.durable_arena_bytes)||r.volatile_arena_bytes!==0||!ko(r.uncovered_weight_bytes)))return{snapshotId:r.snapshot_id,snapshotCompatKey:r.snapshot_compat_key,artifactSizeBytes:r.artifact_size_bytes,durableArenaBytes:r.durable_arena_bytes,volatileArenaBytes:0,uncoveredWeightBytes:r.uncovered_weight_bytes}}function Po(r){if(!Tn(r)||r.schema!=="urun.runtime.wake.v1"||r.portability!=="portable"&&r.portability!=="none"||r.expected_wake_path!=="portable-golden-restore"&&r.expected_wake_path!=="cold-boot"||typeof r.reason_code!="string"||!To.has(r.reason_code)||r.expectation_basis!=="snapshot-registry"||r.restore_observation!=="not-observed")return;let e=r.reason_code;if(r.portability==="portable"&&r.expected_wake_path==="portable-golden-restore"&&e==="capture-attested"){let t=Eo(r.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(r.portability==="none"&&r.expected_wake_path==="cold-boot"&&e!=="capture-attested"&&r.golden===void 0)return{schema:"urun.runtime.wake.v1",portability:"none",expectedWakePath:"cold-boot",reasonCode:e,expectationBasis:"snapshot-registry",restoreObservation:"not-observed"}}function xo(r){if("serving_region"in r)return typeof r.serving_region=="string"&&r.serving_region.length>0?r.serving_region:null}function Do(r,e){let s={status:typeof r.status=="string"&&r.status.length>0?r.status:r.queued?"queued":"pending",requestId:e};zr(r.session_id)&&(s.sessionId=r.session_id);let n=xo(r);n!==void 0&&(s.region=n),typeof r.reason=="string"&&r.reason.length>0&&(s.reason=r.reason),typeof r.decision_reason=="string"&&r.decision_reason.length>0&&(s.decisionReason=r.decision_reason),typeof r.provisioning_refusal_source=="string"&&r.provisioning_refusal_source.length>0&&(s.refusalSource=r.provisioning_refusal_source),typeof r.provisioning_refusal_message=="string"&&r.provisioning_refusal_message.length>0&&(s.refusalMessage=r.provisioning_refusal_message),typeof r.queue_position=="number"&&typeof r.queue_depth=="number"&&(s.queue={position:r.queue_position,depth:r.queue_depth});let i=r.runtime_state;if(i==="unavailable"||i==="starting"||i==="busy"){s.runtime={state:i},typeof r.runtime_reason=="string"&&r.runtime_reason.length>0&&(s.runtime.reason=r.runtime_reason);let a=Po(r.runtime_wake);a&&(s.runtime.wake=a)}return s}function Gr(r,e){let t=Number(r.headers.get("Retry-After")||""),s=Number(e.retry_after_seconds??t);return Number.isFinite(s)&&s>0?s:void 0}function yn(r,e,t){let s=Gr(r,e),n=t??Rn;return s!==void 0?Math.min(s*1e3,n):1e3}function We(r){return new Promise(e=>setTimeout(e,r))}function Io(r){let e=typeof AbortSignal<"u"?AbortSignal:void 0;return typeof e?.timeout=="function"?e.timeout(r):void 0}var ce=class extends Error{},Ie=class extends B{};function kn(r,e,t,s){if(!r)throw new ce(`[urun] ${s} ${t} without ws_url`);let n,i;try{n=new URL(r)}catch{throw new ce(s==="viewer-connect"?`[urun] viewer-connect returned no usable ws_url for ${t}`:`[urun] ${s} ${t} with non-absolute ws_url`)}try{i=new URL(Y(e))}catch{throw new ce(`[urun] ${s} ${t} has invalid gateway base URL`)}let a=Lo(i.hostname)&&i.protocol==="http:";if(!(a&&n.protocol==="ws:"||n.protocol==="wss:"))throw new ce(`[urun] ${s} ${t} with insecure ws_url`);if(!Mo(n,i,a))throw new ce(`[urun] ${s} ${t} with cross-origin ws_url`);return n.toString()}function Lo(r){return r==="localhost"||r==="127.0.0.1"||r==="::1"||r.endsWith(".localhost")}function Mo(r,e,t){return!!(t||r.hostname===e.hostname&&r.port===e.port||bn(r.hostname)&&bn(e.hostname))}function bn(r){return r==="urun.sh"||r.endsWith(".urun.sh")}function Ao(r){try{return new URL(r).hostname!==ro?[]:so}catch{return[]}}function xn(r){return`stream:${r}`}var Dn="urun-stream-v1";var Kr=1,H={BINARY:0,TEXT:1,JSON:2,END:3,CHUNK:4},He=2,En=253952,Oo=[H.BINARY,H.TEXT,H.JSON],Qr=Symbol("urun:stream:end");function Jr(r){if(r===Qr)return Uint8Array.from([Kr,H.END]);let{kind:e,body:t}=In(r);return Jt(e,t)}function In(r){return r instanceof Uint8Array?{kind:H.BINARY,body:r}:r instanceof ArrayBuffer?{kind:H.BINARY,body:new Uint8Array(r)}:typeof r=="string"?{kind:H.TEXT,body:new TextEncoder().encode(r)}:{kind:H.JSON,body:new TextEncoder().encode(JSON.stringify(r))}}function Jt(r,e){let t=new Uint8Array(He+e.length);return t[0]=Kr,t[1]=r,t.set(e,He),t}function Ln(r){if(r===Qr)return[Jr(r)];let{kind:e,body:t}=In(r);if(t.length+He<=En)return[Jt(e,t)];let s=En-He,n=[],i=0;for(;t.length-i>s;)n.push(Jt(H.CHUNK,t.subarray(i,i+s))),i+=s;return n.push(Jt(e,t.subarray(i))),n}function Nu(r){let{kind:e,body:t}=Mn(r);if(e===H.CHUNK)throw new Error("[urun] CHUNK envelope requires StreamFragmentReassembler (oversized payload)");return Yt(e,t)}function Mn(r){let e=r instanceof Uint8Array?r:new Uint8Array(r);if(e.length<He||e[0]!==Kr)throw new Error(`[urun] bad stream envelope (version=${e[0]}, len=${e.length})`);return{kind:e[1],body:e.subarray(He)}}function Yt(r,e){switch(r){case H.BINARY:return e.slice();case H.TEXT:return new TextDecoder().decode(e);case H.JSON:return JSON.parse(new TextDecoder().decode(e));case H.END:return Qr;default:throw new Error(`[urun] unknown stream envelope KIND 0x${r.toString(16)}`)}}var Xt=class{_chunks=[];_bufferedLength=0;feed(e){let{kind:t,body:s}=Mn(e);if(t===H.CHUNK){this._chunks.push(s.slice()),this._bufferedLength+=s.length;return}if(Oo.includes(t)){if(this._chunks.length===0)return Yt(t,s);let n=new Uint8Array(this._bufferedLength+s.length),i=0;for(let a of this._chunks)n.set(a,i),i+=a.length;return n.set(s,i),this._chunks=[],this._bufferedLength=0,Yt(t,n)}if(this._chunks.length>0)throw this._chunks=[],this._bufferedLength=0,new Error(`[urun] stream envelope KIND 0x${t.toString(16)} arrived mid-fragment-sequence; discarding partial payload`);return Yt(t,s)}},Pn=class{consumerId;_handlers=new Map;constructor(e="loopback"){this.consumerId=e}onData(e,t){let s=this._handlers.get(e);return s||(s=new Set,this._handlers.set(e,s)),s.add(t),()=>s.delete(t)}sendData(e,t,s={}){s.to&&(s.to,this.consumerId);for(let n of this._handlers.get(e)??[])n(t);return Promise.resolve()}};function ju(r){return{get consumerId(){return r.consumerId},onData(e,t){return r.onStreamData(e,t)},sendData(e,t,s){return r.sendStreamData(e,t,s)}}}var ja=tn(Rs());var Hs=tn(ga(),1);var _a="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";function Dl(r){let e=globalThis.crypto,t=new Uint8Array(r);if(e?.getRandomValues)return e.getRandomValues(t),t;for(let s=0;s<r;s++)t[s]=Math.floor(Math.random()*256);return t}function va(r=16){let e=Dl(r),t="";for(let s=0;s<r;s++)t+=_a[e[s]%_a.length];return t}var wa=[1e3,2e3,4e3,8e3,3e4],ya=5,Il=15e3,Ll=15e3,ba=15e3,Sa=15e3,Ml=2e3,Al=6e3,Ol=2e3,Nl=300,Ra=4e3,jl=2,Fl=750,$l=3,Ca=[1e3,2e3,4e3],Ul=15e3;function Up(r){return`stream:${r}`}var Nr="--",ql=["video","audio"];function Ta(r){let e=r.lastIndexOf(Nr);if(e<=0)return;let t=r.slice(e+Nr.length);return ql.includes(t)?t:void 0}function qp(r,e){return`${r}${Nr}${e}`}var Bl="v1";function Wl(r,e){return r.name!==e.name||r.reason!==e.reason||r.sessionId!==e.sessionId||r.requestId!==e.requestId||r.wakingSince!==e.wakingSince||r.region!==e.region||(r.endsAt?.getTime()??null)!==(e.endsAt?.getTime()??null)||r.queue?.position!==e.queue?.position||r.queue?.depth!==e.queue?.depth||r.runtime?.state!==e.runtime?.state||r.runtime?.reason!==e.runtime?.reason||r.runtime?.wake!==e.runtime?.wake?!1:r.error?.reason===e.error?.reason&&r.error?.code===e.error?.code&&r.error?.kind===e.error?.kind&&r.error?.httpStatus===e.error?.httpStatus&&r.error?.retryAfterSeconds===e.error?.retryAfterSeconds}var ka={requested:"provisioning",queued:"queued",pending:"provisioning",allocating:"provisioning",provisioning:"provisioning",waking:"provisioning",waiting_for_capacity:"waiting_for_capacity",allocated:"connecting",connecting:"connecting",establishing:"connecting",live:"live",running:"live",paused:"paused",error:"error",failed:"error",rejected:"error",expired:"paused",cancelled:"paused",canceled:"paused",closed:"paused",releasing:"paused",released:"paused",reaped:"paused",superseded:"paused"};function Ea(r){return Object.prototype.hasOwnProperty.call(ka,r)?{phase:ka[r],unknown:!1}:{phase:"unknown",unknown:!0}}function zl(r){return r==="queued"||r==="pending"}function Pa(r){return r==="credits_exhausted"}var xa=3,Da=4e3,Ia=[{urls:"stun:stun.l.google.com:19302"},{urls:"stun:stun1.l.google.com:19302"}];function La(r){if(!r)return;let e=/\/(?:ws\/)?rtc\/([^/?#]+)/.exec(r);if(e)try{return decodeURIComponent(e[1])}catch{return e[1]}}var Ma=class{_state="disconnected";_sessionId=null;_tracks=new Map;_tracksByName=new Map;_options;_emitter=new Hs.default;_ws=null;_connectedUrl=null;_device=null;_mediaUnavailableReason=null;_mediaVerdictResolve;_mediaVerdict=new Promise(e=>{this._mediaVerdictResolve=e});_recvTransport=null;_pendingConsumeData=[];_sendTransport=null;_consumers=new Map;_audioProducer=null;_videoProducer=null;_publishedAudio=null;_publishedVideo=null;_wtMicUplink=null;_wtCamUplink=null;_wtDataUpSender=null;_pendingProduce=null;_multiplexer=null;_reconnectAttempts=0;_reconnectExhaustedWarned=!1;_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=$a();_reportedCandidatePairKey=null;_candidatePairRefreshSeq=0;_diagnosticSinkFailed=!1;_currentEpoch=0;_selfEpochAdoptUntil=0;_pausedIncarnation=null;_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=Hl()),this._consumerId}get state(){return this._state}get currentIncarnation(){return this._currentEpoch}get phase(){return this._phase}get isProducingMedia(){let e=s=>s!==null&&!s.closed&&!s.paused,t=(s,n)=>s!==null&&n!==null&&n.track.readyState!=="ended"&&s.deliveredDatagrams()>0;return e(this._audioProducer)||e(this._videoProducer)||t(this._wtMicUplink,this._publishedAudio)||t(this._wtCamUplink,this._publishedVideo)}get endsAt(){return this._endsAt}setEndsAt(e){this._endsAt=e}seedRegion(e){e!==void 0&&this._setPhase(this._phase.name,{reason:this._phase.reason,queue:this._phase.queue,runtime:this._phase.runtime,error:this._phase.error,region: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),this._phase.region!==void 0&&(e.region=this._phase.region),e}get region(){return this._phase.region}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}signalingOpen(){return this.isOpen}onWtOnlyLegDeath(e){return this._wtOnlyLegDeath=e,()=>{this._wtOnlyLegDeath===e&&(this._wtOnlyLegDeath=null)}}_wtOnlyLegDeath=null;get connectedUrl(){return this._connectedUrl}get intentionalDisconnect(){return this._intentionalDisconnect}getTrackByName(e){if(Ta(e)!==void 0)return;let t=this._tracksByName.get(e);if(t&&t.readyState!=="ended")return t;for(let s of this._tracks.values())if(!(s.kind!==e||s.readyState==="ended")&&this._streamNameOf(s)===void 0)return s;return t}_streamNameOf(e){for(let[t,s]of this._tracksByName)if(s===e)return t}setAuth(e){this._options={...this._options,...e},this.isOpen&&this._send({type:"auth",orgId:this._options.orgId,jwt:this._options.jwt,authProvider:this._options.authProvider})}constructor(e){this._options=e??{url:""},e?.sessionId&&(this._sessionId=e.sessionId)}setConnection(e){if(this.isOpen){let t=La(e.url);if(e.sessionId!==void 0&&e.sessionId!==this._sessionId)throw new _t(this._sessionId,e.sessionId);if(t!==void 0&&t!==this._sessionId)throw new _t(this._sessionId,t);this._options={...this._options,...e};return}this._options={...this._options,...e},e.sessionId&&(this._sessionId=e.sessionId)}setConnectionResolver(e){this._resolveConnection=e}applyControlDocState(e){let t=e&&typeof e=="object"?e.session:void 0,s=Yl(t);if(s!==void 0&&this.setIncarnation(s),!t||typeof t!="object")return;let n=t,i=typeof n.status=="string"?n.status:void 0;if(i&&!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 if(i==="closed"||i==="ended"||i==="paused"){let a=n.close_reason??n.closeReason??n.pause_reason??n.pauseReason;if(Pa(a)){this._setPhase("paused",{reason:"credits_exhausted"});return}if(this._pastDeadline()){this._setPhase("paused",{reason:"max_session_age"});return}this._setPhase("paused",{reason:typeof a=="string"&&a?a:i})}}}setIncarnation(e){if(!Number.isFinite(e)||e<=this._currentEpoch)return;let t=this._currentEpoch>0,s=this._state==="connected";this._currentEpoch=e;let i=this._selfEpochAdoptUntil>0&&Date.now()<=this._selfEpochAdoptUntil;this._selfEpochAdoptUntil=0,!i&&t&&s&&!this._intentionalDisconnect&&this._renegotiate()}isStaleIncarnation(e){return Number.isFinite(e)?e<this._currentEpoch:!1}isStaleClosedMarker(e){if(!e)return!1;let t=typeof e.status=="string"?e.status:void 0;if(t!=="closed"&&t!=="ended"&&t!=="paused"&&t!=="error")return!1;let s=e.status_epoch??e.statusEpoch,n=typeof s=="number"?s:Number(s);return Number.isFinite(n)?n<this._currentEpoch:!1}_isStaleLivenessEvidence(){return this._phase.name!=="paused"||this._pausedIncarnation===null?!1:this._currentEpoch<=this._pausedIncarnation}async connect(e){if(this.isOpen&&this._state==="connected"&&!this._intentionalDisconnect){e!==void 0&&(this._lastStartOptions=e);return}this._lastStartOptions=e,this._intentionalDisconnect=!1,this._pausedIncarnation=null,this._connectStartedAt??=Date.now(),this._cancelPendingDial?.(new Error("TransportSession: connect superseded by a newer connect()"));let t=++this._generation,s=this._state==="reconnecting"||this._state==="renegotiating";s||this._setState("connecting");let n=null,i=()=>t!==this._generation||this._intentionalDisconnect,a=()=>{if(i())throw new Error("TransportSession: connect cancelled")},o=async()=>{for(let u of this._connectUrls()){a();try{return await this._connectOnce(u,t,e),!0}catch(p){n=p instanceof Error?p:new Error(String(p)),i()||this._cleanupSocket()}}return!1},c=this._forceResolveOnNextConnect&&this._resolveConnection!==null;this._forceResolveOnNextConnect=!1;let l=c?0:this._resolveConnection?jl:1;for(let u=0;u<l;u++)if(u>0&&(await Aa(Fl),a()),await o())return;if(this._resolveConnection)for(let u=0;u<$l;u++){this._setState("reconnecting"),await Aa(Ca[Math.min(u,Ca.length-1)]),a();try{let p=await this._resolveConnection();a(),this.setAuth({jwt:p.jwt??this._options.jwt,authProvider:this._options.authProvider,orgId:this._options.orgId}),this.setConnection({url:p.url,sessionId:p.sessionId,iceServers:p.iceServers??this._options.iceServers}),p.endsAt!==void 0&&(this._endsAt=p.endsAt)}catch(p){if(i())throw new Error("TransportSession: connect cancelled");n=p instanceof Error?p:new Error(String(p));continue}if(await o())return}if(i())throw n??new Error("TransportSession: connect cancelled");this._setState("failed");let d=n??new Error("TransportSession: connect failed");throw s||this._emitError(d),d}leaveLeg(){if(!this.isOpen)return!1;this._intentionalDisconnect=!0,this._selfEpochAdoptUntil=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(e="client_detached"){this._generation+=1,this._intentionalDisconnect=!0,this._selfEpochAdoptUntil=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 t of this._consumers.values())try{t.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._pendingConsumeData=[],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("paused",{reason:e}),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(s){this._diagnosticSinkFailed||(this._diagnosticSinkFailed=!0,console.warn(`[urun] diagnosticSink threw (${String(s instanceof Error?s.message:s)}) \u2014 further diagnostics ride only the structured 'diagnostic' event`))}else e.level==="debug"?ke()?console.warn(`[urun] ${e.message}`,e.detail??{}):console.debug(`[urun] ${e.message}`,e.detail??{}):e.level==="error"?console.error(`[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){return this._send(e)}onSignal(e){return this.on("signal",e)}emitDiagnostic(e){this._emitDiagnostic(e)}onStreamData(e,t){let s=this._streamDataHandlers.get(e);return s||(s=new Set,this._streamDataHandlers.set(e,s)),s.add(t),()=>{let n=this._streamDataHandlers.get(e);n?.delete(t),n&&n.size===0&&this._streamDataHandlers.delete(e)}}sendStreamData(e,t,s){try{this._requireMediaSupport("sendStreamData")}catch(n){return Promise.reject(n)}return this._wtDataUpSender?this._wtDataUpSender.send(e,Jr(t)):this._ensureDataProducer(e).then(n=>{for(let i of Ln(t))n.send(i)})}get wtDataUplinkSeam(){return{onUplink:e=>{this._wtDataUpSender=e},onUplinkLost:e=>{if(this._wtDataUpSender){if(this._wtDataUpSender=null,!this._sendTransport){console.warn(`[urun-sh/core] WT data uplink lost (${e}) with NO WebRTC send transport \u2014 there is no SCTP to revert to; failing the WT leg so the re-dial ladder re-establishes it`),this._wtOnlyLegDeath?.(e);return}console.warn(`[urun-sh/core] WT data uplink lost (${e}) \u2014 data-up reverts to SCTP for this leg`)}}}}_awaitSendTransport(){return this._sendTransport?Promise.resolve(this._sendTransport):new Promise((e,t)=>{let s={resolve:i=>{clearTimeout(n),e(i)},reject:i=>{clearTimeout(n),t(i)}},n=setTimeout(()=>{let i=this._sendTransportWaiters.indexOf(s);i>=0&&this._sendTransportWaiters.splice(i,1),t(new Error(`[urun] no send transport after ${ba}ms (the server never offered createSendTransport \u2014 media/data produce is impossible on this leg)`))},ba);this._sendTransportWaiters.push(s)})}_settleSendTransportWaiters(e,t){let s=this._sendTransportWaiters;this._sendTransportWaiters=[];for(let n of s)e?n.resolve(e):n.reject(t??new Error("TransportSession: disconnected"))}_ensureDataProducer(e){let t=this._dataProducers.get(e);if(t&&!t.closed)return Promise.resolve(t);let s=this._dataProducerPromises.get(e);if(s)return s;let n=this._awaitSendTransport().then(i=>i.produceData({label:xn(e),protocol:Dn,ordered:!0})).then(i=>this._awaitDataChannelOpen(i)).then(i=>(this._dataProducers.set(e,i),this._dataProducerPromises.delete(e),i)).catch(i=>{throw this._dataProducerPromises.delete(e),i});return this._dataProducerPromises.set(e,n),n}_awaitDataChannelOpen(e){if(e.closed)return Promise.reject(new Error("[urun] sendStreamData: DataProducer closed before its DataChannel opened"));let t=e.readyState;return t==="open"?Promise.resolve(e):t==="closing"||t==="closed"?Promise.reject(new Error(`[urun] sendStreamData: DataChannel is ${t} \u2014 cannot deliver data-up payloads`)):new Promise((s,n)=>{let i=()=>{l(),s(e)},a=u=>{d(new Error(`[urun] sendStreamData: DataChannel error before open: ${u.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 ${Sa}ms (the SCTP handshake never completed \u2014 data-up produce is impossible on this channel)`))},Sa),l=()=>{clearTimeout(c),e.off("open",i),e.off("error",a),e.observer.off("close",o)},d=u=>{l();try{e.close()}catch{}n(u)};e.on("open",i),e.on("error",a),e.observer.on("close",o)})}_dispatchStreamData(e,t){for(let s of this._streamDataHandlers.get(e)??[])s(t)}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 s=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(s.message),this._emitter.emit("error",s)}_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 s=e.kind==="video";if(!s&&this._wtMicUplink){this._wtMicUplink.setSource(e),this._rememberPublishIntent(!1,e,t);return}if(s&&this._wtCamUplink){this._wtCamUplink.setSource(e),this._rememberPublishIntent(!0,e,t);return}let n=s?this._videoProducer:this._audioProducer;if(n&&!n.closed){if(n.track===e)return;await n.replaceTrack({track:e}),this._rememberPublishIntent(s,e,t);return}let a=await(await this._awaitSendTransport()).produce({track:e,...s?{}:{codecOptions:{opusStereo:!1,opusDtx:!1,opusFec:!1}},stopTracks:!1,...t?{appData:{name:t}}:{}});s?this._videoProducer=a:this._audioProducer=a,this._rememberPublishIntent(s,e,t)}_rememberPublishIntent(e,t,s){let n={track:t,...s!==void 0?{name:s}:{}};e?this._publishedVideo=n:this._publishedAudio=n}removeTrack(){let e=this._publishedAudio;if(this._publishedAudio=null,this._wtMicUplink){this._wtMicUplink.setSource(null);try{e?.track.stop()}catch{}}if(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(){let e=this._publishedVideo;if(this._publishedVideo=null,this._wtCamUplink){this._wtCamUplink.setSource(null);try{e?.track.stop()}catch{}}if(this._videoProducer){this._send({type:"stopVideo"});try{this._videoProducer.track?.stop()}catch{}this._videoProducer.close(),this._videoProducer=null}}requestDiagnostics(){this._send({type:"diagnostics"})}seekStream(e,t){this._send({type:"stream.seek",stream:e,target:t})}async _handleMessage(e){switch(e.type){case"routerRtpCapabilities":await this._onRouterCapabilities(e.rtpCapabilities);break;case"createWebRtcTransport":await this._onCreateRecvTransport(e);break;case"createSendTransport":await this._onCreateSendTransport(e);break;case"consume":await this._onConsume(e);break;case"consumerClosed":this._closeConsumer(e.consumerId);break;case"producerClosed":this._closeConsumersByProducer(e.producerId);break;case"consumerPaused":this._consumers.get(e.consumerId)?.pause();break;case"consumerResumed":this._consumers.get(e.consumerId)?.resume();break;case"iceRestarted":this._onIceRestarted(e);break;case"produced":if(this._pendingProduce){let t=this._pendingProduce;this._pendingProduce=null,clearTimeout(t.timeoutId),t.resolve(e.id)}break;case"dataProduced":{let t=e.label,s=t?this._pendingDataProduce.get(t):void 0;s&&t&&(this._pendingDataProduce.delete(t),s.resolve(e.id));break}case"consumeData":await this._onConsumeData(e);break;case"started":this._emitter.emit("started");break;case"status":this._onStatus(e);break;case"stream.seeked":this._onStreamSeeked(e);break;case"error":this._onServerError(e);break;default:this._emitter.emit("signal",e);break}}_onServerError(e){let t=typeof e.message=="string"?e.message:"signaling error",s=typeof e.code=="string"?e.code:void 0;if(/connect\(\) already called/i.test(t)){if(this._resolveConnection){this._generation++;let n=this._ws;this._ws=null;try{n?.close()}catch{}this._cleanupMedia(),this._forceResolveOnNextConnect=!0,this._renegotiate();return}this._setPhase("error",{error:{reason:t,code:"transport-consumed",kind:"transport-failed"}}),this._emitter.emit("error",new Error(t));return}if(s==="TRANSPORT_BIND_FAILED"){this._emitError(new Error(t),s);return}if(s==="PROTOCOL_VERSION_UNSUPPORTED"){this._setPhase("error",{error:{reason:t,code:s,kind:"create-failed"},reason:t}),this._emitter.emit("error",new Error(t));return}console.warn("[urun] signaling error from server:",t)}_onStreamSeeked(e){let t=typeof e.stream=="string"?e.stream:void 0;if(!t)return;let s=e.target,n=s==="live"?"live":typeof s=="number"?s:Number(s);this._emitter.emit("seeked",t,n)}_reportUnknownServerStatus(e,t,s="signaling",n){let a=`server reported unrecognized ${s==="admission"?"admission response":"session status"} status ${JSON.stringify(e)}`+(t?` (reason: ${JSON.stringify(t)})`:"")+' \u2014 this @urun-sh/core build does not know this word; refusing to render it as "provisioning". The SDK may be out of date for this server.';this._emitDiagnostic({level:"error",kind:"unknown-server-status",message:a,detail:{status:e,origin:s,...t?{reason:t}:{}}}),!this._liveReached&&(this._lastServerStatus=e,this._setPhase("unknown",{reason:e,region:n}))}_onStatus(e){let t=e.request_id??e.requestId;t&&(this._requestId=t);let s=typeof e.status=="string"?e.status:void 0,n=typeof e.reason=="string"&&e.reason?e.reason:void 0,i="region"in e?typeof e.region=="string"&&e.region.length>0?e.region:null:void 0,a=s!==void 0?Ea(s):void 0;if(s!==void 0&&a?.unknown){this._reportUnknownServerStatus(s,n,"signaling",i);return}let o=a?.phase??"provisioning";if(this._liveReached&&o!=="paused"&&o!=="error"){o==="live"&&i!==void 0&&i!==this._phase.region&&this._setPhase("live",{reason:n,region:i});return}if(this._isStaleLivenessEvidence()&&o!=="live"&&o!=="paused"&&o!=="error")return;s!==void 0&&(this._lastServerStatus=s);let c=e.queue_position??e.queuePosition,l=e.queue_depth??e.queueDepth,d=typeof c=="number"&&typeof l=="number";if(o==="paused"){let u=e.reason??e.close_reason??e.closeReason??e.pause_reason??e.pauseReason,p=typeof u=="string"&&u?u:void 0,m=Pa(u)?"credits_exhausted":this._pastDeadline()?"max_session_age":n??p??s??"paused";this._setPhase("paused",{reason:m,region:i??null}),this._stopMediaProbe();return}if(o==="error"){let u=n??s??"admission failed";this._setPhase("error",{error:{reason:u,code:s,kind:s==="error"?"runtime-failed":"create-failed"},reason:u,region:i});return}if(o==="queued"){this._setPhase("queued",{...d?{queue:{position:c,depth:l}}:{},reason:n,region:i});return}if(o==="waiting_for_capacity"){this._setPhase("waiting_for_capacity",{...d?{queue:{position:c,depth:l}}:{},reason:n,region:i});return}if(o==="connecting"){this._setPhase("connecting",{reason:n,region:i});return}if(o==="live"){this._setPhase("live",{reason:n,region:i});return}this._setPhase("provisioning",{reason:n,region:i})}_webRtcDialHeld=!1;_heldRouterCaps=null;holdWebRtcDial(){return this._webRtcDialHeld=!0,{proceed:e=>{if(!this._webRtcDialHeld)return;this._webRtcDialHeld=!1;let t=this._heldRouterCaps;this._heldRouterCaps=null,t&&(ke()?console.warn(`[urun-sh/core] running the deferred WebRTC dial (${e})`):console.info(`[urun-sh/core] running the deferred WebRTC dial (${e})`),this._onRouterCapabilities(t).catch(s=>{console.error("[urun-sh/core] deferred WebRTC dial failed:",s)}))},skip:e=>{ke()?console.warn(`[urun-sh/core] WebRTC dial SKIPPED (${e}) \u2014 WT-only leg, no RTCPeerConnection`):console.info(`[urun-sh/core] WebRTC dial SKIPPED (${e}) \u2014 WT-only leg, no RTCPeerConnection`)}}}async _onRouterCapabilities(e){if(this._webRtcDialHeld){this._heldRouterCaps=e;return}Wt()&&await mn();let t=fn();if(t){this._mediaUnavailableReason=t,this._mediaVerdictResolve(t);return}this._mediaVerdictResolve(null);let s=hn(),n=new ja.Device(s?{handlerName:s}: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,s=this._device.createRecvTransport({id:e.id,iceParameters:e.iceParameters,iceCandidates:t,dtlsParameters:e.dtlsParameters,...e.sctpParameters?{sctpParameters:e.sctpParameters}:{},iceServers:this._options.iceServers??Ia});this._recvIceRestartAttempts=0,this._clearRecvIceRestart();let n=this._generation;s.on("connect",({dtlsParameters:a},o,c)=>{try{this._send({type:"connectTransport",transportId:s.id,dtlsParameters:a}),o()}catch(l){c(l)}}),s.on("connectionstatechange",a=>{if(n===this._generation){if(a==="connected"){this._clearRecvIceRestart(),this._recvIceRestartAttempts=0,this._reportSelectedCandidatePair(s);return}if(!(this._intentionalDisconnect&&a==="closed")&&(a==="failed"||a==="disconnected")){if(this._tryRestartRecvIce())return;a==="failed"&&this._emitError(new Error(`media transport ${a}`),a),this._renegotiate()}}}),this._recvTransport=s;let i=this._pendingConsumeData.splice(0,this._pendingConsumeData.length);for(let a of i)this._onConsumeData(a).catch(()=>{})}async _reportSelectedCandidatePair(e){let t=++this._candidatePairRefreshSeq,s=null;if(typeof e.getStats=="function")try{s=await e.getStats()}catch{}if(this._recvTransport!==e||t!==this._candidatePairRefreshSeq)return;let n=Jl(s);if(n.localType===null&&n.remoteType===null&&n.protocol===null&&n.remoteAddress===null&&n.remotePort===null&&this._reportedCandidatePairKey!==null)return;this._selectedCandidatePair=n;let a=JSON.stringify(n);if(this._reportedCandidatePairKey===a)return;this._reportedCandidatePairKey=a;let o=Object.values(this._selectedCandidatePair).some(c=>c!==null);this._emitDiagnostic({level:o?"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>=xa?!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>=xa?!1:(this._sendIceRestartAttempts++,this._armSendIceRestartWatchdog(),this._requestIceRestart(e.id),!0)}_requestIceRestart(e){this._send({type:"restartIce",transportId:e})}_onIceRestarted(e){let t=e.transportId??e.id,s=e.iceParameters;if(!s)return;let n=!!this._recvTransport&&this._recvTransport.id===t,i=!n&&!!this._sendTransport&&this._sendTransport.id===t,a=n?this._recvTransport:i?this._sendTransport:null;a&&(Promise.resolve(a.restartIce({iceParameters:s})).catch(o=>{this._emitter.emit("error",o instanceof Error?o:new Error(String(o)))}),n&&this._recvIceRestartTimer?this._armRecvIceRestartWatchdog():i&&this._sendIceRestartTimer&&this._armSendIceRestartWatchdog())}_armRecvIceRestartWatchdog(){this._clearRecvIceRestart();let e=this._generation;this._recvIceRestartTimer=setTimeout(()=>{this._recvIceRestartTimer=null,!(e!==this._generation||this._intentionalDisconnect)&&this._recvTransport?.connectionState!=="connected"&&(this._emitError(new Error("media transport failed (ice restart timeout)"),"failed"),this._renegotiate())},Da)}_armSendIceRestartWatchdog(){this._clearSendIceRestart();let e=this._generation;this._sendIceRestartTimer=setTimeout(()=>{this._sendIceRestartTimer=null,!(e!==this._generation||this._intentionalDisconnect)&&this._sendTransport?.connectionState!=="connected"&&this._emitError(new Error("media send transport failed (ice restart timeout)"),"failed")},Da)}_clearRecvIceRestart(){this._recvIceRestartTimer&&(clearTimeout(this._recvIceRestartTimer),this._recvIceRestartTimer=null)}_clearSendIceRestart(){this._sendIceRestartTimer&&(clearTimeout(this._sendIceRestartTimer),this._sendIceRestartTimer=null)}async _onCreateSendTransport(e){if(!this._device)return;let t=this._device.createSendTransport({id:e.id,iceParameters:e.iceParameters,iceCandidates:e.iceCandidates,dtlsParameters:e.dtlsParameters,...e.sctpParameters?{sctpParameters:e.sctpParameters}:{},iceServers:this._options.iceServers??Ia});this._sendIceRestartAttempts=0,this._clearSendIceRestart();let s=this._generation;t.on("connect",({dtlsParameters:n},i,a)=>{try{this._send({type:"connectSendTransport",transportId:t.id,dtlsParameters:n}),i()}catch(o){a(o)}}),t.on("produce",({kind:n,rtpParameters:i,appData:a},o,c)=>{if(this._pendingProduce){c(new Error("produce already pending"));return}let l=a&&typeof a.name=="string"?a.name:void 0,d=setTimeout(()=>{let u=this._pendingProduce;if(!u||u.timeoutId!==d)return;this._pendingProduce=null;let p=new Ut(n,{stream:l,timeoutMs:qt});this._setPhase("error",{error:{reason:p.message,code:"produce-ack-timeout",kind:"produce-timeout"}}),this._emitter.emit("error",p),u.reject(p)},qt);this._pendingProduce={timeoutId:d,resolve:u=>{o({id:u})},reject:c};try{this._send(l?{type:"produce",kind:n,name:l,rtpParameters:i}:{type:"produce",kind:n,rtpParameters:i})}catch(u){this._pendingProduce?.timeoutId===d&&(this._pendingProduce=null,clearTimeout(d)),c(u)}}),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(s===this._generation){if(n==="connected"){this._clearSendIceRestart(),this._sendIceRestartAttempts=0;return}this._intentionalDisconnect&&n==="closed"||(n==="failed"||n==="disconnected")&&this._trySendIceRestart()||(n==="failed"||n==="closed")&&this._emitError(new Error(`media send transport ${n}`),n)}}),this._sendTransport=t,this._settleSendTransportWaiters(t),this._emitter.emit("audioTransportReady"),this._republishPublishedTracks()}async _republishPublishedTracks(){let e=this._publishedAudio;if(e&&e.track.readyState!=="ended"&&(!this._audioProducer||this._audioProducer.closed))try{await this.addTrack(e.track,e.name)}catch(s){console.warn("[urun] republish: mic re-produce after reconnect failed",s)}else e&&e.track.readyState==="ended"&&console.warn("[urun] republish: published mic track is ended \u2014 not republishing (device re-acquisition is the app/page-recovery pass)");let t=this._publishedVideo;if(t&&t.track.readyState!=="ended"&&(!this._videoProducer||this._videoProducer.closed))try{await this.addVideoTrack(t.track,t.name)}catch(s){console.warn("[urun] republish: camera re-produce after reconnect failed",s)}else t&&t.track.readyState==="ended"&&console.warn("[urun] republish: published camera track is ended \u2014 not republishing (device re-acquisition is the app/page-recovery pass)")}async _onConsumeData(e){if(this._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}let t=this._recvTransport;if(!t){this._pendingConsumeData.push(e);return}let s=e.label,n=this._streamNameFromLabel(s);if(!n){console.error(`[urun] consumeData pushed with an unparseable label ${JSON.stringify(s??null)} \u2014 no DataConsumer will be attached and no ack sent; the server egress will strand envelopes for this stream (expected label form: "stream:<name>")`),this._emitter.emit("error",new Error(`[urun] consumeData pushed with unparseable label ${JSON.stringify(s??null)}`));return}let i=this._generation,a;try{a=await t.consumeData({id:e.id,dataProducerId:e.dataProducerId,sctpStreamParameters:e.sctpStreamParameters,label:s,protocol:e.protocol})}catch(u){console.error(`[urun] consumeData for named stream "${n}" failed \u2014 no channel will open and no dataConsumerReady ack will be sent; the server egress will strand envelopes on this lane:`,u),this._emitter.emit("error",u instanceof Error?u:new Error(String(u)));return}if(i!==this._generation||this._recvTransport!==t||t.closed||this._intentionalDisconnect){try{a.close()}catch{}return}this._dataConsumers.set(n,a);let o=new Xt;a.on("message",u=>{try{let p=typeof u=="string"?new TextEncoder().encode(u):new Uint8Array(u),m=o.feed(p);m!==void 0&&this._dispatchStreamData(n,m)}catch(p){this._emitter.emit("error",p instanceof Error?p:new Error(String(p)))}});let c=!1,l=setTimeout(()=>{if(c||a.closed||a.readyState==="open")return;let u=new Error(`[urun] data channel for named stream "${n}" did not open within 10s (consumeData resolved at creation; the SCTP association never established) \u2014 no dataConsumerReady ack was sent and the server egress will strand envelopes on this lane`);console.error(u.message),this._emitter.emit("error",u)},1e4),d=()=>{c||a.closed||(c=!0,clearTimeout(l),this._send({type:"dataConsumerReady",id:e.id}))};a.readyState==="open"?d():a.on("open",d),a.once?.("close",()=>clearTimeout(l))}async _onConsume(e){let t=this._recvTransport;if(!t)return;let s=this._generation,n=await t.consume({id:e.id,producerId:e.producerId,kind:e.kind,rtpParameters:e.rtpParameters});if(s!==this._generation||this._recvTransport!==t||t.closed||this._intentionalDisconnect){try{n.close()}catch{}return}this._consumers.set(n.id,n),this._tracks.set(n.track.id,n.track),this._capJitterBuffer(n,n.kind==="video"?"video":"audio");let i=e.streamName??e.label;i&&this._tracksByName.set(i,n.track),n.track.addEventListener?.("unmute",()=>{s!==this._generation||this._intentionalDisconnect||this._phase.name==="error"&&this._isParkedPhase()||this._isStaleLivenessEvidence()||this._liveReached||this._setPhase("live")},{once:!0}),this._emitter.emit("track",n.track);let a=n.id;n.track.addEventListener("ended",()=>{s!==this._generation||this._intentionalDisconnect||this._closeConsumer(a)},{once:!0}),this._send({type:"resumeConsumer",consumerId:n.id}),this._startMediaProbe(),this._startStatsSampler()}get audioPlayoutOptions(){return this._options.audioPlayout}get wtMicUplinkSeam(){return{onUplink:e=>{this._wtMicUplink=e;let t=this._publishedAudio;if(this._audioProducer&&!this._audioProducer.closed){console.warn("[urun-sh/core] WT mic uplink engaged \u2014 moving the mic from WebRTC produce to the QUIC lane"),this._send({type:"stopAudio"});try{this._audioProducer.close()}catch{}this._audioProducer=null}t&&t.track.readyState!=="ended"&&e.setSource(t.track)},onUplinkLost:e=>{if(!this._wtMicUplink)return;this._wtMicUplink=null;let t=this._publishedAudio;if(!(!t||t.track.readyState==="ended")){if(console.warn(`[urun-sh/core] WT mic uplink lost (${e}) \u2014 republishing the mic over WebRTC`),!this._sendTransport){this._emitDiagnostic({level:"error",kind:"wt-mic-uplink-dead",message:`WT mic uplink lost (${e}) with NO WebRTC send transport \u2014 the republish above cannot run. If a reconnect is in flight this self-heals; on a WT-only leg (no RTCPeerConnection was dialled) the mic is now DEAD until the WT uplink re-engages.`,detail:{reason:e}});return}this._publishTrack(t.track,t.name).catch(s=>{console.error("[urun-sh/core] mic republish over WebRTC failed:",s)})}}}}get wtCamUplinkSeam(){return{onUplink:e=>{this._wtCamUplink=e;let t=this._publishedVideo;if(this._videoProducer&&!this._videoProducer.closed){console.warn("[urun-sh/core] WT video uplink engaged \u2014 moving the camera from WebRTC produce to the QUIC lane"),this._send({type:"stopVideo"});try{this._videoProducer.close()}catch{}this._videoProducer=null}t&&t.track.readyState!=="ended"&&e.setSource(t.track)},onUplinkLost:e=>{if(!this._wtCamUplink)return;this._wtCamUplink=null;let t=this._publishedVideo;if(!(!t||t.track.readyState==="ended")){if(console.warn(`[urun-sh/core] WT video uplink lost (${e}) \u2014 republishing the camera over WebRTC`),!this._sendTransport){this._emitDiagnostic({level:"error",kind:"wt-cam-uplink-dead",message:`WT camera uplink lost (${e}) with NO WebRTC send transport \u2014 the republish above cannot run. If a reconnect is in flight this self-heals; on a WT-only leg (no RTCPeerConnection was dialled) the camera is now DEAD until the WT uplink re-engages.`,detail:{reason:e}});return}this._publishTrack(t.track,t.name).catch(s=>{console.error("[urun-sh/core] camera republish over WebRTC failed:",s)})}}}}_jitterBufferTargetMs(e){if(e==="audio"){let t=this._options.audioPlayout?.jitterBufferTargetMs;return t===void 0?Nl:t}return this._options.videoPlayout?.jitterBufferTargetMs}_capJitterBuffer(e,t){let s=this._jitterBufferTargetMs(t);if(s===void 0)return;let n=t==="video"?"videoPlayout":"audioPlayout",i={mediaKind:t,transportId:this._recvTransport?.id??null};if(!Number.isFinite(s)){this._emitDiagnostic({level:"warning",kind:`${t}-jitter-buffer-invalid`,message:`${n}.jitterBufferTargetMs must be a finite number of milliseconds; got ${String(s)}. No jitter-buffer cap applied.`,detail:{consumerId:e.id,targetMs:String(s),...i}});return}if(s<=0)return;if(s>Ra){this._emitDiagnostic({level:"warning",kind:`${t}-jitter-buffer-invalid`,message:`${n}.jitterBufferTargetMs must be within the W3C jitterBufferTarget range 0-${Ra}ms; got ${s}. No jitter-buffer cap applied.`,detail:{consumerId:e.id,targetMs:s,...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:s,reason:"no-receiver",...i}});return}let o=[];if("jitterBufferTarget"in a&&(a.jitterBufferTarget=s,o.push("jitterBufferTarget")),"playoutDelayHint"in a&&(a.playoutDelayHint=s/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:s,...i}});return}this._emitDiagnostic({level:"debug",kind:`${t}-jitter-buffer-capped`,message:`${t==="audio"?"Audio":"Video"} receiver jitter buffer capped at ${s}ms.`,detail:{consumerId:e.id,targetMs:s,applied:o,...i}})}_closeConsumer(e){let t=this._consumers.get(e);if(!t)return;this._consumers.delete(e);let s=t.track;try{t.close()}catch{}if(s){this._tracks.delete(s.id);for(let[n,i]of this._tracksByName)i===s&&this._tracksByName.delete(n)}}_closeConsumersByProducer(e){for(let[t,s]of this._consumers)s.producerId===e&&this._closeConsumer(t)}_mediaPollMs(){let e=this._options.mediaLiveness?.pollMs;return e===void 0?Ml:e}_firstFrameWindowMs(){let e=this._options.mediaLiveness?.stallTimeoutMs;return e===void 0?Al: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._phase.name==="error"&&this._isParkedPhase()||this._isStaleLivenessEvidence()||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?Ol: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._isParkedPhase()||this._statsSampleInFlight||(this._statsSampleInFlight=!0,this._sampleSessionStats(t).catch(s=>{try{this._emitter.emit("error",s instanceof Error?s:new Error(String(s)))}catch{}}).finally(()=>{this._statsSampleInFlight=!1}))},e)}_stopStatsSampler(){this._statsTimer&&(clearInterval(this._statsTimer),this._statsTimer=null),this._statsSampleInFlight=!1}_lanePairKey(e){let t=e.track,s=t?this._streamNameOf(t):void 0;if(s===void 0)return null;let n=Ta(s);return n===void 0?s:s.slice(0,s.length-Nr.length-n.length)}async _sampleSessionStats(e){if(this._consumers.size===0)return;let t=Array.from(this._consumers.values()),s=await Promise.all(t.map(async p=>({consumerId:p.id,kind:p.kind==="video"?"video":"audio",pairKey:this._lanePairKey(p),sample:await Na(p)})));if(e!==this._generation||this._intentionalDisconnect||this._isParkedPhase())return;let n=s.filter(p=>p.pairKey===null),i=s.filter(p=>p.pairKey!==null),a=null,o=s;if(i.length>0){let p=new Map;for(let h of i){let g=h.pairKey,w=p.get(g);w?w.push(h):p.set(g,[h])}let m=-1,f=-1;for(let[h,g]of p){let w=new Set(g.map(x=>x.kind)).size>=2?1:0,R=g.reduce((x,_)=>x+_.sample.total,0);(w>m||w===m&&R>f)&&(m=w,f=R,a=h,o=[...g,...n])}}let c=p=>{let m=null,f=-1;for(let{consumerId:h,kind:g,sample:w}of o)g===p&&w.total>f&&(f=w.total,m={consumerId:h,...w});return m},l=c("audio"),d=c("video"),u=d?.estimatedPlayoutTimestamp!=null&&l?.estimatedPlayoutTimestamp!=null?d.estimatedPlayoutTimestamp-l.estimatedPlayoutTimestamp:null;this._emitter.emit("stats",{timestamp:Date.now(),stream:a,avSyncMs:u,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()),s=await Promise.all(t.map(async([o,c])=>[o,await Na(c)]));if(e!==this._generation||this._intentionalDisconnect||this._phase.name==="error"&&this._isParkedPhase()||this._isStaleLivenessEvidence())return;for(let o of this._joinProbes.keys())this._consumers.has(o)||this._joinProbes.delete(o);let n=Date.now();!this._liveReached&&s.some(([,o])=>o.total>0)&&this._setPhase("live");let i=null,a=!1;for(let[o,c]of s){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=Ql(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,...Kl(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._isExplicitEndPhase()||this._reconnectTimer||(this._stopMediaProbe(),this._stopStatsSampler(),this._setState("renegotiating"),this._attemptReconnect())}recover(){if(this._intentionalDisconnect||this._isExplicitEndPhase()||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._isExplicitEndPhase()||this._reconnectTimer)return;this._reconnectAttempts>=ya&&(this._reconnectExhaustedWarned||(this._reconnectExhaustedWarned=!0,this._emitDiagnostic({level:"warning",kind:"signaling-reconnect-forever",message:`signaling reconnect budget spent (${ya} attempts) \u2014 retrying forever with capped backoff while the session lives`})));let s=t?0:wa[Math.min(this._reconnectAttempts,wa.length-1)];this._reconnectAttempts++,this._state!=="renegotiating"&&this._setState("reconnecting"),this._reconnectTimer=setTimeout(async()=>{this._reconnectTimer=null,this._replaceCurrentLegForReconnect();try{await this.connect(e??this._lastStartOptions)}catch(n){if(n instanceof Error&&n.message==="TransportSession: connect cancelled")return;this._attemptReconnect(e)}},s)}_connectUrls(){let e=[],t=s=>{if(!s)return;let n=La(s)!==void 0,i=this._sessionId&&!n?`${s}${s.includes("?")?"&":"?"}sessionId=${encodeURIComponent(this._sessionId)}`:s;e.includes(i)||e.push(i)};t(this._options.url);for(let s of this._options.fallbackUrls??[])t(s);return e}_connectOnce(e,t,s){return new Promise((n,i)=>{let a=!1,o=!1,c=null,l=new WebSocket(e);this._ws=l;let d=()=>this._ws!==l||t!==this._generation,u=m=>{o||(o=!0,c&&clearTimeout(c),this._cancelPendingDial===p&&(this._cancelPendingDial=null),i(m))},p=m=>{try{l.close()}catch{}u(m)};this._cancelPendingDial=p,c=setTimeout(()=>{try{l.close()}catch{}u(new Error("TransportSession: connect timed out"))},Il),l.onopen=()=>{if(!o){if(d()){try{l.close()}catch{}u(new Error("TransportSession: connect superseded during dial"));return}a=!0,c&&clearTimeout(c),this._connectedUrl=e,this._multiplexer=new $t(l),l.send(JSON.stringify(this._startMessage(s))),this._scheduleReconnectBudgetReset(),this._selfEpochAdoptUntil=Date.now()+Ll,this._setState("connected"),this._liveReached||this._setPhase("connecting"),this._emitter.emit("connected"),o=!0,this._cancelPendingDial===p&&(this._cancelPendingDial=null),n()}},l.onerror=()=>{a||u(new Error("WebSocket connection error"))},l.onclose=()=>{if(!a){u(new Error("WebSocket closed before connecting"));return}if(!d()&&(this._clearReconnectBudgetReset(),c&&clearTimeout(c),this._setState("disconnected"),!this._intentionalDisconnect)){if(this._pastDeadline()&&this._phase.name!=="paused"){this._setPhase("paused",{reason:"max_session_age"}),this._emitter.emit("disconnected");return}this._emitter.emit("disconnected"),!this._isExplicitEndPhase()&&this._attemptReconnect(s)}},l.onmessage=m=>{if(!(this._ws!==l||t!==this._generation)&&typeof m.data=="string")try{this._handleMessage(JSON.parse(m.data)).catch(f=>{this._emitter.emit("error",f instanceof Error?f:new Error(String(f)))})}catch(f){this._emitter.emit("error",f instanceof Error?f:new Error(String(f)))}}})}_startMessage(e){let t={type:"start",version:Bl,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,this._reconnectExhaustedWarned=!1},Ul))}_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._pendingConsumeData=[],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){return!this._ws||this._ws.readyState!==WebSocket.OPEN?!1:(this._ws.send(JSON.stringify(e)),!0)}_setState(e){this._state!==e&&(this._state=e,this._emitter.emit("stateChange",e))}_isParkedPhase(){return this._phase.name==="paused"?!0:this._phase.name!=="error"?!1:this._phase.error?.kind!=="transport-failed"}_isExplicitEndPhase(){if(this._phase.name==="paused"&&!this._isComputeReleasedPark())return!1;if(this._phase.name!=="error")return this._isComputeReleasedPark();let e=this._phase.error?.kind;return e!==void 0&&e!=="transport-failed"}_isComputeReleasedPark(){if(this._phase.name!=="paused")return!1;let e=this._phase.reason;return e==="closed"||e==="released"||e==="releasing"||e==="reaped"||e==="expired"||e==="superseded"||e==="cancelled"||e==="canceled"||e==="max_session_age"}_setPhase(e,t){e==="live"?this._liveReached=!0:(e==="paused"||e==="error")&&(this._liveReached=!1);let s={name:e};t?.queue&&(s.queue=t.queue),t?.runtime&&(s.runtime=t.runtime),t?.reason&&(s.reason=t.reason),s.region=t?.region!==void 0?t.region:this._phase.region,Bt(e)?(this._wakingSince??=Date.now(),s.wakingSince=this._wakingSince):this._wakingSince=void 0,this._requestId&&(s.requestId=this._requestId),this._sessionId&&(s.sessionId=this._sessionId),this._endsAt!==null&&(s.endsAt=this._endsAt),t?.error&&(s.error=t.error),!Wl(this._phase,s)&&(this._phase=s,this._pausedIncarnation=e==="paused"?this._currentEpoch:null,this._isParkedPhase()&&(this._stopMediaProbe(),this._stopStatsSampler(),this._clearRecvIceRestart(),this._clearSendIceRestart()),this._emitter.emit("phase",s))}reportAdmission(e){e.requestId&&(this._requestId=e.requestId),this._lastServerStatus=e.status;let t=Ea(e.status);if(t.unknown){this._reportUnknownServerStatus(e.status,e.reason,"admission",e.region);return}if(this._liveReached)return;e.sessionId&&!this._sessionId&&(this._sessionId=e.sessionId);let{runtime:s,queue:n}=e,i=e.decisionReason==="provisioning_refused"?e.refusalMessage??e.decisionReason:e.reason,a={runtime:s,queue:n,...i?{reason:i}:{},...e.region!==void 0?{region:e.region}:{}};if(zl(e.status)){if(s?.state==="unavailable"){this._setPhase("unavailable",a);return}if(s?.state==="starting"){this._setPhase("provisioning",a);return}if(s?.state==="busy"||e.status==="queued"){this._setPhase("queued",a);return}this._setPhase("provisioning",a);return}this._setPhase(t.phase,t.phase==="paused"?{...a,region:a.region??null}:a)}_emitError(e,t){this._setPhase("error",{error:{reason:e.message,code:t,kind:"transport-failed"}}),this._emitter.emit("error",e)}reportAllocationFailure(e,t,s,n){s==="insufficient_credits"?this._setPhase("error",{error:{reason:e.message,code:s,kind:"insufficient-credits",httpStatus:t}}):this._setPhase("error",{error:{reason:e.message,code:s??"allocation-failed",kind:"create-failed",httpStatus:t,retryAfterSeconds:n}}),this._emitter.emit("error",e)}};function Aa(r){return new Promise(e=>setTimeout(e,r))}function Hl(){return va()}var Fa=["packetsReceived","packetsLost","nackCount","pliCount","firCount","keyFramesDecoded","framesReceived","framesDropped","retransmittedPacketsReceived","retransmittedBytesReceived","jitterBufferDelay","jitterBufferEmittedCount","estimatedPlayoutTimestamp","jitterBufferTargetDelay","jitterBufferMinimumDelay","concealedSamples","insertedSamplesForDeceleration"],Vl=new Set(["estimatedPlayoutTimestamp"]);function Gl(){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 Kl(r){return Object.fromEntries(Fa.map(e=>[e,r[e]]))}function Oa(r,e){return r===null||e===null||e<r?null:e-r}function Ql(r,e){let t=r.packetsLost!==null&&e.packetsLost!==null?e.packetsLost-r.packetsLost:null,s=Oa(r.packetsReceived,e.packetsReceived),n=Oa(r.nackCount,e.nackCount),i=t===null?null:Math.max(0,t),a=i!==null&&s!==null?i+s:0;return{packetsLostWindow:t,packetsReceivedWindow:s,nackCountWindow:n,jitterSec:e.jitter,lossPct:a>0&&i!==null?i/a*100:null}}function $a(){return{localType:null,remoteType:null,protocol:null,remoteAddress:null,remotePort:null}}function Jl(r){let e=new Map;Ua(r,o=>{let c=typeof o.id=="string"?o.id:null;c&&e.set(c,o)});let t=Array.from(e.values()).find(o=>o.type==="transport"),s=typeof t?.selectedCandidatePairId=="string"?t.selectedCandidatePairId:null,n=(s?e.get(s):void 0)??Array.from(e.values()).find(o=>o.type==="candidate-pair"&&o.selected===!0)??Array.from(e.values()).find(o=>o.type==="candidate-pair"&&o.nominated===!0);if(!n)return $a();let i=typeof n.localCandidateId=="string"?e.get(n.localCandidateId):void 0,a=typeof n.remoteCandidateId=="string"?e.get(n.remoteCandidateId):void 0;return{localType:typeof i?.candidateType=="string"?i.candidateType:null,remoteType:typeof a?.candidateType=="string"?a.candidateType:null,protocol:typeof i?.protocol=="string"?i.protocol:typeof a?.protocol=="string"?a.protocol:null,remoteAddress:typeof a?.address=="string"?a.address:typeof a?.ip=="string"?a.ip:null,remotePort:typeof a?.port=="number"?a.port:null}}function Ua(r,e){let t=s=>{s&&typeof s=="object"&&e(s)};if(r instanceof Map)for(let[s,n]of r.entries()){if(!n||typeof n!="object")continue;let i=n;e(typeof i.id=="string"?i:{...i,id:s})}else(Array.isArray(r)||r&&typeof r.forEach=="function")&&r.forEach(t)}async function Na(r){let e=Gl();if(typeof r.getStats!="function")return e;let t;try{t=await r.getStats()}catch{return e}return Ua(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 Fa)typeof n[o]=="number"&&(e[o]=Vl.has(o)?e[o]===null?n[o]:Math.max(e[o],n[o]):(e[o]??0)+n[o])}}),e}function Yl(r){if(!r||typeof r!="object")return;let e=r.epoch,t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:void 0}import{WebsocketProvider as Xl}from"y-websocket";import{Awareness as Ba}from"y-protocols/awareness";var Zl=1;function Vp(r){let e=new URL(r);return`${e.protocol}//${e.host}/doc`}var eu=2500,tu=3e4,ru=1e4,su=3;function Gp(r){let e=r.WebSocketPolyfill??globalThis.WebSocket;if(!e)throw new Error("[urun] no WebSocket implementation available for the yjs doc provider (browser global missing and no WebSocketPolyfill passed)");return(t,s,n)=>{let i=`${r.sessionId}/${t}`,a=typeof r.token=="function"?r.token:null,o=typeof r.token=="string"?r.token:void 0,c=r.maxBackoffTimeMs??eu,l=r.dialTimeoutMs??tu,d=new Xl(r.serverUrl,i,s,{awareness:n,params:{dsv:String(Zl),...o?{token:o}:{}},WebSocketPolyfill:e,disableBc:!0,maxBackoffTime:c,resyncInterval:ru,connect:a===null}),u=!1,p,m=!1,f=I=>{m||(m=!0,console.error(`[urun] doc token refresh failed for room ${i} (redialing with previous token):`,I))},h=()=>{if(a){if(p)return p;try{let I=a();if(typeof I=="string"){d.params.token=I,m=!1;return}if(I&&typeof I.then=="function"){let J=I.then(Ue=>{typeof Ue=="string"&&(d.params.token=Ue,m=!1)},Ue=>{f(Ue)}).finally(()=>{p===J&&(p=void 0)});return p=J,J}}catch(I){f(I)}}},g=r.resolveServerUrl,w=0,R=!1,x=I=>{if(typeof I!="string"||I==="")return;let ae=I.replace(/\/+$/,"");ae!==d.serverUrl&&(d.serverUrl=ae,R=!1)},_=()=>{if(!g)return;let I=++w,ae=J=>{R||(R=!0,console.error(`[urun] doc endpoint re-resolve failed for room ${i} (redialing previous host):`,J))};try{let J=g();if(J&&typeof J.then=="function")return J.then(Ue=>{I===w&&x(Ue)},ae);x(J)}catch(J){ae(J)}},v={connected:!1,consecutiveFailures:0,lastCloseCode:null,lastCloseReason:null},D=new Set,F=!1,z=()=>{let I={...v};for(let ae of[...D])ae(I)},N=null,q=()=>{N!==null&&(clearTimeout(N),N=null)},mt=()=>{q(),N=setTimeout(()=>{if(N=null,!u&&d.wsconnecting&&d.ws)try{d.ws.close()}catch{}},l)},gt=null,Ft=()=>{gt!==null&&(clearTimeout(gt),gt=null)},Js=()=>{Ft(),gt=setTimeout(()=>{if(gt=null,!u&&d.shouldConnect&&!d.wsconnected&&!d.wsconnecting&&d.ws===null)try{d.connect()}catch(I){F||(F=!0,console.error(`[urun] doc connection redial threw for room ${i} (still retrying):`,I)),Js()}},c+500)},Ys=({status:I})=>{if(I==="connecting"){Ft(),mt();return}if(I==="connected"){q(),Ft(),v={...v,connected:!0},z();return}v.connected&&(v={...v,connected:!1},z())},Xs=I=>{I&&(F&&(ke()?console.warn(`[urun] doc connection recovered for room ${i}`):console.info(`[urun] doc connection recovered for room ${i}`),F=!1),v.consecutiveFailures!==0&&(v={...v,consecutiveFailures:0},z()))},Zs=I=>{q(),v={connected:!1,consecutiveFailures:v.consecutiveFailures+1,lastCloseCode:I?I.code:null,lastCloseReason:I&&I.reason?I.reason:null},!F&&v.consecutiveFailures>=su&&(F=!0,console.error(`[urun] doc connection failing for room ${i}: ${v.consecutiveFailures} consecutive failures (last close ${v.lastCloseCode===null?"by provider liveness reap":`code ${v.lastCloseCode}`}${v.lastCloseReason?`, reason "${v.lastCloseReason}"`:""}). Still retrying \u2014 the doc provider never gives up.`)),z(),h(),_(),Js()};d.on("status",Ys),d.on("sync",Xs),d.on("connection-close",Zs),d.wsconnecting?mt():d.wsconnected&&(v={...v,connected:!0});let Fr=!1;return a!==null&&h(),Fr||d.connect(),{get awareness(){return d.awareness},get synced(){return d.synced},onSync(I){let ae=J=>I(J);return d.on("sync",ae),()=>d.off("sync",ae)},onConnectionState(I){return D.add(I),I({...v}),()=>D.delete(I)},ensureConnected(){Fr=!1,d.wsconnected||d.connect()},disconnect(){Fr=!0,d.disconnect()},destroy(){u=!0,q(),Ft(),d.off("status",Ys),d.off("sync",Xs),d.off("connection-close",Zs),D.clear(),d.destroy()}}}}var Vs=class{constructor(e,t,s){this._name=e;this._doc=t;this.awareness=s}_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;_suspended=!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 s of[...this._syncHandlers])s(t)}),this._inner.onConnectionState)this._innerStateUnsub=this._inner.onConnectionState(t=>{this._lastState=t;for(let s of[...this._stateHandlers])s(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._suspended&&this._inner.disconnect?.(),this._inner.synced)for(let t of[...this._syncHandlers])t(!0)}}ensureConnected(){this._suspended=!1,this._inner?.ensureConnected?.()}get disconnect(){return this._inner?.disconnect?()=>{this._suspended=!0,this._inner.disconnect()}:void 0}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()}},qa=class{_target=null;_bridges=[];connect=(e,t,s)=>{let n=new Vs(e,t,s);return this._bridges.push(n),this._target&&n.attach(this._target),n};get connected(){return this._target!==null}setTarget(e){if(this._target!==e){this._target=e,this._bridges=this._bridges.filter(t=>!t.destroyed);for(let t of this._bridges)t.attach(e)}}};import*as Nt from"yjs";function jt(r){if(r===null||typeof r!="object"||Array.isArray(r))return!1;let e=Object.getPrototypeOf(r);return e===Object.prototype||e===null}var jr="$bytes";function nu(r){return r instanceof Uint8Array||r instanceof ArrayBuffer}function iu(r){if(!jt(r))return!1;let e=Object.keys(r);return e.length===1&&e[0]===jr&&typeof r[jr]=="string"}function au(r){return r instanceof ArrayBuffer?new Uint8Array(r):r}function ou(r){if(typeof Buffer<"u")return Buffer.from(r).toString("base64");let e="";for(let t=0;t<r.length;t++)e+=String.fromCharCode(r[t]);return btoa(e)}function cu(r){if(typeof Buffer<"u")return new Uint8Array(Buffer.from(r,"base64"));let e=atob(r),t=new Uint8Array(e.length);for(let s=0;s<e.length;s++)t[s]=e.charCodeAt(s);return t}function Gs(r){if(nu(r))return{[jr]:ou(au(r))};if(Array.isArray(r))return r.map(Gs);if(jt(r)){let e={};for(let[t,s]of Object.entries(r))e[t]=Gs(s);return e}return r}function Ot(r){if(iu(r))return cu(r[jr]);if(Array.isArray(r))return r.map(Ot);if(jt(r)){let e={};for(let[t,s]of Object.entries(r))e[t]=Ot(s);return e}return r}var za=Symbol("urun:doc:path-absent");function du(r,e){let t=e.split("."),s=r;for(let n of t){if(s===null||typeof s!="object"||!(n in s))return za;s=s[n]}return s}function lu(r,e){return r===e?!0:JSON.stringify(r)===JSON.stringify(e)}function Ks(r,e){for(let[t,s]of Object.entries(e))if(jt(s)){let n=r.get(t);if(!(n instanceof Nt.Map)){let i=n;n=new Nt.Map,r.set(t,n),jt(i)&&Ks(n,i)}Ks(n,s)}else{if(lu(r.get(t),s))continue;r.set(t,s)}}var uu=Symbol("urun:doc:local"),Wa=class{_doc=new Nt.Doc;_root=this._doc.getMap("session");_awareness=new Ba(this._doc);_listeners=new Set;_key;_sessionId;_connection=null;_connUnsub=null;_synced;_syncWaiters=new Set;_texts=new Map;_observer=()=>this.notify();constructor(e,t,s){this._key=e,this._sessionId=t,this._root.observeDeep(this._observer),s?(this._connection=s(e,this._doc,this._awareness),this._synced=this._connection.synced,this._connUnsub=this._connection.onSync(n=>{n&&this._markSynced()}),this._synced&&this._markSynced()):this._synced=!0}get awareness(){return this._awareness}setSessionId(e){this._sessionId=e}get synced(){return this._synced}ensureConnected(){this._connection?.ensureConnected?.()}reconnect(){this.ensureConnected()}disconnect(){let e=this._connection;if(!e?.disconnect)throw new Error(`[urun-sh/core] doc('${this._key}').disconnect(): no disconnect-capable connection to sever (a local-only doc, or a connector with no live socket) \u2014 there is nothing to disconnect`);e.disconnect()}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=Gs(e),this.applyPatch(e)}get(e,t){let s=this.snapshot();if(!e)return Ot(s);let n=du(s,e);return n===za?t:Ot(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 Qs(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(()=>{Ks(this._root,e)},uu)}snapshot(){return this._root.toJSON()}notify(){let e=Ot(this.snapshot());for(let t of this._listeners)t(e)}},Qs=class{constructor(e){this._ytext=e;this._observer=t=>{for(let s of t.delta)if(typeof s.insert=="string"&&s.insert.length>0){let n=s.insert;for(let i of this._delta)i(n)}},this._ytext.observe(this._observer)}_ytext;_delta=new Set;_observer;append(e){e.length!==0&&this._ytext.insert(this._ytext.length,e)}toString(){return this._ytext.toString()}get length(){return this._ytext.length}on(e,t){return this._delta.add(t),()=>this._delta.delete(t)}dispose(){this._ytext.unobserve(this._observer),this._delta.clear()}};function Yp(r){return{get clientId(){return r.clientID},set(e){r.setLocalState(e)},setField(e,t){r.setLocalStateField(e,t)},getLocal(){return r.getLocalState()??null},getStates(){return r.getStates()},on(e,t){let s=()=>t(r.getStates());return r.on("change",s),s(),()=>r.off("change",s)}}}export{$t as a,rn as b,sn as c,oe as d,De as e,qe as f,nn as g,an as h,on as i,qt as j,Ut as k,cn as l,dn as m,$r as n,Te as o,fu as p,_t as q,B as r,Bt as s,_u as t,Za as u,pn as v,vu as w,wu as x,Wt as y,hn as z,fn as A,mn as B,Ur as C,Ht as D,Be as E,Vt as F,qr as G,Y as H,Hr as I,Eu as J,Pu as K,no as L,xu as M,Du as N,Iu as O,Lu as P,Mu as Q,Au as R,xo as S,va as T,Qr as U,Jr as V,Nu as W,Pn as X,ju as Y,Up as Z,Nr as _,Ta as $,qp as aa,Bl as ba,Ma as ca,Zl as da,Vp as ea,Gp as fa,qa as ga,Wa as ha,Yp as ia};
|