@urun-sh/core 0.2.7 → 0.2.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.
@@ -1,3 +1,3 @@
1
- "use strict";var bn=Object.create;var vt=Object.defineProperty;var Sn=Object.getOwnPropertyDescriptor;var Cn=Object.getOwnPropertyNames;var Rn=Object.getPrototypeOf,Tn=Object.prototype.hasOwnProperty;var T=(s,e)=>()=>{try{return e||s((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}},En=(s,e)=>{for(var t in e)vt(s,t,{get:e[t],enumerable:!0})},us=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Cn(e))!Tn.call(s,i)&&i!==t&&vt(s,i,{get:()=>e[i],enumerable:!(r=Sn(e,i))||r.enumerable});return s};var pr=(s,e,t)=>(t=s!=null?bn(Rn(s)):{},us(e||!s||!s.__esModule?vt(t,"default",{value:s,enumerable:!0}):t,s)),xn=s=>us(vt({},"__esModule",{value:!0}),s);var fs=T((Hc,hs)=>{"use strict";var Ee=1e3,xe=Ee*60,ke=xe*60,_e=ke*24,kn=_e*7,Pn=_e*365.25;hs.exports=function(s,e){e=e||{};var t=typeof s;if(t==="string"&&s.length>0)return Dn(s);if(t==="number"&&isFinite(s))return e.long?Ln(s):In(s);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(s))};function Dn(s){if(s=String(s),!(s.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(s);if(e){var t=parseFloat(e[1]),r=(e[2]||"ms").toLowerCase();switch(r){case"years":case"year":case"yrs":case"yr":case"y":return t*Pn;case"weeks":case"week":case"w":return t*kn;case"days":case"day":case"d":return t*_e;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*xe;case"seconds":case"second":case"secs":case"sec":case"s":return t*Ee;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:return}}}}function In(s){var e=Math.abs(s);return e>=_e?Math.round(s/_e)+"d":e>=ke?Math.round(s/ke)+"h":e>=xe?Math.round(s/xe)+"m":e>=Ee?Math.round(s/Ee)+"s":s+"ms"}function Ln(s){var e=Math.abs(s);return e>=_e?wt(s,e,_e,"day"):e>=ke?wt(s,e,ke,"hour"):e>=xe?wt(s,e,xe,"minute"):e>=Ee?wt(s,e,Ee,"second"):s+" ms"}function wt(s,e,t,r){var i=e>=t*1.5;return Math.round(s/t)+" "+r+(i?"s":"")}});var gs=T((Vc,ms)=>{"use strict";function Mn(s){t.debug=t,t.default=t,t.coerce=c,t.disable=a,t.enable=i,t.enabled=o,t.humanize=fs(),t.destroy=p,Object.keys(s).forEach(d=>{t[d]=s[d]}),t.names=[],t.skips=[],t.formatters={};function e(d){let l=0;for(let u=0;u<d.length;u++)l=(l<<5)-l+d.charCodeAt(u),l|=0;return t.colors[Math.abs(l)%t.colors.length]}t.selectColor=e;function t(d){let l,u=null,f,m;function h(...g){if(!h.enabled)return;let w=h,E=Number(new Date),P=E-(l||E);w.diff=P,w.prev=l,w.curr=E,l=E,g[0]=t.coerce(g[0]),typeof g[0]!="string"&&g.unshift("%O");let k=0;g[0]=g[0].replace(/%([a-zA-Z%])/g,(L,Te)=>{if(L==="%%")return"%";k++;let Je=t.formatters[Te];if(typeof Je=="function"){let ue=g[k];L=Je.call(w,ue),g.splice(k,1),k--}return L}),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=r,h.destroy=t.destroy,Object.defineProperty(h,"enabled",{enumerable:!0,configurable:!1,get:()=>u!==null?u:(f!==t.namespaces&&(f=t.namespaces,m=t.enabled(d)),m),set:g=>{u=g}}),typeof t.init=="function"&&t.init(h),h}function r(d,l){let u=t(this.namespace+(typeof l>"u"?":":l)+d);return u.log=this.log,u}function i(d){t.save(d),t.namespaces=d,t.names=[],t.skips=[];let l=(typeof d=="string"?d:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let u of l)u[0]==="-"?t.skips.push(u.slice(1)):t.names.push(u)}function n(d,l){let u=0,f=0,m=-1,h=0;for(;u<d.length;)if(f<l.length&&(l[f]===d[u]||l[f]==="*"))l[f]==="*"?(m=f,h=u,f++):(u++,f++);else if(m!==-1)f=m+1,h++,u=h;else return!1;for(;f<l.length&&l[f]==="*";)f++;return f===l.length}function a(){let d=[...t.names,...t.skips.map(l=>"-"+l)].join(",");return t.enable(""),d}function o(d){for(let l of t.skips)if(n(d,l))return!1;for(let l of t.names)if(n(d,l))return!0;return!1}function c(d){return d instanceof Error?d.stack||d.message:d}function p(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.enable(t.load()),t}ms.exports=Mn});var Xe=T((U,yt)=>{"use strict";U.formatArgs=An;U.save=Nn;U.load=jn;U.useColors=On;U.storage=Fn();U.destroy=(()=>{let s=!1;return()=>{s||(s=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();U.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 On(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let s;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(s=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(s[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function An(s){if(s[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+s[0]+(this.useColors?"%c ":" ")+"+"+yt.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;s.splice(1,0,e,"color: inherit");let t=0,r=0;s[0].replace(/%[a-zA-Z%]/g,i=>{i!=="%%"&&(t++,i==="%c"&&(r=t))}),s.splice(r,0,e)}U.log=console.debug||console.log||(()=>{});function Nn(s){try{s?U.storage.setItem("debug",s):U.storage.removeItem("debug")}catch{}}function jn(){let s;try{s=U.storage.getItem("debug")||U.storage.getItem("DEBUG")}catch{}return!s&&typeof process<"u"&&"env"in process&&(s=process.env.DEBUG),s}function Fn(){try{return localStorage}catch{}}yt.exports=gs()(U);var{formatters:qn}=yt.exports;qn.j=function(s){try{return JSON.stringify(s)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var vs=T(_s=>{"use strict";Object.defineProperty(_s,"__esModule",{value:!0})});var q=T(bt=>{"use strict";Object.defineProperty(bt,"__esModule",{value:!0});bt.Logger=void 0;var Pe=Xe(),De="media-client",lr=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,Pe.default)(`${De}:${e}`),this._warn=(0,Pe.default)(`${De}:WARN:${e}`),this._error=(0,Pe.default)(`${De}:ERROR:${e}`)):(this._debug=(0,Pe.default)(De),this._warn=(0,Pe.default)(`${De}:WARN`),this._error=(0,Pe.default)(`${De}: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}};bt.Logger=lr});var Ps=T((Kc,ur)=>{"use strict";var Ie=typeof Reflect=="object"?Reflect:null,ws=Ie&&typeof Ie.apply=="function"?Ie.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)},St;Ie&&typeof Ie.ownKeys=="function"?St=Ie.ownKeys:Object.getOwnPropertySymbols?St=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:St=function(e){return Object.getOwnPropertyNames(e)};function zn(s){console&&console.warn&&console.warn(s)}var bs=Number.isNaN||function(e){return e!==e};function D(){D.init.call(this)}ur.exports=D;ur.exports.once=Wn;D.EventEmitter=D;D.prototype._events=void 0;D.prototype._eventsCount=0;D.prototype._maxListeners=void 0;var ys=10;function Ct(s){if(typeof s!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof s)}Object.defineProperty(D,"defaultMaxListeners",{enumerable:!0,get:function(){return ys},set:function(s){if(typeof s!="number"||s<0||bs(s))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+s+".");ys=s}});D.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};D.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||bs(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 Ss(s){return s._maxListeners===void 0?D.defaultMaxListeners:s._maxListeners}D.prototype.getMaxListeners=function(){return Ss(this)};D.prototype.emit=function(e){for(var t=[],r=1;r<arguments.length;r++)t.push(arguments[r]);var i=e==="error",n=this._events;if(n!==void 0)i=i&&n.error===void 0;else if(!i)return!1;if(i){var a;if(t.length>0&&(a=t[0]),a instanceof Error)throw a;var o=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw o.context=a,o}var c=n[e];if(c===void 0)return!1;if(typeof c=="function")ws(c,this,t);else for(var p=c.length,d=xs(c,p),r=0;r<p;++r)ws(d[r],this,t);return!0};function Cs(s,e,t,r){var i,n,a;if(Ct(t),n=s._events,n===void 0?(n=s._events=Object.create(null),s._eventsCount=0):(n.newListener!==void 0&&(s.emit("newListener",e,t.listener?t.listener:t),n=s._events),a=n[e]),a===void 0)a=n[e]=t,++s._eventsCount;else if(typeof a=="function"?a=n[e]=r?[t,a]:[a,t]:r?a.unshift(t):a.push(t),i=Ss(s),i>0&&a.length>i&&!a.warned){a.warned=!0;var o=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");o.name="MaxListenersExceededWarning",o.emitter=s,o.type=e,o.count=a.length,zn(o)}return s}D.prototype.addListener=function(e,t){return Cs(this,e,t,!1)};D.prototype.on=D.prototype.addListener;D.prototype.prependListener=function(e,t){return Cs(this,e,t,!0)};function $n(){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 Rs(s,e,t){var r={fired:!1,wrapFn:void 0,target:s,type:e,listener:t},i=$n.bind(r);return i.listener=t,r.wrapFn=i,i}D.prototype.once=function(e,t){return Ct(t),this.on(e,Rs(this,e,t)),this};D.prototype.prependOnceListener=function(e,t){return Ct(t),this.prependListener(e,Rs(this,e,t)),this};D.prototype.removeListener=function(e,t){var r,i,n,a,o;if(Ct(t),i=this._events,i===void 0)return this;if(r=i[e],r===void 0)return this;if(r===t||r.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete i[e],i.removeListener&&this.emit("removeListener",e,r.listener||t));else if(typeof r!="function"){for(n=-1,a=r.length-1;a>=0;a--)if(r[a]===t||r[a].listener===t){o=r[a].listener,n=a;break}if(n<0)return this;n===0?r.shift():Bn(r,n),r.length===1&&(i[e]=r[0]),i.removeListener!==void 0&&this.emit("removeListener",e,o||t)}return this};D.prototype.off=D.prototype.removeListener;D.prototype.removeAllListeners=function(e){var t,r,i;if(r=this._events,r===void 0)return this;if(r.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):r[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete r[e]),this;if(arguments.length===0){var n=Object.keys(r),a;for(i=0;i<n.length;++i)a=n[i],a!=="removeListener"&&this.removeAllListeners(a);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(t=r[e],typeof t=="function")this.removeListener(e,t);else if(t!==void 0)for(i=t.length-1;i>=0;i--)this.removeListener(e,t[i]);return this};function Ts(s,e,t){var r=s._events;if(r===void 0)return[];var i=r[e];return i===void 0?[]:typeof i=="function"?t?[i.listener||i]:[i]:t?Un(i):xs(i,i.length)}D.prototype.listeners=function(e){return Ts(this,e,!0)};D.prototype.rawListeners=function(e){return Ts(this,e,!1)};D.listenerCount=function(s,e){return typeof s.listenerCount=="function"?s.listenerCount(e):Es.call(s,e)};D.prototype.listenerCount=Es;function Es(s){var e=this._events;if(e!==void 0){var t=e[s];if(typeof t=="function")return 1;if(t!==void 0)return t.length}return 0}D.prototype.eventNames=function(){return this._eventsCount>0?St(this._events):[]};function xs(s,e){for(var t=new Array(e),r=0;r<e;++r)t[r]=s[r];return t}function Bn(s,e){for(;e+1<s.length;e++)s[e]=s[e+1];s.pop()}function Un(s){for(var e=new Array(s.length),t=0;t<e.length;++t)e[t]=s[t].listener||s[t];return e}function Wn(s,e){return new Promise(function(t,r){function i(a){s.removeListener(e,n),r(a)}function n(){typeof s.removeListener=="function"&&s.removeListener("error",i),t([].slice.call(arguments))}ks(s,e,n,{once:!0}),e!=="error"&&Hn(s,i,{once:!0})})}function Hn(s,e,t){typeof s.on=="function"&&ks(s,"error",e,t)}function ks(s,e,t,r){if(typeof s.on=="function")r.once?s.once(e,t):s.on(e,t);else if(typeof s.addEventListener=="function")s.addEventListener(e,function i(n){r.once&&s.removeEventListener(e,i),t(n)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof s)}});var W=T(Rt=>{"use strict";Object.defineProperty(Rt,"__esModule",{value:!0});Rt.EnhancedEventEmitter=void 0;var Vn=Ps(),Gn=q(),Qn=new Gn.Logger("EnhancedEventEmitter"),hr=class extends Vn.EventEmitter{constructor(){super(),this.setMaxListeners(1/0)}close(){super.removeAllListeners()}emit(e,...t){return super.emit(e,...t)}safeEmit(e,...t){try{return super.emit(e,...t)}catch(r){Qn.error("safeEmit() | event listener threw an error [eventName:%s]:%o",e,r);try{super.emit("listenererror",e,r)}catch{}return!!super.listenerCount(e)}}on(e,t){return super.on(e,t),this}off(e,t){return super.off(e,t),this}addListener(e,t){return super.on(e,t),this}prependListener(e,t){return super.prependListener(e,t),this}once(e,t){return super.once(e,t),this}prependOnceListener(e,t){return super.prependOnceListener(e,t),this}removeListener(e,t){return super.off(e,t),this}removeAllListeners(e){return super.removeAllListeners(e),this}listenerCount(e){return super.listenerCount(e)}listeners(e){return super.listeners(e)}rawListeners(e){return super.rawListeners(e)}};Rt.EnhancedEventEmitter=hr});var G=T(Le=>{"use strict";Object.defineProperty(Le,"__esModule",{value:!0});Le.InvalidStateError=Le.UnsupportedError=void 0;var fr=class s extends Error{constructor(e){super(e),this.name="UnsupportedError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,s):this.stack=new Error(e).stack}};Le.UnsupportedError=fr;var mr=class s extends Error{constructor(e){super(e),this.name="InvalidStateError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,s):this.stack=new Error(e).stack}};Le.InvalidStateError=mr});var ve=T(Ze=>{"use strict";Object.defineProperty(Ze,"__esModule",{value:!0});Ze.clone=Kn;Ze.generateRandomNumber=Yn;Ze.deepFreeze=Ds;function Kn(s){if(s!==void 0)return Number.isNaN(s)?NaN:typeof structuredClone=="function"?structuredClone(s):JSON.parse(JSON.stringify(s))}function Yn(){return Math.round(Math.random()*1e7)}function Ds(s){let e=Reflect.ownKeys(s);for(let t of e){let r=s[t];(r&&typeof r=="object"||typeof r=="function")&&Ds(r)}return Object.freeze(s)}});var Is=T(Tt=>{"use strict";Object.defineProperty(Tt,"__esModule",{value:!0});Tt.Logger=void 0;var Me=Xe(),Oe="h264-profile-level-id",gr=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,Me.default)(`${Oe}:${e}`),this._warn=(0,Me.default)(`${Oe}:WARN:${e}`),this._error=(0,Me.default)(`${Oe}:ERROR:${e}`)):(this._debug=(0,Me.default)(Oe),this._warn=(0,Me.default)(`${Oe}:WARN`),this._error=(0,Me.default)(`${Oe}:ERROR`)),this._debug.log=console.info.bind(console),this._warn.log=console.warn.bind(console),this._error.log=console.error.bind(console)}get debug(){return this._debug}get warn(){return this._warn}get error(){return this._error}};Tt.Logger=gr});var js=T(N=>{"use strict";Object.defineProperty(N,"__esModule",{value:!0});N.ProfileLevelId=N.Level=N.Profile=void 0;N.parseProfileLevelId=As;N.profileLevelIdToString=Ns;N.profileToString=ea;N.levelToString=ta;N.parseSdpProfileLevelId=we;N.isSameProfile=ra;N.isSameProfileAndLevel=sa;N.generateProfileLevelIdStringForAnswer=ia;N.supportedLevel=na;var Jn=Is(),Z=new Jn.Logger,I;(function(s){s[s.ConstrainedBaseline=1]="ConstrainedBaseline",s[s.Baseline=2]="Baseline",s[s.Main=3]="Main",s[s.ConstrainedHigh=4]="ConstrainedHigh",s[s.High=5]="High",s[s.PredictiveHigh444=6]="PredictiveHigh444"})(I||(N.Profile=I={}));var _;(function(s){s[s.L1_b=0]="L1_b",s[s.L1=10]="L1",s[s.L1_1=11]="L1_1",s[s.L1_2=12]="L1_2",s[s.L1_3=13]="L1_3",s[s.L2=20]="L2",s[s.L2_1=21]="L2_1",s[s.L2_2=22]="L2_2",s[s.L3=30]="L3",s[s.L3_1=31]="L3_1",s[s.L3_2=32]="L3_2",s[s.L4=40]="L4",s[s.L4_1=41]="L4_1",s[s.L4_2=42]="L4_2",s[s.L5=50]="L5",s[s.L5_1=51]="L5_1",s[s.L5_2=52]="L5_2"})(_||(N.Level=_={}));var Ae=class{profile;level;constructor(e,t){this.profile=e,this.level=t}};N.ProfileLevelId=Ae;var Xn=new Ae(I.ConstrainedBaseline,_.L3_1),J=class{mask;masked_value;constructor(e){this.mask=~Ms("x",e),this.masked_value=Ms("1",e)}isMatch(e){return this.masked_value===(e&this.mask)}},X=class{profile_idc;profile_iop;profile;constructor(e,t,r){this.profile_idc=e,this.profile_iop=t,this.profile=r}},Zn=[new X(66,new J("x1xx0000"),I.ConstrainedBaseline),new X(77,new J("1xxx0000"),I.ConstrainedBaseline),new X(88,new J("11xx0000"),I.ConstrainedBaseline),new X(66,new J("x0xx0000"),I.Baseline),new X(88,new J("10xx0000"),I.Baseline),new X(77,new J("0x0x0000"),I.Main),new X(100,new J("00000000"),I.High),new X(100,new J("00001100"),I.ConstrainedHigh),new X(244,new J("00000000"),I.PredictiveHigh444)],Ls=[{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:_.L1},{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:_.L1_b},{max_macroblocks_per_second:3e3,max_macroblock_frame_size:396,level:_.L1_1},{max_macroblocks_per_second:6e3,max_macroblock_frame_size:396,level:_.L1_2},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:_.L1_3},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:_.L2},{max_macroblocks_per_second:19800,max_macroblock_frame_size:792,level:_.L2_1},{max_macroblocks_per_second:20250,max_macroblock_frame_size:1620,level:_.L2_2},{max_macroblocks_per_second:40500,max_macroblock_frame_size:1620,level:_.L3},{max_macroblocks_per_second:108e3,max_macroblock_frame_size:3600,level:_.L3_1},{max_macroblocks_per_second:216e3,max_macroblock_frame_size:5120,level:_.L3_2},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:_.L4},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:_.L4_1},{max_macroblocks_per_second:522240,max_macroblock_frame_size:8704,level:_.L4_2},{max_macroblocks_per_second:589824,max_macroblock_frame_size:22080,level:_.L5},{max_macroblocks_per_second:983040,max_macroblock_frame_size:36864,level:_.L5_1},{max_macroblocks_per_second:2073600,max_macroblock_frame_size:36864,level:_.L5_2}];function As(s){if(typeof s!="string"||s.length!==6)return;let t=parseInt(s,16);if(t===0)return;let r=t&255,i=t>>8&255,n=t>>16&255,a;switch(r){case _.L1_1:{a=(i&16)!==0?_.L1_b:_.L1_1;break}case _.L1:case _.L1_2:case _.L1_3:case _.L2:case _.L2_1:case _.L2_2:case _.L3:case _.L3_1:case _.L3_2:case _.L4:case _.L4_1:case _.L4_2:case _.L5:case _.L5_1:case _.L5_2:{a=r;break}default:{Z.warn(`parseProfileLevelId() | unrecognized level_idc [str:${s}, level_idc:${r}]`);return}}for(let o of Zn)if(n===o.profile_idc&&o.profile_iop.isMatch(i))return Z.debug(`parseProfileLevelId() | result [str:${s}, profile:${o.profile}, level:${a}]`),new Ae(o.profile,a);Z.warn(`parseProfileLevelId() | unrecognized profile_idc/profile_iop combination [str:${s}, profile_idc:${n}, profile_iop:${i}]`)}function Ns(s){if(s.level==_.L1_b)switch(s.profile){case I.ConstrainedBaseline:return"42f00b";case I.Baseline:return"42100b";case I.Main:return"4d100b";default:{Z.warn(`profileLevelIdToString() | Level 1_b not is allowed for profile ${s.profile}`);return}}let e;switch(s.profile){case I.ConstrainedBaseline:{e="42e0";break}case I.Baseline:{e="4200";break}case I.Main:{e="4d00";break}case I.ConstrainedHigh:{e="640c";break}case I.High:{e="6400";break}case I.PredictiveHigh444:{e="f400";break}default:{Z.warn(`profileLevelIdToString() | unrecognized profile ${s.profile}`);return}}let t=s.level.toString(16);return t.length===1&&(t=`0${t}`),`${e}${t}`}function ea(s){switch(s){case I.ConstrainedBaseline:return"ConstrainedBaseline";case I.Baseline:return"Baseline";case I.Main:return"Main";case I.ConstrainedHigh:return"ConstrainedHigh";case I.High:return"High";case I.PredictiveHigh444:return"PredictiveHigh444";default:{Z.warn(`profileToString() | unrecognized profile ${s}`);return}}}function ta(s){switch(s){case _.L1_b:return"1b";case _.L1:return"1";case _.L1_1:return"1.1";case _.L1_2:return"1.2";case _.L1_3:return"1.3";case _.L2:return"2";case _.L2_1:return"2.1";case _.L2_2:return"2.2";case _.L3:return"3";case _.L3_1:return"3.1";case _.L3_2:return"3.2";case _.L4:return"4";case _.L4_1:return"4.1";case _.L4_2:return"4.2";case _.L5:return"5";case _.L5_1:return"5.1";case _.L5_2:return"5.2";default:{Z.warn(`levelToString() | unrecognized level ${s}`);return}}}function we(s={}){let e=s["profile-level-id"];return e?As(e):Xn}function ra(s={},e={}){let t=we(s),r=we(e);return!!(t&&r&&t.profile===r.profile)}function sa(s={},e={}){let t=we(s),r=we(e);return!!(t&&r&&t.profile===r.profile&&t.level==r.level)}function ia(s={},e={}){if(!s["profile-level-id"]&&!e["profile-level-id"]){Z.warn("generateProfileLevelIdStringForAnswer() | profile-level-id missing in local and remote params");return}let t=we(s),r=we(e);if(!t)throw new TypeError("invalid local_profile_level_id");if(!r)throw new TypeError("invalid remote_profile_level_id");if(t.profile!==r.profile)throw new TypeError("H264 Profile mismatch");let i=Os(s)&&Os(e),n=t.level,a=r.level,o=oa(n,a),c=i?n:o;return Z.debug(`generateProfileLevelIdStringForAnswer() | result [profile:${t.profile}, level:${c}]`),Ns(new Ae(t.profile,c))}function na(s,e){for(let r=Ls.length-1;r>=0;--r){let i=Ls[r];if(i.max_macroblock_frame_size*256<=s&&i.max_macroblocks_per_second<=e*i.max_macroblock_frame_size)return Z.debug(`supportedLevel() | result [max_frame_pixel_count:${s}, max_fps:${e}, level:${i.level}]`),i.level}Z.warn(`supportedLevel() | no level supported [max_frame_pixel_count:${s}, max_fps:${e}]`)}function Ms(s,e){return+(e[0]===s)<<7|+(e[1]===s)<<6|+(e[2]===s)<<5|+(e[3]===s)<<4|+(e[4]===s)<<3|+(e[5]===s)<<2|+(e[6]===s)<<1|+(e[7]===s)<<0}function aa(s,e){return s===_.L1_b?e!==_.L1&&e!==_.L1_b:e===_.L1_b?s!==_.L1:s<e}function oa(s,e){return aa(s,e)?s:e}function Os(s={}){let e=s["level-asymmetry-allowed"];return e===!0||e===1||e==="1"}});var te=T(z=>{"use strict";Object.defineProperty(z,"__esModule",{value:!0});z.validateAndNormalizeRtpCapabilities=ua;z.validateAndNormalizeRtpParameters=vr;z.validateAndNormalizeSctpStreamParameters=ha;z.validateSctpCapabilities=fa;z.getExtendedRtpCapabilities=ma;z.getRecvRtpCapabilities=ga;z.getSendRtpCapabilities=_a;z.getSendingRtpParameters=va;z.getSendingRemoteRtpParameters=wa;z.reduceCodecs=ya;z.generateProbatorRtpParameters=ba;z.canSend=Sa;z.canReceive=Ca;var Fs=js(),ca=ve(),da="probator",pa=1234,la=127;function ua(s){if(typeof s!="object")throw new TypeError("caps is not an object");if(s.codecs&&!Array.isArray(s.codecs))throw new TypeError("caps.codecs is not an array");s.codecs||(s.codecs=[]);for(let e of s.codecs)Ra(e);if(s.headerExtensions&&!Array.isArray(s.headerExtensions))throw new TypeError("caps.headerExtensions is not an array");s.headerExtensions||(s.headerExtensions=[]);for(let e of s.headerExtensions)Ta(e)}function vr(s){if(typeof s!="object")throw new TypeError("params is not an object");if(s.mid&&typeof s.mid!="string")throw new TypeError("params.mid is not a string");if(!Array.isArray(s.codecs))throw new TypeError("missing params.codecs");for(let e of s.codecs)Ea(e);if(s.headerExtensions&&!Array.isArray(s.headerExtensions))throw new TypeError("params.headerExtensions is not an array");s.headerExtensions||(s.headerExtensions=[]);for(let e of s.headerExtensions)xa(e);if(s.encodings&&!Array.isArray(s.encodings))throw new TypeError("params.encodings is not an array");s.encodings||(s.encodings=[]);for(let e of s.encodings)ka(e);if(s.rtcp&&typeof s.rtcp!="object")throw new TypeError("params.rtcp is not an object");s.rtcp||(s.rtcp={}),Pa(s.rtcp)}function ha(s){if(typeof s!="object")throw new TypeError("params is not an object");if(typeof s.streamId!="number")throw new TypeError("missing params.streamId");let e=!1;if(typeof s.ordered=="boolean"?e=!0:s.ordered=!0,s.maxPacketLifeTime&&typeof s.maxPacketLifeTime!="number")throw new TypeError("invalid params.maxPacketLifeTime");if(s.maxRetransmits&&typeof s.maxRetransmits!="number")throw new TypeError("invalid params.maxRetransmits");if(s.maxPacketLifeTime&&s.maxRetransmits)throw new TypeError("cannot provide both maxPacketLifeTime and maxRetransmits");if(e&&s.ordered&&(s.maxPacketLifeTime||s.maxRetransmits))throw new TypeError("cannot be ordered with maxPacketLifeTime or maxRetransmits");if(!e&&(s.maxPacketLifeTime||s.maxRetransmits)&&(s.ordered=!1),s.label&&typeof s.label!="string")throw new TypeError("invalid params.label");if(s.protocol&&typeof s.protocol!="string")throw new TypeError("invalid params.protocol")}function fa(s){if(typeof s!="object")throw new TypeError("caps is not an object");if(!s.numStreams||typeof s.numStreams!="object")throw new TypeError("missing caps.numStreams");Da(s.numStreams)}function ma(s,e,t){let r={codecs:[],headerExtensions:[]};if(t)for(let i of s.codecs??[]){if(Ne(i))continue;let n=(e.codecs??[]).find(o=>_r(o,i,{strict:!0,modify:!0}));if(!n)continue;let a={kind:i.kind,mimeType:i.mimeType,clockRate:i.clockRate,channels:i.channels,localPayloadType:i.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:n.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:i.parameters??{},remoteParameters:n.parameters??{},rtcpFeedback:qs(i,n)};r.codecs.push(a)}else for(let i of e.codecs??[]){if(Ne(i))continue;let n=(s.codecs??[]).find(o=>_r(o,i,{strict:!0,modify:!0}));if(!n)continue;let a={kind:n.kind,mimeType:n.mimeType,clockRate:n.clockRate,channels:n.channels,localPayloadType:n.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:i.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:n.parameters??{},remoteParameters:i.parameters??{},rtcpFeedback:qs(n,i)};r.codecs.push(a)}for(let i of r.codecs){let n=s.codecs.find(o=>Ne(o)&&o.parameters?.apt===i.localPayloadType),a=e.codecs.find(o=>Ne(o)&&o.parameters?.apt===i.remotePayloadType);n&&a&&(i.localRtxPayloadType=n.preferredPayloadType,i.remoteRtxPayloadType=a.preferredPayloadType)}for(let i of e.headerExtensions){let n=s.headerExtensions.find(o=>Ia(o,i));if(!n)continue;let a={kind:i.kind,uri:i.uri,sendId:n.preferredId,recvId:i.preferredId,encrypt:n.preferredEncrypt??!1,direction:"sendrecv"};switch(i.direction){case"sendrecv":{a.direction="sendrecv";break}case"recvonly":{a.direction="sendonly";break}case"sendonly":{a.direction="recvonly";break}case"inactive":{a.direction="inactive";break}}r.headerExtensions.push(a)}return r}function ga(s){return $s({direction:"recvonly",extendedRtpCapabilities:s})}function _a(s){return $s({direction:"sendonly",extendedRtpCapabilities:s})}function va(s,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let r of e.codecs){if(r.kind!==s)continue;let i={mimeType:r.mimeType,payloadType:r.localPayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.localParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(i),r.localRtxPayloadType){let n={mimeType:`${r.kind}/rtx`,payloadType:r.localRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.localPayloadType},rtcpFeedback:[]};t.codecs.push(n)}}for(let r of e.headerExtensions){if(r.kind&&r.kind!==s||r.direction!=="sendrecv"&&r.direction!=="sendonly")continue;let i={uri:r.uri,id:r.sendId,encrypt:r.encrypt,parameters:{}};t.headerExtensions.push(i)}return t}function wa(s,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let r of e.codecs){if(r.kind!==s)continue;let i={mimeType:r.mimeType,payloadType:r.localPayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.remoteParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(i),r.localRtxPayloadType){let n={mimeType:`${r.kind}/rtx`,payloadType:r.localRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.localPayloadType},rtcpFeedback:[]};t.codecs.push(n)}}for(let r of e.headerExtensions){if(r.kind&&r.kind!==s||r.direction!=="sendrecv"&&r.direction!=="sendonly")continue;let i={uri:r.uri,id:r.sendId,encrypt:r.encrypt,parameters:{}};t.headerExtensions.push(i)}if(t.headerExtensions.some(r=>r.uri==="http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"))for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(i=>i.type!=="goog-remb");else if(t.headerExtensions.some(r=>r.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"))for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(i=>i.type!=="transport-cc");else for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(i=>i.type!=="transport-cc"&&i.type!=="goog-remb");return t}function ya(s,e){let t=[];if(!e)t.push(s[0]),Ne(s[1])&&t.push(s[1]);else{for(let r=0;r<s.length;++r)if(_r(s[r],e,{strict:!0})){t.push(s[r]),Ne(s[r+1])&&t.push(s[r+1]);break}if(t.length===0)throw new TypeError("no matching codec found")}return t}function ba(s){s=ca.clone(s),vr(s);let e={mid:da,codecs:[],headerExtensions:[],encodings:[{ssrc:pa}],rtcp:{cname:"probator"}};return e.codecs.push(s.codecs[0]),e.codecs[0].payloadType=la,e.headerExtensions=s.headerExtensions,e}function Sa(s,e){return(e.codecs??[]).some(t=>t.kind===s)}function Ca(s,e){if(vr(s),s.codecs.length===0)return!1;let t=s.codecs[0];return(e.codecs??[]).some(r=>r.preferredPayloadType===t.payloadType)}function Ra(s){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof s!="object")throw new TypeError("codec is not an object");if(!s.mimeType||typeof s.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(s.kind=t[1].toLowerCase(),typeof s.preferredPayloadType!="number")throw new TypeError("missing codec.preferredPayloadType");if(typeof s.clockRate!="number")throw new TypeError("missing codec.clockRate");s.kind==="audio"?typeof s.channels!="number"&&(s.channels=1):delete s.channels,(!s.parameters||typeof s.parameters!="object")&&(s.parameters={});for(let r of Object.keys(s.parameters)){let i=s.parameters[r];if(i===void 0&&(s.parameters[r]="",i=""),typeof i!="string"&&typeof i!="number")throw new TypeError(`invalid codec parameter [key:${r}s, value:${i}]`);if(r==="apt"&&typeof i!="number")throw new TypeError("invalid codec apt parameter")}(!s.rtcpFeedback||!Array.isArray(s.rtcpFeedback))&&(s.rtcpFeedback=[]);for(let r of s.rtcpFeedback)zs(r)}function zs(s){if(typeof s!="object")throw new TypeError("fb is not an object");if(!s.type||typeof s.type!="string")throw new TypeError("missing fb.type");(!s.parameter||typeof s.parameter!="string")&&(s.parameter="")}function Ta(s){if(typeof s!="object")throw new TypeError("ext is not an object");if(s.kind!=="audio"&&s.kind!=="video")throw new TypeError("invalid ext.kind");if(!s.uri||typeof s.uri!="string")throw new TypeError("missing ext.uri");if(typeof s.preferredId!="number")throw new TypeError("missing ext.preferredId");if(s.preferredEncrypt&&typeof s.preferredEncrypt!="boolean")throw new TypeError("invalid ext.preferredEncrypt");if(s.preferredEncrypt||(s.preferredEncrypt=!1),s.direction&&typeof s.direction!="string")throw new TypeError("invalid ext.direction");s.direction||(s.direction="sendrecv")}function Ea(s){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof s!="object")throw new TypeError("codec is not an object");if(!s.mimeType||typeof s.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(typeof s.payloadType!="number")throw new TypeError("missing codec.payloadType");if(typeof s.clockRate!="number")throw new TypeError("missing codec.clockRate");t[1].toLowerCase()==="audio"?typeof s.channels!="number"&&(s.channels=1):delete s.channels,(!s.parameters||typeof s.parameters!="object")&&(s.parameters={});for(let i of Object.keys(s.parameters)){let n=s.parameters[i];if(n===void 0&&(s.parameters[i]="",n=""),typeof n!="string"&&typeof n!="number")throw new TypeError(`invalid codec parameter [key:${i}s, value:${n}]`);if(i==="apt"&&typeof n!="number")throw new TypeError("invalid codec apt parameter")}(!s.rtcpFeedback||!Array.isArray(s.rtcpFeedback))&&(s.rtcpFeedback=[]);for(let i of s.rtcpFeedback)zs(i)}function xa(s){if(typeof s!="object")throw new TypeError("ext is not an object");if(!s.uri||typeof s.uri!="string")throw new TypeError("missing ext.uri");if(typeof s.id!="number")throw new TypeError("missing ext.id");if(s.encrypt&&typeof s.encrypt!="boolean")throw new TypeError("invalid ext.encrypt");s.encrypt||(s.encrypt=!1),(!s.parameters||typeof s.parameters!="object")&&(s.parameters={});for(let e of Object.keys(s.parameters)){let t=s.parameters[e];if(t===void 0&&(s.parameters[e]="",t=""),typeof t!="string"&&typeof t!="number")throw new TypeError("invalid header extension parameter")}}function ka(s){if(typeof s!="object")throw new TypeError("encoding is not an object");if(s.ssrc&&typeof s.ssrc!="number")throw new TypeError("invalid encoding.ssrc");if(s.rid&&typeof s.rid!="string")throw new TypeError("invalid encoding.rid");if(s.rtx&&typeof s.rtx!="object")throw new TypeError("invalid encoding.rtx");if(s.rtx&&typeof s.rtx.ssrc!="number")throw new TypeError("missing encoding.rtx.ssrc");if((!s.dtx||typeof s.dtx!="boolean")&&(s.dtx=!1),s.scalabilityMode&&typeof s.scalabilityMode!="string")throw new TypeError("invalid encoding.scalabilityMode")}function Pa(s){if(typeof s!="object")throw new TypeError("rtcp is not an object");if(s.cname&&typeof s.cname!="string")throw new TypeError("invalid rtcp.cname");(!s.reducedSize||typeof s.reducedSize!="boolean")&&(s.reducedSize=!0)}function Da(s){if(typeof s!="object")throw new TypeError("numStreams is not an object");if(typeof s.OS!="number")throw new TypeError("missing numStreams.OS");if(typeof s.MIS!="number")throw new TypeError("missing numStreams.MIS")}function $s({direction:s,extendedRtpCapabilities:e}){let t={codecs:[],headerExtensions:[]};for(let r of e.codecs){let i={kind:r.kind,mimeType:r.mimeType,preferredPayloadType:r.remotePayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.localParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(i),!r.remoteRtxPayloadType)continue;let n={kind:r.kind,mimeType:`${r.kind}/rtx`,preferredPayloadType:r.remoteRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.remotePayloadType},rtcpFeedback:[]};t.codecs.push(n)}for(let r of e.headerExtensions){if(r.direction!=="sendrecv"&&r.direction!==s)continue;let i={kind:r.kind,uri:r.uri,preferredId:r.recvId,preferredEncrypt:r.encrypt??!1,direction:r.direction};t.headerExtensions.push(i)}return t}function Ne(s){return s?/.+\/rtx$/i.test(s.mimeType):!1}function _r(s,e,{strict:t=!1,modify:r=!1}={}){let i=s.mimeType.toLowerCase(),n=e.mimeType.toLowerCase();if(i!==n||s.clockRate!==e.clockRate||s.channels!==e.channels)return!1;switch(i){case"video/h264":{if(t){let a=s.parameters["packetization-mode"]??0,o=e.parameters["packetization-mode"]??0;if(a!==o||!Fs.isSameProfile(s.parameters,e.parameters))return!1;let c;try{c=Fs.generateProfileLevelIdStringForAnswer(s.parameters,e.parameters)}catch{return!1}r&&(c?(s.parameters["profile-level-id"]=c,e.parameters["profile-level-id"]=c):(delete s.parameters["profile-level-id"],delete e.parameters["profile-level-id"]))}break}case"video/vp9":{if(t){let a=s.parameters["profile-id"]??0,o=e.parameters["profile-id"]??0;if(a!==o)return!1}break}}return!0}function Ia(s,e){return!(s.kind&&e.kind&&s.kind!==e.kind||s.uri!==e.uri)}function qs(s,e){let t=[];for(let r of s.rtcpFeedback??[]){let i=(e.rtcpFeedback??[]).find(n=>n.type===r.type&&(n.parameter===r.parameter||!n.parameter&&!r.parameter));i&&t.push(i)}return t}});var Bs=T(Et=>{"use strict";Object.defineProperty(Et,"__esModule",{value:!0});Et.Logger=void 0;var je=Xe(),Fe="awaitqueue",wr=class{_debug;_warn;_error;constructor(e){e?(this._debug=je(`${Fe}:${e}`),this._warn=je(`${Fe}:WARN:${e}`),this._error=je(`${Fe}:ERROR:${e}`)):(this._debug=je(Fe),this._warn=je(`${Fe}:WARN`),this._error=je(`${Fe}:ERROR`)),this._debug.log=console.info.bind(console),this._warn.log=console.warn.bind(console),this._error.log=console.error.bind(console)}get debug(){return this._debug}get warn(){return this._warn}get error(){return this._error}};Et.Logger=wr});var Sr=T(qe=>{"use strict";Object.defineProperty(qe,"__esModule",{value:!0});qe.AwaitQueueRemovedTaskError=qe.AwaitQueueStoppedError=void 0;var yr=class s extends Error{constructor(e){super(e??"queue stopped"),this.name="AwaitQueueStoppedError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,s)}};qe.AwaitQueueStoppedError=yr;var br=class s extends Error{constructor(e){super(e??"queue task removed"),this.name="AwaitQueueRemovedTaskError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,s)}};qe.AwaitQueueRemovedTaskError=br});var Us=T(xt=>{"use strict";Object.defineProperty(xt,"__esModule",{value:!0});xt.AwaitQueue=void 0;var La=Bs(),Cr=Sr(),ae=new La.Logger("AwaitQueue"),Rr=class{pendingTasks=new Map;nextTaskId=0;constructor(){ae.debug("constructor()")}get size(){return this.pendingTasks.size}async push(e,t,r){if(t=t??e.name,ae.debug(`push() [name:${t}, options:%o]`,r),typeof e!="function")throw new TypeError("given task is not a function");if(t)try{Object.defineProperty(e,"name",{value:t})}catch{}return new Promise((i,n)=>{if(t&&r?.removeOngoingTasksWithSameName)for(let o of this.pendingTasks.values())o.name===t&&o.reject(new Cr.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),ae.debug(`resolving task [name:${a.name}]`),i(o);let[c]=this.pendingTasks.values();c&&!c.executedAt&&this.execute(c)},reject:(o,{canExecuteNextTask:c})=>{if(!a.completed&&(a.completed=!0,this.pendingTasks.delete(a.id),ae.debug(`rejecting task [name:${a.name}]: %s`,String(o)),n(o),c)){let[p]=this.pendingTasks.values();p&&!p.executedAt&&this.execute(p)}}};this.pendingTasks.set(a.id,a),this.pendingTasks.size===1&&this.execute(a)})}stop(){ae.debug("stop()");for(let e of this.pendingTasks.values())ae.debug(`stop() | stopping task [name:${e.name}]`),e.reject(new Cr.AwaitQueueStoppedError,{canExecuteNextTask:!1})}remove(e){ae.debug(`remove() [taskIdx:${e}]`);let t=Array.from(this.pendingTasks.values())[e];if(!t){ae.debug(`stop() | no task with given idx [taskIdx:${e}]`);return}t.reject(new Cr.AwaitQueueRemovedTaskError,{canExecuteNextTask:!0})}dump(){let e=Date.now(),t=0;return Array.from(this.pendingTasks.values()).map(r=>({idx:t++,task:r.task,name:r.name,enqueuedTime:r.executedAt?r.executedAt-r.enqueuedAt:e-r.enqueuedAt,executionTime:r.executedAt?e-r.executedAt:0}))}async execute(e){if(ae.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})}}};xt.AwaitQueue=Rr});var Hs=T(he=>{"use strict";Object.defineProperty(he,"__esModule",{value:!0});he.AwaitQueueRemovedTaskError=he.AwaitQueueStoppedError=he.AwaitQueue=void 0;var Ma=Us();Object.defineProperty(he,"AwaitQueue",{enumerable:!0,get:function(){return Ma.AwaitQueue}});var Ws=Sr();Object.defineProperty(he,"AwaitQueueStoppedError",{enumerable:!0,get:function(){return Ws.AwaitQueueStoppedError}});Object.defineProperty(he,"AwaitQueueRemovedTaskError",{enumerable:!0,get:function(){return Ws.AwaitQueueRemovedTaskError}})});var Gs=T(kt=>{"use strict";Object.defineProperty(kt,"__esModule",{value:!0});kt.Producer=void 0;var Oa=q(),Vs=W(),ze=G(),re=new Oa.Logger("Producer"),Tr=class extends Vs.EnhancedEventEmitter{_id;_localId;_closed=!1;_rtpSender;_track;_kind;_rtpParameters;_paused;_maxSpatialLayer;_stopTracks;_disableTrackOnPause;_zeroRtpOnPause;_appData;_observer=new Vs.EnhancedEventEmitter;constructor({id:e,localId:t,rtpSender:r,track:i,rtpParameters:n,stopTracks:a,disableTrackOnPause:o,zeroRtpOnPause:c,appData:p}){super(),re.debug("constructor()"),this._id=e,this._localId=t,this._rtpSender=r,this._track=i,this._kind=i.kind,this._rtpParameters=n,this._paused=o?!i.enabled:!1,this._maxSpatialLayer=void 0,this._stopTracks=a,this._disableTrackOnPause=o,this._zeroRtpOnPause=c,this._appData=p??{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get closed(){return this._closed}get kind(){return this._kind}get rtpSender(){return this._rtpSender}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get maxSpatialLayer(){return this._maxSpatialLayer}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(re.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(re.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new ze.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(re.debug("pause()"),this._closed){re.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(re.debug("resume()"),this._closed){re.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(re.debug("replaceTrack() [track:%o]",e),this._closed){if(e&&this._stopTracks)try{e.stop()}catch{}throw new ze.InvalidStateError("closed")}else if(e?.readyState==="ended")throw new ze.InvalidStateError("track ended");if(e===this._track){re.debug("replaceTrack() | same track, ignored");return}await new Promise((t,r)=>{this.safeEmit("@replacetrack",e,t,r)}),this.destroyTrack(),this._track=e,this._track&&this._disableTrackOnPause&&(this._paused?this._paused&&(this._track.enabled=!1):this._track.enabled=!0),this.handleTrack()}async setMaxSpatialLayer(e){if(this._closed)throw new ze.InvalidStateError("closed");if(this._kind!=="video")throw new ze.UnsupportedError("not a video Producer");if(typeof e!="number")throw new TypeError("invalid spatialLayer");e!==this._maxSpatialLayer&&(await new Promise((t,r)=>{this.safeEmit("@setmaxspatiallayer",e,t,r)}).catch(()=>{}),this._maxSpatialLayer=e)}async setRtpEncodingParameters(e){if(this._closed)throw new ze.InvalidStateError("closed");if(typeof e!="object")throw new TypeError("invalid params");await new Promise((t,r)=>{this.safeEmit("@setrtpencodingparameters",e,t,r)})}onTrackEnded(){re.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{}}};kt.Producer=Tr});var Ks=T(Pt=>{"use strict";Object.defineProperty(Pt,"__esModule",{value:!0});Pt.Consumer=void 0;var Aa=q(),Qs=W(),Na=G(),se=new Aa.Logger("Consumer"),Er=class extends Qs.EnhancedEventEmitter{_id;_localId;_producerId;_closed=!1;_rtpReceiver;_track;_rtpParameters;_paused;_appData;_observer=new Qs.EnhancedEventEmitter;constructor({id:e,localId:t,producerId:r,rtpReceiver:i,track:n,rtpParameters:a,appData:o}){super(),se.debug("constructor()"),this._id=e,this._localId=t,this._producerId=r,this._rtpReceiver=i,this._track=n,this._rtpParameters=a,this._paused=!n.enabled,this._appData=o??{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get producerId(){return this._producerId}get closed(){return this._closed}get kind(){return this._track.kind}get rtpReceiver(){return this._rtpReceiver}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(se.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(se.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new Na.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(se.debug("pause()"),this._closed){se.error("pause() | Consumer closed");return}if(this._paused){se.debug("pause() | Consumer is already paused");return}this._paused=!0,this._track.enabled=!1,this.emit("@pause"),this._observer.safeEmit("pause")}resume(){if(se.debug("resume()"),this._closed){se.error("resume() | Consumer closed");return}if(!this._paused){se.debug("resume() | Consumer is already resumed");return}this._paused=!1,this._track.enabled=!0,this.emit("@resume"),this._observer.safeEmit("resume")}onTrackEnded(){se.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{}}};Pt.Consumer=Er});var Js=T(Dt=>{"use strict";Object.defineProperty(Dt,"__esModule",{value:!0});Dt.DataProducer=void 0;var ja=q(),Ys=W(),Fa=G(),oe=new ja.Logger("DataProducer"),xr=class extends Ys.EnhancedEventEmitter{_id;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new Ys.EnhancedEventEmitter;constructor({id:e,dataChannel:t,sctpStreamParameters:r,appData:i}){super(),oe.debug("constructor()"),this._id=e,this._dataChannel=t,this._sctpStreamParameters=r,this._appData=i??{},this.handleDataChannel()}get id(){return this._id}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get bufferedAmount(){return this._dataChannel.bufferedAmount}get bufferedAmountLowThreshold(){return this._dataChannel.bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._dataChannel.bufferedAmountLowThreshold=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(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"))}send(e){if(oe.debug("send()"),this._closed)throw new Fa.InvalidStateError("closed");this._dataChannel.send(e)}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",()=>{this._closed||oe.warn('DataChannel "message" event in a DataProducer, message discarded')}),this._dataChannel.addEventListener("bufferedamountlow",()=>{this._closed||this.safeEmit("bufferedamountlow")})}};Dt.DataProducer=xr});var Zs=T(It=>{"use strict";Object.defineProperty(It,"__esModule",{value:!0});It.DataConsumer=void 0;var qa=q(),Xs=W(),ye=new qa.Logger("DataConsumer"),kr=class extends Xs.EnhancedEventEmitter{_id;_dataProducerId;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new Xs.EnhancedEventEmitter;constructor({id:e,dataProducerId:t,dataChannel:r,sctpStreamParameters:i,appData:n}){super(),ye.debug("constructor()"),this._id=e,this._dataProducerId=t,this._dataChannel=r,this._sctpStreamParameters=i,this._appData=n??{},this.handleDataChannel()}get id(){return this._id}get dataProducerId(){return this._dataProducerId}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get binaryType(){return this._dataChannel.binaryType}set binaryType(e){this._dataChannel.binaryType=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(ye.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(ye.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(ye.debug('DataChannel "open" event'),this.safeEmit("open"))}),this._dataChannel.addEventListener("error",e=>{if(this._closed)return;let t=e.error??new Error("unknown DataChannel error");e.error?.errorDetail==="sctp-failure"?ye.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):ye.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(ye.warn('DataChannel "close" event'),this._closed=!0,this.emit("@close"),this.safeEmit("close"),this._observer.safeEmit("close"))}),this._dataChannel.addEventListener("message",e=>{this._closed||this.safeEmit("message",e.data)})}};It.DataConsumer=kr});var ti=T(Lt=>{"use strict";Object.defineProperty(Lt,"__esModule",{value:!0});Lt.Transport=void 0;var za=Hs(),$a=q(),ei=W(),A=G(),Pr=ve(),et=te(),Ba=Gs(),Ua=Ks(),Wa=Js(),Ha=Zs(),O=new $a.Logger("Transport"),Dr=class{consumerOptions;promise;resolve;reject;constructor(e){this.consumerOptions=e,this.promise=new Promise((t,r)=>{this.resolve=t,this.reject=r})}},Ir=class extends ei.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 za.AwaitQueue;_pendingConsumerTasks=[];_consumerCreationInProgress=!1;_pendingPauseConsumers=new Map;_consumerPauseInProgress=!1;_pendingResumeConsumers=new Map;_consumerResumeInProgress=!1;_pendingCloseConsumers=new Map;_consumerCloseInProgress=!1;_observer=new ei.EnhancedEventEmitter;constructor({direction:e,id:t,iceParameters:r,iceCandidates:i,dtlsParameters:n,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:p,appData:d,handlerFactory:l,getSendExtendedRtpCapabilities:u,recvRtpCapabilities:f,canProduceByKind:m}){super(),O.debug("constructor() [id:%s, direction:%s]",t,e),this._id=t,this._direction=e,this._getSendExtendedRtpCapabilities=u,this._recvRtpCapabilities=f,this._canProduceByKind=m,this._maxSctpMessageSize=a?.maxMessageSize;let h=Pr.clone(p)??{};delete h.iceServers,delete h.iceTransportPolicy,delete h.bundlePolicy,delete h.rtcpMuxPolicy,this._handler=l.factory({direction:e,iceParameters:r,iceCandidates:i,dtlsParameters:n,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:h,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities}),this._appData=d??{},this.handleHandler()}get id(){return this._id}get closed(){return this._closed}get direction(){return this._direction}get handler(){return this._handler}get iceGatheringState(){return this._iceGatheringState}get connectionState(){return this._connectionState}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){if(!this._closed){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 A.InvalidStateError("closed");return this._handler.getTransportStats()}async restartIce({iceParameters:e}){if(O.debug("restartIce()"),this._closed)throw new A.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 A.InvalidStateError("closed");if(!Array.isArray(e))throw new TypeError("missing iceServers");return this._awaitQueue.push(async()=>this._handler.updateIceServers(e),"transport.updateIceServers()")}async produce({track:e,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:n,codec:a,stopTracks:o=!0,disableTrackOnPause:c=!0,zeroRtpOnPause:p=!1,onRtpSender:d,appData:l={}}={}){if(O.debug("produce() [track:%o]",e),this._closed)throw new A.InvalidStateError("closed");if(e){if(this._direction!=="send")throw new A.UnsupportedError("not a sending Transport");if(this._canProduceByKind[e.kind]){if(e.readyState==="ended")throw new A.InvalidStateError("track ended");if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(this.listenerCount("produce")===0)throw new TypeError('no "produce" listener set into this transport');if(l&&typeof l!="object")throw new TypeError("if given, appData must be an object")}else throw new A.UnsupportedError(`cannot produce ${e.kind}`)}else throw new TypeError("missing track");return this._awaitQueue.push(async()=>{let u;if(r&&!Array.isArray(r))throw TypeError("encodings must be an array");r?.length===0?u=void 0:r&&(u=r.map(g=>{let 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:f,rtpParameters:m,rtpSender:h}=await this._handler.send({track:e,streamId:t,encodings:u,codecOptions:i,headerExtensionOptions:n,codec:a,onRtpSender:d});try{et.validateAndNormalizeRtpParameters(m);let{id:g}=await new Promise((E,P)=>{this.safeEmit("produce",{kind:e.kind,rtpParameters:m,appData:l},E,P)}),w=new Ba.Producer({id:g,localId:f,rtpSender:h,track:e,rtpParameters:m,stopTracks:o,disableTrackOnPause:c,zeroRtpOnPause:p,appData:l});return this._producers.set(w.id,w),this.handleProducer(w),this._observer.safeEmit("newproducer",w),w}catch(g){throw this._handler.stopSending(f).catch(()=>{}),g}},"transport.produce()").catch(u=>{if(o)try{e.stop()}catch{}throw u})}async consume({id:e,producerId:t,kind:r,rtpParameters:i,streamId:n,onRtpReceiver:a,appData:o={}}){if(O.debug("consume()"),this._closed)throw new A.InvalidStateError("closed");if(this._direction!=="recv")throw new A.UnsupportedError("not a receiving Transport");if(typeof e!="string")throw new TypeError("missing id");if(typeof t!="string")throw new TypeError("missing producerId");if(r!=="audio"&&r!=="video")throw new TypeError(`invalid kind '${r}'`);if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(o&&typeof o!="object")throw new TypeError("if given, appData must be an object");let c=Pr.clone(i);if(!et.canReceive(c,this._recvRtpCapabilities))throw new A.UnsupportedError("cannot consume this Producer");let d=new Dr({id:e,producerId:t,kind:r,rtpParameters:c,streamId:n,onRtpReceiver:a,appData:o});return this._pendingConsumerTasks.push(d),queueMicrotask(()=>{this._closed||this._consumerCreationInProgress===!1&&this.createPendingConsumers()}),d.promise}async produceData({ordered:e=!0,maxPacketLifeTime:t,maxRetransmits:r,label:i="",protocol:n="",appData:a={}}={}){if(O.debug("produceData()"),this._closed)throw new A.InvalidStateError("closed");if(this._direction!=="send")throw new A.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 A.UnsupportedError("SCTP not enabled by remote Transport");return(t||r)&&(e=!1),this._awaitQueue.push(async()=>{let{dataChannel:o,sctpStreamParameters:c}=await this._handler.sendDataChannel({sctpStreamParameters:{ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:n}});et.validateAndNormalizeSctpStreamParameters(c);let{id:p}=await new Promise((l,u)=>{this.safeEmit("producedata",{sctpStreamParameters:c,label:i,protocol:n,appData:a},l,u)}),d=new Wa.DataProducer({id:p,dataChannel:o,sctpStreamParameters:c,appData:a});return this._dataProducers.set(d.id,d),this.handleDataProducer(d),this._observer.safeEmit("newdataproducer",d),d},"transport.produceData()")}async consumeData({id:e,dataProducerId:t,sctpStreamParameters:r,label:i="",protocol:n="",appData:a={}}){if(O.debug("consumeData()"),this._closed)throw new A.InvalidStateError("closed");if(this._direction!=="recv")throw new A.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 A.UnsupportedError("SCTP not enabled by remote Transport");let o=Pr.clone(r);return et.validateAndNormalizeSctpStreamParameters(o),this._awaitQueue.push(async()=>{let{dataChannel:c}=await this._handler.receiveDataChannel({maxMessageSize:this._maxSctpMessageSize,sctpStreamParameters:o,label:i,protocol:n}),p=new Ha.DataConsumer({id:e,dataProducerId:t,dataChannel:c,sctpStreamParameters:o,appData:a});return this._dataConsumers.set(p.id,p),this.handleDataConsumer(p),this._observer.safeEmit("newdataconsumer",p),p},"transport.consumeData()")}getDataChannelMaxMessageSize(){return this._handler.getDataChannelMaxMessageSize()}createPendingConsumers(){this._consumerCreationInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingConsumerTasks.length===0){O.debug("createPendingConsumers() | there is no Consumer to be created");return}let e=[...this._pendingConsumerTasks];this._pendingConsumerTasks=[];let t,r=[];for(let i of e){let{id:n,kind:a,rtpParameters:o,streamId:c,onRtpReceiver:p}=i.consumerOptions;r.push({trackId:n,kind:a,rtpParameters:o,streamId:c,onRtpReceiver:p})}try{let i=await this._handler.receive(r);for(let n=0;n<i.length;++n){let a=e[n],o=i[n],{id:c,producerId:p,kind:d,rtpParameters:l,appData:u}=a.consumerOptions,{localId:f,rtpReceiver:m,track:h}=o,g=new Ua.Consumer({id:c,localId:f,producerId:p,rtpReceiver:m,track:h,rtpParameters:l,appData:u});this._consumers.set(g.id,g),this.handleConsumer(g),!this._probatorConsumerCreated&&!t&&d==="video"&&(t=g),this._observer.safeEmit("newconsumer",g),a.resolve(g)}}catch(i){for(let n of e)n.reject(i)}if(t)try{let i=et.generateProbatorRtpParameters(t.rtpParameters);await this._handler.receive([{trackId:"probator",kind:"video",rtpParameters:i}]),O.debug("createPendingConsumers() | Consumer for RTP probation created"),this._probatorConsumerCreated=!0}catch(i){O.error("createPendingConsumers() | failed to create Consumer for RTP probation:%o",i)}},"transport.createPendingConsumers()").then(()=>{this._consumerCreationInProgress=!1,this._pendingConsumerTasks.length>0&&this.createPendingConsumers()}).catch(()=>{})}pausePendingConsumers(){this._consumerPauseInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingPauseConsumers.size===0){O.debug("pausePendingConsumers() | there is no Consumer to be paused");return}let e=Array.from(this._pendingPauseConsumers.values());this._pendingPauseConsumers.clear();try{let t=e.map(r=>r.localId);await this._handler.pauseReceiving(t)}catch(t){O.error("pausePendingConsumers() | failed to pause Consumers:",t)}},"transport.pausePendingConsumers()").then(()=>{this._consumerPauseInProgress=!1,this._pendingPauseConsumers.size>0&&this.pausePendingConsumers()}).catch(()=>{})}resumePendingConsumers(){this._consumerResumeInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingResumeConsumers.size===0){O.debug("resumePendingConsumers() | there is no Consumer to be resumed");return}let e=Array.from(this._pendingResumeConsumers.values());this._pendingResumeConsumers.clear();try{let t=e.map(r=>r.localId);await this._handler.resumeReceiving(t)}catch(t){O.error("resumePendingConsumers() | failed to resume Consumers:",t)}},"transport.resumePendingConsumers()").then(()=>{this._consumerResumeInProgress=!1,this._pendingResumeConsumers.size>0&&this.resumePendingConsumers()}).catch(()=>{})}closePendingConsumers(){this._consumerCloseInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingCloseConsumers.size===0){O.debug("closePendingConsumers() | there is no Consumer to be closed");return}let e=Array.from(this._pendingCloseConsumers.values());this._pendingCloseConsumers.clear();try{await this._handler.stopReceiving(e.map(t=>t.localId))}catch(t){O.error("closePendingConsumers() | failed to close Consumers:",t)}},"transport.closePendingConsumers()").then(()=>{this._consumerCloseInProgress=!1,this._pendingCloseConsumers.size>0&&this.closePendingConsumers()}).catch(()=>{})}handleHandler(){let e=this._handler;e.on("@connect",({dtlsParameters:t},r,i)=>{if(this._closed){i(new A.InvalidStateError("closed"));return}this.safeEmit("connect",{dtlsParameters:t},r,i)}),e.on("@icegatheringstatechange",t=>{t!==this._iceGatheringState&&(O.debug("ICE gathering state changed to %s",t),this._iceGatheringState=t,this._closed||this.safeEmit("icegatheringstatechange",t))}),e.on("@icecandidateerror",t=>{O.warn(`ICE candidate error [url:${t.url}, localAddress:${t.address}, localPort:${t.port}]: ${t.errorCode} "${t.errorText}"`),this.safeEmit("icecandidateerror",t)}),e.on("@connectionstatechange",t=>{t!==this._connectionState&&(O.debug("connection state changed to %s",t),this._connectionState=t,this._closed||this.safeEmit("connectionstatechange",t))})}handleProducer(e){e.on("@close",()=>{this._producers.delete(e.id),!this._closed&&this._awaitQueue.push(async()=>await this._handler.stopSending(e.localId),"producer @close event").catch(t=>O.warn("producer.close() failed:%o",t))}),e.on("@pause",(t,r)=>{this._awaitQueue.push(async()=>await this._handler.pauseSending(e.localId),"producer @pause event").then(t).catch(r)}),e.on("@resume",(t,r)=>{this._awaitQueue.push(async()=>await this._handler.resumeSending(e.localId),"producer @resume event").then(t).catch(r)}),e.on("@replacetrack",(t,r,i)=>{this._awaitQueue.push(async()=>await this._handler.replaceTrack(e.localId,t),"producer @replacetrack event").then(r).catch(i)}),e.on("@setmaxspatiallayer",(t,r,i)=>{this._awaitQueue.push(async()=>await this._handler.setMaxSpatialLayer(e.localId,t),"producer @setmaxspatiallayer event").then(r).catch(i)}),e.on("@setrtpencodingparameters",(t,r,i)=>{this._awaitQueue.push(async()=>await this._handler.setRtpEncodingParameters(e.localId,t),"producer @setrtpencodingparameters event").then(r).catch(i)}),e.on("@getstats",(t,r)=>{if(this._closed)return r(new A.InvalidStateError("closed"));this._handler.getSenderStats(e.localId).then(t).catch(r)})}handleConsumer(e){e.on("@close",()=>{this._consumers.delete(e.id),this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.delete(e.id),!this._closed&&(this._pendingCloseConsumers.set(e.id,e),this._consumerCloseInProgress===!1&&this.closePendingConsumers())}),e.on("@pause",()=>{this._pendingResumeConsumers.has(e.id)&&this._pendingResumeConsumers.delete(e.id),this._pendingPauseConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerPauseInProgress===!1&&this.pausePendingConsumers()})}),e.on("@resume",()=>{this._pendingPauseConsumers.has(e.id)&&this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerResumeInProgress===!1&&this.resumePendingConsumers()})}),e.on("@getstats",(t,r)=>{if(this._closed)return r(new A.InvalidStateError("closed"));this._handler.getReceiverStats(e.localId).then(t).catch(r)})}handleDataProducer(e){e.on("@close",()=>{this._dataProducers.delete(e.id)})}handleDataConsumer(e){e.on("@close",()=>{this._dataConsumers.delete(e.id)})}};Lt.Transport=Ir});var Mt=T((ld,si)=>{"use strict";var ri=si.exports={v:[{name:"version",reg:/^(\d*)$/}],o:[{name:"origin",reg:/^(\S*) (\d*) (\d*) (\S*) IP(\d) (\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\d*) (\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\d) (\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\w*) (\d*) ([\w/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\d*) ([\w\-.]*)(?:\s*\/(\d*)(?:\s*\/(\S*))?)?/,names:["payload","codec","rate","encoding"],format:function(s){return s.encoding?"rtpmap:%d %s/%s/%s":s.rate?"rtpmap:%d %s/%s":"rtpmap:%d %s"}},{push:"fmtp",reg:/^fmtp:(\d*) ([\S| ]*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\d*)(?: (\S*) IP(\d) (\S*))?/,names:["port","netType","ipVer","address"],format:function(s){return s.address!=null?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\*|\d*) trr-int (\d*)/,names:["payload","value"],format:"rtcp-fb:%s trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,names:["payload","type","subtype"],format:function(s){return s.subtype!=null?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:(\d+)(?:\/(\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\S*)(?: (\S*))?/,names:["value","direction","encrypt-uri","uri","config"],format:function(s){return"extmap:%d"+(s.direction?"/%s":"%v")+(s["encrypt-uri"]?" %s":"%v")+" %s"+(s.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(s){return s.sessionConfig!=null?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\w*)/,format:"setup:%s"},{name:"connectionType",reg:/^connection:(new|existing)/,format:"connection:%s"},{name:"mid",reg:/^mid:([^\s]*)/,format:"mid:%s"},{push:"msid",reg:/^msid:([\w-]+)(?: ([\w-]+))?/,names:["id","appdata"],format:"msid:%s %s"},{name:"ptime",reg:/^ptime:(\d*(?:\.\d*)*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\d*(?:\.\d*)*)/,format:"maxptime:%d"},{name:"direction",reg:/^(sendrecv|recvonly|sendonly|inactive)/},{name:"icelite",reg:/^(ice-lite)/},{name:"iceUfrag",reg:/^ice-ufrag:(\S*)/,format:"ice-ufrag:%s"},{name:"icePwd",reg:/^ice-pwd:(\S*)/,format:"ice-pwd:%s"},{name:"fingerprint",reg:/^fingerprint:(\S*) (\S*)/,names:["type","hash"],format:"fingerprint:%s %s"},{push:"candidates",reg:/^candidate:(\S*) (\d*) (\S*) (\d*) (\S*) (\d*) typ (\S*)(?: raddr (\S*) rport (\d*))?(?: tcptype (\S*))?(?: generation (\d*))?(?: network-id (\d*))?(?: network-cost (\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","tcptype","generation","network-id","network-cost"],format:function(s){var e="candidate:%s %d %s %d %s %d typ %s";return e+=s.raddr!=null?" raddr %s rport %d":"%v%v",e+=s.tcptype!=null?" tcptype %s":"%v",s.generation!=null&&(e+=" generation %d"),e+=s["network-id"]!=null?" network-id %d":"%v",e+=s["network-cost"]!=null?" network-cost %d":"%v",e}},{name:"endOfCandidates",reg:/^(end-of-candidates)/},{name:"remoteCandidates",reg:/^remote-candidates:(.*)/,format:"remote-candidates:%s"},{name:"iceOptions",reg:/^ice-options:(\S*)/,format:"ice-options:%s"},{push:"ssrcs",reg:/^ssrc:(\d*) ([\w_-]*)(?::(.*))?/,names:["id","attribute","value"],format:function(s){var e="ssrc:%d";return s.attribute!=null&&(e+=" %s",s.value!=null&&(e+=":%s")),e}},{push:"ssrcGroups",reg:/^ssrc-group:([\x21\x23\x24\x25\x26\x27\x2A\x2B\x2D\x2E\w]*) (.*)/,names:["semantics","ssrcs"],format:"ssrc-group:%s %s"},{name:"msidSemantic",reg:/^msid-semantic:\s?(\w*) (\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{name:"rtcpRsize",reg:/^(rtcp-rsize)/},{name:"sctpmap",reg:/^sctpmap:([\w_/]*) (\S*)(?: (\S*))?/,names:["sctpmapNumber","app","maxMessageSize"],format:function(s){return s.maxMessageSize!=null?"sctpmap:%s %s %s":"sctpmap:%s %s"}},{name:"xGoogleFlag",reg:/^x-google-flag:([^\s]*)/,format:"x-google-flag:%s"},{push:"rids",reg:/^rid:([\d\w]+) (\w+)(?: ([\S| ]*))?/,names:["id","direction","params"],format:function(s){return s.params?"rid:%s %s %s":"rid:%s %s"}},{push:"imageattrs",reg:new RegExp("^imageattr:(\\d+|\\*)[\\s\\t]+(send|recv)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*)(?:[\\s\\t]+(recv|send)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*))?"),names:["pt","dir1","attrs1","dir2","attrs2"],format:function(s){return"imageattr:%s %s %s"+(s.dir2?" %s %s":"")}},{name:"simulcast",reg:new RegExp("^simulcast:(send|recv) ([a-zA-Z0-9\\-_~;,]+)(?:\\s?(send|recv) ([a-zA-Z0-9\\-_~;,]+))?$"),names:["dir1","list1","dir2","list2"],format:function(s){return"simulcast:%s %s"+(s.dir2?" %s %s":"")}},{name:"simulcast_03",reg:/^simulcast:[\s\t]+([\S+\s\t]+)$/,names:["value"],format:"simulcast: %s"},{name:"framerate",reg:/^framerate:(\d+(?:$|\.\d+))/,format:"framerate:%s"},{name:"sourceFilter",reg:/^source-filter: *(excl|incl) (\S*) (IP4|IP6|\*) (\S*) (.*)/,names:["filterMode","netType","addressTypes","destAddress","srcList"],format:"source-filter: %s %s %s %s %s"},{name:"bundleOnly",reg:/^(bundle-only)/},{name:"label",reg:/^label:(.+)/,format:"label:%s"},{name:"sctpPort",reg:/^sctp-port:(\d+)$/,format:"sctp-port:%s"},{name:"maxMessageSize",reg:/^max-message-size:(\d+)$/,format:"max-message-size:%s"},{push:"tsRefClocks",reg:/^ts-refclk:([^\s=]*)(?:=(\S*))?/,names:["clksrc","clksrcExt"],format:function(s){return"ts-refclk:%s"+(s.clksrcExt!=null?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(s){var e="mediaclk:";return e+=s.id!=null?"id=%s %s":"%v%s",e+=s.mediaClockValue!=null?"=%s":"",e+=s.rateNumerator!=null?" rate=%s":"",e+=s.rateDenominator!=null?"/%s":"",e}},{name:"keywords",reg:/^keywds:(.+)$/,format:"keywds:%s"},{name:"content",reg:/^content:(.+)/,format:"content:%s"},{name:"bfcpFloorCtrl",reg:/^floorctrl:(c-only|s-only|c-s)/,format:"floorctrl:%s"},{name:"bfcpConfId",reg:/^confid:(\d+)/,format:"confid:%s"},{name:"bfcpUserId",reg:/^userid:(\d+)/,format:"userid:%s"},{name:"bfcpFloorId",reg:/^floorid:(.+) (?:m-stream|mstrm):(.+)/,names:["id","mStream"],format:"floorid:%s mstrm:%s"},{push:"invalid",names:["value"]}]};Object.keys(ri).forEach(function(s){var e=ri[s];e.forEach(function(t){t.reg||(t.reg=/(.*)/),t.format||(t.format="%s")})})});var ai=T(ce=>{"use strict";var $e=function(s){return String(Number(s))===s?Number(s):s},Va=function(s,e,t,r){if(r&&!t)e[r]=$e(s[1]);else for(var i=0;i<t.length;i+=1)s[i+1]!=null&&(e[t[i]]=$e(s[i+1]))},Ga=function(s,e,t){var r=s.name&&s.names;s.push&&!e[s.push]?e[s.push]=[]:r&&!e[s.name]&&(e[s.name]={});var i=s.push?{}:r?e[s.name]:e;Va(t.match(s.reg),i,s.names,s.name),s.push&&e[s.push].push(i)},ii=Mt(),Qa=RegExp.prototype.test.bind(/^([a-z])=(.*)/);ce.parse=function(s){var e={},t=[],r=e;return s.split(/(\r\n|\r|\n)/).filter(Qa).forEach(function(i){var n=i[0],a=i.slice(2);n==="m"&&(t.push({rtp:[],fmtp:[]}),r=t[t.length-1]);for(var o=0;o<(ii[n]||[]).length;o+=1){var c=ii[n][o];if(c.reg.test(a))return Ga(c,r,a)}}),e.media=t,e};var ni=function(s,e){var t=e.split(/=(.+)/,2);return t.length===2?s[t[0]]=$e(t[1]):t.length===1&&e.length>1&&(s[t[0]]=void 0),s};ce.parseParams=function(s){return s.split(/;\s?/).reduce(ni,{})};ce.parseFmtpConfig=ce.parseParams;ce.parsePayloads=function(s){return s.toString().split(" ").map(Number)};ce.parseRemoteCandidates=function(s){for(var e=[],t=s.split(" ").map($e),r=0;r<t.length;r+=3)e.push({component:t[r],ip:t[r+1],port:t[r+2]});return e};ce.parseImageAttributes=function(s){return s.split(" ").map(function(e){return e.substring(1,e.length-1).split(",").reduce(ni,{})})};ce.parseSimulcastStreamList=function(s){return s.split(";").map(function(e){return e.split(",").map(function(t){var r,i=!1;return t[0]!=="~"?r=$e(t):(r=$e(t.substring(1,t.length)),i=!0),{scid:r,paused:i}})})}});var ci=T((hd,oi)=>{"use strict";var Lr=Mt(),Ka=/%[sdv%]/g,Ya=function(s){var e=1,t=arguments,r=t.length;return s.replace(Ka,function(i){if(e>=r)return i;var n=t[e];switch(e+=1,i){case"%%":return"%";case"%s":return String(n);case"%d":return Number(n);case"%v":return""}})},tt=function(s,e,t){var r=e.format instanceof Function?e.format(e.push?t:t[e.name]):e.format,i=[s+"="+r];if(e.names)for(var n=0;n<e.names.length;n+=1){var a=e.names[n];e.name?i.push(t[e.name][a]):i.push(t[e.names[n]])}else i.push(t[e.name]);return Ya.apply(null,i)},Ja=["v","o","s","i","u","e","p","c","b","t","r","z","a"],Xa=["i","c","b","a"];oi.exports=function(s,e){e=e||{},s.version==null&&(s.version=0),s.name==null&&(s.name=" "),s.media.forEach(function(n){n.payloads==null&&(n.payloads="")});var t=e.outerOrder||Ja,r=e.innerOrder||Xa,i=[];return t.forEach(function(n){Lr[n].forEach(function(a){a.name in s&&s[a.name]!=null?i.push(tt(n,a,s)):a.push in s&&s[a.push]!=null&&s[a.push].forEach(function(o){i.push(tt(n,a,o))})})}),s.media.forEach(function(n){i.push(tt("m",Lr.m[0],n)),r.forEach(function(a){Lr[a].forEach(function(o){o.name in n&&n[o.name]!=null?i.push(tt(a,o,n)):o.push in n&&n[o.push]!=null&&n[o.push].forEach(function(c){i.push(tt(a,o,c))})})})}),i.join(`\r
1
+ "use strict";var Cn=Object.create;var vt=Object.defineProperty;var Rn=Object.getOwnPropertyDescriptor;var Tn=Object.getOwnPropertyNames;var En=Object.getPrototypeOf,xn=Object.prototype.hasOwnProperty;var T=(s,e)=>()=>{try{return e||s((e={exports:{}}).exports,e),e.exports}catch(t){throw e=0,t}},kn=(s,e)=>{for(var t in e)vt(s,t,{get:e[t],enumerable:!0})},hs=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Tn(e))!xn.call(s,i)&&i!==t&&vt(s,i,{get:()=>e[i],enumerable:!(r=Rn(e,i))||r.enumerable});return s};var pr=(s,e,t)=>(t=s!=null?Cn(En(s)):{},hs(e||!s||!s.__esModule?vt(t,"default",{value:s,enumerable:!0}):t,s)),Pn=s=>hs(vt({},"__esModule",{value:!0}),s);var ms=T((Gc,fs)=>{"use strict";var Ee=1e3,xe=Ee*60,ke=xe*60,_e=ke*24,Dn=_e*7,In=_e*365.25;fs.exports=function(s,e){e=e||{};var t=typeof s;if(t==="string"&&s.length>0)return Ln(s);if(t==="number"&&isFinite(s))return e.long?On(s):Mn(s);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(s))};function Ln(s){if(s=String(s),!(s.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(s);if(e){var t=parseFloat(e[1]),r=(e[2]||"ms").toLowerCase();switch(r){case"years":case"year":case"yrs":case"yr":case"y":return t*In;case"weeks":case"week":case"w":return t*Dn;case"days":case"day":case"d":return t*_e;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*xe;case"seconds":case"second":case"secs":case"sec":case"s":return t*Ee;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:return}}}}function Mn(s){var e=Math.abs(s);return e>=_e?Math.round(s/_e)+"d":e>=ke?Math.round(s/ke)+"h":e>=xe?Math.round(s/xe)+"m":e>=Ee?Math.round(s/Ee)+"s":s+"ms"}function On(s){var e=Math.abs(s);return e>=_e?wt(s,e,_e,"day"):e>=ke?wt(s,e,ke,"hour"):e>=xe?wt(s,e,xe,"minute"):e>=Ee?wt(s,e,Ee,"second"):s+" ms"}function wt(s,e,t,r){var i=e>=t*1.5;return Math.round(s/t)+" "+r+(i?"s":"")}});var _s=T((Kc,gs)=>{"use strict";function An(s){t.debug=t,t.default=t,t.coerce=c,t.disable=a,t.enable=i,t.enabled=o,t.humanize=ms(),t.destroy=d,Object.keys(s).forEach(p=>{t[p]=s[p]}),t.names=[],t.skips=[],t.formatters={};function e(p){let l=0;for(let u=0;u<p.length;u++)l=(l<<5)-l+p.charCodeAt(u),l|=0;return t.colors[Math.abs(l)%t.colors.length]}t.selectColor=e;function t(p){let l,u=null,f,m;function h(...g){if(!h.enabled)return;let w=h,E=Number(new Date),P=E-(l||E);w.diff=P,w.prev=l,w.curr=E,l=E,g[0]=t.coerce(g[0]),typeof g[0]!="string"&&g.unshift("%O");let k=0;g[0]=g[0].replace(/%([a-zA-Z%])/g,(L,Te)=>{if(L==="%%")return"%";k++;let Je=t.formatters[Te];if(typeof Je=="function"){let ue=g[k];L=Je.call(w,ue),g.splice(k,1),k--}return L}),t.formatArgs.call(w,g),(w.log||t.log).apply(w,g)}return h.namespace=p,h.useColors=t.useColors(),h.color=t.selectColor(p),h.extend=r,h.destroy=t.destroy,Object.defineProperty(h,"enabled",{enumerable:!0,configurable:!1,get:()=>u!==null?u:(f!==t.namespaces&&(f=t.namespaces,m=t.enabled(p)),m),set:g=>{u=g}}),typeof t.init=="function"&&t.init(h),h}function r(p,l){let u=t(this.namespace+(typeof l>"u"?":":l)+p);return u.log=this.log,u}function i(p){t.save(p),t.namespaces=p,t.names=[],t.skips=[];let l=(typeof p=="string"?p:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let u of l)u[0]==="-"?t.skips.push(u.slice(1)):t.names.push(u)}function n(p,l){let u=0,f=0,m=-1,h=0;for(;u<p.length;)if(f<l.length&&(l[f]===p[u]||l[f]==="*"))l[f]==="*"?(m=f,h=u,f++):(u++,f++);else if(m!==-1)f=m+1,h++,u=h;else return!1;for(;f<l.length&&l[f]==="*";)f++;return f===l.length}function a(){let p=[...t.names,...t.skips.map(l=>"-"+l)].join(",");return t.enable(""),p}function o(p){for(let l of t.skips)if(n(p,l))return!1;for(let l of t.names)if(n(p,l))return!0;return!1}function c(p){return p instanceof Error?p.stack||p.message:p}function d(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return t.enable(t.load()),t}gs.exports=An});var Xe=T((U,yt)=>{"use strict";U.formatArgs=jn;U.save=Fn;U.load=qn;U.useColors=Nn;U.storage=$n();U.destroy=(()=>{let s=!1;return()=>{s||(s=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();U.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 Nn(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let s;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(s=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(s[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function jn(s){if(s[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+s[0]+(this.useColors?"%c ":" ")+"+"+yt.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;s.splice(1,0,e,"color: inherit");let t=0,r=0;s[0].replace(/%[a-zA-Z%]/g,i=>{i!=="%%"&&(t++,i==="%c"&&(r=t))}),s.splice(r,0,e)}U.log=console.debug||console.log||(()=>{});function Fn(s){try{s?U.storage.setItem("debug",s):U.storage.removeItem("debug")}catch{}}function qn(){let s;try{s=U.storage.getItem("debug")||U.storage.getItem("DEBUG")}catch{}return!s&&typeof process<"u"&&"env"in process&&(s=process.env.DEBUG),s}function $n(){try{return localStorage}catch{}}yt.exports=_s()(U);var{formatters:zn}=yt.exports;zn.j=function(s){try{return JSON.stringify(s)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var ws=T(vs=>{"use strict";Object.defineProperty(vs,"__esModule",{value:!0})});var q=T(bt=>{"use strict";Object.defineProperty(bt,"__esModule",{value:!0});bt.Logger=void 0;var Pe=Xe(),De="media-client",lr=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,Pe.default)(`${De}:${e}`),this._warn=(0,Pe.default)(`${De}:WARN:${e}`),this._error=(0,Pe.default)(`${De}:ERROR:${e}`)):(this._debug=(0,Pe.default)(De),this._warn=(0,Pe.default)(`${De}:WARN`),this._error=(0,Pe.default)(`${De}: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}};bt.Logger=lr});var Ds=T((Jc,ur)=>{"use strict";var Ie=typeof Reflect=="object"?Reflect:null,ys=Ie&&typeof Ie.apply=="function"?Ie.apply:function(e,t,r){return Function.prototype.apply.call(e,t,r)},St;Ie&&typeof Ie.ownKeys=="function"?St=Ie.ownKeys:Object.getOwnPropertySymbols?St=function(e){return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e))}:St=function(e){return Object.getOwnPropertyNames(e)};function Bn(s){console&&console.warn&&console.warn(s)}var Ss=Number.isNaN||function(e){return e!==e};function D(){D.init.call(this)}ur.exports=D;ur.exports.once=Vn;D.EventEmitter=D;D.prototype._events=void 0;D.prototype._eventsCount=0;D.prototype._maxListeners=void 0;var bs=10;function Ct(s){if(typeof s!="function")throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof s)}Object.defineProperty(D,"defaultMaxListeners",{enumerable:!0,get:function(){return bs},set:function(s){if(typeof s!="number"||s<0||Ss(s))throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received '+s+".");bs=s}});D.init=function(){(this._events===void 0||this._events===Object.getPrototypeOf(this)._events)&&(this._events=Object.create(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0};D.prototype.setMaxListeners=function(e){if(typeof e!="number"||e<0||Ss(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 Cs(s){return s._maxListeners===void 0?D.defaultMaxListeners:s._maxListeners}D.prototype.getMaxListeners=function(){return Cs(this)};D.prototype.emit=function(e){for(var t=[],r=1;r<arguments.length;r++)t.push(arguments[r]);var i=e==="error",n=this._events;if(n!==void 0)i=i&&n.error===void 0;else if(!i)return!1;if(i){var a;if(t.length>0&&(a=t[0]),a instanceof Error)throw a;var o=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw o.context=a,o}var c=n[e];if(c===void 0)return!1;if(typeof c=="function")ys(c,this,t);else for(var d=c.length,p=ks(c,d),r=0;r<d;++r)ys(p[r],this,t);return!0};function Rs(s,e,t,r){var i,n,a;if(Ct(t),n=s._events,n===void 0?(n=s._events=Object.create(null),s._eventsCount=0):(n.newListener!==void 0&&(s.emit("newListener",e,t.listener?t.listener:t),n=s._events),a=n[e]),a===void 0)a=n[e]=t,++s._eventsCount;else if(typeof a=="function"?a=n[e]=r?[t,a]:[a,t]:r?a.unshift(t):a.push(t),i=Cs(s),i>0&&a.length>i&&!a.warned){a.warned=!0;var o=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");o.name="MaxListenersExceededWarning",o.emitter=s,o.type=e,o.count=a.length,Bn(o)}return s}D.prototype.addListener=function(e,t){return Rs(this,e,t,!1)};D.prototype.on=D.prototype.addListener;D.prototype.prependListener=function(e,t){return Rs(this,e,t,!0)};function Un(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length===0?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function Ts(s,e,t){var r={fired:!1,wrapFn:void 0,target:s,type:e,listener:t},i=Un.bind(r);return i.listener=t,r.wrapFn=i,i}D.prototype.once=function(e,t){return Ct(t),this.on(e,Ts(this,e,t)),this};D.prototype.prependOnceListener=function(e,t){return Ct(t),this.prependListener(e,Ts(this,e,t)),this};D.prototype.removeListener=function(e,t){var r,i,n,a,o;if(Ct(t),i=this._events,i===void 0)return this;if(r=i[e],r===void 0)return this;if(r===t||r.listener===t)--this._eventsCount===0?this._events=Object.create(null):(delete i[e],i.removeListener&&this.emit("removeListener",e,r.listener||t));else if(typeof r!="function"){for(n=-1,a=r.length-1;a>=0;a--)if(r[a]===t||r[a].listener===t){o=r[a].listener,n=a;break}if(n<0)return this;n===0?r.shift():Wn(r,n),r.length===1&&(i[e]=r[0]),i.removeListener!==void 0&&this.emit("removeListener",e,o||t)}return this};D.prototype.off=D.prototype.removeListener;D.prototype.removeAllListeners=function(e){var t,r,i;if(r=this._events,r===void 0)return this;if(r.removeListener===void 0)return arguments.length===0?(this._events=Object.create(null),this._eventsCount=0):r[e]!==void 0&&(--this._eventsCount===0?this._events=Object.create(null):delete r[e]),this;if(arguments.length===0){var n=Object.keys(r),a;for(i=0;i<n.length;++i)a=n[i],a!=="removeListener"&&this.removeAllListeners(a);return this.removeAllListeners("removeListener"),this._events=Object.create(null),this._eventsCount=0,this}if(t=r[e],typeof t=="function")this.removeListener(e,t);else if(t!==void 0)for(i=t.length-1;i>=0;i--)this.removeListener(e,t[i]);return this};function Es(s,e,t){var r=s._events;if(r===void 0)return[];var i=r[e];return i===void 0?[]:typeof i=="function"?t?[i.listener||i]:[i]:t?Hn(i):ks(i,i.length)}D.prototype.listeners=function(e){return Es(this,e,!0)};D.prototype.rawListeners=function(e){return Es(this,e,!1)};D.listenerCount=function(s,e){return typeof s.listenerCount=="function"?s.listenerCount(e):xs.call(s,e)};D.prototype.listenerCount=xs;function xs(s){var e=this._events;if(e!==void 0){var t=e[s];if(typeof t=="function")return 1;if(t!==void 0)return t.length}return 0}D.prototype.eventNames=function(){return this._eventsCount>0?St(this._events):[]};function ks(s,e){for(var t=new Array(e),r=0;r<e;++r)t[r]=s[r];return t}function Wn(s,e){for(;e+1<s.length;e++)s[e]=s[e+1];s.pop()}function Hn(s){for(var e=new Array(s.length),t=0;t<e.length;++t)e[t]=s[t].listener||s[t];return e}function Vn(s,e){return new Promise(function(t,r){function i(a){s.removeListener(e,n),r(a)}function n(){typeof s.removeListener=="function"&&s.removeListener("error",i),t([].slice.call(arguments))}Ps(s,e,n,{once:!0}),e!=="error"&&Gn(s,i,{once:!0})})}function Gn(s,e,t){typeof s.on=="function"&&Ps(s,"error",e,t)}function Ps(s,e,t,r){if(typeof s.on=="function")r.once?s.once(e,t):s.on(e,t);else if(typeof s.addEventListener=="function")s.addEventListener(e,function i(n){r.once&&s.removeEventListener(e,i),t(n)});else throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+typeof s)}});var W=T(Rt=>{"use strict";Object.defineProperty(Rt,"__esModule",{value:!0});Rt.EnhancedEventEmitter=void 0;var Kn=Ds(),Qn=q(),Yn=new Qn.Logger("EnhancedEventEmitter"),hr=class extends Kn.EventEmitter{constructor(){super(),this.setMaxListeners(1/0)}close(){super.removeAllListeners()}emit(e,...t){return super.emit(e,...t)}safeEmit(e,...t){try{return super.emit(e,...t)}catch(r){Yn.error("safeEmit() | event listener threw an error [eventName:%s]:%o",e,r);try{super.emit("listenererror",e,r)}catch{}return!!super.listenerCount(e)}}on(e,t){return super.on(e,t),this}off(e,t){return super.off(e,t),this}addListener(e,t){return super.on(e,t),this}prependListener(e,t){return super.prependListener(e,t),this}once(e,t){return super.once(e,t),this}prependOnceListener(e,t){return super.prependOnceListener(e,t),this}removeListener(e,t){return super.off(e,t),this}removeAllListeners(e){return super.removeAllListeners(e),this}listenerCount(e){return super.listenerCount(e)}listeners(e){return super.listeners(e)}rawListeners(e){return super.rawListeners(e)}};Rt.EnhancedEventEmitter=hr});var G=T(Le=>{"use strict";Object.defineProperty(Le,"__esModule",{value:!0});Le.InvalidStateError=Le.UnsupportedError=void 0;var fr=class s extends Error{constructor(e){super(e),this.name="UnsupportedError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,s):this.stack=new Error(e).stack}};Le.UnsupportedError=fr;var mr=class s extends Error{constructor(e){super(e),this.name="InvalidStateError",Error.hasOwnProperty("captureStackTrace")?Error.captureStackTrace(this,s):this.stack=new Error(e).stack}};Le.InvalidStateError=mr});var ve=T(Ze=>{"use strict";Object.defineProperty(Ze,"__esModule",{value:!0});Ze.clone=Jn;Ze.generateRandomNumber=Xn;Ze.deepFreeze=Is;function Jn(s){if(s!==void 0)return Number.isNaN(s)?NaN:typeof structuredClone=="function"?structuredClone(s):JSON.parse(JSON.stringify(s))}function Xn(){return Math.round(Math.random()*1e7)}function Is(s){let e=Reflect.ownKeys(s);for(let t of e){let r=s[t];(r&&typeof r=="object"||typeof r=="function")&&Is(r)}return Object.freeze(s)}});var Ls=T(Tt=>{"use strict";Object.defineProperty(Tt,"__esModule",{value:!0});Tt.Logger=void 0;var Me=Xe(),Oe="h264-profile-level-id",gr=class{_debug;_warn;_error;constructor(e){e?(this._debug=(0,Me.default)(`${Oe}:${e}`),this._warn=(0,Me.default)(`${Oe}:WARN:${e}`),this._error=(0,Me.default)(`${Oe}:ERROR:${e}`)):(this._debug=(0,Me.default)(Oe),this._warn=(0,Me.default)(`${Oe}:WARN`),this._error=(0,Me.default)(`${Oe}:ERROR`)),this._debug.log=console.info.bind(console),this._warn.log=console.warn.bind(console),this._error.log=console.error.bind(console)}get debug(){return this._debug}get warn(){return this._warn}get error(){return this._error}};Tt.Logger=gr});var Fs=T(N=>{"use strict";Object.defineProperty(N,"__esModule",{value:!0});N.ProfileLevelId=N.Level=N.Profile=void 0;N.parseProfileLevelId=Ns;N.profileLevelIdToString=js;N.profileToString=ra;N.levelToString=sa;N.parseSdpProfileLevelId=we;N.isSameProfile=ia;N.isSameProfileAndLevel=na;N.generateProfileLevelIdStringForAnswer=aa;N.supportedLevel=oa;var Zn=Ls(),Z=new Zn.Logger,I;(function(s){s[s.ConstrainedBaseline=1]="ConstrainedBaseline",s[s.Baseline=2]="Baseline",s[s.Main=3]="Main",s[s.ConstrainedHigh=4]="ConstrainedHigh",s[s.High=5]="High",s[s.PredictiveHigh444=6]="PredictiveHigh444"})(I||(N.Profile=I={}));var _;(function(s){s[s.L1_b=0]="L1_b",s[s.L1=10]="L1",s[s.L1_1=11]="L1_1",s[s.L1_2=12]="L1_2",s[s.L1_3=13]="L1_3",s[s.L2=20]="L2",s[s.L2_1=21]="L2_1",s[s.L2_2=22]="L2_2",s[s.L3=30]="L3",s[s.L3_1=31]="L3_1",s[s.L3_2=32]="L3_2",s[s.L4=40]="L4",s[s.L4_1=41]="L4_1",s[s.L4_2=42]="L4_2",s[s.L5=50]="L5",s[s.L5_1=51]="L5_1",s[s.L5_2=52]="L5_2"})(_||(N.Level=_={}));var Ae=class{profile;level;constructor(e,t){this.profile=e,this.level=t}};N.ProfileLevelId=Ae;var ea=new Ae(I.ConstrainedBaseline,_.L3_1),J=class{mask;masked_value;constructor(e){this.mask=~Os("x",e),this.masked_value=Os("1",e)}isMatch(e){return this.masked_value===(e&this.mask)}},X=class{profile_idc;profile_iop;profile;constructor(e,t,r){this.profile_idc=e,this.profile_iop=t,this.profile=r}},ta=[new X(66,new J("x1xx0000"),I.ConstrainedBaseline),new X(77,new J("1xxx0000"),I.ConstrainedBaseline),new X(88,new J("11xx0000"),I.ConstrainedBaseline),new X(66,new J("x0xx0000"),I.Baseline),new X(88,new J("10xx0000"),I.Baseline),new X(77,new J("0x0x0000"),I.Main),new X(100,new J("00000000"),I.High),new X(100,new J("00001100"),I.ConstrainedHigh),new X(244,new J("00000000"),I.PredictiveHigh444)],Ms=[{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:_.L1},{max_macroblocks_per_second:1485,max_macroblock_frame_size:99,level:_.L1_b},{max_macroblocks_per_second:3e3,max_macroblock_frame_size:396,level:_.L1_1},{max_macroblocks_per_second:6e3,max_macroblock_frame_size:396,level:_.L1_2},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:_.L1_3},{max_macroblocks_per_second:11880,max_macroblock_frame_size:396,level:_.L2},{max_macroblocks_per_second:19800,max_macroblock_frame_size:792,level:_.L2_1},{max_macroblocks_per_second:20250,max_macroblock_frame_size:1620,level:_.L2_2},{max_macroblocks_per_second:40500,max_macroblock_frame_size:1620,level:_.L3},{max_macroblocks_per_second:108e3,max_macroblock_frame_size:3600,level:_.L3_1},{max_macroblocks_per_second:216e3,max_macroblock_frame_size:5120,level:_.L3_2},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:_.L4},{max_macroblocks_per_second:245760,max_macroblock_frame_size:8192,level:_.L4_1},{max_macroblocks_per_second:522240,max_macroblock_frame_size:8704,level:_.L4_2},{max_macroblocks_per_second:589824,max_macroblock_frame_size:22080,level:_.L5},{max_macroblocks_per_second:983040,max_macroblock_frame_size:36864,level:_.L5_1},{max_macroblocks_per_second:2073600,max_macroblock_frame_size:36864,level:_.L5_2}];function Ns(s){if(typeof s!="string"||s.length!==6)return;let t=parseInt(s,16);if(t===0)return;let r=t&255,i=t>>8&255,n=t>>16&255,a;switch(r){case _.L1_1:{a=(i&16)!==0?_.L1_b:_.L1_1;break}case _.L1:case _.L1_2:case _.L1_3:case _.L2:case _.L2_1:case _.L2_2:case _.L3:case _.L3_1:case _.L3_2:case _.L4:case _.L4_1:case _.L4_2:case _.L5:case _.L5_1:case _.L5_2:{a=r;break}default:{Z.warn(`parseProfileLevelId() | unrecognized level_idc [str:${s}, level_idc:${r}]`);return}}for(let o of ta)if(n===o.profile_idc&&o.profile_iop.isMatch(i))return Z.debug(`parseProfileLevelId() | result [str:${s}, profile:${o.profile}, level:${a}]`),new Ae(o.profile,a);Z.warn(`parseProfileLevelId() | unrecognized profile_idc/profile_iop combination [str:${s}, profile_idc:${n}, profile_iop:${i}]`)}function js(s){if(s.level==_.L1_b)switch(s.profile){case I.ConstrainedBaseline:return"42f00b";case I.Baseline:return"42100b";case I.Main:return"4d100b";default:{Z.warn(`profileLevelIdToString() | Level 1_b not is allowed for profile ${s.profile}`);return}}let e;switch(s.profile){case I.ConstrainedBaseline:{e="42e0";break}case I.Baseline:{e="4200";break}case I.Main:{e="4d00";break}case I.ConstrainedHigh:{e="640c";break}case I.High:{e="6400";break}case I.PredictiveHigh444:{e="f400";break}default:{Z.warn(`profileLevelIdToString() | unrecognized profile ${s.profile}`);return}}let t=s.level.toString(16);return t.length===1&&(t=`0${t}`),`${e}${t}`}function ra(s){switch(s){case I.ConstrainedBaseline:return"ConstrainedBaseline";case I.Baseline:return"Baseline";case I.Main:return"Main";case I.ConstrainedHigh:return"ConstrainedHigh";case I.High:return"High";case I.PredictiveHigh444:return"PredictiveHigh444";default:{Z.warn(`profileToString() | unrecognized profile ${s}`);return}}}function sa(s){switch(s){case _.L1_b:return"1b";case _.L1:return"1";case _.L1_1:return"1.1";case _.L1_2:return"1.2";case _.L1_3:return"1.3";case _.L2:return"2";case _.L2_1:return"2.1";case _.L2_2:return"2.2";case _.L3:return"3";case _.L3_1:return"3.1";case _.L3_2:return"3.2";case _.L4:return"4";case _.L4_1:return"4.1";case _.L4_2:return"4.2";case _.L5:return"5";case _.L5_1:return"5.1";case _.L5_2:return"5.2";default:{Z.warn(`levelToString() | unrecognized level ${s}`);return}}}function we(s={}){let e=s["profile-level-id"];return e?Ns(e):ea}function ia(s={},e={}){let t=we(s),r=we(e);return!!(t&&r&&t.profile===r.profile)}function na(s={},e={}){let t=we(s),r=we(e);return!!(t&&r&&t.profile===r.profile&&t.level==r.level)}function aa(s={},e={}){if(!s["profile-level-id"]&&!e["profile-level-id"]){Z.warn("generateProfileLevelIdStringForAnswer() | profile-level-id missing in local and remote params");return}let t=we(s),r=we(e);if(!t)throw new TypeError("invalid local_profile_level_id");if(!r)throw new TypeError("invalid remote_profile_level_id");if(t.profile!==r.profile)throw new TypeError("H264 Profile mismatch");let i=As(s)&&As(e),n=t.level,a=r.level,o=da(n,a),c=i?n:o;return Z.debug(`generateProfileLevelIdStringForAnswer() | result [profile:${t.profile}, level:${c}]`),js(new Ae(t.profile,c))}function oa(s,e){for(let r=Ms.length-1;r>=0;--r){let i=Ms[r];if(i.max_macroblock_frame_size*256<=s&&i.max_macroblocks_per_second<=e*i.max_macroblock_frame_size)return Z.debug(`supportedLevel() | result [max_frame_pixel_count:${s}, max_fps:${e}, level:${i.level}]`),i.level}Z.warn(`supportedLevel() | no level supported [max_frame_pixel_count:${s}, max_fps:${e}]`)}function Os(s,e){return+(e[0]===s)<<7|+(e[1]===s)<<6|+(e[2]===s)<<5|+(e[3]===s)<<4|+(e[4]===s)<<3|+(e[5]===s)<<2|+(e[6]===s)<<1|+(e[7]===s)<<0}function ca(s,e){return s===_.L1_b?e!==_.L1&&e!==_.L1_b:e===_.L1_b?s!==_.L1:s<e}function da(s,e){return ca(s,e)?s:e}function As(s={}){let e=s["level-asymmetry-allowed"];return e===!0||e===1||e==="1"}});var te=T($=>{"use strict";Object.defineProperty($,"__esModule",{value:!0});$.validateAndNormalizeRtpCapabilities=fa;$.validateAndNormalizeRtpParameters=vr;$.validateAndNormalizeSctpStreamParameters=ma;$.validateSctpCapabilities=ga;$.getExtendedRtpCapabilities=_a;$.getRecvRtpCapabilities=va;$.getSendRtpCapabilities=wa;$.getSendingRtpParameters=ya;$.getSendingRemoteRtpParameters=ba;$.reduceCodecs=Sa;$.generateProbatorRtpParameters=Ca;$.canSend=Ra;$.canReceive=Ta;var qs=Fs(),pa=ve(),la="probator",ua=1234,ha=127;function fa(s){if(typeof s!="object")throw new TypeError("caps is not an object");if(s.codecs&&!Array.isArray(s.codecs))throw new TypeError("caps.codecs is not an array");s.codecs||(s.codecs=[]);for(let e of s.codecs)Ea(e);if(s.headerExtensions&&!Array.isArray(s.headerExtensions))throw new TypeError("caps.headerExtensions is not an array");s.headerExtensions||(s.headerExtensions=[]);for(let e of s.headerExtensions)xa(e)}function vr(s){if(typeof s!="object")throw new TypeError("params is not an object");if(s.mid&&typeof s.mid!="string")throw new TypeError("params.mid is not a string");if(!Array.isArray(s.codecs))throw new TypeError("missing params.codecs");for(let e of s.codecs)ka(e);if(s.headerExtensions&&!Array.isArray(s.headerExtensions))throw new TypeError("params.headerExtensions is not an array");s.headerExtensions||(s.headerExtensions=[]);for(let e of s.headerExtensions)Pa(e);if(s.encodings&&!Array.isArray(s.encodings))throw new TypeError("params.encodings is not an array");s.encodings||(s.encodings=[]);for(let e of s.encodings)Da(e);if(s.rtcp&&typeof s.rtcp!="object")throw new TypeError("params.rtcp is not an object");s.rtcp||(s.rtcp={}),Ia(s.rtcp)}function ma(s){if(typeof s!="object")throw new TypeError("params is not an object");if(typeof s.streamId!="number")throw new TypeError("missing params.streamId");let e=!1;if(typeof s.ordered=="boolean"?e=!0:s.ordered=!0,s.maxPacketLifeTime&&typeof s.maxPacketLifeTime!="number")throw new TypeError("invalid params.maxPacketLifeTime");if(s.maxRetransmits&&typeof s.maxRetransmits!="number")throw new TypeError("invalid params.maxRetransmits");if(s.maxPacketLifeTime&&s.maxRetransmits)throw new TypeError("cannot provide both maxPacketLifeTime and maxRetransmits");if(e&&s.ordered&&(s.maxPacketLifeTime||s.maxRetransmits))throw new TypeError("cannot be ordered with maxPacketLifeTime or maxRetransmits");if(!e&&(s.maxPacketLifeTime||s.maxRetransmits)&&(s.ordered=!1),s.label&&typeof s.label!="string")throw new TypeError("invalid params.label");if(s.protocol&&typeof s.protocol!="string")throw new TypeError("invalid params.protocol")}function ga(s){if(typeof s!="object")throw new TypeError("caps is not an object");if(!s.numStreams||typeof s.numStreams!="object")throw new TypeError("missing caps.numStreams");La(s.numStreams)}function _a(s,e,t){let r={codecs:[],headerExtensions:[]};if(t)for(let i of s.codecs??[]){if(Ne(i))continue;let n=(e.codecs??[]).find(o=>_r(o,i,{strict:!0,modify:!0}));if(!n)continue;let a={kind:i.kind,mimeType:i.mimeType,clockRate:i.clockRate,channels:i.channels,localPayloadType:i.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:n.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:i.parameters??{},remoteParameters:n.parameters??{},rtcpFeedback:$s(i,n)};r.codecs.push(a)}else for(let i of e.codecs??[]){if(Ne(i))continue;let n=(s.codecs??[]).find(o=>_r(o,i,{strict:!0,modify:!0}));if(!n)continue;let a={kind:n.kind,mimeType:n.mimeType,clockRate:n.clockRate,channels:n.channels,localPayloadType:n.preferredPayloadType,localRtxPayloadType:void 0,remotePayloadType:i.preferredPayloadType,remoteRtxPayloadType:void 0,localParameters:n.parameters??{},remoteParameters:i.parameters??{},rtcpFeedback:$s(n,i)};r.codecs.push(a)}for(let i of r.codecs){let n=s.codecs.find(o=>Ne(o)&&o.parameters?.apt===i.localPayloadType),a=e.codecs.find(o=>Ne(o)&&o.parameters?.apt===i.remotePayloadType);n&&a&&(i.localRtxPayloadType=n.preferredPayloadType,i.remoteRtxPayloadType=a.preferredPayloadType)}for(let i of e.headerExtensions){let n=s.headerExtensions.find(o=>Ma(o,i));if(!n)continue;let a={kind:i.kind,uri:i.uri,sendId:n.preferredId,recvId:i.preferredId,encrypt:n.preferredEncrypt??!1,direction:"sendrecv"};switch(i.direction){case"sendrecv":{a.direction="sendrecv";break}case"recvonly":{a.direction="sendonly";break}case"sendonly":{a.direction="recvonly";break}case"inactive":{a.direction="inactive";break}}r.headerExtensions.push(a)}return r}function va(s){return Bs({direction:"recvonly",extendedRtpCapabilities:s})}function wa(s){return Bs({direction:"sendonly",extendedRtpCapabilities:s})}function ya(s,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let r of e.codecs){if(r.kind!==s)continue;let i={mimeType:r.mimeType,payloadType:r.localPayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.localParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(i),r.localRtxPayloadType){let n={mimeType:`${r.kind}/rtx`,payloadType:r.localRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.localPayloadType},rtcpFeedback:[]};t.codecs.push(n)}}for(let r of e.headerExtensions){if(r.kind&&r.kind!==s||r.direction!=="sendrecv"&&r.direction!=="sendonly")continue;let i={uri:r.uri,id:r.sendId,encrypt:r.encrypt,parameters:{}};t.headerExtensions.push(i)}return t}function ba(s,e){let t={mid:void 0,codecs:[],headerExtensions:[],encodings:[],rtcp:{}};for(let r of e.codecs){if(r.kind!==s)continue;let i={mimeType:r.mimeType,payloadType:r.localPayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.remoteParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(i),r.localRtxPayloadType){let n={mimeType:`${r.kind}/rtx`,payloadType:r.localRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.localPayloadType},rtcpFeedback:[]};t.codecs.push(n)}}for(let r of e.headerExtensions){if(r.kind&&r.kind!==s||r.direction!=="sendrecv"&&r.direction!=="sendonly")continue;let i={uri:r.uri,id:r.sendId,encrypt:r.encrypt,parameters:{}};t.headerExtensions.push(i)}if(t.headerExtensions.some(r=>r.uri==="http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"))for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(i=>i.type!=="goog-remb");else if(t.headerExtensions.some(r=>r.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"))for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(i=>i.type!=="transport-cc");else for(let r of t.codecs)r.rtcpFeedback=(r.rtcpFeedback??[]).filter(i=>i.type!=="transport-cc"&&i.type!=="goog-remb");return t}function Sa(s,e){let t=[];if(!e)t.push(s[0]),Ne(s[1])&&t.push(s[1]);else{for(let r=0;r<s.length;++r)if(_r(s[r],e,{strict:!0})){t.push(s[r]),Ne(s[r+1])&&t.push(s[r+1]);break}if(t.length===0)throw new TypeError("no matching codec found")}return t}function Ca(s){s=pa.clone(s),vr(s);let e={mid:la,codecs:[],headerExtensions:[],encodings:[{ssrc:ua}],rtcp:{cname:"probator"}};return e.codecs.push(s.codecs[0]),e.codecs[0].payloadType=ha,e.headerExtensions=s.headerExtensions,e}function Ra(s,e){return(e.codecs??[]).some(t=>t.kind===s)}function Ta(s,e){if(vr(s),s.codecs.length===0)return!1;let t=s.codecs[0];return(e.codecs??[]).some(r=>r.preferredPayloadType===t.payloadType)}function Ea(s){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof s!="object")throw new TypeError("codec is not an object");if(!s.mimeType||typeof s.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(s.kind=t[1].toLowerCase(),typeof s.preferredPayloadType!="number")throw new TypeError("missing codec.preferredPayloadType");if(typeof s.clockRate!="number")throw new TypeError("missing codec.clockRate");s.kind==="audio"?typeof s.channels!="number"&&(s.channels=1):delete s.channels,(!s.parameters||typeof s.parameters!="object")&&(s.parameters={});for(let r of Object.keys(s.parameters)){let i=s.parameters[r];if(i===void 0&&(s.parameters[r]="",i=""),typeof i!="string"&&typeof i!="number")throw new TypeError(`invalid codec parameter [key:${r}s, value:${i}]`);if(r==="apt"&&typeof i!="number")throw new TypeError("invalid codec apt parameter")}(!s.rtcpFeedback||!Array.isArray(s.rtcpFeedback))&&(s.rtcpFeedback=[]);for(let r of s.rtcpFeedback)zs(r)}function zs(s){if(typeof s!="object")throw new TypeError("fb is not an object");if(!s.type||typeof s.type!="string")throw new TypeError("missing fb.type");(!s.parameter||typeof s.parameter!="string")&&(s.parameter="")}function xa(s){if(typeof s!="object")throw new TypeError("ext is not an object");if(s.kind!=="audio"&&s.kind!=="video")throw new TypeError("invalid ext.kind");if(!s.uri||typeof s.uri!="string")throw new TypeError("missing ext.uri");if(typeof s.preferredId!="number")throw new TypeError("missing ext.preferredId");if(s.preferredEncrypt&&typeof s.preferredEncrypt!="boolean")throw new TypeError("invalid ext.preferredEncrypt");if(s.preferredEncrypt||(s.preferredEncrypt=!1),s.direction&&typeof s.direction!="string")throw new TypeError("invalid ext.direction");s.direction||(s.direction="sendrecv")}function ka(s){let e=new RegExp("^(audio|video)/(.+)","i");if(typeof s!="object")throw new TypeError("codec is not an object");if(!s.mimeType||typeof s.mimeType!="string")throw new TypeError("missing codec.mimeType");let t=e.exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");if(typeof s.payloadType!="number")throw new TypeError("missing codec.payloadType");if(typeof s.clockRate!="number")throw new TypeError("missing codec.clockRate");t[1].toLowerCase()==="audio"?typeof s.channels!="number"&&(s.channels=1):delete s.channels,(!s.parameters||typeof s.parameters!="object")&&(s.parameters={});for(let i of Object.keys(s.parameters)){let n=s.parameters[i];if(n===void 0&&(s.parameters[i]="",n=""),typeof n!="string"&&typeof n!="number")throw new TypeError(`invalid codec parameter [key:${i}s, value:${n}]`);if(i==="apt"&&typeof n!="number")throw new TypeError("invalid codec apt parameter")}(!s.rtcpFeedback||!Array.isArray(s.rtcpFeedback))&&(s.rtcpFeedback=[]);for(let i of s.rtcpFeedback)zs(i)}function Pa(s){if(typeof s!="object")throw new TypeError("ext is not an object");if(!s.uri||typeof s.uri!="string")throw new TypeError("missing ext.uri");if(typeof s.id!="number")throw new TypeError("missing ext.id");if(s.encrypt&&typeof s.encrypt!="boolean")throw new TypeError("invalid ext.encrypt");s.encrypt||(s.encrypt=!1),(!s.parameters||typeof s.parameters!="object")&&(s.parameters={});for(let e of Object.keys(s.parameters)){let t=s.parameters[e];if(t===void 0&&(s.parameters[e]="",t=""),typeof t!="string"&&typeof t!="number")throw new TypeError("invalid header extension parameter")}}function Da(s){if(typeof s!="object")throw new TypeError("encoding is not an object");if(s.ssrc&&typeof s.ssrc!="number")throw new TypeError("invalid encoding.ssrc");if(s.rid&&typeof s.rid!="string")throw new TypeError("invalid encoding.rid");if(s.rtx&&typeof s.rtx!="object")throw new TypeError("invalid encoding.rtx");if(s.rtx&&typeof s.rtx.ssrc!="number")throw new TypeError("missing encoding.rtx.ssrc");if((!s.dtx||typeof s.dtx!="boolean")&&(s.dtx=!1),s.scalabilityMode&&typeof s.scalabilityMode!="string")throw new TypeError("invalid encoding.scalabilityMode")}function Ia(s){if(typeof s!="object")throw new TypeError("rtcp is not an object");if(s.cname&&typeof s.cname!="string")throw new TypeError("invalid rtcp.cname");(!s.reducedSize||typeof s.reducedSize!="boolean")&&(s.reducedSize=!0)}function La(s){if(typeof s!="object")throw new TypeError("numStreams is not an object");if(typeof s.OS!="number")throw new TypeError("missing numStreams.OS");if(typeof s.MIS!="number")throw new TypeError("missing numStreams.MIS")}function Bs({direction:s,extendedRtpCapabilities:e}){let t={codecs:[],headerExtensions:[]};for(let r of e.codecs){let i={kind:r.kind,mimeType:r.mimeType,preferredPayloadType:r.remotePayloadType,clockRate:r.clockRate,channels:r.channels,parameters:r.localParameters,rtcpFeedback:r.rtcpFeedback};if(t.codecs.push(i),!r.remoteRtxPayloadType)continue;let n={kind:r.kind,mimeType:`${r.kind}/rtx`,preferredPayloadType:r.remoteRtxPayloadType,clockRate:r.clockRate,parameters:{apt:r.remotePayloadType},rtcpFeedback:[]};t.codecs.push(n)}for(let r of e.headerExtensions){if(r.direction!=="sendrecv"&&r.direction!==s)continue;let i={kind:r.kind,uri:r.uri,preferredId:r.recvId,preferredEncrypt:r.encrypt??!1,direction:r.direction};t.headerExtensions.push(i)}return t}function Ne(s){return s?/.+\/rtx$/i.test(s.mimeType):!1}function _r(s,e,{strict:t=!1,modify:r=!1}={}){let i=s.mimeType.toLowerCase(),n=e.mimeType.toLowerCase();if(i!==n||s.clockRate!==e.clockRate||s.channels!==e.channels)return!1;switch(i){case"video/h264":{if(t){let a=s.parameters["packetization-mode"]??0,o=e.parameters["packetization-mode"]??0;if(a!==o||!qs.isSameProfile(s.parameters,e.parameters))return!1;let c;try{c=qs.generateProfileLevelIdStringForAnswer(s.parameters,e.parameters)}catch{return!1}r&&(c?(s.parameters["profile-level-id"]=c,e.parameters["profile-level-id"]=c):(delete s.parameters["profile-level-id"],delete e.parameters["profile-level-id"]))}break}case"video/vp9":{if(t){let a=s.parameters["profile-id"]??0,o=e.parameters["profile-id"]??0;if(a!==o)return!1}break}}return!0}function Ma(s,e){return!(s.kind&&e.kind&&s.kind!==e.kind||s.uri!==e.uri)}function $s(s,e){let t=[];for(let r of s.rtcpFeedback??[]){let i=(e.rtcpFeedback??[]).find(n=>n.type===r.type&&(n.parameter===r.parameter||!n.parameter&&!r.parameter));i&&t.push(i)}return t}});var Us=T(Et=>{"use strict";Object.defineProperty(Et,"__esModule",{value:!0});Et.Logger=void 0;var je=Xe(),Fe="awaitqueue",wr=class{_debug;_warn;_error;constructor(e){e?(this._debug=je(`${Fe}:${e}`),this._warn=je(`${Fe}:WARN:${e}`),this._error=je(`${Fe}:ERROR:${e}`)):(this._debug=je(Fe),this._warn=je(`${Fe}:WARN`),this._error=je(`${Fe}:ERROR`)),this._debug.log=console.info.bind(console),this._warn.log=console.warn.bind(console),this._error.log=console.error.bind(console)}get debug(){return this._debug}get warn(){return this._warn}get error(){return this._error}};Et.Logger=wr});var Sr=T(qe=>{"use strict";Object.defineProperty(qe,"__esModule",{value:!0});qe.AwaitQueueRemovedTaskError=qe.AwaitQueueStoppedError=void 0;var yr=class s extends Error{constructor(e){super(e??"queue stopped"),this.name="AwaitQueueStoppedError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,s)}};qe.AwaitQueueStoppedError=yr;var br=class s extends Error{constructor(e){super(e??"queue task removed"),this.name="AwaitQueueRemovedTaskError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,s)}};qe.AwaitQueueRemovedTaskError=br});var Ws=T(xt=>{"use strict";Object.defineProperty(xt,"__esModule",{value:!0});xt.AwaitQueue=void 0;var Oa=Us(),Cr=Sr(),ae=new Oa.Logger("AwaitQueue"),Rr=class{pendingTasks=new Map;nextTaskId=0;constructor(){ae.debug("constructor()")}get size(){return this.pendingTasks.size}async push(e,t,r){if(t=t??e.name,ae.debug(`push() [name:${t}, options:%o]`,r),typeof e!="function")throw new TypeError("given task is not a function");if(t)try{Object.defineProperty(e,"name",{value:t})}catch{}return new Promise((i,n)=>{if(t&&r?.removeOngoingTasksWithSameName)for(let o of this.pendingTasks.values())o.name===t&&o.reject(new Cr.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),ae.debug(`resolving task [name:${a.name}]`),i(o);let[c]=this.pendingTasks.values();c&&!c.executedAt&&this.execute(c)},reject:(o,{canExecuteNextTask:c})=>{if(!a.completed&&(a.completed=!0,this.pendingTasks.delete(a.id),ae.debug(`rejecting task [name:${a.name}]: %s`,String(o)),n(o),c)){let[d]=this.pendingTasks.values();d&&!d.executedAt&&this.execute(d)}}};this.pendingTasks.set(a.id,a),this.pendingTasks.size===1&&this.execute(a)})}stop(){ae.debug("stop()");for(let e of this.pendingTasks.values())ae.debug(`stop() | stopping task [name:${e.name}]`),e.reject(new Cr.AwaitQueueStoppedError,{canExecuteNextTask:!1})}remove(e){ae.debug(`remove() [taskIdx:${e}]`);let t=Array.from(this.pendingTasks.values())[e];if(!t){ae.debug(`stop() | no task with given idx [taskIdx:${e}]`);return}t.reject(new Cr.AwaitQueueRemovedTaskError,{canExecuteNextTask:!0})}dump(){let e=Date.now(),t=0;return Array.from(this.pendingTasks.values()).map(r=>({idx:t++,task:r.task,name:r.name,enqueuedTime:r.executedAt?r.executedAt-r.enqueuedAt:e-r.enqueuedAt,executionTime:r.executedAt?e-r.executedAt:0}))}async execute(e){if(ae.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})}}};xt.AwaitQueue=Rr});var Vs=T(he=>{"use strict";Object.defineProperty(he,"__esModule",{value:!0});he.AwaitQueueRemovedTaskError=he.AwaitQueueStoppedError=he.AwaitQueue=void 0;var Aa=Ws();Object.defineProperty(he,"AwaitQueue",{enumerable:!0,get:function(){return Aa.AwaitQueue}});var Hs=Sr();Object.defineProperty(he,"AwaitQueueStoppedError",{enumerable:!0,get:function(){return Hs.AwaitQueueStoppedError}});Object.defineProperty(he,"AwaitQueueRemovedTaskError",{enumerable:!0,get:function(){return Hs.AwaitQueueRemovedTaskError}})});var Ks=T(kt=>{"use strict";Object.defineProperty(kt,"__esModule",{value:!0});kt.Producer=void 0;var Na=q(),Gs=W(),$e=G(),re=new Na.Logger("Producer"),Tr=class extends Gs.EnhancedEventEmitter{_id;_localId;_closed=!1;_rtpSender;_track;_kind;_rtpParameters;_paused;_maxSpatialLayer;_stopTracks;_disableTrackOnPause;_zeroRtpOnPause;_appData;_observer=new Gs.EnhancedEventEmitter;constructor({id:e,localId:t,rtpSender:r,track:i,rtpParameters:n,stopTracks:a,disableTrackOnPause:o,zeroRtpOnPause:c,appData:d}){super(),re.debug("constructor()"),this._id=e,this._localId=t,this._rtpSender=r,this._track=i,this._kind=i.kind,this._rtpParameters=n,this._paused=o?!i.enabled:!1,this._maxSpatialLayer=void 0,this._stopTracks=a,this._disableTrackOnPause=o,this._zeroRtpOnPause=c,this._appData=d??{},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||(re.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(re.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new $e.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(re.debug("pause()"),this._closed){re.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(re.debug("resume()"),this._closed){re.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(re.debug("replaceTrack() [track:%o]",e),this._closed){if(e&&this._stopTracks)try{e.stop()}catch{}throw new $e.InvalidStateError("closed")}else if(e?.readyState==="ended")throw new $e.InvalidStateError("track ended");if(e===this._track){re.debug("replaceTrack() | same track, ignored");return}await new Promise((t,r)=>{this.safeEmit("@replacetrack",e,t,r)}),this.destroyTrack(),this._track=e,this._track&&this._disableTrackOnPause&&(this._paused?this._paused&&(this._track.enabled=!1):this._track.enabled=!0),this.handleTrack()}async setMaxSpatialLayer(e){if(this._closed)throw new $e.InvalidStateError("closed");if(this._kind!=="video")throw new $e.UnsupportedError("not a video Producer");if(typeof e!="number")throw new TypeError("invalid spatialLayer");e!==this._maxSpatialLayer&&(await new Promise((t,r)=>{this.safeEmit("@setmaxspatiallayer",e,t,r)}).catch(()=>{}),this._maxSpatialLayer=e)}async setRtpEncodingParameters(e){if(this._closed)throw new $e.InvalidStateError("closed");if(typeof e!="object")throw new TypeError("invalid params");await new Promise((t,r)=>{this.safeEmit("@setrtpencodingparameters",e,t,r)})}onTrackEnded(){re.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{}}};kt.Producer=Tr});var Ys=T(Pt=>{"use strict";Object.defineProperty(Pt,"__esModule",{value:!0});Pt.Consumer=void 0;var ja=q(),Qs=W(),Fa=G(),se=new ja.Logger("Consumer"),Er=class extends Qs.EnhancedEventEmitter{_id;_localId;_producerId;_closed=!1;_rtpReceiver;_track;_rtpParameters;_paused;_appData;_observer=new Qs.EnhancedEventEmitter;constructor({id:e,localId:t,producerId:r,rtpReceiver:i,track:n,rtpParameters:a,appData:o}){super(),se.debug("constructor()"),this._id=e,this._localId=t,this._producerId=r,this._rtpReceiver=i,this._track=n,this._rtpParameters=a,this._paused=!n.enabled,this._appData=o??{},this.onTrackEnded=this.onTrackEnded.bind(this),this.handleTrack()}get id(){return this._id}get localId(){return this._localId}get producerId(){return this._producerId}get closed(){return this._closed}get kind(){return this._track.kind}get rtpReceiver(){return this._rtpReceiver}get track(){return this._track}get rtpParameters(){return this._rtpParameters}get paused(){return this._paused}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(se.debug("close()"),this._closed=!0,this.destroyTrack(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(se.debug("transportClosed()"),this._closed=!0,this.destroyTrack(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}async getStats(){if(this._closed)throw new Fa.InvalidStateError("closed");return new Promise((e,t)=>{this.safeEmit("@getstats",e,t)})}pause(){if(se.debug("pause()"),this._closed){se.error("pause() | Consumer closed");return}if(this._paused){se.debug("pause() | Consumer is already paused");return}this._paused=!0,this._track.enabled=!1,this.emit("@pause"),this._observer.safeEmit("pause")}resume(){if(se.debug("resume()"),this._closed){se.error("resume() | Consumer closed");return}if(!this._paused){se.debug("resume() | Consumer is already resumed");return}this._paused=!1,this._track.enabled=!0,this.emit("@resume"),this._observer.safeEmit("resume")}onTrackEnded(){se.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{}}};Pt.Consumer=Er});var Xs=T(Dt=>{"use strict";Object.defineProperty(Dt,"__esModule",{value:!0});Dt.DataProducer=void 0;var qa=q(),Js=W(),$a=G(),oe=new qa.Logger("DataProducer"),xr=class extends Js.EnhancedEventEmitter{_id;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new Js.EnhancedEventEmitter;constructor({id:e,dataChannel:t,sctpStreamParameters:r,appData:i}){super(),oe.debug("constructor()"),this._id=e,this._dataChannel=t,this._sctpStreamParameters=r,this._appData=i??{},this.handleDataChannel()}get id(){return this._id}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get bufferedAmount(){return this._dataChannel.bufferedAmount}get bufferedAmountLowThreshold(){return this._dataChannel.bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._dataChannel.bufferedAmountLowThreshold=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(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"))}send(e){if(oe.debug("send()"),this._closed)throw new $a.InvalidStateError("closed");this._dataChannel.send(e)}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",()=>{this._closed||oe.warn('DataChannel "message" event in a DataProducer, message discarded')}),this._dataChannel.addEventListener("bufferedamountlow",()=>{this._closed||this.safeEmit("bufferedamountlow")})}};Dt.DataProducer=xr});var ei=T(It=>{"use strict";Object.defineProperty(It,"__esModule",{value:!0});It.DataConsumer=void 0;var za=q(),Zs=W(),ye=new za.Logger("DataConsumer"),kr=class extends Zs.EnhancedEventEmitter{_id;_dataProducerId;_dataChannel;_closed=!1;_sctpStreamParameters;_appData;_observer=new Zs.EnhancedEventEmitter;constructor({id:e,dataProducerId:t,dataChannel:r,sctpStreamParameters:i,appData:n}){super(),ye.debug("constructor()"),this._id=e,this._dataProducerId=t,this._dataChannel=r,this._sctpStreamParameters=i,this._appData=n??{},this.handleDataChannel()}get id(){return this._id}get dataProducerId(){return this._dataProducerId}get closed(){return this._closed}get sctpStreamParameters(){return this._sctpStreamParameters}get readyState(){return this._dataChannel.readyState}get label(){return this._dataChannel.label}get protocol(){return this._dataChannel.protocol}get binaryType(){return this._dataChannel.binaryType}set binaryType(e){this._dataChannel.binaryType=e}get appData(){return this._appData}set appData(e){this._appData=e}get observer(){return this._observer}close(){this._closed||(ye.debug("close()"),this._closed=!0,this._dataChannel.close(),this.emit("@close"),this._observer.safeEmit("close"),super.close(),this._observer.close())}transportClosed(){this._closed||(ye.debug("transportClosed()"),this._closed=!0,this._dataChannel.close(),this.safeEmit("transportclose"),this._observer.safeEmit("close"))}handleDataChannel(){this._dataChannel.addEventListener("open",()=>{this._closed||(ye.debug('DataChannel "open" event'),this.safeEmit("open"))}),this._dataChannel.addEventListener("error",e=>{if(this._closed)return;let t=e.error??new Error("unknown DataChannel error");e.error?.errorDetail==="sctp-failure"?ye.error("DataChannel SCTP error [sctpCauseCode:%s]: %s",e.error?.sctpCauseCode,e.error.message):ye.error('DataChannel "error" event: %o',t),this.safeEmit("error",t)}),this._dataChannel.addEventListener("close",()=>{this._closed||(ye.warn('DataChannel "close" event'),this._closed=!0,this.emit("@close"),this.safeEmit("close"),this._observer.safeEmit("close"))}),this._dataChannel.addEventListener("message",e=>{this._closed||this.safeEmit("message",e.data)})}};It.DataConsumer=kr});var ri=T(Lt=>{"use strict";Object.defineProperty(Lt,"__esModule",{value:!0});Lt.Transport=void 0;var Ba=Vs(),Ua=q(),ti=W(),A=G(),Pr=ve(),et=te(),Wa=Ks(),Ha=Ys(),Va=Xs(),Ga=ei(),O=new Ua.Logger("Transport"),Dr=class{consumerOptions;promise;resolve;reject;constructor(e){this.consumerOptions=e,this.promise=new Promise((t,r)=>{this.resolve=t,this.reject=r})}},Ir=class extends ti.EnhancedEventEmitter{_id;_closed=!1;_direction;_getSendExtendedRtpCapabilities;_recvRtpCapabilities;_canProduceByKind;_maxSctpMessageSize;_handler;_iceGatheringState="new";_connectionState="new";_appData;_producers=new Map;_consumers=new Map;_dataProducers=new Map;_dataConsumers=new Map;_probatorConsumerCreated=!1;_awaitQueue=new Ba.AwaitQueue;_pendingConsumerTasks=[];_consumerCreationInProgress=!1;_pendingPauseConsumers=new Map;_consumerPauseInProgress=!1;_pendingResumeConsumers=new Map;_consumerResumeInProgress=!1;_pendingCloseConsumers=new Map;_consumerCloseInProgress=!1;_observer=new ti.EnhancedEventEmitter;constructor({direction:e,id:t,iceParameters:r,iceCandidates:i,dtlsParameters:n,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:d,appData:p,handlerFactory:l,getSendExtendedRtpCapabilities:u,recvRtpCapabilities:f,canProduceByKind:m}){super(),O.debug("constructor() [id:%s, direction:%s]",t,e),this._id=t,this._direction=e,this._getSendExtendedRtpCapabilities=u,this._recvRtpCapabilities=f,this._canProduceByKind=m,this._maxSctpMessageSize=a?.maxMessageSize;let h=Pr.clone(d)??{};delete h.iceServers,delete h.iceTransportPolicy,delete h.bundlePolicy,delete h.rtcpMuxPolicy,this._handler=l.factory({direction:e,iceParameters:r,iceCandidates:i,dtlsParameters:n,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:h,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities}),this._appData=p??{},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 A.InvalidStateError("closed");return this._handler.getTransportStats()}async restartIce({iceParameters:e}){if(O.debug("restartIce()"),this._closed)throw new A.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 A.InvalidStateError("closed");if(!Array.isArray(e))throw new TypeError("missing iceServers");return this._awaitQueue.push(async()=>this._handler.updateIceServers(e),"transport.updateIceServers()")}async produce({track:e,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:n,codec:a,stopTracks:o=!0,disableTrackOnPause:c=!0,zeroRtpOnPause:d=!1,onRtpSender:p,appData:l={}}={}){if(O.debug("produce() [track:%o]",e),this._closed)throw new A.InvalidStateError("closed");if(e){if(this._direction!=="send")throw new A.UnsupportedError("not a sending Transport");if(this._canProduceByKind[e.kind]){if(e.readyState==="ended")throw new A.InvalidStateError("track ended");if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(this.listenerCount("produce")===0)throw new TypeError('no "produce" listener set into this transport');if(l&&typeof l!="object")throw new TypeError("if given, appData must be an object")}else throw new A.UnsupportedError(`cannot produce ${e.kind}`)}else throw new TypeError("missing track");return this._awaitQueue.push(async()=>{let u;if(r&&!Array.isArray(r))throw TypeError("encodings must be an array");r?.length===0?u=void 0:r&&(u=r.map(g=>{let 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:f,rtpParameters:m,rtpSender:h}=await this._handler.send({track:e,streamId:t,encodings:u,codecOptions:i,headerExtensionOptions:n,codec:a,onRtpSender:p});try{et.validateAndNormalizeRtpParameters(m);let{id:g}=await new Promise((E,P)=>{this.safeEmit("produce",{kind:e.kind,rtpParameters:m,appData:l},E,P)}),w=new Wa.Producer({id:g,localId:f,rtpSender:h,track:e,rtpParameters:m,stopTracks:o,disableTrackOnPause:c,zeroRtpOnPause:d,appData:l});return this._producers.set(w.id,w),this.handleProducer(w),this._observer.safeEmit("newproducer",w),w}catch(g){throw this._handler.stopSending(f).catch(()=>{}),g}},"transport.produce()").catch(u=>{if(o)try{e.stop()}catch{}throw u})}async consume({id:e,producerId:t,kind:r,rtpParameters:i,streamId:n,onRtpReceiver:a,appData:o={}}){if(O.debug("consume()"),this._closed)throw new A.InvalidStateError("closed");if(this._direction!=="recv")throw new A.UnsupportedError("not a receiving Transport");if(typeof e!="string")throw new TypeError("missing id");if(typeof t!="string")throw new TypeError("missing producerId");if(r!=="audio"&&r!=="video")throw new TypeError(`invalid kind '${r}'`);if(this.listenerCount("connect")===0&&this._connectionState==="new")throw new TypeError('no "connect" listener set into this transport');if(o&&typeof o!="object")throw new TypeError("if given, appData must be an object");let c=Pr.clone(i);if(!et.canReceive(c,this._recvRtpCapabilities))throw new A.UnsupportedError("cannot consume this Producer");let p=new Dr({id:e,producerId:t,kind:r,rtpParameters:c,streamId:n,onRtpReceiver:a,appData:o});return this._pendingConsumerTasks.push(p),queueMicrotask(()=>{this._closed||this._consumerCreationInProgress===!1&&this.createPendingConsumers()}),p.promise}async produceData({ordered:e=!0,maxPacketLifeTime:t,maxRetransmits:r,label:i="",protocol:n="",appData:a={}}={}){if(O.debug("produceData()"),this._closed)throw new A.InvalidStateError("closed");if(this._direction!=="send")throw new A.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 A.UnsupportedError("SCTP not enabled by remote Transport");return(t||r)&&(e=!1),this._awaitQueue.push(async()=>{let{dataChannel:o,sctpStreamParameters:c}=await this._handler.sendDataChannel({sctpStreamParameters:{ordered:e,maxPacketLifeTime:t,maxRetransmits:r,label:i,protocol:n}});et.validateAndNormalizeSctpStreamParameters(c);let{id:d}=await new Promise((l,u)=>{this.safeEmit("producedata",{sctpStreamParameters:c,label:i,protocol:n,appData:a},l,u)}),p=new Va.DataProducer({id:d,dataChannel:o,sctpStreamParameters:c,appData:a});return this._dataProducers.set(p.id,p),this.handleDataProducer(p),this._observer.safeEmit("newdataproducer",p),p},"transport.produceData()")}async consumeData({id:e,dataProducerId:t,sctpStreamParameters:r,label:i="",protocol:n="",appData:a={}}){if(O.debug("consumeData()"),this._closed)throw new A.InvalidStateError("closed");if(this._direction!=="recv")throw new A.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 A.UnsupportedError("SCTP not enabled by remote Transport");let o=Pr.clone(r);return et.validateAndNormalizeSctpStreamParameters(o),this._awaitQueue.push(async()=>{let{dataChannel:c}=await this._handler.receiveDataChannel({maxMessageSize:this._maxSctpMessageSize,sctpStreamParameters:o,label:i,protocol:n}),d=new Ga.DataConsumer({id:e,dataProducerId:t,dataChannel:c,sctpStreamParameters:o,appData:a});return this._dataConsumers.set(d.id,d),this.handleDataConsumer(d),this._observer.safeEmit("newdataconsumer",d),d},"transport.consumeData()")}getDataChannelMaxMessageSize(){return this._handler.getDataChannelMaxMessageSize()}createPendingConsumers(){this._consumerCreationInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingConsumerTasks.length===0){O.debug("createPendingConsumers() | there is no Consumer to be created");return}let e=[...this._pendingConsumerTasks];this._pendingConsumerTasks=[];let t,r=[];for(let i of e){let{id:n,kind:a,rtpParameters:o,streamId:c,onRtpReceiver:d}=i.consumerOptions;r.push({trackId:n,kind:a,rtpParameters:o,streamId:c,onRtpReceiver:d})}try{let i=await this._handler.receive(r);for(let n=0;n<i.length;++n){let a=e[n],o=i[n],{id:c,producerId:d,kind:p,rtpParameters:l,appData:u}=a.consumerOptions,{localId:f,rtpReceiver:m,track:h}=o,g=new Ha.Consumer({id:c,localId:f,producerId:d,rtpReceiver:m,track:h,rtpParameters:l,appData:u});this._consumers.set(g.id,g),this.handleConsumer(g),!this._probatorConsumerCreated&&!t&&p==="video"&&(t=g),this._observer.safeEmit("newconsumer",g),a.resolve(g)}}catch(i){for(let n of e)n.reject(i)}if(t)try{let i=et.generateProbatorRtpParameters(t.rtpParameters);await this._handler.receive([{trackId:"probator",kind:"video",rtpParameters:i}]),O.debug("createPendingConsumers() | Consumer for RTP probation created"),this._probatorConsumerCreated=!0}catch(i){O.error("createPendingConsumers() | failed to create Consumer for RTP probation:%o",i)}},"transport.createPendingConsumers()").then(()=>{this._consumerCreationInProgress=!1,this._pendingConsumerTasks.length>0&&this.createPendingConsumers()}).catch(()=>{})}pausePendingConsumers(){this._consumerPauseInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingPauseConsumers.size===0){O.debug("pausePendingConsumers() | there is no Consumer to be paused");return}let e=Array.from(this._pendingPauseConsumers.values());this._pendingPauseConsumers.clear();try{let t=e.map(r=>r.localId);await this._handler.pauseReceiving(t)}catch(t){O.error("pausePendingConsumers() | failed to pause Consumers:",t)}},"transport.pausePendingConsumers()").then(()=>{this._consumerPauseInProgress=!1,this._pendingPauseConsumers.size>0&&this.pausePendingConsumers()}).catch(()=>{})}resumePendingConsumers(){this._consumerResumeInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingResumeConsumers.size===0){O.debug("resumePendingConsumers() | there is no Consumer to be resumed");return}let e=Array.from(this._pendingResumeConsumers.values());this._pendingResumeConsumers.clear();try{let t=e.map(r=>r.localId);await this._handler.resumeReceiving(t)}catch(t){O.error("resumePendingConsumers() | failed to resume Consumers:",t)}},"transport.resumePendingConsumers()").then(()=>{this._consumerResumeInProgress=!1,this._pendingResumeConsumers.size>0&&this.resumePendingConsumers()}).catch(()=>{})}closePendingConsumers(){this._consumerCloseInProgress=!0,this._awaitQueue.push(async()=>{if(this._pendingCloseConsumers.size===0){O.debug("closePendingConsumers() | there is no Consumer to be closed");return}let e=Array.from(this._pendingCloseConsumers.values());this._pendingCloseConsumers.clear();try{await this._handler.stopReceiving(e.map(t=>t.localId))}catch(t){O.error("closePendingConsumers() | failed to close Consumers:",t)}},"transport.closePendingConsumers()").then(()=>{this._consumerCloseInProgress=!1,this._pendingCloseConsumers.size>0&&this.closePendingConsumers()}).catch(()=>{})}handleHandler(){let e=this._handler;e.on("@connect",({dtlsParameters:t},r,i)=>{if(this._closed){i(new A.InvalidStateError("closed"));return}this.safeEmit("connect",{dtlsParameters:t},r,i)}),e.on("@icegatheringstatechange",t=>{t!==this._iceGatheringState&&(O.debug("ICE gathering state changed to %s",t),this._iceGatheringState=t,this._closed||this.safeEmit("icegatheringstatechange",t))}),e.on("@icecandidateerror",t=>{O.warn(`ICE candidate error [url:${t.url}, localAddress:${t.address}, localPort:${t.port}]: ${t.errorCode} "${t.errorText}"`),this.safeEmit("icecandidateerror",t)}),e.on("@connectionstatechange",t=>{t!==this._connectionState&&(O.debug("connection state changed to %s",t),this._connectionState=t,this._closed||this.safeEmit("connectionstatechange",t))})}handleProducer(e){e.on("@close",()=>{this._producers.delete(e.id),!this._closed&&this._awaitQueue.push(async()=>await this._handler.stopSending(e.localId),"producer @close event").catch(t=>O.warn("producer.close() failed:%o",t))}),e.on("@pause",(t,r)=>{this._awaitQueue.push(async()=>await this._handler.pauseSending(e.localId),"producer @pause event").then(t).catch(r)}),e.on("@resume",(t,r)=>{this._awaitQueue.push(async()=>await this._handler.resumeSending(e.localId),"producer @resume event").then(t).catch(r)}),e.on("@replacetrack",(t,r,i)=>{this._awaitQueue.push(async()=>await this._handler.replaceTrack(e.localId,t),"producer @replacetrack event").then(r).catch(i)}),e.on("@setmaxspatiallayer",(t,r,i)=>{this._awaitQueue.push(async()=>await this._handler.setMaxSpatialLayer(e.localId,t),"producer @setmaxspatiallayer event").then(r).catch(i)}),e.on("@setrtpencodingparameters",(t,r,i)=>{this._awaitQueue.push(async()=>await this._handler.setRtpEncodingParameters(e.localId,t),"producer @setrtpencodingparameters event").then(r).catch(i)}),e.on("@getstats",(t,r)=>{if(this._closed)return r(new A.InvalidStateError("closed"));this._handler.getSenderStats(e.localId).then(t).catch(r)})}handleConsumer(e){e.on("@close",()=>{this._consumers.delete(e.id),this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.delete(e.id),!this._closed&&(this._pendingCloseConsumers.set(e.id,e),this._consumerCloseInProgress===!1&&this.closePendingConsumers())}),e.on("@pause",()=>{this._pendingResumeConsumers.has(e.id)&&this._pendingResumeConsumers.delete(e.id),this._pendingPauseConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerPauseInProgress===!1&&this.pausePendingConsumers()})}),e.on("@resume",()=>{this._pendingPauseConsumers.has(e.id)&&this._pendingPauseConsumers.delete(e.id),this._pendingResumeConsumers.set(e.id,e),queueMicrotask(()=>{this._closed||this._consumerResumeInProgress===!1&&this.resumePendingConsumers()})}),e.on("@getstats",(t,r)=>{if(this._closed)return r(new A.InvalidStateError("closed"));this._handler.getReceiverStats(e.localId).then(t).catch(r)})}handleDataProducer(e){e.on("@close",()=>{this._dataProducers.delete(e.id)})}handleDataConsumer(e){e.on("@close",()=>{this._dataConsumers.delete(e.id)})}};Lt.Transport=Ir});var Mt=T((hd,ii)=>{"use strict";var si=ii.exports={v:[{name:"version",reg:/^(\d*)$/}],o:[{name:"origin",reg:/^(\S*) (\d*) (\d*) (\S*) IP(\d) (\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\d*) (\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\d) (\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\w*) (\d*) ([\w/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\d*) ([\w\-.]*)(?:\s*\/(\d*)(?:\s*\/(\S*))?)?/,names:["payload","codec","rate","encoding"],format:function(s){return s.encoding?"rtpmap:%d %s/%s/%s":s.rate?"rtpmap:%d %s/%s":"rtpmap:%d %s"}},{push:"fmtp",reg:/^fmtp:(\d*) ([\S| ]*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\d*)(?: (\S*) IP(\d) (\S*))?/,names:["port","netType","ipVer","address"],format:function(s){return s.address!=null?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\*|\d*) trr-int (\d*)/,names:["payload","value"],format:"rtcp-fb:%s trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,names:["payload","type","subtype"],format:function(s){return s.subtype!=null?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:(\d+)(?:\/(\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\S*)(?: (\S*))?/,names:["value","direction","encrypt-uri","uri","config"],format:function(s){return"extmap:%d"+(s.direction?"/%s":"%v")+(s["encrypt-uri"]?" %s":"%v")+" %s"+(s.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(s){return s.sessionConfig!=null?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\w*)/,format:"setup:%s"},{name:"connectionType",reg:/^connection:(new|existing)/,format:"connection:%s"},{name:"mid",reg:/^mid:([^\s]*)/,format:"mid:%s"},{push:"msid",reg:/^msid:([\w-]+)(?: ([\w-]+))?/,names:["id","appdata"],format:"msid:%s %s"},{name:"ptime",reg:/^ptime:(\d*(?:\.\d*)*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\d*(?:\.\d*)*)/,format:"maxptime:%d"},{name:"direction",reg:/^(sendrecv|recvonly|sendonly|inactive)/},{name:"icelite",reg:/^(ice-lite)/},{name:"iceUfrag",reg:/^ice-ufrag:(\S*)/,format:"ice-ufrag:%s"},{name:"icePwd",reg:/^ice-pwd:(\S*)/,format:"ice-pwd:%s"},{name:"fingerprint",reg:/^fingerprint:(\S*) (\S*)/,names:["type","hash"],format:"fingerprint:%s %s"},{push:"candidates",reg:/^candidate:(\S*) (\d*) (\S*) (\d*) (\S*) (\d*) typ (\S*)(?: raddr (\S*) rport (\d*))?(?: tcptype (\S*))?(?: generation (\d*))?(?: network-id (\d*))?(?: network-cost (\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","tcptype","generation","network-id","network-cost"],format:function(s){var e="candidate:%s %d %s %d %s %d typ %s";return e+=s.raddr!=null?" raddr %s rport %d":"%v%v",e+=s.tcptype!=null?" tcptype %s":"%v",s.generation!=null&&(e+=" generation %d"),e+=s["network-id"]!=null?" network-id %d":"%v",e+=s["network-cost"]!=null?" network-cost %d":"%v",e}},{name:"endOfCandidates",reg:/^(end-of-candidates)/},{name:"remoteCandidates",reg:/^remote-candidates:(.*)/,format:"remote-candidates:%s"},{name:"iceOptions",reg:/^ice-options:(\S*)/,format:"ice-options:%s"},{push:"ssrcs",reg:/^ssrc:(\d*) ([\w_-]*)(?::(.*))?/,names:["id","attribute","value"],format:function(s){var e="ssrc:%d";return s.attribute!=null&&(e+=" %s",s.value!=null&&(e+=":%s")),e}},{push:"ssrcGroups",reg:/^ssrc-group:([\x21\x23\x24\x25\x26\x27\x2A\x2B\x2D\x2E\w]*) (.*)/,names:["semantics","ssrcs"],format:"ssrc-group:%s %s"},{name:"msidSemantic",reg:/^msid-semantic:\s?(\w*) (\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{name:"rtcpRsize",reg:/^(rtcp-rsize)/},{name:"sctpmap",reg:/^sctpmap:([\w_/]*) (\S*)(?: (\S*))?/,names:["sctpmapNumber","app","maxMessageSize"],format:function(s){return s.maxMessageSize!=null?"sctpmap:%s %s %s":"sctpmap:%s %s"}},{name:"xGoogleFlag",reg:/^x-google-flag:([^\s]*)/,format:"x-google-flag:%s"},{push:"rids",reg:/^rid:([\d\w]+) (\w+)(?: ([\S| ]*))?/,names:["id","direction","params"],format:function(s){return s.params?"rid:%s %s %s":"rid:%s %s"}},{push:"imageattrs",reg:new RegExp("^imageattr:(\\d+|\\*)[\\s\\t]+(send|recv)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*)(?:[\\s\\t]+(recv|send)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*))?"),names:["pt","dir1","attrs1","dir2","attrs2"],format:function(s){return"imageattr:%s %s %s"+(s.dir2?" %s %s":"")}},{name:"simulcast",reg:new RegExp("^simulcast:(send|recv) ([a-zA-Z0-9\\-_~;,]+)(?:\\s?(send|recv) ([a-zA-Z0-9\\-_~;,]+))?$"),names:["dir1","list1","dir2","list2"],format:function(s){return"simulcast:%s %s"+(s.dir2?" %s %s":"")}},{name:"simulcast_03",reg:/^simulcast:[\s\t]+([\S+\s\t]+)$/,names:["value"],format:"simulcast: %s"},{name:"framerate",reg:/^framerate:(\d+(?:$|\.\d+))/,format:"framerate:%s"},{name:"sourceFilter",reg:/^source-filter: *(excl|incl) (\S*) (IP4|IP6|\*) (\S*) (.*)/,names:["filterMode","netType","addressTypes","destAddress","srcList"],format:"source-filter: %s %s %s %s %s"},{name:"bundleOnly",reg:/^(bundle-only)/},{name:"label",reg:/^label:(.+)/,format:"label:%s"},{name:"sctpPort",reg:/^sctp-port:(\d+)$/,format:"sctp-port:%s"},{name:"maxMessageSize",reg:/^max-message-size:(\d+)$/,format:"max-message-size:%s"},{push:"tsRefClocks",reg:/^ts-refclk:([^\s=]*)(?:=(\S*))?/,names:["clksrc","clksrcExt"],format:function(s){return"ts-refclk:%s"+(s.clksrcExt!=null?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(s){var e="mediaclk:";return e+=s.id!=null?"id=%s %s":"%v%s",e+=s.mediaClockValue!=null?"=%s":"",e+=s.rateNumerator!=null?" rate=%s":"",e+=s.rateDenominator!=null?"/%s":"",e}},{name:"keywords",reg:/^keywds:(.+)$/,format:"keywds:%s"},{name:"content",reg:/^content:(.+)/,format:"content:%s"},{name:"bfcpFloorCtrl",reg:/^floorctrl:(c-only|s-only|c-s)/,format:"floorctrl:%s"},{name:"bfcpConfId",reg:/^confid:(\d+)/,format:"confid:%s"},{name:"bfcpUserId",reg:/^userid:(\d+)/,format:"userid:%s"},{name:"bfcpFloorId",reg:/^floorid:(.+) (?:m-stream|mstrm):(.+)/,names:["id","mStream"],format:"floorid:%s mstrm:%s"},{push:"invalid",names:["value"]}]};Object.keys(si).forEach(function(s){var e=si[s];e.forEach(function(t){t.reg||(t.reg=/(.*)/),t.format||(t.format="%s")})})});var oi=T(ce=>{"use strict";var ze=function(s){return String(Number(s))===s?Number(s):s},Ka=function(s,e,t,r){if(r&&!t)e[r]=ze(s[1]);else for(var i=0;i<t.length;i+=1)s[i+1]!=null&&(e[t[i]]=ze(s[i+1]))},Qa=function(s,e,t){var r=s.name&&s.names;s.push&&!e[s.push]?e[s.push]=[]:r&&!e[s.name]&&(e[s.name]={});var i=s.push?{}:r?e[s.name]:e;Ka(t.match(s.reg),i,s.names,s.name),s.push&&e[s.push].push(i)},ni=Mt(),Ya=RegExp.prototype.test.bind(/^([a-z])=(.*)/);ce.parse=function(s){var e={},t=[],r=e;return s.split(/(\r\n|\r|\n)/).filter(Ya).forEach(function(i){var n=i[0],a=i.slice(2);n==="m"&&(t.push({rtp:[],fmtp:[]}),r=t[t.length-1]);for(var o=0;o<(ni[n]||[]).length;o+=1){var c=ni[n][o];if(c.reg.test(a))return Qa(c,r,a)}}),e.media=t,e};var ai=function(s,e){var t=e.split(/=(.+)/,2);return t.length===2?s[t[0]]=ze(t[1]):t.length===1&&e.length>1&&(s[t[0]]=void 0),s};ce.parseParams=function(s){return s.split(/;\s?/).reduce(ai,{})};ce.parseFmtpConfig=ce.parseParams;ce.parsePayloads=function(s){return s.toString().split(" ").map(Number)};ce.parseRemoteCandidates=function(s){for(var e=[],t=s.split(" ").map(ze),r=0;r<t.length;r+=3)e.push({component:t[r],ip:t[r+1],port:t[r+2]});return e};ce.parseImageAttributes=function(s){return s.split(" ").map(function(e){return e.substring(1,e.length-1).split(",").reduce(ai,{})})};ce.parseSimulcastStreamList=function(s){return s.split(";").map(function(e){return e.split(",").map(function(t){var r,i=!1;return t[0]!=="~"?r=ze(t):(r=ze(t.substring(1,t.length)),i=!0),{scid:r,paused:i}})})}});var di=T((md,ci)=>{"use strict";var Lr=Mt(),Ja=/%[sdv%]/g,Xa=function(s){var e=1,t=arguments,r=t.length;return s.replace(Ja,function(i){if(e>=r)return i;var n=t[e];switch(e+=1,i){case"%%":return"%";case"%s":return String(n);case"%d":return Number(n);case"%v":return""}})},tt=function(s,e,t){var r=e.format instanceof Function?e.format(e.push?t:t[e.name]):e.format,i=[s+"="+r];if(e.names)for(var n=0;n<e.names.length;n+=1){var a=e.names[n];e.name?i.push(t[e.name][a]):i.push(t[e.names[n]])}else i.push(t[e.name]);return Xa.apply(null,i)},Za=["v","o","s","i","u","e","p","c","b","t","r","z","a"],eo=["i","c","b","a"];ci.exports=function(s,e){e=e||{},s.version==null&&(s.version=0),s.name==null&&(s.name=" "),s.media.forEach(function(n){n.payloads==null&&(n.payloads="")});var t=e.outerOrder||Za,r=e.innerOrder||eo,i=[];return t.forEach(function(n){Lr[n].forEach(function(a){a.name in s&&s[a.name]!=null?i.push(tt(n,a,s)):a.push in s&&s[a.push]!=null&&s[a.push].forEach(function(o){i.push(tt(n,a,o))})})}),s.media.forEach(function(n){i.push(tt("m",Lr.m[0],n)),r.forEach(function(a){Lr[a].forEach(function(o){o.name in n&&n[o.name]!=null?i.push(tt(a,o,n)):o.push in n&&n[o.push]!=null&&n[o.push].forEach(function(c){i.push(tt(a,o,c))})})})}),i.join(`\r
2
2
  `)+`\r
3
- `}});var de=T(ie=>{"use strict";var be=ai(),Za=ci(),eo=Mt();ie.grammar=eo;ie.write=Za;ie.parse=be.parse;ie.parseParams=be.parseParams;ie.parseFmtpConfig=be.parseFmtpConfig;ie.parsePayloads=be.parsePayloads;ie.parseRemoteCandidates=be.parseRemoteCandidates;ie.parseImageAttributes=be.parseImageAttributes;ie.parseSimulcastStreamList=be.parseSimulcastStreamList});var Se=T(Mr=>{"use strict";Object.defineProperty(Mr,"__esModule",{value:!0});Mr.parse=ro;var to=new RegExp("^[LS]([1-9]\\d{0,1})T([1-9]\\d{0,1})");function ro(s){let e=to.exec(s??"");return e?{spatialLayers:Number(e[1]),temporalLayers:Number(e[2])}:{spatialLayers:1,temporalLayers:1}}});var li=T(fe=>{"use strict";Object.defineProperty(fe,"__esModule",{value:!0});fe.OfferMediaSection=fe.AnswerMediaSection=fe.MediaSection=void 0;var so=de(),di=ve(),rt=class{_mediaObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r}){if(this._mediaObject={type:"",port:0,protocol:"",payloads:"",rtp:[],fmtp:[]},e&&this.setIceParameters(e),t){this._mediaObject.candidates=[];for(let i of t){let n={foundation:i.foundation,component:1,ip:i.address??i.ip,port:i.port,priority:i.priority,transport:i.protocol,type:i.type};i.tcpType&&(n.tcptype=i.tcpType),this._mediaObject.candidates.push(n)}this._mediaObject.endOfCandidates="end-of-candidates",this._mediaObject.iceOptions="renomination"}r&&this.setDtlsRole(r.role)}get mid(){return String(this._mediaObject.mid)}get closed(){return this._mediaObject.port===0}getObject(){return this._mediaObject}setIceParameters(e){this._mediaObject.iceUfrag=e.usernameFragment,this._mediaObject.icePwd=e.password}pause(){this._mediaObject.direction="inactive"}disable(){this.pause()}close(){this.disable(),this._mediaObject.port=0,delete this._mediaObject.candidates,delete this._mediaObject.endOfCandidates,delete this._mediaObject.iceUfrag,delete this._mediaObject.icePwd,delete this._mediaObject.iceOptions,this._mediaObject.rtp=[],this._mediaObject.fmtp=[],delete this._mediaObject.rtcp,delete this._mediaObject.rtcpFb,delete this._mediaObject.ssrcs,delete this._mediaObject.ssrcGroups,delete this._mediaObject.simulcast,delete this._mediaObject.simulcast_03,delete this._mediaObject.rids,delete this._mediaObject.extmapAllowMixed}};fe.MediaSection=rt;var Or=class extends rt{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:i,plainRtpParameters:n,offerMediaObject:a,offerRtpParameters:o,answerRtpParameters:c,codecOptions:p}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r}),this._mediaObject.mid=String(a.mid),this._mediaObject.type=a.type,this._mediaObject.protocol=a.protocol,n?(this._mediaObject.connection={ip:n.ip,version:n.ipVersion},this._mediaObject.port=n.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},this._mediaObject.port=7),a.type){case"audio":case"video":{this._mediaObject.direction="recvonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[];for(let d of c.codecs){let l={payload:d.payloadType,codec:pi(d),rate:d.clockRate};d.channels>1&&(l.encoding=d.channels),this._mediaObject.rtp.push(l);let u=di.clone(d.parameters)??{},f=di.clone(d.rtcpFeedback)??[];if(p){let{opusStereo:h,opusFec:g,opusDtx:w,opusMaxPlaybackRate:E,opusMaxAverageBitrate:P,opusPtime:k,opusNack:x,videoGoogleStartBitrate:L,videoGoogleMaxBitrate:Te,videoGoogleMinBitrate:Je}=p,ue=o.codecs.find(ge=>ge.payloadType===d.payloadType);switch(d.mimeType.toLowerCase()){case"audio/opus":case"audio/multiopus":{h!==void 0&&(ue.parameters["sprop-stereo"]=h?1:0,u.stereo=h?1:0),g!==void 0&&(ue.parameters.useinbandfec=g?1:0,u.useinbandfec=g?1:0),w!==void 0&&(ue.parameters.usedtx=w?1:0,u.usedtx=w?1:0),E!==void 0&&(u.maxplaybackrate=E),P!==void 0&&(u.maxaveragebitrate=P),k!==void 0&&(ue.parameters.ptime=k,u.ptime=k),x||(ue.rtcpFeedback=ue.rtcpFeedback.filter(ge=>ge.type!=="nack"||ge.parameter),f=f.filter(ge=>ge.type!=="nack"||ge.parameter));break}case"video/vp8":case"video/vp9":case"video/h264":case"video/h265":case"video/av1":{L!==void 0&&(u["x-google-start-bitrate"]=L),Te!==void 0&&(u["x-google-max-bitrate"]=Te),Je!==void 0&&(u["x-google-min-bitrate"]=Je);break}}}let m={payload:d.payloadType,config:""};for(let h of Object.keys(u))m.config&&(m.config+=";"),m.config+=`${h}=${u[h]}`;m.config&&this._mediaObject.fmtp.push(m);for(let h of f)this._mediaObject.rtcpFb.push({payload:d.payloadType,type:h.type,subtype:h.parameter})}this._mediaObject.payloads=c.codecs.map(d=>d.payloadType).join(" "),this._mediaObject.ext=[];for(let d of c.headerExtensions)(a.ext??[]).some(u=>u.uri===d.uri)&&this._mediaObject.ext.push({uri:d.uri,value:d.id});if(a.extmapAllowMixed==="extmap-allow-mixed"&&(this._mediaObject.extmapAllowMixed="extmap-allow-mixed"),a.simulcast){this._mediaObject.simulcast={dir1:"recv",list1:a.simulcast.list1},this._mediaObject.rids=[];for(let d of a.rids??[])d.direction==="send"&&this._mediaObject.rids.push({id:d.id,direction:"recv"})}else if(a.simulcast_03){this._mediaObject.simulcast_03={value:a.simulcast_03.value.replace(/send/g,"recv")},this._mediaObject.rids=[];for(let d of a.rids??[])d.direction==="send"&&this._mediaObject.rids.push({id:d.id,direction:"recv"})}this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";break}case"application":{typeof a.sctpPort=="number"?(this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=i.port,this._mediaObject.maxMessageSize=i.maxMessageSize):a.sctpmap&&(this._mediaObject.payloads=String(i.port),this._mediaObject.sctpmap={app:"webrtc-datachannel",sctpmapNumber:i.port,maxMessageSize:i.maxMessageSize});break}}}setDtlsRole(e){switch(e){case"client":{this._mediaObject.setup="active";break}case"server":{this._mediaObject.setup="passive";break}case"auto":{this._mediaObject.setup="actpass";break}}}resume(){this._mediaObject.direction="recvonly"}muxSimulcastStreams(e){if(!this._mediaObject.simulcast?.list1)return;let t={};for(let n of e)n.rid&&(t[n.rid]=n);let r=this._mediaObject.simulcast.list1,i=so.parseSimulcastStreamList(r);for(let n of i)for(let a of n)a.paused=!t[a.scid]?.active;this._mediaObject.simulcast.list1=i.map(n=>n.map(a=>`${a.paused?"~":""}${a.scid}`).join(",")).join(";")}};fe.AnswerMediaSection=Or;var Ar=class extends rt{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:i,plainRtpParameters:n,mid:a,kind:o,offerRtpParameters:c,streamId:p,trackId:d}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r}),this._mediaObject.mid=String(a),this._mediaObject.type=o,n?(this._mediaObject.connection={ip:n.ip,version:n.ipVersion},this._mediaObject.protocol="RTP/AVP",this._mediaObject.port=n.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},i?this._mediaObject.protocol="UDP/DTLS/SCTP":this._mediaObject.protocol="UDP/TLS/RTP/SAVPF",this._mediaObject.port=7),this._mediaObject.extmapAllowMixed="extmap-allow-mixed",o){case"audio":case"video":{this._mediaObject.direction="sendonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[],this._mediaObject.msid=[{id:p,appdata:d}];for(let m of c.codecs){let h={payload:m.payloadType,codec:pi(m),rate:m.clockRate};m.channels>1&&(h.encoding=m.channels),this._mediaObject.rtp.push(h);let g={payload:m.payloadType,config:""};for(let w of Object.keys(m.parameters??{}))g.config&&(g.config+=";"),g.config+=`${w}=${m.parameters[w]}`;g.config&&this._mediaObject.fmtp.push(g);for(let w of m.rtcpFeedback)this._mediaObject.rtcpFb.push({payload:m.payloadType,type:w.type,subtype:w.parameter})}this._mediaObject.payloads=c.codecs.map(m=>m.payloadType).join(" "),this._mediaObject.ext=[];for(let m of c.headerExtensions)this._mediaObject.ext.push({uri:m.uri,value:m.id});this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";let l=c.encodings[0],u=l.ssrc,f=l.rtx?.ssrc;this._mediaObject.ssrcs=[],this._mediaObject.ssrcGroups=[],u&&c.rtcp.cname&&this._mediaObject.ssrcs.push({id:u,attribute:"cname",value:c.rtcp.cname}),f&&(c.rtcp.cname&&this._mediaObject.ssrcs.push({id:f,attribute:"cname",value:c.rtcp.cname}),u&&this._mediaObject.ssrcGroups.push({semantics:"FID",ssrcs:`${u} ${f}`}));break}case"application":{this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=i.port,this._mediaObject.maxMessageSize=i.maxMessageSize;break}}}setDtlsRole(e){this._mediaObject.setup="actpass"}resume(){this._mediaObject.direction="sendonly"}};fe.OfferMediaSection=Ar;function pi(s){let t=new RegExp("^(audio|video)/(.+)","i").exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");return t[2]}});var Be=T(Nt=>{"use strict";Object.defineProperty(Nt,"__esModule",{value:!0});Nt.RemoteSdp=void 0;var io=de(),no=q(),Ot=li(),ao=jr(),oo=["av1","h264"],At=new no.Logger("RemoteSdp"),Nr=class{_iceParameters;_iceCandidates;_dtlsParameters;_sctpParameters;_plainRtpParameters;_mediaSections=[];_midToIndex=new Map;_firstMid;_sdpObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:i,plainRtpParameters:n}){if(this._iceParameters=e,this._iceCandidates=t,this._dtlsParameters=r,this._sctpParameters=i,this._plainRtpParameters=n,this._sdpObject={version:0,origin:{address:"0.0.0.0",ipVer:4,netType:"IN",sessionId:"10000",sessionVersion:0,username:`media-client-v${ao.version}`},name:"-",timing:{start:0,stop:0},media:[]},this._sdpObject.iceOptions="ice2",e?.iceLite&&(this._sdpObject.icelite="ice-lite"),r){this._sdpObject.msidSemantic={semantic:"WMS",token:"*"};let a=this._dtlsParameters.fingerprints.length;this._sdpObject.fingerprint={type:r.fingerprints[a-1].algorithm,hash:r.fingerprints[a-1].value},this._sdpObject.groups=[{type:"BUNDLE",mids:""}]}n&&(this._sdpObject.origin.address=n.ip,this._sdpObject.origin.ipVer=n.ipVersion)}updateIceParameters(e){At.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){At.debug("updateDtlsRole() [role:%s]",e),this._dtlsParameters.role=e;for(let t of this._mediaSections)t.setDtlsRole(e)}setSessionExtmapAllowMixed(){At.debug("setSessionExtmapAllowMixed()"),this._sdpObject.extmapAllowMixed="extmap-allow-mixed"}getNextMediaSectionIdx(){for(let e=0;e<this._mediaSections.length;++e){let t=this._mediaSections[e];if(t.closed)return{idx:e,reuseMid:t.mid}}return{idx:this._mediaSections.length}}send({offerMediaObject:e,reuseMid:t,offerRtpParameters:r,answerRtpParameters:i,codecOptions:n}){let a=new Ot.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,offerMediaObject:e,offerRtpParameters:r,answerRtpParameters:i,codecOptions:n}),o=a.getObject();o.rtp.find(p=>oo.includes(p.codec.toLowerCase()))||(o.ext=o.ext?.filter(p=>p.uri!=="https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension")),t?this.replaceMediaSection(a,t):this._midToIndex.has(a.mid)?this.replaceMediaSection(a):this.addMediaSection(a)}receive({mid:e,kind:t,offerRtpParameters:r,streamId:i,trackId:n}){this.setSessionExtmapAllowMixed();let a=new Ot.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,mid:e,kind:t,offerRtpParameters:r,streamId:i,trackId:n}),o=this._mediaSections.find(c=>c.closed&&c.getObject().type===t);o?this.replaceMediaSection(a,o.mid):this.addMediaSection(a)}pauseMediaSection(e){this.findMediaSection(e).pause()}resumeSendingMediaSection(e){this.findMediaSection(e).resume()}resumeReceivingMediaSection(e){this.findMediaSection(e).resume()}disableMediaSection(e){this.findMediaSection(e).disable()}closeMediaSection(e){let t=this.findMediaSection(e);return e===this._firstMid?(At.debug("closeMediaSection() | cannot close first media section, disabling it instead [mid:%s]",e),this.disableMediaSection(e),!1):(t.close(),this.regenerateBundleMids(),!0)}muxMediaSectionSimulcast(e,t){let r=this.findMediaSection(e);r.muxSimulcastStreams(t),this.replaceMediaSection(r)}sendSctpAssociation({offerMediaObject:e}){let t=new Ot.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 Ot.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++,io.write(this._sdpObject)}addMediaSection(e){this._firstMid||(this._firstMid=e.mid),this._mediaSections.push(e),this._midToIndex.set(e.mid,this._mediaSections.length-1),this._sdpObject.media.push(e.getObject()),this.regenerateBundleMids()}replaceMediaSection(e,t){if(typeof t=="string"){let r=this._midToIndex.get(t);if(r===void 0)throw new Error(`no media section found for reuseMid '${t}'`);let i=this._mediaSections[r];this._mediaSections[r]=e,this._midToIndex.delete(i.mid),this._midToIndex.set(e.mid,r),this._sdpObject.media[r]=e.getObject(),this.regenerateBundleMids()}else{let r=this._midToIndex.get(e.mid);if(r===void 0)throw new Error(`no media section found with mid '${e.mid}'`);this._mediaSections[r]=e,this._sdpObject.media[r]=e.getObject()}}findMediaSection(e){let t=this._midToIndex.get(e);if(t===void 0)throw new Error(`no media section found with mid '${e}'`);return this._mediaSections[t]}regenerateBundleMids(){this._dtlsParameters&&(this._sdpObject.groups[0].mids=this._mediaSections.filter(e=>!e.closed).map(e=>e.mid).join(" "))}};Nt.RemoteSdp=Nr});var Ue=T(Ce=>{"use strict";Object.defineProperty(Ce,"__esModule",{value:!0});Ce.extractRtpCapabilities=co;Ce.extractDtlsParameters=po;Ce.getCname=lo;Ce.applyCodecParameters=uo;Ce.addHeaderExtension=ho;var ui=de();function co({sdpObject:s}){let e=new Map,t=new Map;for(let i of s.media){let n=i.type;switch(n){case"audio":case"video":break;default:continue}for(let a of i.rtp){let o={kind:n,mimeType:`${n}/${a.codec}`,preferredPayloadType:a.payload,clockRate:a.rate,channels:a.encoding,parameters:{},rtcpFeedback:[]};e.set(o.preferredPayloadType,o)}for(let a of i.fmtp??[]){let o=ui.parseParams(a.config),c=e.get(a.payload);c&&(o?.hasOwnProperty("profile-level-id")&&(o["profile-level-id"]=String(o["profile-level-id"])),c.parameters=o)}for(let a of i.rtcpFb??[]){let o={type:a.type,parameter:a.subtype};if(o.parameter||delete o.parameter,a.payload!=="*"){let c=e.get(Number(a.payload));if(!c)continue;c.rtcpFeedback.push(o)}else for(let c of e.values())c.kind===n&&!/.+\/rtx$/i.test(c.mimeType)&&c.rtcpFeedback.push(o)}for(let a of i.ext??[]){if(a["encrypt-uri"])continue;let o={kind:n,uri:a.uri,preferredId:a.value};t.set(o.preferredId,o)}}return{codecs:Array.from(e.values()),headerExtensions:Array.from(t.values())}}function po({sdpObject:s}){let e=s.setup,t=s.fingerprint;if(!e||!t){let n=(s.media??[]).find(a=>a.port!==0);n&&(e=e??n.setup,t=t??n.fingerprint)}if(e){if(!t)throw new Error("no a=fingerprint found at SDP session or media level")}else throw new Error("no a=setup found at SDP session or media level");let r;switch(e){case"active":{r="client";break}case"passive":{r="server";break}case"actpass":{r="auto";break}}return{role:r,fingerprints:[{algorithm:t.type,value:t.hash}]}}function lo({offerMediaObject:s}){let e=(s.ssrcs??[]).find(t=>t.attribute==="cname");return e?e.value:""}function uo({offerRtpParameters:s,answerMediaObject:e}){for(let t of s.codecs){let r=t.mimeType.toLowerCase();if(r!=="audio/opus"||!(e.rtp??[]).find(o=>o.payload===t.payloadType))continue;e.fmtp=e.fmtp??[];let n=e.fmtp.find(o=>o.payload===t.payloadType);n||(n={payload:t.payloadType,config:""},e.fmtp.push(n));let a=ui.parseParams(n.config);if(r==="audio/opus"){let o=t.parameters?.["sprop-stereo"];o!==void 0&&(a.stereo=Number(o)?1:0)}n.config="";for(let o of Object.keys(a))n.config&&(n.config+=";"),n.config+=`${o}=${a[o]}`}}function ho({offerMediaObject:s,headerExtensionUri:e,headerExtensionId:t}){s.ext||(s.ext=[]),s.ext.push({uri:e,value:t})}});var We=T(jt=>{"use strict";Object.defineProperty(jt,"__esModule",{value:!0});jt.getRtpEncodings=fo;jt.addLegacySimulcast=mo;function fo({offerMediaObject:s,codecs:e}){let t=new Set;for(let n of s.ssrcs??[]){let a=n.id;a&&t.add(a)}if(t.size===0)throw new Error("no a=ssrc lines found");let r=new Map;for(let n of s.ssrcGroups??[]){if(n.semantics!=="FID")continue;let a=n.ssrcs.split(/\s+/),o=Number(a[0]),c=Number(a[1]);t.has(o)&&(t.delete(o),t.delete(c),r.set(o,c))}for(let n of t)r.set(n,void 0);let i=[];for(let[n,a]of r){let o={ssrc:n};a&&e.length>1&&(o.rtx={ssrc:a}),i.push(o)}return i}function mo({offerMediaObject:s,numStreams:e}){if(e<=1)throw new TypeError("numStreams must be greater than 1");let t=(s.ssrcs??[]).find(l=>l.attribute==="msid");if(!t)throw new Error("a=ssrc line with msid information not found");let[r,i]=t.value.split(" "),n=Number(t.id),a;(s.ssrcGroups??[]).some(l=>{if(l.semantics!=="FID")return!1;let u=l.ssrcs.split(/\s+/);return Number(u[0])===n?(a=Number(u[1]),!0):!1});let o=(s.ssrcs??[]).find(l=>l.attribute==="cname");if(!o)throw new Error("a=ssrc line with cname information not found");let c=o.value,p=[],d=[];for(let l=0;l<e;++l)p.push(n+l),a&&d.push(a+l);s.ssrcGroups=[],s.ssrcs=[],s.ssrcGroups.push({semantics:"SIM",ssrcs:p.join(" ")});for(let l of p)s.ssrcs.push({id:l,attribute:"cname",value:c}),s.ssrcs.push({id:l,attribute:"msid",value:`${r} ${i}`});for(let l=0;l<d.length;++l){let u=p[l],f=d[l];s.ssrcs.push({id:f,attribute:"cname",value:c}),s.ssrcs.push({id:f,attribute:"msid",value:`${r} ${i}`}),s.ssrcGroups.push({semantics:"FID",ssrcs:`${u} ${f}`})}}});var He=T(st=>{"use strict";Object.defineProperty(st,"__esModule",{value:!0});st.addNackSupportForOpus=go;st.addHeaderExtensionSupport=_o;st.getMsidStreamIdAndTrackId=vo;function go(s){for(let e of s.codecs??[])(e.mimeType.toLowerCase()==="audio/opus"||e.mimeType.toLowerCase()==="audio/multiopus")&&!e.rtcpFeedback?.some(t=>t.type==="nack"&&!t.parameter)&&(e.rtcpFeedback||(e.rtcpFeedback=[]),e.rtcpFeedback.push({type:"nack"}))}function _o(s,e){let t,r=s.headerExtensions?.find(n=>n.uri===e.uri);if(r){if(r.kind===e.kind)return;t=r.preferredId}if(s.headerExtensions||(s.headerExtensions=[]),t===void 0){t=1;let n=new Set(s.headerExtensions.map(a=>a.preferredId));for(;n.has(t);)++t}let i={kind:e.kind,uri:e.uri,preferredId:t,preferredEncrypt:!1,direction:e.direction};s.headerExtensions.push(i)}function vo(s){if(!s||typeof s!="string")return{msidStreamId:void 0,msidTrackId:void 0};let[e,t]=s.trim().split(/\s+/);return e?{msidStreamId:e,msidTrackId:t}:{msidStreamId:void 0,msidTrackId:void 0}}});var gi=T(Ft=>{"use strict";Object.defineProperty(Ft,"__esModule",{value:!0});Ft.Chrome111=void 0;var ne=de(),wo=W(),yo=q(),it=te(),bo=G(),So=Se(),Co=Be(),nt=Ue(),hi=We(),Fr=He(),C=new yo.Logger("Chrome111"),fi="Chrome111",mi={OS:65535,MIS:65535},qr=class s extends wo.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 s(e),getNativeRtpCapabilities:async({direction:e})=>{C.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e,sendEncodings:[{scalabilityMode:"L3T3"}]});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let i=ne.parse(r.sdp);return s.getLocalRtpCapabilities(i)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(C.debug("getNativeSctpCapabilities()"),{numStreams:mi})}}static getLocalRtpCapabilities(e,t=[]){let r=nt.extractRtpCapabilities({sdpObject:e});it.validateAndNormalizeRtpCapabilities(r),Fr.addNackSupportForOpus(r);for(let i of t)Fr.addHeaderExtensionSupport(r,i);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),C.debug("constructor()"),this._direction=e,this._remoteSdp=new Co.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=p,i.role&&i.role!=="auto"&&(this._forcedLocalDtlsRole=i.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(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 r={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:n,codec:a,onRtpSender:o}){if(this.assertNotClosed(),this.assertSendDirection(),C.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1){let k=1;for(let x of r){let L=x.scalabilityMode?(0,So.parse)(x.scalabilityMode).temporalLayers:3;L>k&&(k=L)}r.forEach((x,L)=>{x.rid=`r${L}`,x.scalabilityMode=`L1T${k}`})}let c=this._remoteSdp.getNextMediaSectionIdx(),p=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});o&&o(p.sender);let d=await this._pc.createOffer(),l=ne.parse(d.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let u=[];u.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let f=s.getLocalRtpCapabilities(l,u),m=this._getSendExtendedRtpCapabilities(f),h=it.getSendingRtpParameters(e.kind,m);h.codecs=it.reduceCodecs(h.codecs,a);let g=it.getSendingRemoteRtpParameters(e.kind,m);if(g.codecs=it.reduceCodecs(g.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l}),n?.absCaptureTime){let k=l.media[c.idx];nt.addHeaderExtension({offerMediaObject:k,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(x=>x.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:ne.write(l)}}C.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let w=p.mid;h.mid=w,l=ne.parse(this._pc.localDescription.sdp);let E=l.media[c.idx];if(h.rtcp.cname=nt.getCname({offerMediaObject:E}),h.msid=`${t??this._sendStream.id} ${e.id}`,!r)h.encodings=hi.getRtpEncodings({offerMediaObject:E,codecs:h.codecs});else if(r.length===1){let k=hi.getRtpEncodings({offerMediaObject:E,codecs:h.codecs});Object.assign(k[0],r[0]),h.encodings=k}else h.encodings=r;this._remoteSdp.send({offerMediaObject:E,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:g,codecOptions:i});let P={type:"answer",sdp:this._remoteSdp.getSdp()};return C.debug("send() | calling pc.setRemoteDescription() [answer:%o]",P),await this._pc.setRemoteDescription(P),this._mapMidTransceiver.set(w,p),{localId:w,rtpParameters:h,rtpSender:p.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 i=await this._pc.createOffer();C.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let n={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),C.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();C.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),C.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();C.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?C.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):C.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),C.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();C.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),C.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();C.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};C.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%mi.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=ne.parse(n.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),C.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;C.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:f}=Fr.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??f??d.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(let o of e){let{trackId:c,onRtpReceiver:p}=o;if(p){let d=r.get(c),l=this._pc.getTransceivers().find(u=>u.mid===d);if(!l)throw new Error("transceiver not found");p(l.receiver)}}let n=await this._pc.createAnswer(),a=ne.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=r.get(c),l=a.media.find(u=>String(u.mid)===d);nt.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l})}n={type:"answer",sdp:ne.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),C.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,p=r.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(d)this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){C.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){C.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){C.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};C.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(r,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),f=ne.parse(u.sdp),m=f.media.find(h=>h.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f}),u={type:"answer",sdp:ne.write(f)},C.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=ne.parse(this._pc.localDescription.sdp));let r=nt.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new bo.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')}};Ft.Chrome111=qr});var wi=T(qt=>{"use strict";Object.defineProperty(qt,"__esModule",{value:!0});qt.Chrome74=void 0;var Q=de(),Ro=q(),To=W(),at=te(),Eo=G(),xo=Se(),ko=Be(),ot=Ue(),zr=We(),$r=He(),b=new Ro.Logger("Chrome74"),_i="Chrome74",vi={OS:1024,MIS:1024},Br=class s extends To.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:_i,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{b.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let i=Q.parse(r.sdp);return s.getLocalRtpCapabilities(i)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(b.debug("getNativeSctpCapabilities()"),{numStreams:vi})}}static getLocalRtpCapabilities(e,t=[]){let r=ot.extractRtpCapabilities({sdpObject:e});at.validateAndNormalizeRtpCapabilities(r),$r.addNackSupportForOpus(r);for(let i of t)$r.addHeaderExtensionSupport(r,i);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),b.debug("constructor()"),this._direction=e,this._remoteSdp=new ko.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=p,i.role&&i.role!=="auto"&&(this._forcedLocalDtlsRole=i.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(b.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return _i}close(){if(b.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),b.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),b.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});b.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:n,codec:a}){this.assertNotClosed(),this.assertSendDirection(),b.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((x,L)=>{x.rid=`r${L}`});let o=this._remoteSdp.getNextMediaSectionIdx(),c=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r}),p=await this._pc.createOffer(),d=Q.parse(p.sdp);d.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let l=[];l.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let u=s.getLocalRtpCapabilities(d,l),f=this._getSendExtendedRtpCapabilities(u),m=at.getSendingRtpParameters(e.kind,f);m.codecs=at.reduceCodecs(m.codecs,a);let h=at.getSendingRemoteRtpParameters(e.kind,f);h.codecs=at.reduceCodecs(h.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:d});let g=!1,w=(0,xo.parse)((r??[{}])[0].scalabilityMode),E;r?.length===1&&w.spatialLayers>1&&m.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(b.debug("send() | enabling legacy simulcast for VP9 SVC"),g=!0,d=Q.parse(p.sdp),E=d.media[o.idx],zr.addLegacySimulcast({offerMediaObject:E,numStreams:w.spatialLayers}),p={type:"offer",sdp:Q.write(d)}),b.debug("send() | calling pc.setLocalDescription() [offer:%o]",p),n?.absCaptureTime&&(E=d.media[o.idx],ot.addHeaderExtension({offerMediaObject:E,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:h.headerExtensions.find(x=>x.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),p={type:"offer",sdp:Q.write(d)}),await this._pc.setLocalDescription(p);let P=c.mid;if(m.mid=P,d=Q.parse(this._pc.localDescription.sdp),E=d.media[o.idx],m.rtcp.cname=ot.getCname({offerMediaObject:E}),m.msid=`${t??this._sendStream.id} ${e.id}`,!r)m.encodings=zr.getRtpEncodings({offerMediaObject:E,codecs:m.codecs});else if(r.length===1){let x=zr.getRtpEncodings({offerMediaObject:E,codecs:m.codecs});Object.assign(x[0],r[0]),g&&(x=[x[0]]),m.encodings=x}else m.encodings=r;if(m.encodings.length>1&&(m.codecs[0].mimeType.toLowerCase()==="video/vp8"||m.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let x of m.encodings)x.scalabilityMode?x.scalabilityMode=`L1T${w.temporalLayers}`:x.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:E,reuseMid:o.reuseMid,offerRtpParameters:m,answerRtpParameters:h,codecOptions:i});let k={type:"answer",sdp:this._remoteSdp.getSdp()};return b.debug("send() | calling pc.setRemoteDescription() [answer:%o]",k),await this._pc.setRemoteDescription(k),this._mapMidTransceiver.set(P,c),{localId:P,rtpParameters:m,rtpSender:c.sender}}async stopSending(e){if(this.assertSendDirection(),b.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let i=await this._pc.createOffer();b.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let n={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),b.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();b.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),b.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();b.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?b.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):b.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),b.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();b.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),b.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();b.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};b.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%vi.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=Q.parse(n.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),b.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;b.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:f}=$r.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??f??d.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);let n=await this._pc.createAnswer(),a=Q.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=r.get(c),l=a.media.find(u=>String(u.mid)===d);ot.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l})}n={type:"answer",sdp:Q.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),b.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,p=r.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(d)this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){b.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){b.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){b.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};b.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(r,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),f=Q.parse(u.sdp),m=f.media.find(h=>h.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f}),u={type:"answer",sdp:Q.write(f)},b.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=Q.parse(this._pc.localDescription.sdp));let r=ot.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Eo.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};qt.Chrome74=Br});var Ri=T($t=>{"use strict";Object.defineProperty($t,"__esModule",{value:!0});$t.Firefox120=void 0;var pe=de(),Po=W(),Do=q(),yi=G(),ct=te(),Io=Se(),Lo=Be(),zt=Ue(),bi=We(),Mo=He(),R=new Do.Logger("Firefox120"),Si="Firefox120",Ci={OS:16,MIS:2048},Ur=class s extends Po.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Si,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{R.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"}),r=document.createElement("canvas");r.getContext("2d");let n=r.captureStream().getVideoTracks()[0];try{t.addTransceiver("audio",{direction:e}),t.addTransceiver(n,{direction:e,sendEncodings:[{rid:"r0",maxBitrate:1e5},{rid:"r1",maxBitrate:5e5}]});let a=await t.createOffer();try{r.remove()}catch{}try{n.stop()}catch{}try{t.close()}catch{}t=void 0;let o=pe.parse(a.sdp);return s.getLocalRtpCapabilities(o)}catch(a){try{r.remove()}catch{}try{n.stop()}catch{}try{t?.close()}catch{}throw t=void 0,a}},getNativeSctpCapabilities:async()=>(R.debug("getNativeSctpCapabilities()"),{numStreams:Ci})}}static getLocalRtpCapabilities(e){let t=zt.extractRtpCapabilities({sdpObject:e});return ct.validateAndNormalizeRtpCapabilities(t),t}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),R.debug("constructor()"),this._direction=e,this._remoteSdp=new Lo.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=p,this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(R.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Si}close(){if(R.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){throw this.assertNotClosed(),new yi.UnsupportedError("not supported")}async restartIce(e){if(this.assertNotClosed(),R.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});R.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,codec:n,onRtpSender:a}){this.assertNotClosed(),this.assertSendDirection(),R.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((E,P)=>{E.rid=`r${P}`});let o=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});a&&a(o.sender);let c=await this._pc.createOffer(),p=pe.parse(c.sdp);p.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let d=s.getLocalRtpCapabilities(p),l=this._getSendExtendedRtpCapabilities(d),u=ct.getSendingRtpParameters(e.kind,l);u.codecs=ct.reduceCodecs(u.codecs,n);let f=ct.getSendingRemoteRtpParameters(e.kind,l);f.codecs=ct.reduceCodecs(f.codecs,n),this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:p});let m=(0,Io.parse)((r??[{}])[0].scalabilityMode);R.debug("send() | calling pc.setLocalDescription() [offer:%o]",c),await this._pc.setLocalDescription(c);let h=o.mid;u.mid=h,p=pe.parse(this._pc.localDescription.sdp);let g=p.media[p.media.length-1];if(u.rtcp.cname=zt.getCname({offerMediaObject:g}),u.msid=`${t??this._sendStream.id} ${e.id}`,!r)u.encodings=bi.getRtpEncodings({offerMediaObject:g,codecs:u.codecs});else if(r.length===1){let E=bi.getRtpEncodings({offerMediaObject:g,codecs:u.codecs});Object.assign(E[0],r[0]),u.encodings=E}else u.encodings=r;if(u.encodings.length>1&&(u.codecs[0].mimeType.toLowerCase()==="video/vp8"||u.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let E of u.encodings)E.scalabilityMode?E.scalabilityMode=`L1T${m.temporalLayers}`:E.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:g,offerRtpParameters:u,answerRtpParameters:f,codecOptions:i});let w={type:"answer",sdp:this._remoteSdp.getSdp()};return R.debug("send() | calling pc.setRemoteDescription() [answer:%o]",w),await this._pc.setRemoteDescription(w),this._mapMidTransceiver.set(h,o),{localId:h,rtpParameters:u,rtpSender:o.sender}}async stopSending(e){if(this.assertSendDirection(),R.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated transceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.disableMediaSection(t.mid);let r=await this._pc.createOffer();R.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),R.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();R.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),R.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let r=await this._pc.createOffer();R.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?R.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):R.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),R.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated transceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();R.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),R.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();R.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};R.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Ci.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=pe.parse(n.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:a}),R.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;R.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:f}=Mo.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??f??d.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(let o of e){let{trackId:c,onRtpReceiver:p}=o;if(p){let d=r.get(c),l=this._pc.getTransceivers().find(u=>u.mid===d);if(!l)throw new Error("transceiver not found");p(l.receiver)}}let n=await this._pc.createAnswer(),a=pe.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=r.get(c),l=a.media.find(u=>String(u.mid)===d);zt.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l}),n={type:"answer",sdp:pe.write(a)}}this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:a}),R.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,p=r.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(!d)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){R.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){R.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){R.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};R.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(r,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),f=pe.parse(u.sdp),m=f.media.find(h=>h.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:f}),u={type:"answer",sdp:pe.write(f)},R.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=pe.parse(this._pc.localDescription.sdp));let r=zt.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new yi.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')}};$t.Firefox120=Ur});var ki=T(Bt=>{"use strict";Object.defineProperty(Bt,"__esModule",{value:!0});Bt.Safari12=void 0;var K=de(),Oo=W(),Ao=q(),dt=te(),No=G(),jo=Se(),Fo=Be(),pt=Ue(),Ti=We(),Wr=He(),S=new Ao.Logger("Safari12"),Ei="Safari12",xi={OS:65535,MIS:65535},Hr=class s extends Oo.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Ei,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{S.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let i=K.parse(r.sdp);return s.getLocalRtpCapabilities(i)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(S.debug("getNativeSctpCapabilities()"),{numStreams:xi})}}static getLocalRtpCapabilities(e,t=[]){let r=pt.extractRtpCapabilities({sdpObject:e});dt.validateAndNormalizeRtpCapabilities(r),Wr.addNackSupportForOpus(r);for(let i of t)Wr.addHeaderExtensionSupport(r,i);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),S.debug("constructor()"),this._direction=e,this._remoteSdp=new Fo.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=p,i.role&&i.role!=="auto"&&(this._forcedLocalDtlsRole=i.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)}),this._pc.addEventListener("icecandidateerror",d=>{this.emit("@icecandidateerror",d)}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(S.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Ei}close(){if(S.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),S.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),S.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});S.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();S.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:n,codec:a,onRtpSender:o}){this.assertNotClosed(),this.assertSendDirection(),S.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t);let c=this._remoteSdp.getNextMediaSectionIdx(),p=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream]});o&&o(p.sender);let d=await this._pc.createOffer(),l=K.parse(d.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let u=[];u.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let f=s.getLocalRtpCapabilities(l,u),m=this._getSendExtendedRtpCapabilities(f),h=dt.getSendingRtpParameters(e.kind,m);h.codecs=dt.reduceCodecs(h.codecs,a);let g=dt.getSendingRemoteRtpParameters(e.kind,m);g.codecs=dt.reduceCodecs(g.codecs,a);let w;this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l});let E=(0,jo.parse)((r??[{}])[0].scalabilityMode);r&&r.length>1&&(S.debug("send() | enabling legacy simulcast"),l=K.parse(d.sdp),w=l.media[c.idx],Ti.addLegacySimulcast({offerMediaObject:w,numStreams:r.length}),d={type:"offer",sdp:K.write(l)}),n?.absCaptureTime&&(w=l.media[c.idx],pt.addHeaderExtension({offerMediaObject:w,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(x=>x.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:K.write(l)}),S.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let P=p.mid;if(h.mid=P,l=K.parse(this._pc.localDescription.sdp),w=l.media[c.idx],h.rtcp.cname=pt.getCname({offerMediaObject:w}),h.msid=`${t??this._sendStream.id} ${e.id}`,h.encodings=Ti.getRtpEncodings({offerMediaObject:w,codecs:h.codecs}),r)for(let x=0;x<h.encodings.length;++x)r[x]&&Object.assign(h.encodings[x],r[x]);if(h.encodings.length>1&&(h.codecs[0].mimeType.toLowerCase()==="video/vp8"||h.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let x of h.encodings)x.scalabilityMode?x.scalabilityMode=`L1T${E.temporalLayers}`:x.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:w,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:g,codecOptions:i});let k={type:"answer",sdp:this._remoteSdp.getSdp()};return S.debug("send() | calling pc.setRemoteDescription() [answer:%o]",k),await this._pc.setRemoteDescription(k),this._mapMidTransceiver.set(P,p),{localId:P,rtpParameters:h,rtpSender:p.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;S.debug("stopSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let i=await this._pc.createOffer();S.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let n={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),S.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();S.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),S.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let r=await this._pc.createOffer();S.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?S.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):S.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),S.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();S.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),S.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();S.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};S.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%xi.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=K.parse(n.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),S.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;S.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:f}=Wr.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??f??d.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(let o of e){let{trackId:c,onRtpReceiver:p}=o;if(p){let d=r.get(c),l=this._pc.getTransceivers().find(u=>u.mid===d);if(!l)throw new Error("transceiver not found");p(l.receiver)}}let n=await this._pc.createAnswer(),a=K.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=r.get(c),l=a.media.find(u=>String(u.mid)===d);pt.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l})}n={type:"answer",sdp:K.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),S.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,p=r.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(!d)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){S.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();S.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){S.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();S.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){S.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();S.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};S.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(r,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),f=K.parse(u.sdp),m=f.media.find(h=>h.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f}),u={type:"answer",sdp:K.write(f)},S.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=K.parse(this._pc.localDescription.sdp));let r=pt.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new No.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')}};Bt.Safari12=Hr});var Ii=T(Ut=>{"use strict";Object.defineProperty(Ut,"__esModule",{value:!0});Ut.ReactNative106=void 0;var Y=de(),qo=W(),zo=q(),lt=te(),$o=G(),Bo=Se(),Uo=Be(),ut=Ue(),Vr=We(),Gr=He(),y=new zo.Logger("ReactNative106"),Pi="ReactNative106",Di={OS:65535,MIS:65535},Qr=class s extends qo.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Pi,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{y.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let i=Y.parse(r.sdp);return s.getLocalRtpCapabilities(i)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(y.debug("getNativeSctpCapabilities()"),{numStreams:Di})}}static getLocalRtpCapabilities(e,t=[]){let r=ut.extractRtpCapabilities({sdpObject:e});lt.validateAndNormalizeRtpCapabilities(r),Gr.addNackSupportForOpus(r);for(let i of t)Gr.addHeaderExtensionSupport(r,i);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:p}){super(),y.debug("constructor()"),this._direction=e,this._remoteSdp=new Uo.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=p,i.role&&i.role!=="auto"&&(this._forcedLocalDtlsRole=i.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(y.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Pi}close(){if(y.debug("close()"),!this._closed){this._closed=!0,this._sendStream.release(!1);try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),y.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),y.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});y.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();y.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:n,codec:a,onRtpSender:o}){this.assertNotClosed(),this.assertSendDirection(),y.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((L,Te)=>{L.rid=`r${Te}`});let c=this._remoteSdp.getNextMediaSectionIdx(),p=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});o&&o(p.sender);let d=await this._pc.createOffer(),l=Y.parse(d.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let u=[];u.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let f=s.getLocalRtpCapabilities(l,u),m=this._getSendExtendedRtpCapabilities(f),h=lt.getSendingRtpParameters(e.kind,m);h.codecs=lt.reduceCodecs(h.codecs,a);let g=lt.getSendingRemoteRtpParameters(e.kind,m);g.codecs=lt.reduceCodecs(g.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l});let w=!1,E=(0,Bo.parse)((r??[{}])[0].scalabilityMode),P;r?.length===1&&E.spatialLayers>1&&h.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(y.debug("send() | enabling legacy simulcast for VP9 SVC"),w=!0,l=Y.parse(d.sdp),P=l.media[c.idx],Vr.addLegacySimulcast({offerMediaObject:P,numStreams:E.spatialLayers}),d={type:"offer",sdp:Y.write(l)}),n?.absCaptureTime&&(P=l.media[c.idx],ut.addHeaderExtension({offerMediaObject:P,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(L=>L.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:Y.write(l)}),y.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),await this._pc.setLocalDescription(d);let k=p.mid??void 0;if(k||y.warn("send() | missing transceiver.mid (bug in react-native-webrtc, using a workaround"),h.mid=k,l=Y.parse(this._pc.localDescription.sdp),P=l.media[c.idx],h.rtcp.cname=ut.getCname({offerMediaObject:P}),h.msid=`${t??this._sendStream.id} ${e.id}`,!r)h.encodings=Vr.getRtpEncodings({offerMediaObject:P,codecs:h.codecs});else if(r.length===1){let L=Vr.getRtpEncodings({offerMediaObject:P,codecs:h.codecs});Object.assign(L[0],r[0]),w&&(L=[L[0]]),h.encodings=L}else h.encodings=r;if(h.encodings.length>1&&(h.codecs[0].mimeType.toLowerCase()==="video/vp8"||h.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let L of h.encodings)L.scalabilityMode?L.scalabilityMode=`L1T${E.temporalLayers}`:L.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:P,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:g,codecOptions:i});let x={type:"answer",sdp:this._remoteSdp.getSdp()};return y.debug("send() | calling pc.setRemoteDescription() [answer:%o]",x),await this._pc.setRemoteDescription(x),k||(k=p.mid,h.mid=k),this._mapMidTransceiver.set(k,p),{localId:k,rtpParameters:h,rtpSender:p.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;y.debug("stopSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let i=await this._pc.createOffer();y.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let n={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),y.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();y.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),y.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();y.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?y.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):y.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),y.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();y.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),y.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();y.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};y.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Di.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=Y.parse(n.sdp),o=a.media.find(p=>p.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),y.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:p,rtpParameters:d,streamId:l}=o;y.debug("receive() [trackId:%s, kind:%s]",c,p);let u=d.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:f}=Gr.getMsidStreamIdAndTrackId(d.msid);this._remoteSdp.receive({mid:u,kind:p,offerRtpParameters:d,streamId:l??f??d.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(let o of e){let{trackId:c,onRtpReceiver:p}=o;if(p){let d=r.get(c),l=this._pc.getTransceivers().find(u=>u.mid===d);if(!l)throw new Error("transceiver not found");p(l.receiver)}}let n=await this._pc.createAnswer(),a=Y.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:p}=o,d=r.get(c),l=a.media.find(u=>String(u.mid)===d);ut.applyCodecParameters({offerRtpParameters:p,answerMediaObject:l})}n={type:"answer",sdp:Y.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),y.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,p=r.get(c),d=this._pc.getTransceivers().find(l=>l.mid===p);if(d)this._mapMidTransceiver.set(p,d),t.push({localId:p,track:d.receiver.track,rtpReceiver:d.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){y.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();y.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){y.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();y.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){y.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();y.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,p={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};y.debug("receiveDataChannel() [options:%o]",p);let d=this._pc.createDataChannel(r,p);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),f=Y.parse(u.sdp),m=f.media.find(h=>h.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f}),u={type:"answer",sdp:Y.write(f)},y.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:d}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=Y.parse(this._pc.localDescription.sdp));let r=ut.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new $o.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};Ut.ReactNative106=Qr});var Ai=T(Ve=>{"use strict";Object.defineProperty(Ve,"__esModule",{value:!0});Ve.Device=void 0;Ve.detectDevice=Li;Ve.detectDeviceAsync=Mi;var Wo=q(),Ho=W(),me=G(),Wt=ve(),H=te(),Vo=ti(),Go=gi(),Qo=wi(),Ko=Ri(),Yo=ki(),Jo=Ii(),v=new Wo.Logger("Device");function Li(s,e){return v.debug("detectDevice()"),!s&&typeof navigator=="object"&&(s=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),Oi(s,e)}async function Mi(s,e){return v.debug("detectDeviceAsync()"),!s&&typeof navigator=="object"&&(s=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),Oi(s,e)}var Kr=class s{_handlerFactory;_handlerName;_loaded=!1;_getSendExtendedRtpCapabilities;_recvRtpCapabilities;_sendRtpCapabilities;_canProduceByKind={audio:!1,video:!1};_sctpCapabilities;_observer=new Ho.EnhancedEventEmitter;static async factory({handlerName:e,handlerFactory:t}={}){if(v.debug("factory()"),e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(!e&&!t&&(e=await Mi(),!e))throw new me.UnsupportedError("device not supported");return new s({handlerName:e,handlerFactory:t})}constructor({handlerName:e,handlerFactory:t}={}){if(v.debug("constructor()"),e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(t)this._handlerFactory=t;else{if(e)v.debug("constructor() | handler given: %s",e);else if(e=Li(),e)v.debug("constructor() | detected handler: %s",e);else throw new me.UnsupportedError("device not supported");switch(e){case"Chrome111":{this._handlerFactory=Go.Chrome111.createFactory();break}case"Chrome74":{this._handlerFactory=Qo.Chrome74.createFactory();break}case"Firefox120":{this._handlerFactory=Ko.Firefox120.createFactory();break}case"Safari12":{this._handlerFactory=Yo.Safari12.createFactory();break}case"ReactNative106":{this._handlerFactory=Jo.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 me.InvalidStateError("not loaded");return this._recvRtpCapabilities}get sendRtpCapabilities(){if(!this._loaded)throw new me.InvalidStateError("not loaded");return this._sendRtpCapabilities}get sctpCapabilities(){if(!this._loaded)throw new me.InvalidStateError("not loaded");return this._sctpCapabilities}get observer(){return this._observer}async load({routerRtpCapabilities:e,preferLocalCodecsOrder:t=!1}){if(v.debug("load() [routerRtpCapabilities:%o]",e),this._loaded)throw new me.InvalidStateError("already loaded");let r=Wt.clone(e);H.validateAndNormalizeRtpCapabilities(r);let{getNativeRtpCapabilities:i,getNativeSctpCapabilities:n}=this._handlerFactory,a=Wt.clone(await i({direction:"recvonly"}));v.debug("load() | got native receiving RTP capabilities:%o",a),H.validateAndNormalizeRtpCapabilities(a);let o=Wt.clone(await i({direction:"sendonly"}));v.debug("load() | got native sending RTP capabilities:%o",o),H.validateAndNormalizeRtpCapabilities(o),this._getSendExtendedRtpCapabilities=d=>Wt.clone(H.getExtendedRtpCapabilities(d,r,t));let c=H.getExtendedRtpCapabilities(a,r,!1);this._recvRtpCapabilities=H.getRecvRtpCapabilities(c),v.debug("load() | got receiving RTP capabilities:%o",this._recvRtpCapabilities),H.validateAndNormalizeRtpCapabilities(this._recvRtpCapabilities);let p=H.getExtendedRtpCapabilities(o,r,t);this._sendRtpCapabilities=H.getSendRtpCapabilities(p),v.debug("load() | got sending RTP capabilities:%o",this._sendRtpCapabilities),H.validateAndNormalizeRtpCapabilities(this._sendRtpCapabilities),this._canProduceByKind.audio=H.canSend("audio",this._sendRtpCapabilities),this._canProduceByKind.video=H.canSend("video",this._sendRtpCapabilities),this._sctpCapabilities=await n(),H.validateSctpCapabilities(this._sctpCapabilities),v.debug("load() | got native SCTP capabilities:%o",this._sctpCapabilities),v.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 me.InvalidStateError("not loaded");return this._canProduceByKind[e]}createSendTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:p}){return v.debug("createSendTransport()"),this.createTransport({direction:"send",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:p})}createRecvTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:p}){return v.debug("createRecvTransport()"),this.createTransport({direction:"recv",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:p})}createTransport({direction:e,id:t,iceParameters:r,iceCandidates:i,dtlsParameters:n,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:p,appData:d}){if(this._loaded){if(typeof t!="string")throw new TypeError("missing id");if(typeof r!="object")throw new TypeError("missing iceParameters");if(Array.isArray(i)){if(typeof n!="object")throw new TypeError("missing dtlsParameters");if(a&&typeof a!="object")throw new TypeError("wrong sctpParameters");if(d&&typeof d!="object")throw new TypeError("if given, appData must be an object")}else throw new TypeError("missing iceCandidates")}else throw new me.InvalidStateError("not loaded");let l=new Vo.Transport({direction:e,id:t,iceParameters:r,iceCandidates:i,dtlsParameters:n,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:p,appData:d,handlerFactory:this._handlerFactory,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities,recvRtpCapabilities:this._recvRtpCapabilities,canProduceByKind:this._canProduceByKind});return this._observer.safeEmit("newtransport",l),l}};Ve.Device=Kr;function Oi(s,e){v.debug('detectDeviceImpl() [userAgent:"%s", userAgentData:%o]',s,e);let t=Xo(s,e);if(t){if(t>=111)return v.debug("detectDeviceImpl() | using Chrome111 handler"),"Chrome111";if(t>=74)return v.debug("detectDeviceImpl() | using Chrome74 handler"),"Chrome74";v.warn("detectDeviceImpl() | unsupported Chromium based browser/version");return}let r=Zo(s);if(r){if(r>=120)return v.debug("detectDeviceImpl() | using Firefox120 handler"),"Firefox120";v.warn("detectDeviceImpl() | unsupported Firefox browser/version");return}let i=ec(s);if(i){if(i>=605)return v.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";v.warn("detectDeviceImpl() | unsupported desktop Safari browser/version");return}let n=tc(s);if(n){if(n>=605)return v.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";v.warn("detectDeviceImpl() | unsupported iOS Safari based browser/version");return}if(ht()){if(typeof RTCPeerConnection<"u"&&typeof RTCRtpTransceiver<"u")return v.debug("detectDeviceImpl() | using ReactNative106 handler"),"ReactNative106";v.warn("detectDeviceImpl() | unsupported react-native-webrtc version without RTCPeerConnection or RTCRtpTransceiver, forgot to call registerGlobals() on it?");return}v.warn('detectDeviceImpl() | device not supported [userAgent:"%s", userAgentData:%o]',s,e)}function Xo(s,e){if(v.debug("getChromiumMajorVersion()"),Ht(s,e)){v.debug("getChromiumMajorVersion() | this is iOS => undefined");return}if(ht()){v.debug("getChromiumMajorVersion() | this is React-Native => undefined");return}if(e){let i=(Array.isArray(e.brands)?e.brands:[]).find(n=>n.brand==="Chromium");if(i){let n=Number(i.version);return v.debug(`getChromiumMajorVersion() | Chromium major version based on NavigatorUAData => ${n}`),n}}let t=s?.match(/\b(?:Chrome|Chromium)\/(\w+)/i);if(t?.[1]){let r=Number(t[1]);return v.debug(`getChromiumMajorVersion() | Chromium major version based on User-Agent => ${r}`),r}v.debug("getChromiumMajorVersion() | this is not Chromium => undefined")}function Zo(s){if(v.debug("getFirefoxMajorVersion()"),Ht(s)){v.debug("getFirefoxMajorVersion() | this is iOS => undefined");return}if(ht()){v.debug("getFirefoxMajorVersion() | this is React-Native => undefined");return}let e=s?.match(/\bFirefox\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return v.debug(`getFirefoxMajorVersion() | Firefox major version based on User-Agent => ${t}`),t}v.debug("getFirefoxMajorVersion() | this is not Firefox => undefined")}function ec(s){if(v.debug("getMacOSWebKitMajorVersion()"),Ht(s)){v.debug("getMacOSWebKitMajorVersion() | this is iOS => undefined");return}if(ht()){v.debug("getMacOSWebKitMajorVersion() | this is React-Native => undefined");return}if(!(s&&/\bSafari\b/i.test(s)&&!/\bChrome\b/i.test(s)&&!/\bChromium\b/i.test(s)&&!/\bFirefox\b/i.test(s))){v.debug("getMacOSWebKitMajorVersion() | this is not Safari => undefined");return}let t=s.match(/AppleWebKit\/(\w+)/i);if(t?.[1]){let r=Number(t[1]);return v.debug(`getMacOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${r}`),r}v.debug("getMacOSWebKitMajorVersion() | this is not WebKit => undefined")}function tc(s){if(v.debug("getIOSWebKitMajorVersion()"),!Ht(s)){v.debug("getIOSWebKitMajorVersion() | this is not iOS => undefined");return}if(ht()){v.debug("getIOSWebKitMajorVersion() | this is React-Native => undefined");return}let e=s?.match(/AppleWebKit\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return v.debug(`getIOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${t}`),t}v.debug("getIOSWebKitMajorVersion() | this is not WebKit => undefined")}function Ht(s,e){return v.debug("isIOS()"),e?.platform==="iOS"?(v.debug("isIOS() | this is iOS based on NavigatorUAData.platform => true"),!0):e?.platform?(v.debug("isIOS() | this is not iOS based on NavigatorUAData.platform => false"),!1):s&&/iPad|iPhone|iPod/.test(s)?(v.debug("isIOS() | this is iOS based on User-Agent => true"),!0):typeof navigator=="object"&&navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1?(v.debug("isIOS() | this is iPadOS 13+ based on User-Agent => true"),!0):(v.debug("isIOS() | this is not iOS => false"),!1)}function ht(){return v.debug("isReactNative()"),typeof navigator=="object"&&navigator.product==="ReactNative"?(v.debug("isReactNative() | this is React-Native based on navigator.product"),!0):(v.debug("isReactNative() | this is not React-Native => false"),!1)}});var ji=T(Ni=>{"use strict";var Re=256,Gt=[],Vt;for(;Re--;)Gt[Re]=(Re+256).toString(16).substring(1);function rc(){var s=0,e,t="";if(!Vt||Re+16>256){for(Vt=Array(s=256);s--;)Vt[s]=256*Math.random()|0;s=Re=0}for(;s<16;s++)e=Vt[Re+s],s==6?t+=Gt[e&15|64]:s==8?t+=Gt[e&63|128]:t+=Gt[e],s&1&&s>1&&s<11&&(t+="-");return Re++,t}Ni.v4=rc});var Fi=T(Qt=>{"use strict";Object.defineProperty(Qt,"__esModule",{value:!0});Qt.FakeEventTarget=void 0;var Yr=class{listeners={};addEventListener(e,t,r){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof r=="object"&&r.once===!0}))}removeEventListener(e,t,r){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(i=>i.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new Error("invalid event object");let t=this.listeners[e.type];if(!t)return!0;for(let r of[...t]){try{r.callback.call(this,e)}catch(i){setTimeout(()=>{throw i},0)}r.once&&this.removeEventListener(e.type,r.callback)}return!e.defaultPrevented}};Qt.FakeEventTarget=Yr});var qi=T(Kt=>{"use strict";Object.defineProperty(Kt,"__esModule",{value:!0});Kt.FakeEvent=void 0;var Jr=class{NONE=0;CAPTURING_PHASE=1;AT_TARGET=2;BUBBLING_PHASE=3;type;bubbles;cancelable;defaultPrevented=!1;composed=!1;currentTarget=null;eventPhase=this.NONE;isTrusted=!0;target=null;timeStamp=0;cancelBubble=!1;returnValue=!0;srcElement=null;constructor(e,t={}){this.type=e,this.bubbles=t.bubbles??!1,this.cancelable=t.cancelable??!1}preventDefault(){this.cancelable&&(this.defaultPrevented=!0)}stopPropagation(){}stopImmediatePropagation(){}composedPath(){return[]}initEvent(e,t,r){}};Kt.FakeEvent=Jr});var zi=T(Xr=>{"use strict";Object.defineProperty(Xr,"__esModule",{value:!0});Xr.clone=sc;function sc(s){if(s!==void 0)return Number.isNaN(s)?NaN:typeof structuredClone=="function"?structuredClone(s):JSON.parse(JSON.stringify(s))}});var Bi=T(Jt=>{"use strict";Object.defineProperty(Jt,"__esModule",{value:!0});Jt.FakeMediaStreamTrack=void 0;var $i=ji(),ic=Fi(),Ge=qi(),Yt=zi(),Zr=class s extends ic.FakeEventTarget{#m;#l;#u;#e;#r;#t;#s;#h;#i;#f;#n;#a=null;#o=null;#c=null;#d=null;#p=null;constructor({kind:e,id:t,label:r,contentHint:i,enabled:n,muted:a,readyState:o,capabilities:c,constraints:p,settings:d,data:l}){super(),this.#m=t??(0,$i.v4)(),this.#l=e,this.#u=r??"",this.#s=i??"",this.#r=n??!0,this.#t=a??!1,this.#e=o??"live",this.#h=c??{},this.#i=p??{},this.#f=d??{},this.#n=l??{}}get id(){return this.#m}get kind(){return this.#l}get label(){return this.#u}get contentHint(){return this.#s}set contentHint(e){this.#s=e}get enabled(){return this.#r}set enabled(e){let t=this.#r!==e;this.#r=e,t&&this.dispatchEvent(new Ge.FakeEvent("enabledchange"))}get muted(){return this.#t}get readyState(){return this.#e}get data(){return this.#n}set data(e){this.#n=e}get onmute(){return this.#a}set onmute(e){this.#a&&this.removeEventListener("mute",this.#a),this.#a=e,e&&this.addEventListener("mute",e)}get onunmute(){return this.#o}set onunmute(e){this.#o&&this.removeEventListener("unmute",this.#o),this.#o=e,e&&this.addEventListener("unmute",e)}get onended(){return this.#c}set onended(e){this.#c&&this.removeEventListener("ended",this.#c),this.#c=e,e&&this.addEventListener("ended",e)}get onenabledchange(){return this.#d}set onenabledchange(e){this.#d&&this.removeEventListener("enabledchange",this.#d),this.#d=e,e&&this.addEventListener("enabledchange",e)}get onstopped(){return this.#p}set onstopped(e){this.#p&&this.removeEventListener("stopped",this.#p),this.#p=e,e&&this.addEventListener("stopped",e)}addEventListener(e,t,r){super.addEventListener(e,t,r)}removeEventListener(e,t,r){super.removeEventListener(e,t,r)}stop(){this.#e!=="ended"&&(this.#e="ended",this.dispatchEvent(new Ge.FakeEvent("stopped")))}clone({id:e,data:t}={}){return new s({id:e??(0,$i.v4)(),kind:this.#l,label:this.#u,contentHint:this.#s,enabled:this.#r,muted:this.#t,readyState:this.#e,capabilities:(0,Yt.clone)(this.#h),constraints:(0,Yt.clone)(this.#i),settings:(0,Yt.clone)(this.#f),data:t??(0,Yt.clone)(this.#n)})}getCapabilities(){return this.#h}getConstraints(){return this.#i}async applyConstraints(e={}){return this.#i=e,Promise.resolve()}getSettings(){return this.#f}remoteStop(){this.#e!=="ended"&&(this.#e="ended",this.dispatchEvent(new Ge.FakeEvent("stopped")),this.dispatchEvent(new Ge.FakeEvent("ended")))}remoteMute(){this.#t||(this.#t=!0,this.dispatchEvent(new Ge.FakeEvent("mute")))}remoteUnmute(){this.#t&&(this.#t=!1,this.dispatchEvent(new Ge.FakeEvent("unmute")))}};Jt.FakeMediaStreamTrack=Zr});var Ui=T(Xt=>{"use strict";Object.defineProperty(Xt,"__esModule",{value:!0});Xt.FakeEventTarget=void 0;var es=class{listeners={};addEventListener(e,t,r){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof r=="object"&&r.once===!0}))}removeEventListener(e,t,r){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(i=>i.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new Error("invalid event object");let t=this.listeners[e.type];if(!t)return!0;for(let r of[...t]){try{r.callback.call(this,e)}catch(i){setTimeout(()=>{throw i},0)}r.once&&this.removeEventListener(e.type,r.callback)}return!e.defaultPrevented}};Xt.FakeEventTarget=es});var Vi=T(er=>{"use strict";Object.defineProperty(er,"__esModule",{value:!0});er.FakeHandler=void 0;var nc=Bi(),ac=W(),oc=q(),Qe=ve(),ts=te(),Hi=G(),cc=Ui(),j=new oc.Logger("FakeHandler"),Wi="FakeHandler",rs=class s extends ac.EnhancedEventEmitter{_closed=!1;_fakeParameters;_getSendExtendedRtpCapabilities;_cname=`CNAME-${Qe.generateRandomNumber()}`;_defaultSendStreamId=`${Qe.generateRandomNumber()}`;_transportReady=!1;_nextLocalId=1;_tracks=new Map;_nextSctpStreamId=0;static createFactory(e){return{name:Wi,factory:t=>new s(t,e),getNativeRtpCapabilities:async({direction:t})=>(j.debug("getNativeRtpCapabilities() [direction:%o]",t),s.getLocalRtpCapabilities(e)),getNativeSctpCapabilities:async()=>(j.debug("getNativeSctpCapabilities()"),e.generateNativeSctpCapabilities())}}static getLocalRtpCapabilities(e){let t=e.generateNativeRtpCapabilities();return ts.validateAndNormalizeRtpCapabilities(t),t}constructor({getSendExtendedRtpCapabilities:e},t){super(),j.debug("constructor()"),this._getSendExtendedRtpCapabilities=e,this._fakeParameters=t}get name(){return Wi}close(){j.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(),j.debug("updateIceServers()")}async restartIce(e){this.assertNotClosed(),j.debug("restartIce()")}async getTransportStats(){return this.assertNotClosed(),new Map}async send({track:e,streamId:t,encodings:r,codecOptions:i,codec:n}){this.assertNotClosed(),j.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),this._transportReady||await this.setupTransport({localDtlsRole:"server"});let a=s.getLocalRtpCapabilities(this._fakeParameters),o=this._getSendExtendedRtpCapabilities(a),c=ts.getSendingRtpParameters(e.kind,o);c.codecs=ts.reduceCodecs(c.codecs,n);let p=c.codecs.some(l=>/.+\/rtx$/i.test(l.mimeType));c.mid=`mid-${Qe.generateRandomNumber()}`,c.msid=`${t??"-"} ${e.id}`,r||(r=[{}]);for(let l of r)l.ssrc=Qe.generateRandomNumber(),p&&(l.rtx={ssrc:Qe.generateRandomNumber()});c.encodings=r,c.rtcp={cname:this._cname,reducedSize:!0,mux:!0},c.msid=`${t??this._defaultSendStreamId} ${e.id}`;let d=this._nextLocalId++;return this._tracks.set(d,e),{localId:String(d),rtpParameters:c}}async stopSending(e){if(j.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?j.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):j.debug("replaceTrack() [localId:%s, no track]",e),this._tracks.delete(Number(e)),this._tracks.set(Number(e),t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),j.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),j.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"}),j.debug("sendDataChannel()");let t=new Zt({id:this._nextSctpStreamId++,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:e.label,protocol:e.protocol}),r={streamId:this._nextSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits};return{dataChannel:t,sctpStreamParameters:r}}async receive(e){this.assertNotClosed();let t=[];for(let r of e){let{trackId:i,kind:n}=r;this._transportReady||await this.setupTransport({localDtlsRole:"client"}),j.debug("receive() [trackId:%s, kind:%s]",i,n);let a=this._nextLocalId++,o=new nc.FakeMediaStreamTrack({kind:n});this._tracks.set(a,o),t.push({localId:String(a),track:o})}return t}async stopReceiving(e){if(!this._closed)for(let t of e)j.debug("stopReceiving() [localId:%s]",t),this._tracks.delete(Number(t))}async pauseReceiving(e){this.assertNotClosed()}async resumeReceiving(e){this.assertNotClosed()}async getReceiverStats(e){return this.assertNotClosed(),new Map}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){return this.assertNotClosed(),this._transportReady||await this.setupTransport({localDtlsRole:"client"}),j.debug("receiveDataChannel()"),{dataChannel:new Zt({id:e.streamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:t,protocol:r})}}getDataChannelMaxMessageSize(){return 5e5}async setupTransport({localDtlsRole:e,localSdpObject:t}){let r=Qe.clone(this._fakeParameters.generateLocalDtlsParameters());e&&(r.role=e),this.emit("@connectionstatechange","connecting"),await new Promise((i,n)=>this.emit("@connect",{dtlsParameters:r},i,n)),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new Hi.InvalidStateError("method called in a closed handler")}};er.FakeHandler=rs;var Zt=class extends cc.FakeEventTarget{_id;_negotiated=!0;_ordered;_maxPacketLifeTime;_maxRetransmits;_label;_protocol;_readyState="connecting";_bufferedAmount=0;_bufferedAmountLowThreshold=0;_binaryType="arraybuffer";_onopen=null;_onclosing=null;_onclose=null;_onmessage=null;_onbufferedamountlow=null;_onerror=null;constructor({id:e,ordered:t=!0,maxPacketLifeTime:r=null,maxRetransmits:i=null,label:n="",protocol:a=""}){super(),j.debug(`constructor() [id:${e}, ordered:${t}, maxPacketLifeTime:${r}, maxRetransmits:${i}, label:${n}, protocol:${a}`),this._id=e,this._ordered=t,this._maxPacketLifeTime=r,this._maxRetransmits=i,this._label=n,this._protocol=a}get id(){return this._id}get negotiated(){return this._negotiated}get ordered(){return this._ordered}get maxPacketLifeTime(){return this._maxPacketLifeTime}get maxRetransmits(){return this._maxRetransmits}get label(){return this._label}get protocol(){return this._protocol}get readyState(){return this._readyState}get bufferedAmount(){return this._bufferedAmount}get bufferedAmountLowThreshold(){return this._bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._bufferedAmountLowThreshold=e}get binaryType(){return this._binaryType}set binaryType(e){this._binaryType=e}get onopen(){return this._onopen}set onopen(e){this._onopen&&this.removeEventListener("open",this._onopen),this._onopen=e,e&&this.addEventListener("open",e)}get onclosing(){return this._onclosing}set onclosing(e){this._onclosing&&this.removeEventListener("closing",this._onclosing),this._onclosing=e,e&&this.addEventListener("closing",e)}get onclose(){return this._onclose}set onclose(e){this._onclose&&this.removeEventListener("close",this._onclose),this._onclose=e,e&&this.addEventListener("close",e)}get onmessage(){return this._onmessage}set onmessage(e){this._onmessage&&this.removeEventListener("message",this._onmessage),this._onmessage=e,e&&this.addEventListener("message",e)}get onbufferedamountlow(){return this._onbufferedamountlow}set onbufferedamountlow(e){this._onbufferedamountlow&&this.removeEventListener("bufferedamountlow",this._onbufferedamountlow),this._onbufferedamountlow=e,e&&this.addEventListener("bufferedamountlow",e)}get onerror(){return this._onerror}set onerror(e){this._onerror&&this.removeEventListener("error",this._onerror),this._onerror=e,e&&this.addEventListener("error",e)}addEventListener(e,t,r){super.addEventListener(e,t,r)}removeEventListener(e,t,r){super.removeEventListener(e,t,r)}close(){["closing","closed"].includes(this._readyState)||(this._readyState="closed")}send(e){if(this._readyState!=="open")throw new Hi.InvalidStateError("not open")}}});var Gi=T(ee=>{"use strict";Object.defineProperty(ee,"__esModule",{value:!0});ee.generateRouterRtpCapabilities=dc;ee.generateNativeRtpCapabilities=pc;ee.generateNativeSctpCapabilities=lc;ee.generateLocalDtlsParameters=uc;ee.generateTransportRemoteParameters=hc;ee.generateProducerRemoteParameters=fc;ee.generateConsumerRemoteParameters=mc;ee.generateDataProducerRemoteParameters=gc;ee.generateDataConsumerRemoteParameters=_c;var $=ve();function V(){return String($.generateRandomNumber())}function dc(){return $.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 pc(){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 lc(){return $.deepFreeze({numStreams:{OS:2048,MIS:2048}})}function uc(){return $.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 hc(){return{id:V(),iceParameters:$.deepFreeze({iceLite:!0,password:"yku5ej8nvfaor28lvtrabcx0wkrpkztz",usernameFragment:"h3hk1iz6qqlnqlne"}),iceCandidates:$.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:$.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:$.deepFreeze({port:5e3,OS:2048,MIS:2048,maxMessageSize:2e6})}}function fc(){return $.deepFreeze({id:V()})}function mc({id:s,codecMimeType:e}={}){switch(e){case"audio/opus":return{id:s??V(),producerId:V(),kind:"audio",rtpParameters:$.deepFreeze({codecs:[{mimeType:"audio/opus",payloadType:100,clockRate:48e3,channels:2,rtcpFeedback:[{type:"transport-cc"}],parameters:{useinbandfec:1,foo:"bar"}}],encodings:[{ssrc:46687003}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:ietf:params:rtp-hdrext:ssrc-audio-level",id:10}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"audio/ISAC":return{id:s??V(),producerId:V(),kind:"audio",rtpParameters:$.deepFreeze({codecs:[{mimeType:"audio/ISAC",payloadType:111,clockRate:16e3,channels:1,rtcpFeedback:[{type:"transport-cc"}],parameters:{}}],encodings:[{ssrc:46687004}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"video/VP8":return{id:s??V(),producerId:V(),kind:"video",rtpParameters:$.deepFreeze({codecs:[{mimeType:"video/VP8",payloadType:101,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"x-google-start-bitrate":1500}},{mimeType:"video/rtx",payloadType:102,clockRate:9e4,rtcpFeedback:[],parameters:{apt:101}}],encodings:[{ssrc:99991111,rtx:{ssrc:99991112}}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",id:4},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:3gpp:video-orientation",id:11},{uri:"urn:ietf:params:rtp-hdrext:toffset",id:12}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"video/H264":return{id:s??V(),producerId:V(),kind:"video",rtpParameters:$.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 gc(){return $.deepFreeze({id:V()})}function _c({id:s}={}){return{id:s??V(),dataProducerId:V(),sctpStreamParameters:$.deepFreeze({streamId:666,maxPacketLifeTime:5e3,maxRetransmits:void 0})}}});var jr=T(M=>{"use strict";Object.defineProperty(M,"__esModule",{value:!0});M.debug=M.testFakeParameters=M.FakeHandler=M.enhancedEvents=M.ortc=M.parseScalabilityMode=M.detectDeviceAsync=M.detectDevice=M.Device=M.version=M.types=void 0;var vc=Xe();M.debug=vc.default;M.types=vs();M.version="3.20.0";var ss=Ai();Object.defineProperty(M,"Device",{enumerable:!0,get:function(){return ss.Device}});Object.defineProperty(M,"detectDevice",{enumerable:!0,get:function(){return ss.detectDevice}});Object.defineProperty(M,"detectDeviceAsync",{enumerable:!0,get:function(){return ss.detectDeviceAsync}});var wc=Se();Object.defineProperty(M,"parseScalabilityMode",{enumerable:!0,get:function(){return wc.parse}});M.ortc=te();M.enhancedEvents=W();var yc=Vi();Object.defineProperty(M,"FakeHandler",{enumerable:!0,get:function(){return yc.FakeHandler}});M.testFakeParameters=Gi()});var Ki=T((Nd,is)=>{"use strict";var bc=Object.prototype.hasOwnProperty,B="~";function ft(){}Object.create&&(ft.prototype=Object.create(null),new ft().__proto__||(B=!1));function Sc(s,e,t){this.fn=s,this.context=e,this.once=t||!1}function Qi(s,e,t,r,i){if(typeof t!="function")throw new TypeError("The listener must be a function");var n=new Sc(t,r||s,i),a=B?B+e:e;return s._events[a]?s._events[a].fn?s._events[a]=[s._events[a],n]:s._events[a].push(n):(s._events[a]=n,s._eventsCount++),s}function tr(s,e){--s._eventsCount===0?s._events=new ft:delete s._events[e]}function F(){this._events=new ft,this._eventsCount=0}F.prototype.eventNames=function(){var e=[],t,r;if(this._eventsCount===0)return e;for(r in t=this._events)bc.call(t,r)&&e.push(B?r.slice(1):r);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};F.prototype.listeners=function(e){var t=B?B+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var i=0,n=r.length,a=new Array(n);i<n;i++)a[i]=r[i].fn;return a};F.prototype.listenerCount=function(e){var t=B?B+e:e,r=this._events[t];return r?r.fn?1:r.length:0};F.prototype.emit=function(e,t,r,i,n,a){var o=B?B+e:e;if(!this._events[o])return!1;var c=this._events[o],p=arguments.length,d,l;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),p){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,r),!0;case 4:return c.fn.call(c.context,t,r,i),!0;case 5:return c.fn.call(c.context,t,r,i,n),!0;case 6:return c.fn.call(c.context,t,r,i,n,a),!0}for(l=1,d=new Array(p-1);l<p;l++)d[l-1]=arguments[l];c.fn.apply(c.context,d)}else{var u=c.length,f;for(l=0;l<u;l++)switch(c[l].once&&this.removeListener(e,c[l].fn,void 0,!0),p){case 1:c[l].fn.call(c[l].context);break;case 2:c[l].fn.call(c[l].context,t);break;case 3:c[l].fn.call(c[l].context,t,r);break;case 4:c[l].fn.call(c[l].context,t,r,i);break;default:if(!d)for(f=1,d=new Array(p-1);f<p;f++)d[f-1]=arguments[f];c[l].fn.apply(c[l].context,d)}}return!0};F.prototype.on=function(e,t,r){return Qi(this,e,t,r,!1)};F.prototype.once=function(e,t,r){return Qi(this,e,t,r,!0)};F.prototype.removeListener=function(e,t,r,i){var n=B?B+e:e;if(!this._events[n])return this;if(!t)return tr(this,n),this;var a=this._events[n];if(a.fn)a.fn===t&&(!i||a.once)&&(!r||a.context===r)&&tr(this,n);else{for(var o=0,c=[],p=a.length;o<p;o++)(a[o].fn!==t||i&&!a[o].once||r&&a[o].context!==r)&&c.push(a[o]);c.length?this._events[n]=c.length===1?c[0]:c:tr(this,n)}return this};F.prototype.removeAllListeners=function(e){var t;return e?(t=B?B+e:e,this._events[t]&&tr(this,t)):(this._events=new ft,this._eventsCount=0),this};F.prototype.off=F.prototype.removeListener;F.prototype.addListener=F.prototype.on;F.prefixed=B;F.EventEmitter=F;typeof is<"u"&&(is.exports=F)});var Uc={};En(Uc,{ChannelMultiplexer:()=>Ke,DeferredChannelMultiplexer:()=>rr,DeferredDocConnector:()=>or,LoopbackStreamData:()=>nr,SessionDocumentImpl:()=>dr,TransportSession:()=>ar,createPresence:()=>yn,createWebsocketDocConnector:()=>vn,deriveYjsServerUrl:()=>_n,ensureNodeWebRTC:()=>ir,isNodeRuntime:()=>Ye,nodeMediasoupHandlerName:()=>sr,streamDataLabel:()=>mn,transportStreamData:()=>sn});module.exports=xn(Uc);var fn=pr(jr());var ns=pr(Ki(),1);var Ke=class{_handlers=new Map;_ws;_onMessage;_onOpen;_listeningForOpen=!1;_pendingSends=[];_disposed=!1;constructor(e){this._ws=e,this._onMessage=t=>{if(typeof t.data!="string")return;let r;try{r=JSON.parse(t.data)}catch{console.warn("[ChannelMultiplexer] Failed to parse WebSocket message as JSON");return}if(!r.channel)return;let i=this._handlers.get(r.channel);if(i)for(let n of i)n(r)},this._ws.addEventListener("message",this._onMessage),this._onOpen=()=>{this.flushPendingSends()}}on(e,t){let r=this._handlers.get(e);return r||(r=new Set,this._handlers.set(e,r)),r.add(t),()=>{r.delete(t),r.size===0&&this._handlers.delete(e)}}emit(e,t){if(this._disposed)return;let r=JSON.stringify({channel:e,...t});if(this._ws.readyState===WebSocket.OPEN){this._ws.send(r);return}this._ws.readyState===WebSocket.CONNECTING&&(this._pendingSends.push(r),this.listenForOpen())}dispose(){this._disposed=!0,this._pendingSends=[],this._handlers.clear(),this._ws.removeEventListener("message",this._onMessage),this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1}flushPendingSends(){if(this._disposed||this._ws.readyState!==WebSocket.OPEN)return;this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1;let e=this._pendingSends;this._pendingSends=[];for(let t of e)this._ws.send(t)}listenForOpen(){this._listeningForOpen||(this._listeningForOpen=!0,this._ws.addEventListener("open",this._onOpen))}},rr=class{_handlers=new Map;_pendingSends=[];_target=null;_targetUnsubscribes=[];_disposed=!1;setTarget(e){if(this._disposed)return;this.detachTarget(),this._target=e;for(let[r,i]of this._handlers)for(let n of i)this._targetUnsubscribes.push(e.on(r,n));let t=this._pendingSends;this._pendingSends=[];for(let r of t)e.emit(r.channel,r.data)}rewriteSessionChannels(e,t){if(e===t)return;let r=`session:${e}:`,i=`session:${t}:`,n=new Map;for(let[a,o]of this._handlers)n.set(a.startsWith(r)?i+a.slice(r.length):a,o);this._handlers=n,this._pendingSends=this._pendingSends.map(a=>({...a,channel:a.channel.startsWith(r)?i+a.channel.slice(r.length):a.channel}))}on(e,t){if(this._disposed)return()=>{};let r=this._handlers.get(e);r||(r=new Set,this._handlers.set(e,r)),r.add(t);let i=this._target?.on(e,t);return i&&this._targetUnsubscribes.push(i),()=>{r?.delete(t),r?.size===0&&this._handlers.delete(e),i?.(),i&&(this._targetUnsubscribes=this._targetUnsubscribes.filter(n=>n!==i))}}emit(e,t){if(!this._disposed){if(this._target){this._target.emit(e,t);return}this._pendingSends.push({channel:e,data:t})}}dispose(){this._disposed=!0,this._pendingSends=[],this._handlers.clear(),this.detachTarget()}detachTarget(){for(let e of this._targetUnsubscribes)e();this._targetUnsubscribes=[],this._target=null}};function Ye(){return typeof window>"u"&&typeof process<"u"&&process.versions!=null&&process.versions.node!=null}function sr(){return Ye()?"Chrome111":void 0}function ir(){if(!Ye())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 Yi="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";function Cc(s){let e=globalThis.crypto,t=new Uint8Array(s);if(e?.getRandomValues)return e.getRandomValues(t),t;for(let r=0;r<s;r++)t[r]=Math.floor(Math.random()*256);return t}function Ji(s=16){let e=Cc(s),t="";for(let r=0;r<s;r++)t+=Yi[e[r]%Yi.length];return t}function Xi(s){return`stream:${s}`}var Zi="urun-stream-v1";var as=1,le={BINARY:0,TEXT:1,JSON:2,END:3},en=Symbol("urun:stream:end");function tn(s){if(s===en)return Uint8Array.from([as,le.END]);let e,t;s instanceof Uint8Array?(e=le.BINARY,t=s):s instanceof ArrayBuffer?(e=le.BINARY,t=new Uint8Array(s)):typeof s=="string"?(e=le.TEXT,t=new TextEncoder().encode(s)):(e=le.JSON,t=new TextEncoder().encode(JSON.stringify(s)));let r=new Uint8Array(2+t.length);return r[0]=as,r[1]=e,r.set(t,2),r}function rn(s){let e=s instanceof Uint8Array?s:new Uint8Array(s);if(e.length<2||e[0]!==as)throw new Error(`[urun] bad stream envelope (version=${e[0]}, len=${e.length})`);let t=e[1],r=e.subarray(2);switch(t){case le.BINARY:return r.slice();case le.TEXT:return new TextDecoder().decode(r);case le.JSON:return JSON.parse(new TextDecoder().decode(r));case le.END:return en;default:throw new Error(`[urun] unknown stream envelope KIND 0x${t.toString(16)}`)}}var nr=class{consumerId;_handlers=new Map;constructor(e="loopback"){this.consumerId=e}onData(e,t){let r=this._handlers.get(e);return r||(r=new Set,this._handlers.set(e,r)),r.add(t),()=>r.delete(t)}sendData(e,t,r={}){r.to&&(r.to,this.consumerId);for(let i of this._handlers.get(e)??[])i(t);return Promise.resolve()}};function sn(s){return{get consumerId(){return s.consumerId},onData(e,t){return s.onStreamData(e,t)},sendData(e,t,r){return s.sendStreamData(e,t,r)}}}var nn=[1e3,2e3,4e3,8e3,3e4],an=5,Rc=15e3,on=15e3,cn=15e3,Tc=2e3,Ec=6e3,xc=2,kc=750,Pc=3,dn=[1e3,2e3,4e3],Dc=15e3;function mn(s){return`stream:${s}`}var Ic={queued:"queued",pending:"provisioning",allocating:"provisioning",provisioning:"provisioning",allocated:"connecting",connecting:"connecting",live:"live",running:"live",failed:"error",rejected:"error",expired:"error",cancelled:"ended",canceled:"ended",closed:"ended"},pn=3,ln=4e3,un=[{urls:"stun:stun.l.google.com:19302"},{urls:"stun:stun1.l.google.com:19302"}],ar=class{_state="disconnected";_sessionId=null;_tracks=new Map;_tracksByName=new Map;_options;_emitter=new ns.default;_ws=null;_device=null;_recvTransport=null;_sendTransport=null;_consumers=new Map;_audioProducer=null;_videoProducer=null;_pendingProduce=null;_multiplexer=null;_reconnectAttempts=0;_intentionalDisconnect=!1;_reconnectTimer=null;_cancelPendingDial=null;_stableResetTimer=null;_generation=0;_lastStartOptions;_resolveConnection=null;_recvIceRestartAttempts=0;_recvIceRestartTimer=null;_sendIceRestartAttempts=0;_sendIceRestartTimer=null;_phase={name:"idle"};_requestId;_liveReached=!1;_lastServerStatus;_forceResolveOnNextConnect=!1;_connectStartedAt;_mediaMonitorTimer=null;_lastInboundTotal=0;_mediaEverFlowed=!1;_lastInboundAdvanceAt=0;_mediaDeathHandled=!1;_decodeSignalSeen=!1;_lastFramesDecoded=0;_lastDecodeAdvanceAt=0;_decodeDeathHandled=!1;_currentEpoch=0;_consumerId=null;_pendingStreamSubscribes=new Set;_streamDataHandlers=new Map;_dataProducers=new Map;_dataProducerPromises=new Map;_dataConsumers=new Map;_pendingDataProduce=new Map;_sendTransportWaiters=[];get consumerId(){return this._consumerId===null&&(this._consumerId=Lc()),this._consumerId}get state(){return this._state}get currentIncarnation(){return this._currentEpoch}get phase(){return this._phase}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._phase.queue&&(e.queue=this._phase.queue),this._phase.runtime&&(e.runtime=this._phase.runtime),this._phase.error&&(e.error=this._phase.error),e}get sessionId(){return this._sessionId}get tracks(){return this._tracks}get multiplexer(){return this._multiplexer}get isOpen(){return this._ws?.readyState===WebSocket.OPEN}getTrackByName(e){let t=this._tracksByName.get(e);if(t&&t.readyState!=="ended")return t;for(let r of this._tracks.values())if(r.kind===e&&r.readyState!=="ended")return r;return t}setAuth(e){this._options={...this._options,...e},this.isOpen&&this._send({type:"auth",orgId:this._options.orgId,jwt:this._options.jwt,authProvider:this._options.authProvider})}constructor(e){this._options=e??{url:""},e?.sessionId&&(this._sessionId=e.sessionId)}setConnection(e){if(this.isOpen)throw new Error("TransportSession: cannot change connection while connected");this._options={...this._options,...e},e.sessionId&&(this._sessionId=e.sessionId)}setConnectionResolver(e){this._resolveConnection=e}applyControlDocState(e){let t=e&&typeof e=="object"?e.session:void 0,r=Oc(t);r!==void 0&&this.setIncarnation(r)}setIncarnation(e){if(!Number.isFinite(e)||e<=this._currentEpoch)return;let t=this._currentEpoch>0,r=this._state==="connected";this._currentEpoch=e,t&&r&&!this._intentionalDisconnect&&this._renegotiate()}isStaleIncarnation(e){return Number.isFinite(e)?e<this._currentEpoch:!1}isStaleClosedMarker(e){if(!e)return!1;let t=typeof e.status=="string"?e.status:void 0;if(t!=="closed"&&t!=="ended")return!1;let r=e.status_epoch??e.statusEpoch,i=typeof r=="number"?r:Number(r);return Number.isFinite(i)?i<this._currentEpoch:!1}async connect(e){this._lastStartOptions=e,this._intentionalDisconnect=!1,this._connectStartedAt??=Date.now(),this._cancelPendingDial?.(new Error("TransportSession: connect superseded by a newer connect()"));let t=++this._generation,r=this._state==="reconnecting"||this._state==="renegotiating";r||this._setState("connecting");let i=null,n=()=>t!==this._generation||this._intentionalDisconnect,a=()=>{if(n())throw new Error("TransportSession: connect cancelled")},o=async()=>{for(let l of this._connectUrls()){a();try{return await this._connectOnce(l,t,e),!0}catch(u){i=u instanceof Error?u:new Error(String(u)),n()||this._cleanupSocket()}}return!1},c=this._forceResolveOnNextConnect&&this._resolveConnection!==null;this._forceResolveOnNextConnect=!1;let p=c?0:this._resolveConnection?xc:1;for(let l=0;l<p;l++)if(l>0&&(await hn(kc),a()),await o())return;if(this._resolveConnection)for(let l=0;l<Pc;l++){this._setState("reconnecting"),await hn(dn[Math.min(l,dn.length-1)]),a();try{let u=await this._resolveConnection();a(),this.setAuth({jwt:u.jwt??this._options.jwt,authProvider:this._options.authProvider,orgId:this._options.orgId}),this.setConnection({url:u.url,sessionId:u.sessionId,iceServers:u.iceServers??this._options.iceServers})}catch(u){if(n())throw new Error("TransportSession: connect cancelled");i=u instanceof Error?u:new Error(String(u));continue}if(await o())return}if(n())throw i??new Error("TransportSession: connect cancelled");this._setState("failed");let d=i??new Error("TransportSession: connect failed");throw r||this._emitError(d),d}disconnect(){if(this._generation+=1,this._intentionalDisconnect=!0,this._cancelPendingDial?.(new Error("TransportSession: connect cancelled by disconnect()")),this._stopMediaMonitor(),this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null),this._clearReconnectBudgetReset(),this._reconnectAttempts=0,this._audioProducer){this._send({type:"stopAudio"});try{this._audioProducer.close()}catch{}this._audioProducer=null}if(this._videoProducer){this._send({type:"stopVideo"});try{this._videoProducer.close()}catch{}this._videoProducer=null}for(let e of this._consumers.values())try{e.close()}catch{}if(this._consumers.clear(),this._cleanupDataChannels(),this._settleSendTransportWaiters(null,new Error("[urun] sendStreamData: transport disconnected before the send transport arrived")),this._sendTransport){try{this._sendTransport.close()}catch{}this._sendTransport=null}if(this._recvTransport){try{this._recvTransport.close()}catch{}this._recvTransport=null}if(this._pendingProduce&&(clearTimeout(this._pendingProduce.timeoutId),this._pendingProduce.reject(new Error("TransportSession: disconnected")),this._pendingProduce=null),this._device=null,this._multiplexer&&(this._multiplexer.dispose(),this._multiplexer=null),this._ws){let e=this._ws;this._ws=null;try{e.close(1e3,"intentional disconnect")}catch{}}this._tracks.clear(),this._tracksByName.clear(),this._setState("disconnected"),this._liveReached=!1,this._setPhase("ended"),this._emitter.emit("disconnected")}on(e,t){return this._emitter.on(e,t),()=>{this._emitter.off(e,t)}}sendInput(e,t){this._send({type:"input",data:e,sequence:t})}onStreamData(e,t){let r=this._streamDataHandlers.get(e);return r||(r=new Set,this._streamDataHandlers.set(e,r)),r.add(t),()=>{let i=this._streamDataHandlers.get(e);i?.delete(t),i&&i.size===0&&this._streamDataHandlers.delete(e)}}sendStreamData(e,t,r){return this._ensureDataProducer(e).then(i=>{i.send(tn(t))})}_awaitSendTransport(){return this._sendTransport?Promise.resolve(this._sendTransport):new Promise((e,t)=>{let r={resolve:n=>{clearTimeout(i),e(n)},reject:n=>{clearTimeout(i),t(n)}},i=setTimeout(()=>{let n=this._sendTransportWaiters.indexOf(r);n>=0&&this._sendTransportWaiters.splice(n,1),t(new Error(`[urun] sendStreamData: no send transport after ${on}ms (the server never offered createSendTransport \u2014 data-up produce is impossible on this leg)`))},on);this._sendTransportWaiters.push(r)})}_settleSendTransportWaiters(e,t){let r=this._sendTransportWaiters;this._sendTransportWaiters=[];for(let i of r)e?i.resolve(e):i.reject(t??new Error("TransportSession: disconnected"))}_ensureDataProducer(e){let t=this._dataProducers.get(e);if(t&&!t.closed)return Promise.resolve(t);let r=this._dataProducerPromises.get(e);if(r)return r;let i=this._awaitSendTransport().then(n=>n.produceData({label:Xi(e),protocol:Zi,ordered:!0})).then(n=>this._awaitDataChannelOpen(n)).then(n=>(this._dataProducers.set(e,n),this._dataProducerPromises.delete(e),n)).catch(n=>{throw this._dataProducerPromises.delete(e),n});return this._dataProducerPromises.set(e,i),i}_awaitDataChannelOpen(e){if(e.closed)return Promise.reject(new Error("[urun] sendStreamData: DataProducer closed before its DataChannel opened"));let t=e.readyState;return t==="open"?Promise.resolve(e):t==="closing"||t==="closed"?Promise.reject(new Error(`[urun] sendStreamData: DataChannel is ${t} \u2014 cannot deliver data-up payloads`)):new Promise((r,i)=>{let n=()=>{p(),r(e)},a=l=>{d(new Error(`[urun] sendStreamData: DataChannel error before open: ${l.message}`))},o=()=>{p(),i(new Error("[urun] sendStreamData: DataProducer closed before its DataChannel opened"))},c=setTimeout(()=>{d(new Error(`[urun] sendStreamData: DataChannel not open after ${cn}ms (the SCTP handshake never completed \u2014 data-up produce is impossible on this channel)`))},cn),p=()=>{clearTimeout(c),e.off("open",n),e.off("error",a),e.observer.off("close",o)},d=l=>{p();try{e.close()}catch{}i(l)};e.on("open",n),e.on("error",a),e.observer.on("close",o)})}_dispatchStreamData(e,t){for(let r of this._streamDataHandlers.get(e)??[])r(t)}_streamNameFromLabel(e){if(e)return e.startsWith("stream:")?e.slice(7):void 0}async addTrack(e,t){if(!this._sendTransport)throw new Error("TransportSession: send transport not ready");this._audioProducer=await this._sendTransport.produce({track:e,codecOptions:{opusStereo:!1,opusDtx:!1,opusFec:!1},...t?{appData:{name:t}}:{}})}removeTrack(){this._audioProducer&&(this._send({type:"stopAudio"}),this._audioProducer.close(),this._audioProducer=null)}async addVideoTrack(e,t){let r=this._videoProducer;if(r&&!r.closed){await r.replaceTrack({track:e});return}if(!this._sendTransport)throw new Error("TransportSession: send transport not ready");this._videoProducer=await this._sendTransport.produce({track:e,...t?{appData:{name:t}}:{}})}stopVideo(){this._videoProducer&&(this._send({type:"stopVideo"}),this._videoProducer.close(),this._videoProducer=null)}requestDiagnostics(){this._send({type:"diagnostics"})}seekStream(e,t){this._send({type:"stream.seek",stream:e,target:t})}subscribeStream(e){this._pendingStreamSubscribes.add(e),this._sendStreamSubscribe(e)}unsubscribeStream(e){this._pendingStreamSubscribes.delete(e),this._send({t:"stream.unsubscribe",name:e,consumerId:this.consumerId})}_sendStreamSubscribe(e){this._send({t:"stream.subscribe",name:e,consumerId:this.consumerId})}_flushStreamSubscribes(){for(let e of this._pendingStreamSubscribes)this._sendStreamSubscribe(e)}async _handleMessage(e){switch(e.type){case"routerRtpCapabilities":await this._onRouterCapabilities(e.rtpCapabilities);break;case"createWebRtcTransport":await this._onCreateRecvTransport(e);break;case"createSendTransport":await this._onCreateSendTransport(e);break;case"consume":await this._onConsume(e);break;case"consumerClosed":this._closeConsumer(e.consumerId);break;case"producerClosed":this._closeConsumersByProducer(e.producerId);break;case"consumerPaused":this._consumers.get(e.consumerId)?.pause();break;case"consumerResumed":this._consumers.get(e.consumerId)?.resume();break;case"iceRestarted":this._onIceRestarted(e);break;case"produced":if(this._pendingProduce){let t=this._pendingProduce;this._pendingProduce=null,clearTimeout(t.timeoutId),t.resolve(e.id)}break;case"dataProduced":{let t=e.label,r=t?this._pendingDataProduce.get(t):void 0;r&&t&&(this._pendingDataProduce.delete(t),r.resolve(e.id));break}case"consumeData":await this._onConsumeData(e);break;case"started":this._emitter.emit("started");break;case"status":this._onStatus(e);break;case"stream.seeked":this._onStreamSeeked(e);break;case"error":this._onServerError(e);break}}_onServerError(e){let t=typeof e.message=="string"?e.message:"signaling error",r=typeof e.code=="string"?e.code:void 0;if(/connect\(\) already called/i.test(t)){if(this._resolveConnection){this._generation++;let i=this._ws;this._ws=null;try{i?.close()}catch{}this._cleanupMedia(),this._forceResolveOnNextConnect=!0,this._renegotiate();return}this._setPhase("error",{error:{reason:t,code:"transport-consumed",kind:"transport-failed"}}),this._emitter.emit("error",new Error(t));return}if(r==="TRANSPORT_BIND_FAILED"){this._emitError(new Error(t),r);return}console.warn("[urun] signaling error from server:",t)}_onStreamSeeked(e){let t=typeof e.stream=="string"?e.stream:void 0;if(!t)return;let r=e.target,i=r==="live"?"live":typeof r=="number"?r:Number(r);this._emitter.emit("seeked",t,i)}_onStatus(e){let t=e.request_id??e.requestId;if(t&&(this._requestId=t),this._liveReached)return;let r=typeof e.status=="string"?e.status:void 0;r!==void 0&&(this._lastServerStatus=r);let i=(r&&Ic[r])??"provisioning",n=e.queue_position??e.queuePosition,a=e.queue_depth??e.queueDepth,o=typeof n=="number"&&typeof a=="number";if(i==="error"){this._setPhase("error",{error:{reason:r??"admission failed",code:r,kind:r==="expired"?"never-live":"create-failed"}});return}if(i==="ended"){this._setPhase("ended");return}if(i==="queued"){this._setPhase("queued",o?{queue:{position:n,depth:a}}:void 0);return}if(i==="connecting"){this._setPhase("connecting");return}this._setPhase("provisioning")}async _onRouterCapabilities(e){Ye()&&await ir();let t=sr(),r=new fn.Device(t?{handlerName:t}:void 0);await r.load({routerRtpCapabilities:e}),this._device=r,this._send({type:"rtpCapabilities",rtpCapabilities:r.rtpCapabilities})}async _onCreateRecvTransport(e){this._device&&this._buildRecvTransport(e)}_buildRecvTransport(e){if(!this._device)return;let t=e.iceCandidates,r=this._device.createRecvTransport({id:e.id,iceParameters:e.iceParameters,iceCandidates:t,dtlsParameters:e.dtlsParameters,...e.sctpParameters?{sctpParameters:e.sctpParameters}:{},iceServers:this._options.iceServers??un});this._recvIceRestartAttempts=0,this._clearRecvIceRestart();let i=this._generation;r.on("connect",({dtlsParameters:n},a,o)=>{try{this._send({type:"connectTransport",transportId:r.id,dtlsParameters:n}),a()}catch(c){o(c)}}),r.on("connectionstatechange",n=>{if(i===this._generation){if(n==="connected"){this._clearRecvIceRestart(),this._recvIceRestartAttempts=0;return}if(!(this._intentionalDisconnect&&n==="closed")&&(n==="failed"||n==="disconnected")){if(this._tryRestartRecvIce())return;n==="failed"&&this._emitError(new Error(`media transport ${n}`),n)}}}),this._recvTransport=r}_tryRestartRecvIce(){let e=this._recvTransport;return!e||e.closed?!1:this._recvIceRestartTimer?!0:this._recvIceRestartAttempts>=pn?!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>=pn?!1:(this._sendIceRestartAttempts++,this._armSendIceRestartWatchdog(),this._requestIceRestart(e.id),!0)}_requestIceRestart(e){this._send({type:"restartIce",transportId:e})}_onIceRestarted(e){let t=e.transportId??e.id,r=e.iceParameters;if(!r)return;let i=!!this._recvTransport&&this._recvTransport.id===t,n=!i&&!!this._sendTransport&&this._sendTransport.id===t,a=i?this._recvTransport:n?this._sendTransport:null;a&&(Promise.resolve(a.restartIce({iceParameters:r})).catch(o=>{this._emitter.emit("error",o instanceof Error?o:new Error(String(o)))}),i&&this._recvIceRestartTimer?this._armRecvIceRestartWatchdog():n&&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")},ln)}_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")},ln)}_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??un});this._sendIceRestartAttempts=0,this._clearSendIceRestart();let r=this._generation;t.on("connect",({dtlsParameters:i},n,a)=>{try{this._send({type:"connectSendTransport",transportId:t.id,dtlsParameters:i}),n()}catch(o){a(o)}}),t.on("produce",({kind:i,rtpParameters:n,appData:a},o,c)=>{if(this._pendingProduce){c(new Error("produce already pending"));return}let p=setTimeout(()=>{let l=this._pendingProduce;!l||l.timeoutId!==p||(this._pendingProduce=null,l.reject(new Error("Produce timed out")))},15e3);this._pendingProduce={timeoutId:p,resolve:l=>{o({id:l})},reject:c};let d=a&&typeof a.name=="string"?a.name:void 0;try{this._send(d?{type:"produce",kind:i,name:d,rtpParameters:n}:{type:"produce",kind:i,rtpParameters:n})}catch(l){this._pendingProduce?.timeoutId===p&&(this._pendingProduce=null,clearTimeout(p)),c(l)}}),t.on("producedata",({sctpStreamParameters:i,label:n,protocol:a},o,c)=>{try{n&&this._pendingDataProduce.set(n,{resolve:p=>o({id:p}),reject:c}),this._send({type:"produceData",sctpStreamParameters:i,label:n,protocol:a})}catch(p){n&&this._pendingDataProduce.delete(n),c(p)}}),t.on("connectionstatechange",i=>{if(r===this._generation){if(i==="connected"){this._clearSendIceRestart(),this._sendIceRestartAttempts=0;return}this._intentionalDisconnect&&i==="closed"||(i==="failed"||i==="disconnected")&&this._trySendIceRestart()||(i==="failed"||i==="closed")&&this._emitError(new Error(`media send transport ${i}`),i)}}),this._sendTransport=t,this._settleSendTransportWaiters(t),this._emitter.emit("audioTransportReady")}async _onConsumeData(e){if(!this._recvTransport)return;let t=e.label,r=this._streamNameFromLabel(t);if(!r)return;let i=await this._recvTransport.consumeData({id:e.id,dataProducerId:e.dataProducerId,sctpStreamParameters:e.sctpStreamParameters,label:t,protocol:e.protocol});this._dataConsumers.set(r,i),this._send({type:"dataConsumerReady",id:e.id}),i.on("message",n=>{try{let a=typeof n=="string"?new TextEncoder().encode(n):new Uint8Array(n);this._dispatchStreamData(r,rn(a))}catch(a){this._emitter.emit("error",a instanceof Error?a:new Error(String(a)))}})}async _onConsume(e){if(!this._recvTransport)return;let t=this._generation,r=await this._recvTransport.consume({id:e.id,producerId:e.producerId,kind:e.kind,rtpParameters:e.rtpParameters});this._consumers.set(r.id,r),this._tracks.set(r.track.id,r.track);let i=e.streamName??e.label;i&&this._tracksByName.set(i,r.track),this._liveReached||this._setPhase("live"),this._emitter.emit("track",r.track);let n=r.id;r.track.addEventListener("ended",()=>{t!==this._generation||this._intentionalDisconnect||this._closeConsumer(n)},{once:!0}),this._send({type:"resumeConsumer",consumerId:r.id}),this._startMediaMonitor()}_closeConsumer(e){let t=this._consumers.get(e);if(!t)return;this._consumers.delete(e);let r=t.track;try{t.close()}catch{}if(r){this._tracks.delete(r.id);for(let[i,n]of this._tracksByName)n===r&&this._tracksByName.delete(i)}}_closeConsumersByProducer(e){for(let[t,r]of this._consumers)r.producerId===e&&this._closeConsumer(t)}_mediaPollMs(){let e=this._options.mediaLiveness?.pollMs;return e===void 0?Tc:e}_mediaStallTimeoutMs(){let e=this._options.mediaLiveness?.stallTimeoutMs;return e===void 0?Ec:e}_startMediaMonitor(){let e=this._mediaPollMs();if(e<=0||this._mediaMonitorTimer)return;this._lastInboundTotal=0,this._mediaEverFlowed=!1,this._lastInboundAdvanceAt=Date.now(),this._mediaDeathHandled=!1,this._decodeSignalSeen=!1,this._lastFramesDecoded=0,this._lastDecodeAdvanceAt=0,this._decodeDeathHandled=!1;let t=this._generation;this._mediaMonitorTimer=setInterval(()=>{t!==this._generation||this._intentionalDisconnect||this._sampleMediaLiveness(t)},e)}_stopMediaMonitor(){this._mediaMonitorTimer&&(clearInterval(this._mediaMonitorTimer),this._mediaMonitorTimer=null)}async _sampleMediaLiveness(e){if(this._consumers.size===0)return;let t=0,r=null;for(let n of this._consumers.values()){let a=await Mc(n);t+=a.total,a.framesDecoded!==null&&(r=(r??0)+a.framesDecoded)}if(e!==this._generation||this._intentionalDisconnect)return;let i=Date.now();if(t>this._lastInboundTotal){this._lastInboundTotal=t,this._lastInboundAdvanceAt=i,t>0&&(this._mediaEverFlowed=!0),this._checkDecodeLiveness(r,i);return}this._mediaEverFlowed&&(this._mediaDeathHandled||i-this._lastInboundAdvanceAt>=this._mediaStallTimeoutMs()&&(this._mediaDeathHandled=!0,this._renegotiate()))}_checkDecodeLiveness(e,t){if(e!==null){if(!this._decodeSignalSeen){this._decodeSignalSeen=!0,this._lastFramesDecoded=e,this._lastDecodeAdvanceAt=t;return}if(e>this._lastFramesDecoded){this._lastFramesDecoded=e,this._lastDecodeAdvanceAt=t;return}this._decodeDeathHandled||t-this._lastDecodeAdvanceAt>=this._mediaStallTimeoutMs()&&(this._decodeDeathHandled=!0,this._renegotiate())}}_renegotiate(){this._intentionalDisconnect||this._reconnectTimer||(this._stopMediaMonitor(),this._setState("renegotiating"),this._attemptReconnect())}_attemptReconnect(e){if(this._intentionalDisconnect||this._reconnectTimer)return;if(this._reconnectAttempts>=an){this._setState("failed"),this._emitError(new Error(`Failed after ${an} attempts`));return}let t=nn[Math.min(this._reconnectAttempts,nn.length-1)];this._reconnectAttempts++,this._state!=="renegotiating"&&this._setState("reconnecting"),this._reconnectTimer=setTimeout(async()=>{this._reconnectTimer=null,this._cleanupMedia();try{await this.connect(e??this._lastStartOptions)}catch(r){if(r instanceof Error&&r.message==="TransportSession: connect cancelled")return;this._attemptReconnect(e)}},t)}_connectUrls(){let e=[],t=r=>{if(!r)return;let i=/\/ws\/rtc\/[^/?#]+/.test(r),n=this._sessionId&&!i?`${r}${r.includes("?")?"&":"?"}sessionId=${encodeURIComponent(this._sessionId)}`:r;e.includes(n)||e.push(n)};t(this._options.url);for(let r of this._options.fallbackUrls??[])t(r);return e}_connectOnce(e,t,r){return new Promise((i,n)=>{let a=!1,o=!1,c=null,p=new WebSocket(e);this._ws=p;let d=()=>this._ws!==p||t!==this._generation,l=f=>{o||(o=!0,c&&clearTimeout(c),this._cancelPendingDial===u&&(this._cancelPendingDial=null),n(f))},u=f=>{try{p.close()}catch{}l(f)};this._cancelPendingDial=u,c=setTimeout(()=>{try{p.close()}catch{}l(new Error("TransportSession: connect timed out"))},Rc),p.onopen=()=>{if(!o){if(d()){try{p.close()}catch{}l(new Error("TransportSession: connect superseded during dial"));return}a=!0,c&&clearTimeout(c),this._multiplexer=new Ke(p),p.send(JSON.stringify(this._startMessage(r))),this._flushStreamSubscribes(),this._scheduleReconnectBudgetReset(),this._setState("connected"),this._liveReached||this._setPhase("connecting"),this._emitter.emit("connected"),o=!0,this._cancelPendingDial===u&&(this._cancelPendingDial=null),i()}},p.onerror=()=>{a||l(new Error("WebSocket connection error"))},p.onclose=()=>{if(!a){l(new Error("WebSocket closed before connecting"));return}d()||(this._clearReconnectBudgetReset(),c&&clearTimeout(c),this._setState("disconnected"),this._intentionalDisconnect||(this._emitter.emit("disconnected"),this._attemptReconnect(r)))},p.onmessage=f=>{if(!(this._ws!==p||t!==this._generation)&&typeof f.data=="string")try{this._handleMessage(JSON.parse(f.data))}catch(m){this._emitter.emit("error",m instanceof Error?m:new Error(String(m)))}}})}_startMessage(e){let t={type:"start",video:e?.video??{width:854,height:480,frameRate:16}};return e?.prompt&&(t.prompt=e.prompt),e?.cameraControl&&(t.camera_control=e.cameraControl),e?.args&&(t.args=e.args),e?.app&&(t.app=e.app),e?.functionName&&(t.function=e.functionName),e?.role&&(t.role=e.role),this._options.orgId&&(t.orgId=this._options.orgId),this._options.jwt&&(t.jwt=this._options.jwt),this._options.authProvider&&(t.authProvider=this._options.authProvider),t}_cleanupSocket(){if(this._clearReconnectBudgetReset(),!this._ws)return;let e=this._ws;this._ws=null;try{e.close()}catch{}}_scheduleReconnectBudgetReset(){this._clearReconnectBudgetReset(),this._reconnectAttempts!==0&&(this._stableResetTimer=setTimeout(()=>{this._stableResetTimer=null,this._reconnectAttempts=0},Dc))}_clearReconnectBudgetReset(){this._stableResetTimer&&(clearTimeout(this._stableResetTimer),this._stableResetTimer=null)}_cleanupDataChannels(){for(let e of this._dataProducers.values())try{e.close()}catch{}this._dataProducers.clear(),this._dataProducerPromises.clear();for(let e of this._dataConsumers.values())try{e.close()}catch{}this._dataConsumers.clear();for(let e of this._pendingDataProduce.values())try{e.reject(new Error("TransportSession: disconnected"))}catch{}this._pendingDataProduce.clear()}_cleanupMedia(){this._stopMediaMonitor();for(let e of this._consumers.values())try{e.close()}catch{}if(this._consumers.clear(),this._cleanupDataChannels(),this._audioProducer){try{this._audioProducer.close()}catch{}this._audioProducer=null}if(this._clearRecvIceRestart(),this._clearSendIceRestart(),this._recvTransport){try{this._recvTransport.close()}catch{}this._recvTransport=null}if(this._sendTransport){try{this._sendTransport.close()}catch{}this._sendTransport=null}this._pendingProduce&&(clearTimeout(this._pendingProduce.timeoutId),this._pendingProduce=null),this._device=null,this._tracks.clear(),this._tracksByName.clear(),this._multiplexer&&(this._multiplexer.dispose(),this._multiplexer=null)}_send(e){!this._ws||this._ws.readyState!==WebSocket.OPEN||this._ws.send(JSON.stringify(e))}_setState(e){this._state!==e&&(this._state=e,this._emitter.emit("stateChange",e))}_setPhase(e,t){e==="live"&&(this._liveReached=!0);let r={name:e};t?.queue&&(r.queue=t.queue),t?.runtime&&(r.runtime=t.runtime),this._requestId&&(r.requestId=this._requestId),this._sessionId&&(r.sessionId=this._sessionId),t?.error&&(r.error=t.error),this._phase=r,this._emitter.emit("phase",r)}reportAdmission(e){if(e.requestId&&(this._requestId=e.requestId),this._lastServerStatus=e.status,this._liveReached||this._phase.name==="ended"||this._phase.name==="error")return;let{runtime:t,queue:r}=e;if(t?.state==="unavailable"){this._setPhase("unavailable",{runtime:t});return}if(t?.state==="starting"){this._setPhase("provisioning",{runtime:t});return}if(t?.state==="busy"||e.status==="queued"){this._setPhase("queued",{queue:r,runtime:t});return}this._setPhase("provisioning")}_emitError(e,t){this._setPhase("error",{error:{reason:e.message,code:t,kind:"transport-failed"}}),this._emitter.emit("error",e)}reportAllocationFailure(e,t){this._setPhase("error",{error:{reason:e.message,code:"allocation-failed",kind:"create-failed",httpStatus:t}}),this._emitter.emit("error",e)}};function hn(s){return new Promise(e=>setTimeout(e,s))}function Lc(){return Ji()}async function Mc(s){if(typeof s.getStats!="function")return{total:0,framesDecoded:null};let e;try{e=await s.getStats()}catch{return{total:0,framesDecoded:null}}let t=0,r=null,i=n=>{if(!n||typeof n!="object")return;let a=n;if(a.type==="inbound-rtp"){let o=typeof a.bytesReceived=="number"?a.bytesReceived:0,c=typeof a.packetsReceived=="number"?a.packetsReceived:0;t+=o+c,typeof a.framesDecoded=="number"&&(r=(r??0)+a.framesDecoded)}};if(e instanceof Map)for(let n of e.values())i(n);else if(Array.isArray(e))for(let n of e)i(n);else e&&typeof e.forEach=="function"&&e.forEach(i);return{total:t,framesDecoded:r}}function Oc(s){if(!s||typeof s!="object")return;let e=s.epoch,t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:void 0}var gn=require("y-websocket"),cs=require("y-protocols/awareness");function _n(s){let e=new URL(s);return`${e.protocol}//${e.host}/doc`}function vn(s){let e=s.WebSocketPolyfill??globalThis.WebSocket;if(!e)throw new Error("[urun] no WebSocket implementation available for the yjs doc provider (browser global missing and no WebSocketPolyfill passed)");return(t,r,i)=>{let n=`${s.sessionId}/${t}`,a=new gn.WebsocketProvider(s.serverUrl,n,r,{awareness:i,params:s.token?{token:s.token}:{},WebSocketPolyfill:e,disableBc:!0});return{get awareness(){return a.awareness},get synced(){return a.synced},onSync(o){let c=p=>o(p);return a.on("sync",c),()=>a.off("sync",c)},destroy(){a.destroy()}}}}var os=class{constructor(e,t,r){this._name=e;this._doc=t;this.awareness=r}_name;_doc;awareness;_inner=null;_innerUnsub=null;_syncHandlers=new Set;_destroyed=!1;get synced(){return this._inner?.synced??!1}onSync(e){return this._syncHandlers.add(e),()=>this._syncHandlers.delete(e)}attach(e){if(!(this._destroyed||this._inner)&&(this._inner=e(this._name,this._doc,this.awareness),this._innerUnsub=this._inner.onSync(t=>{for(let r of[...this._syncHandlers])r(t)}),this._inner.synced))for(let t of[...this._syncHandlers])t(!0)}destroy(){this._destroyed=!0,this._innerUnsub?.(),this._innerUnsub=null,this._inner?.destroy(),this._inner=null,this._syncHandlers.clear()}},or=class{_target=null;_bridges=[];connect=(e,t,r)=>{let i=new os(e,t,r);return this._target?i.attach(this._target):this._bridges.push(i),i};get connected(){return this._target!==null}setTarget(e){if(this._target)return;this._target=e;let t=this._bridges.splice(0);for(let r of t)r.attach(e)}};var gt=pr(require("yjs"));function _t(s){if(s===null||typeof s!="object"||Array.isArray(s))return!1;let e=Object.getPrototypeOf(s);return e===Object.prototype||e===null}var cr="$bytes";function Ac(s){return s instanceof Uint8Array||s instanceof ArrayBuffer}function Nc(s){if(!_t(s))return!1;let e=Object.keys(s);return e.length===1&&e[0]===cr&&typeof s[cr]=="string"}function jc(s){return s instanceof ArrayBuffer?new Uint8Array(s):s}function Fc(s){if(typeof Buffer<"u")return Buffer.from(s).toString("base64");let e="";for(let t=0;t<s.length;t++)e+=String.fromCharCode(s[t]);return btoa(e)}function qc(s){if(typeof Buffer<"u")return new Uint8Array(Buffer.from(s,"base64"));let e=atob(s),t=new Uint8Array(e.length);for(let r=0;r<e.length;r++)t[r]=e.charCodeAt(r);return t}function ds(s){if(Ac(s))return{[cr]:Fc(jc(s))};if(Array.isArray(s))return s.map(ds);if(_t(s)){let e={};for(let[t,r]of Object.entries(s))e[t]=ds(r);return e}return s}function mt(s){if(Nc(s))return qc(s[cr]);if(Array.isArray(s))return s.map(mt);if(_t(s)){let e={};for(let[t,r]of Object.entries(s))e[t]=mt(r);return e}return s}var wn=Symbol("urun:doc:path-absent");function zc(s,e){let t=e.split("."),r=s;for(let i of t){if(r===null||typeof r!="object"||!(i in r))return wn;r=r[i]}return r}function $c(s,e){return s===e?!0:JSON.stringify(s)===JSON.stringify(e)}function ps(s,e){for(let[t,r]of Object.entries(e))if(_t(r)){let i=s.get(t);if(!(i instanceof gt.Map)){let n=i;i=new gt.Map,s.set(t,i),_t(n)&&ps(i,n)}ps(i,r)}else{if($c(s.get(t),r))continue;s.set(t,r)}}var Bc=Symbol("urun:doc:local"),dr=class{_doc=new gt.Doc;_root=this._doc.getMap("session");_awareness=new cs.Awareness(this._doc);_listeners=new Set;_key;_sessionId;_connection=null;_connUnsub=null;_synced;_syncWaiters=new Set;_texts=new Map;_observer=()=>this.notify();constructor(e,t,r){this._key=e,this._sessionId=t,this._root.observeDeep(this._observer),r?(this._connection=r(e,this._doc,this._awareness),this._synced=this._connection.synced,this._connUnsub=this._connection.onSync(i=>{i&&this._markSynced()}),this._synced&&this._markSynced()):this._synced=!0}get awareness(){return this._awareness}setSessionId(e){this._sessionId=e}get synced(){return this._synced}onSynced(e){return this._synced?(e(),()=>{}):(this._syncWaiters.add(e),()=>this._syncWaiters.delete(e))}set(e){e=ds(e),this.applyPatch(e)}get(e,t){let r=this.snapshot();if(!e)return mt(r);let i=zc(r,e);return i===wn?t:mt(i)}on(e,t){return this._listeners.add(t),()=>this._listeners.delete(t)}text(e){let t=this._texts.get(e);return t||(t=new ls(this._doc.getText(`text:${e}`)),this._texts.set(e,t)),t}dispose(){this._root.unobserveDeep(this._observer),this._connUnsub?.(),this._connUnsub=null,this._connection?.destroy(),this._connection=null,this._listeners.clear(),this._syncWaiters.clear();for(let e of this._texts.values())e.dispose();this._texts.clear(),this._awareness.destroy(),this._doc.destroy()}_markSynced(){let e=[...this._syncWaiters];this._synced=!0,this._syncWaiters.clear();for(let t of e)t()}applyPatch(e){this._doc.transact(()=>{ps(this._root,e)},Bc)}snapshot(){return this._root.toJSON()}notify(){let e=mt(this.snapshot());for(let t of this._listeners)t(e)}},ls=class{constructor(e){this._ytext=e;this._observer=t=>{for(let r of t.delta)if(typeof r.insert=="string"&&r.insert.length>0){let i=r.insert;for(let n of this._delta)n(i)}},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 yn(s){return{get clientId(){return s.clientID},set(e){s.setLocalState(e)},setField(e,t){s.setLocalStateField(e,t)},getLocal(){return s.getLocalState()??null},getStates(){return s.getStates()},on(e,t){let r=()=>t(s.getStates());return s.on("change",r),r(),()=>s.off("change",r)}}}
3
+ `}});var de=T(ie=>{"use strict";var be=oi(),to=di(),ro=Mt();ie.grammar=ro;ie.write=to;ie.parse=be.parse;ie.parseParams=be.parseParams;ie.parseFmtpConfig=be.parseFmtpConfig;ie.parsePayloads=be.parsePayloads;ie.parseRemoteCandidates=be.parseRemoteCandidates;ie.parseImageAttributes=be.parseImageAttributes;ie.parseSimulcastStreamList=be.parseSimulcastStreamList});var Se=T(Mr=>{"use strict";Object.defineProperty(Mr,"__esModule",{value:!0});Mr.parse=io;var so=new RegExp("^[LS]([1-9]\\d{0,1})T([1-9]\\d{0,1})");function io(s){let e=so.exec(s??"");return e?{spatialLayers:Number(e[1]),temporalLayers:Number(e[2])}:{spatialLayers:1,temporalLayers:1}}});var ui=T(fe=>{"use strict";Object.defineProperty(fe,"__esModule",{value:!0});fe.OfferMediaSection=fe.AnswerMediaSection=fe.MediaSection=void 0;var no=de(),pi=ve(),rt=class{_mediaObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r}){if(this._mediaObject={type:"",port:0,protocol:"",payloads:"",rtp:[],fmtp:[]},e&&this.setIceParameters(e),t){this._mediaObject.candidates=[];for(let i of t){let n={foundation:i.foundation,component:1,ip:i.address??i.ip,port:i.port,priority:i.priority,transport:i.protocol,type:i.type};i.tcpType&&(n.tcptype=i.tcpType),this._mediaObject.candidates.push(n)}this._mediaObject.endOfCandidates="end-of-candidates",this._mediaObject.iceOptions="renomination"}r&&this.setDtlsRole(r.role)}get mid(){return String(this._mediaObject.mid)}get closed(){return this._mediaObject.port===0}getObject(){return this._mediaObject}setIceParameters(e){this._mediaObject.iceUfrag=e.usernameFragment,this._mediaObject.icePwd=e.password}pause(){this._mediaObject.direction="inactive"}disable(){this.pause()}close(){this.disable(),this._mediaObject.port=0,delete this._mediaObject.candidates,delete this._mediaObject.endOfCandidates,delete this._mediaObject.iceUfrag,delete this._mediaObject.icePwd,delete this._mediaObject.iceOptions,this._mediaObject.rtp=[],this._mediaObject.fmtp=[],delete this._mediaObject.rtcp,delete this._mediaObject.rtcpFb,delete this._mediaObject.ssrcs,delete this._mediaObject.ssrcGroups,delete this._mediaObject.simulcast,delete this._mediaObject.simulcast_03,delete this._mediaObject.rids,delete this._mediaObject.extmapAllowMixed}};fe.MediaSection=rt;var Or=class extends rt{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:i,plainRtpParameters:n,offerMediaObject:a,offerRtpParameters:o,answerRtpParameters:c,codecOptions:d}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r}),this._mediaObject.mid=String(a.mid),this._mediaObject.type=a.type,this._mediaObject.protocol=a.protocol,n?(this._mediaObject.connection={ip:n.ip,version:n.ipVersion},this._mediaObject.port=n.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},this._mediaObject.port=7),a.type){case"audio":case"video":{this._mediaObject.direction="recvonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[];for(let p of c.codecs){let l={payload:p.payloadType,codec:li(p),rate:p.clockRate};p.channels>1&&(l.encoding=p.channels),this._mediaObject.rtp.push(l);let u=pi.clone(p.parameters)??{},f=pi.clone(p.rtcpFeedback)??[];if(d){let{opusStereo:h,opusFec:g,opusDtx:w,opusMaxPlaybackRate:E,opusMaxAverageBitrate:P,opusPtime:k,opusNack:x,videoGoogleStartBitrate:L,videoGoogleMaxBitrate:Te,videoGoogleMinBitrate:Je}=d,ue=o.codecs.find(ge=>ge.payloadType===p.payloadType);switch(p.mimeType.toLowerCase()){case"audio/opus":case"audio/multiopus":{h!==void 0&&(ue.parameters["sprop-stereo"]=h?1:0,u.stereo=h?1:0),g!==void 0&&(ue.parameters.useinbandfec=g?1:0,u.useinbandfec=g?1:0),w!==void 0&&(ue.parameters.usedtx=w?1:0,u.usedtx=w?1:0),E!==void 0&&(u.maxplaybackrate=E),P!==void 0&&(u.maxaveragebitrate=P),k!==void 0&&(ue.parameters.ptime=k,u.ptime=k),x||(ue.rtcpFeedback=ue.rtcpFeedback.filter(ge=>ge.type!=="nack"||ge.parameter),f=f.filter(ge=>ge.type!=="nack"||ge.parameter));break}case"video/vp8":case"video/vp9":case"video/h264":case"video/h265":case"video/av1":{L!==void 0&&(u["x-google-start-bitrate"]=L),Te!==void 0&&(u["x-google-max-bitrate"]=Te),Je!==void 0&&(u["x-google-min-bitrate"]=Je);break}}}let m={payload:p.payloadType,config:""};for(let h of Object.keys(u))m.config&&(m.config+=";"),m.config+=`${h}=${u[h]}`;m.config&&this._mediaObject.fmtp.push(m);for(let h of f)this._mediaObject.rtcpFb.push({payload:p.payloadType,type:h.type,subtype:h.parameter})}this._mediaObject.payloads=c.codecs.map(p=>p.payloadType).join(" "),this._mediaObject.ext=[];for(let p of c.headerExtensions)(a.ext??[]).some(u=>u.uri===p.uri)&&this._mediaObject.ext.push({uri:p.uri,value:p.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 p of a.rids??[])p.direction==="send"&&this._mediaObject.rids.push({id:p.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 p of a.rids??[])p.direction==="send"&&this._mediaObject.rids.push({id:p.id,direction:"recv"})}this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";break}case"application":{typeof a.sctpPort=="number"?(this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=i.port,this._mediaObject.maxMessageSize=i.maxMessageSize):a.sctpmap&&(this._mediaObject.payloads=String(i.port),this._mediaObject.sctpmap={app:"webrtc-datachannel",sctpmapNumber:i.port,maxMessageSize:i.maxMessageSize});break}}}setDtlsRole(e){switch(e){case"client":{this._mediaObject.setup="active";break}case"server":{this._mediaObject.setup="passive";break}case"auto":{this._mediaObject.setup="actpass";break}}}resume(){this._mediaObject.direction="recvonly"}muxSimulcastStreams(e){if(!this._mediaObject.simulcast?.list1)return;let t={};for(let n of e)n.rid&&(t[n.rid]=n);let r=this._mediaObject.simulcast.list1,i=no.parseSimulcastStreamList(r);for(let n of i)for(let a of n)a.paused=!t[a.scid]?.active;this._mediaObject.simulcast.list1=i.map(n=>n.map(a=>`${a.paused?"~":""}${a.scid}`).join(",")).join(";")}};fe.AnswerMediaSection=Or;var Ar=class extends rt{constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:i,plainRtpParameters:n,mid:a,kind:o,offerRtpParameters:c,streamId:d,trackId:p}){switch(super({iceParameters:e,iceCandidates:t,dtlsParameters:r}),this._mediaObject.mid=String(a),this._mediaObject.type=o,n?(this._mediaObject.connection={ip:n.ip,version:n.ipVersion},this._mediaObject.protocol="RTP/AVP",this._mediaObject.port=n.port):(this._mediaObject.connection={ip:"127.0.0.1",version:4},i?this._mediaObject.protocol="UDP/DTLS/SCTP":this._mediaObject.protocol="UDP/TLS/RTP/SAVPF",this._mediaObject.port=7),this._mediaObject.extmapAllowMixed="extmap-allow-mixed",o){case"audio":case"video":{this._mediaObject.direction="sendonly",this._mediaObject.rtp=[],this._mediaObject.rtcpFb=[],this._mediaObject.fmtp=[],this._mediaObject.msid=[{id:d,appdata:p}];for(let m of c.codecs){let h={payload:m.payloadType,codec:li(m),rate:m.clockRate};m.channels>1&&(h.encoding=m.channels),this._mediaObject.rtp.push(h);let g={payload:m.payloadType,config:""};for(let w of Object.keys(m.parameters??{}))g.config&&(g.config+=";"),g.config+=`${w}=${m.parameters[w]}`;g.config&&this._mediaObject.fmtp.push(g);for(let w of m.rtcpFeedback)this._mediaObject.rtcpFb.push({payload:m.payloadType,type:w.type,subtype:w.parameter})}this._mediaObject.payloads=c.codecs.map(m=>m.payloadType).join(" "),this._mediaObject.ext=[];for(let m of c.headerExtensions)this._mediaObject.ext.push({uri:m.uri,value:m.id});this._mediaObject.rtcpMux="rtcp-mux",this._mediaObject.rtcpRsize="rtcp-rsize";let l=c.encodings[0],u=l.ssrc,f=l.rtx?.ssrc;this._mediaObject.ssrcs=[],this._mediaObject.ssrcGroups=[],u&&c.rtcp.cname&&this._mediaObject.ssrcs.push({id:u,attribute:"cname",value:c.rtcp.cname}),f&&(c.rtcp.cname&&this._mediaObject.ssrcs.push({id:f,attribute:"cname",value:c.rtcp.cname}),u&&this._mediaObject.ssrcGroups.push({semantics:"FID",ssrcs:`${u} ${f}`}));break}case"application":{this._mediaObject.payloads="webrtc-datachannel",this._mediaObject.sctpPort=i.port,this._mediaObject.maxMessageSize=i.maxMessageSize;break}}}setDtlsRole(e){this._mediaObject.setup="actpass"}resume(){this._mediaObject.direction="sendonly"}};fe.OfferMediaSection=Ar;function li(s){let t=new RegExp("^(audio|video)/(.+)","i").exec(s.mimeType);if(!t)throw new TypeError("invalid codec.mimeType");return t[2]}});var Be=T(Nt=>{"use strict";Object.defineProperty(Nt,"__esModule",{value:!0});Nt.RemoteSdp=void 0;var ao=de(),oo=q(),Ot=ui(),co=jr(),po=["av1","h264"],At=new oo.Logger("RemoteSdp"),Nr=class{_iceParameters;_iceCandidates;_dtlsParameters;_sctpParameters;_plainRtpParameters;_mediaSections=[];_midToIndex=new Map;_firstMid;_sdpObject;constructor({iceParameters:e,iceCandidates:t,dtlsParameters:r,sctpParameters:i,plainRtpParameters:n}){if(this._iceParameters=e,this._iceCandidates=t,this._dtlsParameters=r,this._sctpParameters=i,this._plainRtpParameters=n,this._sdpObject={version:0,origin:{address:"0.0.0.0",ipVer:4,netType:"IN",sessionId:"10000",sessionVersion:0,username:`media-client-v${co.version}`},name:"-",timing:{start:0,stop:0},media:[]},this._sdpObject.iceOptions="ice2",e?.iceLite&&(this._sdpObject.icelite="ice-lite"),r){this._sdpObject.msidSemantic={semantic:"WMS",token:"*"};let a=this._dtlsParameters.fingerprints.length;this._sdpObject.fingerprint={type:r.fingerprints[a-1].algorithm,hash:r.fingerprints[a-1].value},this._sdpObject.groups=[{type:"BUNDLE",mids:""}]}n&&(this._sdpObject.origin.address=n.ip,this._sdpObject.origin.ipVer=n.ipVersion)}updateIceParameters(e){At.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){At.debug("updateDtlsRole() [role:%s]",e),this._dtlsParameters.role=e;for(let t of this._mediaSections)t.setDtlsRole(e)}setSessionExtmapAllowMixed(){At.debug("setSessionExtmapAllowMixed()"),this._sdpObject.extmapAllowMixed="extmap-allow-mixed"}getNextMediaSectionIdx(){for(let e=0;e<this._mediaSections.length;++e){let t=this._mediaSections[e];if(t.closed)return{idx:e,reuseMid:t.mid}}return{idx:this._mediaSections.length}}send({offerMediaObject:e,reuseMid:t,offerRtpParameters:r,answerRtpParameters:i,codecOptions:n}){let a=new Ot.AnswerMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,offerMediaObject:e,offerRtpParameters:r,answerRtpParameters:i,codecOptions:n}),o=a.getObject();o.rtp.find(d=>po.includes(d.codec.toLowerCase()))||(o.ext=o.ext?.filter(d=>d.uri!=="https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension")),t?this.replaceMediaSection(a,t):this._midToIndex.has(a.mid)?this.replaceMediaSection(a):this.addMediaSection(a)}receive({mid:e,kind:t,offerRtpParameters:r,streamId:i,trackId:n}){this.setSessionExtmapAllowMixed();let a=new Ot.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,plainRtpParameters:this._plainRtpParameters,mid:e,kind:t,offerRtpParameters:r,streamId:i,trackId:n}),o=this._mediaSections.find(c=>c.closed&&c.getObject().type===t);o?this.replaceMediaSection(a,o.mid):this.addMediaSection(a)}pauseMediaSection(e){this.findMediaSection(e).pause()}resumeSendingMediaSection(e){this.findMediaSection(e).resume()}resumeReceivingMediaSection(e){this.findMediaSection(e).resume()}disableMediaSection(e){this.findMediaSection(e).disable()}closeMediaSection(e){let t=this.findMediaSection(e);return e===this._firstMid?(At.debug("closeMediaSection() | cannot close first media section, disabling it instead [mid:%s]",e),this.disableMediaSection(e),!1):(t.close(),this.regenerateBundleMids(),!0)}muxMediaSectionSimulcast(e,t){let r=this.findMediaSection(e);r.muxSimulcastStreams(t),this.replaceMediaSection(r)}sendSctpAssociation({offerMediaObject:e}){let t=new Ot.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 Ot.OfferMediaSection({iceParameters:this._iceParameters,iceCandidates:this._iceCandidates,dtlsParameters:this._dtlsParameters,sctpParameters:this._sctpParameters,plainRtpParameters:this._plainRtpParameters,mid:"datachannel",kind:"application"});this.addMediaSection(e)}getSdp(){return this._sdpObject.origin.sessionVersion++,ao.write(this._sdpObject)}addMediaSection(e){this._firstMid||(this._firstMid=e.mid),this._mediaSections.push(e),this._midToIndex.set(e.mid,this._mediaSections.length-1),this._sdpObject.media.push(e.getObject()),this.regenerateBundleMids()}replaceMediaSection(e,t){if(typeof t=="string"){let r=this._midToIndex.get(t);if(r===void 0)throw new Error(`no media section found for reuseMid '${t}'`);let i=this._mediaSections[r];this._mediaSections[r]=e,this._midToIndex.delete(i.mid),this._midToIndex.set(e.mid,r),this._sdpObject.media[r]=e.getObject(),this.regenerateBundleMids()}else{let r=this._midToIndex.get(e.mid);if(r===void 0)throw new Error(`no media section found with mid '${e.mid}'`);this._mediaSections[r]=e,this._sdpObject.media[r]=e.getObject()}}findMediaSection(e){let t=this._midToIndex.get(e);if(t===void 0)throw new Error(`no media section found with mid '${e}'`);return this._mediaSections[t]}regenerateBundleMids(){this._dtlsParameters&&(this._sdpObject.groups[0].mids=this._mediaSections.filter(e=>!e.closed).map(e=>e.mid).join(" "))}};Nt.RemoteSdp=Nr});var Ue=T(Ce=>{"use strict";Object.defineProperty(Ce,"__esModule",{value:!0});Ce.extractRtpCapabilities=lo;Ce.extractDtlsParameters=uo;Ce.getCname=ho;Ce.applyCodecParameters=fo;Ce.addHeaderExtension=mo;var hi=de();function lo({sdpObject:s}){let e=new Map,t=new Map;for(let i of s.media){let n=i.type;switch(n){case"audio":case"video":break;default:continue}for(let a of i.rtp){let o={kind:n,mimeType:`${n}/${a.codec}`,preferredPayloadType:a.payload,clockRate:a.rate,channels:a.encoding,parameters:{},rtcpFeedback:[]};e.set(o.preferredPayloadType,o)}for(let a of i.fmtp??[]){let o=hi.parseParams(a.config),c=e.get(a.payload);c&&(o?.hasOwnProperty("profile-level-id")&&(o["profile-level-id"]=String(o["profile-level-id"])),c.parameters=o)}for(let a of i.rtcpFb??[]){let o={type:a.type,parameter:a.subtype};if(o.parameter||delete o.parameter,a.payload!=="*"){let c=e.get(Number(a.payload));if(!c)continue;c.rtcpFeedback.push(o)}else for(let c of e.values())c.kind===n&&!/.+\/rtx$/i.test(c.mimeType)&&c.rtcpFeedback.push(o)}for(let a of i.ext??[]){if(a["encrypt-uri"])continue;let o={kind:n,uri:a.uri,preferredId:a.value};t.set(o.preferredId,o)}}return{codecs:Array.from(e.values()),headerExtensions:Array.from(t.values())}}function uo({sdpObject:s}){let e=s.setup,t=s.fingerprint;if(!e||!t){let n=(s.media??[]).find(a=>a.port!==0);n&&(e=e??n.setup,t=t??n.fingerprint)}if(e){if(!t)throw new Error("no a=fingerprint found at SDP session or media level")}else throw new Error("no a=setup found at SDP session or media level");let r;switch(e){case"active":{r="client";break}case"passive":{r="server";break}case"actpass":{r="auto";break}}return{role:r,fingerprints:[{algorithm:t.type,value:t.hash}]}}function ho({offerMediaObject:s}){let e=(s.ssrcs??[]).find(t=>t.attribute==="cname");return e?e.value:""}function fo({offerRtpParameters:s,answerMediaObject:e}){for(let t of s.codecs){let r=t.mimeType.toLowerCase();if(r!=="audio/opus"||!(e.rtp??[]).find(o=>o.payload===t.payloadType))continue;e.fmtp=e.fmtp??[];let n=e.fmtp.find(o=>o.payload===t.payloadType);n||(n={payload:t.payloadType,config:""},e.fmtp.push(n));let a=hi.parseParams(n.config);if(r==="audio/opus"){let o=t.parameters?.["sprop-stereo"];o!==void 0&&(a.stereo=Number(o)?1:0)}n.config="";for(let o of Object.keys(a))n.config&&(n.config+=";"),n.config+=`${o}=${a[o]}`}}function mo({offerMediaObject:s,headerExtensionUri:e,headerExtensionId:t}){s.ext||(s.ext=[]),s.ext.push({uri:e,value:t})}});var We=T(jt=>{"use strict";Object.defineProperty(jt,"__esModule",{value:!0});jt.getRtpEncodings=go;jt.addLegacySimulcast=_o;function go({offerMediaObject:s,codecs:e}){let t=new Set;for(let n of s.ssrcs??[]){let a=n.id;a&&t.add(a)}if(t.size===0)throw new Error("no a=ssrc lines found");let r=new Map;for(let n of s.ssrcGroups??[]){if(n.semantics!=="FID")continue;let a=n.ssrcs.split(/\s+/),o=Number(a[0]),c=Number(a[1]);t.has(o)&&(t.delete(o),t.delete(c),r.set(o,c))}for(let n of t)r.set(n,void 0);let i=[];for(let[n,a]of r){let o={ssrc:n};a&&e.length>1&&(o.rtx={ssrc:a}),i.push(o)}return i}function _o({offerMediaObject:s,numStreams:e}){if(e<=1)throw new TypeError("numStreams must be greater than 1");let t=(s.ssrcs??[]).find(l=>l.attribute==="msid");if(!t)throw new Error("a=ssrc line with msid information not found");let[r,i]=t.value.split(" "),n=Number(t.id),a;(s.ssrcGroups??[]).some(l=>{if(l.semantics!=="FID")return!1;let u=l.ssrcs.split(/\s+/);return Number(u[0])===n?(a=Number(u[1]),!0):!1});let o=(s.ssrcs??[]).find(l=>l.attribute==="cname");if(!o)throw new Error("a=ssrc line with cname information not found");let c=o.value,d=[],p=[];for(let l=0;l<e;++l)d.push(n+l),a&&p.push(a+l);s.ssrcGroups=[],s.ssrcs=[],s.ssrcGroups.push({semantics:"SIM",ssrcs:d.join(" ")});for(let l of d)s.ssrcs.push({id:l,attribute:"cname",value:c}),s.ssrcs.push({id:l,attribute:"msid",value:`${r} ${i}`});for(let l=0;l<p.length;++l){let u=d[l],f=p[l];s.ssrcs.push({id:f,attribute:"cname",value:c}),s.ssrcs.push({id:f,attribute:"msid",value:`${r} ${i}`}),s.ssrcGroups.push({semantics:"FID",ssrcs:`${u} ${f}`})}}});var He=T(st=>{"use strict";Object.defineProperty(st,"__esModule",{value:!0});st.addNackSupportForOpus=vo;st.addHeaderExtensionSupport=wo;st.getMsidStreamIdAndTrackId=yo;function vo(s){for(let e of s.codecs??[])(e.mimeType.toLowerCase()==="audio/opus"||e.mimeType.toLowerCase()==="audio/multiopus")&&!e.rtcpFeedback?.some(t=>t.type==="nack"&&!t.parameter)&&(e.rtcpFeedback||(e.rtcpFeedback=[]),e.rtcpFeedback.push({type:"nack"}))}function wo(s,e){let t,r=s.headerExtensions?.find(n=>n.uri===e.uri);if(r){if(r.kind===e.kind)return;t=r.preferredId}if(s.headerExtensions||(s.headerExtensions=[]),t===void 0){t=1;let n=new Set(s.headerExtensions.map(a=>a.preferredId));for(;n.has(t);)++t}let i={kind:e.kind,uri:e.uri,preferredId:t,preferredEncrypt:!1,direction:e.direction};s.headerExtensions.push(i)}function yo(s){if(!s||typeof s!="string")return{msidStreamId:void 0,msidTrackId:void 0};let[e,t]=s.trim().split(/\s+/);return e?{msidStreamId:e,msidTrackId:t}:{msidStreamId:void 0,msidTrackId:void 0}}});var _i=T(Ft=>{"use strict";Object.defineProperty(Ft,"__esModule",{value:!0});Ft.Chrome111=void 0;var ne=de(),bo=W(),So=q(),it=te(),Co=G(),Ro=Se(),To=Be(),nt=Ue(),fi=We(),Fr=He(),C=new So.Logger("Chrome111"),mi="Chrome111",gi={OS:65535,MIS:65535},qr=class s extends bo.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:mi,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{C.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e,sendEncodings:[{scalabilityMode:"L3T3"}]});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let i=ne.parse(r.sdp);return s.getLocalRtpCapabilities(i)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(C.debug("getNativeSctpCapabilities()"),{numStreams:gi})}}static getLocalRtpCapabilities(e,t=[]){let r=nt.extractRtpCapabilities({sdpObject:e});it.validateAndNormalizeRtpCapabilities(r),Fr.addNackSupportForOpus(r);for(let i of t)Fr.addHeaderExtensionSupport(r,i);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:d}){super(),C.debug("constructor()"),this._direction=e,this._remoteSdp=new To.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=d,i.role&&i.role!=="auto"&&(this._forcedLocalDtlsRole=i.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(C.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return mi}close(){if(C.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),C.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),C.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});C.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:n,codec:a,onRtpSender:o}){if(this.assertNotClosed(),this.assertSendDirection(),C.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1){let k=1;for(let x of r){let L=x.scalabilityMode?(0,Ro.parse)(x.scalabilityMode).temporalLayers:3;L>k&&(k=L)}r.forEach((x,L)=>{x.rid=`r${L}`,x.scalabilityMode=`L1T${k}`})}let c=this._remoteSdp.getNextMediaSectionIdx(),d=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});o&&o(d.sender);let p=await this._pc.createOffer(),l=ne.parse(p.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let u=[];u.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let f=s.getLocalRtpCapabilities(l,u),m=this._getSendExtendedRtpCapabilities(f),h=it.getSendingRtpParameters(e.kind,m);h.codecs=it.reduceCodecs(h.codecs,a);let g=it.getSendingRemoteRtpParameters(e.kind,m);if(g.codecs=it.reduceCodecs(g.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l}),n?.absCaptureTime){let k=l.media[c.idx];nt.addHeaderExtension({offerMediaObject:k,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(x=>x.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),p={type:"offer",sdp:ne.write(l)}}C.debug("send() | calling pc.setLocalDescription() [offer:%o]",p),await this._pc.setLocalDescription(p);let w=d.mid;h.mid=w,l=ne.parse(this._pc.localDescription.sdp);let E=l.media[c.idx];if(h.rtcp.cname=nt.getCname({offerMediaObject:E}),h.msid=`${t??this._sendStream.id} ${e.id}`,!r)h.encodings=fi.getRtpEncodings({offerMediaObject:E,codecs:h.codecs});else if(r.length===1){let k=fi.getRtpEncodings({offerMediaObject:E,codecs:h.codecs});Object.assign(k[0],r[0]),h.encodings=k}else h.encodings=r;this._remoteSdp.send({offerMediaObject:E,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:g,codecOptions:i});let P={type:"answer",sdp:this._remoteSdp.getSdp()};return C.debug("send() | calling pc.setRemoteDescription() [answer:%o]",P),await this._pc.setRemoteDescription(P),this._mapMidTransceiver.set(w,d),{localId:w,rtpParameters:h,rtpSender:d.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 i=await this._pc.createOffer();C.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let n={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),C.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();C.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),C.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();C.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?C.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):C.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),C.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();C.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),C.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();C.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};C.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%gi.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=ne.parse(n.sdp),o=a.media.find(d=>d.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),C.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};C.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:d,rtpParameters:p,streamId:l}=o;C.debug("receive() [trackId:%s, kind:%s]",c,d);let u=p.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:f}=Fr.getMsidStreamIdAndTrackId(p.msid);this._remoteSdp.receive({mid:u,kind:d,offerRtpParameters:p,streamId:l??f??p.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(let o of e){let{trackId:c,onRtpReceiver:d}=o;if(d){let p=r.get(c),l=this._pc.getTransceivers().find(u=>u.mid===p);if(!l)throw new Error("transceiver not found");d(l.receiver)}}let n=await this._pc.createAnswer(),a=ne.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:d}=o,p=r.get(c),l=a.media.find(u=>String(u.mid)===p);nt.applyCodecParameters({offerRtpParameters:d,answerMediaObject:l})}n={type:"answer",sdp:ne.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),C.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,d=r.get(c),p=this._pc.getTransceivers().find(l=>l.mid===d);if(p)this._mapMidTransceiver.set(d,p),t.push({localId:d,track:p.receiver.track,rtpReceiver:p.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){C.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){C.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){C.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();C.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,d={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};C.debug("receiveDataChannel() [options:%o]",d);let p=this._pc.createDataChannel(r,d);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};C.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),f=ne.parse(u.sdp),m=f.media.find(h=>h.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f}),u={type:"answer",sdp:ne.write(f)},C.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:p}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=ne.parse(this._pc.localDescription.sdp));let r=nt.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Co.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};Ft.Chrome111=qr});var yi=T(qt=>{"use strict";Object.defineProperty(qt,"__esModule",{value:!0});qt.Chrome74=void 0;var K=de(),Eo=q(),xo=W(),at=te(),ko=G(),Po=Se(),Do=Be(),ot=Ue(),$r=We(),zr=He(),b=new Eo.Logger("Chrome74"),vi="Chrome74",wi={OS:1024,MIS:1024},Br=class s extends xo.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:vi,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{b.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let i=K.parse(r.sdp);return s.getLocalRtpCapabilities(i)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(b.debug("getNativeSctpCapabilities()"),{numStreams:wi})}}static getLocalRtpCapabilities(e,t=[]){let r=ot.extractRtpCapabilities({sdpObject:e});at.validateAndNormalizeRtpCapabilities(r),zr.addNackSupportForOpus(r);for(let i of t)zr.addHeaderExtensionSupport(r,i);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:d}){super(),b.debug("constructor()"),this._direction=e,this._remoteSdp=new Do.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=d,i.role&&i.role!=="auto"&&(this._forcedLocalDtlsRole=i.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(b.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return vi}close(){if(b.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),b.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),b.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});b.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:n,codec:a}){this.assertNotClosed(),this.assertSendDirection(),b.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((x,L)=>{x.rid=`r${L}`});let o=this._remoteSdp.getNextMediaSectionIdx(),c=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r}),d=await this._pc.createOffer(),p=K.parse(d.sdp);p.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let l=[];l.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let u=s.getLocalRtpCapabilities(p,l),f=this._getSendExtendedRtpCapabilities(u),m=at.getSendingRtpParameters(e.kind,f);m.codecs=at.reduceCodecs(m.codecs,a);let h=at.getSendingRemoteRtpParameters(e.kind,f);h.codecs=at.reduceCodecs(h.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:p});let g=!1,w=(0,Po.parse)((r??[{}])[0].scalabilityMode),E;r?.length===1&&w.spatialLayers>1&&m.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(b.debug("send() | enabling legacy simulcast for VP9 SVC"),g=!0,p=K.parse(d.sdp),E=p.media[o.idx],$r.addLegacySimulcast({offerMediaObject:E,numStreams:w.spatialLayers}),d={type:"offer",sdp:K.write(p)}),b.debug("send() | calling pc.setLocalDescription() [offer:%o]",d),n?.absCaptureTime&&(E=p.media[o.idx],ot.addHeaderExtension({offerMediaObject:E,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:h.headerExtensions.find(x=>x.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),d={type:"offer",sdp:K.write(p)}),await this._pc.setLocalDescription(d);let P=c.mid;if(m.mid=P,p=K.parse(this._pc.localDescription.sdp),E=p.media[o.idx],m.rtcp.cname=ot.getCname({offerMediaObject:E}),m.msid=`${t??this._sendStream.id} ${e.id}`,!r)m.encodings=$r.getRtpEncodings({offerMediaObject:E,codecs:m.codecs});else if(r.length===1){let x=$r.getRtpEncodings({offerMediaObject:E,codecs:m.codecs});Object.assign(x[0],r[0]),g&&(x=[x[0]]),m.encodings=x}else m.encodings=r;if(m.encodings.length>1&&(m.codecs[0].mimeType.toLowerCase()==="video/vp8"||m.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let x of m.encodings)x.scalabilityMode?x.scalabilityMode=`L1T${w.temporalLayers}`:x.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:E,reuseMid:o.reuseMid,offerRtpParameters:m,answerRtpParameters:h,codecOptions:i});let k={type:"answer",sdp:this._remoteSdp.getSdp()};return b.debug("send() | calling pc.setRemoteDescription() [answer:%o]",k),await this._pc.setRemoteDescription(k),this._mapMidTransceiver.set(P,c),{localId:P,rtpParameters:m,rtpSender:c.sender}}async stopSending(e){if(this.assertSendDirection(),b.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let i=await this._pc.createOffer();b.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let n={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),b.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();b.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),b.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();b.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?b.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):b.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),b.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();b.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),b.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();b.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};b.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%wi.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=K.parse(n.sdp),o=a.media.find(d=>d.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),b.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};b.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:d,rtpParameters:p,streamId:l}=o;b.debug("receive() [trackId:%s, kind:%s]",c,d);let u=p.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:f}=zr.getMsidStreamIdAndTrackId(p.msid);this._remoteSdp.receive({mid:u,kind:d,offerRtpParameters:p,streamId:l??f??p.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);let n=await this._pc.createAnswer(),a=K.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:d}=o,p=r.get(c),l=a.media.find(u=>String(u.mid)===p);ot.applyCodecParameters({offerRtpParameters:d,answerMediaObject:l})}n={type:"answer",sdp:K.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),b.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,d=r.get(c),p=this._pc.getTransceivers().find(l=>l.mid===d);if(p)this._mapMidTransceiver.set(d,p),t.push({localId:d,track:p.receiver.track,rtpReceiver:p.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){b.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){b.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){b.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();b.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,d={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};b.debug("receiveDataChannel() [options:%o]",d);let p=this._pc.createDataChannel(r,d);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};b.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),f=K.parse(u.sdp),m=f.media.find(h=>h.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f}),u={type:"answer",sdp:K.write(f)},b.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:p}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=K.parse(this._pc.localDescription.sdp));let r=ot.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new ko.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};qt.Chrome74=Br});var Ti=T(zt=>{"use strict";Object.defineProperty(zt,"__esModule",{value:!0});zt.Firefox120=void 0;var pe=de(),Io=W(),Lo=q(),bi=G(),ct=te(),Mo=Se(),Oo=Be(),$t=Ue(),Si=We(),Ao=He(),R=new Lo.Logger("Firefox120"),Ci="Firefox120",Ri={OS:16,MIS:2048},Ur=class s extends Io.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Ci,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{R.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"}),r=document.createElement("canvas");r.getContext("2d");let n=r.captureStream().getVideoTracks()[0];try{t.addTransceiver("audio",{direction:e}),t.addTransceiver(n,{direction:e,sendEncodings:[{rid:"r0",maxBitrate:1e5},{rid:"r1",maxBitrate:5e5}]});let a=await t.createOffer();try{r.remove()}catch{}try{n.stop()}catch{}try{t.close()}catch{}t=void 0;let o=pe.parse(a.sdp);return s.getLocalRtpCapabilities(o)}catch(a){try{r.remove()}catch{}try{n.stop()}catch{}try{t?.close()}catch{}throw t=void 0,a}},getNativeSctpCapabilities:async()=>(R.debug("getNativeSctpCapabilities()"),{numStreams:Ri})}}static getLocalRtpCapabilities(e){let t=$t.extractRtpCapabilities({sdpObject:e});return ct.validateAndNormalizeRtpCapabilities(t),t}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:d}){super(),R.debug("constructor()"),this._direction=e,this._remoteSdp=new Oo.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=d,this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(R.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Ci}close(){if(R.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){throw this.assertNotClosed(),new bi.UnsupportedError("not supported")}async restartIce(e){if(this.assertNotClosed(),R.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});R.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,codec:n,onRtpSender:a}){this.assertNotClosed(),this.assertSendDirection(),R.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((E,P)=>{E.rid=`r${P}`});let o=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});a&&a(o.sender);let c=await this._pc.createOffer(),d=pe.parse(c.sdp);d.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let p=s.getLocalRtpCapabilities(d),l=this._getSendExtendedRtpCapabilities(p),u=ct.getSendingRtpParameters(e.kind,l);u.codecs=ct.reduceCodecs(u.codecs,n);let f=ct.getSendingRemoteRtpParameters(e.kind,l);f.codecs=ct.reduceCodecs(f.codecs,n),this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:d});let m=(0,Mo.parse)((r??[{}])[0].scalabilityMode);R.debug("send() | calling pc.setLocalDescription() [offer:%o]",c),await this._pc.setLocalDescription(c);let h=o.mid;u.mid=h,d=pe.parse(this._pc.localDescription.sdp);let g=d.media[d.media.length-1];if(u.rtcp.cname=$t.getCname({offerMediaObject:g}),u.msid=`${t??this._sendStream.id} ${e.id}`,!r)u.encodings=Si.getRtpEncodings({offerMediaObject:g,codecs:u.codecs});else if(r.length===1){let E=Si.getRtpEncodings({offerMediaObject:g,codecs:u.codecs});Object.assign(E[0],r[0]),u.encodings=E}else u.encodings=r;if(u.encodings.length>1&&(u.codecs[0].mimeType.toLowerCase()==="video/vp8"||u.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let E of u.encodings)E.scalabilityMode?E.scalabilityMode=`L1T${m.temporalLayers}`:E.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:g,offerRtpParameters:u,answerRtpParameters:f,codecOptions:i});let w={type:"answer",sdp:this._remoteSdp.getSdp()};return R.debug("send() | calling pc.setRemoteDescription() [answer:%o]",w),await this._pc.setRemoteDescription(w),this._mapMidTransceiver.set(h,o),{localId:h,rtpParameters:u,rtpSender:o.sender}}async stopSending(e){if(this.assertSendDirection(),R.debug("stopSending() [localId:%s]",e),this._closed)return;let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated transceiver not found");t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.disableMediaSection(t.mid);let r=await this._pc.createOffer();R.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),R.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();R.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),R.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let r=await this._pc.createOffer();R.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?R.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):R.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),R.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated transceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();R.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),R.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();R.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};R.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Ri.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=pe.parse(n.sdp),o=a.media.find(d=>d.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:a}),R.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};R.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:d,rtpParameters:p,streamId:l}=o;R.debug("receive() [trackId:%s, kind:%s]",c,d);let u=p.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:f}=Ao.getMsidStreamIdAndTrackId(p.msid);this._remoteSdp.receive({mid:u,kind:d,offerRtpParameters:p,streamId:l??f??p.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(let o of e){let{trackId:c,onRtpReceiver:d}=o;if(d){let p=r.get(c),l=this._pc.getTransceivers().find(u=>u.mid===p);if(!l)throw new Error("transceiver not found");d(l.receiver)}}let n=await this._pc.createAnswer(),a=pe.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:d}=o,p=r.get(c),l=a.media.find(u=>String(u.mid)===p);$t.applyCodecParameters({offerRtpParameters:d,answerMediaObject:l}),n={type:"answer",sdp:pe.write(a)}}this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:a}),R.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,d=r.get(c),p=this._pc.getTransceivers().find(l=>l.mid===d);if(!p)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(d,p),t.push({localId:d,track:p.receiver.track,rtpReceiver:p.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){R.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){R.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){R.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();R.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,d={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};R.debug("receiveDataChannel() [options:%o]",d);let p=this._pc.createDataChannel(r,d);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};R.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),f=pe.parse(u.sdp),m=f.media.find(h=>h.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:"client",localSdpObject:f}),u={type:"answer",sdp:pe.write(f)},R.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:p}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=pe.parse(this._pc.localDescription.sdp));let r=$t.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new bi.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};zt.Firefox120=Ur});var Pi=T(Bt=>{"use strict";Object.defineProperty(Bt,"__esModule",{value:!0});Bt.Safari12=void 0;var Q=de(),No=W(),jo=q(),dt=te(),Fo=G(),qo=Se(),$o=Be(),pt=Ue(),Ei=We(),Wr=He(),S=new jo.Logger("Safari12"),xi="Safari12",ki={OS:65535,MIS:65535},Hr=class s extends No.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:xi,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{S.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let i=Q.parse(r.sdp);return s.getLocalRtpCapabilities(i)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(S.debug("getNativeSctpCapabilities()"),{numStreams:ki})}}static getLocalRtpCapabilities(e,t=[]){let r=pt.extractRtpCapabilities({sdpObject:e});dt.validateAndNormalizeRtpCapabilities(r),Wr.addNackSupportForOpus(r);for(let i of t)Wr.addHeaderExtensionSupport(r,i);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:d}){super(),S.debug("constructor()"),this._direction=e,this._remoteSdp=new $o.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=d,i.role&&i.role!=="auto"&&(this._forcedLocalDtlsRole=i.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)}),this._pc.addEventListener("icecandidateerror",p=>{this.emit("@icecandidateerror",p)}),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 xi}close(){if(S.debug("close()"),!this._closed){this._closed=!0;try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),S.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),S.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});S.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();S.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:n,codec:a,onRtpSender:o}){this.assertNotClosed(),this.assertSendDirection(),S.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t);let c=this._remoteSdp.getNextMediaSectionIdx(),d=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream]});o&&o(d.sender);let p=await this._pc.createOffer(),l=Q.parse(p.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let u=[];u.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let f=s.getLocalRtpCapabilities(l,u),m=this._getSendExtendedRtpCapabilities(f),h=dt.getSendingRtpParameters(e.kind,m);h.codecs=dt.reduceCodecs(h.codecs,a);let g=dt.getSendingRemoteRtpParameters(e.kind,m);g.codecs=dt.reduceCodecs(g.codecs,a);let w;this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l});let E=(0,qo.parse)((r??[{}])[0].scalabilityMode);r&&r.length>1&&(S.debug("send() | enabling legacy simulcast"),l=Q.parse(p.sdp),w=l.media[c.idx],Ei.addLegacySimulcast({offerMediaObject:w,numStreams:r.length}),p={type:"offer",sdp:Q.write(l)}),n?.absCaptureTime&&(w=l.media[c.idx],pt.addHeaderExtension({offerMediaObject:w,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(x=>x.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),p={type:"offer",sdp:Q.write(l)}),S.debug("send() | calling pc.setLocalDescription() [offer:%o]",p),await this._pc.setLocalDescription(p);let P=d.mid;if(h.mid=P,l=Q.parse(this._pc.localDescription.sdp),w=l.media[c.idx],h.rtcp.cname=pt.getCname({offerMediaObject:w}),h.msid=`${t??this._sendStream.id} ${e.id}`,h.encodings=Ei.getRtpEncodings({offerMediaObject:w,codecs:h.codecs}),r)for(let x=0;x<h.encodings.length;++x)r[x]&&Object.assign(h.encodings[x],r[x]);if(h.encodings.length>1&&(h.codecs[0].mimeType.toLowerCase()==="video/vp8"||h.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let x of h.encodings)x.scalabilityMode?x.scalabilityMode=`L1T${E.temporalLayers}`:x.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:w,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:g,codecOptions:i});let k={type:"answer",sdp:this._remoteSdp.getSdp()};return S.debug("send() | calling pc.setRemoteDescription() [answer:%o]",k),await this._pc.setRemoteDescription(k),this._mapMidTransceiver.set(P,d),{localId:P,rtpParameters:h,rtpSender:d.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;S.debug("stopSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let i=await this._pc.createOffer();S.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let n={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),S.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();S.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),S.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly",this._remoteSdp.resumeSendingMediaSection(e);let r=await this._pc.createOffer();S.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?S.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):S.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),S.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();S.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),S.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();S.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};S.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%ki.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=Q.parse(n.sdp),o=a.media.find(d=>d.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),S.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};S.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:d,rtpParameters:p,streamId:l}=o;S.debug("receive() [trackId:%s, kind:%s]",c,d);let u=p.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:f}=Wr.getMsidStreamIdAndTrackId(p.msid);this._remoteSdp.receive({mid:u,kind:d,offerRtpParameters:p,streamId:l??f??p.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(let o of e){let{trackId:c,onRtpReceiver:d}=o;if(d){let p=r.get(c),l=this._pc.getTransceivers().find(u=>u.mid===p);if(!l)throw new Error("transceiver not found");d(l.receiver)}}let n=await this._pc.createAnswer(),a=Q.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:d}=o,p=r.get(c),l=a.media.find(u=>String(u.mid)===p);pt.applyCodecParameters({offerRtpParameters:d,answerMediaObject:l})}n={type:"answer",sdp:Q.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),S.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,d=r.get(c),p=this._pc.getTransceivers().find(l=>l.mid===d);if(!p)throw new Error("new RTCRtpTransceiver not found");this._mapMidTransceiver.set(d,p),t.push({localId:d,track:p.receiver.track,rtpReceiver:p.receiver})}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){S.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();S.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){S.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();S.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){S.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();S.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,d={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};S.debug("receiveDataChannel() [options:%o]",d);let p=this._pc.createDataChannel(r,d);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};S.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),f=Q.parse(u.sdp),m=f.media.find(h=>h.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f}),u={type:"answer",sdp:Q.write(f)},S.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:p}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=Q.parse(this._pc.localDescription.sdp));let r=pt.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Fo.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};Bt.Safari12=Hr});var Li=T(Ut=>{"use strict";Object.defineProperty(Ut,"__esModule",{value:!0});Ut.ReactNative106=void 0;var Y=de(),zo=W(),Bo=q(),lt=te(),Uo=G(),Wo=Se(),Ho=Be(),ut=Ue(),Vr=We(),Gr=He(),y=new Bo.Logger("ReactNative106"),Di="ReactNative106",Ii={OS:65535,MIS:65535},Kr=class s extends zo.EnhancedEventEmitter{_closed=!1;_direction;_remoteSdp;_getSendExtendedRtpCapabilities;_forcedLocalDtlsRole;_pc;_mapMidTransceiver=new Map;_sendStream=new MediaStream;_hasDataChannelMediaSection=!1;_nextSendSctpStreamId=0;_transportReady=!1;static createFactory(){return{name:Di,factory:e=>new s(e),getNativeRtpCapabilities:async({direction:e})=>{y.debug("getNativeRtpCapabilities() [direction:%o]",e);let t=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require"});try{t.addTransceiver("audio",{direction:e}),t.addTransceiver("video",{direction:e});let r=await t.createOffer();try{t.close()}catch{}t=void 0;let i=Y.parse(r.sdp);return s.getLocalRtpCapabilities(i)}catch(r){try{t?.close()}catch{}throw t=void 0,r}},getNativeSctpCapabilities:async()=>(y.debug("getNativeSctpCapabilities()"),{numStreams:Ii})}}static getLocalRtpCapabilities(e,t=[]){let r=ut.extractRtpCapabilities({sdpObject:e});lt.validateAndNormalizeRtpCapabilities(r),Gr.addNackSupportForOpus(r);for(let i of t)Gr.addHeaderExtensionSupport(r,i);return r}constructor({direction:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,getSendExtendedRtpCapabilities:d}){super(),y.debug("constructor()"),this._direction=e,this._remoteSdp=new Ho.RemoteSdp({iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n}),this._getSendExtendedRtpCapabilities=d,i.role&&i.role!=="auto"&&(this._forcedLocalDtlsRole=i.role==="server"?"client":"server"),this._pc=new RTCPeerConnection({iceServers:a??[],iceTransportPolicy:o??"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",...c}),this._pc.addEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.addEventListener("icecandidateerror",this.onIceCandidateError),this._pc.connectionState?this._pc.addEventListener("connectionstatechange",this.onConnectionStateChange):(y.warn("run() | pc.connectionState not supported, using pc.iceConnectionState"),this._pc.addEventListener("iceconnectionstatechange",this.onIceConnectionStateChange))}get name(){return Di}close(){if(y.debug("close()"),!this._closed){this._closed=!0,this._sendStream.release(!1);try{this._pc.close()}catch{}this._pc.removeEventListener("icegatheringstatechange",this.onIceGatheringStateChange),this._pc.removeEventListener("icecandidateerror",this.onIceCandidateError),this._pc.removeEventListener("connectionstatechange",this.onConnectionStateChange),this._pc.removeEventListener("iceconnectionstatechange",this.onIceConnectionStateChange),this.emit("@close"),super.close()}}async updateIceServers(e){this.assertNotClosed(),y.debug("updateIceServers()");let t=this._pc.getConfiguration();t.iceServers=e,this._pc.setConfiguration(t)}async restartIce(e){if(this.assertNotClosed(),y.debug("restartIce()"),this._remoteSdp.updateIceParameters(e),!!this._transportReady)if(this._direction==="send"){let t=await this._pc.createOffer({iceRestart:!0});y.debug("restartIce() | calling pc.setLocalDescription() [offer:%o]",t),await this._pc.setLocalDescription(t);let r={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("restartIce() | calling pc.setRemoteDescription() [answer:%o]",r),await this._pc.setRemoteDescription(r)}else{let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("restartIce() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();y.debug("restartIce() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}}async getTransportStats(){return this.assertNotClosed(),this._pc.getStats()}async send({track:e,streamId:t,encodings:r,codecOptions:i,headerExtensionOptions:n,codec:a,onRtpSender:o}){this.assertNotClosed(),this.assertSendDirection(),y.debug("send() [kind:%s, track.id:%s, streamId:%s]",e.kind,e.id,t),r&&r.length>1&&r.forEach((L,Te)=>{L.rid=`r${Te}`});let c=this._remoteSdp.getNextMediaSectionIdx(),d=this._pc.addTransceiver(e,{direction:"sendonly",streams:[this._sendStream],sendEncodings:r});o&&o(d.sender);let p=await this._pc.createOffer(),l=Y.parse(p.sdp);l.extmapAllowMixed&&this._remoteSdp.setSessionExtmapAllowMixed();let u=[];u.push({uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",kind:e.kind,direction:"sendonly"});let f=s.getLocalRtpCapabilities(l,u),m=this._getSendExtendedRtpCapabilities(f),h=lt.getSendingRtpParameters(e.kind,m);h.codecs=lt.reduceCodecs(h.codecs,a);let g=lt.getSendingRemoteRtpParameters(e.kind,m);g.codecs=lt.reduceCodecs(g.codecs,a),this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:l});let w=!1,E=(0,Wo.parse)((r??[{}])[0].scalabilityMode),P;r?.length===1&&E.spatialLayers>1&&h.codecs[0].mimeType.toLowerCase()==="video/vp9"&&(y.debug("send() | enabling legacy simulcast for VP9 SVC"),w=!0,l=Y.parse(p.sdp),P=l.media[c.idx],Vr.addLegacySimulcast({offerMediaObject:P,numStreams:E.spatialLayers}),p={type:"offer",sdp:Y.write(l)}),n?.absCaptureTime&&(P=l.media[c.idx],ut.addHeaderExtension({offerMediaObject:P,headerExtensionUri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time",headerExtensionId:g.headerExtensions.find(L=>L.uri==="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time").id}),p={type:"offer",sdp:Y.write(l)}),y.debug("send() | calling pc.setLocalDescription() [offer:%o]",p),await this._pc.setLocalDescription(p);let k=d.mid??void 0;if(k||y.warn("send() | missing transceiver.mid (bug in react-native-webrtc, using a workaround"),h.mid=k,l=Y.parse(this._pc.localDescription.sdp),P=l.media[c.idx],h.rtcp.cname=ut.getCname({offerMediaObject:P}),h.msid=`${t??this._sendStream.id} ${e.id}`,!r)h.encodings=Vr.getRtpEncodings({offerMediaObject:P,codecs:h.codecs});else if(r.length===1){let L=Vr.getRtpEncodings({offerMediaObject:P,codecs:h.codecs});Object.assign(L[0],r[0]),w&&(L=[L[0]]),h.encodings=L}else h.encodings=r;if(h.encodings.length>1&&(h.codecs[0].mimeType.toLowerCase()==="video/vp8"||h.codecs[0].mimeType.toLowerCase()==="video/h264"))for(let L of h.encodings)L.scalabilityMode?L.scalabilityMode=`L1T${E.temporalLayers}`:L.scalabilityMode="L1T3";this._remoteSdp.send({offerMediaObject:P,reuseMid:c.reuseMid,offerRtpParameters:h,answerRtpParameters:g,codecOptions:i});let x={type:"answer",sdp:this._remoteSdp.getSdp()};return y.debug("send() | calling pc.setRemoteDescription() [answer:%o]",x),await this._pc.setRemoteDescription(x),k||(k=d.mid,h.mid=k),this._mapMidTransceiver.set(k,d),{localId:k,rtpParameters:h,rtpSender:d.sender}}async stopSending(e){if(this.assertSendDirection(),this._closed)return;y.debug("stopSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");if(t.sender.replaceTrack(null),this._pc.removeTrack(t.sender),this._remoteSdp.closeMediaSection(t.mid))try{t.stop()}catch{}let i=await this._pc.createOffer();y.debug("stopSending() | calling pc.setLocalDescription() [offer:%o]",i),await this._pc.setLocalDescription(i);let n={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("stopSending() | calling pc.setRemoteDescription() [answer:%o]",n),await this._pc.setRemoteDescription(n),this._mapMidTransceiver.delete(e)}async pauseSending(e){this.assertNotClosed(),this.assertSendDirection(),y.debug("pauseSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="inactive",this._remoteSdp.pauseMediaSection(e);let r=await this._pc.createOffer();y.debug("pauseSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("pauseSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async resumeSending(e){this.assertNotClosed(),this.assertSendDirection(),y.debug("resumeSending() [localId:%s]",e);let t=this._mapMidTransceiver.get(e);if(this._remoteSdp.resumeSendingMediaSection(e),!t)throw new Error("associated RTCRtpTransceiver not found");t.direction="sendonly";let r=await this._pc.createOffer();y.debug("resumeSending() | calling pc.setLocalDescription() [offer:%o]",r),await this._pc.setLocalDescription(r);let i={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("resumeSending() | calling pc.setRemoteDescription() [answer:%o]",i),await this._pc.setRemoteDescription(i)}async replaceTrack(e,t){this.assertNotClosed(),this.assertSendDirection(),t?y.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):y.debug("replaceTrack() [localId:%s, no track]",e);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");await r.sender.replaceTrack(t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),this.assertSendDirection(),y.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{c<=t?o.active=!0:o.active=!1}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();y.debug("setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),this.assertSendDirection(),y.debug("setRtpEncodingParameters() [localId:%s, params:%o]",e,t);let r=this._mapMidTransceiver.get(e);if(!r)throw new Error("associated RTCRtpTransceiver not found");let i=r.sender.getParameters();i.encodings.forEach((o,c)=>{i.encodings[c]={...o,...t}}),await r.sender.setParameters(i),this._remoteSdp.muxMediaSectionSimulcast(e,i.encodings);let n=await this._pc.createOffer();y.debug("setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n);let a={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]",a),await this._pc.setRemoteDescription(a)}async getSenderStats(e){this.assertNotClosed(),this.assertSendDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.sender.getStats()}async sendDataChannel({sctpStreamParameters:e}){this.assertNotClosed(),this.assertSendDirection();let t={negotiated:!0,id:this._nextSendSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,protocol:e.protocol};y.debug("sendDataChannel() [options:%o]",t);let r=this._pc.createDataChannel(e.label,t);if(this._nextSendSctpStreamId=++this._nextSendSctpStreamId%Ii.MIS,!this._hasDataChannelMediaSection){let n=await this._pc.createOffer(),a=Y.parse(n.sdp),o=a.media.find(d=>d.type==="application");this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),y.debug("sendDataChannel() | calling pc.setLocalDescription() [offer:%o]",n),await this._pc.setLocalDescription(n),this._remoteSdp.sendSctpAssociation({offerMediaObject:o});let c={type:"answer",sdp:this._remoteSdp.getSdp()};y.debug("sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]",c),await this._pc.setRemoteDescription(c),this._hasDataChannelMediaSection=!0}let i={streamId:t.id,ordered:t.ordered,maxPacketLifeTime:t.maxPacketLifeTime,maxRetransmits:t.maxRetransmits};return{dataChannel:r,sctpStreamParameters:i}}async receive(e){this.assertNotClosed(),this.assertRecvDirection();let t=[],r=new Map;for(let o of e){let{trackId:c,kind:d,rtpParameters:p,streamId:l}=o;y.debug("receive() [trackId:%s, kind:%s]",c,d);let u=p.mid??String(this._mapMidTransceiver.size);r.set(c,u);let{msidStreamId:f}=Gr.getMsidStreamIdAndTrackId(p.msid);this._remoteSdp.receive({mid:u,kind:d,offerRtpParameters:p,streamId:l??f??p.rtcp?.cname??"-",trackId:c})}let i={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("receive() | calling pc.setRemoteDescription() [offer:%o]",i),await this._pc.setRemoteDescription(i);for(let o of e){let{trackId:c,onRtpReceiver:d}=o;if(d){let p=r.get(c),l=this._pc.getTransceivers().find(u=>u.mid===p);if(!l)throw new Error("transceiver not found");d(l.receiver)}}let n=await this._pc.createAnswer(),a=Y.parse(n.sdp);for(let o of e){let{trackId:c,rtpParameters:d}=o,p=r.get(c),l=a.media.find(u=>String(u.mid)===p);ut.applyCodecParameters({offerRtpParameters:d,answerMediaObject:l})}n={type:"answer",sdp:Y.write(a)},this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:a}),y.debug("receive() | calling pc.setLocalDescription() [answer:%o]",n),await this._pc.setLocalDescription(n);for(let o of e){let{trackId:c}=o,d=r.get(c),p=this._pc.getTransceivers().find(l=>l.mid===d);if(p)this._mapMidTransceiver.set(d,p),t.push({localId:d,track:p.receiver.track,rtpReceiver:p.receiver});else throw new Error("new RTCRtpTransceiver not found")}return t}async stopReceiving(e){if(this.assertRecvDirection(),this._closed)return;for(let i of e){y.debug("stopReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");this._remoteSdp.closeMediaSection(n.mid)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("stopReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();y.debug("stopReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r);for(let i of e)this._mapMidTransceiver.delete(i)}async pauseReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){y.debug("pauseReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="inactive",this._remoteSdp.pauseMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();y.debug("pauseReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async resumeReceiving(e){this.assertNotClosed(),this.assertRecvDirection();for(let i of e){y.debug("resumeReceiving() [localId:%s]",i);let n=this._mapMidTransceiver.get(i);if(!n)throw new Error("associated RTCRtpTransceiver not found");n.direction="recvonly",this._remoteSdp.resumeReceivingMediaSection(i)}let t={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]",t),await this._pc.setRemoteDescription(t);let r=await this._pc.createAnswer();y.debug("resumeReceiving() | calling pc.setLocalDescription() [answer:%o]",r),await this._pc.setLocalDescription(r)}async getReceiverStats(e){this.assertNotClosed(),this.assertRecvDirection();let t=this._mapMidTransceiver.get(e);if(!t)throw new Error("associated RTCRtpTransceiver not found");return t.receiver.getStats()}async receiveDataChannel({maxMessageSize:e,sctpStreamParameters:t,label:r,protocol:i}){this.assertNotClosed(),this.assertRecvDirection();let{streamId:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c}=t,d={negotiated:!0,id:n,ordered:a,maxPacketLifeTime:o,maxRetransmits:c,protocol:i};y.debug("receiveDataChannel() [options:%o]",d);let p=this._pc.createDataChannel(r,d);if(!this._hasDataChannelMediaSection){this._remoteSdp.receiveSctpAssociation();let l={type:"offer",sdp:this._remoteSdp.getSdp()};y.debug("receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]",l),await this._pc.setRemoteDescription(l);let u=await this._pc.createAnswer(),f=Y.parse(u.sdp),m=f.media.find(h=>h.type==="application");m.maxMessageSize=e,this._transportReady||await this.setupTransport({localDtlsRole:this._forcedLocalDtlsRole??"client",localSdpObject:f}),u={type:"answer",sdp:Y.write(f)},y.debug("receiveDataChannel() | calling pc.setLocalDescription() [answer:%o]",u),await this._pc.setLocalDescription(u),this._hasDataChannelMediaSection=!0}return{dataChannel:p}}getDataChannelMaxMessageSize(){return this._pc.sctp?.maxMessageSize}async setupTransport({localDtlsRole:e,localSdpObject:t}){t||(t=Y.parse(this._pc.localDescription.sdp));let r=ut.extractDtlsParameters({sdpObject:t});r.role=e,this._remoteSdp.updateDtlsRole(e==="client"?"server":"client"),await new Promise((i,n)=>{this.safeEmit("@connect",{dtlsParameters:r},i,n)}),this._transportReady=!0}onIceGatheringStateChange=()=>{this.emit("@icegatheringstatechange",this._pc.iceGatheringState)};onIceCandidateError=e=>{this.emit("@icecandidateerror",e)};onConnectionStateChange=()=>{this.emit("@connectionstatechange",this._pc.connectionState)};onIceConnectionStateChange=()=>{switch(this._pc.iceConnectionState){case"checking":{this.emit("@connectionstatechange","connecting");break}case"connected":case"completed":{this.emit("@connectionstatechange","connected");break}case"failed":{this.emit("@connectionstatechange","failed");break}case"disconnected":{this.emit("@connectionstatechange","disconnected");break}case"closed":{this.emit("@connectionstatechange","closed");break}}};assertNotClosed(){if(this._closed)throw new Uo.InvalidStateError("method called in a closed handler")}assertSendDirection(){if(this._direction!=="send")throw new Error('method can just be called for handlers with "send" direction')}assertRecvDirection(){if(this._direction!=="recv")throw new Error('method can just be called for handlers with "recv" direction')}};Ut.ReactNative106=Kr});var Ni=T(Ve=>{"use strict";Object.defineProperty(Ve,"__esModule",{value:!0});Ve.Device=void 0;Ve.detectDevice=Mi;Ve.detectDeviceAsync=Oi;var Vo=q(),Go=W(),me=G(),Wt=ve(),H=te(),Ko=ri(),Qo=_i(),Yo=yi(),Jo=Ti(),Xo=Pi(),Zo=Li(),v=new Vo.Logger("Device");function Mi(s,e){return v.debug("detectDevice()"),!s&&typeof navigator=="object"&&(s=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),Ai(s,e)}async function Oi(s,e){return v.debug("detectDeviceAsync()"),!s&&typeof navigator=="object"&&(s=navigator.userAgent),!e&&typeof navigator=="object"&&(e=navigator.userAgentData),Ai(s,e)}var Qr=class s{_handlerFactory;_handlerName;_loaded=!1;_getSendExtendedRtpCapabilities;_recvRtpCapabilities;_sendRtpCapabilities;_canProduceByKind={audio:!1,video:!1};_sctpCapabilities;_observer=new Go.EnhancedEventEmitter;static async factory({handlerName:e,handlerFactory:t}={}){if(v.debug("factory()"),e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(!e&&!t&&(e=await Oi(),!e))throw new me.UnsupportedError("device not supported");return new s({handlerName:e,handlerFactory:t})}constructor({handlerName:e,handlerFactory:t}={}){if(v.debug("constructor()"),e&&t)throw new TypeError("just one of handlerName or handlerInterface can be given");if(t)this._handlerFactory=t;else{if(e)v.debug("constructor() | handler given: %s",e);else if(e=Mi(),e)v.debug("constructor() | detected handler: %s",e);else throw new me.UnsupportedError("device not supported");switch(e){case"Chrome111":{this._handlerFactory=Qo.Chrome111.createFactory();break}case"Chrome74":{this._handlerFactory=Yo.Chrome74.createFactory();break}case"Firefox120":{this._handlerFactory=Jo.Firefox120.createFactory();break}case"Safari12":{this._handlerFactory=Xo.Safari12.createFactory();break}case"ReactNative106":{this._handlerFactory=Zo.ReactNative106.createFactory();break}default:throw new TypeError(`unknown handlerName "${e}"`)}}this._handlerName=this._handlerFactory.name}get handlerName(){return this._handlerName}get loaded(){return this._loaded}get rtpCapabilities(){return this.recvRtpCapabilities}get recvRtpCapabilities(){if(!this._loaded)throw new me.InvalidStateError("not loaded");return this._recvRtpCapabilities}get sendRtpCapabilities(){if(!this._loaded)throw new me.InvalidStateError("not loaded");return this._sendRtpCapabilities}get sctpCapabilities(){if(!this._loaded)throw new me.InvalidStateError("not loaded");return this._sctpCapabilities}get observer(){return this._observer}async load({routerRtpCapabilities:e,preferLocalCodecsOrder:t=!1}){if(v.debug("load() [routerRtpCapabilities:%o]",e),this._loaded)throw new me.InvalidStateError("already loaded");let r=Wt.clone(e);H.validateAndNormalizeRtpCapabilities(r);let{getNativeRtpCapabilities:i,getNativeSctpCapabilities:n}=this._handlerFactory,a=Wt.clone(await i({direction:"recvonly"}));v.debug("load() | got native receiving RTP capabilities:%o",a),H.validateAndNormalizeRtpCapabilities(a);let o=Wt.clone(await i({direction:"sendonly"}));v.debug("load() | got native sending RTP capabilities:%o",o),H.validateAndNormalizeRtpCapabilities(o),this._getSendExtendedRtpCapabilities=p=>Wt.clone(H.getExtendedRtpCapabilities(p,r,t));let c=H.getExtendedRtpCapabilities(a,r,!1);this._recvRtpCapabilities=H.getRecvRtpCapabilities(c),v.debug("load() | got receiving RTP capabilities:%o",this._recvRtpCapabilities),H.validateAndNormalizeRtpCapabilities(this._recvRtpCapabilities);let d=H.getExtendedRtpCapabilities(o,r,t);this._sendRtpCapabilities=H.getSendRtpCapabilities(d),v.debug("load() | got sending RTP capabilities:%o",this._sendRtpCapabilities),H.validateAndNormalizeRtpCapabilities(this._sendRtpCapabilities),this._canProduceByKind.audio=H.canSend("audio",this._sendRtpCapabilities),this._canProduceByKind.video=H.canSend("video",this._sendRtpCapabilities),this._sctpCapabilities=await n(),H.validateSctpCapabilities(this._sctpCapabilities),v.debug("load() | got native SCTP capabilities:%o",this._sctpCapabilities),v.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 me.InvalidStateError("not loaded");return this._canProduceByKind[e]}createSendTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:d}){return v.debug("createSendTransport()"),this.createTransport({direction:"send",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:d})}createRecvTransport({id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:d}){return v.debug("createRecvTransport()"),this.createTransport({direction:"recv",id:e,iceParameters:t,iceCandidates:r,dtlsParameters:i,sctpParameters:n,iceServers:a,iceTransportPolicy:o,additionalSettings:c,appData:d})}createTransport({direction:e,id:t,iceParameters:r,iceCandidates:i,dtlsParameters:n,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:d,appData:p}){if(this._loaded){if(typeof t!="string")throw new TypeError("missing id");if(typeof r!="object")throw new TypeError("missing iceParameters");if(Array.isArray(i)){if(typeof n!="object")throw new TypeError("missing dtlsParameters");if(a&&typeof a!="object")throw new TypeError("wrong sctpParameters");if(p&&typeof p!="object")throw new TypeError("if given, appData must be an object")}else throw new TypeError("missing iceCandidates")}else throw new me.InvalidStateError("not loaded");let l=new Ko.Transport({direction:e,id:t,iceParameters:r,iceCandidates:i,dtlsParameters:n,sctpParameters:a,iceServers:o,iceTransportPolicy:c,additionalSettings:d,appData:p,handlerFactory:this._handlerFactory,getSendExtendedRtpCapabilities:this._getSendExtendedRtpCapabilities,recvRtpCapabilities:this._recvRtpCapabilities,canProduceByKind:this._canProduceByKind});return this._observer.safeEmit("newtransport",l),l}};Ve.Device=Qr;function Ai(s,e){v.debug('detectDeviceImpl() [userAgent:"%s", userAgentData:%o]',s,e);let t=ec(s,e);if(t){if(t>=111)return v.debug("detectDeviceImpl() | using Chrome111 handler"),"Chrome111";if(t>=74)return v.debug("detectDeviceImpl() | using Chrome74 handler"),"Chrome74";v.warn("detectDeviceImpl() | unsupported Chromium based browser/version");return}let r=tc(s);if(r){if(r>=120)return v.debug("detectDeviceImpl() | using Firefox120 handler"),"Firefox120";v.warn("detectDeviceImpl() | unsupported Firefox browser/version");return}let i=rc(s);if(i){if(i>=605)return v.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";v.warn("detectDeviceImpl() | unsupported desktop Safari browser/version");return}let n=sc(s);if(n){if(n>=605)return v.debug("detectDeviceImpl() | using Safari12 handler"),"Safari12";v.warn("detectDeviceImpl() | unsupported iOS Safari based browser/version");return}if(ht()){if(typeof RTCPeerConnection<"u"&&typeof RTCRtpTransceiver<"u")return v.debug("detectDeviceImpl() | using ReactNative106 handler"),"ReactNative106";v.warn("detectDeviceImpl() | unsupported react-native-webrtc version without RTCPeerConnection or RTCRtpTransceiver, forgot to call registerGlobals() on it?");return}v.warn('detectDeviceImpl() | device not supported [userAgent:"%s", userAgentData:%o]',s,e)}function ec(s,e){if(v.debug("getChromiumMajorVersion()"),Ht(s,e)){v.debug("getChromiumMajorVersion() | this is iOS => undefined");return}if(ht()){v.debug("getChromiumMajorVersion() | this is React-Native => undefined");return}if(e){let i=(Array.isArray(e.brands)?e.brands:[]).find(n=>n.brand==="Chromium");if(i){let n=Number(i.version);return v.debug(`getChromiumMajorVersion() | Chromium major version based on NavigatorUAData => ${n}`),n}}let t=s?.match(/\b(?:Chrome|Chromium)\/(\w+)/i);if(t?.[1]){let r=Number(t[1]);return v.debug(`getChromiumMajorVersion() | Chromium major version based on User-Agent => ${r}`),r}v.debug("getChromiumMajorVersion() | this is not Chromium => undefined")}function tc(s){if(v.debug("getFirefoxMajorVersion()"),Ht(s)){v.debug("getFirefoxMajorVersion() | this is iOS => undefined");return}if(ht()){v.debug("getFirefoxMajorVersion() | this is React-Native => undefined");return}let e=s?.match(/\bFirefox\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return v.debug(`getFirefoxMajorVersion() | Firefox major version based on User-Agent => ${t}`),t}v.debug("getFirefoxMajorVersion() | this is not Firefox => undefined")}function rc(s){if(v.debug("getMacOSWebKitMajorVersion()"),Ht(s)){v.debug("getMacOSWebKitMajorVersion() | this is iOS => undefined");return}if(ht()){v.debug("getMacOSWebKitMajorVersion() | this is React-Native => undefined");return}if(!(s&&/\bSafari\b/i.test(s)&&!/\bChrome\b/i.test(s)&&!/\bChromium\b/i.test(s)&&!/\bFirefox\b/i.test(s))){v.debug("getMacOSWebKitMajorVersion() | this is not Safari => undefined");return}let t=s.match(/AppleWebKit\/(\w+)/i);if(t?.[1]){let r=Number(t[1]);return v.debug(`getMacOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${r}`),r}v.debug("getMacOSWebKitMajorVersion() | this is not WebKit => undefined")}function sc(s){if(v.debug("getIOSWebKitMajorVersion()"),!Ht(s)){v.debug("getIOSWebKitMajorVersion() | this is not iOS => undefined");return}if(ht()){v.debug("getIOSWebKitMajorVersion() | this is React-Native => undefined");return}let e=s?.match(/AppleWebKit\/(\w+)/i);if(e?.[1]){let t=Number(e[1]);return v.debug(`getIOSWebKitMajorVersion() | WebKit major version based on User-Agent => ${t}`),t}v.debug("getIOSWebKitMajorVersion() | this is not WebKit => undefined")}function Ht(s,e){return v.debug("isIOS()"),e?.platform==="iOS"?(v.debug("isIOS() | this is iOS based on NavigatorUAData.platform => true"),!0):e?.platform?(v.debug("isIOS() | this is not iOS based on NavigatorUAData.platform => false"),!1):s&&/iPad|iPhone|iPod/.test(s)?(v.debug("isIOS() | this is iOS based on User-Agent => true"),!0):typeof navigator=="object"&&navigator.platform==="MacIntel"&&navigator.maxTouchPoints>1?(v.debug("isIOS() | this is iPadOS 13+ based on User-Agent => true"),!0):(v.debug("isIOS() | this is not iOS => false"),!1)}function ht(){return v.debug("isReactNative()"),typeof navigator=="object"&&navigator.product==="ReactNative"?(v.debug("isReactNative() | this is React-Native based on navigator.product"),!0):(v.debug("isReactNative() | this is not React-Native => false"),!1)}});var Fi=T(ji=>{"use strict";var Re=256,Gt=[],Vt;for(;Re--;)Gt[Re]=(Re+256).toString(16).substring(1);function ic(){var s=0,e,t="";if(!Vt||Re+16>256){for(Vt=Array(s=256);s--;)Vt[s]=256*Math.random()|0;s=Re=0}for(;s<16;s++)e=Vt[Re+s],s==6?t+=Gt[e&15|64]:s==8?t+=Gt[e&63|128]:t+=Gt[e],s&1&&s>1&&s<11&&(t+="-");return Re++,t}ji.v4=ic});var qi=T(Kt=>{"use strict";Object.defineProperty(Kt,"__esModule",{value:!0});Kt.FakeEventTarget=void 0;var Yr=class{listeners={};addEventListener(e,t,r){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof r=="object"&&r.once===!0}))}removeEventListener(e,t,r){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(i=>i.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new Error("invalid event object");let t=this.listeners[e.type];if(!t)return!0;for(let r of[...t]){try{r.callback.call(this,e)}catch(i){setTimeout(()=>{throw i},0)}r.once&&this.removeEventListener(e.type,r.callback)}return!e.defaultPrevented}};Kt.FakeEventTarget=Yr});var $i=T(Qt=>{"use strict";Object.defineProperty(Qt,"__esModule",{value:!0});Qt.FakeEvent=void 0;var Jr=class{NONE=0;CAPTURING_PHASE=1;AT_TARGET=2;BUBBLING_PHASE=3;type;bubbles;cancelable;defaultPrevented=!1;composed=!1;currentTarget=null;eventPhase=this.NONE;isTrusted=!0;target=null;timeStamp=0;cancelBubble=!1;returnValue=!0;srcElement=null;constructor(e,t={}){this.type=e,this.bubbles=t.bubbles??!1,this.cancelable=t.cancelable??!1}preventDefault(){this.cancelable&&(this.defaultPrevented=!0)}stopPropagation(){}stopImmediatePropagation(){}composedPath(){return[]}initEvent(e,t,r){}};Qt.FakeEvent=Jr});var zi=T(Xr=>{"use strict";Object.defineProperty(Xr,"__esModule",{value:!0});Xr.clone=nc;function nc(s){if(s!==void 0)return Number.isNaN(s)?NaN:typeof structuredClone=="function"?structuredClone(s):JSON.parse(JSON.stringify(s))}});var Ui=T(Jt=>{"use strict";Object.defineProperty(Jt,"__esModule",{value:!0});Jt.FakeMediaStreamTrack=void 0;var Bi=Fi(),ac=qi(),Ge=$i(),Yt=zi(),Zr=class s extends ac.FakeEventTarget{#m;#l;#u;#e;#r;#t;#s;#h;#i;#f;#n;#a=null;#o=null;#c=null;#d=null;#p=null;constructor({kind:e,id:t,label:r,contentHint:i,enabled:n,muted:a,readyState:o,capabilities:c,constraints:d,settings:p,data:l}){super(),this.#m=t??(0,Bi.v4)(),this.#l=e,this.#u=r??"",this.#s=i??"",this.#r=n??!0,this.#t=a??!1,this.#e=o??"live",this.#h=c??{},this.#i=d??{},this.#f=p??{},this.#n=l??{}}get id(){return this.#m}get kind(){return this.#l}get label(){return this.#u}get contentHint(){return this.#s}set contentHint(e){this.#s=e}get enabled(){return this.#r}set enabled(e){let t=this.#r!==e;this.#r=e,t&&this.dispatchEvent(new Ge.FakeEvent("enabledchange"))}get muted(){return this.#t}get readyState(){return this.#e}get data(){return this.#n}set data(e){this.#n=e}get onmute(){return this.#a}set onmute(e){this.#a&&this.removeEventListener("mute",this.#a),this.#a=e,e&&this.addEventListener("mute",e)}get onunmute(){return this.#o}set onunmute(e){this.#o&&this.removeEventListener("unmute",this.#o),this.#o=e,e&&this.addEventListener("unmute",e)}get onended(){return this.#c}set onended(e){this.#c&&this.removeEventListener("ended",this.#c),this.#c=e,e&&this.addEventListener("ended",e)}get onenabledchange(){return this.#d}set onenabledchange(e){this.#d&&this.removeEventListener("enabledchange",this.#d),this.#d=e,e&&this.addEventListener("enabledchange",e)}get onstopped(){return this.#p}set onstopped(e){this.#p&&this.removeEventListener("stopped",this.#p),this.#p=e,e&&this.addEventListener("stopped",e)}addEventListener(e,t,r){super.addEventListener(e,t,r)}removeEventListener(e,t,r){super.removeEventListener(e,t,r)}stop(){this.#e!=="ended"&&(this.#e="ended",this.dispatchEvent(new Ge.FakeEvent("stopped")))}clone({id:e,data:t}={}){return new s({id:e??(0,Bi.v4)(),kind:this.#l,label:this.#u,contentHint:this.#s,enabled:this.#r,muted:this.#t,readyState:this.#e,capabilities:(0,Yt.clone)(this.#h),constraints:(0,Yt.clone)(this.#i),settings:(0,Yt.clone)(this.#f),data:t??(0,Yt.clone)(this.#n)})}getCapabilities(){return this.#h}getConstraints(){return this.#i}async applyConstraints(e={}){return this.#i=e,Promise.resolve()}getSettings(){return this.#f}remoteStop(){this.#e!=="ended"&&(this.#e="ended",this.dispatchEvent(new Ge.FakeEvent("stopped")),this.dispatchEvent(new Ge.FakeEvent("ended")))}remoteMute(){this.#t||(this.#t=!0,this.dispatchEvent(new Ge.FakeEvent("mute")))}remoteUnmute(){this.#t&&(this.#t=!1,this.dispatchEvent(new Ge.FakeEvent("unmute")))}};Jt.FakeMediaStreamTrack=Zr});var Wi=T(Xt=>{"use strict";Object.defineProperty(Xt,"__esModule",{value:!0});Xt.FakeEventTarget=void 0;var es=class{listeners={};addEventListener(e,t,r){t&&(this.listeners[e]=this.listeners[e]??[],this.listeners[e].push({callback:typeof t=="function"?t:t.handleEvent,once:typeof r=="object"&&r.once===!0}))}removeEventListener(e,t,r){this.listeners[e]&&t&&(this.listeners[e]=this.listeners[e].filter(i=>i.callback!==(typeof t=="function"?t:t.handleEvent)))}dispatchEvent(e){if(!e||typeof e.type!="string")throw new Error("invalid event object");let t=this.listeners[e.type];if(!t)return!0;for(let r of[...t]){try{r.callback.call(this,e)}catch(i){setTimeout(()=>{throw i},0)}r.once&&this.removeEventListener(e.type,r.callback)}return!e.defaultPrevented}};Xt.FakeEventTarget=es});var Gi=T(er=>{"use strict";Object.defineProperty(er,"__esModule",{value:!0});er.FakeHandler=void 0;var oc=Ui(),cc=W(),dc=q(),Ke=ve(),ts=te(),Vi=G(),pc=Wi(),j=new dc.Logger("FakeHandler"),Hi="FakeHandler",rs=class s extends cc.EnhancedEventEmitter{_closed=!1;_fakeParameters;_getSendExtendedRtpCapabilities;_cname=`CNAME-${Ke.generateRandomNumber()}`;_defaultSendStreamId=`${Ke.generateRandomNumber()}`;_transportReady=!1;_nextLocalId=1;_tracks=new Map;_nextSctpStreamId=0;static createFactory(e){return{name:Hi,factory:t=>new s(t,e),getNativeRtpCapabilities:async({direction:t})=>(j.debug("getNativeRtpCapabilities() [direction:%o]",t),s.getLocalRtpCapabilities(e)),getNativeSctpCapabilities:async()=>(j.debug("getNativeSctpCapabilities()"),e.generateNativeSctpCapabilities())}}static getLocalRtpCapabilities(e){let t=e.generateNativeRtpCapabilities();return ts.validateAndNormalizeRtpCapabilities(t),t}constructor({getSendExtendedRtpCapabilities:e},t){super(),j.debug("constructor()"),this._getSendExtendedRtpCapabilities=e,this._fakeParameters=t}get name(){return Hi}close(){j.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(),j.debug("updateIceServers()")}async restartIce(e){this.assertNotClosed(),j.debug("restartIce()")}async getTransportStats(){return this.assertNotClosed(),new Map}async send({track:e,streamId:t,encodings:r,codecOptions:i,codec:n}){this.assertNotClosed(),j.debug("send() [kind:%s, track.id:%s]",e.kind,e.id),this._transportReady||await this.setupTransport({localDtlsRole:"server"});let a=s.getLocalRtpCapabilities(this._fakeParameters),o=this._getSendExtendedRtpCapabilities(a),c=ts.getSendingRtpParameters(e.kind,o);c.codecs=ts.reduceCodecs(c.codecs,n);let d=c.codecs.some(l=>/.+\/rtx$/i.test(l.mimeType));c.mid=`mid-${Ke.generateRandomNumber()}`,c.msid=`${t??"-"} ${e.id}`,r||(r=[{}]);for(let l of r)l.ssrc=Ke.generateRandomNumber(),d&&(l.rtx={ssrc:Ke.generateRandomNumber()});c.encodings=r,c.rtcp={cname:this._cname,reducedSize:!0,mux:!0},c.msid=`${t??this._defaultSendStreamId} ${e.id}`;let p=this._nextLocalId++;return this._tracks.set(p,e),{localId:String(p),rtpParameters:c}}async stopSending(e){if(j.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?j.debug("replaceTrack() [localId:%s, track.id:%s]",e,t.id):j.debug("replaceTrack() [localId:%s, no track]",e),this._tracks.delete(Number(e)),this._tracks.set(Number(e),t)}async setMaxSpatialLayer(e,t){this.assertNotClosed(),j.debug("setMaxSpatialLayer() [localId:%s, spatialLayer:%s]",e,t)}async setRtpEncodingParameters(e,t){this.assertNotClosed(),j.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"}),j.debug("sendDataChannel()");let t=new Zt({id:this._nextSctpStreamId++,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:e.label,protocol:e.protocol}),r={streamId:this._nextSctpStreamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits};return{dataChannel:t,sctpStreamParameters:r}}async receive(e){this.assertNotClosed();let t=[];for(let r of e){let{trackId:i,kind:n}=r;this._transportReady||await this.setupTransport({localDtlsRole:"client"}),j.debug("receive() [trackId:%s, kind:%s]",i,n);let a=this._nextLocalId++,o=new oc.FakeMediaStreamTrack({kind:n});this._tracks.set(a,o),t.push({localId:String(a),track:o})}return t}async stopReceiving(e){if(!this._closed)for(let t of e)j.debug("stopReceiving() [localId:%s]",t),this._tracks.delete(Number(t))}async pauseReceiving(e){this.assertNotClosed()}async resumeReceiving(e){this.assertNotClosed()}async getReceiverStats(e){return this.assertNotClosed(),new Map}async receiveDataChannel({sctpStreamParameters:e,label:t,protocol:r}){return this.assertNotClosed(),this._transportReady||await this.setupTransport({localDtlsRole:"client"}),j.debug("receiveDataChannel()"),{dataChannel:new Zt({id:e.streamId,ordered:e.ordered,maxPacketLifeTime:e.maxPacketLifeTime,maxRetransmits:e.maxRetransmits,label:t,protocol:r})}}getDataChannelMaxMessageSize(){return 5e5}async setupTransport({localDtlsRole:e,localSdpObject:t}){let r=Ke.clone(this._fakeParameters.generateLocalDtlsParameters());e&&(r.role=e),this.emit("@connectionstatechange","connecting"),await new Promise((i,n)=>this.emit("@connect",{dtlsParameters:r},i,n)),this._transportReady=!0}assertNotClosed(){if(this._closed)throw new Vi.InvalidStateError("method called in a closed handler")}};er.FakeHandler=rs;var Zt=class extends pc.FakeEventTarget{_id;_negotiated=!0;_ordered;_maxPacketLifeTime;_maxRetransmits;_label;_protocol;_readyState="connecting";_bufferedAmount=0;_bufferedAmountLowThreshold=0;_binaryType="arraybuffer";_onopen=null;_onclosing=null;_onclose=null;_onmessage=null;_onbufferedamountlow=null;_onerror=null;constructor({id:e,ordered:t=!0,maxPacketLifeTime:r=null,maxRetransmits:i=null,label:n="",protocol:a=""}){super(),j.debug(`constructor() [id:${e}, ordered:${t}, maxPacketLifeTime:${r}, maxRetransmits:${i}, label:${n}, protocol:${a}`),this._id=e,this._ordered=t,this._maxPacketLifeTime=r,this._maxRetransmits=i,this._label=n,this._protocol=a}get id(){return this._id}get negotiated(){return this._negotiated}get ordered(){return this._ordered}get maxPacketLifeTime(){return this._maxPacketLifeTime}get maxRetransmits(){return this._maxRetransmits}get label(){return this._label}get protocol(){return this._protocol}get readyState(){return this._readyState}get bufferedAmount(){return this._bufferedAmount}get bufferedAmountLowThreshold(){return this._bufferedAmountLowThreshold}set bufferedAmountLowThreshold(e){this._bufferedAmountLowThreshold=e}get binaryType(){return this._binaryType}set binaryType(e){this._binaryType=e}get onopen(){return this._onopen}set onopen(e){this._onopen&&this.removeEventListener("open",this._onopen),this._onopen=e,e&&this.addEventListener("open",e)}get onclosing(){return this._onclosing}set onclosing(e){this._onclosing&&this.removeEventListener("closing",this._onclosing),this._onclosing=e,e&&this.addEventListener("closing",e)}get onclose(){return this._onclose}set onclose(e){this._onclose&&this.removeEventListener("close",this._onclose),this._onclose=e,e&&this.addEventListener("close",e)}get onmessage(){return this._onmessage}set onmessage(e){this._onmessage&&this.removeEventListener("message",this._onmessage),this._onmessage=e,e&&this.addEventListener("message",e)}get onbufferedamountlow(){return this._onbufferedamountlow}set onbufferedamountlow(e){this._onbufferedamountlow&&this.removeEventListener("bufferedamountlow",this._onbufferedamountlow),this._onbufferedamountlow=e,e&&this.addEventListener("bufferedamountlow",e)}get onerror(){return this._onerror}set onerror(e){this._onerror&&this.removeEventListener("error",this._onerror),this._onerror=e,e&&this.addEventListener("error",e)}addEventListener(e,t,r){super.addEventListener(e,t,r)}removeEventListener(e,t,r){super.removeEventListener(e,t,r)}close(){["closing","closed"].includes(this._readyState)||(this._readyState="closed")}send(e){if(this._readyState!=="open")throw new Vi.InvalidStateError("not open")}}});var Ki=T(ee=>{"use strict";Object.defineProperty(ee,"__esModule",{value:!0});ee.generateRouterRtpCapabilities=lc;ee.generateNativeRtpCapabilities=uc;ee.generateNativeSctpCapabilities=hc;ee.generateLocalDtlsParameters=fc;ee.generateTransportRemoteParameters=mc;ee.generateProducerRemoteParameters=gc;ee.generateConsumerRemoteParameters=_c;ee.generateDataProducerRemoteParameters=vc;ee.generateDataConsumerRemoteParameters=wc;var z=ve();function V(){return String(z.generateRandomNumber())}function lc(){return z.deepFreeze({codecs:[{mimeType:"audio/opus",kind:"audio",preferredPayloadType:100,clockRate:48e3,channels:2,rtcpFeedback:[{type:"transport-cc"}],parameters:{useinbandfec:1,foo:"bar"}},{mimeType:"video/VP8",kind:"video",preferredPayloadType:101,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"x-google-start-bitrate":1500}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:102,clockRate:9e4,rtcpFeedback:[],parameters:{apt:101}},{mimeType:"video/H264",kind:"video",preferredPayloadType:103,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"level-asymmetry-allowed":1,"packetization-mode":1,"profile-level-id":"42e01f"}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:104,clockRate:9e4,rtcpFeedback:[],parameters:{apt:103}},{mimeType:"video/VP9",kind:"video",preferredPayloadType:105,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"profile-id":0,"x-google-start-bitrate":1500}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:106,clockRate:9e4,rtcpFeedback:[],parameters:{apt:105}}],headerExtensions:[{kind:"audio",uri:"urn:ietf:params:rtp-hdrext:sdes:mid",preferredId:1,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:mid",preferredId:1,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id",preferredId:2,preferredEncrypt:!1,direction:"recvonly"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id",preferredId:3,preferredEncrypt:!1,direction:"recvonly"},{kind:"audio",uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",preferredId:4,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",preferredId:4,preferredEncrypt:!1,direction:"sendrecv"},{kind:"audio",uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",preferredId:5,preferredEncrypt:!1,direction:"recvonly"},{kind:"video",uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",preferredId:5,preferredEncrypt:!1,direction:"sendrecv"},{kind:"audio",uri:"urn:ietf:params:rtp-hdrext:ssrc-audio-level",preferredId:10,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:3gpp:video-orientation",preferredId:11,preferredEncrypt:!1,direction:"sendrecv"},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:toffset",preferredId:12,preferredEncrypt:!1,direction:"sendrecv"}]})}function uc(){return{codecs:[{mimeType:"audio/opus",kind:"audio",preferredPayloadType:111,clockRate:48e3,channels:2,rtcpFeedback:[{type:"transport-cc"}],parameters:{minptime:10,useinbandfec:1}},{mimeType:"audio/ISAC",kind:"audio",preferredPayloadType:103,clockRate:16e3,channels:1,rtcpFeedback:[{type:"transport-cc"}],parameters:{}},{mimeType:"audio/CN",kind:"audio",preferredPayloadType:106,clockRate:32e3,channels:1,rtcpFeedback:[{type:"transport-cc"}],parameters:{}},{mimeType:"audio/foo",kind:"audio",preferredPayloadType:107,clockRate:9e4,channels:4,rtcpFeedback:[{type:"foo-qwe-qwe"}],parameters:{foo:"lalala"}},{mimeType:"video/BAZCODEC",kind:"video",preferredPayloadType:100,clockRate:9e4,rtcpFeedback:[{type:"foo"},{type:"transport-cc"},{type:"ccm",parameter:"fir"},{type:"nack"},{type:"nack",parameter:"pli"}],parameters:{baz:"1234abcd"}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:101,clockRate:9e4,rtcpFeedback:[],parameters:{apt:100}},{mimeType:"video/VP8",kind:"video",preferredPayloadType:96,clockRate:9e4,rtcpFeedback:[{type:"goog-remb"},{type:"transport-cc"},{type:"ccm",parameter:"fir"},{type:"nack"},{type:"nack",parameter:"pli"}],parameters:{baz:"1234abcd"}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:97,clockRate:9e4,rtcpFeedback:[],parameters:{apt:96}},{mimeType:"video/VP9",kind:"video",preferredPayloadType:98,clockRate:9e4,rtcpFeedback:[{type:"goog-remb"},{type:"transport-cc"},{type:"ccm",parameter:"fir"},{type:"nack"},{type:"nack",parameter:"pli"}],parameters:{"profile-id":0}},{mimeType:"video/rtx",kind:"video",preferredPayloadType:99,clockRate:9e4,rtcpFeedback:[],parameters:{apt:98}}],headerExtensions:[{kind:"audio",uri:"urn:ietf:params:rtp-hdrext:sdes:mid",preferredId:1},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:sdes:mid",preferredId:1},{kind:"video",uri:"urn:ietf:params:rtp-hdrext:toffset",preferredId:2},{kind:"video",uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",preferredId:3},{kind:"video",uri:"urn:3gpp:video-orientation",preferredId:4},{kind:"video",uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",preferredId:5},{kind:"video",uri:"http://www.webrtc.org/experiments/rtp-hdrext/playout-delay",preferredId:6},{kind:"video",uri:"http://www.webrtc.org/experiments/rtp-hdrext/video-content-type",preferredId:7},{kind:"video",uri:"http://www.webrtc.org/experiments/rtp-hdrext/video-timing",preferredId:8},{kind:"audio",uri:"urn:ietf:params:rtp-hdrext:ssrc-audio-level",preferredId:10}]}}function hc(){return z.deepFreeze({numStreams:{OS:2048,MIS:2048}})}function fc(){return z.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 mc(){return{id:V(),iceParameters:z.deepFreeze({iceLite:!0,password:"yku5ej8nvfaor28lvtrabcx0wkrpkztz",usernameFragment:"h3hk1iz6qqlnqlne"}),iceCandidates:z.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:z.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:z.deepFreeze({port:5e3,OS:2048,MIS:2048,maxMessageSize:2e6})}}function gc(){return z.deepFreeze({id:V()})}function _c({id:s,codecMimeType:e}={}){switch(e){case"audio/opus":return{id:s??V(),producerId:V(),kind:"audio",rtpParameters:z.deepFreeze({codecs:[{mimeType:"audio/opus",payloadType:100,clockRate:48e3,channels:2,rtcpFeedback:[{type:"transport-cc"}],parameters:{useinbandfec:1,foo:"bar"}}],encodings:[{ssrc:46687003}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:ietf:params:rtp-hdrext:ssrc-audio-level",id:10}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"audio/ISAC":return{id:s??V(),producerId:V(),kind:"audio",rtpParameters:z.deepFreeze({codecs:[{mimeType:"audio/ISAC",payloadType:111,clockRate:16e3,channels:1,rtcpFeedback:[{type:"transport-cc"}],parameters:{}}],encodings:[{ssrc:46687004}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"video/VP8":return{id:s??V(),producerId:V(),kind:"video",rtpParameters:z.deepFreeze({codecs:[{mimeType:"video/VP8",payloadType:101,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"x-google-start-bitrate":1500}},{mimeType:"video/rtx",payloadType:102,clockRate:9e4,rtcpFeedback:[],parameters:{apt:101}}],encodings:[{ssrc:99991111,rtx:{ssrc:99991112}}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",id:4},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:3gpp:video-orientation",id:11},{uri:"urn:ietf:params:rtp-hdrext:toffset",id:12}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};case"video/H264":return{id:s??V(),producerId:V(),kind:"video",rtpParameters:z.deepFreeze({codecs:[{mimeType:"video/H264",payloadType:103,clockRate:9e4,rtcpFeedback:[{type:"nack"},{type:"nack",parameter:"pli"},{type:"ccm",parameter:"fir"},{type:"goog-remb"},{type:"transport-cc"}],parameters:{"level-asymmetry-allowed":1,"packetization-mode":1,"profile-level-id":"42e01f"}},{mimeType:"video/rtx",payloadType:104,clockRate:9e4,rtcpFeedback:[],parameters:{apt:103}}],encodings:[{ssrc:99991113,rtx:{ssrc:99991114}}],headerExtensions:[{uri:"urn:ietf:params:rtp-hdrext:sdes:mid",id:1},{uri:"http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time",id:4},{uri:"http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01",id:5},{uri:"urn:3gpp:video-orientation",id:11},{uri:"urn:ietf:params:rtp-hdrext:toffset",id:12}],rtcp:{cname:"wB4Ql4lrsxYLjzuN",reducedSize:!0,mux:!0}})};default:throw new TypeError(`unknown codecMimeType '${e}'`)}}function vc(){return z.deepFreeze({id:V()})}function wc({id:s}={}){return{id:s??V(),dataProducerId:V(),sctpStreamParameters:z.deepFreeze({streamId:666,maxPacketLifeTime:5e3,maxRetransmits:void 0})}}});var jr=T(M=>{"use strict";Object.defineProperty(M,"__esModule",{value:!0});M.debug=M.testFakeParameters=M.FakeHandler=M.enhancedEvents=M.ortc=M.parseScalabilityMode=M.detectDeviceAsync=M.detectDevice=M.Device=M.version=M.types=void 0;var yc=Xe();M.debug=yc.default;M.types=ws();M.version="3.20.0";var ss=Ni();Object.defineProperty(M,"Device",{enumerable:!0,get:function(){return ss.Device}});Object.defineProperty(M,"detectDevice",{enumerable:!0,get:function(){return ss.detectDevice}});Object.defineProperty(M,"detectDeviceAsync",{enumerable:!0,get:function(){return ss.detectDeviceAsync}});var bc=Se();Object.defineProperty(M,"parseScalabilityMode",{enumerable:!0,get:function(){return bc.parse}});M.ortc=te();M.enhancedEvents=W();var Sc=Gi();Object.defineProperty(M,"FakeHandler",{enumerable:!0,get:function(){return Sc.FakeHandler}});M.testFakeParameters=Ki()});var Yi=T((Fd,is)=>{"use strict";var Cc=Object.prototype.hasOwnProperty,B="~";function ft(){}Object.create&&(ft.prototype=Object.create(null),new ft().__proto__||(B=!1));function Rc(s,e,t){this.fn=s,this.context=e,this.once=t||!1}function Qi(s,e,t,r,i){if(typeof t!="function")throw new TypeError("The listener must be a function");var n=new Rc(t,r||s,i),a=B?B+e:e;return s._events[a]?s._events[a].fn?s._events[a]=[s._events[a],n]:s._events[a].push(n):(s._events[a]=n,s._eventsCount++),s}function tr(s,e){--s._eventsCount===0?s._events=new ft:delete s._events[e]}function F(){this._events=new ft,this._eventsCount=0}F.prototype.eventNames=function(){var e=[],t,r;if(this._eventsCount===0)return e;for(r in t=this._events)Cc.call(t,r)&&e.push(B?r.slice(1):r);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};F.prototype.listeners=function(e){var t=B?B+e:e,r=this._events[t];if(!r)return[];if(r.fn)return[r.fn];for(var i=0,n=r.length,a=new Array(n);i<n;i++)a[i]=r[i].fn;return a};F.prototype.listenerCount=function(e){var t=B?B+e:e,r=this._events[t];return r?r.fn?1:r.length:0};F.prototype.emit=function(e,t,r,i,n,a){var o=B?B+e:e;if(!this._events[o])return!1;var c=this._events[o],d=arguments.length,p,l;if(c.fn){switch(c.once&&this.removeListener(e,c.fn,void 0,!0),d){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,t),!0;case 3:return c.fn.call(c.context,t,r),!0;case 4:return c.fn.call(c.context,t,r,i),!0;case 5:return c.fn.call(c.context,t,r,i,n),!0;case 6:return c.fn.call(c.context,t,r,i,n,a),!0}for(l=1,p=new Array(d-1);l<d;l++)p[l-1]=arguments[l];c.fn.apply(c.context,p)}else{var u=c.length,f;for(l=0;l<u;l++)switch(c[l].once&&this.removeListener(e,c[l].fn,void 0,!0),d){case 1:c[l].fn.call(c[l].context);break;case 2:c[l].fn.call(c[l].context,t);break;case 3:c[l].fn.call(c[l].context,t,r);break;case 4:c[l].fn.call(c[l].context,t,r,i);break;default:if(!p)for(f=1,p=new Array(d-1);f<d;f++)p[f-1]=arguments[f];c[l].fn.apply(c[l].context,p)}}return!0};F.prototype.on=function(e,t,r){return Qi(this,e,t,r,!1)};F.prototype.once=function(e,t,r){return Qi(this,e,t,r,!0)};F.prototype.removeListener=function(e,t,r,i){var n=B?B+e:e;if(!this._events[n])return this;if(!t)return tr(this,n),this;var a=this._events[n];if(a.fn)a.fn===t&&(!i||a.once)&&(!r||a.context===r)&&tr(this,n);else{for(var o=0,c=[],d=a.length;o<d;o++)(a[o].fn!==t||i&&!a[o].once||r&&a[o].context!==r)&&c.push(a[o]);c.length?this._events[n]=c.length===1?c[0]:c:tr(this,n)}return this};F.prototype.removeAllListeners=function(e){var t;return e?(t=B?B+e:e,this._events[t]&&tr(this,t)):(this._events=new ft,this._eventsCount=0),this};F.prototype.off=F.prototype.removeListener;F.prototype.addListener=F.prototype.on;F.prefixed=B;F.EventEmitter=F;typeof is<"u"&&(is.exports=F)});var Hc={};kn(Hc,{ChannelMultiplexer:()=>Qe,DOC_SYNC_WIRE_CONTRACT_VERSION:()=>ds,DeferredChannelMultiplexer:()=>rr,DeferredDocConnector:()=>or,LoopbackStreamData:()=>nr,SessionDocumentImpl:()=>dr,TransportSession:()=>ar,createPresence:()=>Sn,createWebsocketDocConnector:()=>yn,deriveYjsServerUrl:()=>wn,ensureNodeWebRTC:()=>ir,isNodeRuntime:()=>Ye,nodeMediasoupHandlerName:()=>sr,streamDataLabel:()=>_n,transportStreamData:()=>nn});module.exports=Pn(Hc);var gn=pr(jr());var ns=pr(Yi(),1);var Qe=class{_handlers=new Map;_ws;_onMessage;_onOpen;_listeningForOpen=!1;_pendingSends=[];_disposed=!1;constructor(e){this._ws=e,this._onMessage=t=>{if(typeof t.data!="string")return;let r;try{r=JSON.parse(t.data)}catch{console.warn("[ChannelMultiplexer] Failed to parse WebSocket message as JSON");return}if(!r.channel)return;let i=this._handlers.get(r.channel);if(i)for(let n of i)n(r)},this._ws.addEventListener("message",this._onMessage),this._onOpen=()=>{this.flushPendingSends()}}on(e,t){let r=this._handlers.get(e);return r||(r=new Set,this._handlers.set(e,r)),r.add(t),()=>{r.delete(t),r.size===0&&this._handlers.delete(e)}}emit(e,t){if(this._disposed)return;let r=JSON.stringify({channel:e,...t});if(this._ws.readyState===WebSocket.OPEN){this._ws.send(r);return}this._ws.readyState===WebSocket.CONNECTING&&(this._pendingSends.push(r),this.listenForOpen())}dispose(){this._disposed=!0,this._pendingSends=[],this._handlers.clear(),this._ws.removeEventListener("message",this._onMessage),this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1}flushPendingSends(){if(this._disposed||this._ws.readyState!==WebSocket.OPEN)return;this._ws.removeEventListener("open",this._onOpen),this._listeningForOpen=!1;let e=this._pendingSends;this._pendingSends=[];for(let t of e)this._ws.send(t)}listenForOpen(){this._listeningForOpen||(this._listeningForOpen=!0,this._ws.addEventListener("open",this._onOpen))}},rr=class{_handlers=new Map;_pendingSends=[];_target=null;_targetUnsubscribes=[];_disposed=!1;setTarget(e){if(this._disposed)return;this.detachTarget(),this._target=e;for(let[r,i]of this._handlers)for(let n of i)this._targetUnsubscribes.push(e.on(r,n));let t=this._pendingSends;this._pendingSends=[];for(let r of t)e.emit(r.channel,r.data)}rewriteSessionChannels(e,t){if(e===t)return;let r=`session:${e}:`,i=`session:${t}:`,n=new Map;for(let[a,o]of this._handlers)n.set(a.startsWith(r)?i+a.slice(r.length):a,o);this._handlers=n,this._pendingSends=this._pendingSends.map(a=>({...a,channel:a.channel.startsWith(r)?i+a.channel.slice(r.length):a.channel}))}on(e,t){if(this._disposed)return()=>{};let r=this._handlers.get(e);r||(r=new Set,this._handlers.set(e,r)),r.add(t);let i=this._target?.on(e,t);return i&&this._targetUnsubscribes.push(i),()=>{r?.delete(t),r?.size===0&&this._handlers.delete(e),i?.(),i&&(this._targetUnsubscribes=this._targetUnsubscribes.filter(n=>n!==i))}}emit(e,t){if(!this._disposed){if(this._target){this._target.emit(e,t);return}this._pendingSends.push({channel:e,data:t})}}dispose(){this._disposed=!0,this._pendingSends=[],this._handlers.clear(),this.detachTarget()}detachTarget(){for(let e of this._targetUnsubscribes)e();this._targetUnsubscribes=[],this._target=null}};function Ye(){return typeof window>"u"&&typeof process<"u"&&process.versions!=null&&process.versions.node!=null}function sr(){return Ye()?"Chrome111":void 0}function ir(){if(!Ye())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 Ji="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";function Tc(s){let e=globalThis.crypto,t=new Uint8Array(s);if(e?.getRandomValues)return e.getRandomValues(t),t;for(let r=0;r<s;r++)t[r]=Math.floor(Math.random()*256);return t}function Xi(s=16){let e=Tc(s),t="";for(let r=0;r<s;r++)t+=Ji[e[r]%Ji.length];return t}function Zi(s){return`stream:${s}`}var en="urun-stream-v1";var as=1,le={BINARY:0,TEXT:1,JSON:2,END:3},tn=Symbol("urun:stream:end");function rn(s){if(s===tn)return Uint8Array.from([as,le.END]);let e,t;s instanceof Uint8Array?(e=le.BINARY,t=s):s instanceof ArrayBuffer?(e=le.BINARY,t=new Uint8Array(s)):typeof s=="string"?(e=le.TEXT,t=new TextEncoder().encode(s)):(e=le.JSON,t=new TextEncoder().encode(JSON.stringify(s)));let r=new Uint8Array(2+t.length);return r[0]=as,r[1]=e,r.set(t,2),r}function sn(s){let e=s instanceof Uint8Array?s:new Uint8Array(s);if(e.length<2||e[0]!==as)throw new Error(`[urun] bad stream envelope (version=${e[0]}, len=${e.length})`);let t=e[1],r=e.subarray(2);switch(t){case le.BINARY:return r.slice();case le.TEXT:return new TextDecoder().decode(r);case le.JSON:return JSON.parse(new TextDecoder().decode(r));case le.END:return tn;default:throw new Error(`[urun] unknown stream envelope KIND 0x${t.toString(16)}`)}}var nr=class{consumerId;_handlers=new Map;constructor(e="loopback"){this.consumerId=e}onData(e,t){let r=this._handlers.get(e);return r||(r=new Set,this._handlers.set(e,r)),r.add(t),()=>r.delete(t)}sendData(e,t,r={}){r.to&&(r.to,this.consumerId);for(let i of this._handlers.get(e)??[])i(t);return Promise.resolve()}};function nn(s){return{get consumerId(){return s.consumerId},onData(e,t){return s.onStreamData(e,t)},sendData(e,t,r){return s.sendStreamData(e,t,r)}}}function an(s){if(!s)return!1;let e=typeof s=="string"?s:s.name;return e==="queued"||e==="unavailable"||e==="provisioning"}var on=[1e3,2e3,4e3,8e3,3e4],cn=5,Ec=15e3,dn=15e3,pn=15e3,xc=2e3,kc=6e3,Pc=2,Dc=750,Ic=3,ln=[1e3,2e3,4e3],Lc=15e3;function _n(s){return`stream:${s}`}var Mc={queued:"queued",pending:"provisioning",allocating:"provisioning",provisioning:"provisioning",allocated:"connecting",connecting:"connecting",live:"live",running:"live",error:"error",failed:"error",rejected:"error",expired:"error",cancelled:"ended",canceled:"ended",closed:"ended"},un=3,hn=4e3,fn=[{urls:"stun:stun.l.google.com:19302"},{urls:"stun:stun1.l.google.com:19302"}],ar=class{_state="disconnected";_sessionId=null;_tracks=new Map;_tracksByName=new Map;_options;_emitter=new ns.default;_ws=null;_device=null;_recvTransport=null;_sendTransport=null;_consumers=new Map;_audioProducer=null;_videoProducer=null;_pendingProduce=null;_multiplexer=null;_reconnectAttempts=0;_intentionalDisconnect=!1;_reconnectTimer=null;_cancelPendingDial=null;_stableResetTimer=null;_generation=0;_lastStartOptions;_resolveConnection=null;_recvIceRestartAttempts=0;_recvIceRestartTimer=null;_sendIceRestartAttempts=0;_sendIceRestartTimer=null;_phase={name:"idle"};_requestId;_liveReached=!1;_lastServerStatus;_forceResolveOnNextConnect=!1;_connectStartedAt;_wakingSince;_mediaMonitorTimer=null;_lastInboundTotal=0;_mediaEverFlowed=!1;_lastInboundAdvanceAt=0;_mediaDeathHandled=!1;_decodeSignalSeen=!1;_lastFramesDecoded=0;_lastDecodeAdvanceAt=0;_decodeDeathHandled=!1;_currentEpoch=0;_consumerId=null;_pendingStreamSubscribes=new Set;_streamDataHandlers=new Map;_dataProducers=new Map;_dataProducerPromises=new Map;_dataConsumers=new Map;_pendingDataProduce=new Map;_sendTransportWaiters=[];get consumerId(){return this._consumerId===null&&(this._consumerId=Oc()),this._consumerId}get state(){return this._state}get currentIncarnation(){return this._currentEpoch}get phase(){return this._phase}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._phase.queue&&(e.queue=this._phase.queue),this._phase.runtime&&(e.runtime=this._phase.runtime),this._phase.wakingSince!==void 0&&(e.wakingSince=this._phase.wakingSince),this._phase.error&&(e.error=this._phase.error),e}get sessionId(){return this._sessionId}get tracks(){return this._tracks}get multiplexer(){return this._multiplexer}get isOpen(){return this._ws?.readyState===WebSocket.OPEN}getTrackByName(e){let t=this._tracksByName.get(e);if(t&&t.readyState!=="ended")return t;for(let r of this._tracks.values())if(r.kind===e&&r.readyState!=="ended")return r;return t}setAuth(e){this._options={...this._options,...e},this.isOpen&&this._send({type:"auth",orgId:this._options.orgId,jwt:this._options.jwt,authProvider:this._options.authProvider})}constructor(e){this._options=e??{url:""},e?.sessionId&&(this._sessionId=e.sessionId)}setConnection(e){if(this.isOpen)throw new Error("TransportSession: cannot change connection while connected");this._options={...this._options,...e},e.sessionId&&(this._sessionId=e.sessionId)}setConnectionResolver(e){this._resolveConnection=e}applyControlDocState(e){let t=e&&typeof e=="object"?e.session:void 0,r=Nc(t);if(r!==void 0&&this.setIncarnation(r),!t||typeof t!="object")return;let i=t,n=typeof i.status=="string"?i.status:void 0;if(n&&!(this._phase.name==="error"||this._phase.name==="ended")&&!this.isStaleClosedMarker(i))if(n==="error"){let a=i.error_reason??i.errorReason,o=typeof a=="string"&&a?a:"session failed";this._setPhase("error",{error:{reason:o,code:"runtime-failed",kind:"runtime-failed"}})}else(n==="closed"||n==="ended")&&this._setPhase("ended")}setIncarnation(e){if(!Number.isFinite(e)||e<=this._currentEpoch)return;let t=this._currentEpoch>0,r=this._state==="connected";this._currentEpoch=e,t&&r&&!this._intentionalDisconnect&&this._renegotiate()}isStaleIncarnation(e){return Number.isFinite(e)?e<this._currentEpoch:!1}isStaleClosedMarker(e){if(!e)return!1;let t=typeof e.status=="string"?e.status:void 0;if(t!=="closed"&&t!=="ended"&&t!=="error")return!1;let r=e.status_epoch??e.statusEpoch,i=typeof r=="number"?r:Number(r);return Number.isFinite(i)?i<this._currentEpoch:!1}async connect(e){this._lastStartOptions=e,this._intentionalDisconnect=!1,(this._phase.name==="ended"||this._phase.name==="error")&&(this._phase={name:"idle"}),this._connectStartedAt??=Date.now(),this._cancelPendingDial?.(new Error("TransportSession: connect superseded by a newer connect()"));let t=++this._generation,r=this._state==="reconnecting"||this._state==="renegotiating";r||this._setState("connecting");let i=null,n=()=>t!==this._generation||this._intentionalDisconnect,a=()=>{if(n())throw new Error("TransportSession: connect cancelled")},o=async()=>{for(let l of this._connectUrls()){a();try{return await this._connectOnce(l,t,e),!0}catch(u){i=u instanceof Error?u:new Error(String(u)),n()||this._cleanupSocket()}}return!1},c=this._forceResolveOnNextConnect&&this._resolveConnection!==null;this._forceResolveOnNextConnect=!1;let d=c?0:this._resolveConnection?Pc:1;for(let l=0;l<d;l++)if(l>0&&(await mn(Dc),a()),await o())return;if(this._resolveConnection)for(let l=0;l<Ic;l++){this._setState("reconnecting"),await mn(ln[Math.min(l,ln.length-1)]),a();try{let u=await this._resolveConnection();a(),this.setAuth({jwt:u.jwt??this._options.jwt,authProvider:this._options.authProvider,orgId:this._options.orgId}),this.setConnection({url:u.url,sessionId:u.sessionId,iceServers:u.iceServers??this._options.iceServers})}catch(u){if(n())throw new Error("TransportSession: connect cancelled");i=u instanceof Error?u:new Error(String(u));continue}if(await o())return}if(n())throw i??new Error("TransportSession: connect cancelled");this._setState("failed");let p=i??new Error("TransportSession: connect failed");throw r||this._emitError(p),p}disconnect(){if(this._generation+=1,this._intentionalDisconnect=!0,this._cancelPendingDial?.(new Error("TransportSession: connect cancelled by disconnect()")),this._stopMediaMonitor(),this._reconnectTimer&&(clearTimeout(this._reconnectTimer),this._reconnectTimer=null),this._clearReconnectBudgetReset(),this._reconnectAttempts=0,this._audioProducer){this._send({type:"stopAudio"});try{this._audioProducer.close()}catch{}this._audioProducer=null}if(this._videoProducer){this._send({type:"stopVideo"});try{this._videoProducer.close()}catch{}this._videoProducer=null}for(let e of this._consumers.values())try{e.close()}catch{}if(this._consumers.clear(),this._cleanupDataChannels(),this._settleSendTransportWaiters(null,new Error("[urun] sendStreamData: transport disconnected before the send transport arrived")),this._sendTransport){try{this._sendTransport.close()}catch{}this._sendTransport=null}if(this._recvTransport){try{this._recvTransport.close()}catch{}this._recvTransport=null}if(this._pendingProduce&&(clearTimeout(this._pendingProduce.timeoutId),this._pendingProduce.reject(new Error("TransportSession: disconnected")),this._pendingProduce=null),this._device=null,this._multiplexer&&(this._multiplexer.dispose(),this._multiplexer=null),this._ws){let e=this._ws;this._ws=null;try{e.close(1e3,"intentional disconnect")}catch{}}this._tracks.clear(),this._tracksByName.clear(),this._setState("disconnected"),this._liveReached=!1,this._setPhase("ended"),this._emitter.emit("disconnected")}on(e,t){return this._emitter.on(e,t),()=>{this._emitter.off(e,t)}}sendInput(e,t){this._send({type:"input",data:e,sequence:t})}onStreamData(e,t){let r=this._streamDataHandlers.get(e);return r||(r=new Set,this._streamDataHandlers.set(e,r)),r.add(t),()=>{let i=this._streamDataHandlers.get(e);i?.delete(t),i&&i.size===0&&this._streamDataHandlers.delete(e)}}sendStreamData(e,t,r){return this._ensureDataProducer(e).then(i=>{i.send(rn(t))})}_awaitSendTransport(){return this._sendTransport?Promise.resolve(this._sendTransport):new Promise((e,t)=>{let r={resolve:n=>{clearTimeout(i),e(n)},reject:n=>{clearTimeout(i),t(n)}},i=setTimeout(()=>{let n=this._sendTransportWaiters.indexOf(r);n>=0&&this._sendTransportWaiters.splice(n,1),t(new Error(`[urun] sendStreamData: no send transport after ${dn}ms (the server never offered createSendTransport \u2014 data-up produce is impossible on this leg)`))},dn);this._sendTransportWaiters.push(r)})}_settleSendTransportWaiters(e,t){let r=this._sendTransportWaiters;this._sendTransportWaiters=[];for(let i of r)e?i.resolve(e):i.reject(t??new Error("TransportSession: disconnected"))}_ensureDataProducer(e){let t=this._dataProducers.get(e);if(t&&!t.closed)return Promise.resolve(t);let r=this._dataProducerPromises.get(e);if(r)return r;let i=this._awaitSendTransport().then(n=>n.produceData({label:Zi(e),protocol:en,ordered:!0})).then(n=>this._awaitDataChannelOpen(n)).then(n=>(this._dataProducers.set(e,n),this._dataProducerPromises.delete(e),n)).catch(n=>{throw this._dataProducerPromises.delete(e),n});return this._dataProducerPromises.set(e,i),i}_awaitDataChannelOpen(e){if(e.closed)return Promise.reject(new Error("[urun] sendStreamData: DataProducer closed before its DataChannel opened"));let t=e.readyState;return t==="open"?Promise.resolve(e):t==="closing"||t==="closed"?Promise.reject(new Error(`[urun] sendStreamData: DataChannel is ${t} \u2014 cannot deliver data-up payloads`)):new Promise((r,i)=>{let n=()=>{d(),r(e)},a=l=>{p(new Error(`[urun] sendStreamData: DataChannel error before open: ${l.message}`))},o=()=>{d(),i(new Error("[urun] sendStreamData: DataProducer closed before its DataChannel opened"))},c=setTimeout(()=>{p(new Error(`[urun] sendStreamData: DataChannel not open after ${pn}ms (the SCTP handshake never completed \u2014 data-up produce is impossible on this channel)`))},pn),d=()=>{clearTimeout(c),e.off("open",n),e.off("error",a),e.observer.off("close",o)},p=l=>{d();try{e.close()}catch{}i(l)};e.on("open",n),e.on("error",a),e.observer.on("close",o)})}_dispatchStreamData(e,t){for(let r of this._streamDataHandlers.get(e)??[])r(t)}_streamNameFromLabel(e){if(e)return e.startsWith("stream:")?e.slice(7):void 0}async addTrack(e,t){let r=this._audioProducer;if(r&&!r.closed){if(r.track===e)return;await r.replaceTrack({track:e});return}if(!this._sendTransport)throw new Error("TransportSession: send transport not ready");this._audioProducer=await this._sendTransport.produce({track:e,codecOptions:{opusStereo:!1,opusDtx:!1,opusFec:!1},...t?{appData:{name:t}}:{}})}removeTrack(){this._audioProducer&&(this._send({type:"stopAudio"}),this._audioProducer.close(),this._audioProducer=null)}async addVideoTrack(e,t){let r=this._videoProducer;if(r&&!r.closed){await r.replaceTrack({track:e});return}if(!this._sendTransport)throw new Error("TransportSession: send transport not ready");this._videoProducer=await this._sendTransport.produce({track:e,...t?{appData:{name:t}}:{}})}stopVideo(){this._videoProducer&&(this._send({type:"stopVideo"}),this._videoProducer.close(),this._videoProducer=null)}requestDiagnostics(){this._send({type:"diagnostics"})}seekStream(e,t){this._send({type:"stream.seek",stream:e,target:t})}subscribeStream(e){this._pendingStreamSubscribes.add(e),this._sendStreamSubscribe(e)}unsubscribeStream(e){this._pendingStreamSubscribes.delete(e),this._send({t:"stream.unsubscribe",name:e,consumerId:this.consumerId})}_sendStreamSubscribe(e){this._send({t:"stream.subscribe",name:e,consumerId:this.consumerId})}_flushStreamSubscribes(){for(let e of this._pendingStreamSubscribes)this._sendStreamSubscribe(e)}async _handleMessage(e){switch(e.type){case"routerRtpCapabilities":await this._onRouterCapabilities(e.rtpCapabilities);break;case"createWebRtcTransport":await this._onCreateRecvTransport(e);break;case"createSendTransport":await this._onCreateSendTransport(e);break;case"consume":await this._onConsume(e);break;case"consumerClosed":this._closeConsumer(e.consumerId);break;case"producerClosed":this._closeConsumersByProducer(e.producerId);break;case"consumerPaused":this._consumers.get(e.consumerId)?.pause();break;case"consumerResumed":this._consumers.get(e.consumerId)?.resume();break;case"iceRestarted":this._onIceRestarted(e);break;case"produced":if(this._pendingProduce){let t=this._pendingProduce;this._pendingProduce=null,clearTimeout(t.timeoutId),t.resolve(e.id)}break;case"dataProduced":{let t=e.label,r=t?this._pendingDataProduce.get(t):void 0;r&&t&&(this._pendingDataProduce.delete(t),r.resolve(e.id));break}case"consumeData":await this._onConsumeData(e);break;case"started":this._emitter.emit("started");break;case"status":this._onStatus(e);break;case"stream.seeked":this._onStreamSeeked(e);break;case"error":this._onServerError(e);break}}_onServerError(e){let t=typeof e.message=="string"?e.message:"signaling error",r=typeof e.code=="string"?e.code:void 0;if(/connect\(\) already called/i.test(t)){if(this._resolveConnection){this._generation++;let i=this._ws;this._ws=null;try{i?.close()}catch{}this._cleanupMedia(),this._forceResolveOnNextConnect=!0,this._renegotiate();return}this._setPhase("error",{error:{reason:t,code:"transport-consumed",kind:"transport-failed"}}),this._emitter.emit("error",new Error(t));return}if(r==="TRANSPORT_BIND_FAILED"){this._emitError(new Error(t),r);return}console.warn("[urun] signaling error from server:",t)}_onStreamSeeked(e){let t=typeof e.stream=="string"?e.stream:void 0;if(!t)return;let r=e.target,i=r==="live"?"live":typeof r=="number"?r:Number(r);this._emitter.emit("seeked",t,i)}_onStatus(e){let t=e.request_id??e.requestId;t&&(this._requestId=t);let r=typeof e.status=="string"?e.status:void 0,i=(r&&Mc[r])??"provisioning",n=i==="error"||i==="ended";if(this._liveReached&&!n||this._phase.name==="error"||this._phase.name==="ended")return;r!==void 0&&(this._lastServerStatus=r);let a=e.queue_position??e.queuePosition,o=e.queue_depth??e.queueDepth,c=typeof a=="number"&&typeof o=="number";if(i==="error"){let d=typeof e.reason=="string"&&e.reason?e.reason:r??"admission failed";this._setPhase("error",{error:{reason:d,code:r,kind:r==="error"?"runtime-failed":r==="expired"?"never-live":"create-failed"}});return}if(i==="ended"){this._setPhase("ended");return}if(i==="queued"){this._setPhase("queued",c?{queue:{position:a,depth:o}}:void 0);return}if(i==="connecting"){this._setPhase("connecting");return}this._setPhase("provisioning")}async _onRouterCapabilities(e){Ye()&&await ir();let t=sr(),r=new gn.Device(t?{handlerName:t}:void 0);await r.load({routerRtpCapabilities:e}),this._device=r,this._send({type:"rtpCapabilities",rtpCapabilities:r.rtpCapabilities})}async _onCreateRecvTransport(e){this._device&&this._buildRecvTransport(e)}_buildRecvTransport(e){if(!this._device)return;let t=e.iceCandidates,r=this._device.createRecvTransport({id:e.id,iceParameters:e.iceParameters,iceCandidates:t,dtlsParameters:e.dtlsParameters,...e.sctpParameters?{sctpParameters:e.sctpParameters}:{},iceServers:this._options.iceServers??fn});this._recvIceRestartAttempts=0,this._clearRecvIceRestart();let i=this._generation;r.on("connect",({dtlsParameters:n},a,o)=>{try{this._send({type:"connectTransport",transportId:r.id,dtlsParameters:n}),a()}catch(c){o(c)}}),r.on("connectionstatechange",n=>{if(i===this._generation){if(n==="connected"){this._clearRecvIceRestart(),this._recvIceRestartAttempts=0;return}if(!(this._intentionalDisconnect&&n==="closed")&&(n==="failed"||n==="disconnected")){if(this._tryRestartRecvIce())return;n==="failed"&&this._emitError(new Error(`media transport ${n}`),n)}}}),this._recvTransport=r}_tryRestartRecvIce(){let e=this._recvTransport;return!e||e.closed?!1:this._recvIceRestartTimer?!0:this._recvIceRestartAttempts>=un?!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>=un?!1:(this._sendIceRestartAttempts++,this._armSendIceRestartWatchdog(),this._requestIceRestart(e.id),!0)}_requestIceRestart(e){this._send({type:"restartIce",transportId:e})}_onIceRestarted(e){let t=e.transportId??e.id,r=e.iceParameters;if(!r)return;let i=!!this._recvTransport&&this._recvTransport.id===t,n=!i&&!!this._sendTransport&&this._sendTransport.id===t,a=i?this._recvTransport:n?this._sendTransport:null;a&&(Promise.resolve(a.restartIce({iceParameters:r})).catch(o=>{this._emitter.emit("error",o instanceof Error?o:new Error(String(o)))}),i&&this._recvIceRestartTimer?this._armRecvIceRestartWatchdog():n&&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")},hn)}_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")},hn)}_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??fn});this._sendIceRestartAttempts=0,this._clearSendIceRestart();let r=this._generation;t.on("connect",({dtlsParameters:i},n,a)=>{try{this._send({type:"connectSendTransport",transportId:t.id,dtlsParameters:i}),n()}catch(o){a(o)}}),t.on("produce",({kind:i,rtpParameters:n,appData:a},o,c)=>{if(this._pendingProduce){c(new Error("produce already pending"));return}let d=setTimeout(()=>{let l=this._pendingProduce;!l||l.timeoutId!==d||(this._pendingProduce=null,l.reject(new Error("Produce timed out")))},15e3);this._pendingProduce={timeoutId:d,resolve:l=>{o({id:l})},reject:c};let p=a&&typeof a.name=="string"?a.name:void 0;try{this._send(p?{type:"produce",kind:i,name:p,rtpParameters:n}:{type:"produce",kind:i,rtpParameters:n})}catch(l){this._pendingProduce?.timeoutId===d&&(this._pendingProduce=null,clearTimeout(d)),c(l)}}),t.on("producedata",({sctpStreamParameters:i,label:n,protocol:a},o,c)=>{try{n&&this._pendingDataProduce.set(n,{resolve:d=>o({id:d}),reject:c}),this._send({type:"produceData",sctpStreamParameters:i,label:n,protocol:a})}catch(d){n&&this._pendingDataProduce.delete(n),c(d)}}),t.on("connectionstatechange",i=>{if(r===this._generation){if(i==="connected"){this._clearSendIceRestart(),this._sendIceRestartAttempts=0;return}this._intentionalDisconnect&&i==="closed"||(i==="failed"||i==="disconnected")&&this._trySendIceRestart()||(i==="failed"||i==="closed")&&this._emitError(new Error(`media send transport ${i}`),i)}}),this._sendTransport=t,this._settleSendTransportWaiters(t),this._emitter.emit("audioTransportReady")}async _onConsumeData(e){if(!this._recvTransport)return;let t=e.label,r=this._streamNameFromLabel(t);if(!r)return;let i=await this._recvTransport.consumeData({id:e.id,dataProducerId:e.dataProducerId,sctpStreamParameters:e.sctpStreamParameters,label:t,protocol:e.protocol});this._dataConsumers.set(r,i),this._send({type:"dataConsumerReady",id:e.id}),i.on("message",n=>{try{let a=typeof n=="string"?new TextEncoder().encode(n):new Uint8Array(n);this._dispatchStreamData(r,sn(a))}catch(a){this._emitter.emit("error",a instanceof Error?a:new Error(String(a)))}})}async _onConsume(e){if(!this._recvTransport)return;let t=this._generation,r=await this._recvTransport.consume({id:e.id,producerId:e.producerId,kind:e.kind,rtpParameters:e.rtpParameters});this._consumers.set(r.id,r),this._tracks.set(r.track.id,r.track);let i=e.streamName??e.label;i&&this._tracksByName.set(i,r.track),this._liveReached||this._setPhase("live"),this._emitter.emit("track",r.track);let n=r.id;r.track.addEventListener("ended",()=>{t!==this._generation||this._intentionalDisconnect||this._closeConsumer(n)},{once:!0}),this._send({type:"resumeConsumer",consumerId:r.id}),this._startMediaMonitor()}_closeConsumer(e){let t=this._consumers.get(e);if(!t)return;this._consumers.delete(e);let r=t.track;try{t.close()}catch{}if(r){this._tracks.delete(r.id);for(let[i,n]of this._tracksByName)n===r&&this._tracksByName.delete(i)}}_closeConsumersByProducer(e){for(let[t,r]of this._consumers)r.producerId===e&&this._closeConsumer(t)}_mediaPollMs(){let e=this._options.mediaLiveness?.pollMs;return e===void 0?xc:e}_mediaStallTimeoutMs(){let e=this._options.mediaLiveness?.stallTimeoutMs;return e===void 0?kc:e}_startMediaMonitor(){let e=this._mediaPollMs();if(e<=0||this._mediaMonitorTimer)return;this._lastInboundTotal=0,this._mediaEverFlowed=!1,this._lastInboundAdvanceAt=Date.now(),this._mediaDeathHandled=!1,this._decodeSignalSeen=!1,this._lastFramesDecoded=0,this._lastDecodeAdvanceAt=0,this._decodeDeathHandled=!1;let t=this._generation;this._mediaMonitorTimer=setInterval(()=>{t!==this._generation||this._intentionalDisconnect||this._sampleMediaLiveness(t)},e)}_stopMediaMonitor(){this._mediaMonitorTimer&&(clearInterval(this._mediaMonitorTimer),this._mediaMonitorTimer=null)}async _sampleMediaLiveness(e){if(this._consumers.size===0)return;let t=0,r=null;for(let n of this._consumers.values()){let a=await Ac(n);t+=a.total,a.framesDecoded!==null&&(r=(r??0)+a.framesDecoded)}if(e!==this._generation||this._intentionalDisconnect)return;let i=Date.now();if(t>this._lastInboundTotal){this._lastInboundTotal=t,this._lastInboundAdvanceAt=i,t>0&&(this._mediaEverFlowed=!0),this._checkDecodeLiveness(r,i);return}this._mediaEverFlowed&&(this._mediaDeathHandled||i-this._lastInboundAdvanceAt>=this._mediaStallTimeoutMs()&&(this._mediaDeathHandled=!0,this._renegotiate()))}_checkDecodeLiveness(e,t){if(e!==null){if(!this._decodeSignalSeen){this._decodeSignalSeen=!0,this._lastFramesDecoded=e,this._lastDecodeAdvanceAt=t;return}if(e>this._lastFramesDecoded){this._lastFramesDecoded=e,this._lastDecodeAdvanceAt=t;return}this._decodeDeathHandled||t-this._lastDecodeAdvanceAt>=this._mediaStallTimeoutMs()&&(this._decodeDeathHandled=!0,this._renegotiate())}}_renegotiate(){this._intentionalDisconnect||this._reconnectTimer||(this._stopMediaMonitor(),this._setState("renegotiating"),this._attemptReconnect())}recover(){if(this._intentionalDisconnect||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._reconnectTimer)return;if(this._reconnectAttempts>=cn){this._setState("failed"),this._emitError(new Error(`Failed after ${cn} attempts`));return}let r=t?0:on[Math.min(this._reconnectAttempts,on.length-1)];this._reconnectAttempts++,this._state!=="renegotiating"&&this._setState("reconnecting"),this._reconnectTimer=setTimeout(async()=>{this._reconnectTimer=null,this._cleanupMedia();try{await this.connect(e??this._lastStartOptions)}catch(i){if(i instanceof Error&&i.message==="TransportSession: connect cancelled")return;this._attemptReconnect(e)}},r)}_connectUrls(){let e=[],t=r=>{if(!r)return;let i=/\/ws\/rtc\/[^/?#]+/.test(r),n=this._sessionId&&!i?`${r}${r.includes("?")?"&":"?"}sessionId=${encodeURIComponent(this._sessionId)}`:r;e.includes(n)||e.push(n)};t(this._options.url);for(let r of this._options.fallbackUrls??[])t(r);return e}_connectOnce(e,t,r){return new Promise((i,n)=>{let a=!1,o=!1,c=null,d=new WebSocket(e);this._ws=d;let p=()=>this._ws!==d||t!==this._generation,l=f=>{o||(o=!0,c&&clearTimeout(c),this._cancelPendingDial===u&&(this._cancelPendingDial=null),n(f))},u=f=>{try{d.close()}catch{}l(f)};this._cancelPendingDial=u,c=setTimeout(()=>{try{d.close()}catch{}l(new Error("TransportSession: connect timed out"))},Ec),d.onopen=()=>{if(!o){if(p()){try{d.close()}catch{}l(new Error("TransportSession: connect superseded during dial"));return}a=!0,c&&clearTimeout(c),this._multiplexer=new Qe(d),d.send(JSON.stringify(this._startMessage(r))),this._flushStreamSubscribes(),this._scheduleReconnectBudgetReset(),this._setState("connected"),this._liveReached||this._setPhase("connecting"),this._emitter.emit("connected"),o=!0,this._cancelPendingDial===u&&(this._cancelPendingDial=null),i()}},d.onerror=()=>{a||l(new Error("WebSocket connection error"))},d.onclose=()=>{if(!a){l(new Error("WebSocket closed before connecting"));return}p()||(this._clearReconnectBudgetReset(),c&&clearTimeout(c),this._setState("disconnected"),this._intentionalDisconnect||(this._emitter.emit("disconnected"),this._attemptReconnect(r)))},d.onmessage=f=>{if(!(this._ws!==d||t!==this._generation)&&typeof f.data=="string")try{this._handleMessage(JSON.parse(f.data))}catch(m){this._emitter.emit("error",m instanceof Error?m:new Error(String(m)))}}})}_startMessage(e){let t={type:"start",video:e?.video??{width:854,height:480,frameRate:16}};return e?.prompt&&(t.prompt=e.prompt),e?.cameraControl&&(t.camera_control=e.cameraControl),e?.args&&(t.args=e.args),e?.app&&(t.app=e.app),e?.functionName&&(t.function=e.functionName),e?.role&&(t.role=e.role),this._options.orgId&&(t.orgId=this._options.orgId),this._options.jwt&&(t.jwt=this._options.jwt),this._options.authProvider&&(t.authProvider=this._options.authProvider),t}_cleanupSocket(){if(this._clearReconnectBudgetReset(),!this._ws)return;let e=this._ws;this._ws=null;try{e.close()}catch{}}_scheduleReconnectBudgetReset(){this._clearReconnectBudgetReset(),this._reconnectAttempts!==0&&(this._stableResetTimer=setTimeout(()=>{this._stableResetTimer=null,this._reconnectAttempts=0},Lc))}_clearReconnectBudgetReset(){this._stableResetTimer&&(clearTimeout(this._stableResetTimer),this._stableResetTimer=null)}_cleanupDataChannels(){for(let e of this._dataProducers.values())try{e.close()}catch{}this._dataProducers.clear(),this._dataProducerPromises.clear();for(let e of this._dataConsumers.values())try{e.close()}catch{}this._dataConsumers.clear();for(let e of this._pendingDataProduce.values())try{e.reject(new Error("TransportSession: disconnected"))}catch{}this._pendingDataProduce.clear()}_cleanupMedia(){this._stopMediaMonitor();for(let e of this._consumers.values())try{e.close()}catch{}if(this._consumers.clear(),this._cleanupDataChannels(),this._audioProducer){try{this._audioProducer.close()}catch{}this._audioProducer=null}if(this._clearRecvIceRestart(),this._clearSendIceRestart(),this._recvTransport){try{this._recvTransport.close()}catch{}this._recvTransport=null}if(this._sendTransport){try{this._sendTransport.close()}catch{}this._sendTransport=null}this._pendingProduce&&(clearTimeout(this._pendingProduce.timeoutId),this._pendingProduce=null),this._device=null,this._tracks.clear(),this._tracksByName.clear(),this._multiplexer&&(this._multiplexer.dispose(),this._multiplexer=null)}_send(e){!this._ws||this._ws.readyState!==WebSocket.OPEN||this._ws.send(JSON.stringify(e))}_setState(e){this._state!==e&&(this._state=e,this._emitter.emit("stateChange",e))}_setPhase(e,t){e==="live"&&(this._liveReached=!0);let r={name:e};t?.queue&&(r.queue=t.queue),t?.runtime&&(r.runtime=t.runtime),an(e)?(this._wakingSince??=Date.now(),r.wakingSince=this._wakingSince):this._wakingSince=void 0,this._requestId&&(r.requestId=this._requestId),this._sessionId&&(r.sessionId=this._sessionId),t?.error&&(r.error=t.error),this._phase=r,this._emitter.emit("phase",r)}reportAdmission(e){if(e.requestId&&(this._requestId=e.requestId),this._lastServerStatus=e.status,this._liveReached||this._phase.name==="ended"||this._phase.name==="error")return;let{runtime:t,queue:r}=e;if(t?.state==="unavailable"){this._setPhase("unavailable",{runtime:t});return}if(t?.state==="starting"){this._setPhase("provisioning",{runtime:t});return}if(t?.state==="busy"||e.status==="queued"){this._setPhase("queued",{queue:r,runtime:t});return}this._setPhase("provisioning")}_emitError(e,t){this._setPhase("error",{error:{reason:e.message,code:t,kind:"transport-failed"}}),this._emitter.emit("error",e)}reportAllocationFailure(e,t){this._setPhase("error",{error:{reason:e.message,code:"allocation-failed",kind:"create-failed",httpStatus:t}}),this._emitter.emit("error",e)}};function mn(s){return new Promise(e=>setTimeout(e,s))}function Oc(){return Xi()}async function Ac(s){if(typeof s.getStats!="function")return{total:0,framesDecoded:null};let e;try{e=await s.getStats()}catch{return{total:0,framesDecoded:null}}let t=0,r=null,i=n=>{if(!n||typeof n!="object")return;let a=n;if(a.type==="inbound-rtp"){let o=typeof a.bytesReceived=="number"?a.bytesReceived:0,c=typeof a.packetsReceived=="number"?a.packetsReceived:0;t+=o+c,typeof a.framesDecoded=="number"&&(r=(r??0)+a.framesDecoded)}};if(e instanceof Map)for(let n of e.values())i(n);else if(Array.isArray(e))for(let n of e)i(n);else e&&typeof e.forEach=="function"&&e.forEach(i);return{total:t,framesDecoded:r}}function Nc(s){if(!s||typeof s!="object")return;let e=s.epoch,t=typeof e=="number"?e:Number(e);return Number.isFinite(t)?t:void 0}var vn=require("y-websocket"),cs=require("y-protocols/awareness"),ds=1;function wn(s){let e=new URL(s);return`${e.protocol}//${e.host}/doc`}function yn(s){let e=s.WebSocketPolyfill??globalThis.WebSocket;if(!e)throw new Error("[urun] no WebSocket implementation available for the yjs doc provider (browser global missing and no WebSocketPolyfill passed)");return(t,r,i)=>{let n=`${s.sessionId}/${t}`,a=new vn.WebsocketProvider(s.serverUrl,n,r,{awareness:i,params:{dsv:String(ds),...s.token?{token:s.token}:{}},WebSocketPolyfill:e,disableBc:!0});return{get awareness(){return a.awareness},get synced(){return a.synced},onSync(o){let c=d=>o(d);return a.on("sync",c),()=>a.off("sync",c)},ensureConnected(){a.wsconnected||a.connect()},destroy(){a.destroy()}}}}var os=class{constructor(e,t,r){this._name=e;this._doc=t;this.awareness=r}_name;_doc;awareness;_inner=null;_innerUnsub=null;_syncHandlers=new Set;_destroyed=!1;get synced(){return this._inner?.synced??!1}onSync(e){return this._syncHandlers.add(e),()=>this._syncHandlers.delete(e)}attach(e){if(!(this._destroyed||this._inner)&&(this._inner=e(this._name,this._doc,this.awareness),this._innerUnsub=this._inner.onSync(t=>{for(let r of[...this._syncHandlers])r(t)}),this._inner.synced))for(let t of[...this._syncHandlers])t(!0)}ensureConnected(){this._inner?.ensureConnected?.()}destroy(){this._destroyed=!0,this._innerUnsub?.(),this._innerUnsub=null,this._inner?.destroy(),this._inner=null,this._syncHandlers.clear()}},or=class{_target=null;_bridges=[];connect=(e,t,r)=>{let i=new os(e,t,r);return this._target?i.attach(this._target):this._bridges.push(i),i};get connected(){return this._target!==null}setTarget(e){if(this._target)return;this._target=e;let t=this._bridges.splice(0);for(let r of t)r.attach(e)}};var gt=pr(require("yjs"));function _t(s){if(s===null||typeof s!="object"||Array.isArray(s))return!1;let e=Object.getPrototypeOf(s);return e===Object.prototype||e===null}var cr="$bytes";function jc(s){return s instanceof Uint8Array||s instanceof ArrayBuffer}function Fc(s){if(!_t(s))return!1;let e=Object.keys(s);return e.length===1&&e[0]===cr&&typeof s[cr]=="string"}function qc(s){return s instanceof ArrayBuffer?new Uint8Array(s):s}function $c(s){if(typeof Buffer<"u")return Buffer.from(s).toString("base64");let e="";for(let t=0;t<s.length;t++)e+=String.fromCharCode(s[t]);return btoa(e)}function zc(s){if(typeof Buffer<"u")return new Uint8Array(Buffer.from(s,"base64"));let e=atob(s),t=new Uint8Array(e.length);for(let r=0;r<e.length;r++)t[r]=e.charCodeAt(r);return t}function ps(s){if(jc(s))return{[cr]:$c(qc(s))};if(Array.isArray(s))return s.map(ps);if(_t(s)){let e={};for(let[t,r]of Object.entries(s))e[t]=ps(r);return e}return s}function mt(s){if(Fc(s))return zc(s[cr]);if(Array.isArray(s))return s.map(mt);if(_t(s)){let e={};for(let[t,r]of Object.entries(s))e[t]=mt(r);return e}return s}var bn=Symbol("urun:doc:path-absent");function Bc(s,e){let t=e.split("."),r=s;for(let i of t){if(r===null||typeof r!="object"||!(i in r))return bn;r=r[i]}return r}function Uc(s,e){return s===e?!0:JSON.stringify(s)===JSON.stringify(e)}function ls(s,e){for(let[t,r]of Object.entries(e))if(_t(r)){let i=s.get(t);if(!(i instanceof gt.Map)){let n=i;i=new gt.Map,s.set(t,i),_t(n)&&ls(i,n)}ls(i,r)}else{if(Uc(s.get(t),r))continue;s.set(t,r)}}var Wc=Symbol("urun:doc:local"),dr=class{_doc=new gt.Doc;_root=this._doc.getMap("session");_awareness=new cs.Awareness(this._doc);_listeners=new Set;_key;_sessionId;_connection=null;_connUnsub=null;_synced;_syncWaiters=new Set;_texts=new Map;_observer=()=>this.notify();constructor(e,t,r){this._key=e,this._sessionId=t,this._root.observeDeep(this._observer),r?(this._connection=r(e,this._doc,this._awareness),this._synced=this._connection.synced,this._connUnsub=this._connection.onSync(i=>{i&&this._markSynced()}),this._synced&&this._markSynced()):this._synced=!0}get awareness(){return this._awareness}setSessionId(e){this._sessionId=e}get synced(){return this._synced}ensureConnected(){this._connection?.ensureConnected?.()}onSynced(e){return this._synced?(e(),()=>{}):(this._syncWaiters.add(e),()=>this._syncWaiters.delete(e))}set(e){e=ps(e),this.applyPatch(e)}get(e,t){let r=this.snapshot();if(!e)return mt(r);let i=Bc(r,e);return i===bn?t:mt(i)}on(e,t){return this._listeners.add(t),()=>this._listeners.delete(t)}text(e){let t=this._texts.get(e);return t||(t=new us(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(()=>{ls(this._root,e)},Wc)}snapshot(){return this._root.toJSON()}notify(){let e=mt(this.snapshot());for(let t of this._listeners)t(e)}},us=class{constructor(e){this._ytext=e;this._observer=t=>{for(let r of t.delta)if(typeof r.insert=="string"&&r.insert.length>0){let i=r.insert;for(let n of this._delta)n(i)}},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 Sn(s){return{get clientId(){return s.clientID},set(e){s.setLocalState(e)},setField(e,t){s.setLocalStateField(e,t)},getLocal(){return s.getLocalState()??null},getStates(){return s.getStates()},on(e,t){let r=()=>t(s.getStates());return s.on("change",r),r(),()=>s.off("change",r)}}}